{"version":3,"file":"script_main.Cd9JtUK6.mjs","names":["useRef","React.useMemo","useRef","React.useId","React.createElement","SiteBackground","Framer.PageRoot","Framer.lazy","Framer.useCurrentRoute","Framer.useLocaleInfo","Framer.useRouter","React.Fragment","React.memo","React.useCallback","React.useEffect","React.useRef","React.useState","React.useLayoutEffect","Framer.LazyValue","Framer.GracefullyDegradingErrorBoundary","Framer.PageEffectsProvider","Framer.patchRoutesForABTesting","Framer.inferInitialRouteFromPath","Framer.yieldToMain","React.startTransition","Framer.ErrorPlaceholder"],"sources":["https:/framerusercontent.com/modules/DURUsBqkoCbZJ3HhqL3l/LJDRor4th4k3Rs85c8Cq/BG.js","https:/framerusercontent.com/modules/skqTvafc00sshdpJRaux/K7i3inIS97oW2p6IHrOw/NKRWE7ACt.js","framer:toplevel/main"],"sourcesContent":["// Cursor Ring Field — Originkit\n// Using component defaults.\n// User request: Update CursorRingField for site-wide background use; preserve current WebGL dotted ring-field animation and pointer-responsive autonomous motion; switch visual defaults to acid green (#B7FF31) only with tonal alpha/brightness variation; default root background transparent; add Framer property controls for acidColor, opacity/intensity, density, dotSize, speed, and background; keep parent-filling/full-viewport compatibility; make root pointer-events none; keep safe behavior in Framer canvas/static contexts; do not add any other hues.\n\"use client\";import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";/**\n * CURSOR RING FIELD — a Poisson-scattered field of soft capsules that a pulsing\n * ring, dragged along under the pointer, lights up and shoves outward.\n *\n * A port of a shipped Three.js hero into this folder's raw-GL family. The\n * interaction, the motion and the framing are the source's, term for term. The\n * machinery underneath is not: no Three.js, no GSAP, no bundled Poisson library.\n *\n * WHY GPGPU AND NOT A PURE VERTEX-SHADER SCENE. Most scenes in 3d/ compute a\n * point's position from time and a seed alone, so nothing has to be remembered.\n * This one leaks: each frame a point keeps 80% of last frame's displacement,\n * its scale eases toward the ring band, and its \"energy\" is a decaying\n * accumulator of that scale. That history lives in a floating-point texture —\n * one texel per point, `xy` position, `z` scale, `w` energy — integrated by a\n * fragment shader into a second texture which is then swapped in. The CPU never\n * touches a particle.\n *\n * WHAT THE RING IS. Not geometry. It is three smoothsteps of the distance from\n * each point's HOME position to the ring centre: a wide band (`t`), a thin hot\n * band (`t2`), and the fill inside (`t3`). Those sum into the point's target\n * scale, and `t2` alone drives a radial shove away from the centre. Sampling\n * from HOME and not from the live position is what keeps the ring a ring — read\n * the live position and a shoved point carries its own halo with it, smearing\n * the band into a comet.\n *\n * THE INTERACTION IS THE SOURCE'S, AND ONLY THE SOURCE'S. The camera is fixed.\n * The pointer moves the RING, never the camera — there is no orbit, no drag, no\n * gesture state. A pointer over the component is ray-cast onto the field plane\n * and the ring eases toward that point on a 130ms time constant, with a small\n * noise jitter riding on top. With no pointer — which is every frame on the\n * Framer canvas — the ring wanders on two slow 1D value-noise walks at 0.01\n * instead, so the scene is never dead and the canvas and the preview agree. A\n * single eased `follow` scalar crosses between the two, target AND rate, so the\n * pointer arriving or leaving never steps the ring.\n *\n * The cursor reach is the source's 0.175 and not the exact plane mapping (which\n * would be 1/5). The ring therefore trails the pointer at 87.5% of its\n * displacement from centre, which is what keeps the band inside the frame at\n * the edges. It is deliberate, and the probe asserts the ratio rather than\n * asserting a round-trip that would fail by design.\n *\n * THE SIMULATION IS PER-FRAME, ON PURPOSE. Its decay constants are NOT\n * normalised to wall-clock time. The position line is a feedback loop, not a\n * relaxation, so its equilibrium depends on the decay — normalise it and every\n * late frame rescales the whole field about the origin, a ~20px correlated\n * radial pulse that reads as depth flicker. Full working in the comment above\n * SIM_FRAG. Only the ring's cursor follow is dt-corrected, and only because it\n * IS a relaxation: its equilibrium is the pointer either way, so varying the\n * rate cannot make it pulse.\n *\n * Rule 6 recipe: ONE GL context built in useEffect([]); every live input read\n * from a ref inside a raw rAF loop (raw rAF ticks on the Framer canvas, unlike\n * IntersectionObserver / framer-motion appear props). Never calls\n * loseContext() — getContext() hands back the SAME force-lost context on the\n * next StrictMode mount and renders black. Density rebuilds the buffers and the\n * textures, never the context.\n *\n * CONTEXT LADDER: WebGL2 + EXT_color_buffer_float (RGBA32F), else WebGL2\n * RGBA16F (colour-renderable in core, no extension), else WebGL1 +\n * OES_texture_float + WEBGL_color_buffer_float, else a STATIC fallback that\n * runs the same field maths inline in the render vertex shader with the memory\n * terms dropped. The fallback still breathes and still follows the ring; it\n * just has no lag. Shaders are GLSL ES 1.00 so one set compiles on both.\n *//* ---------------------------------------------------------------- constants */const FIELD=500// the sampling domain, in source units, before centring\n;const HALF=FIELD/2// points are centred on this, then divided by it\n;const WORLD=5// unit field [-1,1] maps to [-5,5] world units — mesh.scale\n;const CURSOR_REACH=.175// the source's cursor→ring gain. NOT 1/WORLD.\n;/**\n * The follow rates, as a per-60fps-frame fraction, dt-corrected at the call site.\n *\n * CURSOR_LERP is a 130ms time constant. It used to be 0.02, which is 825ms — the\n * ring reached 90% of the pointer 1.9 SECONDS after the pointer stopped, and a\n * pointer crossing the frame in half a second left it a full frame-width behind.\n * That is what read as the ring not tracking the cursor.\n *\n * WANDER_LERP stays the source's 0.01: with no pointer the ring is not chasing\n * anything, and the slow drift IS the resting look.\n *\n * HANDOVER blends between the two targets AND between the two rates when the\n * pointer arrives or leaves, so neither the position nor the responsiveness\n * steps. Without it, entering the frame snapped the target from the wander walk\n * to the pointer in one frame.\n */const CURSOR_LERP=.12;const WANDER_LERP=.01;const HANDOVER_LERP=.08;/**\n * The noise garnish riding on the cursor-driven ring, in ring space.\n *\n * It was 0.1 — the same term the free wander uses. Measured against the geometry\n * that is 83% of the cursor's ENTIRE vertical travel (±0.121 at the shipped\n * camera) and 72% of the visible half-height, so the ring spent most of its time\n * somewhere other than under the pointer and the noise, not the cursor, was\n * driving it. At 0.01 it is 8% of the cursor's travel: a live edge on the ring,\n * not a second, louder input.\n */const CURSOR_JITTER=.01;const FOV=40// vertical field of view, degrees — the source camera\n;const DPR_CAP=2;const MAX_POINTS=65536// 256² state texture, the source's ceiling\n;const TAU=Math.PI*2;const MAX_COLORS=5// the ramp's stop count — must match uColors[] in the shader\n;const DEFAULT_ACID=\"#B7FF31\";/**\n * Cut dial, frozen at the value it shipped with: the thin inner band, `t2`,\n * which is the one that does the pushing. The panel row is gone; the sim still\n * gets the same number through uRingWidth2 and nothing renders differently.\n */const RING_EDGE=4;/* ------------------------------------------------------------ glsl fragments */// Ashima 3D simplex. Both programs need it: the sim shader for the displacement\n// field, the render shader for the per-point colour and sprite rotation.\nconst NOISE=`\nvec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}\nvec4 mod289(vec4 x){return x-floor(x*(1.0/289.0))*289.0;}\nvec4 permute(vec4 x){return mod289(((x*34.0)+1.0)*x);}\nvec4 taylorInvSqrt(vec4 r){return 1.79284291400159-0.85373472095314*r;}\nfloat snoise(vec3 v){\n  const vec2 C=vec2(1.0/6.0,1.0/3.0);\n  const vec4 D=vec4(0.0,0.5,1.0,2.0);\n  vec3 i=floor(v+dot(v,C.yyy));\n  vec3 x0=v-i+dot(i,C.xxx);\n  vec3 g=step(x0.yzx,x0.xyz);\n  vec3 l=1.0-g;\n  vec3 i1=min(g.xyz,l.zxy);\n  vec3 i2=max(g.xyz,l.zxy);\n  vec3 x1=x0-i1+C.xxx;\n  vec3 x2=x0-i2+C.yyy;\n  vec3 x3=x0-D.yyy;\n  i=mod289(i);\n  vec4 p=permute(permute(permute(\n      i.z+vec4(0.0,i1.z,i2.z,1.0))\n    + i.y+vec4(0.0,i1.y,i2.y,1.0))\n    + i.x+vec4(0.0,i1.x,i2.x,1.0));\n  float n_=0.142857142857;\n  vec3 ns=n_*D.wyz-D.xzx;\n  vec4 j=p-49.0*floor(p*ns.z*ns.z);\n  vec4 x_=floor(j*ns.z);\n  vec4 y_=floor(j-7.0*x_);\n  vec4 x=x_*ns.x+ns.yyyy;\n  vec4 y=y_*ns.x+ns.yyyy;\n  vec4 h=1.0-abs(x)-abs(y);\n  vec4 b0=vec4(x.xy,y.xy);\n  vec4 b1=vec4(x.zw,y.zw);\n  vec4 s0=floor(b0)*2.0+1.0;\n  vec4 s1=floor(b1)*2.0+1.0;\n  vec4 sh=-step(h,vec4(0.0));\n  vec4 a0=b0.xzyw+s0.xzyw*sh.xxyy;\n  vec4 a1=b1.xzyw+s1.xzyw*sh.zzww;\n  vec3 p0=vec3(a0.xy,h.x);\n  vec3 p1=vec3(a0.zw,h.y);\n  vec3 p2=vec3(a1.xy,h.z);\n  vec3 p3=vec3(a1.zw,h.w);\n  vec4 norm=taylorInvSqrt(vec4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));\n  p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;\n  vec4 m=max(0.6-vec4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.0);\n  m=m*m;\n  return 42.0*dot(m*m,vec4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));\n}\n`;// THE FIELD, in one place. The simulation shader calls this and then integrates\n// the memory terms on top; the static fallback calls the same function from the\n// render vertex shader and uses the result raw. One definition means the\n// fallback cannot silently drift away from the real thing.\n//\n// Everything is evaluated at the point's HOME position (`ref`), never its live\n// one — see the header. `bandT` is the target scale, `bandHot` is the thin band\n// that does the pushing, `disp` is the ambient drift the whole field always has.\n// Every constant here is the source's.\nconst FIELD_TERMS=`\nvoid fieldTerms(\n    vec2 ref, vec2 ringPos, float time,\n    float ringRadius, float w1, float w2, float turb,\n    out vec2 disp, out float bandT, out float bandHot\n){\n    float dist = distance(ref, ringPos);\n\n    // Break the ring's own edge with a slow noise so it never reads as a\n    // mathematically clean circle. Only the OUTER smoothstep uses the wobbled\n    // distance — wobbling both would just translate the band.\n    float n0 = snoise(vec3(ref * 0.2 + vec2(18.4924, 72.9744), time * 0.5));\n    float dist1 = distance(ref + (n0 * 0.005), ringPos);\n\n    float t  = smoothstep(ringRadius - (w1 * 2.0), ringRadius, dist)\n             - smoothstep(ringRadius, ringRadius + w1, dist1);\n    float t2 = smoothstep(ringRadius - (w2 * 2.0), ringRadius, dist)\n             - smoothstep(ringRadius, ringRadius + w2, dist1);\n    float t3 = smoothstep(ringRadius + w2, ringRadius, dist); // solid interior\n\n    t  = pow(max(t, 0.0), 2.0);\n    t2 = pow(max(t2, 0.0), 3.0);\n\n    t += t2 * 3.0;                                   // hot core of the band\n    t += t3 * 0.4;                                   // lift everything inside\n    t += snoise(vec3(ref * 30.0 + vec2(11.4924, 12.9744), time * 0.5)) * t3 * 0.5;\n\n    // Baseline shimmer, present with no ring anywhere near: this is what keeps\n    // the rest of the field alive instead of black.\n    float nS = snoise(vec3(ref * 2.0 + vec2(18.4924, 72.9744), time * 0.5));\n    t += pow((nS + 1.5) * 0.5, 2.0) * 0.6;\n\n    // Two octaves of drift plus a standing wave. The wave is scaled by the\n    // distance to the ring so the band itself stays coherent while the far\n    // field ripples.\n    float n1 = snoise(vec3(ref * 4.0 + vec2(88.494, 32.4397), time * 0.35));\n    float n2 = snoise(vec3(ref * 4.0 + vec2(50.904, 120.947), time * 0.35));\n    float n3 = snoise(vec3(ref * 20.0 + vec2(18.4924, 72.9744), time * 0.5));\n    float n4 = snoise(vec3(ref * 20.0 + vec2(50.904, 120.947), time * 0.5));\n\n    vec2 d = vec2(n1, n2) * 0.03 + vec2(n3, n4) * 0.005;\n    d.x += sin((ref.x * 20.0) + (time * 4.0)) * 0.02 * clamp(dist, 0.0, 1.0);\n    d.y += cos((ref.y * 20.0) + (time * 3.0)) * 0.02 * clamp(dist, 0.0, 1.0);\n\n    disp = d * turb;\n    bandT = t;\n    bandHot = t2;\n}\n`;/* ------------------------------------------------------------- sim  program */const SIM_VERT=`\nprecision highp float;\nattribute vec2 aPos;\nvarying vec2 vUV;\nvoid main(){\n    vUV = aPos * 0.5 + 0.5;\n    gl_Position = vec4(aPos, 0.0, 1.0);\n}\n`;// State layout: rg = live position (unit space), b = scale, a = energy.\n//\n// THE DECAY CONSTANTS ARE PER-FRAME, NOT PER-SECOND, AND THAT IS DELIBERATE.\n// The obvious \"fix\" is to raise each of them to dt*60 so the settle time is\n// wall-clock. Do not. The position line is not a relaxation toward a target —\n// it is a feedback loop whose FIXED POINT depends on the decay:\n//\n//     F = ref + disp + 0.25 * F * k        =>      F* = (ref + disp) / (1 - 0.25k)\n//\n// With the source's constant k = 0.8 that gain is a fixed 1.25x. Make k depend\n// on frame time and the gain moves with it — 1.250 at 60fps, 1.288 at 120fps,\n// 1.237 at 50fps — so every ordinary late frame rescales the ENTIRE field about\n// the origin at once. Measured on a normal 60Hz rAF trace with a few percent of\n// jitter: a 20px peak-to-peak radial pulse on a 600px canvas, correlated across\n// every point, which reads as the whole field jumping toward and away from the\n// viewer. The constants stay as the source wrote them.\nconst SIM_FRAG=`\nprecision highp float;\n\nuniform sampler2D uState;\nuniform sampler2D uRefs;\nuniform vec2  uRingPos;\nuniform float uRingRadius;\nuniform float uRingWidth;\nuniform float uRingWidth2;\nuniform float uPush;\nuniform float uTurb;\nuniform float uTime;\n\nvarying vec2 vUV;\n\n${NOISE}\n${FIELD_TERMS}\n\nvoid main(){\n    vec4 frame = texture2D(uState, vUV);\n    vec2 ref   = texture2D(uRefs, vUV).xy;\n\n    float scale  = frame.z;\n    float energy = frame.w;\n    float time   = uTime * 0.5;\n\n    vec2 disp; float t; float t2;\n    fieldTerms(ref, uRingPos, time, uRingRadius, uRingWidth, uRingWidth2, uTurb, disp, t, t2);\n\n    // The memory term. Last frame's offset, decayed — this is the whole reason\n    // the component needs a state texture.\n    vec2 mem = frame.xy * 0.8;\n\n    // Radial shove away from the ring centre, gated on the thin hot band.\n    mem -= (uRingPos - (ref + disp)) * pow(max(t2, 0.0), 0.75) * uPush;\n\n    scale += (t - scale) * 0.2;\n\n    vec2 finalPos = ref + disp + (mem * 0.25);\n\n    energy = energy * 0.5 + scale * 0.25;\n\n    gl_FragColor = vec4(finalPos, scale, energy);\n}\n`;/* ---------------------------------------------------------- render program */// The camera is FIXED on +Z looking at the origin, exactly as the source has\n// it, so the whole projection is two multiplies and a constant w. Every point\n// sits on the z = 0 plane, which means every point is at the same depth, which\n// is why gl_PointSize carries no attenuation term — there is nothing to\n// attenuate. No matrix, no basis, no orbit state.\nconst RENDER_VERT=isStatic=>`\nprecision highp float;\n\nattribute vec2 aUV;\nattribute vec2 aRef;\n\nuniform sampler2D uState;\nuniform float uProjF;\nuniform float uAspect;\nuniform float uCamDist;\nuniform float uPointScale;\n${isStatic?`uniform vec2  uRingPos;\nuniform float uRingRadius;\nuniform float uRingWidth;\nuniform float uRingWidth2;\nuniform float uTurb;\nuniform float uTime;`:``}\n\nvarying vec2  vLocalPos;\nvarying float vScale;\nvarying float vEnergy;\n\n${isStatic?NOISE:``}\n${isStatic?FIELD_TERMS:``}\n\nvoid main(){\n${isStatic?`    vec2 disp; float t; float t2;\n    fieldTerms(aRef, uRingPos, uTime * 0.5, uRingRadius, uRingWidth, uRingWidth2, uTurb, disp, t, t2);\n    vec4 state = vec4(aRef + disp, t, t * 0.5);`:`    vec4 state = texture2D(uState, aUV);`}\n\n    vLocalPos = state.xy;\n    vScale    = state.z;\n    vEnergy   = state.w;\n\n    vec2 world = state.xy * ${WORLD.toFixed(1)};\n\n    gl_Position = vec4(world.x * uProjF / uAspect, world.y * uProjF, 0.0, uCamDist);\n\n    gl_PointSize = max(vScale, 0.0) * 7.0 * uPointScale;\n}\n`;// The sprite is a rounded capsule, not a disc, and it is rotated to point at the\n// ring centre — that radial alignment is what reads as a shockwave rather than\n// as noise. The noise term on the angle stops the alignment from being perfect,\n// which would band into visible spokes.\nconst RENDER_FRAG=`\nprecision highp float;\n\nvarying vec2  vLocalPos;\nvarying float vScale;\nvarying float vEnergy;\n\nuniform vec3  uColors[${MAX_COLORS}];\nuniform int   uColorCount;\nuniform vec2  uRingPos;\nuniform float uTime;\nuniform float uOpacity;\nuniform float uIntensity;\n\n${NOISE}\n\nfloat sdRoundBox(in vec2 p, in vec2 b, in float r){\n    vec2 q = abs(p) - b + r;\n    return min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r;\n}\n\nvec2 rotate(vec2 v, float a){\n    float s = sin(a);\n    float c = cos(a);\n    return mat2(c, s, -s, c) * v;\n}\n\nvoid main(){\n    float noiseAngle = snoise(vec3(vLocalPos * 10.0 + vec2(18.4924, 72.9744), uTime * 0.85));\n    float noiseColor = snoise(vec3(vLocalPos * 2.0  + vec2(74.664,  91.556),  uTime * 0.5));\n    noiseColor = (noiseColor + 1.0) * 0.5;\n\n    float angle = atan(vLocalPos.y - uRingPos.y, vLocalPos.x - uRingPos.x);\n\n    vec2 uv = gl_PointCoord.xy - vec2(0.5);\n    uv.y *= -1.0;\n    uv = rotate(uv, -angle + (noiseAngle * 0.5));\n\n    // An evenly-spaced N-stop ramp, N from 1 to ${MAX_COLORS}.\n    //\n    // The loop is what makes this legal on WebGL1. GLSL ES 1.00 only allows a\n    // uniform array to be indexed by a constant-index-expression, and a loop\n    // index is one — uColors[p] with p from a uniform would not compile.\n    // Bounds are constant and the tail is skipped by the count test.\n    //\n    // Each pass lerps the accumulated colour toward the next stop over that\n    // stop's span, CLAMPED and linear, not smoothstepped: once p is past a\n    // segment its factor is exactly 1, so the accumulator holds precisely\n    // uColors[i] and the result is an exact piecewise-linear ramp rather than a\n    // stack of eased blends. With one colour the loop never runs and the field\n    // is that flat colour.\n    float p = smoothstep(0.0, 0.75, pow(noiseColor, 2.0));\n    vec3 color = uColors[0];\n    for (int i = 0; i < ${MAX_COLORS-1}; i++) {\n        if (i < uColorCount - 1) {\n            float span = 1.0 / float(uColorCount - 1);\n            float t = clamp((p - float(i) * span) / span, 0.0, 1.0);\n            color = mix(color, uColors[i + 1], t);\n        }\n    }\n\n    float d = sdRoundBox(uv, vec2(0.5, 0.2), 0.25);\n    float mask = smoothstep(0.1, 0.0, d);\n\n    float a = mask * smoothstep(0.1, 0.2, vScale);\n    a *= mix(0.55, 1.0, noiseColor);\n    if (a < 0.01) discard;\n\n    // Every point is scaled by the ring energy it carries. This was behind an\n    // \"Energy Fade\" dial that shipped at 100%; the dial is gone and the term is\n    // frozen at that value, so the render is unchanged.\n    color = clamp(color * uIntensity, 0.0, 1.0);\n    color *= clamp(vEnergy, 0.0, 1.0);\n\n    gl_FragColor = vec4(color, clamp(a * uOpacity, 0.0, 1.0));\n}\n`;/* -------------------------------------------------------------- gl helpers */function compile(gl,type,src){const sh=gl.createShader(type);gl.shaderSource(sh,src);gl.compileShader(sh);if(!gl.getShaderParameter(sh,gl.COMPILE_STATUS)){const log=gl.getShaderInfoLog(sh);gl.deleteShader(sh);throw new Error(log||\"shader compile failed\");}return sh;}// Returns the uniform map AND the list of names that came back null. A typo'd\n// getUniformLocation fails silently and the effect just never appears, so the\n// probe asserts this list is empty (rule 8).\nfunction program(gl,vs,fs,names){const prog=gl.createProgram();const v=compile(gl,gl.VERTEX_SHADER,vs);const f=compile(gl,gl.FRAGMENT_SHADER,fs);gl.attachShader(prog,v);gl.attachShader(prog,f);gl.linkProgram(prog);gl.deleteShader(v);gl.deleteShader(f);if(!gl.getProgramParameter(prog,gl.LINK_STATUS)){const log=gl.getProgramInfoLog(prog);gl.deleteProgram(prog);throw new Error(log||\"program link failed\");}const u={};const nulls=[];for(const n of names){const loc=gl.getUniformLocation(prog,n);if(loc===null)nulls.push(n);u[n]=loc;}return{prog,u,nulls};}// Probe order is deliberate. RGBA32F first (WebGL2 + one extension); RGBA16F\n// second because WebGL2 makes it colour-renderable in core, and half-float is\n// enough here — positions live in [-1,1] and the decay constants are all well\n// inside its precision; WebGL1 float third because it needs two separate\n// extensions (sampling floats and rendering to them are not the same\n// capability); static last.\nfunction makeContext(canvas){const opts={alpha:true,antialias:false,// NOT premultiplied: the fragment shader emits straight colour and the\n// blend func below is the classic source-over pair.\npremultipliedAlpha:false,depth:false,stencil:false,powerPreference:\"high-performance\",preserveDrawingBuffer:true};let gl=canvas.getContext(\"webgl2\",opts);let fmt=null;if(gl){fmt=gl.getExtension(\"EXT_color_buffer_float\")?{internal:gl.RGBA32F,format:gl.RGBA,type:gl.FLOAT}:{internal:gl.RGBA16F,format:gl.RGBA,type:gl.HALF_FLOAT};}else{gl=canvas.getContext(\"webgl\",opts)||canvas.getContext(\"experimental-webgl\",opts);if(!gl)return null;const ok=gl.getExtension(\"OES_texture_float\")&&gl.getExtension(\"WEBGL_color_buffer_float\");fmt=ok?{internal:gl.RGBA,format:gl.RGBA,type:gl.FLOAT}:null;}// The render vertex shader samples the state texture. A device reporting\n// zero vertex texture units cannot run the sim whatever the float\n// extensions claim.\nif(gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS)<2)fmt=null;return{gl,fmt};}function stateTexture(gl,fmt,size,pixels){const tex=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,tex);gl.texImage2D(gl.TEXTURE_2D,0,fmt.internal,size,size,0,fmt.format,fmt.type,pixels||null);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.bindTexture(gl.TEXTURE_2D,null);return tex;}function renderTarget(gl,fmt,size){const tex=stateTexture(gl,fmt,size,null);const fbo=gl.createFramebuffer();gl.bindFramebuffer(gl.FRAMEBUFFER,fbo);gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,tex,0);const ok=gl.checkFramebufferStatus(gl.FRAMEBUFFER)===gl.FRAMEBUFFER_COMPLETE;gl.bindFramebuffer(gl.FRAMEBUFFER,null);return{tex,fbo,ok};}/* --------------------------------------------------------- point generation */// Seeded, so the canvas and the preview scatter identically and a screenshot\n// diff between two runs means something.\nfunction mulberry32(a){return function(){a|=0;a=a+1831565813|0;let t=Math.imul(a^a>>>15,1|a);t=t+Math.imul(t^t>>>7,61|t)^t;return((t^t>>>14)>>>0)/4294967296;};}const linMap=(x,a,b,c,d)=>(x-a)*(d-c)/(b-a)+c;// Bridson Poisson-disk, annulus [minD, maxD] — the same fixed-density sampler\n// the source pulled in as a dependency, in 40 lines instead of a bundled\n// library. Even spacing with no lattice is the whole point: a square grid of\n// points shows moiré the instant the ring's smoothsteps sweep across it.\nfunction poissonDisk(size,minD,maxD,tries,rand){const cell=minD/Math.SQRT2;const gw=Math.ceil(size/cell);const gh=Math.ceil(size/cell);const grid=new Int32Array(gw*gh).fill(-1);const px=[];const py=[];const active=[];const minD2=minD*minD;const add=(x,y)=>{const i=px.length;px.push(x);py.push(y);grid[(y/cell|0)*gw+(x/cell|0)]=i;active.push(i);};add(rand()*size,rand()*size);while(active.length>0&&px.length<MAX_POINTS){const ai=rand()*active.length|0;const idx=active[ai];let placed=false;for(let t=0;t<tries;t++){const ang=rand()*TAU;const r=minD+(maxD-minD)*rand();const nx=px[idx]+Math.cos(ang)*r;const ny=py[idx]+Math.sin(ang)*r;if(nx<0||ny<0||nx>=size||ny>=size)continue;const cx=nx/cell|0;const cy=ny/cell|0;let ok=true;for(let j=Math.max(0,cy-2);j<=Math.min(gh-1,cy+2)&&ok;j++){for(let i=Math.max(0,cx-2);i<=Math.min(gw-1,cx+2);i++){const q=grid[j*gw+i];if(q<0)continue;const dx=px[q]-nx;const dy=py[q]-ny;if(dx*dx+dy*dy<minD2){ok=false;break;}}}if(ok){add(nx,ny);placed=true;break;}}if(!placed){active[ai]=active[active.length-1];active.pop();}}return{px,py,count:px.length};}// Density is the source's dial verbatim: it interpolates the sampler's min and\n// max spacing, so a higher number is a tighter field. Buffers are rebuilt on\n// change; the context is not (rule 8).\nfunction buildField(density){const rand=mulberry32(2654435769);const minD=linMap(density,0,300,10,2);const maxD=linMap(density,0,300,11,3);const{px,py,count}=poissonDisk(FIELD,minD,maxD,20,rand);let texSize=8;while(texSize*texSize<count)texSize*=2;const refs=new Float32Array(texSize*texSize*4);const aUV=new Float32Array(count*2);const aRef=new Float32Array(count*2);for(let i=0;i<count;i++){const x=(px[i]-HALF)/HALF;const y=(py[i]-HALF)/HALF;refs[i*4+0]=x;refs[i*4+1]=y;aRef[i*2+0]=x;aRef[i*2+1]=y;// Texel CENTRE, not corner: NEAREST sampling on the edge of a texel is\n// a coin flip and half the points would read a neighbour's state.\naUV[i*2+0]=(i%texSize+.5)/texSize;aUV[i*2+1]=(Math.floor(i/texSize)+.5)/texSize;}return{count,texSize,refs,aUV,aRef};}/* ---------------------------------------------------------- ambient wander */// 1D value noise with a smoothstep between integer stops — the source used a\n// noise object's getVal for exactly this. Two of these, at different rates and\n// offsets, walk the ring around the frame when no pointer is present.\nfunction valueNoise1(x,seed){const i=Math.floor(x);const f=x-i;const h=n=>{const s=Math.sin((n+seed)*127.1)*43758.5453;return s-Math.floor(s);};const u=f*f*(3-2*f);return h(i)*(1-u)+h(i+1)*u;}/* ------------------------------------------------------------------- colour */function hexToRgb(hex){if(typeof hex!==\"string\")return[1,1,1];let s=hex.trim();const m=s.match(/^rgba?\\(([^)]+)\\)$/i);if(m){const p=m[1].split(\",\").map(v=>parseFloat(v));return[(p[0]||0)/255,(p[1]||0)/255,(p[2]||0)/255];}s=s.replace(\"#\",\"\");if(s.length===3)s=s[0]+s[0]+s[1]+s[1]+s[2]+s[2];if(s.length===8)s=s.slice(0,6);if(s.length!==6)return[1,1,1];const n=parseInt(s,16);if(!isFinite(n))return[1,1,1];return[(n>>16&255)/255,(n>>8&255)/255,(n&255)/255];}function makeAcidTones(hex,intensity){const[r,g,b]=hexToRgb(hex);const base=[r,g,b];const toneA=base.map(c=>Math.max(0,Math.min(1,c*.35)));const toneB=base.map(c=>Math.max(0,Math.min(1,c*.65)));const toneC=base.map(c=>Math.max(0,Math.min(1,c*.9)));const toneD=base.map(c=>Math.max(0,Math.min(1,c+(1-c)*.18*intensity)));return[toneA,toneB,toneC,toneD];}/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function CursorRingField(props){const{background:backgroundProp,acidColor=DEFAULT_ACID,intensity=.42,opacity=.24,density=150,dotSize=72,speed=4.5,cameraDistance=160,ring={push:50,width:9,radius:12,turbulence:100},style}=props;const isStatic=useIsStaticRenderer();const background=backgroundProp??\"transparent\";// Push and Turbulence both default to 0: the tuned look is a still field\n// that the ring lights rather than shoves. Both dials still work — they are\n// off by default, not absent.\nconst ringRadius=ring.radius??12;const ringWidth=ring.width??9;const ringPush=ring.push??0;const turbulence=ring.turbulence??0;const canvasRef=useRef(null);const hostRef=useRef(null);// Every live input goes through this ref. Putting any of them in the effect\n// deps would rebuild the GL context on a colour tweak (rule 6).\n// The ramp is uploaded as one flat vec3 array. Slots past the live count are\n// padded with the last colour rather than left undefined — an unwritten\n// uniform reads as garbage on some drivers, and the shader's loop still\n// touches uColors[0] when the count is 1.\nconst swatches=React.useMemo(()=>makeAcidTones(acidColor,Math.max(0,Math.min(1,intensity))),[acidColor,intensity]);const flatColors=React.useMemo(()=>{const out=new Float32Array(MAX_COLORS*3);for(let i=0;i<MAX_COLORS;i++){const c=swatches[Math.min(i,swatches.length-1)];out[i*3+0]=c[0];out[i*3+1]=c[1];out[i*3+2]=c[2];}return out;},[swatches]);const live=useRef({});live.current={colors:flatColors,colorCount:swatches.length,opacity:Math.max(0,Math.min(1,opacity)),intensity:Math.max(0,Math.min(1,intensity*1.6)),dotSize:dotSize/100,speed:speed/50,camDist:cameraDistance/100,ringRadius:ringRadius/100,ringWidth:Math.max(ringWidth,1)/100,ringEdge:RING_EDGE/100,push:ringPush/100,turb:turbulence/100};// Density is the one input that cannot be a plain ref read: it changes how\n// many points exist. It goes through its own ref and a dirty flag, and the\n// loop rebuilds buffers + textures in place.\nconst densityRef=useRef(density);const densityDirty=useRef(true);if(densityRef.current!==density){densityRef.current=density;densityDirty.current=true;}useEffect(()=>{const canvas=canvasRef.current;const host=hostRef.current;if(!canvas||!host)return;const ctx=makeContext(canvas);if(!ctx)return;const{gl,fmt}=ctx;// In Framer static/canvas renderers we force the procedural vertex-path\n// fallback so the first and only frame is representative immediately.\n// The GPGPU path seeds z/w at 0 and needs multiple frames to bloom.\nconst useSim=!isStatic&&!!fmt;let simProg=null;let renderProg=null;try{if(useSim){simProg=program(gl,SIM_VERT,SIM_FRAG,[\"uState\",\"uRefs\",\"uRingPos\",\"uRingRadius\",\"uRingWidth\",\"uRingWidth2\",\"uPush\",\"uTurb\",\"uTime\"]);}const renderNames=[\"uProjF\",\"uAspect\",\"uCamDist\",\"uPointScale\",// An array uniform's location is looked up by its first\n// element, and uniform3fv on that location writes the whole run.\n\"uColors[0]\",\"uColorCount\",\"uRingPos\",\"uTime\",\"uOpacity\",\"uIntensity\"];if(useSim)renderNames.push(\"uState\");else renderNames.push(\"uRingRadius\",\"uRingWidth\",\"uRingWidth2\",\"uTurb\");renderProg=program(gl,RENDER_VERT(!useSim),RENDER_FRAG,renderNames);}catch(e){// A compile failure must not take the app down with it.\n// eslint-disable-next-line no-console\nconsole.warn(\"CursorRingField:\",e.message);return;}canvas.__probe={simNulls:simProg?simProg.nulls:[],renderNulls:renderProg.nulls,useSim};/* ---- static geometry: the fullscreen quad the sim renders through */const quad=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,quad);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),gl.STATIC_DRAW);/* ---- per-density buffers, rebuilt in place ---- */const uvBuf=gl.createBuffer();const refBuf=gl.createBuffer();let refsTex=null;let rt1=null;let rt2=null;let count=0;let texSize=8;function disposeField(){if(refsTex)gl.deleteTexture(refsTex);if(rt1){gl.deleteTexture(rt1.tex);gl.deleteFramebuffer(rt1.fbo);}if(rt2){gl.deleteTexture(rt2.tex);gl.deleteFramebuffer(rt2.fbo);}refsTex=null;rt1=null;rt2=null;}function rebuildField(d){disposeField();const f=buildField(d);count=f.count;texSize=f.texSize;gl.bindBuffer(gl.ARRAY_BUFFER,uvBuf);gl.bufferData(gl.ARRAY_BUFFER,f.aUV,gl.STATIC_DRAW);gl.bindBuffer(gl.ARRAY_BUFFER,refBuf);gl.bufferData(gl.ARRAY_BUFFER,f.aRef,gl.STATIC_DRAW);if(!useSim)return;// A Float32Array cannot be uploaded as HALF_FLOAT, so the seed data\n// goes up with an RGBA/FLOAT source format; WebGL2 accepts that for\n// an RGBA16F internal format and converts on the way in.\nconst src={internal:fmt.internal,format:gl.RGBA,type:gl.FLOAT};refsTex=stateTexture(gl,src,texSize,f.refs);rt1=renderTarget(gl,fmt,texSize);rt2=renderTarget(gl,fmt,texSize);// Seed BOTH targets with the home positions. Seeding only one means\n// the first swapped frame reads an uninitialised texture and the\n// whole field flashes from the origin.\ngl.bindTexture(gl.TEXTURE_2D,rt1.tex);gl.texImage2D(gl.TEXTURE_2D,0,fmt.internal,texSize,texSize,0,gl.RGBA,gl.FLOAT,f.refs);gl.bindTexture(gl.TEXTURE_2D,rt2.tex);gl.texImage2D(gl.TEXTURE_2D,0,fmt.internal,texSize,texSize,0,gl.RGBA,gl.FLOAT,f.refs);gl.bindTexture(gl.TEXTURE_2D,null);}/* ---- sizing. Layout width/height are not guaranteed numeric here, so\n               the buffer is sized from the canvas's own layout box and kept in\n               step by a ResizeObserver. ---- */let dpr=1;let cssW=1;let cssH=1;// An arrow, not a `function` declaration: a hoisted declaration can run\n// before the early `if (!canvas || !host) return` above, so TypeScript\n// drops the narrowing inside one and every ref read is `possibly null`.\nconst resize=()=>{const devicePixelRatio=typeof window!==\"undefined\"?window.devicePixelRatio||1:1;dpr=Math.min(devicePixelRatio,DPR_CAP);cssW=Math.max(canvas.clientWidth||host.clientWidth||1,1);cssH=Math.max(canvas.clientHeight||host.clientHeight||1,1);const w=Math.max(1,Math.round(cssW*dpr));const h=Math.max(1,Math.round(cssH*dpr));if(canvas.width!==w||canvas.height!==h){canvas.width=w;canvas.height=h;}};resize();const ro=new ResizeObserver(resize);ro.observe(canvas);/* ---- pointer. The ONLY interaction: the ring follows the cursor. No\n               drag, no gesture state, no camera motion. ---- */const pointer={x:0,y:0,over:false};const ringPos={x:0,y:0};// 0 = free wander, 1 = locked to the pointer. Eased, never toggled, so\n// the target and the follow rate both cross over instead of stepping.\nlet follow=0;const onMove=e=>{const r=canvas.getBoundingClientRect();pointer.x=(e.clientX-r.left)/Math.max(r.width,1)*2-1;pointer.y=-((e.clientY-r.top)/Math.max(r.height,1)*2-1);pointer.over=pointer.x>=-1&&pointer.x<=1&&pointer.y>=-1&&pointer.y<=1;};const onLeave=()=>{pointer.over=false;};// Bound on WINDOW, not the host: the source tracked a global cursor and\n// tested the canvas bounds itself, so the ring keeps easing back to its\n// wander the moment the pointer leaves instead of freezing at the edge.\nif(!isStatic&&typeof window!==\"undefined\"){window.addEventListener(\"pointermove\",onMove);canvas.addEventListener(\"pointerleave\",onLeave);}/* ---- loop ---- */let raf=0;let last=0;let simTime=0;let wander=0;let ping=true;const posLocSim=simProg?gl.getAttribLocation(simProg.prog,\"aPos\"):-1;// Each path leaves one attribute unused — aRef in the GPGPU path, aUV in\n// the static one — and an unused attribute links to -1, which\n// enableVertexAttribArray rejects with INVALID_VALUE.\nconst uvLoc=gl.getAttribLocation(renderProg.prog,\"aUV\");const refLoc=gl.getAttribLocation(renderProg.prog,\"aRef\");gl.disable(gl.DEPTH_TEST);gl.enable(gl.BLEND);// Separate alpha so the canvas composites correctly over the CSS\n// background instead of accumulating destination alpha twice.\ngl.blendFuncSeparate(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA,gl.ONE,gl.ONE_MINUS_SRC_ALPHA);const frame=now=>{if(!isStatic)raf=requestAnimationFrame(frame);const L=live.current;if(densityDirty.current){densityDirty.current=false;rebuildField(densityRef.current);}if(!count)return;const dtRaw=last?(now-last)/1e3:1/60;last=now;const dt=Math.min(dtRaw,1/20);simTime=(simTime+dt*L.speed)%3600;wander+=dt*L.speed;const aspect=Math.max(cssW/Math.max(cssH,1),1e-4);const projF=1/Math.tan(FOV*Math.PI/180/2);/* -- ring target. The camera is fixed on +Z looking at the origin,\n                  so the ray-cast onto the z = 0 plane collapses to a scale: the\n                  half-height at the plane is camDist / projF. The source's\n                  0.175 gain is then applied on top, which is why the ring\n                  trails the pointer slightly toward centre. -- */const wx=(valueNoise1(wander*.66,94.234)-.5)*2;const wy=(valueNoise1(wander*.75,21.028)-.5)*2;// Handover first. `pointer.x/y` still holds the last position while\n// this decays, so leaving the frame walks the ring off the pointer\n// and back onto its wander rather than cutting to it.\nfollow+=((pointer.over?1:0)-follow)*(1-Math.pow(1-HANDOVER_LERP,dt*60));const wanderX=wx*.2;const wanderY=wy*.1;let tx=wanderX;let ty=wanderY;if(follow>1e-4){const worldX=pointer.x*aspect*L.camDist/projF;const worldY=pointer.y*L.camDist/projF;const cx=worldX*CURSOR_REACH+wx*CURSOR_JITTER;const cy=worldY*CURSOR_REACH+wy*CURSOR_JITTER;tx=wanderX+(cx-wanderX)*follow;ty=wanderY+(cy-wanderY)*follow;}// Safe to dt-correct, unlike the simulation's constants: this is a\n// relaxation toward the pointer, so the equilibrium is the pointer\n// whatever the rate. Only the time constant moves.\nconst lerp=WANDER_LERP+(CURSOR_LERP-WANDER_LERP)*follow;const rk=1-Math.pow(1-lerp,dt*60);ringPos.x+=(tx-ringPos.x)*rk;ringPos.y+=(ty-ringPos.y)*rk;// The source breathed the radius on two out-of-phase trig terms.\nconst radius=L.ringRadius+Math.sin(simTime)*.03+Math.cos(simTime*3)*.02;/* -- simulation pass -- */if(useSim){const src=ping?rt1:rt2;const dst=ping?rt2:rt1;gl.bindFramebuffer(gl.FRAMEBUFFER,dst.fbo);gl.viewport(0,0,texSize,texSize);gl.disable(gl.BLEND);gl.useProgram(simProg.prog);gl.bindBuffer(gl.ARRAY_BUFFER,quad);gl.enableVertexAttribArray(posLocSim);gl.vertexAttribPointer(posLocSim,2,gl.FLOAT,false,0,0);gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,src.tex);gl.uniform1i(simProg.u.uState,0);gl.activeTexture(gl.TEXTURE1);gl.bindTexture(gl.TEXTURE_2D,refsTex);gl.uniform1i(simProg.u.uRefs,1);gl.uniform2f(simProg.u.uRingPos,ringPos.x,ringPos.y);gl.uniform1f(simProg.u.uRingRadius,radius);gl.uniform1f(simProg.u.uRingWidth,L.ringWidth);gl.uniform1f(simProg.u.uRingWidth2,L.ringEdge);gl.uniform1f(simProg.u.uPush,L.push);gl.uniform1f(simProg.u.uTurb,L.turb);gl.uniform1f(simProg.u.uTime,simTime);gl.drawArrays(gl.TRIANGLES,0,3);gl.bindFramebuffer(gl.FRAMEBUFFER,null);gl.enable(gl.BLEND);ping=!ping;}/* -- render pass -- */gl.viewport(0,0,canvas.width,canvas.height);gl.clearColor(0,0,0,0);gl.clear(gl.COLOR_BUFFER_BIT);gl.useProgram(renderProg.prog);if(uvLoc>=0){gl.bindBuffer(gl.ARRAY_BUFFER,uvBuf);gl.enableVertexAttribArray(uvLoc);gl.vertexAttribPointer(uvLoc,2,gl.FLOAT,false,0,0);}if(refLoc>=0){gl.bindBuffer(gl.ARRAY_BUFFER,refBuf);gl.enableVertexAttribArray(refLoc);gl.vertexAttribPointer(refLoc,2,gl.FLOAT,false,0,0);}if(useSim){const shown=ping?rt1:rt2;gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,shown.tex);gl.uniform1i(renderProg.u.uState,0);}else{gl.uniform1f(renderProg.u.uRingRadius,radius);gl.uniform1f(renderProg.u.uRingWidth,L.ringWidth);gl.uniform1f(renderProg.u.uRingWidth2,L.ringEdge);gl.uniform1f(renderProg.u.uTurb,L.turb);}gl.uniform1f(renderProg.u.uProjF,projF);gl.uniform1f(renderProg.u.uAspect,aspect);gl.uniform1f(renderProg.u.uCamDist,L.camDist);// The source's particle scale: buffer width over dpr over 2000. It\n// keeps the dots the same visual size as the component widens.\ngl.uniform1f(renderProg.u.uPointScale,cssW/2e3*L.dotSize*dpr*.5);gl.uniform3fv(renderProg.u[\"uColors[0]\"],L.colors);gl.uniform1i(renderProg.u.uColorCount,L.colorCount);gl.uniform2f(renderProg.u.uRingPos,ringPos.x,ringPos.y);gl.uniform1f(renderProg.u.uTime,simTime);gl.uniform1f(renderProg.u.uOpacity,L.opacity);gl.uniform1f(renderProg.u.uIntensity,L.intensity);gl.drawArrays(gl.POINTS,0,count);};if(isStatic)frame(0);else raf=requestAnimationFrame(frame);return()=>{cancelAnimationFrame(raf);ro.disconnect();if(typeof window!==\"undefined\"){window.removeEventListener(\"pointermove\",onMove);canvas.removeEventListener(\"pointerleave\",onLeave);}disposeField();gl.deleteBuffer(quad);gl.deleteBuffer(uvBuf);gl.deleteBuffer(refBuf);if(simProg)gl.deleteProgram(simProg.prog);gl.deleteProgram(renderProg.prog);// Deliberately NO WEBGL_lose_context.loseContext() — getContext()\n// returns the SAME context for this canvas, and StrictMode's\n// mount → cleanup → mount would remount onto a force-lost one and\n// render black (rule 6).\n};// Only the primitives that must rebuild the context are deps. Colours,\n// ring terms and speed are all read live from the ref.\n},[isStatic]);return /*#__PURE__*/_jsx(\"div\",{ref:hostRef,style:{// A real floor BEFORE the spread: the canvas is absolutely\n// positioned, so the root has no in-flow content and collapses\n// to a dot under Fit Content sizing.\nminWidth:240,minHeight:160,width:\"100%\",height:\"100%\",position:\"relative\",overflow:\"hidden\",pointerEvents:\"none\",background,...style},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",display:\"block\"}})});}addPropertyControls(CursorRingField,{acidColor:{type:ControlType.Color,title:\"Acid\",defaultValue:\"#B7FF31\"},intensity:{type:ControlType.Number,title:\"Intensity\",min:0,max:1,step:.01,defaultValue:.42},opacity:{type:ControlType.Number,title:\"Opacity\",min:0,max:1,step:.01,defaultValue:.24},density:{type:ControlType.Number,title:\"Density\",min:20,max:300,step:1,defaultValue:150},dotSize:{type:ControlType.Number,title:\"Dot Size\",min:20,max:160,step:1,defaultValue:72},speed:{type:ControlType.Number,title:\"Speed\",min:1,max:12,step:.1,defaultValue:4.5},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"transparent\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CursorRingField\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./BG.map","// Generated by Framer (2f36e3b)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,ComponentViewportProvider,Container,cx,GeneratedComponentContext,getFonts,RenderTarget,useCustomCursors,useHydratedBreakpointVariants,useIsOnFramerCanvas,useLocaleInfo,withCSS}from\"framer\";import{LayoutGroup,motion}from\"framer-motion\";import*as React from\"react\";import{useRef}from\"react\";import CursorRingField from\"#framer/local/codeFile/U6V1c0N/BG.js\";const CursorRingFieldFonts=getFonts(CursorRingField);const breakpoints={OEZvyddEp:\"(max-width: 1199.98px)\",pZeaiHGzg:\"(min-width: 1200px)\"};const isBrowser=()=>typeof document!==\"undefined\";const serializationHash=\"framer-uEumr\";const variantClassNames={OEZvyddEp:\"framer-v-13s95xp\",pZeaiHGzg:\"framer-v-16oc4ji\"};const breakpointRules={OEZvyddEp:[\".framer-uEumr.framer-16oc4ji { gap: 12px; }\",'.framer-uEumr .framer-vo5qge, [data-layout-template=\"true\"] > #overlay { margin-bottom: -12px; }']};const breakpointKeys=Object.keys(breakpointRules);const selectors={OEZvyddEp:\".framer-13s95xp-override\"};const rules=[\".framer-uEumr.framer-m6ygjy, .framer-uEumr .framer-m6ygjy { display: block; }\",\".framer-uEumr.framer-16oc4ji { align-content: center; align-items: center; background-color: #0d100d; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 16px; height: min-content; justify-content: flex-start; overflow: var(--overflow-clip-fallback, clip); padding: 0px; position: relative; width: 100%; }\",\".framer-uEumr .framer-1wrug8m-container { bottom: calc(calc(100% - min(var(--framer-viewport-height, 100%), 100%)) + 0px); flex: none; height: calc(min(var(--framer-viewport-height, 100%), 100%) * 1); left: 0px; pointer-events: none; position: var(--framer-canvas-fixed-position, fixed); right: 0px; top: 0px; z-index: 0; }\",\".framer-uEumr .framer-vo5qge { background: transparent; flex-grow: 1; height: 0px; margin: 0px; margin-bottom: -16px; position: relative; width: 0px; }\",'[data-layout-template=\"true\"] > #overlay { margin-bottom: -16px; }'];const mediaQueries={OEZvyddEp:\"(max-width: 1199.98px)\",pZeaiHGzg:\"(min-width: 1200px)\"};const humanReadableVariantMap={Desktop:\"pZeaiHGzg\",Phone:\"OEZvyddEp\"};const HTMLStyle=({value})=>{const onCanvas=useIsOnFramerCanvas();if(onCanvas)return null;return /*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:value},\"data-framer-html-style\":\"\"});};const getProps=({height,id,width,...props})=>{return{...props,variant:humanReadableVariantMap[props.variant]??props.variant??\"pZeaiHGzg\"};};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{style,className,layoutId,variant,children,...restProps}=getProps(props);const[baseVariant,hydratedBaseVariant]=useHydratedBreakpointVariants(variant,breakpoints,false);const gestureVariant=undefined;const sharedStyleClassNames=[];const scopingClassNames=cx(serializationHash,...sharedStyleClassNames);useCustomCursors({});return /*#__PURE__*/_jsx(GeneratedComponentContext.Provider,{value:{activeVariantId:baseVariant,humanReadableVariantMap,isLayoutTemplate:true,primaryVariantId:\"pZeaiHGzg\",variantClassNames},children:/*#__PURE__*/_jsxs(LayoutGroup,{id:layoutId??defaultLayoutId,children:[/*#__PURE__*/_jsx(HTMLStyle,{value:\":root body { background: rgb(13, 16, 13); }\"}),/*#__PURE__*/_jsxs(motion.div,{...restProps,className:cx(scopingClassNames,\"framer-16oc4ji\",className),\"data-layout-template\":true,ref:refBinding,style:{...style},children:[/*#__PURE__*/_jsx(ComponentViewportProvider,{children:/*#__PURE__*/_jsx(Container,{className:\"framer-1wrug8m-container\",\"data-framer-name\":\"Acid Dotted Waves\",isAuthoredByUser:true,layoutScroll:true,name:\"Acid Dotted Waves\",nodeId:\"eHOBH8Bev\",scopeId:\"NKRWE7ACt\",children:/*#__PURE__*/_jsx(CursorRingField,{acidColor:\"rgb(183, 255, 49)\",background:\"rgba(0, 0, 0, 0)\",density:190,dotSize:96,height:\"100%\",id:\"eHOBH8Bev\",intensity:.9,layoutId:\"eHOBH8Bev\",name:\"Acid Dotted Waves\",opacity:.68,speed:4.8,style:{height:\"100%\",width:\"100%\"},width:\"100%\"})})}),children,/*#__PURE__*/_jsx(\"div\",{className:\"framer-vo5qge\"})]}),/*#__PURE__*/_jsx(\"div\",{id:\"template-overlay\"})]})});});const css=target=>{const isStaticRenderer=target===RenderTarget.canvas||target===RenderTarget.export;if(!isStaticRenderer){return[...rules,...breakpointKeys.map(key=>{const query=mediaQueries[key];return`@media ${query} { ${breakpointRules[key].join(\" \")} }`;})];}return[...rules,...breakpointKeys.flatMap(key=>{const selector=selectors[key];return breakpointRules[key].map(rule=>`${selector} {${rule}}`);})];};/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 1000\n * @framerIntrinsicWidth 1200\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"fixed\"]},\"OEZvyddEp\":{\"layout\":[\"fixed\",\"fixed\"]}}}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerAutoSizeImages true\n * @framerComponentViewportWidth true\n * @framerColorSyntax true\n * @framerHitTargets {\"pZeaiHGzg\":[\".framer-1wrug8m-container\"],\"OEZvyddEp\":[\".framer-1wrug8m-container\"]}\n * @framerBreakpoints {\"pZeaiHGzg\":{\"min\":1200,\"canvasClassName\":\"framer-16oc4ji-override\",\"minHeight\":800,\"viewportHeight\":800,\"name\":\"Desktop\",\"width\":1200,\"rootFontSize\":16},\"OEZvyddEp\":{\"max\":1199,\"canvasClassName\":\"framer-13s95xp-override\",\"minHeight\":844,\"viewportHeight\":800,\"name\":\"Phone\",\"width\":390,\"rootFontSize\":16}}\n * @framerDefaultVariant pZeaiHGzg\n * @framerLayoutTemplate true\n */const FramerNKRWE7ACt=withCSS(Component,css,\"framer-uEumr\");export default FramerNKRWE7ACt;FramerNKRWE7ACt.displayName=\"Site Background\";FramerNKRWE7ACt.defaultProps={height:1e3,width:1200};addFonts(FramerNKRWE7ACt,[{explicitInter:true,fonts:[]},...CursorRingFieldFonts],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerNKRWE7ACt\",\"slots\":[],\"annotations\":{\"framerImmutableVariables\":\"true\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]},\\\"OEZvyddEp\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]}}}\",\"framerContractVersion\":\"1\",\"framerComponentViewportWidth\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerDefaultVariant\":\"pZeaiHGzg\",\"framerLayoutTemplate\":\"true\",\"framerColorSyntax\":\"true\",\"framerBreakpoints\":\"{\\\"pZeaiHGzg\\\":{\\\"min\\\":1200,\\\"canvasClassName\\\":\\\"framer-16oc4ji-override\\\",\\\"minHeight\\\":800,\\\"viewportHeight\\\":800,\\\"name\\\":\\\"Desktop\\\",\\\"width\\\":1200,\\\"rootFontSize\\\":16},\\\"OEZvyddEp\\\":{\\\"max\\\":1199,\\\"canvasClassName\\\":\\\"framer-13s95xp-override\\\",\\\"minHeight\\\":844,\\\"viewportHeight\\\":800,\\\"name\\\":\\\"Phone\\\",\\\"width\\\":390,\\\"rootFontSize\\\":16}}\",\"framerAutoSizeImages\":\"true\",\"framerHitTargets\":\"{\\\"pZeaiHGzg\\\":[\\\".framer-1wrug8m-container\\\"],\\\"OEZvyddEp\\\":[\\\".framer-1wrug8m-container\\\"]}\",\"framerIntrinsicHeight\":\"1000\",\"framerIntrinsicWidth\":\"1200\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","\r\n\t\timport * as Framer from \"framer\";\r\nimport * as React from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport * as ReactDOM from \"react-dom/client\";\r\nimport SiteBackground from \"https://framerusercontent.com/modules/skqTvafc00sshdpJRaux/K7i3inIS97oW2p6IHrOw/NKRWE7ACt.js\";\r\n\r\n\t\tconst routes = {augiA20Il: {elements: {b3zvlDnFC: \"features\", GEil_qMCn: \"next-move\", hYkUsJvVm: \"hero\", I2bSS2oDb: \"legacy-I2bSS2oDb\", IEUldDXZO: \"sample-export\", IN6Zyapcd: \"closing-cta\", iZy2hYIFF: \"faq\", ktSM0BTSb: \"outreach\", l45nAY2oY: \"legacy-l45nAY2oY\", oTNAdhVzk: \"legacy-pricing\", Ox4DYZyB0: \"legacy-expanded-faq\", Pw_2DIBVF: \"beat-library\", r_IBGmD3i: \"legacy-r_IBGmD3i\", REEGGi4Nu: \"beat-match\", T_5ViBIS6: \"pricing\", tfTPdZPXi: \"explained\", uDIBgGfFo: \"legacy-uDIBgGfFo\", VHTtO4dYT: \"replies\", wcqlgEiqR: \"legacy-wcqlgEiqR\", wDOD_xMEK: \"targeting\", xEEwZTl29: \"legacy-xEEwZTl29\", xLfuf849z: \"legacy-xLfuf849z\"}, page: Framer.lazy(() => import(\"https://framerusercontent.com/modules/bWlCMPw6O6z30ZSMkCNB/5IpbTw5SoYLzihXylQ4t/augiA20Il.js\")), path: \"/\"}, jhJHDmp5P: {elements: {}, page: Framer.lazy(() => import(\"https://framerusercontent.com/modules/lJyGSrPsscmbWV8t2age/ndYSSumY0T6Oqe0Jn6Rr/jhJHDmp5P.js\")), path: \"/privacy\"}, eiuQspZ6u: {elements: {}, page: Framer.lazy(() => import(\"https://framerusercontent.com/modules/iHr32TrtDESgBQtgOLEA/qLYCqpjljafUIjw5MhoS/eiuQspZ6u.js\")), path: \"/terms\"}, zV4M5tXBW: {elements: {}, page: Framer.lazy(() => import(\"https://framerusercontent.com/modules/SmxGR79joQombp93jNeH/2OcTz8Q6lYk6DRtVACYA/zV4M5tXBW.js\")), path: \"/remove\"}, xvyQRF6AG: {elements: {}, page: Framer.lazy(() => import(\"https://framerusercontent.com/modules/gzMU2MH8oEPpsu0j5Vyx/T2zcoN1k8t1qEeIPBH9f/xvyQRF6AG.js\")), path: \"/thanks\"}, yfZaaQ7OS: {elements: {}, page: Framer.lazy(() => import(\"https://framerusercontent.com/modules/s57PpJqiENzFFcMVe5cT/JiL3DiKe9y0A1r2xzl9Z/yfZaaQ7OS.js\")), path: \"/404\"}, a37QM_I2p: {elements: {}, page: Framer.lazy(() => import(\"https://framerusercontent.com/modules/wTfearSC9MJw9bU98Pvr/3swHlhIWr7znCnTk7hFz/a37QM_I2p.js\")), path: \"/find-artists\"}, SHTEbT5fH: {elements: {}, page: Framer.lazy(() => import(\"https://framerusercontent.com/modules/sup3G6mG8qN5Ethu14ha/dBArEfJ8Kf7Dg9ZoBfLx/SHTEbT5fH.js\")), path: \"/export\"}}\r\n\r\n\t\tconst locales = [{code: \"en-US\", id: \"default\", name: \"English\", slug: \"\", textDirection: \"ltr\"}]\r\n\t\tconst collectionUtils = {}\r\n\t\tconst serverDatabaseClient = undefined\r\n\t\tconst framerSiteId = \"d87228ccd84a846ad4288d98fc82e28542f9c9fe3e8a3da5952d7a8b12ebe882\"\r\n\t\tfunction Template({webPageId, children, style, ...rest}) {const templateProps = {}\r\nconst props = templateProps[webPageId] ?? {}\r\nswitch (webPageId) {case \"augiA20Il\":\r\ncase \"jhJHDmp5P\":\r\ncase \"eiuQspZ6u\":\r\ncase \"zV4M5tXBW\":\r\ncase \"xvyQRF6AG\":\r\ncase \"yfZaaQ7OS\":\r\ncase \"a37QM_I2p\":\r\ncase \"SHTEbT5fH\":\r\nreturn React.createElement(SiteBackground, {...props, key: \"SiteBackground\", style}, children(true));\r\ndefault: { return children(false) }}}\r\nexport function getLayoutTemplateBreakpoints(routeId) {switch (routeId) {case \"augiA20Il\":\r\ncase \"jhJHDmp5P\":\r\ncase \"eiuQspZ6u\":\r\ncase \"zV4M5tXBW\":\r\ncase \"xvyQRF6AG\":\r\ncase \"yfZaaQ7OS\":\r\ncase \"a37QM_I2p\":\r\ncase \"SHTEbT5fH\":\r\nreturn [{hash: \"16oc4ji\", mediaQuery: \"(min-width: 1200px)\"}, {hash: \"13s95xp\", mediaQuery: \"(max-width: 1199.98px)\"}]\r\ndefault: { return undefined }}}\r\n\r\n\t\tconst isBrowser = typeof document !== \"undefined\"\r\n\t\tconst isBot = isBrowser && /bot|-google|google-|yandex|ia_archiver|crawl|spider/iu.test(navigator.userAgent)\r\n\r\n\t\t\r\n\t\t\r\n\r\n\t\texport async function getPageRoot({\r\n\t\t\trouteId,\r\n\t\t\tpathVariables,\r\n\t\t\tcanonicalPathVariables,\r\n\t\t\tlocaleId,\r\n\t\t\tcollectionItemId,\r\n\t\t\tcontentLocaleId,\r\n\t\t\tshouldResolveInitialRouteContentState = false,\r\n\t\t}) {\r\n\t\t\tconst rootPreload = routes[routeId].page.preload()\r\n\r\n\t\t\t\r\n\r\n\t\t\tFramer.setLibraryFeatures({checkServerSideRouter: true, disableCustomCode: false, disableHoverOnMobile: false, editorBarDisableFrameAncestorsSecurity: false, motionDivToDiv: false, onPageLocalizationSupport: true, onPageMoveTool: true, onPageRichTextBlockSelection: true, scrollRestoration: true, synchronousNavigationOnDesktop: false, yieldOnTap: false})\r\n\t\t\tFramer.setCurrentSiteId(framerSiteId)\r\n\r\n\t\t\tconst content = React.createElement(\r\n\t\t\t\tFramer.PageRoot,\r\n\t\t\t\t{\r\n\t\t\t\t\tisWebsite: true,\r\n\t\t\t\t\tenvironment: \"site\",\r\n\t\t\t\t\trouteId,\r\n\t\t\t\t\tpathVariables,\r\n\t\t\t\t\tcanonicalPathVariables,\r\n\t\t\t\t\troutes,\r\n\t\t\t\t\tcollectionUtils,\r\n\t\t\t\t\tserverDatabaseClient,\r\n\t\t\t\t\tframerSiteId,\r\n\t\t\t\t\tnotFoundPage: Framer.lazy(() => import(\"https://framerusercontent.com/modules/s57PpJqiENzFFcMVe5cT/JiL3DiKe9y0A1r2xzl9Z/yfZaaQ7OS.js\")),\r\n\t\t\t\t\tisReducedMotion: true,\r\n\t\t\t\t\tlocaleId,\r\n\t\t\t\t\tlocales,\r\n\t\t\t\t\tpreserveQueryParams: undefined,\r\n\t\t\t\t\tsiteCanonicalURL: \"https://artisium.io\",\r\n\t\t\t\t\tEditorBar: \r\n\t\t\ttypeof window !== \"undefined\" ? (() => {\r\n\t\t\t\tif (isBot) {\r\n\t\t\t\t\tconsole.log(\"[Framer On-Page Editing] Unavailable because navigator is bot\")\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn Framer.lazy(async () => {\r\n\t\t\t\t\tconst dependencies = {\r\n\t\t\t\t\t\t__version: 3,\r\n\t\t\t\t\t\tframer: {\r\n\t\t\t\t\t\t\tuseCurrentRoute: Framer.useCurrentRoute,\r\n\t\t\t\t\t\t\tuseLocaleInfo: Framer.useLocaleInfo,\r\n\t\t\t\t\t\t\tuseRouter: Framer.useRouter,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\treact: {\r\n\t\t\t\t\t\t\tcreateElement: React.createElement,\r\n\t\t\t\t\t\t\tFragment: React.Fragment,\r\n\t\t\t\t\t\t\tmemo: React.memo,\r\n\t\t\t\t\t\t\tuseCallback: React.useCallback,\r\n\t\t\t\t\t\t\tuseEffect: React.useEffect,\r\n\t\t\t\t\t\t\tuseRef: React.useRef,\r\n\t\t\t\t\t\t\tuseState: React.useState,\r\n\t\t\t\t\t\t\tuseLayoutEffect: React.useLayoutEffect,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"react-dom\": { createPortal },\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\twindow.__framer_editorBarDependencies = dependencies\r\n\r\n\t\t\t\t\tconst { createEditorBar } = await import(\"https://framer.com/edit/init.mjs\")\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tdefault: createEditorBar(),\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t})() : undefined\r\n\t\t,\r\n\t\t\t\t\tadaptLayoutToTextDirection: true,\r\n\t\t\t\t\tLayoutTemplate: Template,\r\n\t\t\t\t\tloadSnippetsModule: new Framer.LazyValue(() => import(\"https://framerusercontent.com/modules/ym54sT6DtEKHMrCB8C3E/KFHITY1Egn7EZTqvCCOC/snippets.js\")),\r\n\t\t\t\t\tinitialCollectionItemId: collectionItemId,\r\n\t\t\t\t\tinitialContentLocaleIdOverride: contentLocaleId,\r\n\t\t\t\t}\r\n\t\t\t)\r\n\r\n\t\t\tconst contentWithGracefullyDegradingErrorBoundary = React.createElement(Framer.GracefullyDegradingErrorBoundary, {\r\n\t\t\t\tchildren: content\r\n\t\t\t})\r\n\r\n\t\t\t\r\n\t\t\tconst page = React.createElement(Framer.PageEffectsProvider, {\r\n\t\t\t\tchildren: contentWithGracefullyDegradingErrorBoundary,\r\n\t\t\t\tvalue: {routes: {}}\r\n\t\t\t})\r\n\r\n\t\t\t// We don't want the initial render to immediately have to suspend.\r\n\t\t\tawait rootPreload\r\n\t\t\treturn page\r\n\t\t}\r\n\t\r\n\r\n\t\tif (isBrowser) {\r\n\t\t\t// Note: HTTPArchive also uses this function to detect Framer sites; see https://github.com/HTTPArchive/wappalyzer/blob/371a17583f74fd9171b9077f59a5619b24062891/src/technologies/f.json#L1722-L1748.\r\n\t\t\twindow.__framer_importFromPackage = (packageAndFilename, exportIdentifier) => () => {\r\n\t\t\t\treturn React.createElement(Framer.ErrorPlaceholder, { error: 'Package component not supported: \"' + exportIdentifier + '\" in \"' + packageAndFilename + '\"' })\r\n\t\t\t}\r\n\r\n\t\t\twindow.__framer_events = window.__framer_events || []\r\n\r\n\t\t\t// Initialize lazy modules cache for hydration\r\n\t\t\tFramer.initLazyModulesCache()\r\n\r\n\t\t\tconst container = document.getElementById(\"main\")\r\n\t\t\t// We know that #main is parsed before this script, so we don't need to wait for DOMContentLoaded or similar events.\r\n\t\t\tif (\"framerHydrateV2\" in container.dataset) main(true, container)\r\n\t\t\telse main(false, container)\r\n\t\t}\r\n\r\n\t\tfunction track() {\r\n\t\t\tif (!isBrowser) return\r\n\t\t\twindow.__framer_events.push(arguments)\r\n\t\t}\r\n\r\n\t\tasync function main(shouldHydrate, container) {\r\n\t\t\tfunction handleError(error, errorInfo, recoverable = true) {\r\n\t\t\t\tif (error.caught || window.__framer_hadFatalError) return // we already logged it\r\n\r\n\t\t\t\tconst componentStack = errorInfo?.componentStack\r\n\t\t\t\tif (recoverable) {\r\n\t\t\t\t\tconsole.warn(\"Caught a recoverable error. The site is still functional, but might have some UI flickering or degraded page load performance. If you are the author of this website, update external components and check recently added custom code or code overrides to fix the following server/client mismatches:\\n\", error, componentStack)\r\n\t\t\t\t\t// we only want to collect 1%, because this can be quite noisy (floods the data pipeline)\r\n\t\t\t\t\tif (Math.random() > 0.01) return\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.error(\"Caught a fatal error. Please report the following to the Framer team via https://www.framer.com/contact/:\\n\", error, componentStack)\r\n\t\t\t\t}\r\n\t\t\t\ttrack(recoverable ? \"published_site_load_recoverable_error\" : \"published_site_load_error\", {\r\n\t\t\t\t\tmessage: String(error),\r\n\t\t\t\t\tcomponentStack, // componentStack is more useful\r\n\t\t\t\t\tstack: componentStack ? undefined : error instanceof Error && typeof error.stack === \"string\" ? error.stack : null,\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\t\t\t\tlet routeId, localeId, contentLocaleId, pathVariables, canonicalPathVariables, breakpoints, routeData\r\n\t\t\t\tif (shouldHydrate) {\r\n\t\t\t\t\trouteData = JSON.parse(container.dataset[\"framerHydrateV2\"])\r\n\t\t\t\t\trouteId = routeData.routeId\r\n\t\t\t\t\tlocaleId = routeData.localeId\r\n\t\t\t\t\tcontentLocaleId = routeData.contentLocaleId\r\n\t\t\t\t\tpathVariables = routeData.pathVariables\r\n\t\t\t\t\tcanonicalPathVariables = routeData.canonicalPathVariables\r\n\t\t\t\t\tbreakpoints = routeData.breakpoints\r\n\r\n\t\t\t\t\trouteId = Framer.patchRoutesForABTesting(routes, routeId) // Prioritize optimized route id to avoid flickering in browsers not supporting the server-timing header (Safari older than 16.4)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tFramer.patchRoutesForABTesting(routes, undefined) // This must happen before inferInitialRouteFromPath\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\tconst serverRoute = performance.getEntriesByType(\"navigation\")[0]?.serverTiming?.find(e => e.name === \"route\")?.description\r\n\t\t\t\t\tif (serverRoute) {\r\n\t\t\t\t\t\tconst routeData = new URLSearchParams(serverRoute)\r\n\t\t\t\t\t\trouteId = routeData.get(\"id\")\r\n\t\t\t\t\t\tlocaleId = routeData.get(\"locale\")\r\n\t\t\t\t\t\tfor (const [key, value] of routeData.entries()) {\r\n\t\t\t\t\t\t\tif (!key.startsWith(\"var.\")) continue\r\n\t\t\t\t\t\t\tpathVariables ??= {}\r\n\t\t\t\t\t\t\tpathVariables[key.slice(4)] = value\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!routeId || !localeId) {\r\n\t\t\t\t\t\tconst routeData = Framer.inferInitialRouteFromPath(routes, decodeURIComponent(location.pathname), true, locales)\r\n\t\t\t\t\t\trouteId = routeData.routeId\r\n\t\t\t\t\t\tlocaleId = routeData.localeId\r\n\t\t\t\t\t\tpathVariables = routeData.pathVariables\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst pagePromise = getPageRoot({\r\n\t\t\t\t\trouteId,\r\n\t\t\t\t\tlocaleId,\r\n\t\t\t\t\tcontentLocaleId,\r\n\t\t\t\t\tpathVariables,\r\n\t\t\t\t\tcanonicalPathVariables,\r\n\t\t\t\t\tcollectionItemId: shouldHydrate ? routeData?.collectionItemId : undefined,\r\n\t\t\t\t\tshouldResolveInitialRouteContentState: !shouldHydrate,\r\n\t\t\t\t})\r\n\r\n\t\t\t\t\r\nif (typeof window !== \"undefined\") {\r\n\tvoid (async () => {\r\n\t\tconst route = routes[routeId]\r\n\r\n\t\tconst defaultLocaleId = \"default\"\r\n\t\tconst framerLocale = locales.find(({ id }) => !localeId ? id === defaultLocaleId : id === localeId).code\r\n\r\n\t\t\r\n\t\tlet collectionItemId = routeData?.collectionItemId ?? null\r\n\t\tif (collectionItemId === null && route?.collectionId && collectionUtils) {\r\n\t\t\tconst utils = await collectionUtils[route.collectionId]?.()\r\n\t\t\tconst [slug] = Object.values(pathVariables)\r\n\t\t\tif (utils && typeof slug === \"string\") {\r\n\t\t\t\tcollectionItemId = (await utils.getRecordIdBySlug(slug, framerLocale || undefined)) ?? null\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\r\n\t\tconst resolvedDateTimeOptions = Intl.DateTimeFormat().resolvedOptions()\r\n\t\tconst timezone = resolvedDateTimeOptions.timeZone\r\n\t\tconst locale = resolvedDateTimeOptions.locale\r\n\r\n\t\t// wait for the page to be activated before sending the pageview event\r\n\t\t// https://developer.chrome.com/docs/web-platform/prerender-pages#impact-on-analytics\r\n\t\tawait new Promise((resolve) => {\r\n\t\t\tif (document.prerendering) {\r\n\t\t\t\tdocument.addEventListener(\"prerenderingchange\", resolve, { once: true })\r\n\t\t\t} else {\r\n\t\t\t\tresolve()\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\twindow.__framer_events.push([\r\n\t\t\t\"published_site_pageview\",\r\n\t\t\t{\r\n\t\t\t\tframerSiteId,\r\n\t\t\t\tversion: 2,\r\n\t\t\t\troutePath: route?.path || \"/\",\r\n\t\t\t\tcollectionItemId,\r\n\t\t\t\tframerLocale: framerLocale || null,\r\n\t\t\t\twebPageId: route?.abTestingVariantId ?? routeId,\r\n\t\t\t\tabTestId: route?.abTestId,\r\n\t\t\t\treferrer: document.referrer || null,\r\n\t\t\t\turl: window.location.href,\r\n\t\t\t\thostname: window.location.hostname || null,\r\n\t\t\t\tpathname: window.location.pathname || null,\r\n\t\t\t\thash: window.location.hash || null,\r\n\t\t\t\tsearch: window.location.search || null,\r\n\t\t\t\ttimezone,\r\n\t\t\t\tlocale,\r\n\t\t\t},\r\n\t\t\t\"eager\"\r\n\t\t])\r\n\r\n\t\t// Yield to avoid blocking the main thread with the user code\r\n\t\tawait Framer.yieldToMain({ priority: \"background\", ensureContinueBeforeUnload: true, continueAfter: \"paint\" })\r\n\r\n\t\tdocument.dispatchEvent(new CustomEvent(\"framer:pageview\", {\r\n\t\t\tdetail: { framerLocale: framerLocale || null }\r\n\t\t}))\r\n\t})()\r\n}\r\n\r\n\r\n\t\t\t\tconst page = await pagePromise\r\n\t\t\t\tif (shouldHydrate) {\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\tFramer.withPerformanceMarks(\"framer-rewrite-breakpoints\", () => {\r\n\t\t\t\t\t\tFramer.removeHiddenBreakpointLayersV2(breakpoints)\r\n\t\t\t\t\t\twindow.__framer_onRewriteBreakpoints?.(breakpoints)\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\tconst startTransition = isBot ? cb => cb() : React.startTransition\r\n\t\t\t\t\tstartTransition(() => {\r\n\t\t\t\t\t\tFramer.markHydrationStart()\r\n\t\t\t\t\t\tFramer.turnOffReactEventHandling()\r\n\t\t\t\t\t\tReactDOM.hydrateRoot(container, page, { onRecoverableError: handleError })\r\n\t\t\t\t\t})\r\n\t\t\t\t} else {\r\n\t\t\t\t\t\r\n\t\t\t\t\tReactDOM.createRoot(container, { onRecoverableError: handleError }).render(page)\r\n\t\t\t\t}\r\n\t\t\t} catch (error) {\r\n\t\t\t\thandleError(error, undefined, false)\r\n\t\t\t\tthrow error\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\r\n\r\n\t\t\r\n\t"],"mappings":"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"}