How it works
useMotionValue for pointer position → useTransform to rotateX/rotateY and to the glare gradient position via useMotionTemplate.
Perspective tilt that follows the pointer, with a moving specular glare layer.
useMotionValue for pointer position → useTransform to rotateX/rotateY and to the glare gradient position via useMotionTemplate.
Pointer/drag values live in MotionValues — they update the DOM directly and never trigger a React render.
Tilt is disabled in reduced-motion mode; content remains fully legible flat.
transition={{ type: 'spring', stiffness: 150, damping: 18, mass: 0.6 }}