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.
—
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.
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.