Rounds 16-18 — native scroll (Lenis out), raster diet, scroll-frozen audio cosmetics#29
Merged
Merged
Conversation
…cs (rounds 16-18) Round 16 — scroll refonte (researched + measured) : - Lenis REMOVED -> native scrolling. Its permanent rAF re-dispatched scroll through the main thread (jank-amplifier) and the ~1 s easing was the reported 'floaty/slow' feel. 2026 consensus (NN/g, Thought- works radar, Apple's own product pages) : native scroll + sticky + pre-rendered frames. Anchors/tour keep a glide via CSS scroll-behavior: smooth (reduced-motion gated) ; the tour's manual rAF glide now passes behavior:'instant' to avoid double-easing. - dead useScrollProgress hooks removed (their only CSS consumer was deleted in round 12 — a forced layout per frame for nothing) - useScrollParallax: permanent rAF -> scroll-event driven - useAudioParticles: IntersectionObserver gate + 30 Hz - hero backdrop pre-blurred offline (npm run generate:backdrop, sharp: svg -> 640px -> sigma28 + saturate/brightness baked -> webp 4.5 kB) — retires the page's costliest live filter layer (blur(110px) on a viewport-sized surface). gitignore exception for the 2 derived webp (MIT svg sources, full rights chain). Round 17 — reveal raster diet : - 7 filter:blur(20-60px) removed from gradient-only glow layers (a radial gradient fading to transparent is already soft) ; worst was the halo MOVING with the scrub-tweened product every frame. Screenshot pairs: visually indistinguishable. Reveal flick p95 49.9 -> 33.7 ms. A velocity-gate on act swaps was tested, measured inconclusive (machine variance +/-10pts), and REVERTED. Round 18 — pause/playing parity : - new useScrollActivity singleton (one passive listener, 160 ms settle) ; ambient pump (now 30 Hz), AudioBars canvas and particle field FREEZE while the page scrolls — a frozen canvas scrolls as a cached texture, and mid-scroll screenshots show the frozen pose is imperceptible. Same-run differential: scroll jank delta paused->playing +21pts -> +8pts ; idle parity. Validation : ci exit=0 (88 tests, 0 vulns, lib byte-identical v2.3.5 untouched), visual 2/2, responsive 6/6, Axe AA 2/2, dist verified (no lenis in bundle, baked backdrops present). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
scroll-behavior: smoothfor anchors/tour (reduced-motion gated), tour glide fixed tobehavior:'instant'.npm run generate:backdrop), 7 gradient-layer blurs removed from the pinned reveal (screenshot pairs: indistinguishable), dead per-frame hooks removed, parallax event-driven, particles IO+30 Hz.useScrollActivitysingleton freezes ambient pump + AudioBars + particles while the page scrolls. Same-run differential: scroll jank delta paused→playing +21pts → +8pts, idle parity.Numbers (2K, headed GPU, same-run differentials)
idle paused/playing 0 %/0 % · read-pace full page paused 8 % · reveal flick p95 49.9 → 33.7 ms · input latency: native (was ~1 s Lenis easing)
Validation
ci exit=0 (88 tests, 0 vulns, src/lib untouched — byte-identical v2.3.5 ✓) · visual 2/2 · responsive 6/6 · Axe AA 2/2 · dist verified (no lenis, backdrops present) · an unproven micro-optimisation was tested and reverted (measurement honesty)
🤖 Generated with Claude Code