A motion system matched to measured timing, with clean animation state across every route change.
GSAP · ScrollTrigger · Lenis
Lenis is synchronized with the GSAP ticker, so smooth scrolling and scroll-linked animation share one clock. Transitions and pointer states are timed from frame-by-frame comparison, not guessed.
GSAP does not interpret CSS-style cubic-bezier() strings as custom curves — it silently falls back. Registering the intended curves fixed a measurable timing mismatch in the page transition and corrected the carousel’s snap curve.