How it works
The section pins while a tween moves the track by -(scrollWidth - innerWidth). Inner elements use containerAnimation so they trigger on their horizontal position.
Vertical scroll drives a horizontal track of panels, with nested per-panel animations.
The section pins while a tween moves the track by -(scrollWidth - innerWidth). Inner elements use containerAnimation so they trigger on their horizontal position.
Lenis is driven by gsap.ticker (one rAF loop). invalidateOnRefresh recalculates widths on resize.
Runs inside useGSAP with the effective reduced-motion flag as a dependency — reduced mode swaps scrubbed motion for simple fades. In reduced mode the panels simply stack vertically.
{
"lerp": 0.1,
"scrub": 1,
"markers": false
}