Reduced-motion gap: WebGL carousels, hero autoplay video, and smooth-scroll are completely uncovered
revamp.css:242's blanket reduce rule literally annotates the gap: "a11y: respect reduced motion (does not touch the WebGL carousels)". grep for reduce/prefers-reduced across home-cgvfx-clean.js?v=22, home-photography-clean.js?v=32, home-explorations-clean.js?v=16 = 0 matches — idle auto-spin (FLOW_MIN=0.0012, cgvfx.js:553), jelly wobble (uAutoBulge, cgvfx.js:289), ambient sin-wave (cgvfx.js:179) and entry springs all run for vestibular-sensitive users. Hero <video autoplay muted loop> (home-rendered.html:1962) has no gating. revamp.js:166 scrollIntoView({behavior:'smooth'}) and customcss.css:663 html{scroll-behavior:smooth} have no reduce guard. Contrast: home-face-clean.js:22 + drawPlain(FRONT), badge spin (revamp.css:221) and hearts (revamp.css §27, line ~461) ARE handled — the coverage stops exactly at the showpiece animations.
In each carousel's boot, read matchMedia('(prefers-reduced-motion:reduce)') once: set FLOW_MIN/FLOW_AMP to 0 (cards hold still, drag still works), freeze uTime (kills ambient+jelly), and call the heading's enter(1) so text appears settled. Gate the hero video: if reduce, remove autoplay and show the poster (the modal play button still works). Wrap behavior:'smooth' in the same check. Default-theme visuals are untouched — but these are the fragile-trio files, so verify via the CDP/SwiftShader harness before deploy.