Repository navigation
feat(background): film strip background, frosted glass, hero under the navbar - #44
Merged
Merged
Conversation
Coiled film strips and rising bokeh from the v2 Claude Design file, drawn in a worker where OffscreenCanvas allows and on the main thread otherwise, with the muted text contrast cap, reduced motion and hidden tab pause. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PageBackground renders the teal gradient and vignette as the first paint and starts the film strip scene once the browser is idle. The point wave background, its tokens and its tests are removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The camera is fixed, its view is computed once, and no pointer listener or worker message remains, on any device. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A stored scene time read and saved through sessionStorage, validated and silent on every storage failure, and a clock that starts from a given time and reports it once a second while running and once when it stops. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The worker forwards the clock's reports, the page keeps the latest in sessionStorage, and a later full load or a rebuild across the breakpoint carries on from it without the fade. The showcase still frame leaves the stored time alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The footer now sits straight on the page background with no border or background, and its test fails if either appears anywhere inside it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…startFilmScene Each thread's start is its own function, fed the scene's start state and a set of events bound to the run that made them, so startFilmScene keeps only the page's own state: the canvas, the clock time, the budget and the run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Terminating the worker on a rebuild dropped its clock's final report, so the new scene started from the page's copy, up to a second of real time old. The page now posts a rebuild with a fresh canvas instead, and the worker starts the new scene from the time its old clock reported as it stopped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nvas The stored time, the fade on a first load only, the unfaded rebuild and the showcase still frame staying out of storage are now checked end to end through PageBackgroundCanvas, not only piece by piece. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lain the frame length Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lib/color/contrast.ts now holds the channel parsers, relative luminance and the contrast ratio, so the glass contrast guard no longer depends on the WebGL background module and its tests stop re-parsing colours by hand. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… page-* backdrop- meant both the page background and a title's TMDB artwork. The gradient, the vignette and their four tokens are now page-gradient, page-vignette and --color-page-*, leaving backdrop to the artwork. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each plate role now sets only its colour, frost and blur, and one shared glass-plate-frost utility turns them into the see-through plate and its blur. The compiled CSS for every role is unchanged in value. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The scrim's comment claimed the contrast glass-contrast.test.ts proves, but nothing checked it. White artwork under the scrim's faintest shade across the bar now has to stay at or below the page background's peak. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The token restated the navbar's height as a bare 6.5rem and 3.5rem. It is now written from the rows, gap and padding, and the navbar test fails if the bar's classes stop matching those parts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The film strip and continuity plans note the first frame fade, the rebuild message, the tuned gradient and the page-* names. The title backdrop under the navbar gets its own plan, and the footer plan records the dropped hairline. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
This PR swaps the old ambient background for the film strip scene from the v2 Claude Design file: three coiled film strips and rising bokeh over a teal gradient, drawn in hand written WebGL2. It also makes controls, panels and overlays frosted glass, so the scene shows through them, blurred. On title pages, the backdrop image now reaches up behind the navbar.
Why
You asked for the new background design and for glass surfaces that let it show through. The decisions are recorded in three plans:
Changes
Film strip background
lib/film-scene/module (budget, layout, palette, matrices, shaders, scene, clock, run, messages, worker, start, continuity). It replaceslib/backdrop/and adds no new dependency (no three.js).strips + 1draw calls. The film frame is drawn procedurally in the fragment shader, and the bokeh motion runs in the vertex shader.PageBackground(Server Component) paints the gradient and vignette as CSS, so they are the first paint and the fallback.PageBackgroundCanvasimports the scene only when the browser is idle.OffscreenCanvassupports WebGL2, and on the main thread otherwise. Worker messages are validated with Zod.text-muted-foregroundkeeps 4.5:1. The bokeh usesMAXblending, so overlapping discs cannot add up past that cap.sessionStorage(bestats:film-scene), so a reload or a rebuild across the breakpoint carries on without the fade. The/showcasestill frame never touches that key.Frosted glass
--frost-*opacity tokens and--blur-control/panel/overlaytokens. Theglass-plate*utilities now blend the plate colour with transparency and setbackdrop-filter, with the-webkit-prefix included.glass-plate-floatfor the popover, quick search and toasts. Newplate-solidfor slots over poster artwork, missing poster tiles and skeletons, which stay opaque.backdrop-filtersupport all bring back the opaque plates with no blur.app/glass-contrast.test.tscomposites each plate over its worst background and fails on any text token below 4.5:1.Title hero and chrome
--navbar-height). Abackdrop-scrimkeeps the bar readable, and the navbar getsrelative z-20.--backgroundgradients, so it dissolves into the film background rather than ending in a black band. The skeleton matches the new geometry.Docs and showcase
/showcasegets a Page background section (token swatches and the still frame) and an updated plate rule section showing frosted, solid and fallback surfaces.components/AGENTS.mdrewrites the background, plate and blur rules and ends the personal cyan exception for the background.How to test / verify
pnpm typecheck && pnpm lint && pnpm test && pnpm build.rg -i "lib/backdrop|ambient-(canvas|background)|backdrop-wave|backdrop-dust"finds nothing outsideprompts/.pnpm dev, open/shows. The gradient paints first, then the strips and bokeh fade in. Moving the mouse changes nothing.prefers-reduced-motion: reduce: the scene freezes. Hide the tab and come back: it resumes without a jump.prefers-reduced-transparency: reduce, thenprefers-contrast: more: the surfaces turn solid./showcaseand look at the Page background and plate rule sections.Risk & rollout
No migrations, no environment values, no flags, and no new runtime dependency. Every change is client side visuals or CSS.
backdrop-filtercreates a containing block and a stacking context, which could affect fixed children inside plated elements. Base UI portals its popups.Notes for reviewers
lib/film-scene/scene.ts.gl.clearrespectsdepthMask, and the bokeh pass leaves it off. Without turning it back on before each clear, strips flickered and a redrawn still frame lost them.scene.test.tsguards this.globals.css(control 65%, panel 60%, sheet 75%, float 90%, score 65%) come fromglass-contrast.test.ts. Please don't lower them without rerunning it.prompts/ambient-background.mdis kept as history, with a pointer to the new plan.🤖 Generated with Claude Code