Compositor-driven infinite marquee (Web Animations API, iterations: Infinity,
duplicated content, transform-only). Zero per-frame and per-wrap JavaScript — a busy main
thread cannot stall the scroll.
Query params on all pages:
?speed=0.1..2.0 — portal slider range, px/sec = speed × 60 (default 1.0)?jank=1 — block the main thread 600ms every 3s (simulates a heavy PBI zone); scroll must stay smooth?hud=1 — main-thread FPS chip (dips during jank blocks while the scroll keeps moving)?mode=waapi — compositor-driven animation for A/B (default is a shared rAF ticker: compositor
animation is starved to 1-3 fps on the X5M weston build while main-thread updates present at 43-59 fps)Decisive on-device test: /page-1/?jank=1 in a split-screen next to a Power BI zone.