Before the delay fix only the first frame got the script's delay, the rest
played at 100ms (webp) or 0 (gif). Pixels are unchanged in every frame, only
frame timing differs. Drops the /test2 comparison page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
heart/wink.webp is the keyed-out version of heart/wink.gif. The standing
cat in cat/tail.gif is now cat/wag.{webp,gif} since cat/tail.webp is a
different drawing; cat/tail.gif stays so old links work but is no longer
listed. Gallery images get a content hash in the query so browsers pick
up changed files instead of showing cached copies.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each animation is its own file in gen/<subject>/<action>.js; npm run gen
renders the missing ones to public/ as webp + gif. The homepage grid is
now generated at build time by a small Vite plugin.
First four: ghost/float, heart/beat, cloud/rain, coffee/steam.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>