diff --git a/src/app/globals.css b/src/app/globals.css index a3e673edc..192ee4610 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -252,6 +252,19 @@ * { @apply border-border outline-ring/50; } + /* + * Reserve the scrollbar gutter on the document root so the body-scrolled + * shells (login / register / onboarding / standalone legal pages) keep a + * fixed content width whether or not the page overflows. Without it a tall + * page paints the bar and a short one hides it, and any `mx-auto` content + * recentres a few px sideways on navigation. The authenticated app shell + * scrolls inside its own `
` (`flex h-dvh` locks the body height, so + * the document never scrolls there) and reserves its own gutter — no + * double gutter results. + */ + html { + scrollbar-gutter: stable; + } body { @apply bg-background text-foreground; } diff --git a/src/components/layout/auth-shell.tsx b/src/components/layout/auth-shell.tsx index fb63cfbf0..e0c9e7aad 100644 --- a/src/components/layout/auth-shell.tsx +++ b/src/components/layout/auth-shell.tsx @@ -172,7 +172,16 @@ export function AuthShell({ children }: { children: React.ReactNode }) {
{/* v1.4.33 IW9 — container normalised on `max-w-screen-xl`