import Link from 'next/link'; import type { ReactNode } from 'react'; import { cn } from '@/lib/cn'; /** Page section with eyebrow + title + optional action. Spatial composition — not everything in a card. */ export function Section({ eyebrow, title, action, children, className, id }: { eyebrow?: string; title?: ReactNode; action?: { href: string; label: string }; children: ReactNode; className?: string; id?: string }) { return (
{(eyebrow || title) && (
{eyebrow &&

{eyebrow}

} {title &&

{title}

}
{action && ( {action.label} → )}
)} {children}
); } export function PageHeader({ eyebrow, title, lede, children, className }: { eyebrow?: ReactNode; title: ReactNode; lede?: ReactNode; children?: ReactNode; className?: string }) { return (
{eyebrow &&

{eyebrow}

}

{title}

{lede &&

{lede}

} {children}
); } /** Stat tile: big tabular number + label + optional hint. */ export function Stat({ label, value, hint, className, accent = false }: { label: string; value: ReactNode; hint?: ReactNode; className?: string; accent?: boolean }) { return (

{label}

{value}

{hint &&

{hint}

}
); } export function Container({ children, className, wide = false }: { children: ReactNode; className?: string; wide?: boolean }) { return
{children}
; }