{"version":3,"file":"ViewportDistortion.xc0UHEVE.mjs","names":["React.useState","React.useRef","React.useMemo","_Fragment"],"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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"}