scrolltube 2.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md ADDED
@@ -0,0 +1,46 @@
1
+ <!-- BEGIN:scrolltube-agent-rules -->
2
+ # ScrollTube Implementation Protocol
3
+
4
+ This document is for AI agents tasked with implementing ScrollTube in a host application.
5
+
6
+ ## 🤖 Agent Persona
7
+ You are a ScrollTube Implementation Expert. Your goal is to transform static media into high-performance, interactive scroll experiences.
8
+
9
+ ## 🛠️ Implementation Workflow
10
+
11
+ ### Step 1: Asset Preparation (The CLI)
12
+ Before writing any UI code, you MUST process the raw assets (video or images) into a ScrollTube project.
13
+ ```bash
14
+ npx stube create <input_path> --cloud --depth --prompt "main subject" [-s 2]
15
+ ```
16
+ - **Why?** This generates optimized multi-resolution frames, optional AI-tracked subject coordinates, and optional depth maps.
17
+ - **Output**: A directory containing `scrolltube.json` and variant folders (`mobile/`, `desktop/`).
18
+
19
+ ### Step 2: Project Architecture (React)
20
+ Import the generated `scrolltube.json` and wrap your scene in the `ScrollTubeProvider`.
21
+ ```tsx
22
+ import project from './path/to/scrolltube.json';
23
+ import { ScrollTubeProvider, ScrollTubeCanvas, SubjectLayer } from 'scrolltube/react';
24
+
25
+ // Goal: 1 ScrollTubeProvider per interactive section.
26
+ ```
27
+
28
+ ### Step 3: Immersive Layering
29
+ Use high-level components to build the scene. Avoid manual coordinate math.
30
+ - **`<ScrollTubeCanvas />`**: Renders the image sequence (WebGL).
31
+ - **`<SubjectLayer />`**: Pins HTML content to the moving product automatically.
32
+ - **`useScrollTube()`**: Hook for custom triggers based on `progress` (0-1) or `frame`.
33
+
34
+ ## 📚 Docs
35
+ - [**Core Architecture**](docs/architecture.md): Understand the State-Snapshot Engine.
36
+ - [**Asset Pipeline**](docs/asset-pipeline.md): Detailed CLI options (Smart-Crop, Variants, Step).
37
+ - [**React Integration**](docs/react-integration.md): Component API reference.
38
+ - [**AI Protocol**](docs/ai-integration.md): How to prompt other agents to build creative scenes for you.
39
+
40
+ ## ⚠️ Critical Constraints
41
+ 1. **Coordination System**: ALWAYS use percentages (0-100) for Layer offsets relative to the Subject Focal Point.
42
+ 2. **Performance**: Recommend `--step 2` or `--step 3` for mobile-first projects to reduce payload.
43
+ 3. **Responsive**: The engine handles folder swapping (Mobile/Desktop) automatically based on viewport.
44
+ 4. **Interactive**: Enable `depthEnabled` on the Canvas for 3D parallax effects if depth maps exist.
45
+
46
+ <!-- END:scrolltube-agent-rules -->
package/CLAUDE.md ADDED
@@ -0,0 +1 @@
1
+ @AGENTS.md
package/README.md ADDED
@@ -0,0 +1,148 @@
1
+ # ScrollTube
2
+
3
+ **Transform media into interactive web experiences.**
4
+
5
+ ScrollTube is a modern animation SDK built for the era of high-performance, agent-driven development. It allows you to transform standard video or images into web assets that precisely track subjects and depth.
6
+
7
+ [scroll.tube](https://www.scroll.tube)
8
+
9
+ ---
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ npm install scrolltube
15
+ ```
16
+
17
+ ---
18
+
19
+ ## The Universal Asset Pipeline
20
+
21
+ ScrollTube features a **Universal Asset Pipeline** that runs identical logic in both the **CLI** (Node.js) and the **Browser** (ideal for CMS integrations like WordPress).
22
+
23
+ ### 1. Asset Pipeline
24
+ Asset pipeline is used to transform video or images into ScrollTube projects. It outputs a folder with optimized variants and a scrolltube.json file that you point to in your ScrollTubeProvider in step 2. You can use the pipeline in the CLI, browser or node.
25
+
26
+ #### CLI Usage (Node.js)
27
+ Transform your video into a ScrollTube project from your terminal:
28
+
29
+ ```bash
30
+ # This will extract frames, track the subject, and generate optimized variants and depth maps.
31
+ npx stube create "your-video.mp4" --name "my-project" --track "apple" --cloud --depth
32
+ ```
33
+
34
+ #### Programmatic Usage (Browser/Node)
35
+ You can also import the pipeline into your own React apps or dashboard:
36
+
37
+ ```javascript
38
+ import { AssetPipeline } from 'scrolltube/pipeline';
39
+
40
+ const pipeline = new AssetPipeline({
41
+ apiKey: process.env.SCROLLTUBE_KEY || process.env.FAL_KEY,
42
+ onProgress: (p) => console.log(`${p.step}: ${p.percent}%`)
43
+ });
44
+
45
+ // Returns the project configuration or a ZIP blob
46
+ const project = await pipeline.create({
47
+ input: videoFile, // Can be a File object or Path
48
+ name: "my-project",
49
+ track: "apple",
50
+ depth: true,
51
+ variants: [720, 1080],
52
+ outputZip: true // Perfect for CMS uploads
53
+ });
54
+ ```
55
+
56
+ ### 2. Rendering Integration
57
+
58
+ All you have to do now, is to drop the scrolltube.json project into your ScrollTubeProvider.
59
+
60
+ #### Vanilla JS Integration
61
+ For full implementation, please refer to the [Vanilla JS Example](https://github.com/aleskozelsky/scrolltube/blob/main/packages/examples/html/index.html).
62
+
63
+ [Live Demo](https://example-html.scroll.tube)
64
+
65
+ ```html
66
+ <!-- 2. Drop it into your HTML -->
67
+ <script type="module">
68
+ import ScrollTube from 'scrolltube/core';
69
+
70
+ document.addEventListener('DOMContentLoaded', async () => {
71
+ const orchestrators = await ScrollTube.CoreOrchestrator.initAll();
72
+ });
73
+ </script>
74
+ ```
75
+
76
+
77
+ #### React Integration
78
+ For full implementation, please refer to the [React Integration Example](https://github.com/aleskozelsky/scrolltube/blob/main/packages/examples/create-next-app/src/app/page.tsx).
79
+
80
+ [Live Demo](https://example-next.scroll.tube)
81
+
82
+
83
+ ```tsx
84
+ // 2. Drop it into your Next.js app
85
+ import myproject from './example-apple-project/scrolltube.json';
86
+ import { ScrollTubeProvider, ScrollTubeCanvas, ScrollTubeLayer, ScrollTubeLayerTracking, useScrollTube } from 'scrolltube/react';
87
+
88
+
89
+ const App = () => (
90
+ <ScrollTubeProvider
91
+ project={myproject}
92
+ >
93
+ <ScrollTubeLayer>
94
+ <ScrollTubeCanvas />
95
+ </ScrollTubeLayer>
96
+
97
+ {/* Automatically follows the 'apple' tracked in the CLI */}
98
+ <ScrollTubeLayerTracking id="main">
99
+ <h2>Apple</h2>
100
+ </ScrollTubeLayerTracking>
101
+
102
+ {/* Shows frame number and animates opacity based on scroll progress */}
103
+ <ScrollTubeLayer align="bottom-left">
104
+ <AppleInfo />
105
+ </ScrollTubeLayer>
106
+ </ScrollTubeProvider>
107
+ );
108
+
109
+ const AppleInfo = () => {
110
+ const { progress, frame } = useScrollTube();
111
+ const opacity = progress > 0.2 && progress < 0.5 ? 1 : 0;
112
+
113
+ return (
114
+ <>
115
+ <h2 style={{ fontSize: '3rem', margin: 0, color: "white" }}>Green Apple</h2>
116
+ <p style={{ opacity: 0.7, color: "white" }}>Frame: {frame}</p>
117
+ </>
118
+ );
119
+ };
120
+
121
+
122
+ ```
123
+
124
+ ---
125
+
126
+ ## Documentation & Guides
127
+
128
+ Choose your path based on your role:
129
+
130
+ ### 👤 For Humans
131
+ - [**Core Architecture**](https://docs.scroll.tube/architecture): Understand the state-snapshot engine.
132
+ - [**Asset Pipeline**](https://docs.scroll.tube/asset-pipeline): Learn how to use the CLI and AI tracking.
133
+ - [**React Hooks**](https://docs.scroll.tube/react-integration): Build custom interactive components.
134
+
135
+ ### 🤖 For AI Agents
136
+ - [**AGENTS.md**](https://github.com/aleskozelsky/scrolltube/blob/main/packages/scrolltube/AGENTS.md): Technical standard operating procedures for the repository.
137
+ - [**AI Integration Protocol**](https://docs.scroll.tube/ai-integration): How to prompt agents to build scenes for you.
138
+
139
+ ---
140
+
141
+ ## Performance & Tech
142
+ - **WebGL Accelerated**: High-FPS rendering even for 4K sequences.
143
+ - **AI Subject Tracking**: Automatic (x,y) pinning via SAM 3.
144
+ - **Mouse-Interactive Parallax**: Automatic 3D depth map generation and rendering.
145
+ - **Object-Fit Support**: Responsive "Cover" and "Contain" logic built into the shader.
146
+
147
+ ---
148
+
@@ -0,0 +1 @@
1
+ export declare function sendRequest(endpoint: string, method?: 'GET' | 'POST', body?: any, token?: string): Promise<any>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sendRequest = sendRequest;
4
+ const API_BASE_URL = 'https://api.scrolltube.com';
5
+ async function sendRequest(endpoint, method = 'GET', body, token) {
6
+ const headers = {
7
+ 'Content-Type': 'application/json',
8
+ };
9
+ if (token) {
10
+ headers['Authorization'] = `Bearer ${token}`;
11
+ }
12
+ const response = await fetch(`${API_BASE_URL}${endpoint}`, {
13
+ method,
14
+ headers,
15
+ body: body ? JSON.stringify(body) : undefined,
16
+ });
17
+ if (!response.ok) {
18
+ throw new Error(`API request failed: ${response.statusText}`);
19
+ }
20
+ return response.json();
21
+ }
@@ -0,0 +1,74 @@
1
+ import { ProjectConfiguration } from './types';
2
+ /**
3
+ * SCROLLTUBE CORE ENGINE
4
+ *
5
+ * A declarative, performant engine that maps scroll progress
6
+ * to high-performance image sequence rendering.
7
+ */
8
+ export declare class CoreEngine {
9
+ private config;
10
+ private currentFrame;
11
+ private activeVariant;
12
+ private canvas;
13
+ private ctx;
14
+ private renderer;
15
+ basePath: string;
16
+ scrub: number;
17
+ depthTilt: number;
18
+ private targetProgress;
19
+ private currentProgress;
20
+ private rafId;
21
+ private destroyed;
22
+ private imageCache;
23
+ private depthCache;
24
+ private scrollTimeout;
25
+ private trackingDataCache;
26
+ onFrameChange?: (frame: number, progress: number) => void;
27
+ onProgressUpdate?: (progress: number) => void;
28
+ private boundResize;
29
+ constructor(config: ProjectConfiguration, options?: {
30
+ scrub?: number;
31
+ depthTilt?: number;
32
+ });
33
+ destroy(): void;
34
+ static init(container: HTMLElement, configUrl: string): Promise<CoreEngine>;
35
+ /**
36
+ * ATTACH CANVAS
37
+ * Connects the engine to a DOM element for rendering.
38
+ */
39
+ attachCanvas(canvas: HTMLCanvasElement): void;
40
+ private resizeCanvas;
41
+ /**
42
+ * SMART VARIANT SELECTION
43
+ * Selects the best image variant based on physical pixel requirements
44
+ * and the dimensions of the parent container.
45
+ */
46
+ private detectBestVariant;
47
+ private clearCache;
48
+ private preloadInitial;
49
+ /**
50
+ * THE PLAYER ENGINE
51
+ * Sets the target scroll progress. Actual rendering interpolates to this value.
52
+ */
53
+ update(progress: number): void;
54
+ setDepthTilt(tilt: number): void;
55
+ private updateLoop;
56
+ private calculateFrame;
57
+ /**
58
+ * LOAD SUBJECT TRACKING (On-Demand)
59
+ */
60
+ loadTrackingData(subjectId: string): Promise<void>;
61
+ getTrackedCoords(subjectId: string, frame: number): {
62
+ x: number;
63
+ y: number;
64
+ scale?: number;
65
+ };
66
+ /**
67
+ * RENDER LOOP
68
+ * Draws the image to the canvas with object-fit: cover logic.
69
+ */
70
+ private render;
71
+ private getImage;
72
+ private loadDepthMap;
73
+ private getDepthImage;
74
+ }
@@ -0,0 +1,39 @@
1
+ import { CoreEngine } from './CoreEngine';
2
+ export interface CoreOrchestratorOptions {
3
+ scrub?: number;
4
+ depthTilt?: number;
5
+ }
6
+ /**
7
+ * CORE ORCHESTRATOR
8
+ *
9
+ * Bridges the DOM (React or Vanilla HTML) with the ScrollTube CoreEngine.
10
+ * Parses `data-stube-*` attributes, initializes the WebGL canvas,
11
+ * and sets up `motion.dev` scroll synchronization.
12
+ */
13
+ export declare class CoreOrchestrator {
14
+ private container;
15
+ private options;
16
+ private engine;
17
+ private motionScrollCancel?;
18
+ private syncedAnimations;
19
+ private destroyed;
20
+ onFrameChange?: (frame: number, scrubbedProgress: number) => void;
21
+ constructor(container: HTMLElement, options?: CoreOrchestratorOptions);
22
+ private static stylesInjected;
23
+ private injectStyles;
24
+ /**
25
+ * Helper to auto-initialize all .stube-container elements on a page
26
+ */
27
+ static initAll(): Promise<CoreOrchestrator[]>;
28
+ /**
29
+ * Initializes the engine by scanning the container's DOM.
30
+ */
31
+ init(): Promise<void>;
32
+ private loadEngine;
33
+ private setupScrollTracking;
34
+ private parseAnimatedElements;
35
+ private syncAnimations;
36
+ private syncTrackingLayers;
37
+ getEngine(): CoreEngine | null;
38
+ destroy(): void;
39
+ }
@@ -0,0 +1,20 @@
1
+ export declare class WebGLRenderer {
2
+ private gl;
3
+ private program;
4
+ private positionBuffer;
5
+ private texture;
6
+ private depthTexture;
7
+ private targetMouse;
8
+ private currentMouse;
9
+ private animationFrameId;
10
+ private depthTilt;
11
+ constructor(canvas: HTMLCanvasElement, options?: {
12
+ depthTilt?: number;
13
+ });
14
+ setDepthTilt(tilt: number): void;
15
+ private createProgram;
16
+ private animate;
17
+ render(img: HTMLImageElement, depthImg: HTMLImageElement | null, width: number, height: number): void;
18
+ private draw;
19
+ destroy(): void;
20
+ }
@@ -0,0 +1,10 @@
1
+ import { CoreEngine } from './CoreEngine';
2
+ import { CoreOrchestrator } from './CoreOrchestrator';
3
+ export * from './types';
4
+ export { CoreEngine } from './CoreEngine';
5
+ export * from './WebGLRenderer';
6
+ export { CoreOrchestrator } from './CoreOrchestrator';
7
+ declare const ScrollTube: typeof CoreEngine & {
8
+ CoreOrchestrator: typeof CoreOrchestrator;
9
+ };
10
+ export default ScrollTube;
@@ -0,0 +1,14 @@
1
+ /*
2
+ Venovani:
3
+ Tento plugin je venovan me rodine - mamince Svetle,
4
+ manzelce Verce, detem Natalce a Alexovi
5
+ a nasi dceri Agatce, ktera navzdy zustane v nasich srdcich.
6
+
7
+ Dedication:
8
+ This plugin is dedicated to my family - my mother Svetla,
9
+ my wife Verca, my children Natalka and Alex,
10
+ and our daughter Agatka, who will forever remain in our hearts.
11
+ */
12
+
13
+
14
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ScrollTube=e():t.ScrollTube=e()}(this,()=>(()=>{"use strict";var t={d:(e,n)=>{for(var i in n)t.o(n,i)&&!t.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:n[i]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{default:()=>Zs});class n{constructor(t,e={}){if(this.targetMouse={x:0,y:0},this.currentMouse={x:0,y:0},this.animationFrameId=0,this.depthTilt=.04,this.animate=()=>{if(this.currentMouse.x+=.1*(this.targetMouse.x-this.currentMouse.x),this.currentMouse.y+=.1*(this.targetMouse.y-this.currentMouse.y),this.gl&&this.program){this.gl.useProgram(this.program);const t=this.gl.getUniformLocation(this.program,"u_mouse");this.gl.uniform2f(t,this.currentMouse.x,this.currentMouse.y);const e=this.gl.getUniformLocation(this.program,"u_depthTilt");this.gl.uniform1f(e,this.depthTilt),this.draw()}this.animationFrameId=requestAnimationFrame(this.animate)},this.depthTilt=void 0!==e.depthTilt?e.depthTilt:4,this.gl=t.getContext("webgl",{alpha:!1,antialias:!1}),!this.gl)throw new Error("WebGL not supported");this.program=this.createProgram("\n attribute vec2 a_position;\n varying vec2 v_texCoord;\n void main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n // Convert -1 -> 1 to 0 -> 1 for UVs\n v_texCoord = a_position * 0.5 + 0.5;\n v_texCoord.y = 1.0 - v_texCoord.y;\n }\n ","\n precision mediump float;\n uniform sampler2D u_image;\n uniform sampler2D u_depthMap;\n uniform vec2 u_resolution;\n uniform vec2 u_imageResolution;\n uniform vec2 u_mouse;\n uniform float u_depthTilt;\n uniform bool u_hasDepth;\n varying vec2 v_texCoord;\n\n void main() {\n // object-fit: cover math\n vec2 ratio = vec2(\n min((u_resolution.x / u_resolution.y) / (u_imageResolution.x / u_imageResolution.y), 1.0),\n min((u_resolution.y / u_resolution.x) / (u_imageResolution.y / u_imageResolution.x), 1.0)\n );\n vec2 uv = vec2(\n v_texCoord.x * ratio.x + (1.0 - ratio.x) * 0.5,\n v_texCoord.y * ratio.y + (1.0 - ratio.y) * 0.5\n );\n\n if (u_hasDepth) {\n float depth = texture2D(u_depthMap, uv).r;\n // White is close (1), Black is far (0).\n // By making the background move and the foreground stay still (using 1.0 - depth)\n // and subtracting the parallax, the background pulls the foreground over itself,\n // expanding the edges and creating proper occlusion, instead of collapsing/tearing.\n // depthTilt is scaled by 0.01 internally (so 100 = 1.0 peak displacement)\n vec2 parallax = u_mouse * (1.0 - depth) * (u_depthTilt * 0.01);\n uv -= parallax;\n }\n \n gl_FragColor = texture2D(u_image, uv);\n }\n "),this.gl.useProgram(this.program),this.positionBuffer=this.gl.createBuffer(),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.positionBuffer),this.gl.bufferData(this.gl.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),this.gl.STATIC_DRAW),this.texture=this.gl.createTexture(),this.depthTexture=this.gl.createTexture(),window.addEventListener("mousemove",t=>{this.targetMouse.x=t.clientX/window.innerWidth*2-1,this.targetMouse.y=t.clientY/window.innerHeight*2-1}),this.animate()}setDepthTilt(t){this.depthTilt=t}createProgram(t,e){const n=this.gl.createShader(this.gl.VERTEX_SHADER);this.gl.shaderSource(n,t),this.gl.compileShader(n);const i=this.gl.createShader(this.gl.FRAGMENT_SHADER);this.gl.shaderSource(i,e),this.gl.compileShader(i);const s=this.gl.createProgram();return this.gl.attachShader(s,n),this.gl.attachShader(s,i),this.gl.linkProgram(s),s}render(t,e,n,i){this.gl.useProgram(this.program),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,this.texture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,t),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR),this.gl.activeTexture(this.gl.TEXTURE1),this.gl.bindTexture(this.gl.TEXTURE_2D,this.depthTexture),e&&(this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,e),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR)),this.gl.uniform1i(this.gl.getUniformLocation(this.program,"u_image"),0),this.gl.uniform1i(this.gl.getUniformLocation(this.program,"u_depthMap"),1),this.gl.uniform1i(this.gl.getUniformLocation(this.program,"u_hasDepth"),e?1:0),this.gl.uniform2f(this.gl.getUniformLocation(this.program,"u_resolution"),n,i),this.gl.uniform2f(this.gl.getUniformLocation(this.program,"u_imageResolution"),t.naturalWidth,t.naturalHeight);const s=this.gl.getAttribLocation(this.program,"a_position");this.gl.enableVertexAttribArray(s),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.positionBuffer),this.gl.vertexAttribPointer(s,2,this.gl.FLOAT,!1,0,0),this.gl.viewport(0,0,n,i),this.draw()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,6)}destroy(){cancelAnimationFrame(this.animationFrameId)}}var i=function(t,e,n,i){return new(n||(n=Promise))(function(s,r){function a(t){try{h(i.next(t))}catch(t){r(t)}}function o(t){try{h(i.throw(t))}catch(t){r(t)}}function h(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,o)}h((i=i.apply(t,e||[])).next())})};class s{constructor(t,e={}){this.currentFrame=-1,this.activeVariant=null,this.canvas=null,this.ctx=null,this.renderer=null,this.basePath="",this.scrub=0,this.depthTilt=4,this.targetProgress=0,this.currentProgress=0,this.rafId=0,this.destroyed=!1,this.imageCache=new Map,this.depthCache=new Map,this.scrollTimeout=null,this.trackingDataCache=new Map,this.config=t,this.basePath=t.settings.basePath||"",this.scrub=void 0!==e.scrub?e.scrub:0,this.depthTilt=void 0!==e.depthTilt?e.depthTilt:4,this.detectBestVariant(),this.boundResize=()=>{this.detectBestVariant(),this.resizeCanvas(),this.render()},window.addEventListener("resize",this.boundResize),this.updateLoop=this.updateLoop.bind(this),this.rafId=requestAnimationFrame(this.updateLoop)}destroy(){this.destroyed=!0,this.rafId&&cancelAnimationFrame(this.rafId),window.removeEventListener("resize",this.boundResize),this.scrollTimeout&&clearTimeout(this.scrollTimeout),this.clearCache(),this.trackingDataCache.clear(),this.canvas=null,this.ctx=null,this.renderer=null,this.onFrameChange=void 0}static init(t,e){return i(this,void 0,void 0,function*(){const n=yield fetch(e);if(!n.ok)throw new Error(`Failed to load config: ${n.statusText}`);const i=yield n.json(),r=e.substring(0,e.lastIndexOf("/"));i.settings||(i.settings={baseResolution:{width:1920,height:1080},scrollMode:"vh"}),i.settings.basePath=i.settings.basePath||r;const a=new s(i,{scrub:"object"==typeof i.settings?i.settings.scrub:0});let o=t.querySelector("canvas");return o||(o=document.createElement("canvas"),o.style.width="100%",o.style.height="100%",o.style.display="block",o.style.objectFit="cover",t.appendChild(o)),a.attachCanvas(o),a})}attachCanvas(t){this.canvas=t;try{this.renderer=new n(t,{depthTilt:this.depthTilt})}catch(e){console.warn("WebGL failed, falling back to 2D",e),this.ctx=t.getContext("2d",{alpha:!1})}this.resizeCanvas(),this.render()}resizeCanvas(){if(!this.canvas)return;const t=this.canvas.getBoundingClientRect(),e=t.width,n=t.height,i=window.devicePixelRatio||1;this.canvas.width=e*i,this.canvas.height=n*i,this.ctx&&this.ctx.scale(i,i)}detectBestVariant(){var t;const e=this.config.assets[0];if(!e)return;const n=this.canvas?this.canvas.getBoundingClientRect():{width:window.innerWidth,height:window.innerHeight},i=n.height>n.width,s=n.width*(window.devicePixelRatio||1),r=e.variants.filter(t=>{const e="portrait"===t.orientation||parseInt(t.aspectRatio.split(":")[1])>parseInt(t.aspectRatio.split(":")[0]);return i===e});r.sort((t,e)=>t.frameCount-e.frameCount);const a=r.find(t=>t.width>=s)||r[r.length-1];a?(null===(t=this.activeVariant)||void 0===t?void 0:t.id)!==a.id&&(console.log(`🎯 Variant Switched: ${a.id} (${i?"Portrait":"Landscape"})`),this.activeVariant=a,this.clearCache(),this.preloadInitial()):console.warn("[CoreEngine] No suitable variant found")}clearCache(){this.imageCache.clear(),this.depthCache.clear()}preloadInitial(){for(let t=0;t<15;t++)this.getImage(t)}update(t){this.targetProgress=Math.max(0,Math.min(1,t))}setDepthTilt(t){this.depthTilt=t,this.renderer&&this.renderer.setDepthTilt(t)}updateLoop(){if(this.destroyed)return;this.rafId=requestAnimationFrame(this.updateLoop);const t=this.scrub;if(t>0){const e=Math.max(.01,1-t);this.currentProgress+=(this.targetProgress-this.currentProgress)*e}else this.currentProgress=this.targetProgress;Math.abs(this.targetProgress-this.currentProgress)<1e-4&&(this.currentProgress=this.targetProgress),this.onProgressUpdate&&this.onProgressUpdate(this.currentProgress),this.calculateFrame(this.currentProgress)}calculateFrame(t){const e=this.config.timeline.scenes[0];if(!e)return;const n=e.assetRange[1]-e.assetRange[0],i=Math.floor(e.assetRange[0]+t*n),s=Math.max(0,Math.min(i,e.assetRange[1]));s!==this.currentFrame&&(this.currentFrame=s,this.render(),this.getImage(this.currentFrame+5),this.getImage(this.currentFrame+10),this.scrollTimeout&&clearTimeout(this.scrollTimeout),this.scrollTimeout=setTimeout(()=>{this.loadDepthMap(this.currentFrame)},100),this.onFrameChange&&this.onFrameChange(this.currentFrame,t))}loadTrackingData(t){return i(this,void 0,void 0,function*(){var e;if(!this.activeVariant)return;if(!(null===(e=this.activeVariant.subjects)||void 0===e?void 0:e.includes(t)))return void console.warn(`[CoreEngine] Subject ${t} not found in active variant ${this.activeVariant.id}`);const n=`${this.activeVariant.id}_${t}`;if(!this.trackingDataCache.has(n))try{const e=`${this.basePath?`${this.basePath}/`:""}${this.activeVariant.path}/000_tracking-${t}.json`;console.log(`[CoreEngine] Fetching tracking data: ${e}`);const i=yield fetch(e);if(!i.ok)throw new Error(i.statusText);const s=yield i.json();this.trackingDataCache.set(n,s)}catch(e){console.error(`[CoreEngine] Failed to load tracking data for ${t}`,e)}})}getTrackedCoords(t,e){if(!this.activeVariant||!this.canvas)return{x:.5,y:.5};const n=`${this.activeVariant.id}_${t}`,i=this.trackingDataCache.get(n);if(!i)return{x:.5,y:.5};const s=i.find(t=>t.frame===e);if(!s)return{x:.5,y:.5};const r=this.canvas.clientWidth/this.canvas.clientHeight,a=this.activeVariant.width/this.activeVariant.height,o=Math.min(r/a,1),h=Math.min(1/r/(1/a),1);return{x:(s.x-.5)/o+.5,y:(s.y-.5)/h+.5,scale:s.scale}}render(){var t;if(!this.canvas||-1===this.currentFrame)return;const e=this.getImage(this.currentFrame);if(!e||!e.complete)return;const n=this.canvas.clientWidth,i=this.canvas.clientHeight;let s=null;if((null===(t=this.activeVariant)||void 0===t?void 0:t.hasDepthMap)&&(s=this.getDepthImage(this.currentFrame),s&&!s.complete&&(s=null)),this.renderer)this.renderer.render(e,s,n*(window.devicePixelRatio||1),i*(window.devicePixelRatio||1));else if(this.ctx){const t=e.naturalWidth/e.naturalHeight;let s,r,a,o;t>n/i?(r=i,s=i*t,a=(n-s)/2,o=0):(s=n,r=n/t,a=0,o=(i-r)/2),this.ctx.clearRect(0,0,n,i),this.ctx.drawImage(e,a,o,s,r)}}getImage(t){if(!this.activeVariant)return null;if(t<0||t>=this.activeVariant.frameCount)return null;const e=`${this.activeVariant.id}_${t}`;if(this.imageCache.has(e))return this.imageCache.get(e);const n=this.basePath?`${this.basePath}/`:"",i=new Image;return i.crossOrigin="anonymous",i.src=`${n}${this.activeVariant.path}/index_${t}.webp`,i.onload=()=>{this.currentFrame===t&&this.render()},this.imageCache.set(e,i),i}loadDepthMap(t){var e;if(!(null===(e=this.activeVariant)||void 0===e?void 0:e.hasDepthMap))return void console.log("[CoreEngine] activeVariant does not define hasDepthMap=true");console.log(`[CoreEngine] Lazy requesting depth map for frame: ${t}`);this.getDepthImage(t)}getDepthImage(t){var e;if(!(null===(e=this.activeVariant)||void 0===e?void 0:e.hasDepthMap))return null;if(t<0||t>=this.activeVariant.frameCount)return null;const n=`${this.activeVariant.id}_depth_${t}`;if(this.depthCache.has(n))return this.depthCache.get(n);const i=this.basePath?`${this.basePath}/`:"";console.log(`[CoreEngine] Downloading: ${i}${this.activeVariant.path}/index_${t}_depth.webp`);const s=new Image;return s.crossOrigin="anonymous",s.src=`${i}${this.activeVariant.path}/index_${t}_depth.webp`,s.onload=()=>{console.log(`[CoreEngine] Depth map loaded for frame: ${t}`),this.currentFrame===t&&this.render()},s.onerror=e=>{console.error(`[CoreEngine] Depth map failed to load for frame: ${t}`,e)},this.depthCache.set(n,s),s}}const r=t=>t,a={},o=["setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender"],h={value:null,addProjectionMetrics:null};function l(t,e){let n=!1,i=!0;const s={delta:0,timestamp:0,isProcessing:!1},r=()=>n=!0,l=o.reduce((t,n)=>(t[n]=function(t,e){let n=new Set,i=new Set,s=!1,r=!1;const a=new WeakSet;let o={delta:0,timestamp:0,isProcessing:!1},l=0;function c(e){a.has(e)&&(u.schedule(e),t()),l++,e(o)}const u={schedule:(t,e=!1,r=!1)=>{const o=r&&s?n:i;return e&&a.add(t),o.add(t),t},cancel:t=>{i.delete(t),a.delete(t)},process:t=>{if(o=t,s)return void(r=!0);s=!0;const a=n;n=i,i=a,n.forEach(c),e&&h.value&&h.value.frameloop[e].push(l),l=0,n.clear(),s=!1,r&&(r=!1,u.process(t))}};return u}(r,e?n:void 0),t),{}),{setup:c,read:u,resolveKeyframes:d,preUpdate:p,update:f,preRender:m,render:g,postRender:y}=l,v=()=>{const r=a.useManualTiming,o=r?s.timestamp:performance.now();n=!1,r||(s.delta=i?1e3/60:Math.max(Math.min(o-s.timestamp,40),1)),s.timestamp=o,s.isProcessing=!0,c.process(s),u.process(s),d.process(s),p.process(s),f.process(s),m.process(s),g.process(s),y.process(s),s.isProcessing=!1,n&&e&&(i=!1,t(v))};return{schedule:o.reduce((e,r)=>{const a=l[r];return e[r]=(e,r=!1,o=!1)=>(n||(n=!0,i=!0,s.isProcessing||t(v)),a.schedule(e,r,o)),e},{}),cancel:t=>{for(let e=0;e<o.length;e++)l[o[e]].cancel(t)},state:s,steps:l}}const{schedule:c,cancel:u,state:d,steps:p}=l("undefined"!=typeof requestAnimationFrame?requestAnimationFrame:r,!0);function f(t,e){let n;const i=()=>{const{currentTime:i}=e,s=(null===i?0:i.value)/100;n!==s&&t(s),n=s};return c.preUpdate(i,!0),()=>u(i)}function m(t){let e;return()=>(void 0===e&&(e=t()),e)}const g={};function y(t,e){const n=m(t);return()=>g[e]??n()}const v=y(()=>void 0!==window.ScrollTimeline,"scrollTimeline"),b=y(()=>void 0!==window.ViewTimeline,"viewTimeline");function w(t){return"undefined"!=typeof window&&(t?b():v())}function T(t){return"object"==typeof t&&null!==t}function x(t){return T(t)&&"ownerSVGElement"in t}function M(t,e,n){if(null==t)return[];if(t instanceof EventTarget)return[t];if("string"==typeof t){let i=document;e&&(i=e.current);const s=n?.[t]??i.querySelectorAll(t);return s?Array.from(s):[]}return Array.from(t).filter(t=>null!=t)}const A=new WeakMap;let S;const E=(t,e,n)=>(i,s)=>s&&s[0]?s[0][t+"Size"]:x(i)&&"getBBox"in i?i.getBBox()[e]:i[n],C=E("inline","width","offsetWidth"),V=E("block","height","offsetHeight");function k({target:t,borderBoxSize:e}){A.get(t)?.forEach(n=>{n(t,{get width(){return C(t,e)},get height(){return V(t,e)}})})}function P(t){t.forEach(k)}function R(t,e){S||"undefined"!=typeof ResizeObserver&&(S=new ResizeObserver(P));const n=M(t);return n.forEach(t=>{let n=A.get(t);n||(n=new Set,A.set(t,n)),n.add(e),S?.observe(t)}),()=>{n.forEach(t=>{const n=A.get(t);n?.delete(e),n?.size||S?.unobserve(t)})}}const F=new Set;let D;function _(t){return F.add(t),D||(D=()=>{const t={get width(){return window.innerWidth},get height(){return window.innerHeight}};F.forEach(e=>e(t))},window.addEventListener("resize",D)),()=>{F.delete(t),F.size||"function"!=typeof D||(window.removeEventListener("resize",D),D=void 0)}}const B=(t,e,n)=>{const i=e-t;return 0===i?1:(n-t)/i};function I(t,e){return e?t*(1e3/e):0}const O={x:{length:"Width",position:"Left"},y:{length:"Height",position:"Top"}};function L(t,e,n,i){const s=n[e],{length:r,position:a}=O[e],o=s.current,h=n.time;s.current=Math.abs(t[`scroll${a}`]),s.scrollLength=t[`scroll${r}`]-t[`client${r}`],s.offset.length=0,s.offset[0]=0,s.offset[1]=s.scrollLength,s.progress=B(0,s.scrollLength,s.current);const l=i-h;s.velocity=l>50?0:I(s.current-o,l)}const W=(t,e)=>n=>e(t(n)),$=(...t)=>t.reduce(W);const j=(t,e,n)=>n>e?e:n<t?t:n,N=t=>e=>"string"==typeof e&&e.startsWith(t),U=N("--"),X=N("var(--"),z=t=>!!X(t)&&K.test(t.split("/*")[0].trim()),K=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function Y(t){return"string"==typeof t&&t.split("/*")[0].includes("var(--")}const H={test:t=>"number"==typeof t,parse:parseFloat,transform:t=>t},q={...H,transform:t=>j(0,1,t)},G={...H,default:1},Z=t=>Math.round(1e5*t)/1e5,J=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;const Q=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,tt=(t,e)=>n=>Boolean("string"==typeof n&&Q.test(n)&&n.startsWith(t)||e&&!function(t){return null==t}(n)&&Object.prototype.hasOwnProperty.call(n,e)),et=(t,e,n)=>i=>{if("string"!=typeof i)return i;const[s,r,a,o]=i.match(J);return{[t]:parseFloat(s),[e]:parseFloat(r),[n]:parseFloat(a),alpha:void 0!==o?parseFloat(o):1}},nt={...H,transform:t=>Math.round((t=>j(0,255,t))(t))},it={test:tt("rgb","red"),parse:et("red","green","blue"),transform:({red:t,green:e,blue:n,alpha:i=1})=>"rgba("+nt.transform(t)+", "+nt.transform(e)+", "+nt.transform(n)+", "+Z(q.transform(i))+")"};const st={test:tt("#"),parse:function(t){let e="",n="",i="",s="";return t.length>5?(e=t.substring(1,3),n=t.substring(3,5),i=t.substring(5,7),s=t.substring(7,9)):(e=t.substring(1,2),n=t.substring(2,3),i=t.substring(3,4),s=t.substring(4,5),e+=e,n+=n,i+=i,s+=s),{red:parseInt(e,16),green:parseInt(n,16),blue:parseInt(i,16),alpha:s?parseInt(s,16)/255:1}},transform:it.transform},rt=t=>({test:e=>"string"==typeof e&&e.endsWith(t)&&1===e.split(" ").length,parse:parseFloat,transform:e=>`${e}${t}`}),at=rt("deg"),ot=rt("%"),ht=rt("px"),lt=rt("vh"),ct=rt("vw"),ut=(()=>({...ot,parse:t=>ot.parse(t)/100,transform:t=>ot.transform(100*t)}))(),dt={test:tt("hsl","hue"),parse:et("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:n,alpha:i=1})=>"hsla("+Math.round(t)+", "+ot.transform(Z(e))+", "+ot.transform(Z(n))+", "+Z(q.transform(i))+")"},pt={test:t=>it.test(t)||st.test(t)||dt.test(t),parse:t=>it.test(t)?it.parse(t):dt.test(t)?dt.parse(t):st.parse(t),transform:t=>"string"==typeof t?t:t.hasOwnProperty("red")?it.transform(t):dt.transform(t),getAnimatableNone:t=>{const e=pt.parse(t);return e.alpha=0,pt.transform(e)}},ft=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;const mt="number",gt="color",yt=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function vt(t){const e=t.toString(),n=[],i={color:[],number:[],var:[]},s=[];let r=0;const a=e.replace(yt,t=>(pt.test(t)?(i.color.push(r),s.push(gt),n.push(pt.parse(t))):t.startsWith("var(")?(i.var.push(r),s.push("var"),n.push(t)):(i.number.push(r),s.push(mt),n.push(parseFloat(t))),++r,"${}")).split("${}");return{values:n,split:a,indexes:i,types:s}}function bt({split:t,types:e}){const n=t.length;return i=>{let s="";for(let r=0;r<n;r++)if(s+=t[r],void 0!==i[r]){const t=e[r];s+=t===mt?Z(i[r]):t===gt?pt.transform(i[r]):i[r]}return s}}const wt=(t,e)=>{return"number"==typeof t?e?.trim().endsWith("/")?t:0:"number"==typeof(n=t)?0:pt.test(n)?pt.getAnimatableNone(n):n;var n};const Tt={test:function(t){return isNaN(t)&&"string"==typeof t&&(t.match(J)?.length||0)+(t.match(ft)?.length||0)>0},parse:function(t){return vt(t).values},createTransformer:function(t){return bt(vt(t))},getAnimatableNone:function(t){const e=vt(t);return bt(e)(e.values.map((t,n)=>wt(t,e.split[n])))}};function xt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function Mt(t,e){return n=>n>0?e:t}const At=(t,e,n)=>t+(e-t)*n,St=(t,e,n)=>{const i=t*t,s=n*(e*e-i)+i;return s<0?0:Math.sqrt(s)},Et=[st,it,dt];function Ct(t){const e=(n=t,Et.find(t=>t.test(n)));var n;if(Boolean(e),!Boolean(e))return!1;let i=e.parse(t);return e===dt&&(i=function({hue:t,saturation:e,lightness:n,alpha:i}){t/=360,n/=100;let s=0,r=0,a=0;if(e/=100){const i=n<.5?n*(1+e):n+e-n*e,o=2*n-i;s=xt(o,i,t+1/3),r=xt(o,i,t),a=xt(o,i,t-1/3)}else s=r=a=n;return{red:Math.round(255*s),green:Math.round(255*r),blue:Math.round(255*a),alpha:i}}(i)),i}const Vt=(t,e)=>{const n=Ct(t),i=Ct(e);if(!n||!i)return Mt(t,e);const s={...n};return t=>(s.red=St(n.red,i.red,t),s.green=St(n.green,i.green,t),s.blue=St(n.blue,i.blue,t),s.alpha=At(n.alpha,i.alpha,t),it.transform(s))},kt=new Set(["none","hidden"]);function Pt(t,e){return n=>At(t,e,n)}function Rt(t){return"number"==typeof t?Pt:"string"==typeof t?z(t)?Mt:pt.test(t)?Vt:_t:Array.isArray(t)?Ft:"object"==typeof t?pt.test(t)?Vt:Dt:Mt}function Ft(t,e){const n=[...t],i=n.length,s=t.map((t,n)=>Rt(t)(t,e[n]));return t=>{for(let e=0;e<i;e++)n[e]=s[e](t);return n}}function Dt(t,e){const n={...t,...e},i={};for(const s in n)void 0!==t[s]&&void 0!==e[s]&&(i[s]=Rt(t[s])(t[s],e[s]));return t=>{for(const e in i)n[e]=i[e](t);return n}}const _t=(t,e)=>{const n=Tt.createTransformer(e),i=vt(t),s=vt(e);return i.indexes.var.length===s.indexes.var.length&&i.indexes.color.length===s.indexes.color.length&&i.indexes.number.length>=s.indexes.number.length?kt.has(t)&&!s.values.length||kt.has(e)&&!i.values.length?function(t,e){return kt.has(t)?n=>n<=0?t:e:n=>n>=1?e:t}(t,e):$(Ft(function(t,e){const n=[],i={color:0,var:0,number:0};for(let s=0;s<e.values.length;s++){const r=e.types[s],a=t.indexes[r][i[r]],o=t.values[a]??0;n[s]=o,i[r]++}return n}(i,s),s.values),n):Mt(t,e)};function Bt(t,e,n){if("number"==typeof t&&"number"==typeof e&&"number"==typeof n)return At(t,e,n);return Rt(t)(t,e)}function It(t,e,{clamp:n=!0,ease:i,mixer:s}={}){const o=t.length;if(e.length,1===o)return()=>e[0];if(2===o&&e[0]===e[1])return()=>e[1];const h=t[0]===t[1];t[0]>t[o-1]&&(t=[...t].reverse(),e=[...e].reverse());const l=function(t,e,n){const i=[],s=n||a.mix||Bt,o=t.length-1;for(let n=0;n<o;n++){let a=s(t[n],t[n+1]);if(e){const t=Array.isArray(e)?e[n]||r:e;a=$(t,a)}i.push(a)}return i}(e,i,s),c=l.length,u=n=>{if(h&&n<t[0])return e[0];let i=0;if(c>1)for(;i<t.length-2&&!(n<t[i+1]);i++);const s=B(t[i],t[i+1],n);return l[i](s)};return n?e=>u(j(t[0],t[o-1],e)):u}function Ot(t,e){const n=t[t.length-1];for(let i=1;i<=e;i++){const s=B(0,e,i);t.push(At(n,1,s))}}function Lt(t){const e=[0];return Ot(e,t.length-1),e}function Wt(t){return T(t)&&"offsetHeight"in t&&!("ownerSVGElement"in t)}const $t={start:0,center:.5,end:1};function jt(t,e,n=0){let i=0;if(t in $t&&(t=$t[t]),"string"==typeof t){const e=parseFloat(t);t.endsWith("px")?i=e:t.endsWith("%")?t=e/100:t.endsWith("vw")?i=e/100*document.documentElement.clientWidth:t.endsWith("vh")?i=e/100*document.documentElement.clientHeight:t=e}return"number"==typeof t&&(i=e*t),n+i}const Nt=[0,0];function Ut(t,e,n,i){let s=Array.isArray(t)?t:Nt,r=0,a=0;return"number"==typeof t?s=[t,t]:"string"==typeof t&&(s=(t=t.trim()).includes(" ")?t.split(" "):[t,$t[t]?t:"0"]),r=jt(s[0],n,i),a=jt(s[1],e),r-a}const Xt={Enter:[[0,1],[1,1]],Exit:[[0,0],[1,0]],Any:[[1,0],[0,1]],All:[[0,0],[1,1]]},zt={x:0,y:0};function Kt(t,e,n){const{offset:i=Xt.All}=n,{target:s=t,axis:r="y"}=n,a="y"===r?"height":"width",o=s!==t?function(t,e){const n={x:0,y:0};let i=t;for(;i&&i!==e;)if(Wt(i))n.x+=i.offsetLeft,n.y+=i.offsetTop,i=i.offsetParent;else if("svg"===i.tagName){const t=i.getBoundingClientRect();i=i.parentElement;const e=i.getBoundingClientRect();n.x+=t.left-e.left,n.y+=t.top-e.top}else{if(!(i instanceof SVGGraphicsElement))break;{const{x:t,y:e}=i.getBBox();n.x+=t,n.y+=e;let s=null,r=i.parentNode;for(;!s;)"svg"===r.tagName&&(s=r),r=i.parentNode;i=s}}return n}(s,t):zt,h=s===t?{width:t.scrollWidth,height:t.scrollHeight}:function(t){return"getBBox"in t&&"svg"!==t.tagName?t.getBBox():{width:t.clientWidth,height:t.clientHeight}}(s),l={width:t.clientWidth,height:t.clientHeight};e[r].offset.length=0;let c=!e[r].interpolate;const u=i.length;for(let t=0;t<u;t++){const n=Ut(i[t],l[a],h[a],o[r]);c||n===e[r].interpolatorOffsets[t]||(c=!0),e[r].offset[t]=n}c&&(e[r].interpolate=It(e[r].offset,Lt(i),{clamp:!1}),e[r].interpolatorOffsets=[...e[r].offset]),e[r].progress=j(0,1,e[r].interpolate(e[r].current))}function Yt(t,e,n,i={}){return{measure:e=>{!function(t,e=t,n){if(n.x.targetOffset=0,n.y.targetOffset=0,e!==t){let i=e;for(;i&&i!==t;)n.x.targetOffset+=i.offsetLeft,n.y.targetOffset+=i.offsetTop,i=i.offsetParent}n.x.targetLength=e===t?e.scrollWidth:e.clientWidth,n.y.targetLength=e===t?e.scrollHeight:e.clientHeight,n.x.containerLength=t.clientWidth,n.y.containerLength=t.clientHeight}(t,i.target,n),function(t,e,n){L(t,"x",e,n),L(t,"y",e,n),e.time=n}(t,n,e),(i.offset||i.target)&&Kt(t,n,i)},notify:()=>e(n)}}const Ht=new WeakMap,qt=new WeakMap,Gt=new WeakMap,Zt=new WeakMap,Jt=new WeakMap,Qt=t=>t===document.scrollingElement?window:t;function te(t,{container:e=document.scrollingElement,trackContentSize:n=!1,...i}={}){if(!e)return r;let s=Gt.get(e);s||(s=new Set,Gt.set(e,s));const a=Yt(e,t,{time:0,x:{current:0,offset:[],progress:0,scrollLength:0,targetOffset:0,targetLength:0,containerLength:0,velocity:0},y:{current:0,offset:[],progress:0,scrollLength:0,targetOffset:0,targetLength:0,containerLength:0,velocity:0}},i);if(s.add(a),!Ht.has(e)){const t=()=>{for(const t of s)t.measure(d.timestamp);c.preUpdate(n)},n=()=>{for(const t of s)t.notify()},i=()=>c.read(t);Ht.set(e,i);const r=Qt(e);window.addEventListener("resize",i),e!==document.documentElement&&qt.set(e,(h=i,"function"==typeof(o=e)?_(o):R(o,h))),r.addEventListener("scroll",i),i()}var o,h;if(n&&!Jt.has(e)){const t=Ht.get(e),n={width:e.scrollWidth,height:e.scrollHeight};Zt.set(e,n);const i=()=>{const i=e.scrollWidth,s=e.scrollHeight;n.width===i&&n.height===s||(t(),n.width=i,n.height=s)},s=c.read(i,!0);Jt.set(e,s)}const l=Ht.get(e);return c.read(l,!1,!0),()=>{u(l);const t=Gt.get(e);if(!t)return;if(t.delete(a),t.size)return;const n=Ht.get(e);Ht.delete(e),n&&(Qt(e).removeEventListener("scroll",n),qt.get(e)?.(),window.removeEventListener("resize",n));const i=Jt.get(e);i&&(u(i),Jt.delete(e)),Zt.delete(e)}}const ee=[[Xt.Enter,"entry"],[Xt.Exit,"exit"],[Xt.Any,"cover"],[Xt.All,"contain"]];function ne(t,e){if(2!==t.length)return!1;for(let n=0;n<2;n++){const i=t[n],s=e[n];if(!Array.isArray(i)||2!==i.length||i[0]!==s[0]||i[1]!==s[1])return!1}return!0}function ie(t){if(!t)return{rangeStart:"contain 0%",rangeEnd:"contain 100%"};for(const[e,n]of ee)if(ne(t,e))return{rangeStart:`${n} 0%`,rangeEnd:`${n} 100%`}}const se=new Map;function re(t){const e={value:0},n=te(n=>{e.value=100*n[t.axis].progress},t);return{currentTime:e,cancel:n}}function ae({source:t,container:e,...n}){const{axis:i}=n;t&&(e=t);let s=se.get(e);s||(s=new Map,se.set(e,s));const r=n.target??"self";let a=s.get(r);a||(a={},s.set(r,a));const o=i+(n.offset??[]).join(",");if(!a[o])if(n.target&&w(n.target)){const t=ie(n.offset);a[o]=t?new ViewTimeline({subject:n.target,axis:i}):re({container:e,...n})}else w()?a[o]=new ScrollTimeline({source:e,axis:i}):a[o]=re({container:e,...n});return a[o]}function oe(t,{axis:e="y",container:n=document.scrollingElement,...i}={}){if(!n)return r;const s={axis:e,container:n,...i};return"function"==typeof t?function(t,e){return function(t){return 2===t.length}(t)?te(n=>{t(n[e.axis].progress,n)},e):f(t,ae(e))}(t,s):function(t,e){const n=ae(e),i=e.target?ie(e.offset):void 0,s=e.target?w(e.target)&&!!i:w();return t.attachTimeline({timeline:s?n:void 0,...i&&s&&{rangeStart:i.rangeStart,rangeEnd:i.rangeEnd},observe:t=>(t.pause(),f(e=>{t.time=t.iterationDuration*e},n))})}(t,s)}class he{constructor(t){this.stop=()=>this.runAll("stop"),this.animations=t.filter(Boolean)}get finished(){return Promise.all(this.animations.map(t=>t.finished))}getAll(t){return this.animations[0][t]}setAll(t,e){for(let n=0;n<this.animations.length;n++)this.animations[n][t]=e}attachTimeline(t){const e=this.animations.map(e=>e.attachTimeline(t));return()=>{e.forEach((t,e)=>{t&&t(),this.animations[e].stop()})}}get time(){return this.getAll("time")}set time(t){this.setAll("time",t)}get speed(){return this.getAll("speed")}set speed(t){this.setAll("speed",t)}get state(){return this.getAll("state")}get startTime(){return this.getAll("startTime")}get duration(){return le(this.animations,"duration")}get iterationDuration(){return le(this.animations,"iterationDuration")}runAll(t){this.animations.forEach(e=>e[t]())}play(){this.runAll("play")}pause(){this.runAll("pause")}cancel(){this.runAll("cancel")}complete(){this.runAll("complete")}}function le(t,e){let n=0;for(let i=0;i<t.length;i++){const s=t[i][e];null!==s&&s>n&&(n=s)}return n}class ce extends he{then(t,e){return this.finished.finally(t).then(()=>{})}}function ue(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}class de{constructor(){this.subscriptions=[]}add(t){var e,n;return e=this.subscriptions,n=t,-1===e.indexOf(n)&&e.push(n),()=>ue(this.subscriptions,t)}notify(t,e,n){const i=this.subscriptions.length;if(i)if(1===i)this.subscriptions[0](t,e,n);else for(let s=0;s<i;s++){const i=this.subscriptions[s];i&&i(t,e,n)}}getSize(){return this.subscriptions.length}clear(){this.subscriptions.length=0}}let pe;function fe(){pe=void 0}const me={now:()=>(void 0===pe&&me.set(d.isProcessing||a.useManualTiming?d.timestamp:performance.now()),pe),set:t=>{pe=t,queueMicrotask(fe)}},ge={current:void 0};class ye{constructor(t,e={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=t=>{const e=me.now();if(this.updatedAt!==e&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(t),this.current!==this.prev&&(this.events.change?.notify(this.current),this.dependents))for(const t of this.dependents)t.dirty()},this.hasAnimated=!1,this.setCurrent(t),this.owner=e.owner}setCurrent(t){var e;this.current=t,this.updatedAt=me.now(),null===this.canTrackVelocity&&void 0!==t&&(this.canTrackVelocity=(e=this.current,!isNaN(parseFloat(e))))}setPrevFrameValue(t=this.current){this.prevFrameValue=t,this.prevUpdatedAt=this.updatedAt}onChange(t){return this.on("change",t)}on(t,e){this.events[t]||(this.events[t]=new de);const n=this.events[t].add(e);return"change"===t?()=>{n(),c.read(()=>{this.events.change.getSize()||this.stop()})}:n}clearListeners(){for(const t in this.events)this.events[t].clear()}attach(t,e){this.passiveEffect=t,this.stopPassiveEffect=e}set(t){this.passiveEffect?this.passiveEffect(t,this.updateAndNotify):this.updateAndNotify(t)}setWithVelocity(t,e,n){this.set(e),this.prev=void 0,this.prevFrameValue=t,this.prevUpdatedAt=this.updatedAt-n}jump(t,e=!0){this.updateAndNotify(t),this.prev=t,this.prevUpdatedAt=this.prevFrameValue=void 0,e&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){this.events.change?.notify(this.current)}addDependent(t){this.dependents||(this.dependents=new Set),this.dependents.add(t)}removeDependent(t){this.dependents&&this.dependents.delete(t)}get(){return ge.current&&ge.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){const t=me.now();if(!this.canTrackVelocity||void 0===this.prevFrameValue||t-this.updatedAt>30)return 0;const e=Math.min(this.updatedAt-this.prevUpdatedAt,30);return I(parseFloat(this.current)-parseFloat(this.prevFrameValue),e)}start(t){return this.stop(),new Promise(e=>{this.hasAnimated=!0,this.animation=t(e),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.dependents?.clear(),this.events.destroy?.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function ve(t,e){return new ye(t,e)}const be=t=>1e3*t,we=t=>t/1e3,Te=(t,e,n=10)=>{let i="";const s=Math.max(Math.round(e/n),2);for(let e=0;e<s;e++)i+=Math.round(1e4*t(e/(s-1)))/1e4+", ";return`linear(${i.substring(0,i.length-2)})`},xe=2e4;function Me(t){let e=0;let n=t.next(e);for(;!n.done&&e<xe;)e+=50,n=t.next(e);return e>=xe?1/0:e}function Ae(t,e=100,n){const i=n({...t,keyframes:[0,e]}),s=Math.min(Me(i),xe);return{type:"keyframes",ease:t=>i.next(s*t).value/e,duration:we(s)}}const Se=100,Ee=10,Ce=1,Ve=0,ke=800,Pe=.3,Re=.3,Fe={granular:.01,default:2},De={granular:.005,default:.5},_e=.01,Be=10,Ie=.05,Oe=1;function Le(t,e){return t*Math.sqrt(1-e*e)}const We=.001;const $e=["duration","bounce"],je=["stiffness","damping","mass"];function Ne(t,e){return e.some(e=>void 0!==t[e])}function Ue(t){let e={velocity:Ve,stiffness:Se,damping:Ee,mass:Ce,isResolvedFromDuration:!1,...t};if(!Ne(t,je)&&Ne(t,$e))if(e.velocity=0,t.visualDuration){const n=t.visualDuration,i=2*Math.PI/(1.2*n),s=i*i,r=2*j(.05,1,1-(t.bounce||0))*Math.sqrt(s);e={...e,mass:Ce,stiffness:s,damping:r}}else{const n=function({duration:t=ke,bounce:e=Pe,velocity:n=Ve,mass:i=Ce}){let s,r;be(Be);let a=1-e;a=j(Ie,Oe,a),t=j(_e,Be,we(t)),a<1?(s=e=>{const i=e*a,s=i*t,r=i-n,o=Le(e,a),h=Math.exp(-s);return We-r/o*h},r=e=>{const i=e*a*t,r=i*n+n,o=Math.pow(a,2)*Math.pow(e,2)*t,h=Math.exp(-i),l=Le(Math.pow(e,2),a);return(-s(e)+We>0?-1:1)*((r-o)*h)/l}):(s=e=>Math.exp(-e*t)*((e-n)*t+1)-.001,r=e=>Math.exp(-e*t)*(t*t*(n-e)));const o=function(t,e,n){let i=n;for(let n=1;n<12;n++)i-=t(i)/e(i);return i}(s,r,5/t);if(t=be(t),isNaN(o))return{stiffness:Se,damping:Ee,duration:t};{const e=Math.pow(o,2)*i;return{stiffness:e,damping:2*a*Math.sqrt(i*e),duration:t}}}({...t,velocity:0});e={...e,...n,mass:Ce},e.isResolvedFromDuration=!0}return e}function Xe(t=Re,e=Pe){const n="object"!=typeof t?{visualDuration:t,keyframes:[0,1],bounce:e}:t;let{restSpeed:i,restDelta:s}=n;const r=n.keyframes[0],a=n.keyframes[n.keyframes.length-1],o={done:!1,value:r},{stiffness:h,damping:l,mass:c,duration:u,velocity:d,isResolvedFromDuration:p}=Ue({...n,velocity:-we(n.velocity||0)}),f=d||0,m=l/(2*Math.sqrt(h*c)),g=a-r,y=we(Math.sqrt(h/c)),v=Math.abs(g)<5;let b,w,T,x,M,A;if(i||(i=v?Fe.granular:Fe.default),s||(s=v?De.granular:De.default),m<1)T=Le(y,m),x=(f+m*y*g)/T,b=t=>{const e=Math.exp(-m*y*t);return a-e*(x*Math.sin(T*t)+g*Math.cos(T*t))},M=m*y*x+g*T,A=m*y*g-x*T,w=t=>Math.exp(-m*y*t)*(M*Math.sin(T*t)+A*Math.cos(T*t));else if(1===m){b=t=>a-Math.exp(-y*t)*(g+(f+y*g)*t);const t=f+y*g;w=e=>Math.exp(-y*e)*(y*t*e-f)}else{const t=y*Math.sqrt(m*m-1);b=e=>{const n=Math.exp(-m*y*e),i=Math.min(t*e,300);return a-n*((f+m*y*g)*Math.sinh(i)+t*g*Math.cosh(i))/t};const e=(f+m*y*g)/t,n=m*y*e-g*t,i=m*y*g-e*t;w=e=>{const s=Math.exp(-m*y*e),r=Math.min(t*e,300);return s*(n*Math.sinh(r)+i*Math.cosh(r))}}const S={calculatedDuration:p&&u||null,velocity:t=>be(w(t)),next:t=>{if(!p&&m<1){const e=Math.exp(-m*y*t),n=Math.sin(T*t),r=Math.cos(T*t),h=a-e*(x*n+g*r),l=be(e*(M*n+A*r));return o.done=Math.abs(l)<=i&&Math.abs(a-h)<=s,o.value=o.done?a:h,o}const e=b(t);if(p)o.done=t>=u;else{const n=be(w(t));o.done=Math.abs(n)<=i&&Math.abs(a-e)<=s}return o.value=o.done?a:e,o},toString:()=>{const t=Math.min(Me(S),xe),e=Te(e=>S.next(t*e).value,t,30);return t+"ms "+e},toTransition:()=>{}};return S}function ze(t){return"function"==typeof t&&"applyToOptions"in t}Xe.applyToOptions=t=>{const e=Ae(t,100,Xe);return t.ease=e.ease,t.duration=be(e.duration),t.type="keyframes",t};const Ke=t=>Boolean(t&&t.getVelocity),Ye=t=>Array.isArray(t)&&"number"!=typeof t[0];function He(t,e){return Ye(t)?t[((t,e,n)=>{const i=e-t;return((n-t)%i+i)%i+t})(0,t.length,e)]:t}function qe(t){return"object"==typeof t&&!Array.isArray(t)}function Ge(t,e,n,i){return null==t?[]:"string"==typeof t&&qe(e)?M(t,n,i):t instanceof NodeList?Array.from(t):Array.isArray(t)?t.filter(t=>null!=t):[t]}function Ze(t,e,n){return t*(e+1)}function Je(t,e,n,i){return"number"==typeof e?e:e.startsWith("-")||e.startsWith("+")?Math.max(0,t+parseFloat(e)):"<"===e?n:e.startsWith("<")?Math.max(0,n+parseFloat(e.slice(1))):i.get(e)??t}function Qe(t,e,n,i,s,r){!function(t,e,n){for(let i=0;i<t.length;i++){const s=t[i];s.at>e&&s.at<n&&(ue(t,s),i--)}}(t,s,r);for(let a=0;a<e.length;a++)t.push({value:e[a],at:At(s,r,i[a]),easing:He(n,a)})}function tn(t,e){for(let n=0;n<t.length;n++)t[n]=t[n]/(e+1)}function en(t,e){return t.at===e.at?null===t.value?1:null===e.value?-1:0:t.at-e.at}function nn(t,e){return!e.has(t)&&e.set(t,{}),e.get(t)}function sn(t,e){return e[t]||(e[t]=[]),e[t]}function rn(t){return Array.isArray(t)?t:[t]}function an(t,e){return t&&t[e]?{...t,...t[e]}:{...t}}const on=t=>"number"==typeof t,hn=t=>t.every(on),ln={layout:0,mainThread:0,waapi:0},cn=t=>{const e=({timestamp:e})=>t(e);return{start:(t=!0)=>c.update(e,t),stop:()=>u(e),now:()=>d.isProcessing?d.timestamp:me.now()}};function un(t,e,n){const i=Math.max(e-5,0);return I(n-t(i),e-i)}function dn({keyframes:t,velocity:e=0,power:n=.8,timeConstant:i=325,bounceDamping:s=10,bounceStiffness:r=500,modifyTarget:a,min:o,max:h,restDelta:l=.5,restSpeed:c}){const u=t[0],d={done:!1,value:u},p=t=>void 0===o?h:void 0===h||Math.abs(o-t)<Math.abs(h-t)?o:h;let f=n*e;const m=u+f,g=void 0===a?m:a(m);g!==m&&(f=g-u);const y=t=>-f*Math.exp(-t/i),v=t=>g+y(t),b=t=>{const e=y(t),n=v(t);d.done=Math.abs(e)<=l,d.value=d.done?g:n};let w,T;const x=t=>{var e;(e=d.value,void 0!==o&&e<o||void 0!==h&&e>h)&&(w=t,T=Xe({keyframes:[d.value,p(d.value)],velocity:un(v,t,d.value),damping:s,stiffness:r,restDelta:l,restSpeed:c}))};return x(0),{calculatedDuration:null,next:t=>{let e=!1;return T||void 0!==w||(e=!0,b(t),x(t)),void 0!==w&&t>=w?T.next(t-w):(!e&&b(t),d)}}}const pn=(t,e,n)=>(((1-3*n+3*e)*t+(3*n-6*e))*t+3*e)*t;function fn(t,e,n,i){if(t===e&&n===i)return r;const s=e=>function(t,e,n,i,s){let r,a,o=0;do{a=e+(n-e)/2,r=pn(a,i,s)-t,r>0?n=a:e=a}while(Math.abs(r)>1e-7&&++o<12);return a}(e,0,1,t,n);return t=>0===t||1===t?t:pn(s(t),e,i)}const mn=fn(.42,0,1,1),gn=fn(0,0,.58,1),yn=fn(.42,0,.58,1),vn=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2,bn=t=>e=>1-t(1-e),wn=fn(.33,1.53,.69,.99),Tn=bn(wn),xn=vn(Tn),Mn=t=>t>=1?1:(t*=2)<1?.5*Tn(t):.5*(2-Math.pow(2,-10*(t-1))),An=t=>1-Math.sin(Math.acos(t)),Sn=bn(An),En=vn(An),Cn=t=>Array.isArray(t)&&"number"==typeof t[0],Vn={linear:r,easeIn:mn,easeInOut:yn,easeOut:gn,circIn:An,circInOut:En,circOut:Sn,backIn:Tn,backInOut:xn,backOut:wn,anticipate:Mn},kn=t=>{if(Cn(t)){t.length;const[e,n,i,s]=t;return fn(e,n,i,s)}return"string"==typeof t?Vn[t]:t};function Pn({duration:t=300,keyframes:e,times:n,ease:i="easeInOut"}){const s=Ye(i)?i.map(kn):kn(i),r={done:!1,value:e[0]},a=function(t,e){return t.map(t=>t*e)}(n&&n.length===e.length?n:Lt(e),t),o=It(a,e,{ease:Array.isArray(s)?s:(h=e,l=s,h.map(()=>l||yn).splice(0,h.length-1))});var h,l;return{calculatedDuration:t,next:e=>(r.value=o(e),r.done=e>=t,r)}}const Rn=t=>null!==t;function Fn(t,{repeat:e,repeatType:n="loop"},i,s=1){const r=t.filter(Rn),a=s<0||e&&"loop"!==n&&e%2==1?0:r.length-1;return a&&void 0!==i?i:r[a]}const Dn={decay:dn,inertia:dn,tween:Pn,keyframes:Pn,spring:Xe};function _n(t){"string"==typeof t.type&&(t.type=Dn[t.type])}class Bn{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(t=>{this.resolve=t})}notifyFinished(){this.resolve()}then(t,e){return this.finished.then(t,e)}}const In=t=>t/100;class On extends Bn{constructor(t){super(),this.state="idle",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.stop=()=>{const{motionValue:t}=this.options;t&&t.updatedAt!==me.now()&&this.tick(me.now()),this.isStopped=!0,"idle"!==this.state&&(this.teardown(),this.options.onStop?.())},ln.mainThread++,this.options=t,this.initAnimation(),this.play(),!1===t.autoplay&&this.pause()}initAnimation(){const{options:t}=this;_n(t);const{type:e=Pn,repeat:n=0,repeatDelay:i=0,repeatType:s,velocity:r=0}=t;let{keyframes:a}=t;const o=e||Pn;o!==Pn&&"number"!=typeof a[0]&&(this.mixKeyframes=$(In,Bt(a[0],a[1])),a=[0,100]);const h=o({...t,keyframes:a});"mirror"===s&&(this.mirroredGenerator=o({...t,keyframes:[...a].reverse(),velocity:-r})),null===h.calculatedDuration&&(h.calculatedDuration=Me(h));const{calculatedDuration:l}=h;this.calculatedDuration=l,this.resolvedDuration=l+i,this.totalDuration=this.resolvedDuration*(n+1)-i,this.generator=h}updateTime(t){const e=Math.round(t-this.startTime)*this.playbackSpeed;null!==this.holdTime?this.currentTime=this.holdTime:this.currentTime=e}tick(t,e=!1){const{generator:n,totalDuration:i,mixKeyframes:s,mirroredGenerator:r,resolvedDuration:a,calculatedDuration:o}=this;if(null===this.startTime)return n.next(0);const{delay:h=0,keyframes:l,repeat:c,repeatType:u,repeatDelay:d,type:p,onUpdate:f,finalKeyframe:m}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,t):this.speed<0&&(this.startTime=Math.min(t-i/this.speed,this.startTime)),e?this.currentTime=t:this.updateTime(t);const g=this.currentTime-h*(this.playbackSpeed>=0?1:-1),y=this.playbackSpeed>=0?g<0:g>i;this.currentTime=Math.max(g,0),"finished"===this.state&&null===this.holdTime&&(this.currentTime=i);let v=this.currentTime,b=n;if(c){const t=Math.min(this.currentTime,i)/a;let e=Math.floor(t),n=t%1;!n&&t>=1&&(n=1),1===n&&e--,e=Math.min(e,c+1);Boolean(e%2)&&("reverse"===u?(n=1-n,d&&(n-=d/a)):"mirror"===u&&(b=r)),v=j(0,1,n)*a}const w=y?{done:!1,value:l[0]}:b.next(v);s&&!y&&(w.value=s(w.value));let{done:T}=w;y||null===o||(T=this.playbackSpeed>=0?this.currentTime>=i:this.currentTime<=0);const x=null===this.holdTime&&("finished"===this.state||"running"===this.state&&T);return x&&p!==dn&&(w.value=Fn(l,this.options,m,this.speed)),f&&f(w.value),x&&this.finish(),w}then(t,e){return this.finished.then(t,e)}get duration(){return we(this.calculatedDuration)}get iterationDuration(){const{delay:t=0}=this.options||{};return this.duration+we(t)}get time(){return we(this.currentTime)}set time(t){t=be(t),this.currentTime=t,null===this.startTime||null!==this.holdTime||0===this.playbackSpeed?this.holdTime=t:this.driver&&(this.startTime=this.driver.now()-t/this.playbackSpeed),this.driver?this.driver.start(!1):(this.startTime=0,this.state="paused",this.holdTime=t,this.tick(t))}getGeneratorVelocity(){const t=this.currentTime;if(t<=0)return this.options.velocity||0;if(this.generator.velocity)return this.generator.velocity(t);return un(t=>this.generator.next(t).value,t,this.generator.next(t).value)}get speed(){return this.playbackSpeed}set speed(t){const e=this.playbackSpeed!==t;e&&this.driver&&this.updateTime(me.now()),this.playbackSpeed=t,e&&this.driver&&(this.time=we(this.currentTime))}play(){if(this.isStopped)return;const{driver:t=cn,startTime:e}=this.options;this.driver||(this.driver=t(t=>this.tick(t))),this.options.onPlay?.();const n=this.driver.now();"finished"===this.state?(this.updateFinished(),this.startTime=n):null!==this.holdTime?this.startTime=n-this.holdTime:this.startTime||(this.startTime=e??n),"finished"===this.state&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state="running",this.driver.start()}pause(){this.state="paused",this.updateTime(me.now()),this.holdTime=this.currentTime}complete(){"running"!==this.state&&this.play(),this.state="finished",this.holdTime=null}finish(){this.notifyFinished(),this.teardown(),this.state="finished",this.options.onComplete?.()}cancel(){this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),this.options.onCancel?.()}teardown(){this.state="idle",this.stopDriver(),this.startTime=this.holdTime=null,ln.mainThread--}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(t){return this.startTime=0,this.tick(t,!0)}attachTimeline(t){return this.options.allowFlatten&&(this.options.type="keyframes",this.options.ease="linear",this.initAnimation()),this.driver?.stop(),t.observe(this)}}const Ln=t=>180*t/Math.PI,Wn=t=>{const e=Ln(Math.atan2(t[1],t[0]));return jn(e)},$n={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:t=>(Math.abs(t[0])+Math.abs(t[3]))/2,rotate:Wn,rotateZ:Wn,skewX:t=>Ln(Math.atan(t[1])),skewY:t=>Ln(Math.atan(t[2])),skew:t=>(Math.abs(t[1])+Math.abs(t[2]))/2},jn=t=>((t%=360)<0&&(t+=360),t),Nn=t=>Math.sqrt(t[0]*t[0]+t[1]*t[1]),Un=t=>Math.sqrt(t[4]*t[4]+t[5]*t[5]),Xn={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:Nn,scaleY:Un,scale:t=>(Nn(t)+Un(t))/2,rotateX:t=>jn(Ln(Math.atan2(t[6],t[5]))),rotateY:t=>jn(Ln(Math.atan2(-t[2],t[0]))),rotateZ:Wn,rotate:Wn,skewX:t=>Ln(Math.atan(t[4])),skewY:t=>Ln(Math.atan(t[1])),skew:t=>(Math.abs(t[1])+Math.abs(t[4]))/2};function zn(t){return t.includes("scale")?1:0}function Kn(t,e){if(!t||"none"===t)return zn(e);const n=t.match(/^matrix3d\(([-\d.e\s,]+)\)$/u);let i,s;if(n)i=Xn,s=n;else{const e=t.match(/^matrix\(([-\d.e\s,]+)\)$/u);i=$n,s=e}if(!s)return zn(e);const r=i[e],a=s[1].split(",").map(Yn);return"function"==typeof r?r(a):a[r]}function Yn(t){return parseFloat(t.trim())}const Hn=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],qn=(()=>new Set(Hn))(),Gn=t=>t===H||t===ht,Zn=new Set(["x","y","z"]),Jn=Hn.filter(t=>!Zn.has(t));const Qn={width:({x:t},{paddingLeft:e="0",paddingRight:n="0",boxSizing:i})=>{const s=t.max-t.min;return"border-box"===i?s:s-parseFloat(e)-parseFloat(n)},height:({y:t},{paddingTop:e="0",paddingBottom:n="0",boxSizing:i})=>{const s=t.max-t.min;return"border-box"===i?s:s-parseFloat(e)-parseFloat(n)},top:(t,{top:e})=>parseFloat(e),left:(t,{left:e})=>parseFloat(e),bottom:({y:t},{top:e})=>parseFloat(e)+(t.max-t.min),right:({x:t},{left:e})=>parseFloat(e)+(t.max-t.min),x:(t,{transform:e})=>Kn(e,"x"),y:(t,{transform:e})=>Kn(e,"y")};Qn.translateX=Qn.x,Qn.translateY=Qn.y;const ti=new Set;let ei=!1,ni=!1,ii=!1;function si(){if(ni){const t=Array.from(ti).filter(t=>t.needsMeasurement),e=new Set(t.map(t=>t.element)),n=new Map;e.forEach(t=>{const e=function(t){const e=[];return Jn.forEach(n=>{const i=t.getValue(n);void 0!==i&&(e.push([n,i.get()]),i.set(n.startsWith("scale")?1:0))}),e}(t);e.length&&(n.set(t,e),t.render())}),t.forEach(t=>t.measureInitialState()),e.forEach(t=>{t.render();const e=n.get(t);e&&e.forEach(([e,n])=>{t.getValue(e)?.set(n)})}),t.forEach(t=>t.measureEndState()),t.forEach(t=>{void 0!==t.suspendedScrollY&&window.scrollTo(0,t.suspendedScrollY)})}ni=!1,ei=!1,ti.forEach(t=>t.complete(ii)),ti.clear()}function ri(){ti.forEach(t=>{t.readKeyframes(),t.needsMeasurement&&(ni=!0)})}class ai{constructor(t,e,n,i,s,r=!1){this.state="pending",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...t],this.onComplete=e,this.name=n,this.motionValue=i,this.element=s,this.isAsync=r}scheduleResolve(){this.state="scheduled",this.isAsync?(ti.add(this),ei||(ei=!0,c.read(ri),c.resolveKeyframes(si))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:t,name:e,element:n,motionValue:i}=this;if(null===t[0]){const s=i?.get(),r=t[t.length-1];if(void 0!==s)t[0]=s;else if(n&&e){const i=n.readValue(e,r);null!=i&&(t[0]=i)}void 0===t[0]&&(t[0]=r),i&&void 0===s&&i.set(t[0])}!function(t){for(let e=1;e<t.length;e++)t[e]??(t[e]=t[e-1])}(t)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(t=!1){this.state="complete",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,t),ti.delete(this)}cancel(){"scheduled"===this.state&&(ti.delete(this),this.state="pending")}resume(){"pending"===this.state&&this.scheduleResolve()}}function oi(t,e,n){(t=>t.startsWith("--"))(e)?t.style.setProperty(e,n):t.style[e]=n}const hi=y(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch(t){return!1}return!0},"linearEasing"),li=([t,e,n,i])=>`cubic-bezier(${t}, ${e}, ${n}, ${i})`,ci={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:li([0,.65,.55,1]),circOut:li([.55,0,1,.45]),backIn:li([.31,.01,.66,-.59]),backOut:li([.33,1.53,.69,.99])};function ui(t,e){return t?"function"==typeof t?hi()?Te(t,e):"ease-out":Cn(t)?li(t):Array.isArray(t)?t.map(t=>ui(t,e)||ci.easeOut):ci[t]:void 0}function di(t,e,n,{delay:i=0,duration:s=300,repeat:r=0,repeatType:a="loop",ease:o="easeOut",times:l}={},c=void 0){const u={[e]:n};l&&(u.offset=l);const d=ui(o,s);Array.isArray(d)&&(u.easing=d),h.value&&ln.waapi++;const p={delay:i,duration:s,easing:Array.isArray(d)?"linear":d,fill:"both",iterations:r+1,direction:"reverse"===a?"alternate":"normal"};c&&(p.pseudoElement=c);const f=t.animate(u,p);return h.value&&f.finished.finally(()=>{ln.waapi--}),f}class pi extends Bn{constructor(t){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!t)return;const{element:e,name:n,keyframes:i,pseudoElement:s,allowFlatten:r=!1,finalKeyframe:a,onComplete:o}=t;this.isPseudoElement=Boolean(s),this.allowFlatten=r,this.options=t,t.type;const h=function({type:t,...e}){return ze(t)&&hi()?t.applyToOptions(e):(e.duration??(e.duration=300),e.ease??(e.ease="easeOut"),e)}(t);this.animation=di(e,n,i,h,s),!1===h.autoplay&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!s){const t=Fn(i,this.options,a,this.speed);this.updateMotionValue&&this.updateMotionValue(t),oi(e,n,t),this.animation.cancel()}o?.(),this.notifyFinished()}}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),"finished"===this.state&&this.updateFinished())}pause(){this.animation.pause()}complete(){this.animation.finish?.()}cancel(){try{this.animation.cancel()}catch(t){}}stop(){if(this.isStopped)return;this.isStopped=!0;const{state:t}=this;"idle"!==t&&"finished"!==t&&(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){const t=this.options?.element;!this.isPseudoElement&&t?.isConnected&&this.animation.commitStyles?.()}get duration(){const t=this.animation.effect?.getComputedTiming?.().duration||0;return we(Number(t))}get iterationDuration(){const{delay:t=0}=this.options||{};return this.duration+we(t)}get time(){return we(Number(this.animation.currentTime)||0)}set time(t){const e=null!==this.finishedTime;this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=be(t),e&&this.animation.pause()}get speed(){return this.animation.playbackRate}set speed(t){t<0&&(this.finishedTime=null),this.animation.playbackRate=t}get state(){return null!==this.finishedTime?"finished":this.animation.playState}get startTime(){return this.manualStartTime??Number(this.animation.startTime)}set startTime(t){this.manualStartTime=this.animation.startTime=t}attachTimeline({timeline:t,rangeStart:e,rangeEnd:n,observe:i}){return this.allowFlatten&&this.animation.effect?.updateTiming({easing:"linear"}),this.animation.onfinish=null,t&&v()?(this.animation.timeline=t,e&&(this.animation.rangeStart=e),n&&(this.animation.rangeEnd=n),r):i(this)}}const fi={anticipate:Mn,backInOut:xn,circInOut:En};function mi(t){"string"==typeof t.ease&&t.ease in fi&&(t.ease=fi[t.ease])}class gi extends pi{constructor(t){mi(t),_n(t),super(t),void 0!==t.startTime&&!1!==t.autoplay&&(this.startTime=t.startTime),this.options=t}updateMotionValue(t){const{motionValue:e,onUpdate:n,onComplete:i,element:s,...r}=this.options;if(!e)return;if(void 0!==t)return void e.set(t);const a=new On({...r,autoplay:!1}),o=Math.max(10,me.now()-this.startTime),h=j(0,10,o-10),l=a.sample(o).value,{name:c}=this.options;s&&c&&oi(s,c,l),e.setWithVelocity(a.sample(Math.max(0,o-h)).value,l,h),a.stop()}}const yi=(t,e)=>"zIndex"!==e&&(!("number"!=typeof t&&!Array.isArray(t))||!("string"!=typeof t||!Tt.test(t)&&"0"!==t||t.startsWith("url(")));function vi(t){t.duration=0,t.type="keyframes"}const bi=new Set(["opacity","clipPath","filter","transform"]),wi=m(()=>Object.hasOwnProperty.call(Element.prototype,"animate"));class Ti extends Bn{constructor({autoplay:t=!0,delay:e=0,type:n="keyframes",repeat:i=0,repeatDelay:s=0,repeatType:r="loop",keyframes:a,name:o,motionValue:h,element:l,...c}){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=me.now();const u={autoplay:t,delay:e,type:n,repeat:i,repeatDelay:s,repeatType:r,name:o,motionValue:h,element:l,...c},d=l?.KeyframeResolver||ai;this.keyframeResolver=new d(a,(t,e,n)=>this.onKeyframesResolved(t,e,u,!n),o,h,l),this.keyframeResolver?.scheduleResolve()}onKeyframesResolved(t,e,n,i){this.keyframeResolver=void 0;const{name:s,type:o,velocity:h,delay:l,isHandoff:c,onUpdate:u}=n;this.resolvedAt=me.now();let d=!0;(function(t,e,n,i){const s=t[0];if(null===s)return!1;if("display"===e||"visibility"===e)return!0;const r=t[t.length-1],a=yi(s,e),o=yi(r,e);return!(!a||!o)&&(function(t){const e=t[0];if(1===t.length)return!0;for(let n=0;n<t.length;n++)if(t[n]!==e)return!0}(t)||("spring"===n||ze(n))&&i)})(t,s,o,h)||(d=!1,!a.instantAnimations&&l||u?.(Fn(t,n,e)),t[0]=t[t.length-1],vi(n),n.repeat=0);const p={startTime:i?this.resolvedAt&&this.resolvedAt-this.createdAt>40?this.resolvedAt:this.createdAt:void 0,finalKeyframe:e,...n,keyframes:t},f=d&&!c&&function(t){const{motionValue:e,name:n,repeatDelay:i,repeatType:s,damping:r,type:a}=t,o=e?.owner?.current;if(!(o instanceof HTMLElement))return!1;const{onUpdate:h,transformTemplate:l}=e.owner.getProps();return wi()&&n&&bi.has(n)&&("transform"!==n||!l)&&!h&&!i&&"mirror"!==s&&0!==r&&"inertia"!==a}(p),m=p.motionValue?.owner?.current,g=f?new gi({...p,element:m}):new On(p);g.finished.then(()=>{this.notifyFinished()}).catch(r),this.pendingTimeline&&(this.stopTimeline=g.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=g}get finished(){return this._animation?this.animation.finished:this._finished}then(t,e){return this.finished.finally(t).then(()=>{})}get animation(){return this._animation||(this.keyframeResolver?.resume(),ii=!0,ri(),si(),ii=!1),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(t){this.animation.time=t}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(t){this.animation.speed=t}get startTime(){return this.animation.startTime}attachTimeline(t){return this._animation?this.stopTimeline=this.animation.attachTimeline(t):this.pendingTimeline=t,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){this._animation&&this.animation.cancel(),this.keyframeResolver?.cancel()}}function xi(t,e){if(t?.inherit&&e){const{inherit:n,...i}=t;return{...e,...i}}return t}function Mi(t,e){const n=t?.[e]??t?.default??t;return n!==t?xi(n,t):n}const Ai={type:"spring",stiffness:500,damping:25,restSpeed:10},Si={type:"keyframes",duration:.8},Ei={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},Ci=(t,{keyframes:e})=>e.length>2?Si:qn.has(t)?t.startsWith("scale")?{type:"spring",stiffness:550,damping:0===e[1]?2*Math.sqrt(550):30,restSpeed:10}:Ai:Ei,Vi=t=>null!==t;const ki=(t,e,n,i={},s,r)=>o=>{const h=Mi(i,t)||{},l=h.delay||i.delay||0;let{elapsed:u=0}=i;u-=be(l);const d={keyframes:Array.isArray(n)?n:[null,n],ease:"easeOut",velocity:e.getVelocity(),...h,delay:-u,onUpdate:t=>{e.set(t),h.onUpdate&&h.onUpdate(t)},onComplete:()=>{o(),h.onComplete&&h.onComplete()},name:t,motionValue:e,element:r?void 0:s};(function({when:t,delay:e,delayChildren:n,staggerChildren:i,staggerDirection:s,repeat:r,repeatType:a,repeatDelay:o,from:h,elapsed:l,...c}){return!!Object.keys(c).length})(h)||Object.assign(d,Ci(t,d)),d.duration&&(d.duration=be(d.duration)),d.repeatDelay&&(d.repeatDelay=be(d.repeatDelay)),void 0!==d.from&&(d.keyframes[0]=d.from);let p=!1;if((!1===d.type||0===d.duration&&!d.repeatDelay)&&(vi(d),0===d.delay&&(p=!0)),(a.instantAnimations||a.skipAnimations||s?.shouldSkipAnimations)&&(p=!0,vi(d),d.delay=0),d.allowFlatten=!h.type&&!h.ease,p&&!r&&void 0!==e.get()){const t=function(t,{repeat:e,repeatType:n="loop"},i){const s=t.filter(Vi),r=e&&"loop"!==n&&e%2==1?0:s.length-1;return r&&void 0!==i?i:s[r]}(d.keyframes,h);if(void 0!==t)return void c.update(()=>{d.onUpdate(t),d.onComplete()})}return h.isSync?new On(d):new Ti(d)};const Pi=new WeakMap,Ri=new Set(["width","height","top","left","right","bottom",...Hn]);function Fi(t){const e=[{},{}];return t?.values.forEach((t,n)=>{e[0][n]=t.get(),e[1][n]=t.getVelocity()}),e}function Di(t,e,n,i){if("function"==typeof e){const[s,r]=Fi(i);e=e(void 0!==n?n:t.custom,s,r)}if("string"==typeof e&&(e=t.variants&&t.variants[e]),"function"==typeof e){const[s,r]=Fi(i);e=e(void 0!==n?n:t.custom,s,r)}return e}function _i(t,e,n){t.hasValue(e)?t.getValue(e).set(n):t.addValue(e,ve(n))}function Bi(t){return(t=>Array.isArray(t))(t)?t[t.length-1]||0:t}function Ii(t,e){const n=function(t,e,n){const i=t.getProps();return Di(i,e,void 0!==n?n:i.custom,t)}(t,e);let{transitionEnd:i={},transition:s={},...r}=n||{};r={...r,...i};for(const e in r){_i(t,e,Bi(r[e]))}}function Oi(t,e){const n=t.getValue("willChange");if(i=n,Boolean(Ke(i)&&i.add))return n.add(e);if(!n&&a.WillChange){const n=new a.WillChange("auto");t.addValue("willChange",n),n.add(e)}var i}function Li(t){return t.replace(/([A-Z])/g,t=>`-${t.toLowerCase()}`)}const Wi="data-"+Li("framerAppearId");function $i(t){return t.props[Wi]}function ji({protectedKeys:t,needsAnimating:e},n){const i=t.hasOwnProperty(n)&&!0!==e[n];return e[n]=!1,i}function Ni(t,e,{delay:n=0,transitionOverride:i,type:s}={}){let{transition:r,transitionEnd:a,...o}=e;const h=t.getDefaultTransition();r=r?xi(r,h):h;const l=r?.reduceMotion;i&&(r=i);const u=[],d=s&&t.animationState&&t.animationState.getState()[s];for(const e in o){const i=t.getValue(e,t.latestValues[e]??null),s=o[e];if(void 0===s||d&&ji(d,e))continue;const a={delay:n,...Mi(r||{},e)},h=i.get();if(void 0!==h&&!i.isAnimating&&!Array.isArray(s)&&s===h&&!a.velocity)continue;let p=!1;if(window.MotionHandoffAnimation){const n=$i(t);if(n){const t=window.MotionHandoffAnimation(n,e,c);null!==t&&(a.startTime=t,p=!0)}}Oi(t,e);const f=l??t.shouldReduceMotion;i.start(ki(e,i,s,f&&Ri.has(e)?{type:!1}:a,t,p));const m=i.animation;m&&u.push(m)}if(a){const e=()=>c.update(()=>{a&&Ii(t,a)});u.length?Promise.all(u).then(e):e()}return u}const Ui=new Set(["brightness","contrast","saturate","opacity"]);function Xi(t){const[e,n]=t.slice(0,-1).split("(");if("drop-shadow"===e)return t;const[i]=n.match(J)||[];if(!i)return t;const s=n.replace(i,"");let r=Ui.has(e)?1:0;return i!==n&&(r*=100),e+"("+r+s+")"}const zi=/\b([a-z-]*)\(.*?\)/gu,Ki={...Tt,getAnimatableNone:t=>{const e=t.match(zi);return e?e.map(Xi).join(" "):t}},Yi={...Tt,getAnimatableNone:t=>{const e=Tt.parse(t);return Tt.createTransformer(t)(e.map(t=>"number"==typeof t?0:"object"==typeof t?{...t,alpha:1}:t))}},Hi={...H,transform:Math.round},qi={borderWidth:ht,borderTopWidth:ht,borderRightWidth:ht,borderBottomWidth:ht,borderLeftWidth:ht,borderRadius:ht,borderTopLeftRadius:ht,borderTopRightRadius:ht,borderBottomRightRadius:ht,borderBottomLeftRadius:ht,width:ht,maxWidth:ht,height:ht,maxHeight:ht,top:ht,right:ht,bottom:ht,left:ht,inset:ht,insetBlock:ht,insetBlockStart:ht,insetBlockEnd:ht,insetInline:ht,insetInlineStart:ht,insetInlineEnd:ht,padding:ht,paddingTop:ht,paddingRight:ht,paddingBottom:ht,paddingLeft:ht,paddingBlock:ht,paddingBlockStart:ht,paddingBlockEnd:ht,paddingInline:ht,paddingInlineStart:ht,paddingInlineEnd:ht,margin:ht,marginTop:ht,marginRight:ht,marginBottom:ht,marginLeft:ht,marginBlock:ht,marginBlockStart:ht,marginBlockEnd:ht,marginInline:ht,marginInlineStart:ht,marginInlineEnd:ht,fontSize:ht,backgroundPositionX:ht,backgroundPositionY:ht,...{rotate:at,rotateX:at,rotateY:at,rotateZ:at,scale:G,scaleX:G,scaleY:G,scaleZ:G,skew:at,skewX:at,skewY:at,distance:ht,translateX:ht,translateY:ht,translateZ:ht,x:ht,y:ht,z:ht,perspective:ht,transformPerspective:ht,opacity:q,originX:ut,originY:ut,originZ:ht},zIndex:Hi,fillOpacity:q,strokeOpacity:q,numOctaves:Hi},Gi={...qi,color:pt,backgroundColor:pt,outlineColor:pt,fill:pt,stroke:pt,borderColor:pt,borderTopColor:pt,borderRightColor:pt,borderBottomColor:pt,borderLeftColor:pt,filter:Ki,WebkitFilter:Ki,mask:Yi,WebkitMask:Yi},Zi=t=>Gi[t],Ji=()=>({x:{min:0,max:0},y:{min:0,max:0}}),Qi=t=>e=>e.test(t),ts=[H,ht,ot,at,ct,lt,{test:t=>"auto"===t,parse:t=>t}],es=t=>ts.find(Qi(t)),ns=t=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(t),is=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function ss(t,e,n=1){const[i,s]=function(t){const e=is.exec(t);if(!e)return[,];const[,n,i,s]=e;return[`--${n??i}`,s]}(t);if(!i)return;const r=window.getComputedStyle(e).getPropertyValue(i);if(r){const t=r.trim();return ns(t)?parseFloat(t):t}return z(s)?ss(s,e,n+1):s}const rs=t=>/^0[^.\s]+$/u.test(t);function as(t){return"number"==typeof t?0===t:null===t||("none"===t||"0"===t||rs(t))}const os=new Set([Ki,Yi]);function hs(t,e){let n=Zi(t);return os.has(n)||(n=Tt),n.getAnimatableNone?n.getAnimatableNone(e):void 0}const ls=new Set(["auto","none","0"]);class cs extends ai{constructor(t,e,n,i,s){super(t,e,n,i,s,!0)}readKeyframes(){const{unresolvedKeyframes:t,element:e,name:n}=this;if(!e||!e.current)return;super.readKeyframes();for(let n=0;n<t.length;n++){let i=t[n];if("string"==typeof i&&(i=i.trim(),z(i))){const s=ss(i,e.current);void 0!==s&&(t[n]=s),n===t.length-1&&(this.finalKeyframe=i)}}if(this.resolveNoneKeyframes(),!Ri.has(n)||2!==t.length)return;const[i,s]=t,r=es(i),a=es(s);if(Y(i)!==Y(s)&&Qn[n])this.needsMeasurement=!0;else if(r!==a)if(Gn(r)&&Gn(a))for(let e=0;e<t.length;e++){const n=t[e];"string"==typeof n&&(t[e]=parseFloat(n))}else Qn[n]&&(this.needsMeasurement=!0)}resolveNoneKeyframes(){const{unresolvedKeyframes:t,name:e}=this,n=[];for(let e=0;e<t.length;e++)(null===t[e]||as(t[e]))&&n.push(e);n.length&&function(t,e,n){let i,s=0;for(;s<t.length&&!i;){const e=t[s];"string"==typeof e&&!ls.has(e)&&vt(e).values.length&&(i=t[s]),s++}if(i&&n)for(const s of e)t[s]=hs(n,i)}(t,n,e)}measureInitialState(){const{element:t,unresolvedKeyframes:e,name:n}=this;if(!t||!t.current)return;"height"===n&&(this.suspendedScrollY=window.pageYOffset),this.measuredOrigin=Qn[n](t.measureViewportBox(),window.getComputedStyle(t.current)),e[0]=this.measuredOrigin;const i=e[e.length-1];void 0!==i&&t.getValue(n,i).jump(i,!1)}measureEndState(){const{element:t,name:e,unresolvedKeyframes:n}=this;if(!t||!t.current)return;const i=t.getValue(e);i&&i.jump(this.measuredOrigin,!1);const s=n.length-1,r=n[s];n[s]=Qn[e](t.measureViewportBox(),window.getComputedStyle(t.current)),null!==r&&void 0===this.finalKeyframe&&(this.finalKeyframe=r),this.removedTransforms?.length&&this.removedTransforms.forEach(([e,n])=>{t.getValue(e).set(n)}),this.resolveNoneKeyframes()}}const us=new Set(["opacity","clipPath","filter","transform"]),{schedule:ds,cancel:ps}=l(queueMicrotask,!1),fs=[...ts,pt,Tt];const ms=["initial","animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"];function gs(t){return null!==(e=t.animate)&&"object"==typeof e&&"function"==typeof e.start||ms.some(e=>function(t){return"string"==typeof t||Array.isArray(t)}(t[e]));var e}const ys={current:null},vs={current:!1},bs="undefined"!=typeof window;const ws=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];let Ts={};class xs{scrapeMotionValuesFromProps(t,e,n){return{}}constructor({parent:t,props:e,presenceContext:n,reducedMotionConfig:i,skipAnimations:s,blockInitialAnimation:r,visualState:a},o={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.shouldSkipAnimations=!1,this.values=new Map,this.KeyframeResolver=ai,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.hasBeenMounted=!1,this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const t=me.now();this.renderScheduledAt<t&&(this.renderScheduledAt=t,c.render(this.render,!1,!0))};const{latestValues:h,renderState:l}=a;this.latestValues=h,this.baseTarget={...h},this.initialValues=e.initial?{...h}:{},this.renderState=l,this.parent=t,this.props=e,this.presenceContext=n,this.depth=t?t.depth+1:0,this.reducedMotionConfig=i,this.skipAnimationsConfig=s,this.options=o,this.blockInitialAnimation=Boolean(r),this.isControllingVariants=gs(e),this.isVariantNode=function(t){return Boolean(gs(t)||t.variants)}(e),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=Boolean(t&&t.current);const{willChange:u,...d}=this.scrapeMotionValuesFromProps(e,{},this);for(const t in d){const e=d[t];void 0!==h[t]&&Ke(e)&&e.set(h[t])}}mount(t){if(this.hasBeenMounted)for(const t in this.initialValues)this.values.get(t)?.jump(this.initialValues[t]),this.latestValues[t]=this.initialValues[t];this.current=t,Pi.set(t,this),this.projection&&!this.projection.instance&&this.projection.mount(t),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((t,e)=>this.bindToMotionValue(e,t)),"never"===this.reducedMotionConfig?this.shouldReduceMotion=!1:"always"===this.reducedMotionConfig?this.shouldReduceMotion=!0:(vs.current||function(){if(vs.current=!0,bs)if(window.matchMedia){const t=window.matchMedia("(prefers-reduced-motion)"),e=()=>ys.current=t.matches;t.addEventListener("change",e),e()}else ys.current=!1}(),this.shouldReduceMotion=ys.current),this.shouldSkipAnimations=this.skipAnimationsConfig??!1,this.parent?.addChild(this),this.update(this.props,this.presenceContext),this.hasBeenMounted=!0}unmount(){this.projection&&this.projection.unmount(),u(this.notifyUpdate),u(this.render),this.valueSubscriptions.forEach(t=>t()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent?.removeChild(this);for(const t in this.events)this.events[t].clear();for(const t in this.features){const e=this.features[t];e&&(e.unmount(),e.isMounted=!1)}this.current=null}addChild(t){this.children.add(t),this.enteringChildren??(this.enteringChildren=new Set),this.enteringChildren.add(t)}removeChild(t){this.children.delete(t),this.enteringChildren&&this.enteringChildren.delete(t)}bindToMotionValue(t,e){if(this.valueSubscriptions.has(t)&&this.valueSubscriptions.get(t)(),e.accelerate&&us.has(t)&&this.current instanceof HTMLElement){const{factory:n,keyframes:i,times:s,ease:r,duration:a}=e.accelerate,o=new pi({element:this.current,name:t,keyframes:i,times:s,ease:r,duration:be(a)}),h=n(o);return void this.valueSubscriptions.set(t,()=>{h(),o.cancel()})}const n=qn.has(t);n&&this.onBindTransform&&this.onBindTransform();const i=e.on("change",e=>{this.latestValues[t]=e,this.props.onUpdate&&c.preRender(this.notifyUpdate),n&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()});let s;"undefined"!=typeof window&&window.MotionCheckAppearSync&&(s=window.MotionCheckAppearSync(this,t,e)),this.valueSubscriptions.set(t,()=>{i(),s&&s(),e.owner&&e.stop()})}sortNodePosition(t){return this.current&&this.sortInstanceNodePosition&&this.type===t.type?this.sortInstanceNodePosition(this.current,t.current):0}updateFeatures(){let t="animation";for(t in Ts){const e=Ts[t];if(!e)continue;const{isEnabled:n,Feature:i}=e;if(!this.features[t]&&i&&n(this.props)&&(this.features[t]=new i(this)),this.features[t]){const e=this.features[t];e.isMounted?e.update():(e.mount(),e.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):{x:{min:0,max:0},y:{min:0,max:0}}}getStaticValue(t){return this.latestValues[t]}setStaticValue(t,e){this.latestValues[t]=e}update(t,e){(t.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=t,this.prevPresenceContext=this.presenceContext,this.presenceContext=e;for(let e=0;e<ws.length;e++){const n=ws[e];this.propEventSubscriptions[n]&&(this.propEventSubscriptions[n](),delete this.propEventSubscriptions[n]);const i=t["on"+n];i&&(this.propEventSubscriptions[n]=this.on(n,i))}this.prevMotionValues=function(t,e,n){for(const i in e){const s=e[i],r=n[i];if(Ke(s))t.addValue(i,s);else if(Ke(r))t.addValue(i,ve(s,{owner:t}));else if(r!==s)if(t.hasValue(i)){const e=t.getValue(i);!0===e.liveStyle?e.jump(s):e.hasAnimated||e.set(s)}else{const e=t.getStaticValue(i);t.addValue(i,ve(void 0!==e?e:s,{owner:t}))}}for(const i in n)void 0===e[i]&&t.removeValue(i);return e}(this,this.scrapeMotionValuesFromProps(t,this.prevProps||{},this),this.prevMotionValues),this.handleChildMotionValue&&this.handleChildMotionValue()}getProps(){return this.props}getVariant(t){return this.props.variants?this.props.variants[t]:void 0}getDefaultTransition(){return this.props.transition}getTransformPagePoint(){return this.props.transformPagePoint}getClosestVariantNode(){return this.isVariantNode?this:this.parent?this.parent.getClosestVariantNode():void 0}addVariantChild(t){const e=this.getClosestVariantNode();if(e)return e.variantChildren&&e.variantChildren.add(t),()=>e.variantChildren.delete(t)}addValue(t,e){const n=this.values.get(t);e!==n&&(n&&this.removeValue(t),this.bindToMotionValue(t,e),this.values.set(t,e),this.latestValues[t]=e.get())}removeValue(t){this.values.delete(t);const e=this.valueSubscriptions.get(t);e&&(e(),this.valueSubscriptions.delete(t)),delete this.latestValues[t],this.removeValueFromRenderState(t,this.renderState)}hasValue(t){return this.values.has(t)}getValue(t,e){if(this.props.values&&this.props.values[t])return this.props.values[t];let n=this.values.get(t);return void 0===n&&void 0!==e&&(n=ve(null===e?void 0:e,{owner:this}),this.addValue(t,n)),n}readValue(t,e){let n=void 0===this.latestValues[t]&&this.current?this.getBaseTargetFromProps(this.props,t)??this.readValueFromInstance(this.current,t,this.options):this.latestValues[t];var i;return null!=n&&("string"==typeof n&&(ns(n)||rs(n))?n=parseFloat(n):(i=n,!fs.find(Qi(i))&&Tt.test(e)&&(n=hs(t,e))),this.setBaseTarget(t,Ke(n)?n.get():n)),Ke(n)?n.get():n}setBaseTarget(t,e){this.baseTarget[t]=e}getBaseTarget(t){const{initial:e}=this.props;let n;if("string"==typeof e||"object"==typeof e){const i=Di(this.props,e,this.presenceContext?.custom);i&&(n=i[t])}if(e&&void 0!==n)return n;const i=this.getBaseTargetFromProps(this.props,t);return void 0===i||Ke(i)?void 0!==this.initialValues[t]&&void 0===n?void 0:this.baseTarget[t]:i}on(t,e){return this.events[t]||(this.events[t]=new de),this.events[t].add(e)}notify(t,...e){this.events[t]&&this.events[t].notify(...e)}scheduleRenderMicrotask(){ds.render(this.render)}}class Ms extends xs{constructor(){super(...arguments),this.KeyframeResolver=cs}sortInstanceNodePosition(t,e){return 2&t.compareDocumentPosition(e)?1:-1}getBaseTargetFromProps(t,e){const n=t.style;return n?n[e]:void 0}removeValueFromRenderState(t,{vars:e,style:n}){delete e[t],delete n[t]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:t}=this.props;Ke(t)&&(this.childSubscription=t.on("change",t=>{this.current&&(this.current.textContent=`${t}`)}))}}const As=(t,e)=>e&&"number"==typeof t?e.transform(t):t,Ss={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},Es=Hn.length;function Cs(t,e,n){const{style:i,vars:s,transformOrigin:r}=t;let a=!1,o=!1;for(const t in e){const n=e[t];if(qn.has(t))a=!0;else if(U(t))s[t]=n;else{const e=As(n,qi[t]);t.startsWith("origin")?(o=!0,r[t]=e):i[t]=e}}if(e.transform||(a||n?i.transform=function(t,e,n){let i="",s=!0;for(let r=0;r<Es;r++){const a=Hn[r],o=t[a];if(void 0===o)continue;let h=!0;if("number"==typeof o)h=o===(a.startsWith("scale")?1:0);else{const t=parseFloat(o);h=a.startsWith("scale")?1===t:0===t}if(!h||n){const t=As(o,qi[a]);h||(s=!1,i+=`${Ss[a]||a}(${t}) `),n&&(e[a]=t)}}return i=i.trim(),n?i=n(e,s?"":i):s&&(i="none"),i}(e,t.transform,n):i.transform&&(i.transform="none")),o){const{originX:t="50%",originY:e="50%",originZ:n=0}=r;i.transformOrigin=`${t} ${e} ${n}`}}const Vs={offset:"stroke-dashoffset",array:"stroke-dasharray"},ks={offset:"strokeDashoffset",array:"strokeDasharray"};const Ps=["offsetDistance","offsetPath","offsetRotate","offsetAnchor"];function Rs(t,{attrX:e,attrY:n,attrScale:i,pathLength:s,pathSpacing:r=1,pathOffset:a=0,...o},h,l,c){if(Cs(t,o,l),h)return void(t.style.viewBox&&(t.attrs.viewBox=t.style.viewBox));t.attrs=t.style,t.style={};const{attrs:u,style:d}=t;u.transform&&(d.transform=u.transform,delete u.transform),(d.transform||u.transformOrigin)&&(d.transformOrigin=u.transformOrigin??"50% 50%",delete u.transformOrigin),d.transform&&(d.transformBox=c?.transformBox??"fill-box",delete u.transformBox);for(const t of Ps)void 0!==u[t]&&(d[t]=u[t],delete u[t]);void 0!==e&&(u.x=e),void 0!==n&&(u.y=n),void 0!==i&&(u.scale=i),void 0!==s&&function(t,e,n=1,i=0,s=!0){t.pathLength=1;const r=s?Vs:ks;t[r.offset]=""+-i,t[r.array]=`${e} ${n}`}(u,s,r,a,!1)}const Fs=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function Ds(t,{style:e,vars:n},i,s){const r=t.style;let a;for(a in e)r[a]=e[a];for(a in s?.applyProjectionStyles(r,i),n)r.setProperty(a,n[a])}function _s(t,e){return e.max===e.min?0:t/(e.max-e.min)*100}const Bs={correct:(t,e)=>{if(!e.target)return t;if("string"==typeof t){if(!ht.test(t))return t;t=parseFloat(t)}return`${_s(t,e.target.x)}% ${_s(t,e.target.y)}%`}},Is={correct:(t,{treeScale:e,projectionDelta:n})=>{const i=t,s=Tt.parse(t);if(s.length>5)return i;const r=Tt.createTransformer(t),a="number"!=typeof s[0]?1:0,o=n.x.scale*e.x,h=n.y.scale*e.y;s[0+a]/=o,s[1+a]/=h;const l=At(o,h,.5);return"number"==typeof s[2+a]&&(s[2+a]/=l),"number"==typeof s[3+a]&&(s[3+a]/=l),r(s)}};const Os={borderRadius:{...Bs,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:Bs,borderTopRightRadius:Bs,borderBottomLeftRadius:Bs,borderBottomRightRadius:Bs,boxShadow:Is};function Ls(t,{layout:e,layoutId:n}){return qn.has(t)||t.startsWith("origin")||(e||void 0!==n)&&(!!Os[t]||"opacity"===t)}function Ws(t,e,n){const i=t.style,s=e?.style,r={};if(!i)return r;for(const e in i)(Ke(i[e])||s&&Ke(s[e])||Ls(e,t)||void 0!==n?.getValue(e)?.liveStyle)&&(r[e]=i[e]);return r}class $s extends Ms{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=Ji}getBaseTargetFromProps(t,e){return t[e]}readValueFromInstance(t,e){if(qn.has(e)){const t=Zi(e);return t&&t.default||0}return e=Fs.has(e)?e:Li(e),t.getAttribute(e)}scrapeMotionValuesFromProps(t,e,n){return function(t,e,n){const i=Ws(t,e,n);for(const n in t)(Ke(t[n])||Ke(e[n]))&&(i[-1!==Hn.indexOf(n)?"attr"+n.charAt(0).toUpperCase()+n.substring(1):n]=t[n]);return i}(t,e,n)}build(t,e,n){Rs(t,e,this.isSVGTag,n.transformTemplate,n.style)}renderInstance(t,e,n,i){!function(t,e,n,i){Ds(t,e,void 0,i);for(const n in e.attrs)t.setAttribute(Fs.has(n)?n:Li(n),e.attrs[n])}(t,e,0,i)}mount(t){var e;this.isSVGTag="string"==typeof(e=t.tagName)&&"svg"===e.toLowerCase(),super.mount(t)}}function js(t,e){return function({top:t,left:e,right:n,bottom:i}){return{x:{min:e,max:n},y:{min:t,max:i}}}(function(t,e){if(!e)return t;const n=e({x:t.left,y:t.top}),i=e({x:t.right,y:t.bottom});return{top:n.y,left:n.x,bottom:i.y,right:i.x}}(t.getBoundingClientRect(),e))}class Ns extends Ms{constructor(){super(...arguments),this.type="html",this.renderInstance=Ds}readValueFromInstance(t,e){if(qn.has(e))return this.projection?.isProjecting?zn(e):((t,e)=>{const{transform:n="none"}=getComputedStyle(t);return Kn(n,e)})(t,e);{const i=(n=t,window.getComputedStyle(n)),s=(U(e)?i.getPropertyValue(e):i[e])||0;return"string"==typeof s?s.trim():s}var n}measureInstanceViewportBox(t,{transformPagePoint:e}){return js(t,e)}build(t,e,n){Cs(t,e,n.transformTemplate)}scrapeMotionValuesFromProps(t,e,n){return Ws(t,e,n)}}class Us extends xs{constructor(){super(...arguments),this.type="object"}readValueFromInstance(t,e){if(function(t,e){return t in e}(e,t)){const n=t[e];if("string"==typeof n||"number"==typeof n)return n}}getBaseTargetFromProps(){}removeValueFromRenderState(t,e){delete e.output[t]}measureInstanceViewportBox(){return{x:{min:0,max:0},y:{min:0,max:0}}}build(t,e){Object.assign(t.output,e)}renderInstance(t,{output:e}){Object.assign(t,e)}sortInstanceNodePosition(){return 0}}function Xs(t){const e={presenceContext:null,props:{},visualState:{renderState:{transform:{},transformOrigin:{},style:{},vars:{},attrs:{}},latestValues:{}}},n=x(t)&&!function(t){return x(t)&&"svg"===t.tagName}(t)?new $s(e):new Ns(e);n.mount(t),Pi.set(t,n)}function zs(t){const e=new Us({presenceContext:null,props:{},visualState:{renderState:{output:{}},latestValues:{}}});e.mount(t),Pi.set(t,e)}function Ks(t,e,n,i){const s=[];if(function(t,e){return Ke(t)||"number"==typeof t||"string"==typeof t&&!qe(e)}(t,e))s.push(function(t,e,n){const i=Ke(t)?t:ve(t);return i.start(ki("",i,e,n)),i.animation}(t,qe(e)&&e.default||e,n&&n.default||n));else{if(null==t)return s;const r=Ge(t,e,i),a=r.length;Boolean(a);for(let t=0;t<a;t++){const i=r[t],o=i instanceof Element?Xs:zs;Pi.has(i)||o(i);const h=Pi.get(i),l={...n};"delay"in l&&"function"==typeof l.delay&&(l.delay=l.delay(t,a)),s.push(...Ni(h,{...e,transition:l},{}))}}return s}function Ys(t,e,n){const i=[],s=function(t,{defaultTransition:e={},...n}={},i,s){const r=e.duration||.3,a=new Map,o=new Map,h={},l=new Map;let c=0,u=0,d=0;for(let n=0;n<t.length;n++){const a=t[n];if("string"==typeof a){l.set(a,u);continue}if(!Array.isArray(a)){l.set(a.name,Je(u,a.at,c,l));continue}let[p,f,m={}]=a;void 0!==m.at&&(u=Je(u,m.at,c,l));let g=0;const y=(t,n,i,a=0,o=0)=>{const h=rn(t),{delay:l=0,times:c=Lt(h),type:p=e.type||"keyframes",repeat:f,repeatType:m,repeatDelay:y=0,...v}=n;let{ease:b=e.ease||"easeOut",duration:w}=n;const T="function"==typeof l?l(a,o):l,x=h.length,M=ze(p)?p:s?.[p||"keyframes"];if(x<=2&&M){let t=100;if(2===x&&hn(h)){const e=h[1]-h[0];t=Math.abs(e)}const n={...e,...v};void 0!==w&&(n.duration=be(w));const i=Ae(n,t,M);b=i.ease,w=i.duration}w??(w=r);const A=u+T;1===c.length&&0===c[0]&&(c[1]=1);const S=c.length-h.length;if(S>0&&Ot(c,S),1===h.length&&h.unshift(null),f){w=Ze(w,f);const t=[...h],e=[...c];b=Array.isArray(b)?[...b]:[b];const n=[...b];for(let i=0;i<f;i++){h.push(...t);for(let s=0;s<t.length;s++)c.push(e[s]+(i+1)),b.push(0===s?"linear":He(n,s-1))}tn(c,f)}const E=A+w;Qe(i,h,b,c,A,E),g=Math.max(T+w,g),d=Math.max(E,d)};if(Ke(p))y(f,m,sn("default",nn(p,o)));else{const t=Ge(p,f,i,h),e=t.length;for(let n=0;n<e;n++){const i=nn(t[n],o);for(const t in f)y(f[t],an(m,t),sn(t,i),n,e)}}c=u,u+=g}return o.forEach((t,i)=>{for(const s in t){const r=t[s];r.sort(en);const o=[],h=[],l=[];for(let t=0;t<r.length;t++){const{at:e,value:n,easing:i}=r[t];o.push(n),h.push(B(0,d,e)),l.push(i||"easeOut")}0!==h[0]&&(h.unshift(0),o.unshift(o[0]),l.unshift("easeInOut")),1!==h[h.length-1]&&(h.push(1),o.push(null)),a.has(i)||a.set(i,{keyframes:{},transition:{}});const c=a.get(i);c.keyframes[s]=o;const{type:u,...p}=e;c.transition[s]={...p,duration:d,ease:l,times:h,...n}}}),a}(t.map(t=>{if(Array.isArray(t)&&"function"==typeof t[0]){const e=t[0],n=ve(0);return n.on("change",e),1===t.length?[n,[0,1]]:2===t.length?[n,[0,1],t[1]]:[n,t[1],t[2]]}return t}),e,n,{spring:Xe});return s.forEach(({keyframes:t,transition:e},n)=>{i.push(...Ks(n,t,e))}),i}const Hs=function(t={}){const{scope:e,reduceMotion:n}=t;return function(t,i,s){let r,a=[];if(o=t,Array.isArray(o)&&o.some(Array.isArray)){const{onComplete:s,...o}=i||{};"function"==typeof s&&(r=s),a=Ys(t,void 0!==n?{reduceMotion:n,...o}:o,e)}else{const{onComplete:o,...h}=s||{};"function"==typeof o&&(r=o),a=Ks(t,i,void 0!==n?{reduceMotion:n,...h}:h,e)}var o;const h=new ce(a);return r&&h.finished.then(r),e&&(e.animations.push(h),h.finished.then(()=>{ue(e.animations,h)})),h}}();var qs=function(t,e,n,i){return new(n||(n=Promise))(function(s,r){function a(t){try{h(i.next(t))}catch(t){r(t)}}function o(t){try{h(i.throw(t))}catch(t){r(t)}}function h(t){var e;t.done?s(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(a,o)}h((i=i.apply(t,e||[])).next())})};class Gs{constructor(t,e={}){this.engine=null,this.syncedAnimations=[],this.destroyed=!1,this.container=t,this.options=Object.assign({scrub:0},e),this.injectStyles()}injectStyles(){if(Gs.stylesInjected)return;const t=document.createElement("style");t.id="stube-base-styles",t.innerHTML='\n .stube-layer {\n position: absolute;\n inset: 0;\n pointer-events: none;\n display: grid;\n grid-template-areas: "content";\n }\n .stube-layer > * {\n grid-area: content;\n pointer-events: auto;\n }\n /* Alignment Mappings */\n .stube-layer[data-stube-align^="top"] { align-items: start; }\n .stube-layer[data-stube-align^="center"] { align-items: center; }\n .stube-layer[data-stube-align^="bottom"] { align-items: end; }\n \n .stube-layer[data-stube-align$="left"] { justify-items: start; }\n .stube-layer[data-stube-align$="center"] { justify-items: center; }\n .stube-layer[data-stube-align$="right"] { justify-items: end; }\n ',document.head.appendChild(t),Gs.stylesInjected=!0}static initAll(){return qs(this,void 0,void 0,function*(){const t=document.querySelectorAll(".stube-container"),e=[];for(let n=0;n<t.length;n++){const i=t[n],s=new Gs(i,{scrub:.5});yield s.init(),e.push(s)}return e})}init(){return qs(this,void 0,void 0,function*(){if(this.destroyed)return;const t=this.container.querySelector(".stube-canvas");if(!t)return void console.warn("[CoreOrchestrator] No .stube-canvas found inside container.");const e=t.dataset.stubeCanvas||t.getAttribute("data-project");if(!e)return void console.warn('[CoreOrchestrator] No project URL found on .stube-canvas. Use data-stube-canvas="url"');const n=t.dataset.stubeDepthtilt||t.getAttribute("data-stube-depthtilt");null!=n&&(this.options.depthTilt=parseFloat(n)),this.engine=yield this.loadEngine(e,t),this.destroyed||(this.parseAnimatedElements(),this.setupScrollTracking(),this.engine.onFrameChange=(t,e)=>{this.syncTrackingLayers(t),this.onFrameChange&&this.onFrameChange(t,e)},this.engine.onProgressUpdate=t=>{this.syncAnimations(t)})})}loadEngine(t,e){return qs(this,void 0,void 0,function*(){let n;try{if(t.trim().startsWith("{"))n=JSON.parse(t);else{const e=yield fetch(t);if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);n=yield e.json()}}catch(t){throw console.error("[CoreOrchestrator] Failed to load configuration:",t),t}n.settings||(n.settings={baseResolution:{width:1920,height:1080},scrollMode:"vh"}),n.settings.basePath||t.trim().startsWith("{")||(n.settings.basePath=t.substring(0,t.lastIndexOf("/")));const i=new s(n,{scrub:this.options.scrub,depthTilt:this.options.depthTilt});let r=e.querySelector("canvas");return r||(r=document.createElement("canvas"),r.style.width="100%",r.style.height="100%",r.style.display="block",r.style.objectFit="cover",e.appendChild(r)),i.attachCanvas(r),i})}setupScrollTracking(){if(!this.engine)return;const t=this.container.dataset.stubeOffset;let e=["start end","end start"];try{t&&(e=JSON.parse(t))}catch(t){}this.motionScrollCancel=oe(t=>{this.engine&&this.engine.update(t)},{target:this.container,offset:e})}parseAnimatedElements(){this.container.querySelectorAll("[data-stube-animate]").forEach(t=>{try{const e=t.getAttribute("data-stube-animate");if(!e)return;const n=JSON.parse(e),i=Hs(t,n,{duration:1,ease:"linear"});i.pause(),i.time=0,this.syncedAnimations.push(i)}catch(e){console.warn("[CoreOrchestrator] Failed to parse data-stube-animate on element",t,e)}})}syncAnimations(t){for(const e of this.syncedAnimations)e.time=t}syncTrackingLayers(t){if(!this.engine)return;this.container.querySelectorAll("[data-stube-layer-tracking]").forEach(e=>qs(this,void 0,void 0,function*(){const n=e.dataset.stubeLayerTracking;if(!n)return;yield this.engine.loadTrackingData(n);const i=this.engine.getTrackedCoords(n,t);e.style.left=100*i.x+"%",e.style.top=100*i.y+"%"}))}getEngine(){return this.engine}destroy(){this.destroyed=!0,this.motionScrollCancel&&(this.motionScrollCancel(),this.motionScrollCancel=void 0);for(const t of this.syncedAnimations)t.stop();this.syncedAnimations=[],this.engine&&(this.engine.destroy(),this.engine=null),this.onFrameChange=void 0}}Gs.stylesInjected=!1;const Zs=Object.assign(s,{CoreOrchestrator:Gs});return e=e.default})());