Why it matters
A non-passive wheel or touchmove listener forces the browser to wait for JavaScript before it can scroll, so every scroll gesture starts late.
How to fix it
Pass { passive: true } unless you truly need preventDefault(); for scroll effects prefer IntersectionObserver or animation-timeline: view().
Example
addEventListener('touchmove', onMove, { passive: true });More smoothness rules
void smooth reports 13 rules in this category. How the page feels after it loads: dropped frames during a scripted scroll, long animation frames, INP of real clicks, shifts after input, animated layout properties, idle rAF loops and reduced-motion handling.
scroll-jankFrames are dropped while scrollinglong-frames-during-scrollLong animation frames block scrollinginp-slowInteractions are slow to respond (INP)layout-shift-after-inputLayout shifts long after an interactionlayout-shift-on-scrollLayout shifts while scrollinganimate-layout-propertyAnimation of a layout-triggering propertytransition-alltransition: allwill-change-overusewill-change is applied too broadly