{"version":3,"file":"CustomCursorFollow.BLmuIOii.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/2mNHPnrC08P0hWBlACPa/UzNskKIrX4xbqpak1DSN/CustomCursorFollow.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";import{motion,useSpring,useMotionValue}from\"framer-motion\";import{RenderTarget,addPropertyControls}from\"framer\";// CustomCursorFollow — glass dot, sticky on real hit area\n// Bridge (loaderComplete → gg:play) runs on ALL devices, BEFORE any touch guard.\nexport default function CustomCursorFollow(){const targetX=useMotionValue(-200);const targetY=useMotionValue(-200);const springX=useSpring(targetX,{stiffness:650,damping:26,mass:.35});const springY=useSpring(targetY,{stiffness:650,damping:26,mass:.35});const glassRef=useRef(null);const dotRef=useRef(null);const rippleHostRef=useRef(null);const SIZE_DEFAULT=18;const SIZE_STICKY=28;const DOT_DEFAULT=5;const DOT_STICKY=3;const renderGlass=isSticky=>{const g=glassRef.current;const d=dotRef.current;if(g){const s=isSticky?SIZE_STICKY:SIZE_DEFAULT;g.style.width=s+\"px\";g.style.height=s+\"px\";g.style.marginLeft=-(s/2)+\"px\";g.style.marginTop=-(s/2)+\"px\";g.style.borderColor=isSticky?\"rgba(255,255,255,0.55)\":\"rgba(255,255,255,0.4)\";}if(d){const ds=isSticky?DOT_STICKY:DOT_DEFAULT;d.style.width=ds+\"px\";d.style.height=ds+\"px\";d.style.marginLeft=-(ds/2)+\"px\";d.style.marginTop=-(ds/2)+\"px\";d.style.opacity=isSticky?\"0.45\":\"1\";}};const spawnRipple=()=>{const host=rippleHostRef.current;if(!host)return;const r=document.createElement(\"div\");r.style.cssText=\"position:absolute;left:0;top:0;border-radius:50%;\"+\"border:1px solid rgba(255,255,255,0.5);\"+`width:${SIZE_DEFAULT}px;height:${SIZE_DEFAULT}px;`+`margin-left:-${SIZE_DEFAULT/2}px;margin-top:-${SIZE_DEFAULT/2}px;`+\"opacity:1;pointer-events:none;\"+\"transition:width 0.55s ease-out,height 0.55s ease-out,margin 0.55s ease-out,opacity 0.6s ease-out;\";host.appendChild(r);requestAnimationFrame(()=>{r.style.width=\"58px\";r.style.height=\"58px\";r.style.marginLeft=\"-29px\";r.style.marginTop=\"-29px\";r.style.opacity=\"0\";});setTimeout(()=>r.remove(),650);};useEffect(()=>{if(typeof window===\"undefined\")return;if(RenderTarget.current()===RenderTarget.canvas)return;// ══════════════════════════════════════════════════════════════════\n// Bridge: loaderComplete → gg:play — MUST run on every device.\n// SmoothScroll (Lenis) waits for gg:play to call lenis.start();\n// without this bridge, scroll never unlocks. It therefore lives\n// BEFORE any early return (touch guard included).\n// ══════════════════════════════════════════════════════════════════\nlet skip=false;try{skip=!!sessionStorage.getItem(\"gg-loaded\");}catch(_){}if(skip){window.dispatchEvent(new CustomEvent(\"gg:play\"));}else{const onLoaderComplete=()=>window.dispatchEvent(new CustomEvent(\"gg:play\"));window.addEventListener(\"loaderComplete\",onLoaderComplete,{once:true});const fallback=setTimeout(()=>window.dispatchEvent(new CustomEvent(\"gg:play\")),6e3);const cleanup=()=>{window.removeEventListener(\"loaderComplete\",onLoaderComplete);clearTimeout(fallback);};window.addEventListener(\"gg:play\",cleanup,{once:true});}// ── Touch devices: hide custom cursor, keep native behaviour ──────\nif(window.matchMedia(\"(pointer: coarse)\").matches){if(glassRef.current?.parentElement)glassRef.current.parentElement.style.display=\"none\";return;}// ── Desktop only from here ─────────────────────────────────────────\nif(!document.getElementById(\"gg-cursor-css\")){const el=document.createElement(\"style\");el.id=\"gg-cursor-css\";el.textContent=\"* { cursor: none !important; }\";document.head.appendChild(el);}const STICKY_SELECTORS=\"a, button, [role='button'], [data-hover='true'], label, input[type='submit'], input[type='button']\";const PULL=.22;let stickyEl=null;const findSticky=(x,y)=>{const hit=document.elementFromPoint(x,y);if(!hit)return null;const el=hit.closest(STICKY_SELECTORS);if(!el)return null;const r=el.getBoundingClientRect();return{el,cx:r.left+r.width/2,cy:r.top+r.height/2};};const onMove=e=>{const rawX=e.clientX;const rawY=e.clientY;const hit=findSticky(rawX,rawY);if(hit){targetX.set(rawX+(hit.cx-rawX)*PULL);targetY.set(rawY+(hit.cy-rawY)*PULL);if(stickyEl!==hit.el){stickyEl=hit.el;renderGlass(true);}}else{targetX.set(rawX);targetY.set(rawY);if(stickyEl!==null){stickyEl=null;renderGlass(false);}}};const onDown=()=>spawnRipple();window.addEventListener(\"mousemove\",onMove);window.addEventListener(\"mousedown\",onDown);renderGlass(false);return()=>{window.removeEventListener(\"mousemove\",onMove);window.removeEventListener(\"mousedown\",onDown);};},[]);if(RenderTarget.current()===RenderTarget.canvas)return null;return /*#__PURE__*/_jsxs(motion.div,{style:{position:\"fixed\",left:0,top:0,x:springX,y:springY,pointerEvents:\"none\",zIndex:100001,mixBlendMode:\"difference\"},children:[/*#__PURE__*/_jsx(\"div\",{ref:rippleHostRef,style:{position:\"absolute\",left:0,top:0,pointerEvents:\"none\"}}),/*#__PURE__*/_jsx(\"div\",{ref:glassRef,style:{position:\"absolute\",width:SIZE_DEFAULT,height:SIZE_DEFAULT,marginLeft:-(SIZE_DEFAULT/2),marginTop:-(SIZE_DEFAULT/2),borderRadius:\"50%\",background:\"rgba(255,255,255,0.06)\",border:\"1px solid rgba(255,255,255,0.4)\",pointerEvents:\"none\",transition:\"width 0.28s ease, height 0.28s ease, margin 0.28s ease, border-color 0.28s ease\"}}),/*#__PURE__*/_jsx(\"div\",{ref:dotRef,style:{position:\"absolute\",width:DOT_DEFAULT,height:DOT_DEFAULT,marginLeft:-(DOT_DEFAULT/2),marginTop:-(DOT_DEFAULT/2),borderRadius:\"50%\",backgroundColor:\"#ffffff\",pointerEvents:\"none\",transition:\"opacity 0.22s ease, width 0.22s ease, height 0.22s ease, margin 0.22s ease\"}})]});}addPropertyControls(CustomCursorFollow,{});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CustomCursorFollow\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CustomCursorFollow.map"],"mappings":"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"}