Teaching Animation with HyperFrames — filled-in example: CO₂ liquefaction PART A — HOW TO WORK (keep as is) A1. Environment (do this first and report what you found) * Check Node.js (HyperFrames needs version 22 or later), FFmpeg and FFprobe. * Install the framework locally, pinned: npm init -y, then npm install -D hyperframes@0.8.208 * Run `npx hyperframes doctor`. If it reports no Chrome, run `npx hyperframes browser` (see its --help). * Set DO_NOT_TRACK=1 for every hyperframes command. * Learn the framework from its own documentation before writing code: `npx hyperframes --help`, `npx hyperframes docs` and node_modules/hyperframes/README.md. * If a command needs network access or a permission you do not have, ask me. If a required tool is missing, stop and tell me. Do not switch to another video tool or skip the render. A2. Architecture * Every number that appears on screen is computed in one file (for example js/physics.js) from the source named in B4, or read from a data file generated from that source. Never type a physical number by hand into the HTML. * Everything that moves is drawn by one pure function render(t) of the root-timeline time t, called from the onUpdate of a single GSAP tween that spans the whole film, so that seeking to any frame paints that frame. * Determinism: seeded random generator only. No Math.random, Date, performance.now, timers, requestAnimationFrame or network calls in any script. * HyperFrames 0.8.208 traps: - Register the root timeline (window.__timelines[...] = tl) in an inline