responsive design
This commit is contained in:
parent
338f04fda3
commit
27fb01f619
4 changed files with 48 additions and 10 deletions
|
|
@ -14,7 +14,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
|
||||||
<Nav />
|
<Nav />
|
||||||
<main className="min-h-screen">{children}</main>
|
<main className="min-h-screen">{children}</main>
|
||||||
<footer className="border-t border-[var(--warm)] mt-24 py-10 px-6">
|
<footer className="border-t border-[var(--warm)] mt-24 py-10 px-6">
|
||||||
<div className="max-w-6xl mx-auto flex items-center justify-between text-sm text-[var(--muted)]">
|
<div className="max-w-6xl mx-auto flex flex-col sm:flex-row items-start sm:items-center justify-between gap-2 text-sm text-[var(--muted)]">
|
||||||
<span style={{ fontFamily: "'Syne', sans-serif", fontWeight: 600 }}>
|
<span style={{ fontFamily: "'Syne', sans-serif", fontWeight: 600 }}>
|
||||||
Kennzeichensammler
|
Kennzeichensammler
|
||||||
</span>
|
</span>
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ export default async function Home() {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Stats */}
|
{/* Stats */}
|
||||||
<div className="grid grid-cols-3 gap-4 mb-20">
|
<div className="grid grid-cols-3 gap-3 sm:gap-4 mb-20">
|
||||||
{[
|
{[
|
||||||
{ label: "Kennzeichen", value: stats.kennzeichen.toLocaleString("de") },
|
{ label: "Kennzeichen", value: stats.kennzeichen.toLocaleString("de") },
|
||||||
{ label: "Diplomatenkz.", value: stats.diplomaten.toLocaleString("de") },
|
{ label: "Diplomatenkz.", value: stats.diplomaten.toLocaleString("de") },
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ export default async function SammlungPage() {
|
||||||
<h1 style={{ fontFamily:"'Syne',sans-serif", fontWeight:800, fontSize:"2.25rem", letterSpacing:"-0.03em" }} className="text-[var(--ink)]">Meine Sammlung</h1>
|
<h1 style={{ fontFamily:"'Syne',sans-serif", fontWeight:800, fontSize:"2.25rem", letterSpacing:"-0.03em" }} className="text-[var(--ink)]">Meine Sammlung</h1>
|
||||||
</div>
|
</div>
|
||||||
<div className="border border-[var(--warm)] rounded-lg p-8 bg-white/40 mb-8">
|
<div className="border border-[var(--warm)] rounded-lg p-8 bg-white/40 mb-8">
|
||||||
<div className="flex items-end justify-between mb-4">
|
<div className="flex flex-wrap items-end justify-between gap-2 mb-4">
|
||||||
<div>
|
<div>
|
||||||
<div style={{ fontFamily:"'Syne',sans-serif", fontWeight:800, fontSize:"3rem", lineHeight:1 }} className="text-[var(--ink)]">{stats.total.toLocaleString("de")}</div>
|
<div style={{ fontFamily:"'Syne',sans-serif", fontWeight:800, fontSize:"3rem", lineHeight:1 }} className="text-[var(--ink)]">{stats.total.toLocaleString("de")}</div>
|
||||||
<div className="text-[var(--muted)] text-sm mt-1">von {stats.totalKz.toLocaleString("de")} Kennzeichen gesehen</div>
|
<div className="text-[var(--muted)] text-sm mt-1">von {stats.totalKz.toLocaleString("de")} Kennzeichen gesehen</div>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
"use client";
|
"use client";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { usePathname } from "next/navigation";
|
import { usePathname } from "next/navigation";
|
||||||
|
import { useState } from "react";
|
||||||
import clsx from "clsx";
|
import clsx from "clsx";
|
||||||
|
|
||||||
const links = [
|
const links = [
|
||||||
|
|
@ -13,18 +14,22 @@ const links = [
|
||||||
|
|
||||||
export default function Nav() {
|
export default function Nav() {
|
||||||
const path = usePathname();
|
const path = usePathname();
|
||||||
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<header className="sticky top-0 z-50 border-b border-[var(--warm)] bg-[var(--paper)]/90 backdrop-blur-sm">
|
<header className="sticky top-0 z-50 border-b border-[var(--warm)] bg-[var(--paper)]/90 backdrop-blur-sm">
|
||||||
<div className="max-w-6xl mx-auto px-6 h-14 flex items-center justify-between">
|
<div className="max-w-6xl mx-auto px-6 h-14 flex items-center justify-between">
|
||||||
<Link
|
<Link
|
||||||
href="/"
|
href="/"
|
||||||
style={{ fontFamily: "'Syne', sans-serif", fontWeight: 700, fontSize: 15, letterSpacing: "0em" }}
|
style={{ fontFamily: "'Syne', sans-serif", fontWeight: 700, fontSize: 15 }}
|
||||||
className="text-[var(--ink)] hover:text-[var(--accent)] transition-colors"
|
className="text-[var(--ink)] hover:text-[var(--accent)] transition-colors"
|
||||||
|
onClick={() => setOpen(false)}
|
||||||
>
|
>
|
||||||
Kennzeichensammler
|
Kennzeichensammler
|
||||||
</Link>
|
</Link>
|
||||||
<nav className="flex items-center gap-1">
|
|
||||||
|
{/* Desktop nav */}
|
||||||
|
<nav className="hidden sm:flex items-center gap-1">
|
||||||
{links.map((l) => (
|
{links.map((l) => (
|
||||||
<Link
|
<Link
|
||||||
key={l.href}
|
key={l.href}
|
||||||
|
|
@ -41,7 +46,40 @@ export default function Nav() {
|
||||||
</Link>
|
</Link>
|
||||||
))}
|
))}
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
{/* Mobile hamburger */}
|
||||||
|
<button
|
||||||
|
className="sm:hidden flex flex-col gap-1.5 p-2 -mr-2"
|
||||||
|
onClick={() => setOpen((o) => !o)}
|
||||||
|
aria-label="Menü"
|
||||||
|
>
|
||||||
|
<span className={clsx("block w-5 h-0.5 bg-[var(--ink)] transition-all origin-center", open && "rotate-45 translate-y-2")} />
|
||||||
|
<span className={clsx("block w-5 h-0.5 bg-[var(--ink)] transition-all", open && "opacity-0")} />
|
||||||
|
<span className={clsx("block w-5 h-0.5 bg-[var(--ink)] transition-all origin-center", open && "-rotate-45 -translate-y-2")} />
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Mobile menu */}
|
||||||
|
{open && (
|
||||||
|
<div className="sm:hidden border-t border-[var(--warm)] bg-[var(--paper)] px-4 py-3 flex flex-col gap-1">
|
||||||
|
{links.map((l) => (
|
||||||
|
<Link
|
||||||
|
key={l.href}
|
||||||
|
href={l.href}
|
||||||
|
onClick={() => setOpen(false)}
|
||||||
|
className={clsx(
|
||||||
|
"px-3 py-2.5 rounded-md text-sm transition-colors",
|
||||||
|
path === l.href
|
||||||
|
? "bg-[var(--ink)] text-[var(--paper)]"
|
||||||
|
: "text-[var(--muted)] hover:text-[var(--ink)] hover:bg-[var(--warm)]"
|
||||||
|
)}
|
||||||
|
style={{ fontFamily: "'Syne', sans-serif", fontWeight: 500 }}
|
||||||
|
>
|
||||||
|
{l.label}
|
||||||
|
</Link>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</header>
|
</header>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue