How it works
Pointer → springs for x/y; velocity (useVelocity) drives scaleX and rotation so the blob smears in the direction of travel. Traps override the target with the element rect.
A lagging cursor blob that stretches with velocity and snaps into “trap” targets.
Pointer → springs for x/y; velocity (useVelocity) drives scaleX and rotation so the blob smears in the direction of travel. Traps override the target with the element rect.
Pointer/drag values live in MotionValues — they update the DOM directly and never trigger a React render. Hidden automatically on touch devices (pointer: coarse).
The native cursor stays visible; the blob is decorative (aria-hidden).
transition={{ type: 'spring', stiffness: 350, damping: 28, mass: 0.5 }}