"use client"; import { useEffect, useState } from "react"; import { motion, useMotionValue, useSpring } from "framer-motion"; export default function CustomCursor() { const [isHovered, setIsHovered] = useState(false); // Motion values for smooth cursor tracking const cursorX = useMotionValue(-100); const cursorY = useMotionValue(-100); // Spring physics for trailing effect on the outer circle const springConfig = { damping: 30, stiffness: 220, mass: 0.6 }; const cursorXSpring = useSpring(cursorX, springConfig); const cursorYSpring = useSpring(cursorY, springConfig); useEffect(() => { const moveCursor = (e: MouseEvent) => { cursorX.set(e.clientX); cursorY.set(e.clientY); }; const handleMouseOver = (e: MouseEvent) => { const target = e.target as HTMLElement; if ( target.tagName === "A" || target.tagName === "BUTTON" || target.closest("a") || target.closest("button") || target.classList.contains("clickable") || target.closest(".clickable") ) { setIsHovered(true); } else { setIsHovered(false); } }; window.addEventListener("mousemove", moveCursor); window.addEventListener("mouseover", handleMouseOver); return () => { window.removeEventListener("mousemove", moveCursor); window.removeEventListener("mouseover", handleMouseOver); }; }, [cursorX, cursorY]); return (