You walk into a fictional film club’s darkroom mid-session: red safelight, six prints hanging on the wire, each one developing — paper-white, then ghost, then image — as you reach it. Every artifact is simulated live in the browser, on top of ordinary digital photographs, and the page says so.
That a scene beats a page, and that “film look” effects can still be honest, cheap, and reversible. The darkroom is the default; one button turns the lights on and hands back the plain daylight essay with clean scans. Nothing is baked into an image file, and the copy carries real photographic facts — actual film stocks, why CineStill 800T halates, why a safelight is red — instead of vibes.
brightness(1.6) contrast(.06) down to normal over ~3 seconds). An IntersectionObserver — or your hover — adds one class, and the print resolves from blank sheet through ghost to image. Reduced-motion and no-JS visitors always get developed prints.::before, 100vw) by two pseudo-element pegs, tilted a degree either way, staggered left and right down the scroll.prefers-reduced-motion.<canvas> at half resolution tiles a 144-pixel random-noise tile, regenerated at ~12 fps for a film-like flicker, composited with mix-blend-mode: overlay at low opacity. It pauses when the tab is hidden and renders a single static frame under prefers-reduced-motion.mix-blend-mode: screen — bright areas bloom, shadows stay put. An approximation, and named as one. (It blooms in only after the print develops.)<dialog>, so Escape, focus handling, and the backdrop come from the platform. Arrow keys move between frames.The full recreation prompt — the exact fonts, palette hexes, artifact recipe, and quality bar — is in the showroom vault.