{"version":3,"file":"FadeGrid.Ds9jswo9.mjs","names":["React.useContext","React.useMemo","React.Fragment","React.forwardRef","useRef","React.useId","useMemo","useRef","useState","useCallback"],"sources":["https:/framerusercontent.com/modules/92WGlnp2G269j8oweZn3/QjY5ZMfN0urAHrQ4xS5c/wVIXS48P_.js","https:/framerusercontent.com/modules/I22n4QdurBc6QkKK5QWM/GofSZVmNMLDQqprXB0qq/LogoSpectrum.js","https:/framerusercontent.com/modules/i5YMA74gnWBfKw7N3TmY/psyF5ILMCa8TzMW7Vzfo/FadeGrid.js"],"sourcesContent":["// Generated by Framer (ff27080)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ControlType,cx,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import{useRef}from\"react\";const cycleOrder=[\"sPrMatdCZ\",\"uDb_OJsJk\",\"mnD7AdrGN\"];const serializationHash=\"framer-nLFZA\";const variantClassNames={mnD7AdrGN:\"framer-v-1k82rap\",sPrMatdCZ:\"framer-v-h3ws3h\",uDb_OJsJk:\"framer-v-hboiyn\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants?.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={delay:0,duration:.4,ease:[.24,.35,.56,1],type:\"tween\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value??config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const humanReadableVariantMap={Dark:\"uDb_OJsJk\",Gray:\"mnD7AdrGN\",Light:\"sPrMatdCZ\"};const Variants=motion.create(React.Fragment);const getProps=({height,id,width,...props})=>{return{...props,variant:humanReadableVariantMap[props.variant]??props.variant??\"sPrMatdCZ\"};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const fallbackRef=useRef(null);const refBinding=ref??fallbackRef;const defaultLayoutId=React.useId();const{activeLocale,setLocale}=useLocaleInfo();const componentViewport=useComponentViewport();const{style,className,layoutId,variant,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({cycleOrder,defaultVariant:\"sPrMatdCZ\",ref:refBinding,variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const sharedStyleClassNames=[];const scopingClassNames=cx(serializationHash,...sharedStyleClassNames);return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId??defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsxs(motion.div,{...restProps,...gestureHandlers,className:cx(scopingClassNames,\"framer-h3ws3h\",className,classNames),\"data-framer-name\":\"Light\",layoutDependency:layoutDependency,layoutId:\"sPrMatdCZ\",ref:refBinding,style:{...style},...addPropertyOverrides({mnD7AdrGN:{\"data-framer-name\":\"Gray\"},uDb_OJsJk:{\"data-framer-name\":\"Dark\"}},baseVariant,gestureVariant),children:[/*#__PURE__*/_jsx(motion.div,{className:\"framer-1u9q3g2\",\"data-framer-name\":\"White\",layoutDependency:layoutDependency,layoutId:\"aXl88PVYU\",style:{backgroundColor:\"var(--token-5d9d6d61-4392-4962-ac9a-c67c5066a781, rgb(255, 255, 255))\"}}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-d1s18y\",\"data-framer-name\":\"Black\",layoutDependency:layoutDependency,layoutId:\"Vz3vRq9kE\",style:{backgroundColor:\"var(--token-ed7ce4ea-055d-4c5a-a269-8f4374e0abc0, rgb(0, 0, 0))\",opacity:0},variants:{uDb_OJsJk:{opacity:1}}}),/*#__PURE__*/_jsx(motion.div,{className:\"framer-1jfonxk\",\"data-framer-name\":\"Gray\",layoutDependency:layoutDependency,layoutId:\"IhXVWjVKk\",style:{backgroundColor:\"var(--token-84a0c20a-d5d6-4ec1-bf41-1bb7712a4fe8, rgb(249, 249, 249))\",opacity:0},variants:{mnD7AdrGN:{opacity:1}}})]})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-nLFZA.framer-cqhdei, .framer-nLFZA .framer-cqhdei { display: block; }\",\".framer-nLFZA.framer-h3ws3h { align-content: center; align-items: center; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: 800px; justify-content: center; overflow: var(--overflow-clip-fallback, clip); padding: 0px; position: relative; width: 1200px; }\",\".framer-nLFZA .framer-1u9q3g2 { flex: 1 0 0px; height: 1px; overflow: visible; position: relative; width: 100%; }\",\".framer-nLFZA .framer-d1s18y, .framer-nLFZA .framer-1jfonxk { flex: none; height: 100%; left: calc(50.00000000000002% - 100% / 2); overflow: visible; position: absolute; top: calc(50.00000000000002% - 100% / 2); width: 100%; z-index: 1; }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 800\n * @framerIntrinsicWidth 1200\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"fixed\"]},\"uDb_OJsJk\":{\"layout\":[\"fixed\",\"fixed\"]},\"mnD7AdrGN\":{\"layout\":[\"fixed\",\"fixed\"]}}}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerAutoSizeImages true\n * @framerComponentViewportWidth true\n * @framerColorSyntax true\n */const FramerwVIXS48P_=withCSS(Component,css,\"framer-nLFZA\");export default FramerwVIXS48P_;FramerwVIXS48P_.displayName=\"Background\";FramerwVIXS48P_.defaultProps={height:800,width:1200};addPropertyControls(FramerwVIXS48P_,{variant:{options:[\"sPrMatdCZ\",\"uDb_OJsJk\",\"mnD7AdrGN\"],optionTitles:[\"Light\",\"Dark\",\"Gray\"],title:\"Variant\",type:ControlType.Enum}});addFonts(FramerwVIXS48P_,[{explicitInter:true,fonts:[]}],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerwVIXS48P_\",\"slots\":[],\"annotations\":{\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]},\\\"uDb_OJsJk\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]},\\\"mnD7AdrGN\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]}}}\",\"framerComponentViewportWidth\":\"true\",\"framerAutoSizeImages\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerColorSyntax\":\"true\",\"framerImmutableVariables\":\"true\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"800\",\"framerIntrinsicWidth\":\"1200\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./wVIXS48P_.map","import{defineShader,ControlType}from\"framer\";export default defineShader({title:\"Logo Spectrum\",heightmapSource:\"image\",fragment:`\nconst float DEG2RAD = 0.01745329;\nconst float TWO_PI = 6.28318530718;\n\nfloat blurDepth3x3(vec2 uv, vec2 dudx, vec2 dudy, vec2 texel, float radius) {\n    vec2 r = radius * texel;\n    float sum = 4.0 * textureGrad(u_image_heightmap, uv, dudx, dudy).r;\n    sum += 2.0 * textureGrad(u_image_heightmap, uv + vec2(0.0, -r.y), dudx, dudy).r;\n    sum += 2.0 * textureGrad(u_image_heightmap, uv + vec2(0.0,  r.y), dudx, dudy).r;\n    sum += 2.0 * textureGrad(u_image_heightmap, uv + vec2(-r.x, 0.0), dudx, dudy).r;\n    sum += 2.0 * textureGrad(u_image_heightmap, uv + vec2( r.x, 0.0), dudx, dudy).r;\n    sum += textureGrad(u_image_heightmap, uv + vec2(-r.x, -r.y), dudx, dudy).r;\n    sum += textureGrad(u_image_heightmap, uv + vec2( r.x, -r.y), dudx, dudy).r;\n    sum += textureGrad(u_image_heightmap, uv + vec2(-r.x,  r.y), dudx, dudy).r;\n    sum += textureGrad(u_image_heightmap, uv + vec2( r.x,  r.y), dudx, dudy).r;\n    return sum / 16.0;\n}\n\nvec2 heightGrad(vec2 uv, vec2 dudx, vec2 dudy, vec2 texel, float blurRadius) {\n    float eps = 12.0;\n    float dR = blurDepth3x3(uv + vec2(eps * texel.x, 0.0), dudx, dudy, texel, blurRadius);\n    float dL = blurDepth3x3(uv - vec2(eps * texel.x, 0.0), dudx, dudy, texel, blurRadius);\n    float dU = blurDepth3x3(uv + vec2(0.0, eps * texel.y), dudx, dudy, texel, blurRadius);\n    float dD = blurDepth3x3(uv - vec2(0.0, eps * texel.y), dudx, dudy, texel, blurRadius);\n    return vec2(dR - dL, dU - dD) / (2.0 * eps * texel);\n}\n\nfloat hash21(vec2 p) {\n    return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);\n}\n\n// --- cyclic noise -----------------------------------------------\nmat3 getOrthogonalBasis(vec3 z) {\n    z = normalize(z);\n    vec3 up = abs(z.y) < 0.99 ? vec3(0.0, 1.0, 0.0) : vec3(0.0, 0.0, 1.0);\n    vec3 x = normalize(cross(up, z));\n    return mat3(x, cross(z, x), z);\n}\n\nvec3 cyclicNoise(vec3 p, float pump) {\n    vec4 sum = vec4(0.0);\n    mat3 basis = getOrthogonalBasis(vec3(-1.0, 2.0, -3.0));\n    for (int i = 0; i < 5; i++) {\n        p *= basis;\n        p += sin(p.yzx);\n        sum += vec4(cross(cos(p), sin(p.zxy)), 1.0);\n        sum *= pump;\n        p *= 2.0;\n    }\n    return sum.xyz / sum.w;\n}\n\nvoid main() {\n    // === HEIGHTMAP UV (aspect-corrected) ===\n    vec2 uv = vec2(v_uv.x, 1.0 - v_uv.y);\n    vec2 texSize = vec2(textureSize(u_image_heightmap, 0));\n    float imgAspect = texSize.x / texSize.y;\n    float canvasAspect = u_resolution.x / u_resolution.y;\n\n    if (canvasAspect > imgAspect) {\n        uv.x = (uv.x - 0.5) * (canvasAspect / imgAspect) + 0.5;\n    } else {\n        uv.y = (uv.y - 0.5) * (imgAspect / canvasAspect) + 0.5;\n    }\n\n    // Logo-space scan coordinate (locked to the logo, not the canvas).\n    // x is scaled by the logo's aspect so the scan direction is geometrically\n    // correct, and y is flipped to match the previous screenY orientation.\n    vec2 scanUV = vec2(uv.x * imgAspect, 1.0 - uv.y);\n\n    vec2 dudx = dFdx(uv);\n    vec2 dudy = dFdy(uv);\n\n    vec4 hm = textureGrad(u_image_heightmap, uv, dudx, dudy);\n    float fw_b = 0.5 * fwidth(hm.b);\n    float hardMask = smoothstep(0.5 - fw_b, 0.5 + fw_b, hm.b);\n    float opacity = hardMask * (1.0 - hm.g);\n\n    float edgeDist = canvasAspect > imgAspect\n        ? min(uv.x, 1.0 - uv.x)\n        : min(uv.y, 1.0 - uv.y);\n    opacity *= smoothstep(0.0, fwidth(edgeDist), edgeDist);\n\n    if (opacity < 0.001) {\n        fragColor = vec4(u_colorBack.rgb * u_colorBack.a, u_colorBack.a);\n        return;\n    }\n\n    vec2 texel = 1.0 / texSize;\n    float depth = max(blurDepth3x3(uv, dudx, dudy, texel, 6.0), 0.001);\n\n    vec2 hGrad = heightGrad(uv, dudx, dudy, texel, 12.0);\n    float gradMag = length(hGrad);\n    vec2 gradDir = gradMag > 0.001 ? hGrad : vec2(0.0);\n    vec2 contourDir = vec2(-gradDir.y, gradDir.x);\n\n    float edgeProximity = 1.0 - smoothstep(0.0, u_edge, depth);\n\n    float t = u_time * u_speed * 10.0;\n\n    float angleRad = (u_angle + u_time * u_sweepSpeed * u_speed * 60.0) * DEG2RAD;\n    vec2 scanDir = vec2(cos(angleRad), sin(angleRad));\n    float scanBase = dot(scanUV, scanDir);\n\n    float deflection = (depth - 0.5) * u_deflection * 0.06;\n\n    float outerSoft = smoothstep(0.0, mix(0.001, 0.5, 2.), depth);\n\n    float bevelEnv = smoothstep(0.0, 0.55, edgeProximity);\n    bevelEnv      *= bevelEnv;\n    bevelEnv      *= outerSoft; \n    float bevelOffset = dot(contourDir, scanDir) * bevelEnv * u_bend * 0.07 * 0.5\n                     -  dot(gradDir,    scanDir) * bevelEnv * u_bend * 0.025 * 0.5;\n\n    float lineY = scanBase + deflection + bevelOffset + u_offset;\n\n    float viscN        = clamp(u_viscosity / 3.0, 0.0, 1.0);\n    float lineWidthExp = mix(20.0, 1.0, viscN);\n    float bloomWeight  = mix(0.15, 0.7, viscN);\n    float softExp      = mix(2.4, 1.1, viscN);\n    float densityPhase = u_density * 180.0;\n\n    // ---- SDF-based scan lines with cyclic-noise displacement -----------\n    float phase = (lineY - t * 0.025) * densityPhase - 1.5707963;\n\n    // Noise coordinate also lives in logo-space so distortion is locked to logo.\n    vec3 np = vec3(scanUV * u_noiseScale, u_time * 0.15 * u_distortSpeed);\n\n    // Clean SDF → glow.\n    float sdClean = phase - TWO_PI * floor(phase / TWO_PI + 0.5);\n    float peakClean = 0.5 + 0.5 * cos(sdClean);\n\n    // Distort gating — when the boolean is off, both noise and dispersion zero out.\n    float noiseAmt   = u_distort > 0.5 ? u_noiseAmount : 0.0;\n    float dispAmpVal = u_distort > 0.5 ? u_dispersion  : 0.0;\n\n    // Line core with optional ephemeral dispersion trail.\n    float peakNoisy = 0.0;\n    float peakNoisyWeight = 0.0;\n    int SAMPLES = dispAmpVal > 0.001 ? 5 : 1;\n    float dispAmp = dispAmpVal;\n\n    for (int i = 0; i < 5; i++) {\n        if (i >= SAMPLES) break;\n\n        // ephemeral ramp: 0 at head, ~1 at tail\n        float eph = SAMPLES > 1 ? float(i) / float(SAMPLES - 1) : 0.0;\n        float sqEph = eph * eph;\n\n        // Slightly time-offset slice per sample — creates the drip/trail.\n        vec3 npS = np + vec3(0.0, 0.0, -sqEph * dispAmp * 0.8);\n\n        vec3 n3 = cyclicNoise(npS, 1.5);\n        // Project noise onto scan direction so it wiggles lines sideways.\n        float n = dot(n3.xy, scanDir);\n\n        float amp = 1.0 + dispAmp * sqEph * 0.6;\n        float sdNoisy = sdClean + n * noiseAmt * amp * TWO_PI * 0.5;\n\n        float w = mix(1.0, 1.0 - sqEph * 0.5, dispAmp);\n        peakNoisy += (0.5 + 0.5 * cos(sdNoisy)) * w;\n        peakNoisyWeight += w;\n    }\n    peakNoisy /= max(peakNoisyWeight, 0.001);\n\n    float fadeRamp = smoothstep(0.0, 0.4, depth);\n    float lineFade = mix(1.0, fadeRamp, clamp(u_lineFade, 0.0, 1.0));\n\n    float line     = pow(peakNoisy, lineWidthExp) * lineFade;\n    float lineSoft = pow(peakNoisy, softExp) * lineFade;\n    float lineGlow = pow(peakNoisy, 0.45) * lineFade;\n\n    float coarseMod = mix(0.9, 1.1, 0.5 + 0.5 * sin(lineY * densityPhase * 0.08 + t * 0.4));\n\n    float contourHeat = (1.0 - smoothstep(0.0, 0.25, depth)) * u_contour;\n\n    vec3 tint = u_baseColor.rgb;\n    float centerBoost = mix(0.75, 1.1, smoothstep(0.0, 0.35, depth));\n    float floorGlow = 0.05 * smoothstep(0.0, 0.4, depth);\n\n    float grain = hash21(v_uv * vec2(1920.0, 1080.0) + floor(t * 12.0));\n    float grainMod = 1.0 + (grain - 0.5) * 2.0 * u_grain * 0.25;\n\n    float bodyIntensity = (\n        floorGlow\n        + (line + lineSoft * bloomWeight + lineGlow * u_glow * 0.35) * u_exposure\n        + contourHeat * 1.4\n    ) * centerBoost * coarseMod * grainMod;\n\n    vec3 rimHot = vec3(contourHeat * line * u_exposure * 0.9);\n    vec3 peakHighlight = vec3(smoothstep(0.7, 1.0, line) * u_glow * u_exposure * 0.6);\n\n    vec3 bodyCol = tint * bodyIntensity + rimHot + peakHighlight;\n\n    float luma = dot(bodyCol, vec3(0.2126, 0.7152, 0.0722));\n    bodyCol = mix(vec3(luma), bodyCol, u_saturation);\n    bodyCol += tint * u_ambient * depth;\n\n    bodyCol = bodyCol / (1.0 + max(bodyCol - 1.0, 0.0));\n\n    vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n    float bgAlpha = u_colorBack.a;\n\n    vec3 finalCol = bgColor * (1.0 - opacity) + bodyCol * opacity;\n    float finalAlpha = bgAlpha + opacity * (1.0 - bgAlpha);\n\n    fragColor = vec4(finalCol, finalAlpha);\n}\n`,propertyControls:{image:{type:ControlType.ResponsiveImage,title:\"Image\",defaultValue:\"data:framer/asset-reference,7XHsXmlUUmdQM95fkSvi3LRCuSk.svg?originalFilename=Path.svg&width=32&height=48\"},colorBack:{type:ControlType.Color,title:\"Background\",defaultValue:\"#000000\"},baseColor:{type:ControlType.Color,title:\"Surface\",defaultValue:\"#444444\"},speed:{type:ControlType.Number,title:\"Speed\",defaultValue:.3,min:0,max:2,step:.1},offset:{type:ControlType.Number,title:\"Offset\",defaultValue:.21,min:0,max:1,step:.01,hiddenWhenUnset:true},angle:{type:ControlType.Number,title:\"Angle\",defaultValue:225,min:0,max:360,step:1},sweepSpeed:{type:ControlType.Number,title:\"Sweep\",defaultValue:0,min:-1,max:1,step:.1},glow:{type:ControlType.Number,title:\"Glow\",defaultValue:.7,min:0,max:2,step:.01,hidden:true},bend:{type:ControlType.Number,title:\"Bevel\",defaultValue:.34,min:0,max:1,step:.01,section:\"Shape\"},edge:{type:ControlType.Number,title:\"Edge\",defaultValue:1,min:0,max:1,step:.01,section:\"Shape\"},contour:{type:ControlType.Number,title:\"Contour\",defaultValue:1,min:0,max:3,step:.01,section:\"Shape\"},density:{type:ControlType.Number,title:\"Density\",defaultValue:.08,min:.01,max:.2,step:.01},viscosity:{type:ControlType.Number,title:\"Glow\",defaultValue:.5,min:0,max:2,step:.01},deflection:{type:ControlType.Number,title:\"Deflection\",defaultValue:3,min:0,max:3,step:.05},distort:{type:ControlType.Boolean,title:\"Distort\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"},noiseAmount:{type:ControlType.Number,title:\"Amount\",defaultValue:.5,min:0,max:4,step:.1,hidden:props=>!props.distort},distortSpeed:{type:ControlType.Number,title:\"Speed\",defaultValue:1,min:0,max:2,step:.1,hidden:props=>!props.distort},noiseScale:{type:ControlType.Number,title:\"Scale\",defaultValue:1.5,min:.1,max:8,step:.1,hidden:props=>!props.distort},dispersion:{type:ControlType.Number,title:\"Ephemeral\",defaultValue:0,min:0,max:1,step:.01,hidden:props=>!props.distort},lineFade:{type:ControlType.Number,title:\"Line Fade\",defaultValue:0,min:0,max:1,step:.01,hidden:true},grain:{type:ControlType.Number,title:\"Grain\",defaultValue:0,min:0,max:1,step:.01,hiddenWhenUnset:true},ambient:{type:ControlType.Number,title:\"Ambient\",defaultValue:0,min:0,max:.2,step:.01,section:\"Filters\",hidden:true},saturation:{type:ControlType.Number,title:\"Saturation\",defaultValue:1.2,min:0,max:3,step:.01,section:\"Filters\",hidden:true},exposure:{type:ControlType.Number,title:\"Exposure\",defaultValue:1.4,min:.2,max:4,step:.05,section:\"Filters\",hidden:true}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"shader\",\"name\":null,\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LogoSpectrum.map","/**\n *  46\n * #46 Dot Grid\n * Decorative dotted grid background with\n * center vignette fade, appear animation, and mouse proximity effect.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n * @framerIntrinsicWidth 1200\n * @framerIntrinsicHeight 700\n */import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState,useCallback,useMemo,startTransition}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";// ─── Helpers ────────────────────────────────────────────────\n/**\n * Resolve any CSS color to a canvas-compatible hex/rgb string.\n * Canvas 2D's fillStyle silently rejects modern formats (oklch, lab, color-mix,\n * CSS variables, etc.). We use a temporary DOM element + getComputedStyle to let\n * the browser resolve the color, then feed the result to canvas.\n */let _colorProbe=null;const _colorCache=new Map;function resolveColorForCanvas(cssColor,fallback){if(!cssColor)return fallback;const cached=_colorCache.get(cssColor);if(cached)return cached;// Fast path — canvas context can validate simple formats instantly\nif(/^#[0-9a-f]{3,8}$/i.test(cssColor)||/^rgba?\\(/i.test(cssColor)){_colorCache.set(cssColor,cssColor);return cssColor;}// Slow path — use a DOM element to resolve any CSS color to rgb()\nif(typeof document!==\"undefined\"){if(!_colorProbe){_colorProbe=document.createElement(\"div\");_colorProbe.style.display=\"none\";document.body.appendChild(_colorProbe);}_colorProbe.style.color=\"\";_colorProbe.style.color=cssColor;const resolved=getComputedStyle(_colorProbe).color;if(resolved&&resolved!==\"\"){_colorCache.set(cssColor,resolved);return resolved;}}_colorCache.set(cssColor,fallback);return fallback;}/** Compute normalized stagger value (0–1) for a dot based on appear direction */function computeAppearIndex(row,col,rows,cols,direction,randomSeed){const totalDots=cols*rows;switch(direction){case\"top-left\":return(row*cols+col)/totalDots;case\"top-right\":return(row*cols+(cols-1-col))/totalDots;case\"bottom-left\":return((rows-1-row)*cols+col)/totalDots;case\"bottom-right\":return((rows-1-row)*cols+(cols-1-col))/totalDots;case\"center-out\":{const cx=(cols-1)/2;const cy=(rows-1)/2;const maxDist=Math.sqrt(cx*cx+cy*cy)||1;const dx=col-cx;const dy=row-cy;return Math.sqrt(dx*dx+dy*dy)/maxDist;}case\"edges-in\":{const cx=(cols-1)/2;const cy=(rows-1)/2;const maxDist=Math.sqrt(cx*cx+cy*cy)||1;const dx=col-cx;const dy=row-cy;return 1-Math.sqrt(dx*dx+dy*dy)/maxDist;}case\"random\":{const idx=row*cols+col;return idx<randomSeed.length?randomSeed[idx]:Math.random();}default:return(row*cols+col)/totalDots;}}/** Draw a dot shape into the canvas context at (x, y) with given radius */function drawDot(ctx,shape,x,y,r){switch(shape){case\"square\":ctx.rect(x-r,y-r,r*2,r*2);break;case\"diamond\":ctx.moveTo(x,y-r);ctx.lineTo(x+r,y);ctx.lineTo(x,y+r);ctx.lineTo(x-r,y);ctx.closePath();break;case\"triangle\":ctx.moveTo(x,y-r);ctx.lineTo(x+r*.866,y+r*.5);ctx.lineTo(x-r*.866,y+r*.5);ctx.closePath();break;case\"star\":{const spikes=5;const outerR=r;const innerR=r*.4;for(let i=0;i<spikes*2;i++){const rad=i*Math.PI/spikes-Math.PI/2;const sr=i%2===0?outerR:innerR;if(i===0)ctx.moveTo(x+sr*Math.cos(rad),y+sr*Math.sin(rad));else ctx.lineTo(x+sr*Math.cos(rad),y+sr*Math.sin(rad));}ctx.closePath();break;}case\"plus\":{const arm=r*.35;ctx.moveTo(x-arm,y-r);ctx.lineTo(x+arm,y-r);ctx.lineTo(x+arm,y-arm);ctx.lineTo(x+r,y-arm);ctx.lineTo(x+r,y+arm);ctx.lineTo(x+arm,y+arm);ctx.lineTo(x+arm,y+r);ctx.lineTo(x-arm,y+r);ctx.lineTo(x-arm,y+arm);ctx.lineTo(x-r,y+arm);ctx.lineTo(x-r,y-arm);ctx.lineTo(x-arm,y-arm);ctx.closePath();break;}case\"ring\":ctx.arc(x,y,r,0,Math.PI*2);ctx.moveTo(x+r*.55,y);ctx.arc(x,y,r*.55,0,Math.PI*2,true);break;default:ctx.arc(x,y,r,0,Math.PI*2);break;}}/** SVG path data for a dot shape centered at (cx, cy) with radius r */function dotShapeSVGPath(shape,cx,cy,r){switch(shape){case\"square\":return`M ${cx-r},${cy-r} h ${r*2} v ${r*2} h ${-r*2} Z`;case\"diamond\":return`M ${cx},${cy-r} L ${cx+r},${cy} L ${cx},${cy+r} L ${cx-r},${cy} Z`;case\"triangle\":return`M ${cx},${cy-r} L ${cx+r*.866},${cy+r*.5} L ${cx-r*.866},${cy+r*.5} Z`;case\"star\":{let p=\"\";for(let i=0;i<10;i++){const a=i*Math.PI/5-Math.PI/2;const sr=i%2===0?r:r*.4;p+=`${i===0?\"M\":\"L\"} ${cx+sr*Math.cos(a)},${cy+sr*Math.sin(a)} `;}return p+\"Z\";}case\"plus\":{const a=r*.35;return`M ${cx-a},${cy-r} L ${cx+a},${cy-r} L ${cx+a},${cy-a} L ${cx+r},${cy-a} L ${cx+r},${cy+a} L ${cx+a},${cy+a} L ${cx+a},${cy+r} L ${cx-a},${cy+r} L ${cx-a},${cy+a} L ${cx-r},${cy+a} L ${cx-r},${cy-a} L ${cx-a},${cy-a} Z`;}case\"ring\":return`M ${cx+r},${cy} A ${r},${r} 0 1,1 ${cx-r},${cy} A ${r},${r} 0 1,1 ${cx+r},${cy} Z M ${cx+r*.55},${cy} A ${r*.55},${r*.55} 0 1,0 ${cx-r*.55},${cy} A ${r*.55},${r*.55} 0 1,0 ${cx+r*.55},${cy} Z`;default:return`M ${cx+r},${cy} A ${r},${r} 0 1,1 ${cx-r},${cy} A ${r},${r} 0 1,1 ${cx+r},${cy} Z`;}}/** Apply easing to a 0–1 progress value */function applyEasing(t,easing){switch(easing){case\"linear\":return t;case\"ease-in-out\":return t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2;case\"spring\":return 1-Math.pow(Math.E,-6*t)*Math.cos(6*t);case\"bounce\":{if(t<1/2.75)return 7.5625*t*t;if(t<2/2.75){const t2=t-1.5/2.75;return 7.5625*t2*t2+.75;}if(t<2.5/2.75){const t2=t-2.25/2.75;return 7.5625*t2*t2+.9375;}const t2=t-2.625/2.75;return 7.5625*t2*t2+.984375;}default:return 1-Math.pow(1-t,3);}}/** Resolve fade preset to center position (normalized 0-1) and axis mode */function resolveFadePreset(preset,customX,customY){switch(preset){case\"center\":return{cx:.5,cy:.5,axis:\"radial\"};case\"top\":return{cx:.5,cy:0,axis:\"horizontal\"};case\"bottom\":return{cx:.5,cy:1,axis:\"horizontal\"};case\"left\":return{cx:0,cy:.5,axis:\"vertical\"};case\"right\":return{cx:1,cy:.5,axis:\"vertical\"};case\"custom\":return{cx:customX/100,cy:customY/100,axis:\"radial\"};default:return{cx:.5,cy:.5,axis:\"radial\"};}}/** Compute fade distance for a dot at normalized position (nx, ny) */function computeFadeDistance(nx,ny,cx,cy,axis,r){if(axis===\"horizontal\"){return Math.abs(ny-cy)/r;}if(axis===\"vertical\"){return Math.abs(nx-cx)/r;}const dx=nx-cx;const dy=ny-cy;return Math.sqrt(dx*dx+dy*dy)/r;}/** Resolve pulse preset to speed + intensity values */function resolvePulsePreset(preset){switch(preset){case\"gentle\":return{speed:.4,intensity:.5};case\"heartbeat\":return{speed:1.2,intensity:1.5};case\"ocean\":return{speed:.6,intensity:2};case\"fireflies\":return{speed:3,intensity:.8};case\"dramatic\":return{speed:.3,intensity:2.5};case\"nervous\":return{speed:4.5,intensity:.4};default:return null// \"custom\" — use manual values\n;}}// ─── Component ──────────────────────────────────────────────\n/**\n * @framerDisableUnlink\n */export default function DotGrid(props){const{grid={},color:rawColor,backgroundColor:rawBg,fade={},mouse={},animation={},pulse={},interaction={},style}=props;// Null-guard colors — JS default values only cover undefined, not null.\n// Framer can pass null during color picker transitions or undo.\nconst color=rawColor??\"#F97316\";const backgroundColor=rawBg??\"#FAF5F0\";const{dotShape=\"circle\",dotSize=10,gap=28}=grid;const{preset:fadePreset=\"center\",size:fadeSize=.35,softness:fadeSoftness=.4,invert:fadeInvert=false,x:fadeCustomX=50,y:fadeCustomY=50}=fade;const fadeEnabled=fadePreset!==\"none\";const fadeResolved=useMemo(()=>resolveFadePreset(fadePreset,fadeCustomX,fadeCustomY),[fadePreset,fadeCustomX,fadeCustomY]);const{radius:mouseRadius=120,growth:mouseGrowth=1.8}=mouse;const{trigger:appearTrigger=\"mount\",easing:appearEasing=\"ease-out\",duration:appearDuration=1.2,stagger:appearStagger=.6,direction:appearDirection=\"top-left\"}=animation;const{enabled:pulseEnabled=true,preset:pulsePreset=\"custom\",speed:pulseSpeedRaw=1,intensity:pulseIntensityRaw=1}=pulse;const pulseResolved=resolvePulsePreset(pulsePreset);const pulseSpeed=pulseResolved?.speed??pulseSpeedRaw;const pulseIntensity=pulseResolved?.intensity??pulseIntensityRaw;const{style:interactionStyle=\"none\",radius:interactionRadius=200,duration:interactionDuration=.6}=interaction;const canvasRef=useRef(null);const containerRef=useRef(null);const mouseRef=useRef({x:-9999,y:-9999});const mouseActiveRef=useRef(false);const settleFramesRef=useRef(0);const animProgress=useRef(0);const rafRef=useRef(0);const startTimeRef=useRef(0);const mouseScalesRef=useRef(new Float32Array(0));const pulseStartRef=useRef(0);const[isClient,setIsClient]=useState(false);const isStatic=useIsStaticRenderer();const isInViewRef=useRef(appearTrigger===\"mount\");const interactionRef=useRef([]);const pulseSeedRef=useRef(new Float32Array(0));const drawRef=useRef(()=>{});useEffect(()=>{startTransition(()=>setIsClient(true));return()=>{};},[]);// IntersectionObserver for \"inView\" trigger\nuseEffect(()=>{if(appearTrigger!==\"inView\"||!isClient)return()=>{};const container=containerRef.current;if(!container)return()=>{};const observer=new IntersectionObserver(([entry])=>{if(entry.isIntersecting){isInViewRef.current=true;startTimeRef.current=performance.now();observer.disconnect();}},{threshold:.1});observer.observe(container);return()=>observer.disconnect();},[isClient,appearTrigger]);// Reduced motion: disable mouse grow effect\nconst reducedMotionRef=useRef(false);useEffect(()=>{if(typeof window===\"undefined\")return()=>{};const mq=window.matchMedia(\"(prefers-reduced-motion: reduce)\");reducedMotionRef.current=mq.matches;const handler=e=>{reducedMotionRef.current=e.matches;};mq.addEventListener(\"change\",handler);return()=>mq.removeEventListener(\"change\",handler);},[]);// Stable random seed for \"random\" appear direction\nconst randomSeedRef=useRef(new Float32Array(0));const draw=useCallback(()=>{const canvas=canvasRef.current;if(!canvas)return;const ctx=canvas.getContext(\"2d\");if(!ctx)return;const dpr=window.devicePixelRatio||1;// Use offsetWidth/Height — getBoundingClientRect() is affected by\n// ancestor CSS transforms (Framer's canvas zoom), causing dots to\n// render smaller than the actual layout size.\nconst w=canvas.offsetWidth;const h=canvas.offsetHeight;if(canvas.width!==w*dpr||canvas.height!==h*dpr){canvas.width=w*dpr;canvas.height=h*dpr;}ctx.setTransform(dpr,0,0,dpr,0,0);// Clear canvas — background is handled by the container div's CSS\n// backgroundColor, which supports all color formats (oklch, hsl, etc.).\n// Canvas 2D's fillStyle silently rejects modern CSS colors and retains\n// the previous value, causing the wrong color to appear.\nctx.clearRect(0,0,w,h);const spacing=dotSize+gap;const r=dotSize/2;const availW=w-2*r;const availH=h-2*r;const cols=Math.max(1,Math.floor(availW/spacing)+1);const rows=Math.max(1,Math.floor(availH/spacing)+1);const offsetX=r+(availW-(cols-1)*spacing)/2;const offsetY=r+(availH-(rows-1)*spacing)/2;const mx=mouseRef.current.x;const my=mouseRef.current.y;const totalDots=cols*rows;const progress=animProgress.current;const motionReduced=reducedMotionRef.current;const pulseActive=pulseEnabled&&!motionReduced;const pulseElapsed=pulseActive?(performance.now()-pulseStartRef.current)/1e3:0;// Ensure random seed is large enough\nif(appearDirection===\"random\"&&randomSeedRef.current.length<totalDots){const seed=new Float32Array(totalDots);for(let i=0;i<totalDots;i++)seed[i]=Math.random();randomSeedRef.current=seed;}// Ensure per-dot mouse scale array is large enough\nif(mouseScalesRef.current.length<totalDots){const old=mouseScalesRef.current;const arr=new Float32Array(totalDots);// Fill with 1 (no scale), copy existing values\narr.fill(1);arr.set(old.subarray(0,Math.min(old.length,totalDots)));mouseScalesRef.current=arr;}const mouseScales=mouseScalesRef.current;// Resolve dot color to a canvas-compatible format — Framer can send\n// oklch, hsl, color-mix, etc. which canvas 2D silently rejects.\nctx.fillStyle=resolveColorForCanvas(color,\"#000000\");for(let row=0;row<rows;row++){for(let col=0;col<cols;col++){const x=offsetX+col*spacing;const y=offsetY+row*spacing;const dotIdx=row*cols+col;// Normalized position (0-1)\nconst nx=cols>1?col/(cols-1):.5;const ny=rows>1?row/(rows-1):.5;// Vignette fade\nlet alpha=fadeEnabled?0:1;if(fadeEnabled){const d=computeFadeDistance(nx,ny,fadeResolved.cx,fadeResolved.cy,fadeResolved.axis,fadeSize+.001);const spread=.1+fadeSoftness*1.4;const edge=1-spread;const t=Math.max(0,Math.min(1,(d-edge)/(spread+.001)));const vignette=t*t*(3-2*t);alpha=fadeInvert?1-vignette:vignette;}// Appear animation with directional wave + opacity\nconst appearActive=isInViewRef.current;let scale=1;let appearAlpha=1;if(appearActive){const normalizedIndex=computeAppearIndex(row,col,rows,cols,appearDirection,randomSeedRef.current);const staggerDelay=normalizedIndex*appearStagger;const dotProgress=Math.max(0,Math.min(1,(progress-staggerDelay)/(1-appearStagger+.001)));scale=applyEasing(dotProgress,appearEasing);// Opacity leads scale for a softer entrance\nconst opacityT=Math.min(1,dotProgress*1.5);appearAlpha=opacityT*opacityT*(3-2*opacityT);}else{scale=0;appearAlpha=0;}// Mouse proximity growth (disabled for reduced motion)\nlet targetMouseScale=1;if(!motionReduced&&mx>-999){const mdx=x-mx;const mdy=y-my;const mDist=Math.sqrt(mdx*mdx+mdy*mdy);if(mDist<mouseRadius){const t=1-mDist/mouseRadius;const proximity=t*t*(3-2*t)// smoothstep\n;targetMouseScale=1+proximity*(mouseGrowth-1);}}// Adaptive lerp — snappier approach, gentler return\nconst current=mouseScales[dotIdx];const diff=targetMouseScale-current;const lerpSpeed=Math.abs(diff)<.01?1:diff>0?.16:.09;mouseScales[dotIdx]=current+diff*lerpSpeed;// Click/tap interaction effects\nlet interactionScale=0;const interactions=interactionRef.current;const now=performance.now();for(let k=0;k<interactions.length;k++){const ev=interactions[k];const elapsed=(now-ev.time)/1e3;if(elapsed>interactionDuration)continue;const wave=elapsed/interactionDuration;// Ease-out wave expansion for more natural spread\nconst easedWave=1-(1-wave)*(1-wave);const waveRadius=interactionRadius*easedWave;const dx=x-ev.x;const dy=y-ev.y;const dist=Math.sqrt(dx*dx+dy*dy);const thickness=interactionRadius*.35;const rawProximity=1-Math.min(1,Math.abs(dist-waveRadius)/thickness);// Smoothstep the proximity for softer edges\nconst proximity=rawProximity*rawProximity*(3-2*rawProximity);if(proximity>0){// Cubic fade-out for graceful dissipation\nconst fade=(1-wave)*(1-wave);if(interactionStyle===\"ripple\"){interactionScale+=proximity*fade*2;}else if(interactionStyle===\"repel\"){interactionScale-=proximity*fade*1;}}}// Pulse — preset-specific wave shapes\nlet pulseScale=1;let pulseAlpha=1;if(pulseActive){const t=pulseElapsed;const idx=dotIdx;switch(pulsePreset){case\"gentle\":{// Smooth radial breathing wave from center\nconst dist=Math.sqrt((nx-.5)*(nx-.5)+(ny-.5)*(ny-.5));const wave=Math.sin(t*pulseSpeed*1.5-dist*6);pulseScale=1+wave*.12*pulseIntensity;pulseAlpha=.7+wave*.3*pulseIntensity;break;}case\"heartbeat\":{// Double-beat (lub-dub) pattern\nconst cycle=t*pulseSpeed*.8%1;let beat=0;if(cycle<.12)beat=Math.sin(cycle/.12*Math.PI);else if(cycle>.18&&cycle<.3)beat=Math.sin((cycle-.18)/.12*Math.PI)*.6;// Radial delay from center\nconst dist=Math.sqrt((nx-.5)*(nx-.5)+(ny-.5)*(ny-.5));const delayed=Math.max(0,beat-dist*.8);pulseScale=1+delayed*.35*pulseIntensity;pulseAlpha=.6+delayed*.4*pulseIntensity;break;}case\"ocean\":{// Directional rolling waves (left to right + depth)\nconst wave1=Math.sin(t*pulseSpeed*1.2-nx*8);const wave2=Math.sin(t*pulseSpeed*.7-ny*5+1.3);const combined=wave1*.7+wave2*.3;pulseScale=1+combined*.15*pulseIntensity;pulseAlpha=.5+(combined*.5+.5)*.5*pulseIntensity;break;}case\"fireflies\":{// Random independent twinkle per dot\nif(pulseSeedRef.current.length<totalDots){const seed=new Float32Array(totalDots);for(let i=0;i<totalDots;i++)seed[i]=Math.random();pulseSeedRef.current=seed;}const offset=pulseSeedRef.current[idx]*6.28;const freq=.8+pulseSeedRef.current[idx]*2.2;const raw=Math.sin(t*pulseSpeed*freq+offset);// Sharpen into brief flashes\nconst flash=Math.max(0,raw)**3;pulseScale=1+flash*.5*pulseIntensity;pulseAlpha=.3+flash*.7*pulseIntensity;break;}case\"dramatic\":{// Slow powerful radial expansion from center\nconst dist=Math.sqrt((nx-.5)*(nx-.5)+(ny-.5)*(ny-.5));const wave=Math.sin(t*pulseSpeed*.8-dist*10);const envelope=Math.max(0,wave);pulseScale=1+envelope*.4*pulseIntensity;pulseAlpha=.3+envelope*.7*pulseIntensity;break;}case\"nervous\":{// Fast jittery per-dot noise\nif(pulseSeedRef.current.length<totalDots){const seed=new Float32Array(totalDots);for(let i=0;i<totalDots;i++)seed[i]=Math.random();pulseSeedRef.current=seed;}const s=pulseSeedRef.current[idx];const jitter1=Math.sin(t*pulseSpeed*7+s*50);const jitter2=Math.sin(t*pulseSpeed*11+s*30);const jitter=jitter1*.6+jitter2*.4;pulseScale=1+jitter*.15*pulseIntensity;pulseAlpha=.6+jitter*.25*pulseIntensity;break;}default:{// Custom — layered sine waves for organic feel\nconst phase1=nx*4+ny*3;const phase2=nx*2.3-ny*5.1;const wave1=Math.sin(t*pulseSpeed*2+phase1);const wave2=Math.sin(t*pulseSpeed*1.3+phase2)*.5;const combined=(wave1+wave2)/1.5;pulseScale=1+combined*.18*pulseIntensity;pulseAlpha=.5+(combined*.5+.5)*.5*pulseIntensity;break;}}// Clamp final values\npulseScale=Math.max(.4,Math.min(2.5,pulseScale));pulseAlpha=Math.max(.15,Math.min(1,pulseAlpha));}const finalScale=Math.max(0,scale*mouseScales[dotIdx]*pulseScale+interactionScale);const radius=dotSize/2*finalScale;if(radius<.3)continue;// Combine vignette fade with appear opacity and pulse\nconst finalAlpha=alpha*appearAlpha*pulseAlpha;ctx.globalAlpha=finalAlpha;ctx.beginPath();drawDot(ctx,dotShape,x,y,radius);ctx.fill();}}ctx.globalAlpha=1;},[dotShape,dotSize,gap,color,fadeEnabled,fadeResolved,fadeSize,fadeSoftness,fadeInvert,mouseRadius,mouseGrowth,appearEasing,appearStagger,appearDirection,pulseEnabled,pulsePreset,pulseSpeed,pulseIntensity,interactionStyle,interactionRadius,interactionDuration]);// Keep ref in sync so loops always call the latest draw without re-triggering effects\ndrawRef.current=draw;// Start/restart RAF loop — called on mount and on mouse enter\nconst startLoop=useCallback(()=>{if(rafRef.current)return;settleFramesRef.current=0;const loop=()=>{// Clean up expired interactions\nconst now=performance.now();const ints=interactionRef.current;while(ints.length>0&&(now-ints[0].time)/1e3>interactionDuration+.1){ints.shift();}drawRef.current();const hasActiveInteractions=ints.length>0;if(pulseEnabled||animProgress.current<1||mouseActiveRef.current||hasActiveInteractions){settleFramesRef.current=0;rafRef.current=requestAnimationFrame(loop);}else{// After mouse leaves, run ~25 frames for scales to settle smoothly\nsettleFramesRef.current++;if(settleFramesRef.current<25){rafRef.current=requestAnimationFrame(loop);}else{rafRef.current=0;}}};rafRef.current=requestAnimationFrame(loop);},[interactionDuration,pulseEnabled]);// Animation loop — only runs the appear animation once\nuseEffect(()=>{if(!isClient)return()=>{};// Animation already completed — just redraw, don't replay\nif(animProgress.current>=1){if(!pulseStartRef.current)pulseStartRef.current=performance.now();drawRef.current();startLoop();return()=>{cancelAnimationFrame(rafRef.current);rafRef.current=0;};}if(appearTrigger===\"mount\"){startTimeRef.current=performance.now();isInViewRef.current=true;}pulseStartRef.current=performance.now();const duration=appearDuration*1e3;const appearLoop=()=>{if(!isInViewRef.current){rafRef.current=requestAnimationFrame(appearLoop);return;}const elapsed=performance.now()-startTimeRef.current;animProgress.current=Math.min(1,elapsed/duration);drawRef.current();if(animProgress.current<1){rafRef.current=requestAnimationFrame(appearLoop);}else{// Appear done — switch to idle-aware loop\nrafRef.current=0;startLoop();}};rafRef.current=requestAnimationFrame(appearLoop);return()=>{cancelAnimationFrame(rafRef.current);rafRef.current=0;};},[isClient,appearDuration,appearTrigger,startLoop]);// Redraw when props change while animation loop is idle\nuseEffect(()=>{if(!isClient)return()=>{};if(animProgress.current>=1&&rafRef.current===0){drawRef.current();}return()=>{};},[isClient,draw]);// Mouse tracking\nuseEffect(()=>{if(!isClient)return()=>{};const container=containerRef.current;if(!container)return()=>{};const onMove=e=>{const rect=container.getBoundingClientRect();// Scale from visual (transformed) coords to layout coords\nconst scaleX=container.offsetWidth/rect.width;const scaleY=container.offsetHeight/rect.height;mouseRef.current.x=(e.clientX-rect.left)*scaleX;mouseRef.current.y=(e.clientY-rect.top)*scaleY;if(!mouseActiveRef.current){mouseActiveRef.current=true;startLoop();}};const onLeave=()=>{mouseRef.current.x=-9999;mouseRef.current.y=-9999;mouseActiveRef.current=false;// Loop will self-stop after mouse scales settle\n};const onClick=e=>{if(interactionStyle===\"none\")return;const rect=container.getBoundingClientRect();const scaleX=container.offsetWidth/rect.width;const scaleY=container.offsetHeight/rect.height;interactionRef.current.push({x:(e.clientX-rect.left)*scaleX,y:(e.clientY-rect.top)*scaleY,time:performance.now()});startLoop();};container.addEventListener(\"mousemove\",onMove);container.addEventListener(\"mouseleave\",onLeave);container.addEventListener(\"click\",onClick);return()=>{container.removeEventListener(\"mousemove\",onMove);container.removeEventListener(\"mouseleave\",onLeave);container.removeEventListener(\"click\",onClick);};},[isClient,interactionStyle,startLoop]);// Static / SSR fallback — individual SVG dots with fade,\n// matching the canvas draw() logic exactly.\nif(isStatic||!isClient){const spacing=dotSize+gap;const r=dotSize/2;// Use actual component dimensions from Framer's style prop so dot\n// sizes match the canvas renderer instead of scaling with a fixed viewBox.\nconst vw=typeof style?.width===\"number\"?style.width:1200;const vh=typeof style?.height===\"number\"?style.height:700;const availW=vw-2*r;const availH=vh-2*r;const cols=Math.max(1,Math.floor(availW/spacing)+1);const rows=Math.max(1,Math.floor(availH/spacing)+1);const offsetX=r+(availW-(cols-1)*spacing)/2;const offsetY=r+(availH-(rows-1)*spacing)/2;const dots=[];for(let row=0;row<rows;row++){for(let col=0;col<cols;col++){const x=offsetX+col*spacing;const y=offsetY+row*spacing;const nx=cols>1?col/(cols-1):.5;const ny=rows>1?row/(rows-1):.5;// Fade alpha (same math as canvas draw)\nlet alpha=fadeEnabled?0:1;if(fadeEnabled){const d=computeFadeDistance(nx,ny,fadeResolved.cx,fadeResolved.cy,fadeResolved.axis,fadeSize+.001);const spread=.1+fadeSoftness*1.4;const edge=1-spread;const t=Math.max(0,Math.min(1,(d-edge)/(spread+.001)));const vignette=t*t*(3-2*t);alpha=fadeInvert?1-vignette:vignette;}if(alpha<.01)continue;dots.push(/*#__PURE__*/_jsx(\"path\",{d:dotShapeSVGPath(dotShape,x,y,r),fill:color,fillOpacity:alpha},`${row}-${col}`));}}return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{...style,width:\"100%\",height:\"100%\",minWidth:200,minHeight:200,backgroundColor,position:\"relative\",overflow:\"hidden\"},children:/*#__PURE__*/_jsx(\"svg\",{style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\"},viewBox:`0 0 ${vw} ${vh}`,preserveAspectRatio:\"xMidYMid slice\",children:dots})});}return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{...style,width:\"100%\",height:\"100%\",minWidth:200,minHeight:200,position:\"relative\",overflow:\"hidden\",backgroundColor},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{display:\"block\",width:\"100%\",height:\"100%\"}})});}DotGrid.displayName=\"Dot Grid\";DotGrid.defaultProps={grid:{dotShape:\"circle\",dotSize:10,gap:28},color:\"#F97316\",backgroundColor:\"#FAF5F0\",fade:{preset:\"center\",size:.35,softness:.4,invert:false,x:50,y:50},mouse:{radius:120,growth:1.8},animation:{trigger:\"mount\",easing:\"ease-out\",duration:1.2,stagger:.6,direction:\"top-left\"},pulse:{enabled:true,preset:\"custom\",speed:1,intensity:1},interaction:{style:\"none\",radius:200,duration:.6}};addPropertyControls(DotGrid,{grid:{type:ControlType.Object,title:\"Grid\",controls:{dotShape:{type:ControlType.Enum,title:\"Shape\",options:[\"circle\",\"square\",\"diamond\",\"triangle\",\"star\",\"plus\",\"ring\"],optionTitles:[\"Circle\",\"Square\",\"Diamond\",\"Triangle\",\"Star\",\"Plus\",\"Ring\"],defaultValue:\"circle\"},dotSize:{type:ControlType.Number,title:\"Dot Size\",min:2,max:30,step:1,unit:\"px\",defaultValue:10},gap:{type:ControlType.Number,title:\"Gap\",min:4,max:60,step:1,unit:\"px\",defaultValue:28}}},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#F97316\"},backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"#FAF5F0\"},fade:{type:ControlType.Object,title:\"Fade\",controls:{preset:{type:ControlType.Enum,title:\"Preset\",options:[\"none\",\"center\",\"top\",\"bottom\",\"left\",\"right\",\"custom\"],optionTitles:[\"None\",\"Center\",\"Top\",\"Bottom\",\"Left\",\"Right\",\"Custom\"],defaultValue:\"center\"},size:{type:ControlType.Number,title:\"Size\",min:.05,max:.7,step:.01,defaultValue:.35,hidden:props=>props.fade?.preset===\"none\",description:\"Clear area size (smaller = more dots hidden)\"},softness:{type:ControlType.Number,title:\"Softness\",min:0,max:1,step:.05,defaultValue:.4,hidden:props=>props.fade?.preset===\"none\"},invert:{type:ControlType.Boolean,title:\"Invert\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",hidden:props=>props.fade?.preset===\"none\"},x:{type:ControlType.Number,title:\"X Position\",min:0,max:100,step:1,unit:\"%\",defaultValue:50,hidden:props=>props.fade?.preset!==\"custom\"},y:{type:ControlType.Number,title:\"Y Position\",min:0,max:100,step:1,unit:\"%\",defaultValue:50,hidden:props=>props.fade?.preset!==\"custom\"}}},mouse:{type:ControlType.Object,title:\"Mouse Effect\",controls:{radius:{type:ControlType.Number,title:\"Radius\",min:30,max:400,step:10,unit:\"px\",defaultValue:120,description:\"Area of effect around cursor\"},growth:{type:ControlType.Number,title:\"Growth\",min:1,max:4,step:.1,defaultValue:1.8,description:\"Max scale multiplier for dots near cursor\"}}},animation:{type:ControlType.Object,title:\"Appear Animation\",controls:{trigger:{type:ControlType.Enum,title:\"Trigger\",options:[\"mount\",\"inView\"],optionTitles:[\"On Mount\",\"In View\"],defaultValue:\"mount\"},easing:{type:ControlType.Enum,title:\"Easing\",options:[\"ease-out\",\"ease-in-out\",\"linear\",\"spring\",\"bounce\"],optionTitles:[\"Ease Out\",\"Ease In-Out\",\"Linear\",\"Spring\",\"Bounce\"],defaultValue:\"ease-out\"},duration:{type:ControlType.Number,title:\"Duration\",min:.2,max:4,step:.1,unit:\"s\",defaultValue:1.2},stagger:{type:ControlType.Number,title:\"Stagger\",min:0,max:.9,step:.05,defaultValue:.6,description:\"How much the wave is spread across dots (0 = all at once)\"},direction:{type:ControlType.Enum,title:\"Direction\",options:[\"top-left\",\"top-right\",\"bottom-left\",\"bottom-right\",\"center-out\",\"edges-in\",\"random\"],optionTitles:[\"Top Left\",\"Top Right\",\"Bottom Left\",\"Bottom Right\",\"Center Out\",\"Edges In\",\"Random\"],defaultValue:\"top-left\"}}},pulse:{type:ControlType.Object,title:\"Pulse Animation\",controls:{enabled:{type:ControlType.Boolean,title:\"Enabled\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},preset:{type:ControlType.Enum,title:\"Preset\",options:[\"custom\",\"gentle\",\"heartbeat\",\"ocean\",\"fireflies\",\"dramatic\",\"nervous\"],optionTitles:[\"Custom\",\"Gentle Breathe\",\"Heartbeat\",\"Ocean Waves\",\"Fireflies\",\"Dramatic\",\"Nervous Energy\"],defaultValue:\"custom\",hidden:props=>!props.pulse?.enabled},speed:{type:ControlType.Number,title:\"Speed\",min:.1,max:5,step:.1,defaultValue:1,hidden:props=>!props.pulse?.enabled||props.pulse?.preset!==\"custom\"},intensity:{type:ControlType.Number,title:\"Intensity\",min:.1,max:3,step:.1,defaultValue:1,hidden:props=>!props.pulse?.enabled||props.pulse?.preset!==\"custom\",description:\"Strength of the scale throb and opacity ripple\"}}},interaction:{type:ControlType.Object,title:\"Click Effect\",controls:{style:{type:ControlType.Enum,title:\"Style\",options:[\"none\",\"ripple\",\"repel\"],optionTitles:[\"None\",\"Ripple\",\"Repel\"],defaultValue:\"none\"},radius:{type:ControlType.Number,title:\"Radius\",min:50,max:500,step:10,unit:\"px\",defaultValue:200,hidden:props=>props.interaction?.style===\"none\",description:\"Size of the ripple/repel wave\"},duration:{type:ControlType.Number,title:\"Duration\",min:.2,max:2,step:.1,unit:\"s\",defaultValue:.6,hidden:props=>props.interaction?.style===\"none\",description:\"How long the effect lasts\"}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DotGrid\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FadeGrid.map"],"mappings":"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"}