Site 25 of 25 · Build Notes
How a twelve-minute film that doesn't exist got a festival page that does — four SVG stills, one long night, and a sunrise timed to your scroll.
Stray is a fictional animated short: a dog crosses a city between midnight and dawn, and the film says nothing out loud. The page is its festival site, and its single job is to make you feel like you watched the film. So the page is the film: scroll position is the playhead, a corner timecode runs from 00:00 to the film's exact 12:04 runtime, four letterboxed "stills" carry the story, and the credits roll when — and only when — you've earned the sunrise.
Everything is borrowed light. The base is a cold city-night teal; every warm note comes from a named source — sodium lamps, one neon sign, and finally the sun.
The page background follows this ramp as you scroll — cold teal, a rose-tinted small-hours plum, pre-dawn mauve, then full dawn for the credits.
Each of the four stills — alley, overpass, laundromat, rooftop — is a stack of four inline SVGs (sky, far, mid, near), each slightly overscanned and slid at a different rate by a scrubbed GSAP ScrollTrigger, so every frame has real depth as it passes the viewport. The scenes are lit, not drawn: almost every shape is near-black, and the image is made by a handful of gradients — a sodium cone, a window's spill on wet pavement, a dawn halo. The dog himself is one set of shared <defs> silhouettes (walking, sitting, standing) reused across scenes with a two-copy trick: the same shape stamped first in light, offset toward the light source, then in near-black on top — a 3px rim light for free. His arc is told in poses: tail low in the alley, sitting at the laundromat glass, tail up at dawn.
Around the stills: a canvas grain overlay redraws a noise tile at ~9fps at half resolution (chunkier, more filmic, cheaper); the corner timecode maps total scroll to 17,376 frames at 24fps; and the credits are a real crawl — the section pins for 3,400px while the roll drives past a rising sun.
mix-blend-mode:difference so it survives the night-to-dawn flip without a second theme..hero-street svg was inflating the walking dog to 816px wide. Facts grid had an orphan cell on the last row — switched to an explicit 3-column grid with translucent cells so the warming background reads through. Deepened the laundromat interior a full value step so the window glow feels like heat, not paper.transform-box:fill-box so sheets pivot on their own pegs instead of the viewBox origin, and gave them sunlit top edges. The timecode ends at 00:12:03:23 — one frame shy of the runtime — exactly when the footer arrives. One micro-interaction: hover a still and its slate (scene label and timecode) lights up sodium, like picking a frame off the bench.document.hidden.The dog is drawn as flat mid-century-style silhouettes — primitives fused in one fill — which keeps him art-directable but means his poses live or die by outline. The sitting pose reads "looking up at the sign," which turned out better than the brief I gave myself. If the film existed, I'd watch it.