{"version":3,"file":"KeyVisual.BKUkhvpW.mjs","names":["useRef","useLayoutEffect","useEffect"],"sources":["https:/framerusercontent.com/modules/9Wu78nblJ6tEHJ5FtYeG/YrTOLIRo53S4J31ivYhh/KeyVisual.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";import{useEffect,useLayoutEffect,useRef}from\"react\";const DEFAULTS={background:\"#EFEEEC\",ink:\"#FFFFFF\",inkOpacity:1,rings:4,radius:.65,stroke:1.5,merge:.05,spread:.9,speed:1,centerX:50,centerY:48,seed:0,randomize:false,satellites:0,satelliteSize:.04,satelliteOffset:0,satelliteSpeed:1,fadeTop:0,fadeBottom:0,mouse:0,maxDpr:2};// Base angular speed: one \"speed: 1\" unit drifts the rings slowly.\nconst TIME_SCALE=.05;// Opening composition: pages start on the same frame as the approved previews.\nconst START_TIME=1.2;// At speed 1 a satellite circles the largest ring about once every 75 seconds.\nconst SATELLITE_RATE=1.6;const MAX_RINGS=8;const MAX_SATELLITES=8;const MAX_SHAPES=MAX_RINGS+MAX_SATELLITES;// Merge is defined at the default size; it scales with Size so small\n// clusters keep the same thin-line character instead of turning into blobs.\nconst REFERENCE_RADIUS=.65;const FALLBACK_INK=[1,1,1,1];// useLayoutEffect warns during SSR; the server never draws anyway.\nconst useIsomorphicLayoutEffect=typeof window!==\"undefined\"?useLayoutEffect:useEffect;// One clock per page session: re-mounts and client-side page changes\n// continue the same timeline instead of snapping the rings back to the start.\nconst EPOCH=typeof performance!==\"undefined\"?performance.now():0;function elapsedSeconds(){return(performance.now()-EPOCH)/1e3;}const VERTEX_SHADER=`#version 300 es\nin vec2 aPosition;\nvoid main() {\n    gl_Position = vec4(aPosition, 0.0, 1.0);\n}`;// A field of thin rings (plus optional satellites) that fuse where they meet.\n// Distance to each circle outline + polynomial smooth-min. Shapes come from the CPU\n// (see layoutShapes); the output is premultiplied ink over a transparent canvas.\nconst FRAGMENT_SHADER=`#version 300 es\nprecision highp float;\n\nuniform vec2 uResolution;\nuniform vec3 uInk;\nuniform float uInkAlpha;\nuniform vec2 uCenter;\nuniform float uStroke;\nuniform vec2 uFade;\nuniform int uCount;\nuniform vec4 uShapes[${MAX_SHAPES}];\n\nout vec4 outColor;\n\nfloat smoothMin(float a, float b, float k) {\n    if (k <= 0.0) return min(a, b);\n    float h = clamp(0.5 + 0.5 * (b - a) / k, 0.0, 1.0);\n    return mix(b, a, h) - k * h * (1.0 - h);\n}\n\nfloat field(vec2 p) {\n    float f = 1e5;\n    for (int i = 0; i < ${MAX_SHAPES}; i++) {\n        if (i >= uCount) break;\n        vec4 shape = uShapes[i];\n        float outline = abs(length(p - shape.xy) - shape.z);\n        f = i == 0 ? outline : smoothMin(f, outline, shape.w);\n    }\n    return f;\n}\n\nvoid main() {\n    float unit = min(uResolution.x, uResolution.y);\n    // Flip y so the centre is measured from the top, like CSS.\n    vec2 frag = vec2(gl_FragCoord.x, uResolution.y - gl_FragCoord.y);\n    vec2 p = (frag - uCenter * uResolution) / unit;\n    float px = 1.0 / unit;\n    float halfWidth = 0.5 * uStroke * px;\n\n    float coverage = 0.0;\n    if (field(p) < halfWidth + 2.0 * px) {\n        // Four rotated-grid samples near the lines keep thin, slowly moving\n        // outlines from twinkling on low-density (100–150%) screens.\n        const vec2 offsets[4] = vec2[4](vec2(0.125, 0.375), vec2(-0.375, 0.125), vec2(0.375, -0.125), vec2(-0.125, -0.375));\n        for (int s = 0; s < 4; s++) {\n            float f = field(p + offsets[s] * px);\n            coverage += 1.0 - smoothstep(halfWidth - 0.5 * px, halfWidth + 0.5 * px, f);\n        }\n        coverage *= 0.25;\n    }\n    // Optional soft edges, so rings dissolve at a section boundary instead of being cut.\n    if (uFade.x > 0.0) coverage *= smoothstep(0.0, uFade.x, frag.y);\n    if (uFade.y > 0.0) coverage *= smoothstep(0.0, uFade.y, uResolution.y - frag.y);\n    float alpha = coverage * uInkAlpha;\n    outColor = vec4(uInk * alpha, alpha);\n}`;let colorProbe=null;// Resolves any CSS colour (hex, hsla, Framer colour tokens) to 0–1 RGBA.\nfunction resolveColor(value,fallback){if(typeof document===\"undefined\"||!value)return fallback;if(!colorProbe){colorProbe=document.createElement(\"span\");colorProbe.style.display=\"none\";document.body.appendChild(colorProbe);}colorProbe.style.color=\"\";colorProbe.style.color=value;if(!colorProbe.style.color)return fallback;const computed=getComputedStyle(colorProbe).color;const numbers=computed.match(/-?[\\d.]+/g);if(!numbers||numbers.length<3)return fallback;const channels=numbers.map(Number);// color(srgb r g b / a) is already 0–1; rgb()/rgba() is 0–255.\nconst scale=computed.startsWith(\"color(\")?1:255;return[channels[0]/scale,channels[1]/scale,channels[2]/scale,channels.length>3?channels[3]:1];}// Shape layout runs in double precision on the CPU. In the shader, float32 sin()\n// scrambles the hash, so the same settings drew a different arrangement per GPU.\nfunction hash(n){const x=Math.sin(n)*43758.5453123;return x-Math.floor(x);}// x, y, radius and merge for every ring and satellite, in units of the shorter side.\nconst shapeData=new Float32Array(MAX_SHAPES*4);function writeShape(index,x,y,radius,merge){shapeData[index*4]=x;shapeData[index*4+1]=y;shapeData[index*4+2]=radius;shapeData[index*4+3]=merge;}// A fresh spot and arrangement for \"Random Position\": the cluster lands in the\n// left or right fifth of the frame so centred content stays clear.\nfunction randomPlacement(){const side=Math.random()<.5?-1:1;return{centerX:50+side*(30+Math.random()*12),centerY:30+Math.random()*45,seed:Math.floor(Math.random()*100)};}// Fills shapeData and returns how many shapes to draw.\nfunction layoutShapes(s,time){const rings=Math.round(Math.min(Math.max(s.rings,1),MAX_RINGS));const ringMerge=s.merge*s.radius/REFERENCE_RADIUS;for(let i=0;i<rings;i++){const a=hash(i*17.13+s.seed*3.71);const b=hash(i*31.71+s.seed*1.93);const direction=i%2===0?1:-1;const t=time*(.6+.8*a)*direction+b*6.2831853;const orbit=i===0?.05:s.spread*(.75+.35*b);writeShape(i,Math.cos(t)*orbit*s.radius,Math.sin(t*(.9+.3*a))*orbit*s.radius,s.radius*(1-.32*i/Math.max(rings-1,1)),ringMerge);}// Satellites travel along the largest ring (ring 0) and fuse with it where they cross.\nconst satellites=Math.round(Math.min(Math.max(s.satellites,0),MAX_SATELLITES));const hostX=shapeData[0];const hostY=shapeData[1];const hostRadius=shapeData[2];for(let j=0;j<satellites;j++){const a=hash(j*12.9898+s.seed*4.1414+7.13);const b=hash(j*78.233+s.seed*2.7183+3.17);const size=s.satelliteSize*(.7+.6*b);const angle=j/satellites*6.2831853+(b-.5)*.8+time*SATELLITE_RATE*s.satelliteSpeed*(.85+.3*a);const distance=hostRadius+s.satelliteOffset*size;writeShape(rings+j,hostX+Math.cos(angle)*distance,hostY+Math.sin(angle)*distance,size,Math.min(ringMerge,.35*size));}return rings+satellites;}function compileShader(gl,type,source){const shader=gl.createShader(type);if(!shader)return null;gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){console.error(\"[KeyVisual] shader error:\",gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null;}return shader;}function createRenderer(){const canvas=document.createElement(\"canvas\");const gl=canvas.getContext(\"webgl2\",{alpha:true,premultipliedAlpha:true,antialias:false,depth:false,stencil:false,powerPreference:\"low-power\"});if(!gl||gl.isContextLost())return null;const vertex=compileShader(gl,gl.VERTEX_SHADER,VERTEX_SHADER);const fragment=compileShader(gl,gl.FRAGMENT_SHADER,FRAGMENT_SHADER);if(!vertex||!fragment)return null;const program=gl.createProgram();if(!program)return null;gl.attachShader(program,vertex);gl.attachShader(program,fragment);gl.linkProgram(program);gl.deleteShader(vertex);gl.deleteShader(fragment);if(!gl.getProgramParameter(program,gl.LINK_STATUS)){console.error(\"[KeyVisual] link error:\",gl.getProgramInfoLog(program));return null;}gl.bindBuffer(gl.ARRAY_BUFFER,gl.createBuffer());// One oversized triangle covers the whole viewport.\ngl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),gl.STATIC_DRAW);const position=gl.getAttribLocation(program,\"aPosition\");gl.enableVertexAttribArray(position);gl.vertexAttribPointer(position,2,gl.FLOAT,false,0,0);gl.useProgram(program);const at=name=>gl.getUniformLocation(program,name);return{canvas,gl,uniforms:{resolution:at(\"uResolution\"),ink:at(\"uInk\"),inkAlpha:at(\"uInkAlpha\"),center:at(\"uCenter\"),stroke:at(\"uStroke\"),fade:at(\"uFade\"),count:at(\"uCount\"),shapes:at(\"uShapes\")}};}// One WebGL context renders every Key Visual on the page, and each instance shows\n// the result on its own 2D canvas. Browsers cap live WebGL contexts (about 16); the\n// Framer editor and preview mount many instances, so per-instance contexts were being\n// force-lost, and a lost context shows as an empty frame. A 2D canvas keeps its last\n// frame even while the GPU context is being replaced.\nlet shared=null;let lastAttempt=-Infinity;function getRenderer(){if(shared&&!shared.gl.isContextLost())return shared;if(typeof document===\"undefined\")return null;// A lost context is abandoned; retry at most once a second.\nconst now=performance.now();if(now-lastAttempt<1e3)return null;lastAttempt=now;shared=createRenderer();return shared;}function renderTo(target,width,height,dpr,s,ink,time,pointer){const renderer=getRenderer();if(!renderer)return;const{gl,canvas,uniforms:u}=renderer;// The shared buffer only grows; each draw uses its bottom-left corner.\nif(canvas.width<width||canvas.height<height){canvas.width=Math.max(canvas.width,width);canvas.height=Math.max(canvas.height,height);}gl.viewport(0,0,width,height);const drift=s.mouse*.15;gl.uniform2f(u.resolution,width,height);gl.uniform3f(u.ink,ink[0],ink[1],ink[2]);gl.uniform1f(u.inkAlpha,ink[3]*s.inkOpacity);gl.uniform2f(u.center,s.centerX/100+(pointer.x-.5)*drift,s.centerY/100+(pointer.y-.5)*drift);gl.uniform1f(u.stroke,s.stroke*dpr);gl.uniform2f(u.fade,Math.max(0,s.fadeTop)*dpr,Math.max(0,s.fadeBottom)*dpr);gl.uniform1i(u.count,layoutShapes(s,time));gl.uniform4fv(u.shapes,shapeData);gl.drawArrays(gl.TRIANGLES,0,3);target.globalCompositeOperation=\"copy\";target.drawImage(canvas,0,canvas.height-height,width,height,0,0,width,height);}/**\n * Key Visual\n *\n * Generative ring field that forms the site's visual system.\n * Every page sets its own variables (rings, size, position, seed…)\n * on top of the same shader.\n *\n * @framerIntrinsicWidth 1200\n * @framerIntrinsicHeight 800\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function KeyVisual(props){const{style,...rest}=props;const settings={...DEFAULTS,...rest};const containerRef=useRef(null);const canvasRef=useRef(null);const settingsRef=useRef(settings);const inkRef=useRef(FALLBACK_INK);const redrawRef=useRef(()=>{});const isStatic=useIsStaticRenderer();settingsRef.current=settings;// The ink colour is resolved only when it changes, never per frame.\nuseIsomorphicLayoutEffect(()=>{inkRef.current=resolveColor(settings.ink,FALLBACK_INK);},[settings.ink]);// Layout effect: the first frame is drawn before the browser paints,\n// so a freshly mounted canvas never shows up empty.\nuseIsomorphicLayoutEffect(()=>{const canvas=canvasRef.current;const container=containerRef.current;const context=canvas?.getContext(\"2d\");if(!canvas||!container||!context)return;const reduceMotion=window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;const animated=!isStatic&&!reduceMotion;const pointer={x:.5,y:.5,targetX:.5,targetY:.5};let devicePixels=null;let dpr=1;let frameId=0;let inView=true;let pageVisible=!document.hidden;// Rolled once per page load on the live site; the Framer canvas keeps the set values.\nconst placement=isStatic?null:randomPlacement();const currentSettings=()=>{const s=settingsRef.current;return s.randomize&&placement?{...s,...placement}:s;};const currentTime=()=>START_TIME+(animated?elapsedSeconds()*TIME_SCALE*settingsRef.current.speed:0);const resize=()=>{// Match the backing store to physical pixels so the browser never\n// resamples the canvas (resampling makes thin lines shimmer).\nconst ratio=window.devicePixelRatio||1;const cap=Math.max(1,settingsRef.current.maxDpr);const cssWidth=Math.max(1,container.clientWidth);const cssHeight=Math.max(1,container.clientHeight);let width=Math.round(cssWidth*Math.min(Math.max(ratio,1),cap));let height=Math.round(cssHeight*Math.min(Math.max(ratio,1),cap));if(devicePixels&&ratio<=cap){width=devicePixels.width;height=devicePixels.height;}width=Math.max(1,width);height=Math.max(1,height);dpr=width/cssWidth;if(canvas.width!==width||canvas.height!==height){canvas.width=width;canvas.height=height;}};const draw=()=>{renderTo(context,canvas.width,canvas.height,dpr,currentSettings(),inkRef.current,currentTime(),pointer);};const frame=()=>{pointer.x+=(pointer.targetX-pointer.x)*.05;pointer.y+=(pointer.targetY-pointer.y)*.05;draw();frameId=requestAnimationFrame(frame);};const start=()=>{if(frameId||!animated||!inView||!pageVisible)return;frameId=requestAnimationFrame(frame);};const stop=()=>{cancelAnimationFrame(frameId);frameId=0;};const onPointerMove=event=>{pointer.targetX=event.clientX/window.innerWidth;pointer.targetY=event.clientY/window.innerHeight;};const onVisibilityChange=()=>{pageVisible=!document.hidden;if(pageVisible)start();else stop();};const resizeObserver=new ResizeObserver(entries=>{const size=entries[0]?.devicePixelContentBoxSize?.[0];if(size)devicePixels={width:size.inlineSize,height:size.blockSize};resize();draw();});const intersectionObserver=new IntersectionObserver(([entry])=>{inView=entry.isIntersecting;if(inView)start();else stop();});try{resizeObserver.observe(canvas,{box:\"device-pixel-content-box\"});}catch{resizeObserver.observe(canvas);}intersectionObserver.observe(container);document.addEventListener(\"visibilitychange\",onVisibilityChange);if(animated&&settingsRef.current.mouse>0){window.addEventListener(\"pointermove\",onPointerMove,{passive:true});}redrawRef.current=()=>{resize();draw();};resize();draw();start();return()=>{stop();resizeObserver.disconnect();intersectionObserver.disconnect();document.removeEventListener(\"visibilitychange\",onVisibilityChange);window.removeEventListener(\"pointermove\",onPointerMove);redrawRef.current=()=>{};};},[isStatic]);// Static renders (Framer canvas, export) have no loop; redraw when props change.\nuseIsomorphicLayoutEffect(()=>{if(isStatic)redrawRef.current();});return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,\"aria-hidden\":\"true\",style:{...style,position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\",background:settings.background,pointerEvents:\"none\"},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",display:\"block\"}})});}addPropertyControls(KeyVisual,{background:{type:ControlType.Color,title:\"Background\",defaultValue:DEFAULTS.background},ink:{type:ControlType.Color,title:\"Ring Color\",defaultValue:DEFAULTS.ink},inkOpacity:{type:ControlType.Number,title:\"Ring Opacity\",defaultValue:DEFAULTS.inkOpacity,min:0,max:1,step:.05},rings:{type:ControlType.Number,title:\"Rings\",defaultValue:DEFAULTS.rings,min:1,max:MAX_RINGS,step:1,displayStepper:true},radius:{type:ControlType.Number,title:\"Size\",description:\"Ring radius relative to the shorter side.\",defaultValue:DEFAULTS.radius,min:.05,max:1.5,step:.01},stroke:{type:ControlType.Number,title:\"Line Width\",defaultValue:DEFAULTS.stroke,min:.5,max:12,step:.25,unit:\"px\"},merge:{type:ControlType.Number,title:\"Merge\",description:\"How softly rings fuse where they meet. Scales with Size.\",defaultValue:DEFAULTS.merge,min:0,max:.3,step:.005},spread:{type:ControlType.Number,title:\"Spread\",defaultValue:DEFAULTS.spread,min:0,max:1.5,step:.01},speed:{type:ControlType.Number,title:\"Speed\",defaultValue:DEFAULTS.speed,min:0,max:5,step:.1},centerX:{type:ControlType.Number,title:\"Center X\",defaultValue:DEFAULTS.centerX,min:-50,max:150,step:1,unit:\"%\"},centerY:{type:ControlType.Number,title:\"Center Y\",defaultValue:DEFAULTS.centerY,min:-50,max:150,step:1,unit:\"%\"},seed:{type:ControlType.Number,title:\"Seed\",description:\"Changes the composition while keeping the same system.\",defaultValue:DEFAULTS.seed,min:0,max:100,step:1,displayStepper:true},randomize:{type:ControlType.Boolean,title:\"Random Position\",description:\"Each page load picks a new spot (left or right side) and arrangement. The canvas shows the values above.\",defaultValue:DEFAULTS.randomize},satellites:{type:ControlType.Number,title:\"Satellites\",description:\"Small rings that travel along the largest ring.\",defaultValue:DEFAULTS.satellites,min:0,max:MAX_SATELLITES,step:1,displayStepper:true},satelliteSize:{type:ControlType.Number,title:\"Satellite Size\",defaultValue:DEFAULTS.satelliteSize,min:.01,max:.3,step:.005,hidden:props=>!props.satellites},satelliteOffset:{type:ControlType.Number,title:\"Satellite Offset\",description:\"0 sits on the ring, 1 rolls along the outside, −1 the inside.\",defaultValue:DEFAULTS.satelliteOffset,min:-2,max:2,step:.05,hidden:props=>!props.satellites},satelliteSpeed:{type:ControlType.Number,title:\"Satellite Speed\",defaultValue:DEFAULTS.satelliteSpeed,min:0,max:5,step:.1,hidden:props=>!props.satellites},fadeTop:{type:ControlType.Number,title:\"Fade Top\",description:\"Rings dissolve over this distance from the top edge instead of being cut off.\",defaultValue:DEFAULTS.fadeTop,min:0,max:800,step:10,unit:\"px\"},fadeBottom:{type:ControlType.Number,title:\"Fade Bottom\",defaultValue:DEFAULTS.fadeBottom,min:0,max:800,step:10,unit:\"px\"},mouse:{type:ControlType.Number,title:\"Follow Pointer\",defaultValue:DEFAULTS.mouse,min:0,max:1,step:.05},maxDpr:{type:ControlType.Number,title:\"Max Quality\",description:\"Caps the pixel ratio to keep large screens smooth.\",defaultValue:DEFAULTS.maxDpr,min:1,max:3,step:.5}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"KeyVisual\",\"slots\":[],\"annotations\":{\"framerIntrinsicHeight\":\"800\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicWidth\":\"1200\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./KeyVisual.map"],"mappings":"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"}