01 — Mask reveal

Type arrives from behind its own edge.

Each word sits in an overflow:hidden box and slides up from 110%. The mask is the parent, not a gradient — so the letters are genuinely clipped by the line above, the way a printed slug would be. Staggered by index, eased on a long expo curve.

02 — Decode

Characters resolve from random glyphs, left to right, each settling at its own moment. One requestAnimationFrame loop over a string — no library, no per-character DOM node churn.

It inverts itself.

Ink
Accent
Paper
Blue
Ink
03 — What that was

mix-blend-mode: difference on a sticky headline. Four panels scroll underneath and the type inverts against each one — white over ink, ink over paper, and the exact complement over the accent. No colour swapping, no scrim, no JavaScript touching it. Three lines of CSS.

04 — Weight as motion
Hierarchyis notsize aloneit is weightand rhythm

Weight, opacity and offset move together on scroll. The eye reads the heaviest line first regardless of where it sits — which is why a weight ramp beats a size ramp when vertical space is tight.