- Shipped
- September 12, 2026 at 10:24 PM UTC
- Author
- Kamo
- Commit
- d94c098
Between pages the main view area (never NavTop or NavPri) is now covered in the organization's primary colour with its full logo centred on it, painted with the Behavior & Labeling "Loading Screen Logo Overlay" when one is set. It drops in the same task as the click that starts a navigation, is painted by the server in the first frame of every document so a reload and a click look the same, and is taken away the moment the new route has rendered. Tile Dissolve is the reveal: the cover, colour and logo as one image, cut into 50 px tiles that lift, turn, round their corners and fade from the top-left corner to the bottom-right on a seeded, jittered diagonal wave, normalised so it takes about 1.2 s on any screen. - Navigation is detected through Next's onRouterTransitionStart (instrumentation-client.ts), which reports every Link, push, replace and back/forward synchronously. A capture-phase listener covers full-document anchors, and a click that turns out not to navigate is undone before it is painted. The rules are pure: every URL change covers, tab switches included; filter, search and selection replaces stay silent; the hash never counts. - The reveal waits for a commit probe rendered after the page, and app/loading.tsx now only holds the cover while a route's Suspense fallback is up. - Tiles are drawn by a Web Worker on an OffscreenCanvas, because the reveal runs while the new page is mounting and a main-thread animation stutters through exactly that. The same engine runs on the main thread when a worker or a CORS-clean logo is unavailable. The worker paints frame 0 before the DOM cover hides and the clock starts only after, so the handoff has no seam. - It cannot stick: a watchdog reveals after 12 s without a commit, a reveal that cannot be drawn fades, a CSS failsafe clears a cover no script took over, and reduced motion gets a 180 ms fade. - The cover spec is validated, kept per tab in sessionStorage, and applied before first paint by a blocking head script, so the shared host never flashes the platform's branding. - The platform's transition is followed live over **************** LoadingContext, LoadingManagerClient, NavigationInterceptor, LoadingStatus and useNavigationLoading are gone; /validate and /logout keep LoadingScreen, having no shell to cover.