{"version":3,"file":"ViewportDistortion.D6PBn4Tt.mjs","names":["React.useState","React.useRef","React.useMemo","_Fragment","__esmMin","pe","init_npm_react_18_3_1","init_ssg_sandbox_shims","window","le","init_npm_react_dom_18_3_1","l","_e","Ha","p","c","init_jsx_runtime","ce","de","init_framer_CaDWdxiz","useIsStaticRenderer","ControlType","addPropertyControls","_define_property","key","obj","value","getSharedStore","scope","STORE_KEY","emitStoreChange","store","listener","setCanvasReady","ready","setAppearEnabled","enabled","setGlobalEffectEnabled","changed","forceFallback","record","markElementReady","id","isScrollableElement","overflowY","node","findDesktopScrollHost","clamp","max","min","cubicBezierEase","x","x1","curve","x2","y1","y2","sample","inv","t","a1","a2","derivativeX","i","currentX","slope","low","high","applyAppearEase","ease","customCurve","parseCubicBezierField","DEFAULT_HOVER_BEZIER","parts","part","applyHoverEase","createShader","shader","gl","type","source","info","createProgram","vertex","VERTEX_SHADER","fragment","FRAGMENT_SHADER","program","requireUniform","location","name","createGrid","positions","uvs","indices","y","rows","columns","u","v","topLeft","topRight","bottomLeft","bottomRight","parseCssColor","color","input","hex","values","rgba","context","normalized","compareDomOrder","a","b","relation","getViewportBreakpoint","width","PHONE_BREAKPOINT_MAX","TABLET_BREAKPOINT_MAX","isDistortionEnabledAtWidth","breakpoint","phoneEnabled","tabletEnabled","ViewportDistortion","isStaticRenderer","viewportWidth","setViewportWidth","effectEnabled","props","updateViewportWidth","canvasRef","ownerRef","engineRef","portalTarget","setPortalTarget","settings","coarsePointer","resolvePortalTarget","nextTarget","current","timer","canvas","owner","engine","ViewportWarpEngine","error","init_ViewportDistortion","nextSignature","host","rect","vv","viewport","now","target","state","durationSeconds","durationMs","linear","eased","cached","desktopViewportProjection","isScrolling","contentBottom","viewportHeight","body","scrollY","child","transform","maxTop","canvasCssHeight","desiredTop","overscan","viewportTopInCanvas","viewportBottomInCanvas","safety","cssWidth","visibleCssHeight","cssHeight","hardDprCap","requestedDpr","maxPixelBudget","area","budgetDpr","minDpr","dpr","pixelWidth","pixelHeight","elapsed","rawPixelsPerMs","smoothing","texture","entry","sourceType","src","video","markVideoReady","image","aliveIds","gpu","isTextureSource","desiredKey","event","isRootScroll","records","appearRecords","visibleAppearIds","marginY","marginX","clientRect","left","top","right","globalAge","itemStart","getAppearProgress","startTime","delayMs","anyAppearAnimating","needsContinuousVideo","rectLeft","rectTop","rectRight","rectBottom","documentBottom","canvasDocumentBottom","outsideVerticalRange","options","localDistortion","reveal","revealOffsetY","canHoverZoom","pointerX","pointerY","isHovered","hoverProgress","hoverScale","r","g","hoverAnimating","appearAnimating","portalHost","grid","positionBuffer","uvBuffer","indexBuffer"],"sources":["https:/framerusercontent.com/modules/YHkDrugrJ6zwPZRUuBir/I2CuLQRe2BJRcU4dBF4w/ViewportDistortion.js"],"sourcesContent":["function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import*as React from\"react\";import{createPortal}from\"react-dom\";import{addPropertyControls,ControlType,useIsStaticRenderer}from\"framer\";// IMPORTANT: Viewport Image and Viewport Distortion are shipped as two\n// independent Framer modules. Symbol.for() makes both modules resolve the same\n// registry in the browser realm, regardless of which component is loaded first.\nconst STORE_KEY=Symbol.for(\"bestlooker.viewport-distortion.store.v1\");function getSharedStore(){const scope=globalThis;if(!scope[STORE_KEY]){scope[STORE_KEY]={elements:new Map,listeners:new Set,canvasReady:false,appearEnabled:false,effectEnabled:true,owner:null,sequence:0};}// The global Symbol store can survive hot reloads in Framer. Backfill\n// fields added by newer versions so an older store instance cannot keep\n// fallbacks in a stale hidden state.\nif(typeof scope[STORE_KEY].effectEnabled!==\"boolean\"){scope[STORE_KEY].effectEnabled=true;}return scope[STORE_KEY];}const store=getSharedStore();function emitStoreChange(){store.listeners.forEach(listener=>listener());}function setCanvasReady(ready){if(store.canvasReady===ready)return;store.canvasReady=ready;emitStoreChange();}function setAppearEnabled(enabled){if(store.appearEnabled===enabled)return;store.appearEnabled=enabled;emitStoreChange();}function setGlobalEffectEnabled(enabled){const changed=store.effectEnabled!==enabled;store.effectEnabled=enabled;// CSS-variable fallback is deliberately redundant with the shared-store\n// subscription. It makes fallback visibility reliable even during Framer\n// hot reload / breakpoint transitions where React effects from the two\n// independent code modules can commit in different orders.\nconst forceFallback=enabled?\"0\":\"1\";store.elements.forEach(record=>{record.node.style.setProperty(\"--bestlooker-vd-force-fallback\",forceFallback);});if(changed)emitStoreChange();}function markElementReady(id,ready){const record=store.elements.get(id);if(!record||record.ready===ready)return;record.ready=ready;emitStoreChange();}function isScrollableElement(node){const style=window.getComputedStyle(node);const overflowY=style.overflowY;const canScrollY=overflowY===\"auto\"||overflowY===\"scroll\"||overflowY===\"overlay\";return canScrollY&&node.clientHeight>0&&node.scrollHeight>node.clientHeight+2;}function findDesktopScrollHost(){if(typeof document===\"undefined\")return null;for(const record of store.elements.values()){let node=record.node.parentElement;while(node&&node!==document.body&&node!==document.documentElement){if(isScrollableElement(node))return node;node=node.parentElement;}}return null;}function clamp(value,min,max){return Math.min(max,Math.max(min,value));}function cubicBezierEase(value,curve){const x=clamp(value,0,1);const x1=clamp(curve.x1,0,1);const x2=clamp(curve.x2,0,1);const y1=curve.y1;const y2=curve.y2;if(x<=0)return 0;if(x>=1)return 1;const sample=(t,a1,a2)=>{const inv=1-t;return 3*inv*inv*t*a1+3*inv*t*t*a2+t*t*t;};const derivativeX=t=>{const inv=1-t;return 3*inv*inv*x1+6*inv*t*(x2-x1)+3*t*t*(1-x2);};// CSS cubic-bezier uses time on the X axis. Solve x(t) = progress first,\n// then return y(t). Newton-Raphson is fast; bisection is the safe fallback.\nlet t=x;for(let i=0;i<6;i++){const currentX=sample(t,x1,x2)-x;const slope=derivativeX(t);if(Math.abs(currentX)<1e-5)break;if(Math.abs(slope)<1e-6)break;t=clamp(t-currentX/slope,0,1);}if(Math.abs(sample(t,x1,x2)-x)>1e-4){let low=0;let high=1;t=x;for(let i=0;i<12;i++){const currentX=sample(t,x1,x2);if(Math.abs(currentX-x)<1e-5)break;if(currentX<x)low=t;else high=t;t=(low+high)*.5;}}return sample(t,y1,y2);}function applyAppearEase(value,ease,customCurve){const t=clamp(value,0,1);switch(ease){case\"linear\":return t;case\"easeIn\":return t*t*t;case\"easeInOut\":return t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2;case\"custom\":return cubicBezierEase(t,customCurve);case\"easeOut\":default:return 1-Math.pow(1-t,3);}}const DEFAULT_HOVER_BEZIER={x1:.22,y1:1,x2:.36,y2:1};function parseCubicBezierField(value){if(!value)return DEFAULT_HOVER_BEZIER;const normalized=value.trim().replace(/^cubic-bezier\\s*\\(/i,\"\").replace(/\\)\\s*$/,\"\");const parts=normalized.split(/[\\s,]+/).filter(Boolean).map(Number);if(parts.length!==4||parts.some(part=>!Number.isFinite(part))){return DEFAULT_HOVER_BEZIER;}return{x1:clamp(parts[0],0,1),y1:parts[1],x2:clamp(parts[2],0,1),y2:parts[3]};}function applyHoverEase(value,ease,customCurve){const t=clamp(value,0,1);if(ease===\"linear\")return t;if(ease===\"easeInOut\"){return t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2;}if(ease===\"custom\")return cubicBezierEase(t,customCurve);return 1-Math.pow(1-t,3);}const VERTEX_SHADER=`\nprecision highp float;\n\nattribute vec2 aPosition;\nattribute vec2 aUv;\n\nuniform vec2 uViewport;\nuniform float uVisibleViewportHeight;\nuniform float uViewportTopInCanvas;\nuniform vec4 uRect;\nuniform float uStrength;\nuniform float uZoneStart;\nuniform float uCurve;\nuniform float uVelocity;\nuniform float uScrollBoost;\nuniform float uScrollLag;\nuniform float uVerticalBend;\nuniform float uEdgeReach;\nuniform float uEdgeFalloff;\nuniform float uBottomNarrowing;\nuniform float uBottomNarrowStart;\nuniform float uBottomNarrowSmoothness;\n\nvarying vec2 vUv;\nvarying vec2 vLocalPx;\nvarying float vViewportY;\nvarying float vEdgeMask;\nvarying float vDeformationZone;\nvarying float vXNormalized;\n\nfloat smootherstep01(float value) {\n    float t = clamp(value, 0.0, 1.0);\n    return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\n}\n\nvoid main() {\n    vec2 screen = uRect.xy + aPosition * uRect.zw;\n\n    // The WebGL canvas is document-anchored and slightly taller than the\n    // visible viewport. Distortion must still be evaluated in visible viewport\n    // coordinates, not in the full canvas coordinates.\n    float viewportHeight = max(uVisibleViewportHeight, 1.0);\n    float viewportHalfWidth = max(uViewport.x * 0.5, 1.0);\n    float visibleScreenY = screen.y - uViewportTopInCanvas;\n\n    float viewportY = clamp(visibleScreenY / viewportHeight, 0.0, 1.0);\n    float zone = smoothstep(uZoneStart, 1.0, viewportY);\n    zone = pow(zone, max(uCurve, 0.001));\n\n    // Global bottom taper. This is evaluated in viewport coordinates, so all\n    // ViewportImage meshes share one continuous deformation profile.\n    //\n    // The taper is SUBTRACTED from the original expansion instead of abruptly\n    // scaling it down. Because the subtractive curve starts with a zero slope,\n    // the side contour keeps expanding for a moment, rounds over naturally,\n    // and only then starts narrowing. This creates a smooth rounded apex.\n    float safeNarrowStart = clamp(uBottomNarrowStart, uZoneStart + 0.001, 0.995);\n    float taperT = clamp(\n        (viewportY - safeNarrowStart) / max(1.0 - safeNarrowStart, 0.001),\n        0.0,\n        1.0\n    );\n\n    // Narrow Smooth controls how gradually the taper gains influence.\n    // 0 = still smooth but more direct, 1 = a broader/rounder turn.\n    float smoothness = clamp(uBottomNarrowSmoothness, 0.0, 1.0);\n    float slowT = pow(taperT, mix(1.25, 2.6, smoothness));\n    float bottomTaper = smootherstep01(slowT);\n\n    // 0 = original curve. 1 = expansion returns to neutral at the viewport\n    // bottom. Values above 1 create a subtle inward pinch.\n    float deformationZone = zone - bottomTaper * uBottomNarrowing;\n\n    float xFromCenter = screen.x - viewportHalfWidth;\n    float xNormalized = xFromCenter / viewportHalfWidth;\n\n    // Edge-localized distortion. The center of the viewport stays untouched.\n    // uEdgeReach is the width of the active area measured from EACH side as a\n    // fraction of the full viewport width. The mask fades smoothly from 1 at\n    // the outer edge to 0 toward the interior.\n    float clampedViewportX = clamp(screen.x, 0.0, uViewport.x);\n    float distanceToEdge = min(clampedViewportX, uViewport.x - clampedViewportX);\n    float edgeReachPx = max(uEdgeReach * uViewport.x, 1.0);\n    float edgeProgress = clamp(1.0 - distanceToEdge / edgeReachPx, 0.0, 1.0);\n\n    // smoothstep removes any visible seam where the distortion zone ends; the\n    // extra power control lets the outer edge feel soft or more sculpted.\n    float edgeMask = smoothstep(0.0, 1.0, edgeProgress);\n    edgeMask = pow(edgeMask, max(uEdgeFalloff, 0.001));\n\n    // Horizontal expansion now exists only inside the left/right edge zones.\n    // Using the original center-relative displacement keeps the outer contour\n    // elegant while the inner area remains geometrically stable.\n    float amount = uStrength + abs(uVelocity) * uScrollBoost;\n    float horizontalShift = xFromCenter * deformationZone * amount * edgeMask;\n    screen.x += horizontalShift;\n\n    // Use the same global profile for the rest of the deformation so the side\n    // contour reads as one continuous curve instead of a per-element taper.\n    screen.y += deformationZone * edgeMask * uVelocity * uScrollLag;\n\n    // A subtle downward edge bend adds depth without affecting the center.\n    screen.y += deformationZone * edgeMask * abs(xNormalized) * uVerticalBend;\n\n    vec2 clip = vec2(\n        screen.x / uViewport.x * 2.0 - 1.0,\n        1.0 - screen.y / uViewport.y * 2.0\n    );\n\n    gl_Position = vec4(clip, 0.0, 1.0);\n    vUv = aUv;\n    vLocalPx = aPosition * uRect.zw;\n    vViewportY = viewportY;\n    vEdgeMask = edgeMask;\n    vDeformationZone = deformationZone;\n    vXNormalized = xNormalized;\n}\n`;const FRAGMENT_SHADER=`\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uUseTexture;\nuniform vec4 uColor;\nuniform vec2 uImageSize;\nuniform vec2 uBoxSize;\nuniform float uFit;\nuniform vec2 uPosition;\nuniform float uRadius;\nuniform float uOpacity;\nuniform float uHoverScale;\nuniform vec2 uHoverOrigin;\nuniform float uGlossEnabled;\nuniform float uGlossOpacity;\nuniform float uGlossStart;\nuniform float uGlossWidth;\nuniform float uGlossSoftness;\nuniform float uGlossTilt;\n\nvarying vec2 vUv;\nvarying vec2 vLocalPx;\nvarying float vViewportY;\nvarying float vEdgeMask;\nvarying float vDeformationZone;\nvarying float vXNormalized;\n\nfloat roundedRectMask(vec2 point, vec2 size, float radius) {\n    float safeRadius = min(radius, min(size.x, size.y) * 0.5);\n    vec2 halfSize = size * 0.5;\n    vec2 q = abs(point - halfSize) - (halfSize - vec2(safeRadius));\n    float distanceToEdge = length(max(q, 0.0)) + min(max(q.x, q.y), 0.0) - safeRadius;\n\n    // One CSS-pixel soft edge. The canvas itself is DPR-scaled.\n    return 1.0 - smoothstep(-0.75, 0.75, distanceToEdge);\n}\n\nfloat smootherstepFrag(float value) {\n    float t = clamp(value, 0.0, 1.0);\n    return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\n}\n\nfloat hash12(vec2 p) {\n    vec3 p3 = fract(vec3(p.xyx) * 0.1031);\n    p3 += dot(p3, p3.yzx + 33.33);\n    return fract((p3.x + p3.y) * p3.z);\n}\n\nvoid main() {\n    vec4 pixel;\n\n    if (uUseTexture > 0.5) {\n        vec2 box = max(uBoxSize, vec2(1.0));\n        vec2 image = max(uImageSize, vec2(1.0));\n        float boxAspect = box.x / box.y;\n        float imageAspect = image.x / image.y;\n\n        // Hover zoom changes only the sampled UVs, never the mesh/rectangle.\n        // This is equivalent to scaling an <img> inside an overflow:hidden\n        // parent: the outer contour and rounded corners remain fixed.\n        float safeHoverScale = max(uHoverScale, 1.0);\n        vec2 uv = uHoverOrigin + (vUv - uHoverOrigin) / safeHoverScale;\n\n        // 0 = cover, 1 = contain, 2 = fill\n        if (uFit < 0.5) {\n            vec2 visibleFraction = vec2(1.0);\n\n            if (imageAspect > boxAspect) {\n                visibleFraction.x = boxAspect / imageAspect;\n            } else {\n                visibleFraction.y = imageAspect / boxAspect;\n            }\n\n            uv = uv * visibleFraction + (vec2(1.0) - visibleFraction) * uPosition;\n        } else if (uFit < 1.5) {\n            vec2 displayedFraction = vec2(1.0);\n\n            if (imageAspect > boxAspect) {\n                displayedFraction.y = boxAspect / imageAspect;\n            } else {\n                displayedFraction.x = imageAspect / boxAspect;\n            }\n\n            vec2 offset = (vec2(1.0) - displayedFraction) * uPosition;\n            uv = (uv - offset) / displayedFraction;\n\n            if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n                discard;\n            }\n        }\n\n        pixel = texture2D(uTexture, uv);\n    } else {\n        pixel = uColor;\n    }\n\n    if (uGlossEnabled > 0.5) {\n        float glossStart = clamp(uGlossStart, 0.0, 0.96);\n        float glossSpan = clamp(uGlossWidth, 0.05, 0.55);\n        float glossSoft = clamp(uGlossSoftness, 0.01, 0.25);\n\n        float yShift = vXNormalized * uGlossTilt * 0.06;\n        float top = clamp(glossStart + yShift, 0.0, 0.98);\n        float bottom = clamp(top + glossSpan, top + 0.001, 1.0);\n        float span = max(bottom - top, 0.001);\n        float verticalPos = clamp((vViewportY - top) / span, 0.0, 1.0);\n\n        float shoulder = clamp(glossSoft / span, 0.03, 0.48);\n        float enter = smootherstepFrag(clamp(verticalPos / shoulder, 0.0, 1.0));\n        float leave = 1.0 - smootherstepFrag(clamp((verticalPos - (1.0 - shoulder)) / shoulder, 0.0, 1.0));\n        float envelope = enter * leave;\n\n        float bell = sin(verticalPos * 3.14159265359);\n        bell = pow(max(bell, 0.0), mix(2.2, 0.9, glossSoft / 0.25));\n        float verticalLight = mix(envelope, bell, 0.65);\n\n        float bendStrength = smootherstepFrag(clamp((max(vDeformationZone, 0.0) - 0.01) / 0.22, 0.0, 1.0));\n        float edgePresence = smootherstepFrag(clamp((vEdgeMask - 0.02) / 0.78, 0.0, 1.0));\n        float centerSoft = 0.82 + 0.18 * (1.0 - abs(vXNormalized));\n\n        float core = verticalLight * bendStrength * mix(0.42, 1.0, edgePresence) * centerSoft;\n        float aura = envelope * bendStrength * (0.18 + 0.24 * edgePresence);\n        float lighting = core + aura;\n\n        float glossAmount = clamp(lighting * uGlossOpacity, 0.0, 1.0);\n        float dither = (hash12(gl_FragCoord.xy) - 0.5) / 255.0;\n        glossAmount = clamp(glossAmount + dither * (0.55 + 0.45 * glossAmount), 0.0, 1.0);\n        pixel.rgb = pixel.rgb + (vec3(1.0) - pixel.rgb) * glossAmount;\n    }\n\n    float cornerMask = roundedRectMask(vLocalPx, uBoxSize, uRadius);\n    pixel.a *= cornerMask * uOpacity;\n\n    if (pixel.a <= 0.001) discard;\n    gl_FragColor = pixel;\n}\n`;function createShader(gl,type,source){const shader=gl.createShader(type);if(!shader)throw new Error(\"Could not create WebGL shader\");gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){const info=gl.getShaderInfoLog(shader)||\"Unknown shader error\";gl.deleteShader(shader);throw new Error(info);}return shader;}function createProgram(gl){const vertex=createShader(gl,gl.VERTEX_SHADER,VERTEX_SHADER);const fragment=createShader(gl,gl.FRAGMENT_SHADER,FRAGMENT_SHADER);const program=gl.createProgram();if(!program)throw new Error(\"Could not create WebGL program\");gl.attachShader(program,vertex);gl.attachShader(program,fragment);gl.linkProgram(program);gl.deleteShader(vertex);gl.deleteShader(fragment);if(!gl.getProgramParameter(program,gl.LINK_STATUS)){const info=gl.getProgramInfoLog(program)||\"Unknown program link error\";gl.deleteProgram(program);throw new Error(info);}return program;}function requireUniform(gl,program,name){const location=gl.getUniformLocation(program,name);if(!location)throw new Error(`Missing shader uniform: ${name}`);return location;}function createGrid(columns=12,rows=72){const positions=[];const uvs=[];const indices=[];for(let y=0;y<=rows;y++){for(let x=0;x<=columns;x++){const u=x/columns;const v=y/rows;positions.push(u,v);uvs.push(u,v);}}for(let y=0;y<rows;y++){for(let x=0;x<columns;x++){const topLeft=y*(columns+1)+x;const topRight=topLeft+1;const bottomLeft=topLeft+columns+1;const bottomRight=bottomLeft+1;indices.push(topLeft,bottomLeft,topRight,topRight,bottomLeft,bottomRight);}}return{positions:new Float32Array(positions),uvs:new Float32Array(uvs),indices:new Uint16Array(indices)};}function parseCssColor(input){const color=(input||\"#000000\").trim().toLowerCase();if(color.startsWith(\"#\")){const hex=color.slice(1);if(hex.length===3||hex.length===4){const values=hex.split(\"\").map(part=>parseInt(part+part,16));return[values[0]/255,values[1]/255,values[2]/255,(values[3]??255)/255];}if(hex.length===6||hex.length===8){return[parseInt(hex.slice(0,2),16)/255,parseInt(hex.slice(2,4),16)/255,parseInt(hex.slice(4,6),16)/255,(hex.length===8?parseInt(hex.slice(6,8),16):255)/255];}}const rgba=color.match(/rgba?\\(\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)(?:\\s*[,/]\\s*([\\d.]+))?\\s*\\)/);if(rgba){return[clamp(Number(rgba[1])/255,0,1),clamp(Number(rgba[2])/255,0,1),clamp(Number(rgba[3])/255,0,1),clamp(rgba[4]===undefined?1:Number(rgba[4]),0,1)];}// Framer's color picker normally returns hex/rgb. This browser fallback also\n// lets named colors and hsl() work without shipping a color parser.\nif(typeof document!==\"undefined\"){const canvas=document.createElement(\"canvas\");const context=canvas.getContext(\"2d\");if(context){context.fillStyle=\"#000000\";context.fillStyle=color;const normalized=context.fillStyle;if(normalized!==color)return parseCssColor(normalized);}}return[0,0,0,1];}function compareDomOrder(a,b){if(a.options.renderOrder!==b.options.renderOrder){return a.options.renderOrder-b.options.renderOrder;}if(a.node===b.node)return a.sequence-b.sequence;const relation=a.node.compareDocumentPosition(b.node);if(relation&Node.DOCUMENT_POSITION_FOLLOWING)return-1;if(relation&Node.DOCUMENT_POSITION_PRECEDING)return 1;return a.sequence-b.sequence;}class ViewportWarpEngine{updateSettings(settings){const nextSignature=this.getAppearSignature(settings);if(nextSignature!==this.appearSignature){this.appearStartTime=null;this.appearItemStartTimes.clear();this.appearSignature=nextSignature;}this.settings=settings;}getAppearSignature(settings){return[settings.appearEnabled,settings.appearDistance,settings.appearDuration,settings.appearDelay,settings.appearEase,settings.customEaseX1,settings.customEaseY1,settings.customEaseX2,settings.customEaseY2].join(\"|\");}getViewportSnapshot(){const host=this.desktopScrollHost;if(host){const rect=host.getBoundingClientRect();return{width:Math.max(1,host.clientWidth||rect.width||1),height:Math.max(1,host.clientHeight||rect.height||1),offsetLeft:rect.left+host.clientLeft,offsetTop:rect.top+host.clientTop,pageLeft:host.scrollLeft,pageTop:host.scrollTop};}const vv=this.visualViewport;const width=Math.max(1,vv?.width||window.innerWidth||1);const height=Math.max(1,vv?.height||window.innerHeight||1);const pageLeft=window.scrollX||window.pageXOffset||0;const pageTop=window.scrollY||window.pageYOffset||0;return{width,height,offsetLeft:0,offsetTop:0,pageLeft,pageTop};}resetScrollState(now=performance.now()){const viewport=this.getViewportSnapshot();this.lastScrollY=viewport.pageTop;this.lastTime=now;this.velocity=0;this.velocityFrameScale=1;}getHoverProgress(id,hovered,now){const target=hovered?1:0;let state=this.hoverStates.get(id);if(!state){state={value:0,from:0,to:target,startTime:now};this.hoverStates.set(id,state);}if(state.to!==target){state.from=state.value;state.to=target;state.startTime=now;}const durationSeconds=target>state.from?this.settings.hoverZoomIn:this.settings.hoverZoomOut;const durationMs=Math.max(1,durationSeconds*1e3);const linear=clamp((now-state.startTime)/durationMs,0,1);const eased=applyHoverEase(linear,this.settings.hoverZoomEase,this.settings.hoverCustomEase);state.value=state.from+(state.to-state.from)*eased;if(linear>=1){state.value=state.to;state.from=state.to;}return state.value;}getGeometry(record,viewport,now,isScrolling){let cached=this.geometryCache.get(record.id);// iOS/touch: during active scroll keep stable document-space geometry\n// because Safari may return a client rect behind the compositor.\n//\n// Desktop/Framer Live Preview: nested overflow scrolling does NOT move\n// window.scrollY, so the only reliable coordinate is the fresh client\n// rect. Re-measure while that nested scroller is active. Normal desktop\n// window scrolling may also safely refresh rects during the scroll.\nconst desktopViewportProjection=!this.coarsePointer;const shouldMeasure=!cached||desktopViewportProjection&&(isScrolling||this.layoutDirty||now-cached.measuredAt>160)||!desktopViewportProjection&&!isScrolling&&(this.layoutDirty||now-cached.measuredAt>420);if(shouldMeasure){const rect=record.node.getBoundingClientRect();// getBoundingClientRect() is relative to the layout viewport. The\n// visual viewport's page position includes offsetTop/offsetLeft, so\n// subtract those offsets when reconstructing stable document coords.\n// For normal document scrolling this reconstructs stable document\n// coordinates. In Framer's nested-scroll preview pageTop stays 0,\n// so these values intentionally become viewport-relative coordinates;\n// that is exactly the coordinate space of our absolute body canvas.\ncached={documentLeft:rect.left-viewport.offsetLeft+viewport.pageLeft,documentTop:rect.top-viewport.offsetTop+viewport.pageTop,width:rect.width,height:rect.height,measuredAt:now};this.geometryCache.set(record.id,cached);}return{left:cached.documentLeft-viewport.pageLeft,top:cached.documentTop-viewport.pageTop,documentLeft:cached.documentLeft,documentTop:cached.documentTop,width:cached.width,height:cached.height};}refreshDocumentContentHeight(viewportHeight){let contentBottom=Math.max(viewportHeight,document.documentElement.clientHeight||0);// Ignore our own absolute overlay when estimating page height. This\n// prevents the canvas from extending the scroll range near the bottom.\nconst body=document.body;if(body){const scrollY=window.scrollY||window.pageYOffset||0;for(const child of Array.from(body.children)){if(child===this.canvas)continue;const rect=child.getBoundingClientRect();if(!Number.isFinite(rect.bottom))continue;contentBottom=Math.max(contentBottom,rect.bottom+scrollY);}}this.documentContentHeight=Math.max(viewportHeight,contentBottom);}updateCanvasAnchor(viewport,canvasCssHeight,overscan,isScrolling){if(!this.coarsePointer){// Desktop stays absolute. In Framer Live Preview this canvas can be\n// portaled into the actual nested scroll surface, so the same\n// absolute/compositor model works at any scroll depth.\nthis.canvasAnchorTop=viewport.pageTop;this.canvasAnchorInitialized=true;if(this.canvas.style.top!==\"0px\")this.canvas.style.top=\"0px\";if(this.canvas.style.left!==\"0px\")this.canvas.style.left=\"0px\";const transform=`translate3d(${viewport.pageLeft}px, ${viewport.pageTop}px, 0)`;if(this.canvas.style.transform!==transform){this.canvas.style.transform=transform;}return;}// iOS/coarse-pointer keeps the compositor-anchored document strategy.\nif(this.canvas.style.transform!==\"translate3d(0px, 0px, 0px)\"){this.canvas.style.transform=\"translate3d(0px, 0px, 0px)\";}if(!this.documentContentHeight||!isScrolling&&this.layoutDirty){this.refreshDocumentContentHeight(viewport.height);}const maxTop=Math.max(0,this.documentContentHeight-canvasCssHeight);const desiredTop=clamp(viewport.pageTop-overscan,0,maxTop);if(!this.canvasAnchorInitialized){this.canvasAnchorTop=desiredTop;this.canvasAnchorInitialized=true;this.canvas.style.top=`${desiredTop}px`;return;}// The canvas stays in document space and is only rebased when the\n// viewport approaches its overscan edge. Between rebases, Safari's\n// compositor scrolls the DOM and this canvas together with no JS sync.\nconst viewportTopInCanvas=viewport.pageTop-this.canvasAnchorTop;const viewportBottomInCanvas=viewportTopInCanvas+viewport.height;const safety=Math.max(18,overscan*.34);const needsReanchor=viewportTopInCanvas<safety||viewportBottomInCanvas>canvasCssHeight-safety;if(needsReanchor&&Math.abs(desiredTop-this.canvasAnchorTop)>.5){this.canvasAnchorTop=desiredTop;this.canvas.style.top=`${desiredTop}px`;}}resizeCanvas(viewport){const cssWidth=viewport.width;const visibleCssHeight=viewport.height;const overscan=this.coarsePointer?clamp(visibleCssHeight*.16,96,150):0;const cssHeight=this.coarsePointer?visibleCssHeight+overscan*2:visibleCssHeight;// Mobile gets a slightly lower backing resolution. This materially\n// reduces fill-rate/thermal pressure while remaining sharp because the\n// effect is continuously moving and the source textures stay full-res.\nconst hardDprCap=this.coarsePointer?1.15:1.35;const requestedDpr=Math.min(window.devicePixelRatio||1,this.settings.maxDpr,hardDprCap);const maxPixelBudget=this.coarsePointer?18e5:26e5;const area=cssWidth*cssHeight;const budgetDpr=Math.sqrt(maxPixelBudget/Math.max(1,area));const minDpr=this.coarsePointer?.7:.8;const dpr=Math.max(minDpr,Math.min(requestedDpr,budgetDpr));const pixelWidth=Math.max(1,Math.round(cssWidth*dpr));const pixelHeight=Math.max(1,Math.round(cssHeight*dpr));if(this.canvas.width!==pixelWidth||this.canvas.height!==pixelHeight){this.canvas.width=pixelWidth;this.canvas.height=pixelHeight;}// Avoid 100vh/inset anchoring on iOS 26. The canvas is pinned only by\n// top/left and gets explicit visual-viewport dimensions.\nif(Math.abs(this.lastCssWidth-cssWidth)>.25||Math.abs(this.lastCssHeight-cssHeight)>.25){this.canvas.style.width=`${cssWidth}px`;this.canvas.style.height=`${cssHeight}px`;this.lastCssWidth=cssWidth;this.lastCssHeight=cssHeight;}this.gl.viewport(0,0,pixelWidth,pixelHeight);return{cssWidth,cssHeight:visibleCssHeight,canvasCssHeight:cssHeight,overscan};}updateVelocity(now,viewport){const scrollY=viewport.pageTop;const elapsed=now-this.lastTime;// requestAnimationFrame is paused/throttled in hidden or background\n// tabs. Never interpret the accumulated scroll delta after a long gap\n// as one huge scroll frame; that is what caused the catch-up jump.\nif(!Number.isFinite(elapsed)||elapsed<=0||elapsed>120||document.hidden){this.lastScrollY=scrollY;this.lastTime=now;this.velocity=0;this.velocityFrameScale=1;return;}// If the device cannot sustain the frame rate, automatically reduce the\n// intentional velocity-based lag instead of letting it amplify jank.\nthis.velocityFrameScale=clamp(20/elapsed,.42,1);const rawPixelsPerMs=(scrollY-this.lastScrollY)/elapsed;const target=this.prefersReducedMotion?0:clamp(rawPixelsPerMs/1.8,-1,1);// Touch scrolling is compositor-driven on iOS. A smoothed velocity\n// tail makes the shader keep moving after the DOM has already reached\n// its new position, which reads as \"catching up\". On coarse pointers\n// use the current velocity directly; desktop keeps the softer inertia.\nif(this.coarsePointer){this.velocity=target;this.velocityFrameScale=1;}else{const smoothingDt=Math.min(elapsed,50);const attackMs=45;const releaseMs=105;const smoothing=1-Math.exp(-smoothingDt/(Math.abs(target)>Math.abs(this.velocity)?attackMs:releaseMs));this.velocity+=(target-this.velocity)*smoothing;if(Math.abs(target)<.002&&Math.abs(this.velocity)<.002){this.velocity=0;}}this.lastScrollY=scrollY;this.lastTime=now;}createTexture(src,sourceType){const gl=this.gl;const texture=gl.createTexture();if(!texture)throw new Error(\"Could not create WebGL texture\");gl.bindTexture(gl.TEXTURE_2D,texture);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.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,1,1,0,gl.RGBA,gl.UNSIGNED_BYTE,new Uint8Array([0,0,0,0]));const key=`${sourceType}:${src}`;const entry={key,sourceType,src,texture,image:null,video:null,width:1,height:1,ready:false,failed:false,refs:0,lastVideoTime:-1};if(sourceType===\"video\"){const video=document.createElement(\"video\");entry.video=video;video.muted=true;video.defaultMuted=true;video.loop=true;video.autoplay=true;video.playsInline=true;video.preload=\"auto\";video.setAttribute(\"playsinline\",\"\");video.setAttribute(\"webkit-playsinline\",\"\");if(!src.startsWith(\"data:\")&&!src.startsWith(\"blob:\")){video.crossOrigin=\"anonymous\";}const markVideoReady=()=>{if(this.disposed)return;if(video.readyState<2)return;entry.width=video.videoWidth||1;entry.height=video.videoHeight||1;entry.ready=entry.width>1&&entry.height>1;entry.failed=false;this.syncReadyFlags();this.wakeRenderer();const playPromise=video.play();playPromise?.catch(()=>{// Muted inline video normally autoplays. If a browser still\n// blocks playback, the DOM fallback remains available until\n// the first video frame can be uploaded to WebGL.\n});};const markVideoFailed=()=>{entry.failed=true;entry.ready=false;this.syncReadyFlags();this.wakeRenderer();};video.addEventListener(\"loadeddata\",markVideoReady);video.addEventListener(\"canplay\",markVideoReady);video.addEventListener(\"error\",markVideoFailed);video.src=src;video.load();video.play()?.catch(()=>{});return entry;}const image=new Image;entry.image=image;image.decoding=\"async\";// The WebGL texture is the visible layer for Appear participants, so\n// avoid letting its request sit behind less important page resources.\n// Browsers that do not support fetchPriority simply ignore it.\ntry{image.fetchPriority=\"high\";}catch{}if(!src.startsWith(\"data:\")&&!src.startsWith(\"blob:\")){image.crossOrigin=\"anonymous\";}image.onload=()=>{if(this.disposed)return;try{gl.bindTexture(gl.TEXTURE_2D,texture);gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,image);entry.width=image.naturalWidth||image.width||1;entry.height=image.naturalHeight||image.height||1;entry.ready=true;entry.failed=false;this.syncReadyFlags();this.wakeRenderer();}catch(error){console.warn(\"ViewportWarp: texture upload failed\",error);entry.failed=true;entry.ready=false;this.syncReadyFlags();this.wakeRenderer();}};image.onerror=()=>{entry.failed=true;entry.ready=false;this.syncReadyFlags();this.wakeRenderer();};image.src=src;return entry;}acquireTexture(src,sourceType){const key=`${sourceType}:${src}`;let entry=this.textures.get(key);if(!entry){entry=this.createTexture(src,sourceType);this.textures.set(key,entry);}entry.refs+=1;return entry;}releaseTexture(entry){if(!entry)return;entry.refs-=1;if(entry.refs<=0){if(entry.image){entry.image.onload=null;entry.image.onerror=null;}if(entry.video){entry.video.pause();entry.video.removeAttribute(\"src\");entry.video.load();}this.gl.deleteTexture(entry.texture);this.textures.delete(entry.key);}}updateVideoTexture(entry){if(entry.sourceType!==\"video\"||!entry.video||!entry.ready)return;const video=entry.video;if(video.readyState<2||video.videoWidth<=0||video.videoHeight<=0){return;}// Avoid uploading the same frame on every RAF when the video frame has\n// not advanced yet.\nif(video.currentTime===entry.lastVideoTime)return;try{const gl=this.gl;gl.bindTexture(gl.TEXTURE_2D,entry.texture);gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,video);entry.width=video.videoWidth||entry.width;entry.height=video.videoHeight||entry.height;entry.lastVideoTime=video.currentTime;}catch(error){// Most commonly this means the remote video server does not allow\n// CORS texture access. Keep the DOM fallback visible in that case.\nentry.failed=true;entry.ready=false;this.syncReadyFlags();console.warn(\"ViewportWarp: video texture upload failed\",error);}}syncGpuRecords(){const aliveIds=new Set(store.elements.keys());for(const[id,gpu]of this.gpuRecords){if(!aliveIds.has(id)){this.releaseTexture(gpu.texture);this.gpuRecords.delete(id);this.hoverStates.delete(id);this.geometryCache.delete(id);this.appearItemStartTimes.delete(id);}}for(const record of store.elements.values()){const isTextureSource=record.options.sourceType===\"image\"||record.options.sourceType===\"video\";const desiredKey=isTextureSource?`${record.options.sourceType}:${record.options.src}`:\"\";const current=this.gpuRecords.get(record.id);if(!current){const texture=isTextureSource&&record.options.src?this.acquireTexture(record.options.src,record.options.sourceType):null;this.gpuRecords.set(record.id,{sourceKey:desiredKey,texture});continue;}if(current.sourceKey!==desiredKey){this.releaseTexture(current.texture);current.sourceKey=desiredKey;current.texture=isTextureSource&&record.options.src?this.acquireTexture(record.options.src,record.options.sourceType):null;}}}syncReadyFlags(){for(const record of store.elements.values()){if(record.options.sourceType===\"color\"){markElementReady(record.id,true);continue;}const gpu=this.gpuRecords.get(record.id);markElementReady(record.id,Boolean(gpu?.texture?.ready));}}bindGeometry(){const gl=this.gl;gl.bindBuffer(gl.ARRAY_BUFFER,this.positionBuffer);gl.enableVertexAttribArray(this.positionLocation);gl.vertexAttribPointer(this.positionLocation,2,gl.FLOAT,false,0,0);gl.bindBuffer(gl.ARRAY_BUFFER,this.uvBuffer);gl.enableVertexAttribArray(this.uvLocation);gl.vertexAttribPointer(this.uvLocation,2,gl.FLOAT,false,0,0);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,this.indexBuffer);}dispose(){if(this.disposed)return;this.disposed=true;cancelAnimationFrame(this.animationFrame);this.animationFrame=0;if(this.idleTimer){window.clearTimeout(this.idleTimer);this.idleTimer=0;}this.mediaQuery?.removeEventListener?.(\"change\",this.handleMotionPreference);if(this.desktopScrollHost&&this.restoreScrollHostPosition!==null){this.desktopScrollHost.style.position=this.restoreScrollHostPosition;this.restoreScrollHostPosition=null;}window.removeEventListener(\"pointermove\",this.handlePointerMove);window.removeEventListener(\"pointerleave\",this.handlePointerLeave);window.removeEventListener(\"blur\",this.handlePointerLeave);window.removeEventListener(\"scroll\",this.handleScrollActivity);document.removeEventListener(\"scroll\",this.handleCapturedScrollActivity,true);if(this.nestedScrollResetTimer){window.clearTimeout(this.nestedScrollResetTimer);this.nestedScrollResetTimer=0;}window.removeEventListener(\"resize\",this.handleViewportResize);window.removeEventListener(\"pageshow\",this.handlePageShow);document.removeEventListener(\"visibilitychange\",this.handleVisibilityChange);this.visualViewport?.removeEventListener(\"resize\",this.handleViewportResize);this.hoverStates.clear();this.appearItemStartTimes.clear();this.geometryCache.clear();for(const gpu of this.gpuRecords.values()){this.releaseTexture(gpu.texture);}this.gpuRecords.clear();this.textures.clear();const gl=this.gl;gl.deleteBuffer(this.positionBuffer);gl.deleteBuffer(this.uvBuffer);gl.deleteBuffer(this.indexBuffer);gl.deleteProgram(this.program);}constructor(canvas,settings,portalHost=null){_define_property(this,\"canvas\",void 0);_define_property(this,\"gl\",void 0);_define_property(this,\"program\",void 0);_define_property(this,\"uniforms\",void 0);_define_property(this,\"positionBuffer\",void 0);_define_property(this,\"uvBuffer\",void 0);_define_property(this,\"indexBuffer\",void 0);_define_property(this,\"indexCount\",void 0);_define_property(this,\"positionLocation\",void 0);_define_property(this,\"uvLocation\",void 0);_define_property(this,\"settings\",void 0);_define_property(this,\"animationFrame\",0);_define_property(this,\"idleTimer\",0);_define_property(this,\"lastActivityTime\",performance.now());_define_property(this,\"disposed\",false);_define_property(this,\"textures\",new Map);_define_property(this,\"gpuRecords\",new Map);_define_property(this,\"lastScrollY\",0);_define_property(this,\"lastTime\",performance.now());_define_property(this,\"velocity\",0);_define_property(this,\"velocityFrameScale\",1);_define_property(this,\"coarsePointer\",false);_define_property(this,\"geometryCache\",new Map);_define_property(this,\"lastScrollActivityTime\",-Infinity);_define_property(this,\"layoutDirty\",true);_define_property(this,\"visualViewport\",null);_define_property(this,\"desktopScrollHost\",null);_define_property(this,\"restoreScrollHostPosition\",null);_define_property(this,\"lastCssWidth\",0);_define_property(this,\"lastCssHeight\",0);_define_property(this,\"canvasAnchorTop\",0);_define_property(this,\"documentContentHeight\",0);_define_property(this,\"canvasAnchorInitialized\",false);_define_property(this,\"nestedScrollActive\",false);_define_property(this,\"nestedScrollResetTimer\",0);_define_property(this,\"prefersReducedMotion\",false);_define_property(this,\"mediaQuery\",null);_define_property(this,\"appearStartTime\",null);_define_property(this,\"appearItemStartTimes\",new Map);_define_property(this,\"appearSignature\",\"\");_define_property(this,\"pointerX\",-1e5);_define_property(this,\"pointerY\",-1e5);_define_property(this,\"pointerActive\",false);_define_property(this,\"hoverStates\",new Map);_define_property(this,\"wakeRenderer\",()=>{if(this.disposed||document.hidden)return;this.lastActivityTime=performance.now();if(this.idleTimer){window.clearTimeout(this.idleTimer);this.idleTimer=0;}if(!this.animationFrame){this.animationFrame=requestAnimationFrame(this.render);}});_define_property(this,\"handleScrollActivity\",()=>{// Window/document scrolling. On touch devices we keep using stable\n// document-space geometry so Safari's compositor can move the absolute\n// canvas together with the page without waiting for fresh DOM reads.\nthis.lastScrollActivityTime=performance.now();this.wakeRenderer();});_define_property(this,\"handleCapturedScrollActivity\",event=>{// Framer Live Preview often scrolls a nested overflow element while\n// window.scrollY stays at zero. In that case an absolute canvas at the\n// document root is still visible, but cached document coordinates would\n// never change. Track that mode explicitly and use fresh client rects on\n// desktop while the nested scroller is moving.\nconst target=event.target;const isRootScroll=target===document||target===document.documentElement||target===document.body;if(!this.coarsePointer){// Framer Preview may surface an internal scroll as document/body or\n// as an element scroll depending on preview mode. Always invalidate\n// desktop geometry; getBoundingClientRect() is the authoritative\n// viewport-space position in both cases.\nthis.layoutDirty=true;if(!isRootScroll){this.nestedScrollActive=true;if(this.nestedScrollResetTimer){window.clearTimeout(this.nestedScrollResetTimer);}this.nestedScrollResetTimer=window.setTimeout(()=>{this.nestedScrollActive=false;this.layoutDirty=true;this.wakeRenderer();},180);}}this.lastScrollActivityTime=performance.now();this.wakeRenderer();});_define_property(this,\"handleVisibilityChange\",()=>{if(document.hidden){cancelAnimationFrame(this.animationFrame);this.animationFrame=0;this.velocity=0;this.velocityFrameScale=1;return;}this.resetScrollState(performance.now());this.layoutDirty=true;this.wakeRenderer();});_define_property(this,\"handlePageShow\",()=>{this.resetScrollState(performance.now());this.layoutDirty=true;this.wakeRenderer();});_define_property(this,\"handleViewportResize\",()=>{// Browser chrome changes can resize the visual viewport during a touch\n// scroll. Mark geometry dirty, but defer actual DOM measurement until\n// scrolling has settled so we never swap in a stale layout rect.\nthis.layoutDirty=true;const now=performance.now();if(now-this.lastTime>140)this.resetScrollState(now);this.wakeRenderer();});_define_property(this,\"handleMotionPreference\",event=>{this.prefersReducedMotion=event.matches;});_define_property(this,\"handlePointerMove\",event=>{// Hover is mouse/pen only. Touch movement should not leave an image\n// artificially stuck in its zoomed state.\nif(event.pointerType===\"touch\"){this.pointerActive=false;return;}this.pointerX=event.clientX;this.pointerY=event.clientY;this.pointerActive=true;this.wakeRenderer();});_define_property(this,\"handlePointerLeave\",()=>{this.pointerActive=false;this.pointerX=-1e5;this.pointerY=-1e5;this.wakeRenderer();});_define_property(this,\"render\",now=>{this.animationFrame=0;if(this.disposed)return;if(document.hidden){this.animationFrame=0;return;}const gl=this.gl;const viewport=this.getViewportSnapshot();const isScrolling=now-this.lastScrollActivityTime<140;const{cssWidth,cssHeight,canvasCssHeight,overscan}=this.resizeCanvas(viewport);this.updateCanvasAnchor(viewport,canvasCssHeight,overscan,isScrolling);this.updateVelocity(now,viewport);this.syncGpuRecords();this.syncReadyFlags();gl.clear(gl.COLOR_BUFFER_BIT);gl.useProgram(this.program);this.bindGeometry();gl.uniform2f(this.uniforms.viewport,cssWidth,canvasCssHeight);gl.uniform1f(this.uniforms.visibleViewportHeight,cssHeight);gl.uniform1f(this.uniforms.viewportTopInCanvas,this.coarsePointer?viewport.pageTop-this.canvasAnchorTop:0);gl.uniform1f(this.uniforms.zoneStart,clamp(this.settings.zoneStart,0,.98));gl.uniform1f(this.uniforms.curve,Math.max(.01,this.settings.curve));gl.uniform1f(this.uniforms.velocity,this.velocity*this.velocityFrameScale);gl.uniform1f(this.uniforms.edgeReach,clamp(this.settings.edgeReach,.02,.49));gl.uniform1f(this.uniforms.edgeFalloff,Math.max(.05,this.settings.edgeFalloff));gl.uniform1f(this.uniforms.bottomNarrowing,clamp(this.settings.bottomNarrowing,0,1.5));gl.uniform1f(this.uniforms.bottomNarrowStart,clamp(this.settings.bottomNarrowStart,this.settings.zoneStart+.001,.995));gl.uniform1f(this.uniforms.bottomNarrowSmoothness,clamp(this.settings.bottomNarrowSmoothness,0,1));gl.uniform1f(this.uniforms.glossEnabled,this.settings.glossEnabled?1:0);gl.uniform1f(this.uniforms.glossOpacity,clamp(this.settings.glossOpacity,0,1));gl.uniform1f(this.uniforms.glossStart,clamp(this.settings.glossStart,0,.98));gl.uniform1f(this.uniforms.glossWidth,Math.max(.05,this.settings.glossWidth));gl.uniform1f(this.uniforms.glossSoftness,Math.max(.01,this.settings.glossSoftness));gl.uniform1f(this.uniforms.glossTilt,clamp(this.settings.glossTilt,-1,1));gl.uniform1i(this.uniforms.texture,0);const records=Array.from(store.elements.values()).filter(record=>record.options.enabled&&record.node.isConnected).sort(compareDomOrder);// Low-latency Appear:\n// The old version waited for EVERY Appear item on the whole page before\n// starting the first reveal. On a cold load, one slow/below-the-fold\n// texture could therefore delay all visible WebGL images.\n//\n// Start as soon as the first currently-visible Appear texture is ready.\n// Items that become ready within a short join window share the same\n// clock; a genuinely late visible item gets its own reveal instead of\n// blocking the rest of the page.\nconst appearRecords=records.filter(record=>record.options.appear);const visibleAppearIds=new Set;if(this.settings.appearEnabled&&appearRecords.length>0){const marginY=viewport.height*.25;const marginX=viewport.width*.2;for(const record of appearRecords){const clientRect=record.node.getBoundingClientRect();const left=clientRect.left-viewport.offsetLeft;const top=clientRect.top-viewport.offsetTop;const right=left+clientRect.width;const bottom=top+clientRect.height;if(bottom>=-marginY&&top<=viewport.height+marginY&&right>=-marginX&&left<=viewport.width+marginX){visibleAppearIds.add(record.id);}}if(this.appearStartTime===null){const firstVisibleReady=appearRecords.some(record=>visibleAppearIds.has(record.id)&&record.ready);if(firstVisibleReady){this.appearStartTime=now;}}if(this.appearStartTime!==null){const joinWindowMs=120;const globalAge=now-this.appearStartTime;for(const record of appearRecords){if(!record.ready||this.appearItemStartTimes.has(record.id)){continue;}// Visible textures that miss the small join window animate\n// from their own ready moment. Offscreen textures inherit\n// the original global clock so they are already revealed\n// when the user eventually scrolls to them.\nconst isVisible=visibleAppearIds.has(record.id);const itemStart=isVisible&&globalAge>joinWindowMs?now:this.appearStartTime;this.appearItemStartTimes.set(record.id,itemStart);}}}else{this.appearStartTime=null;this.appearItemStartTimes.clear();}const getAppearProgress=record=>{if(!this.settings.appearEnabled||!record.options.appear)return 1;if(!record.ready||this.appearStartTime===null)return 0;const startTime=this.appearItemStartTimes.get(record.id)??this.appearStartTime;const delayMs=Math.max(0,this.settings.appearDelay)*1e3;const durationMs=Math.max(.001,this.settings.appearDuration)*1e3;const elapsed=now-startTime-delayMs;const linearProgress=clamp(elapsed/durationMs,0,1);return applyAppearEase(linearProgress,this.settings.appearEase,{x1:this.settings.customEaseX1,y1:this.settings.customEaseY1,x2:this.settings.customEaseX2,y2:this.settings.customEaseY2});};let anyAppearAnimating=false;let needsContinuousVideo=false;for(const record of records){const rect=this.getGeometry(record,viewport,now,isScrolling);const rectLeft=rect.left;const rectTop=rect.top;const rectRight=rectLeft+rect.width;const rectBottom=rectTop+rect.height;const documentBottom=rect.documentTop+rect.height;const canvasDocumentBottom=this.canvasAnchorTop+canvasCssHeight;const outsideVerticalRange=!this.coarsePointer?rectBottom<-160||rectTop>cssHeight+160:documentBottom<this.canvasAnchorTop-120||rect.documentTop>canvasDocumentBottom+120;if(rect.width<=0||rect.height<=0||outsideVerticalRange||rectRight<-200||rectLeft>cssWidth+200){continue;}const options=record.options;const localDistortion=Math.max(0,options.distortion);const reveal=getAppearProgress(record);if(this.settings.appearEnabled&&options.appear&&record.ready&&reveal<.999){anyAppearAnimating=true;}const revealOffsetY=this.settings.appearEnabled&&options.appear&&!this.prefersReducedMotion?(1-reveal)*this.settings.appearDistance:0;gl.uniform4f(this.uniforms.rect,!this.coarsePointer?rect.left:rect.documentLeft-viewport.pageLeft,!this.coarsePointer?rect.top+revealOffsetY:rect.documentTop-this.canvasAnchorTop+revealOffsetY,rect.width,rect.height);gl.uniform1f(this.uniforms.strength,this.settings.strength*localDistortion);gl.uniform1f(this.uniforms.scrollBoost,this.settings.scrollBoost*localDistortion);gl.uniform1f(this.uniforms.scrollLag,(this.coarsePointer?0:this.settings.scrollLag)*localDistortion);gl.uniform1f(this.uniforms.verticalBend,this.settings.verticalBend*localDistortion);gl.uniform2f(this.uniforms.boxSize,rect.width,rect.height);gl.uniform2f(this.uniforms.position,clamp(options.positionX,0,1),clamp(options.positionY,0,1));gl.uniform1f(this.uniforms.radius,Math.max(0,options.radius));gl.uniform1f(this.uniforms.opacity,clamp(options.opacity,0,1)*reveal);const canHoverZoom=this.settings.hoverZoomEnabled&&options.hoverZoom===true&&!this.prefersReducedMotion&&(options.sourceType===\"image\"||options.sourceType===\"video\");const pointerX=this.pointerX-viewport.offsetLeft;const pointerY=this.pointerY-viewport.offsetTop;const isHovered=canHoverZoom&&this.pointerActive&&pointerX>=rectLeft&&pointerX<=rectRight&&pointerY>=rectTop&&pointerY<=rectBottom;const hoverProgress=this.getHoverProgress(record.id,Boolean(isHovered),now);const hoverScale=1+clamp(this.settings.hoverZoomAmount,0,.5)*hoverProgress;gl.uniform1f(this.uniforms.hoverScale,hoverScale);gl.uniform2f(this.uniforms.hoverOrigin,clamp(this.settings.hoverOriginX,0,1),clamp(this.settings.hoverOriginY,0,1));gl.uniform1f(this.uniforms.fit,options.fit===\"cover\"?0:options.fit===\"contain\"?1:2);if(options.sourceType===\"image\"||options.sourceType===\"video\"){const gpu=this.gpuRecords.get(record.id);const texture=gpu?.texture;if(!texture?.ready)continue;if(texture.sourceType===\"video\"){needsContinuousVideo=true;this.updateVideoTexture(texture);if(!texture.ready)continue;}gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,texture.texture);gl.uniform1f(this.uniforms.useTexture,1);gl.uniform2f(this.uniforms.imageSize,texture.width,texture.height);gl.uniform4f(this.uniforms.color,1,1,1,1);}else{const[r,g,b,a]=parseCssColor(options.color);gl.uniform1f(this.uniforms.useTexture,0);gl.uniform2f(this.uniforms.imageSize,1,1);gl.uniform4f(this.uniforms.color,r,g,b,a);}gl.drawElements(gl.TRIANGLES,this.indexCount,gl.UNSIGNED_SHORT,0);}if(!isScrolling)this.layoutDirty=false;const hoverAnimating=Array.from(this.hoverStates.values()).some(state=>Math.abs(state.value-state.to)>.001);const appearAnimating=this.settings.appearEnabled&&appearRecords.length>0&&anyAppearAnimating;const recentlyActive=now-this.lastActivityTime<240;const needsFastFrames=recentlyActive||Math.abs(this.velocity)>.002||needsContinuousVideo||hoverAnimating||appearAnimating;if(needsFastFrames){this.animationFrame=requestAnimationFrame(this.render);}else{// Static pages do not need a fullscreen WebGL redraw at 60/120 Hz.\n// A low-frequency heartbeat keeps layout changes discoverable while\n// greatly reducing GPU/thermal load during long-open sessions.\nthis.idleTimer=window.setTimeout(()=>{this.idleTimer=0;if(!this.disposed&&!document.hidden&&!this.animationFrame){this.animationFrame=requestAnimationFrame(this.render);}},160);}});this.canvas=canvas;this.settings=settings;this.appearSignature=this.getAppearSignature(settings);this.coarsePointer=Boolean(window.matchMedia?.(\"(pointer: coarse)\")?.matches);this.visualViewport=window.visualViewport??null;if(!this.coarsePointer&&portalHost&&portalHost!==document.body&&portalHost!==document.documentElement){this.desktopScrollHost=portalHost;if(window.getComputedStyle(portalHost).position===\"static\"){this.restoreScrollHostPosition=portalHost.style.position;portalHost.style.position=\"relative\";}}const gl=canvas.getContext(\"webgl\",{alpha:true,antialias:!this.coarsePointer,depth:false,stencil:false,premultipliedAlpha:false,preserveDrawingBuffer:false,powerPreference:\"high-performance\"});if(!gl)throw new Error(\"WebGL is not available in this browser\");this.gl=gl;this.program=createProgram(gl);this.positionLocation=gl.getAttribLocation(this.program,\"aPosition\");this.uvLocation=gl.getAttribLocation(this.program,\"aUv\");this.uniforms={viewport:requireUniform(gl,this.program,\"uViewport\"),visibleViewportHeight:requireUniform(gl,this.program,\"uVisibleViewportHeight\"),viewportTopInCanvas:requireUniform(gl,this.program,\"uViewportTopInCanvas\"),rect:requireUniform(gl,this.program,\"uRect\"),strength:requireUniform(gl,this.program,\"uStrength\"),zoneStart:requireUniform(gl,this.program,\"uZoneStart\"),curve:requireUniform(gl,this.program,\"uCurve\"),velocity:requireUniform(gl,this.program,\"uVelocity\"),scrollBoost:requireUniform(gl,this.program,\"uScrollBoost\"),scrollLag:requireUniform(gl,this.program,\"uScrollLag\"),verticalBend:requireUniform(gl,this.program,\"uVerticalBend\"),edgeReach:requireUniform(gl,this.program,\"uEdgeReach\"),edgeFalloff:requireUniform(gl,this.program,\"uEdgeFalloff\"),bottomNarrowing:requireUniform(gl,this.program,\"uBottomNarrowing\"),bottomNarrowStart:requireUniform(gl,this.program,\"uBottomNarrowStart\"),bottomNarrowSmoothness:requireUniform(gl,this.program,\"uBottomNarrowSmoothness\"),glossEnabled:requireUniform(gl,this.program,\"uGlossEnabled\"),glossOpacity:requireUniform(gl,this.program,\"uGlossOpacity\"),glossStart:requireUniform(gl,this.program,\"uGlossStart\"),glossWidth:requireUniform(gl,this.program,\"uGlossWidth\"),glossSoftness:requireUniform(gl,this.program,\"uGlossSoftness\"),glossTilt:requireUniform(gl,this.program,\"uGlossTilt\"),hoverScale:requireUniform(gl,this.program,\"uHoverScale\"),hoverOrigin:requireUniform(gl,this.program,\"uHoverOrigin\"),texture:requireUniform(gl,this.program,\"uTexture\"),useTexture:requireUniform(gl,this.program,\"uUseTexture\"),color:requireUniform(gl,this.program,\"uColor\"),imageSize:requireUniform(gl,this.program,\"uImageSize\"),boxSize:requireUniform(gl,this.program,\"uBoxSize\"),fit:requireUniform(gl,this.program,\"uFit\"),position:requireUniform(gl,this.program,\"uPosition\"),radius:requireUniform(gl,this.program,\"uRadius\"),opacity:requireUniform(gl,this.program,\"uOpacity\")};// The 72-row diagnostic mesh was unnecessarily expensive on mobile.\n// 48 rows on touch devices is still smooth while cutting vertex work by\n// roughly one third. Desktop keeps a little more detail.\nconst grid=createGrid(12,this.coarsePointer?48:60);const positionBuffer=gl.createBuffer();const uvBuffer=gl.createBuffer();const indexBuffer=gl.createBuffer();if(!positionBuffer||!uvBuffer||!indexBuffer){throw new Error(\"Could not create WebGL buffers\");}this.positionBuffer=positionBuffer;this.uvBuffer=uvBuffer;this.indexBuffer=indexBuffer;this.indexCount=grid.indices.length;gl.bindBuffer(gl.ARRAY_BUFFER,this.positionBuffer);gl.bufferData(gl.ARRAY_BUFFER,grid.positions,gl.STATIC_DRAW);gl.bindBuffer(gl.ARRAY_BUFFER,this.uvBuffer);gl.bufferData(gl.ARRAY_BUFFER,grid.uvs,gl.STATIC_DRAW);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,this.indexBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,grid.indices,gl.STATIC_DRAW);gl.disable(gl.DEPTH_TEST);gl.enable(gl.BLEND);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);gl.clearColor(0,0,0,0);this.resetScrollState(performance.now());this.mediaQuery=window.matchMedia?.(\"(prefers-reduced-motion: reduce)\")??null;this.prefersReducedMotion=Boolean(this.mediaQuery?.matches);this.mediaQuery?.addEventListener?.(\"change\",this.handleMotionPreference);window.addEventListener(\"pointermove\",this.handlePointerMove,{passive:true});window.addEventListener(\"pointerleave\",this.handlePointerLeave);window.addEventListener(\"blur\",this.handlePointerLeave);window.addEventListener(\"scroll\",this.handleScrollActivity,{passive:true});// Framer Live Preview can scroll an internal overflow container instead\n// of window. Element scroll events do not bubble, so listen in capture\n// phase as well. This keeps an absolute body canvas in sync without\n// switching desktop back to position: fixed.\ndocument.addEventListener(\"scroll\",this.handleCapturedScrollActivity,{passive:true,capture:true});window.addEventListener(\"resize\",this.handleViewportResize,{passive:true});window.addEventListener(\"pageshow\",this.handlePageShow);document.addEventListener(\"visibilitychange\",this.handleVisibilityChange);this.visualViewport?.addEventListener(\"resize\",this.handleViewportResize,{passive:true});this.wakeRenderer();}}// -----------------------------------------------------------------------------\n// Viewport Distortion\n// -----------------------------------------------------------------------------\n// Match Framer's common/default responsive ranges:\n// Phone:  < 810px\n// Tablet: 810px–1199px\n// Desktop: >= 1200px\nconst PHONE_BREAKPOINT_MAX=809;const TABLET_BREAKPOINT_MAX=1199;function getViewportBreakpoint(width){if(width<=PHONE_BREAKPOINT_MAX)return\"phone\";if(width<=TABLET_BREAKPOINT_MAX)return\"tablet\";return\"desktop\";}function isDistortionEnabledAtWidth(width,tabletEnabled,phoneEnabled){const breakpoint=getViewportBreakpoint(width);if(breakpoint===\"phone\")return phoneEnabled;if(breakpoint===\"tablet\")return tabletEnabled;return true;}/**\n * @framerDisableUnlink\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n * @framerIntrinsicWidth 80\n * @framerIntrinsicHeight 40\n */export function ViewportDistortion(props){const isStaticRenderer=useIsStaticRenderer();const[viewportWidth,setViewportWidth]=React.useState(()=>{if(typeof window===\"undefined\")return 1200;return window.visualViewport?.width||window.innerWidth;});const effectEnabled=isDistortionEnabledAtWidth(viewportWidth,props.tabletEnabled,props.phoneEnabled);React.useEffect(()=>{if(typeof window===\"undefined\"||isStaticRenderer)return;const updateViewportWidth=()=>{setViewportWidth(window.visualViewport?.width||window.innerWidth);};updateViewportWidth();window.addEventListener(\"resize\",updateViewportWidth,{passive:true});window.visualViewport?.addEventListener(\"resize\",updateViewportWidth,{passive:true});return()=>{window.removeEventListener(\"resize\",updateViewportWidth);window.visualViewport?.removeEventListener(\"resize\",updateViewportWidth);};},[isStaticRenderer]);const canvasRef=React.useRef(null);const ownerRef=React.useRef(Symbol(\"ViewportWarpCanvas\"));const engineRef=React.useRef(null);const[portalTarget,setPortalTarget]=React.useState(null);const settings=React.useMemo(()=>({strength:props.strength,zoneStart:props.zoneStart,curve:props.curve,scrollBoost:props.scrollBoost,scrollLag:props.scrollLag,verticalBend:props.verticalBend,edgeReach:props.edgeReach,edgeFalloff:props.edgeFalloff,bottomNarrowing:props.bottomNarrowing,bottomNarrowStart:props.bottomNarrowStart,bottomNarrowSmoothness:props.bottomNarrowSmoothness,glossEnabled:props.glossEnabled,glossOpacity:props.glossOpacity,glossStart:props.glossStart,glossWidth:props.glossWidth,glossSoftness:props.glossSoftness,glossTilt:props.glossTilt,hoverZoomEnabled:props.hoverZoomEnabled,hoverZoomAmount:props.hoverZoomAmount,hoverZoomIn:props.hoverZoomIn,hoverZoomOut:props.hoverZoomOut,hoverZoomEase:props.hoverZoomEase,hoverCustomEase:parseCubicBezierField(props.hoverCustomEase),hoverOriginX:props.hoverOriginX,hoverOriginY:props.hoverOriginY,appearEnabled:props.appearEnabled,appearDistance:props.appearDistance,appearDuration:props.appearDuration,appearDelay:props.appearDelay,appearEase:props.appearEase,customEaseX1:props.customEaseX1,customEaseY1:props.customEaseY1,customEaseX2:props.customEaseX2,customEaseY2:props.customEaseY2,maxDpr:props.maxDpr}),[props.strength,props.zoneStart,props.curve,props.scrollBoost,props.scrollLag,props.verticalBend,props.edgeReach,props.edgeFalloff,props.bottomNarrowing,props.bottomNarrowStart,props.bottomNarrowSmoothness,props.glossEnabled,props.glossOpacity,props.glossStart,props.glossWidth,props.glossSoftness,props.glossTilt,props.hoverZoomEnabled,props.hoverZoomAmount,props.hoverZoomIn,props.hoverZoomOut,props.hoverZoomEase,props.hoverCustomEase,props.hoverOriginX,props.hoverOriginY,props.appearEnabled,props.appearDistance,props.appearDuration,props.appearDelay,props.appearEase,props.customEaseX1,props.customEaseY1,props.customEaseX2,props.customEaseY2,props.maxDpr]);React.useEffect(()=>{if(typeof document===\"undefined\"||isStaticRenderer)return;if(!effectEnabled){setPortalTarget(null);setCanvasReady(false);return;}const coarsePointer=Boolean(window.matchMedia?.(\"(pointer: coarse)\")?.matches);const resolvePortalTarget=()=>{const nextTarget=coarsePointer?document.body:findDesktopScrollHost()||document.body;setPortalTarget(current=>current===nextTarget?current:nextTarget);};resolvePortalTarget();store.listeners.add(resolvePortalTarget);document.addEventListener(\"scroll\",resolvePortalTarget,true);window.addEventListener(\"resize\",resolvePortalTarget,{passive:true});const timer=window.setTimeout(resolvePortalTarget,250);return()=>{window.clearTimeout(timer);store.listeners.delete(resolvePortalTarget);document.removeEventListener(\"scroll\",resolvePortalTarget,true);window.removeEventListener(\"resize\",resolvePortalTarget);};},[isStaticRenderer,effectEnabled]);React.useLayoutEffect(()=>{if(isStaticRenderer)return;setGlobalEffectEnabled(effectEnabled);if(!effectEnabled){// Force DOM fallbacks on before any WebGL state can hide them.\nsetAppearEnabled(false);setCanvasReady(false);return()=>{setGlobalEffectEnabled(false);setAppearEnabled(false);setCanvasReady(false);};}setAppearEnabled(props.appearEnabled);return()=>{// If the Distortion component unmounts or is replaced during a\n// Framer hot reload, leave all ViewportImage DOM fallbacks visible.\nsetGlobalEffectEnabled(false);setAppearEnabled(false);setCanvasReady(false);};},[isStaticRenderer,effectEnabled,props.appearEnabled]);React.useEffect(()=>{if(isStaticRenderer||!effectEnabled||!portalTarget)return;const canvas=canvasRef.current;if(!canvas)return;const owner=ownerRef.current;if(store.owner&&store.owner!==owner){console.warn(\"ViewportWarp: more than one Viewport Distortion component was found. Keep only one global instance.\");return;}store.owner=owner;try{const engine=new ViewportWarpEngine(canvas,settings,portalTarget);engineRef.current=engine;setCanvasReady(true);}catch(error){console.warn(\"ViewportWarp: WebGL initialization failed\",error);setCanvasReady(false);}return()=>{engineRef.current?.dispose();engineRef.current=null;if(store.owner===owner){store.owner=null;setCanvasReady(false);}};},[isStaticRenderer,effectEnabled,portalTarget]);React.useEffect(()=>{if(!effectEnabled)return;engineRef.current?.updateSettings(settings);},[effectEnabled,settings]);if(isStaticRenderer){return /*#__PURE__*/_jsx(\"div\",{style:{...props.style,width:\"100%\",height:\"100%\",minWidth:1,minHeight:1,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",border:\"1px dashed rgba(0,0,0,.25)\",borderRadius:6,fontSize:10,fontFamily:\"monospace\",color:\"rgba(0,0,0,.55)\",overflow:\"hidden\"},children:\"WEBGL\"});}const canvas=/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,\"aria-hidden\":\"true\",style:{// Always absolute on both mobile and desktop.\n// iOS stays in document.body. Desktop Framer Preview can portal\n// this same absolute canvas into its actual scroll surface.\nposition:\"absolute\",top:0,left:0,right:\"auto\",bottom:\"auto\",width:\"100vw\",height:\"100vh\",pointerEvents:\"none\",zIndex:props.zIndex,background:\"transparent\",transform:\"translate3d(0px, 0px, 0px)\",transformOrigin:\"0 0\",backfaceVisibility:\"hidden\",willChange:\"contents\",contain:\"strict\"}});return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"div\",{style:{...props.style,width:\"100%\",height:\"100%\"}}),effectEnabled&&portalTarget?/*#__PURE__*/createPortal(canvas,portalTarget):null]});}ViewportDistortion.displayName=\"Viewport Distortion\";const viewportDistortionDefaultProps={strength:.09,zoneStart:.66,curve:1.7,scrollBoost:.055,scrollLag:14,verticalBend:8,edgeReach:.24,edgeFalloff:1.45,bottomNarrowing:.22,bottomNarrowStart:.88,bottomNarrowSmoothness:.7,glossEnabled:false,glossOpacity:.16,glossStart:.64,glossWidth:.24,glossSoftness:.1,glossTilt:.18,hoverZoomEnabled:false,hoverZoomAmount:.06,hoverZoomIn:.45,hoverZoomOut:.55,hoverZoomEase:\"easeOut\",hoverCustomEase:\"cubic-bezier(0.22, 1, 0.36, 1)\",hoverOriginX:.5,hoverOriginY:.5,appearEnabled:false,appearDistance:40,appearDuration:.8,appearDelay:.1,appearEase:\"easeOut\",customEaseX1:.22,customEaseY1:1,customEaseX2:.36,customEaseY2:1,maxDpr:1.35,tabletEnabled:true,phoneEnabled:true,zIndex:100,creatorLink:\"https://framer.link/CxdtHWB\"};ViewportDistortion.defaultProps=viewportDistortionDefaultProps;addPropertyControls(ViewportDistortion,{strength:{type:ControlType.Number,title:\"Strength\",defaultValue:.09,min:0,max:.35,step:.005},zoneStart:{type:ControlType.Number,title:\"Zone Start\",defaultValue:.66,min:.35,max:.95,step:.01},curve:{type:ControlType.Number,title:\"Falloff\",defaultValue:1.7,min:.25,max:4,step:.05},scrollBoost:{type:ControlType.Number,title:\"Scroll Boost\",defaultValue:.055,min:0,max:.3,step:.005},scrollLag:{type:ControlType.Number,title:\"Scroll Lag\",defaultValue:14,min:-80,max:80,step:1,unit:\"px\"},verticalBend:{type:ControlType.Number,title:\"Edge Bend\",defaultValue:8,min:-80,max:80,step:1,unit:\"px\"},edgeReach:{type:ControlType.Number,title:\"Edge Reach\",defaultValue:.24,min:.05,max:.48,step:.01,description:\"Width of the distortion zone from each viewport edge. 0.24 = outer 24% on each side.\"},edgeFalloff:{type:ControlType.Number,title:\"Edge Falloff\",defaultValue:1.45,min:.25,max:4,step:.05,description:\"Shapes how softly the distortion fades to zero toward the center.\"},bottomNarrowing:{type:ControlType.Number,title:\"Bottom Narrow\",defaultValue:.22,min:0,max:1.5,step:.01,description:\"Global bottom taper of the whole distortion curve. 1 returns the expansion to neutral at the viewport bottom; values above 1 pinch inward.\"},bottomNarrowStart:{type:ControlType.Number,title:\"Narrow Start\",defaultValue:.88,min:.5,max:.99,step:.01,description:\"Viewport height where the shared distortion curve starts tapering back inward.\"},bottomNarrowSmoothness:{type:ControlType.Number,title:\"Narrow Smooth\",defaultValue:.7,min:0,max:1,step:.01,description:\"Rounds the transition from expansion into narrowing. Higher values create a broader, smoother turn.\"},glossEnabled:{type:ControlType.Boolean,title:\"Gloss\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},glossOpacity:{type:ControlType.Number,title:\"Gloss Opacity\",defaultValue:.16,min:0,max:.8,step:.01,hidden:props=>!props.glossEnabled},glossStart:{type:ControlType.Number,title:\"Gloss Start\",defaultValue:.64,min:.4,max:.98,step:.01,hidden:props=>!props.glossEnabled,description:\"Viewport height where the broad bend lighting begins.\"},glossWidth:{type:ControlType.Number,title:\"Gloss Height\",defaultValue:.24,min:.05,max:.55,step:.01,hidden:props=>!props.glossEnabled},glossSoftness:{type:ControlType.Number,title:\"Gloss Soft\",defaultValue:.1,min:.01,max:.25,step:.01,hidden:props=>!props.glossEnabled},glossTilt:{type:ControlType.Number,title:\"Gloss Tilt\",defaultValue:.18,min:-1,max:1,step:.01,hidden:props=>!props.glossEnabled,description:\"Adds a subtle diagonal bias so the bend lighting feels more natural.\"},hoverZoomEnabled:{type:ControlType.Boolean,title:\"Hover Zoom\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Global hover zoom settings. Each Viewport Image must also have Hover Zoom set to Include.\"},hoverZoomAmount:{type:ControlType.Number,title:\"Zoom Amount\",defaultValue:.06,min:0,max:.25,step:.005,hidden:props=>!props.hoverZoomEnabled,description:\"0.06 = scale 1.06. The Viewport Image frame stays fixed.\"},hoverZoomIn:{type:ControlType.Number,title:\"Zoom In\",defaultValue:.45,min:.05,max:2,step:.05,unit:\"s\",hidden:props=>!props.hoverZoomEnabled},hoverZoomOut:{type:ControlType.Number,title:\"Zoom Out\",defaultValue:.55,min:.05,max:2,step:.05,unit:\"s\",hidden:props=>!props.hoverZoomEnabled},hoverZoomEase:{type:ControlType.Enum,title:\"Zoom Ease\",options:[\"easeOut\",\"easeInOut\",\"linear\",\"custom\"],optionTitles:[\"Ease Out\",\"Ease In Out\",\"Linear\",\"Custom\"],defaultValue:\"easeOut\",hidden:props=>!props.hoverZoomEnabled},hoverCustomEase:{type:ControlType.String,title:\"Custom Ease\",defaultValue:\"cubic-bezier(0.22, 1, 0.36, 1)\",placeholder:\"cubic-bezier(0.22, 1, 0.36, 1)\",hidden:props=>!props.hoverZoomEnabled||props.hoverZoomEase!==\"custom\",description:\"Enter one CSS cubic-bezier value, e.g. cubic-bezier(0.16, 1, 0.3, 1). You can also enter: 0.16, 1, 0.3, 1\"},hoverOriginX:{type:ControlType.Number,title:\"Origin X\",defaultValue:.5,min:0,max:1,step:.01,hidden:props=>!props.hoverZoomEnabled},hoverOriginY:{type:ControlType.Number,title:\"Origin Y\",defaultValue:.5,min:0,max:1,step:.01,hidden:props=>!props.hoverZoomEnabled},appearEnabled:{type:ControlType.Boolean,title:\"Appear\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},appearDistance:{type:ControlType.Number,title:\"From Y\",defaultValue:40,min:-200,max:200,step:1,unit:\"px\",hidden:props=>!props.appearEnabled},appearDuration:{type:ControlType.Number,title:\"Duration\",defaultValue:.8,min:.05,max:5,step:.05,unit:\"s\",hidden:props=>!props.appearEnabled},appearDelay:{type:ControlType.Number,title:\"Delay\",defaultValue:.1,min:0,max:5,step:.05,unit:\"s\",hidden:props=>!props.appearEnabled},appearEase:{type:ControlType.Enum,title:\"Ease\",options:[\"easeOut\",\"easeInOut\",\"easeIn\",\"linear\",\"custom\"],optionTitles:[\"Ease Out\",\"Ease In Out\",\"Ease In\",\"Linear\",\"Custom\"],defaultValue:\"easeOut\",hidden:props=>!props.appearEnabled},customEaseX1:{type:ControlType.Number,title:\"Bezier X1\",defaultValue:.22,min:0,max:1,step:.01,hidden:props=>!props.appearEnabled||props.appearEase!==\"custom\"},customEaseY1:{type:ControlType.Number,title:\"Bezier Y1\",defaultValue:1,min:-2,max:3,step:.01,hidden:props=>!props.appearEnabled||props.appearEase!==\"custom\"},customEaseX2:{type:ControlType.Number,title:\"Bezier X2\",defaultValue:.36,min:0,max:1,step:.01,hidden:props=>!props.appearEnabled||props.appearEase!==\"custom\"},customEaseY2:{type:ControlType.Number,title:\"Bezier Y2\",defaultValue:1,min:-2,max:3,step:.01,hidden:props=>!props.appearEnabled||props.appearEase!==\"custom\",description:\"CSS-style cubic-bezier(x1, y1, x2, y2). X values stay between 0 and 1; Y can overshoot.\"},maxDpr:{type:ControlType.Number,title:\"Max DPR\",defaultValue:1.35,min:.8,max:1.35,step:.05,description:\"Performance-safe render scale for the fullscreen WebGL canvas.\"},tabletEnabled:{type:ControlType.Boolean,title:\"Tablet Effect\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Enable or disable Viewport Distortion on Tablet viewports (810–1199px).\"},phoneEnabled:{type:ControlType.Boolean,title:\"Phone Effect\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Enable or disable Viewport Distortion on Phone viewports (0–809px).\"},zIndex:{type:ControlType.Number,title:\"Canvas Z\",defaultValue:100,min:-10,max:9999,step:1,displayStepper:true},creatorLink:{type:ControlType.Link,title:\"Creator\",defaultValue:\"https://framer.link/CxdtHWB\",description:\"Made by [Bestlooker](https://framer.link/CxdtHWB)\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"ViewportDistortion\":{\"type\":\"reactComponent\",\"name\":\"ViewportDistortion\",\"slots\":[],\"annotations\":{\"framerDisableUnlink\":\"* @framerSupportedLayoutWidth fixed\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"40\",\"framerIntrinsicWidth\":\"80\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ViewportDistortion.map"],"mappings":"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"}