The heavy motion is paid for only when it is seen.
Smooth scroll, word-by-word reveals and counters run on GSAP and Lenis. The Three.js perspective grid in the contact section is the expensive part, so it is imported only when that section is within 300px of the viewport. Under reduced motion Lenis never starts, the counters show their final figure and the grid library is never fetched at all.