{"version":3,"file":"WaveGradient.DGx9Js16.mjs","names":["useState","useRef","useRef"],"sources":["https:/framerusercontent.com/modules/avwkNBBzsEKtjP5XxbM4/UxC3T0IaRWcq6kXnFZam/DynamicText.js","https:/framerusercontent.com/modules/qfjeaSvUvz5ZW9a00gTz/oGTCpmW4KXilsiKxrhIG/WaveGradient.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{motion}from\"framer-motion\";import{useEffect,useRef,useState}from\"react\";// Roboto Flex with variable wght (100-1000) and wdth (25-151) axes.\nconst FONT_HREF=\"https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wdth,wght@8..144,25..151,100..1000&display=swap\";const FONT_LINK_ID=\"fluid-line-roboto-flex\";function useFontReady(){const[ready,setReady]=useState(false);useEffect(()=>{let alive=true;const confirmFont=()=>{if(!alive)return;const done=()=>{if(alive)setReady(true);};if(document.fonts&&document.fonts.load){// We must ask for the font at a NON-DEFAULT stretch so the\n// variable face is preloaded. Asking just for the family at\n// weight 400 stretch 100% could resolve against a static\n// face that Framer registers elsewhere on the site.\ndocument.fonts.load(\"italic 16px 'Roboto Flex'\").then(done,done);}else{done();}};let link=document.getElementById(FONT_LINK_ID);if(!link){link=document.createElement(\"link\");link.id=FONT_LINK_ID;link.rel=\"stylesheet\";link.href=FONT_HREF;document.head.appendChild(link);}if(link.sheet){confirmFont();return()=>{alive=false;};}const onLoad=()=>confirmFont();link.addEventListener(\"load\",onLoad);link.addEventListener(\"error\",onLoad);const fallback=setTimeout(confirmFont,1500);return()=>{alive=false;clearTimeout(fallback);link.removeEventListener(\"load\",onLoad);link.removeEventListener(\"error\",onLoad);};},[]);return ready;}export default function FluidLine(props){const fontReady=useFontReady();const containerRef=useRef(null);const lineRef=useRef(null);const[weight,setWeight]=useState(600);const[wdth,setWdth]=useState(100);const[arrowStroke,setArrowStroke]=useState(12);const[hovered,setHovered]=useState(false);useEffect(()=>{if(!fontReady)return;let frame=null;let alive=true;const timers=[];const fit=()=>{if(!alive||!containerRef.current||!lineRef.current)return;const vw=window.innerWidth;const t=Math.max(0,Math.min(1,(vw-props.minViewport)/(props.maxViewport-props.minViewport)));const newWeight=Math.round(props.minWeight+(props.maxWeight-props.minWeight)*t);const wt=(newWeight-props.minWeight)/(props.maxWeight-props.minWeight);const newStroke=+(props.minStroke+wt*(props.maxStroke-props.minStroke)).toFixed(1);const target=containerRef.current.offsetWidth;if(target<1)return;// ROOT-CAUSE FIX:\n//\n// Framer registers competing STATIC \"Roboto Flex\" font faces\n// (stretch:100%, weights 400/500/700) on pages that use the\n// typeface. After client-side navigation through such a page,\n// those static faces persist in document.fonts and compete with\n// our variable face during font *selection*.\n//\n// `font-variation-settings` is a POST-selection axis control -\n// it has no effect if the browser picks a static face. The\n// browser's font-selection algorithm uses font-style /\n// font-weight / font-stretch as CSS properties. When we leave\n// those at their defaults (normal / 400 / 100%), a static face\n// matches all three criteria exactly and is preferred over the\n// variable face whose ranges merely cover the same values.\n//\n// Setting `font-stretch` to the wdth percentage and\n// `font-weight` to the requested weight forces the browser to\n// pick the variable face (only it covers stretch values other\n// than 100% and weight values other than the static ones), so\n// the wdth axis actually applies.\nconst line=lineRef.current;let w=100;for(let i=0;i<12;i++){line.style.fontStretch=`${w}%`;line.style.fontWeight=String(newWeight);line.style.fontVariationSettings=`'wght' ${newWeight}, 'wdth' ${w}`;void line.offsetWidth;const current=line.offsetWidth;if(current===0)break;const ratio=target/current;if(Math.abs(ratio-1)<.002)break;w=Math.max(25,Math.min(151,w*ratio));}setWeight(newWeight);setArrowStroke(newStroke);setWdth(Math.round(w*10)/10);};const schedule=()=>{if(frame)cancelAnimationFrame(frame);frame=requestAnimationFrame(fit);};schedule();// Re-fit a few times across the view-transition window so a transient\n// layout state during a client-side navigation can't lock in a wrong\n// result. With the font-selection fix above, even an early fit will\n// already be hitting the variable face - these are belt-and-braces.\nconst RETRY_DELAYS=[60,200,600,1200,2200];RETRY_DELAYS.forEach(d=>timers.push(setTimeout(schedule,d)));window.addEventListener(\"resize\",schedule);const ro=new ResizeObserver(schedule);ro.observe(containerRef.current);// Re-fit whenever document.fonts changes: Framer may register new\n// faces mid-session as the user navigates to other pages. Even\n// though the font-stretch fix prevents wrong selection, fitting\n// after the registration change keeps measurements honest.\nlet onFontsChange=null;if(document.fonts&&document.fonts.addEventListener){onFontsChange=()=>schedule();document.fonts.addEventListener(\"loadingdone\",onFontsChange);}const onPageReveal=()=>schedule();window.addEventListener(\"pagereveal\",onPageReveal);const onPageShow=()=>schedule();window.addEventListener(\"pageshow\",onPageShow);return()=>{alive=false;window.removeEventListener(\"resize\",schedule);window.removeEventListener(\"pagereveal\",onPageReveal);window.removeEventListener(\"pageshow\",onPageShow);if(onFontsChange&&document.fonts){document.fonts.removeEventListener(\"loadingdone\",onFontsChange);}ro.disconnect();if(frame)cancelAnimationFrame(frame);timers.forEach(clearTimeout);};},[fontReady,props.text,props.showArrow,props.minFontSize,props.vwFontSize,props.maxFontSize,props.minViewport,props.maxViewport,props.minWeight,props.maxWeight,props.minStroke,props.maxStroke,props.arrowSize,props.arrowGap,props.arrowOffset]);const fontSize=`clamp(${props.minFontSize}px, ${props.vwFontSize}vw, ${props.maxFontSize}px)`;const displayColor=hovered?props.hoverColor:props.color;const letters=Array.from(props.text);const lineVariants={initial:{},animate:{transition:{staggerChildren:props.stagger,delayChildren:props.delay}},exit:{transition:{staggerChildren:props.stagger*.6,staggerDirection:1}}};const itemVariants={initial:{y:\"-1em\"},animate:{y:\"0em\",transition:{duration:props.duration,ease:[.22,1,.36,1]}},exit:{y:\"-1em\",transition:{duration:props.duration*.6,ease:[.7,0,.84,0]}}};return /*#__PURE__*/_jsx(\"div\",{ref:containerRef,style:{width:\"100%\"},children:/*#__PURE__*/_jsxs(motion.span,{ref:lineRef,variants:lineVariants,initial:\"initial\",animate:fontReady?\"animate\":\"initial\",exit:\"exit\",onHoverStart:()=>setHovered(true),onHoverEnd:()=>setHovered(false),onTapStart:()=>setHovered(true),onTap:()=>setHovered(false),onTapCancel:()=>setHovered(false),style:{display:\"inline-block\",overflow:\"hidden\",whiteSpace:\"nowrap\",textTransform:\"uppercase\",lineHeight:props.lineHeight,fontSize:fontSize,color:displayColor,fontFamily:\"'Roboto Flex', system-ui, sans-serif\",// font-stretch and font-weight as CSS properties (NOT just\n// inside font-variation-settings) are what force the\n// browser to pick the variable face during font selection.\n// See the long comment in the fit effect above.\nfontStretch:`${wdth}%`,fontWeight:weight,fontVariationSettings:`'wght' ${weight}, 'wdth' ${wdth}`,verticalAlign:\"top\",transition:\"color 0.2s ease\"},children:[letters.map((letter,i)=>/*#__PURE__*/_jsx(motion.span,{variants:itemVariants,style:{display:\"inline-block\",paddingRight:\"0.04em\",marginRight:\"-0.04em\"},children:letter===\" \"?\"\\xa0\":letter},`letter-${i}`)),props.showArrow&&/*#__PURE__*/_jsx(motion.span,{variants:itemVariants,style:{display:\"inline-block\",height:`${props.arrowSize}em`,width:`${props.arrowSize}em`,marginLeft:`${props.arrowGap}em`,verticalAlign:`${props.arrowOffset}em`},children:/*#__PURE__*/_jsx(\"svg\",{viewBox:\"0 0 71 71\",xmlns:\"http://www.w3.org/2000/svg\",fill:\"none\",style:{width:\"100%\",height:\"100%\",display:\"block\",overflow:\"visible\"},children:/*#__PURE__*/_jsx(\"path\",{d:\"M 10 61 L 61 10 M 10 10 L 61 10 L 61 61\",stroke:\"currentColor\",strokeLinecap:\"butt\",strokeLinejoin:\"miter\",strokeWidth:arrowStroke})})})]})});}FluidLine.defaultProps={text:\"SOUNDS LIKE\",showArrow:false,color:\"#0a0a0a\",hoverColor:\"#888888\",minFontSize:56,vwFontSize:20,maxFontSize:260,lineHeight:.85,minViewport:320,maxViewport:1920,minWeight:300,maxWeight:950,minStroke:6,maxStroke:18,arrowSize:.5,arrowGap:.08,arrowOffset:0,duration:.55,stagger:.035,delay:0};addPropertyControls(FluidLine,{text:{type:ControlType.String,title:\"Text\",defaultValue:\"SOUNDS LIKE\"},color:{type:ControlType.Color,title:\"Colour\",defaultValue:\"#0a0a0a\"},hoverColor:{type:ControlType.Color,title:\"Hover Colour\",defaultValue:\"#888888\"},lineHeight:{type:ControlType.Number,title:\"Line Height\",description:\"Adjusts vertical alignment of text\",defaultValue:.85,min:.5,max:2,step:.01},minFontSize:{type:ControlType.Number,title:\"Minimum Font Size\",defaultValue:56,min:8,max:500,step:1},maxFontSize:{type:ControlType.Number,title:\"Maximum Font Size\",defaultValue:260,min:8,max:1e3,step:1},minWeight:{type:ControlType.Number,title:\"Minimum Font Weight\",description:\"Adjusts how thin the font can get\",defaultValue:300,min:100,max:1e3},maxWeight:{type:ControlType.Number,title:\"Maximum Font Weight\",description:\"Adjusts how thick the font can get\",defaultValue:950,min:100,max:1e3},vwFontSize:{type:ControlType.Number,title:\"Font Fluid Ratio\",description:\"Changes how the font adapts to different screen widths\",defaultValue:20,min:1,max:50,step:.5},showArrow:{type:ControlType.Boolean,title:\"Arrow Visibility\",defaultValue:false},arrowOffset:{type:ControlType.Number,title:\"Arrow Vertical Alignment\",defaultValue:0,min:-1,max:1,step:.01},arrowGap:{type:ControlType.Number,title:\"Arrow Gap\",description:\"Adjusts the spacing between the text and the arrow\",defaultValue:.08,min:-.5,max:1,step:.02},arrowSize:{type:ControlType.Number,title:\"Arrow Size\",description:\"Adjusts how large the arrow can be relative to paired text\",defaultValue:.5,min:.1,max:2,step:.05},minStroke:{type:ControlType.Number,title:\"Minimum Arrow Weight\",description:\"Adjusts how thin the arrow can get\",defaultValue:6,min:1,max:50,step:.5},maxStroke:{type:ControlType.Number,title:\"Maximum Arrow Weight\",description:\"Adjusts how thick the arrow can get\",defaultValue:18,min:1,max:50,step:.5},duration:{type:ControlType.Number,title:\"Animation Duration\",defaultValue:.55,min:.1,max:3,step:.05},stagger:{type:ControlType.Number,title:\"Animation Stagger\",description:\"Cascading letter animation, change to adjust the delay between each letter\",defaultValue:.035,min:0,max:.3,step:.005},delay:{type:ControlType.Number,title:\"Animation Delay\",description:\"Delay before the first letter starts animation\",defaultValue:0,min:0,max:5,step:.05},minViewport:{type:ControlType.Number,title:\"Minimum Viewport\",description:\"Screen width where the thinnest text kicks in\",defaultValue:320,min:100,max:2e3},maxViewport:{type:ControlType.Number,title:\"Maximum Viewport\",description:\"Screen width where the boldest text kicks in\",defaultValue:1920,min:200,max:4e3}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FluidLine\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./DynamicText.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useRef}from\"react\";/**\n * Paper Shaders \"grain-gradient\" wave preset, ported with P3 wide-gamut output.\n *\n * Source: https://github.com/paper-design/shaders\n * Preset URL:\n *   https://shaders.paper.design/grain-gradient\n *     #colors=ffaa00,ff9100,ff4400&colorBack=ff6a00\n *     &softness=0.7&intensity=0.15&noise=0.5&shape=wave&speed=1&scale=1\n *\n * PERFORMANCE NOTES (output is visually identical to the original port):\n *  - The grain field (grainDist + noiseVal) depends only on pixel position,\n *    never on time. It is rendered ONCE into an offscreen texture (and again\n *    on resize), so the per-frame shader is just the cheap wave + colour mix\n *    + one texture fetch instead of 2 simplex + 12 value-noise evaluations\n *    per pixel per frame.\n *  - The render loop uploads only u_time; everything else is set on change.\n *  - No layout reads in the loop; the ResizeObserver owns sizing.\n *  - Rendering pauses entirely while the canvas is offscreen.\n *  - The GL context is created once and survives prop changes (uniforms are\n *    updated in place), so editor tweaks no longer rebuild everything.\n *  - While the browser window is actively resizing, the canvas buffer is\n *    left untouched (the animation freezes on its last frame) until resizing\n *    settles, so the gradient never blanks out mid-drag.\n *  - On the Framer canvas the animation never runs at all — a single static\n *    frame is drawn instead, to save CPU/GPU while editing.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n * @framerIntrinsicWidth 1200\n * @framerIntrinsicHeight 600\n */export default function WaveGradient(props){const{color1,color2,color3,colorBack,noiseColorWave,noiseColorBack,softness,intensity,noise,speed,scale,useP3,style}=props;const canvasRef=useRef(null);const glStateRef=useRef(null);// One-time GL setup. Prop changes only update uniforms (effect below).\nuseEffect(()=>{const canvas=canvasRef.current;if(!canvas)return;const isStaticCanvas=RenderTarget.current()===RenderTarget.canvas;const ctxAttribs={antialias:true,premultipliedAlpha:true,alpha:true,colorSpace:\"display-p3\"};const gl=canvas.getContext(\"webgl\",ctxAttribs);if(!gl)return;try{// @ts-ignore\ngl.drawingBufferColorSpace=\"display-p3\";// @ts-ignore\ngl.unpackColorSpace=\"display-p3\";}catch{}// Needed for fwidth(); guaranteed on all WebGL1 desktop + iOS Safari 14+.\ngl.getExtension(\"OES_standard_derivatives\");const vertSrc=`\n            attribute vec2 a_pos;\n            varying vec2 v_uv;\n            void main() {\n                v_uv = a_pos * 0.5 + 0.5;\n                gl_Position = vec4(a_pos, 0.0, 1.0);\n            }\n        `;// ---------------------------------------------------------------\n// PASS 1 — grain field, rendered once per resize into a texture.\n// Faithful copy of the noise stack from the original port. The two\n// outputs are time-independent:\n//   R: grainDist, encoded from its analytic range [-2, 1] into [0, 1]\n//   G: noiseVal, already in [0, 0.75]\n// 8-bit quantisation here is invisible: the values are noise and are\n// multiplied down by intensity/noise before entering the shape.\n// ---------------------------------------------------------------\nconst grainFragSrc=`\n            precision highp float;\n\n            vec2 rotate(vec2 v, float a) {\n                float c = cos(a), s = sin(a);\n                return mat2(c, -s, s, c) * v;\n            }\n\n            // --- Simplex 2D noise (Ashima Arts) ---\n            vec3 mod289_3(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\n            vec2 mod289_2(vec2 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\n            vec3 permute(vec3 x) { return mod289_3(((x * 34.0) + 1.0) * x); }\n            float snoise(vec2 v) {\n                const vec4 C = vec4(0.211324865405187, 0.366025403784439,\n                                    -0.577350269189626, 0.024390243902439);\n                vec2 i  = floor(v + dot(v, C.yy));\n                vec2 x0 = v - i + dot(i, C.xx);\n                vec2 i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);\n                vec4 x12 = x0.xyxy + C.xxzz; x12.xy -= i1;\n                i = mod289_2(i);\n                vec3 p = permute(permute(i.y + vec3(0.0, i1.y, 1.0))\n                                       + i.x + vec3(0.0, i1.x, 1.0));\n                vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy),\n                                        dot(x12.zw, x12.zw)), 0.0);\n                m = m * m; m = m * m;\n                vec3 x = 2.0 * fract(p * C.www) - 1.0;\n                vec3 h = abs(x) - 0.5;\n                vec3 ox = floor(x + 0.5);\n                vec3 a0 = x - ox;\n                m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h);\n                vec3 g;\n                g.x  = a0.x  * x0.x  + h.x  * x0.y;\n                g.yz = a0.yz * x12.xz + h.yz * x12.yw;\n                return 130.0 * dot(m, g);\n            }\n\n            // --- Value noise + FBM matching paper shaders' implementation ---\n            float randomR(vec2 st) {\n                return fract(sin(dot(st, vec2(127.1, 311.7))) * 43758.5453);\n            }\n            float valueNoiseR(vec2 st) {\n                vec2 i = floor(st);\n                vec2 f = fract(st);\n                float a = randomR(i);\n                float b = randomR(i + vec2(1.0, 0.0));\n                float c = randomR(i + vec2(0.0, 1.0));\n                float d = randomR(i + vec2(1.0, 1.0));\n                vec2 u = f * f * (3.0 - 2.0 * f);\n                return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);\n            }\n            vec4 fbmR(vec2 n0, vec2 n1, vec2 n2, vec2 n3) {\n                float amplitude = 0.2;\n                vec4 total = vec4(0.0);\n                for (int i = 0; i < 3; i++) {\n                    n0 = rotate(n0, 0.3);\n                    n1 = rotate(n1, 0.3);\n                    n2 = rotate(n2, 0.3);\n                    n3 = rotate(n3, 0.3);\n                    total.x += valueNoiseR(n0) * amplitude;\n                    total.y += valueNoiseR(n1) * amplitude;\n                    total.z += valueNoiseR(n2) * amplitude;\n                    total.z += valueNoiseR(n3) * amplitude;\n                    n0 *= 1.99; n1 *= 1.99; n2 *= 1.99; n3 *= 1.99;\n                    amplitude *= 0.6;\n                }\n                return total;\n            }\n\n            void main() {\n                // Grain is computed in pixel space so it stays a fine,\n                // fixed-size texture regardless of canvas size or scale —\n                // same approach as paper shaders.\n                vec2 grain_uv = gl_FragCoord.xy * 1.6;\n\n                float baseNoise = snoise(grain_uv * 0.5);\n                vec4 fbmVals = fbmR(\n                    0.002 * grain_uv + 10.0,\n                    0.003 * grain_uv,\n                    0.001 * grain_uv,\n                    rotate(0.4 * grain_uv, 2.0)\n                );\n                float grainDist = baseNoise * snoise(grain_uv * 0.2)\n                                  - fbmVals.x - fbmVals.y;\n                float rawNoise = 0.75 * baseNoise - fbmVals.w - fbmVals.z;\n                float noiseVal = clamp(rawNoise, 0.0, 1.0);\n\n                gl_FragColor = vec4((grainDist + 2.0) / 3.0, noiseVal, 0.0, 1.0);\n            }\n        `;// ---------------------------------------------------------------\n// PASS 2 — per-frame wave + colour mix. Grain comes from the texture.\n// ---------------------------------------------------------------\nconst fragSrc=`\n            #extension GL_OES_standard_derivatives : enable\n            precision highp float;\n\n            varying vec2 v_uv;\n            uniform vec2 u_res;\n            uniform float u_time;\n            uniform float u_scale;\n            uniform float u_softness;\n            uniform float u_intensity;\n            uniform float u_noise;\n            uniform float u_speed;\n            uniform vec4 u_c1;\n            uniform vec4 u_c2;\n            uniform vec4 u_c3;\n            uniform vec4 u_cBack;\n            uniform vec4 u_noiseColorWave;\n            uniform vec4 u_noiseColorBack;\n            uniform sampler2D u_grain;\n\n            void main() {\n                // Paper shaders' wave uses t = .1 * (time + 7.) — matched here.\n                float t = 0.1 * (u_time * u_speed + 7.0);\n\n                vec2 uv = (v_uv - 0.5);\n                uv.x *= u_res.x / max(u_res.y, 1.0);\n                vec2 patternUV = uv / max(u_scale, 0.01);\n                vec2 shape_uv = patternUV * 5.0;\n\n                // ----- Wave shape (paper shaders grain-gradient.ts) -----\n                float wave =\n                    cos(0.5 * shape_uv.x - 4.0 * t)\n                    * sin(1.5 * shape_uv.x + 2.0 * t)\n                    * (0.75 + 0.25 * cos(6.0 * t));\n                float shape = 1.0 - smoothstep(-1.0, 1.0, shape_uv.y + wave);\n\n                // ----- Grain / noise overlay (precomputed, 1:1 pixels) -----\n                vec2 g = texture2D(u_grain, v_uv).rg;\n                float grainDist = g.x * 3.0 - 2.0;\n                float noiseVal = g.y;\n\n                const float colorsCount = 3.0;\n                shape += u_intensity * 2.0 / colorsCount * (grainDist + 0.5);\n                shape += u_noise * 10.0 / colorsCount * noiseVal;\n\n                float aa = fwidth(shape);\n                shape = clamp(shape - 0.5 / colorsCount, 0.0, 1.0);\n                float totalShape = smoothstep(\n                    0.0,\n                    u_softness + 2.0 * aa,\n                    clamp(shape * colorsCount, 0.0, 1.0)\n                );\n                float mixer = shape * (colorsCount - 1.0);\n\n                // ----- 3-stop gradient with softness-controlled transitions -----\n                vec4 c0 = u_c1; c0.rgb *= c0.a;\n                vec4 c1 = u_c2; c1.rgb *= c1.a;\n                vec4 c2 = u_c3; c2.rgb *= c2.a;\n\n                vec4 gradient = c0;\n                float localT;\n                localT = clamp(mixer, 0.0, 1.0);\n                localT = smoothstep(0.5 - 0.5 * u_softness - aa,\n                                    0.5 + 0.5 * u_softness + aa, localT);\n                gradient = mix(gradient, c1, localT);\n\n                localT = clamp(mixer - 1.0, 0.0, 1.0);\n                localT = smoothstep(0.5 - 0.5 * u_softness - aa,\n                                    0.5 + 0.5 * u_softness + aa, localT);\n                gradient = mix(gradient, c2, localT);\n\n                vec3 color = gradient.rgb * totalShape;\n                float opacity = gradient.a * totalShape;\n\n                vec3 bgColor = u_cBack.rgb * u_cBack.a;\n                color = color + bgColor * (1.0 - opacity);\n                opacity = opacity + u_cBack.a * (1.0 - opacity);\n\n                // ----- Colored noise overlay -----\n                // totalShape doubles as a wave/background mask (~1 inside the\n                // rendered wave, ~0 in the plain backdrop), so the grain can be\n                // tinted differently depending which side of the shape it falls\n                // on. Alpha is folded into the mix factor as well as the\n                // premultiplied colour so a fully transparent noise colour has\n                // zero effect instead of mixing toward black.\n                vec3 waveNoiseRGB = u_noiseColorWave.rgb * u_noiseColorWave.a;\n                vec3 backNoiseRGB = u_noiseColorBack.rgb * u_noiseColorBack.a;\n                float waveNoiseMix = clamp(noiseVal * u_noiseColorWave.a * totalShape, 0.0, 1.0);\n                float backNoiseMix = clamp(noiseVal * u_noiseColorBack.a * (1.0 - totalShape), 0.0, 1.0);\n                color = mix(color, waveNoiseRGB, waveNoiseMix);\n                color = mix(color, backNoiseRGB, backNoiseMix);\n\n                gl_FragColor = vec4(color, opacity);\n            }\n        `;const compile=(type,src)=>{const sh=gl.createShader(type);gl.shaderSource(sh,src);gl.compileShader(sh);if(!gl.getShaderParameter(sh,gl.COMPILE_STATUS)){console.error(gl.getShaderInfoLog(sh));}return sh;};const link=fs=>{const prog=gl.createProgram();gl.attachShader(prog,compile(gl.VERTEX_SHADER,vertSrc));gl.attachShader(prog,compile(gl.FRAGMENT_SHADER,fs));gl.linkProgram(prog);return prog;};const prog=link(fragSrc);const grainProg=link(grainFragSrc);const buf=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,buf);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),gl.STATIC_DRAW);for(const p of[prog,grainProg]){const loc=gl.getAttribLocation(p,\"a_pos\");gl.enableVertexAttribArray(loc);gl.vertexAttribPointer(loc,2,gl.FLOAT,false,0,0);}gl.useProgram(prog);const u=n=>gl.getUniformLocation(prog,n);const uRes=u(\"u_res\");const uTime=u(\"u_time\");// Grain texture + framebuffer (regenerated only on resize).\nconst grainTex=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,grainTex);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);const fbo=gl.createFramebuffer();gl.activeTexture(gl.TEXTURE0);gl.uniform1i(u(\"u_grain\"),0);const renderGrain=()=>{gl.bindFramebuffer(gl.FRAMEBUFFER,fbo);gl.bindTexture(gl.TEXTURE_2D,grainTex);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,canvas.width,canvas.height,0,gl.RGBA,gl.UNSIGNED_BYTE,null);gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,grainTex,0);gl.disable(gl.BLEND);gl.useProgram(grainProg);gl.viewport(0,0,canvas.width,canvas.height);gl.drawArrays(gl.TRIANGLES,0,6);gl.bindFramebuffer(gl.FRAMEBUFFER,null);gl.useProgram(prog);gl.enable(gl.BLEND);gl.blendFunc(gl.ONE,gl.ONE_MINUS_SRC_ALPHA);};// ----- Render loop control -----\n// A single quad draw; `startLoop` no-ops on the Framer canvas so the\n// component only ever paints the static frame drawn below.\nconst start=performance.now();let raf=0;let running=false;const drawFrame=t=>{gl.uniform1f(uTime,t);gl.drawArrays(gl.TRIANGLES,0,6);};const render=now=>{drawFrame((now-start)/1e3);raf=requestAnimationFrame(render);};const startLoop=()=>{if(running||isStaticCanvas)return;running=true;raf=requestAnimationFrame(render);};const stopLoop=()=>{running=false;cancelAnimationFrame(raf);};// ----- Sizing -----\n// `resize` mutates canvas.width/height, which clears the drawing\n// buffer — always follow it with a draw whenever the loop isn't\n// currently running, so the canvas never sits blank.\nconst resize=()=>{const dpr=Math.min(window.devicePixelRatio||1,2);const w=Math.max(1,Math.round(canvas.clientWidth*dpr));const h=Math.max(1,Math.round(canvas.clientHeight*dpr));if(canvas.width!==w||canvas.height!==h){canvas.width=w;canvas.height=h;gl.viewport(0,0,w,h);gl.uniform2f(uRes,w,h);renderGrain();}if(!running)drawFrame(0);};// While the browser window is being live-resized, freeze the loop\n// instead of letting mid-drag canvas.width/height changes blank the\n// canvas; only touch the buffer once resizing settles.\nlet isIntersecting=true;let resizeSettleTimer;const scheduleResize=()=>{if(resizeSettleTimer===undefined)stopLoop();else window.clearTimeout(resizeSettleTimer);resizeSettleTimer=window.setTimeout(()=>{resizeSettleTimer=undefined;resize();if(isIntersecting)startLoop();},150);};const ro=new ResizeObserver(scheduleResize);ro.observe(canvas);resize();const io=new IntersectionObserver(entries=>{isIntersecting=entries[0].isIntersecting;if(resizeSettleTimer!==undefined)return;if(isIntersecting)startLoop();else stopLoop();});io.observe(canvas);// Uniform setter exposed to the props effect — no GL rebuild on change.\nconst setParams=p=>{gl.useProgram(prog);try{// @ts-ignore — Canvas Color Space API, not yet in lib.dom types\ngl.drawingBufferColorSpace=p.useP3?\"display-p3\":\"srgb\";// @ts-ignore\ngl.unpackColorSpace=p.useP3?\"display-p3\":\"srgb\";}catch{}gl.uniform1f(u(\"u_scale\"),p.scale);gl.uniform1f(u(\"u_softness\"),p.softness);gl.uniform1f(u(\"u_intensity\"),p.intensity);gl.uniform1f(u(\"u_noise\"),p.noise);gl.uniform1f(u(\"u_speed\"),p.speed);gl.uniform4f(u(\"u_c1\"),p.color1.r,p.color1.g,p.color1.b,p.color1.a);gl.uniform4f(u(\"u_c2\"),p.color2.r,p.color2.g,p.color2.b,p.color2.a);gl.uniform4f(u(\"u_c3\"),p.color3.r,p.color3.g,p.color3.b,p.color3.a);gl.uniform4f(u(\"u_cBack\"),p.colorBack.r,p.colorBack.g,p.colorBack.b,p.colorBack.a);gl.uniform4f(u(\"u_noiseColorWave\"),p.noiseColorWave.r,p.noiseColorWave.g,p.noiseColorWave.b,p.noiseColorWave.a);gl.uniform4f(u(\"u_noiseColorBack\"),p.noiseColorBack.r,p.noiseColorBack.g,p.noiseColorBack.b,p.noiseColorBack.a);if(!running)drawFrame(0);};glStateRef.current={gl,setParams};return()=>{if(resizeSettleTimer!==undefined)window.clearTimeout(resizeSettleTimer);stopLoop();io.disconnect();ro.disconnect();glStateRef.current=null;gl.deleteTexture(grainTex);gl.deleteFramebuffer(fbo);gl.deleteBuffer(buf);gl.deleteProgram(prog);gl.deleteProgram(grainProg);const lose=gl.getExtension(\"WEBGL_lose_context\");if(lose)lose.loseContext();};},[]);// Prop changes only touch uniforms — the context and grain survive.\nuseEffect(()=>{glStateRef.current?.setParams({color1,color2,color3,colorBack,noiseColorWave,noiseColorBack,softness,intensity,noise,speed,scale,useP3});},[color1,color2,color3,colorBack,noiseColorWave,noiseColorBack,softness,intensity,noise,speed,scale,useP3]);return /*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{width:\"100%\",height:\"100%\",display:\"block\",...style}});}// Defaults reproduce the exact URL preset:\n//   colors=ffaa00,ff9100,ff4400   colorBack=ff6a00\n//   softness=0.7  intensity=0.15  noise=0.5  speed=1  scale=1\n// Hex bytes are sent as raw P3 floats so they read slightly more saturated\n// than the sRGB preview — same hue family, wider gamut.\nWaveGradient.defaultProps={color1:{r:1,g:.667,b:0,a:1},color2:{r:1,g:.569,b:0,a:1},color3:{r:1,g:.267,b:0,a:1},colorBack:{r:1,g:.416,b:0,a:1},noiseColorWave:{r:1,g:1,b:1,a:.15},noiseColorBack:{r:1,g:1,b:1,a:.1},softness:.7,intensity:.15,noise:.5,speed:1,scale:1,useP3:true};const rgbaControl=(title,def)=>({type:ControlType.Object,title,controls:{r:{type:ControlType.Number,min:0,max:1,step:.001,defaultValue:def.r},g:{type:ControlType.Number,min:0,max:1,step:.001,defaultValue:def.g},b:{type:ControlType.Number,min:0,max:1,step:.001,defaultValue:def.b},a:{type:ControlType.Number,min:0,max:1,step:.01,defaultValue:def.a}}});addPropertyControls(WaveGradient,{color1:rgbaControl(\"Color 1 (P3)\",{r:1,g:.667,b:0,a:1}),color2:rgbaControl(\"Color 2 (P3)\",{r:1,g:.569,b:0,a:1}),color3:rgbaControl(\"Color 3 (P3)\",{r:1,g:.267,b:0,a:1}),colorBack:rgbaControl(\"Background (P3)\",{r:1,g:.416,b:0,a:1}),noiseColorWave:rgbaControl(\"Noise Color — Wave\",{r:1,g:1,b:1,a:.15}),noiseColorBack:rgbaControl(\"Noise Color — Background\",{r:1,g:1,b:1,a:.1}),softness:{type:ControlType.Number,title:\"Softness\",min:0,max:1,step:.01,defaultValue:.7},intensity:{type:ControlType.Number,title:\"Intensity\",min:0,max:1,step:.01,defaultValue:.15},noise:{type:ControlType.Number,title:\"Noise\",min:0,max:1,step:.01,defaultValue:.5},speed:{type:ControlType.Number,title:\"Speed\",min:0,max:4,step:.05,defaultValue:1},scale:{type:ControlType.Number,title:\"Scale\",min:.1,max:4,step:.05,defaultValue:1},useP3:{type:ControlType.Boolean,title:\"P3 Wide Gamut\",defaultValue:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"WaveGradient\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any\",\"framerIntrinsicHeight\":\"600\",\"framerIntrinsicWidth\":\"1200\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./WaveGradient.map"],"mappings":"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"}