e4f0c66d7b
New /todo-cards page (Hero, How-it-works, Focus, Testimonials, Pricing) built with the fluid clamp() token system (app/lib/fluid.ts) and scroll-reveal animations (app/components/Reveal.tsx), matching styling consistency with /challenge's testimonial section. Navbar: page-aware active state and anchor-link navigation from any route (not just "/"), fixed logo click to actually navigate instead of silently rewriting the URL, fluid nav text size, custom hash-scroll handling for cross-page anchor links. Hero: responsive breakpoint fix for the text/image split at Tablet widths, entrance animation for the brand's orange dot, removed a red dot artifact from hero.png. Also includes prior uncommitted work on About/Blog/Newsletter/Footer and the cart lib (app/lib/cart.ts). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
64 lines
1.5 KiB
TypeScript
64 lines
1.5 KiB
TypeScript
import type { Metadata } from "next";
|
||
import { Inter, Playfair_Display, Caveat, Lora } from "next/font/google";
|
||
import "./globals.css";
|
||
import { Navbar } from "./components/Navbar";
|
||
|
||
const inter = Inter({
|
||
variable: "--font-inter",
|
||
subsets: ["latin"],
|
||
weight: ["400", "500", "600", "700"],
|
||
});
|
||
|
||
const playfair = Playfair_Display({
|
||
variable: "--font-playfair",
|
||
subsets: ["latin"],
|
||
weight: ["600", "700", "800"],
|
||
});
|
||
|
||
const caveat = Caveat({
|
||
variable: "--font-caveat",
|
||
subsets: ["latin"],
|
||
weight: ["700"],
|
||
});
|
||
|
||
const lora = Lora({
|
||
variable: "--font-lora",
|
||
subsets: ["latin"],
|
||
weight: ["400", "600"],
|
||
});
|
||
|
||
export const metadata: Metadata = {
|
||
metadataBase: new URL("https://einfach-produktiv.mk360.de"),
|
||
title: {
|
||
default: "einfach produktiv. – Werkzeuge und Impulse für einen leichteren Alltag",
|
||
template: "%s | einfach produktiv.",
|
||
},
|
||
description: "Werkzeuge, Impulse und ein Blog für mehr Klarheit im Alltag.",
|
||
openGraph: {
|
||
siteName: "einfach produktiv.",
|
||
locale: "de_DE",
|
||
type: "website",
|
||
},
|
||
twitter: {
|
||
card: "summary_large_image",
|
||
},
|
||
};
|
||
|
||
export default function RootLayout({
|
||
children,
|
||
}: Readonly<{
|
||
children: React.ReactNode;
|
||
}>) {
|
||
return (
|
||
<html
|
||
lang="de"
|
||
className={`${inter.variable} ${playfair.variable} ${caveat.variable} ${lora.variable} h-full antialiased`}
|
||
>
|
||
<body className="min-h-full flex flex-col">
|
||
<Navbar />
|
||
{children}
|
||
</body>
|
||
</html>
|
||
);
|
||
}
|