(function () { if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; if (!window.gsap || !window.ScrollTrigger || !window.Lenis) return; gsap.registerPlugin(ScrollTrigger); const lenis = new Lenis({ lerp: 0.1, smoothWheel: true }); lenis.on('scroll', ScrollTrigger.update); gsap.ticker.add((time) => { lenis.raf(time * 1000); }); gsap.ticker.lagSmoothing(0); // Hero stagger — runs once on load. gsap.to('.hero .reveal', { y: 0, opacity: 1, duration: 1.1, ease: 'power3.out', stagger: 0.12 }); // Card reveals — batched so cards in the same row come in together. ScrollTrigger.batch('[data-gsap="card"]', { start: 'top 90%', onEnter: (els) => gsap.to(els, { y: 0, opacity: 1, scale: 1, duration: 0.9, ease: 'power3.out', stagger: 0.08, overwrite: true }) }); })();