Hide the system cursor with `cursor: none`, then move an absolutely-positioned element with `transform: translate()` on every `pointermove`. Since it's a single element, you're just updating coordinates — cheap to repaint.
Stack a small dot on top of a looser ring and you get two layers: the ring trails with a rubber-band lag, the dot snaps to the exact position. When the ring passes over a link or button, grow it and fill it — the cursor itself signals "this is clickable."
Touch devices have no concept of a cursor, so check `pointerType` and fall back to the native cursor there. Over dense body text a custom cursor can obscure letters, so it's common to revert to the default cursor inside reading areas.
When to use
Good for portfolios and landing pages where brand feel matters. Skip it on text-heavy admin screens and reading views.