Fix app shell layout with stable top bar and dynamic nav offset.

Unified chrome keeps the home logo top-left, measures bottom nav height
for scroll clearance, and adds responsive content widths for mobile/desktop.
This commit is contained in:
2026-05-24 04:26:09 -06:00
parent 37836ec8a5
commit 91cced4c75
13 changed files with 291 additions and 58 deletions

View File

@@ -1,42 +1,27 @@
import { HomeLogoLink } from "@/components/layout/home-logo-link";
import { cn } from "@/lib/utils";
type AppPageHeaderProps = {
title: string;
description?: string;
eyebrow?: string;
wide?: boolean;
};
export function AppPageHeader({
title,
description,
eyebrow,
wide = false,
}: AppPageHeaderProps) {
return (
<header className="border-b-2 border-border bg-card/60 shadow-[var(--retro-shadow-sm)]">
<div
className={cn(
"mx-auto flex items-start justify-between gap-4 px-5 py-5",
wide ? "max-w-6xl" : "max-w-lg",
)}
>
<div className="min-w-0 flex-1">
{eyebrow ? (
<p className="mb-2 text-xs uppercase tracking-[0.2em] text-muted-foreground">
{eyebrow}
</p>
) : null}
<h1 className="text-sm">{title}</h1>
{description ? (
<p className="mt-2 text-xs leading-relaxed text-muted-foreground">
{description}
</p>
) : null}
</div>
<HomeLogoLink className="mt-0.5" />
</div>
<header className="mb-6 border-b-2 border-border bg-card/60 px-1 pb-5 shadow-[var(--retro-shadow-sm)]">
{eyebrow ? (
<p className="mb-2 text-xs uppercase tracking-[0.2em] text-muted-foreground">
{eyebrow}
</p>
) : null}
<h1 className="text-sm">{title}</h1>
{description ? (
<p className="mt-2 text-xs leading-relaxed text-muted-foreground">
{description}
</p>
) : null}
</header>
);
}