How it behaves
Exactly what the prompt builds — every timing and easing is specified, so the result matches the demo.
- Follow: each frame the blob moves 15% of the way to the pointer, which gives the lag.
- Stretch: the distance between blob and pointer is the speed. The blob scales 1 + s along the travel direction and 1 - s across it, where s = min(speed × 0.001, 0.15) × 3, so it stretches to at most 1.45 × 0.55.
- Rotate: the blob turns to face the direction of travel. The label counter-rotates so it always reads upright.
- Look: a 48px circle scaled 2× (96px on screen) in the ink colour, with a 16px medium label centered in the light colour.
- Labels: any element with data-cursor="View" swaps the label while hovered, and it goes back to the default when the pointer leaves.
- Touch and coarse pointers: the blob is not rendered and the normal cursor is kept.
- Fallbacks: reduced motion keeps the blob following without stretching or rotating.