// ui_kits/site/Cursor.jsx — custom dot + ring cursor, smoothed. const Cursor = () => { const ringRef = React.useRef(null); const dotRef = React.useRef(null); React.useEffect(() => { let mx = innerWidth / 2, my = innerHeight / 2; let rx = mx, ry = my; let hot = false; let raf; const move = (e) => { mx = e.clientX; my = e.clientY; }; const over = (e) => { const t = e.target.closest('a, button, [data-hot], input, [data-cursor="hot"]'); hot = !!t; ringRef.current?.classList.toggle('hot', hot); }; addEventListener('pointermove', move, { passive: true }); addEventListener('pointerover', over); const tick = () => { rx += (mx - rx) * 0.18; ry += (my - ry) * 0.18; if (ringRef.current) ringRef.current.style.transform = `translate(${rx}px, ${ry}px) translate(-50%, -50%)`; if (dotRef.current) dotRef.current.style.transform = `translate(${mx}px, ${my}px) translate(-50%, -50%)`; raf = requestAnimationFrame(tick); }; tick(); return () => { cancelAnimationFrame(raf); removeEventListener('pointermove', move); removeEventListener('pointerover', over); }; }, []); return ( <>
); }; window.Cursor = Cursor;