Exhibit 05·A — The Utterance · per-property parameters + tween keyframes

EVERY EASE IS A VOICE.

One animate() call, three clocks: y rises on outQuint for 850 ms, rotate unwinds on outCubic for 1300, opacity fades in over 400 — while delay: stagger(24, { from: 'first' }) reads the line out left to right, the way a voice would. Only the last word gets the elastic settle.

Exhibit 05·B — The Easing Choir · easing catalogue

Twelve ways to arrive. Choose a voice and the glyph falls to the floor and climbs home with exactly that ease — same distance, same brief — while the ultramarine line plots its position against time. The ease is the only variable; the ease is the entire performance.

HOME FLOOR TIME →

Exhibit 05·C — Keyframe sentence · keyframes array

One word on a loop through a four-step keyframes: […] journey — rise, tilt, snap back, rest. The score beside the stage is generated from the same array the animation consumes; the current step reads in ultramarine.

AGAIN

Exhibit 05·D — Chaos, contained · function-based values

Hold the page at arm’s length and this paragraph sits perfectly still. Lean in. Every letter is drifting by a hair — a pixel of travel, a degree of tilt, a private clock — never enough to break the line it lives on.

Every character runs x, y and rotate from () => utils.random(…) on its own randomized duration and phase, out and back, forever. Amplitude is capped near one pixel: at reading distance it holds still; up close it has a pulse. Restraint is the exhibit.