You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix header hydration mismatch: Removed resolveComponent('MastHeader') guard from ui/layouts/default.vue. Nuxt 4 registers components at compile time, not via app.component(), so resolveComponent always returns a string at runtime — the header rendered on the server but was removed after hydration, shifting content up by the header height. Layout now renders MastHeader / MastFooter unconditionally.
Fix ~85px layout shift from announcers inside CSS grid: NuxtAnnouncer and NuxtRouteAnnouncer were direct children of the mastmain CSS grid. Before their position: absolute CSS loaded, they auto-placed as grid rows, pushing basesection down ~85px then back up. Removed both components (unneeded boilerplate).
Fix ThemePickerMenu hidden behind header: Raised z-[60] so it sits above the header's z-50.
Fix ThemePickerMenu pop-in delay: Added #fallback slot with a matching icon placeholder so the button is visible immediately during SSR/hydration.
Docs
Added docs/layout-shift-causes.md — catalogue of all 10 CLS root causes found and fixed, with rules for avoiding them going forward.