Zephyr
ZEPHYR is a book of six weather poems — mistral, sirocco, chinook, harmattan, bora, zephyr — each spoken by the wind itself. The page has one job: make you feel the weather change when you turn the page. The background is not a picture of wind; it is a wind simulation you are standing in.
The entire viewport is a canvas flow field: roughly two thousand particles ride a curl-noise velocity field. A scalar potential ψ is built from two octaves of simplex noise; the velocity at any point is the perpendicular of its gradient (∂ψ/∂y, −∂ψ/∂x), which makes the flow divergence-free — particles never bunch up or drain away, exactly like a 2-D incompressible fluid. On top of that curl each wind adds its own prevailing direction and speed.
Changing poems does not restart the field — it retunes it. Direction, speed, turbulence, noise scale, stroke width, trail persistence and all colours interpolate over ~1.9 s, so you watch the mistral's cold vertical rain bend and warm into the sirocco's languid loops. Trails come free: each frame repaints the sky gradient at low alpha, so strokes decay like breath on glass. The noise field itself is advected downstream at about half the wind speed, which is why the texture streams instead of boiling in place.
Readability over the field is handled twice: a radial scrim of the sky colour sits behind the text block, and every particle segment inside an invisible ellipse around the poem is drawn at reduced alpha — the wind literally thins out to let you read, then thickens again at the margins.
Scoured ice-blue sky. Fast, near-straight strokes falling NNW→SSE with short trails — the wind that strips Provence to blue enamel.
Saharan dust over the Mediterranean. Turbulence dominates speed, so the field curls into slow feverish loops with the longest trails of the set.
Warm rose light out of season. Fast west→east flow with big, low-frequency waves — long combed filaments, snow-eater warmth.
Desaturated khaki haze. The densest and faintest particles — wide strokes at low alpha, almost laminar, a gauze across the sun.
Cold steel over Trieste. The fastest base speed of the six with hard, thin strokes — violence read as long gusts, not confetti.
The gentle one, saved for last: pale olive-green, the slowest speed, the most persistent trails — fine drifting threads that barely crease the sea's skin. This page borrows its palette.
EB Garamond italic carries the poems and the huge lowercase wind names. Wind belongs to old books — sailing directions, the Beaufort scale, myth — and Garamond's italic has the right lean; the display name is even rotated a fraction of a degree downstream of the current wind, the way Van Gogh's cypresses hold theirs. Outfit does everything instrumental — eyebrows, bearings, the anemometer — in small tracked capitals, the voice of a weather station log. The scale is deliberately extreme: 10.5 px instrument labels against a ~7.8 rem wind name, with nothing in between except the poem itself.
No libraries — one canvas, vanilla JS. Simplex-noise curl field with finite-difference gradients; per-wind parameter objects interpolated with an eased 1.9 s transition (angles lerped along the shortest arc, colours in RGB); trail rendering by translucent gradient repaint; particle strokes batched into nine paths (three colours × three falloff levels) per frame. UI colours ride registered CSS @property custom properties so ink, accent, sky and scrim cross-fade in pure CSS. The cursor drags a gust through the field, and clicking the sky releases an expanding ring impulse. Wheel, arrow keys, digits 1–6, swipe and the wind list all turn the page; each wind deep-links by URL hash. Reduced motion swaps the animation for a one-shot static etching of the same field traced with short streamlines.