
Scene 01
The long dissolve
Poster paints instantly, the loop slips in behind it.
Rolling the reel...
Now screening
A short muted loop plays behind a poster that painted first. The film is atmosphere; every word you need lives in the text layer.
The opener is a trailer, not a slide. But the trailer must never cost the load — the poster leads, the video follows.
The Reel
A left-anchored scrim keeps the copy legible while the footage breathes behind it. Same loop, only in view, only when it earns its bytes.
The poster is the LCP; the video is progressive enhancement, played only in view and never with sound.
A small AVIF poster paints as the LCP. The <video> carries preload=none, so nothing heavy blocks the first frame.
An IntersectionObserver calls load() and play() only when the hero enters view, and pauses it when it leaves.
muted + loop + playsInline is what lets browsers autoplay at all. The loop is short and seams without a jump-cut.
prefers-reduced-motion and Save-Data never autoplay — the poster still simply stays. Mobile can show poster only.
<video poster="poster.avif" muted loop playsInline preload="none" aria-hidden>
<source src="aurora.webm" type="video/webm" />
<source src="aurora.mp4" type="video/mp4" />
</video>
// play only in view
new IntersectionObserver(([e]) =>
e.isIntersecting ? v.play() : v.pause()
).observe(v);A near-black base, a raised surface, one warm gold pulled from the footage, and steel for the quiet parts.

Scene 01
Poster paints instantly, the loop slips in behind it.

Scene 02
Slow motion carries the mood; nothing jump-cuts.

Scene 03
Below the hero, quiet solid sections take over.
Gold for the one action, frosted translucency for everything else, so controls never hide the footage.