{"version":3,"sources":["../src/components/WodniackWorkScroll.tsx","../src/hooks/useSSR.ts","../src/components/HorizontalScroll.tsx","../src/components/OrchestraCubes.tsx","../src/components/OrkenWorldScroll.tsx","../src/components/ParallaxScroll.tsx","../src/components/RadgaHorizontalScroll.tsx","../src/components/ScrollFrameAnimation.tsx","../src/components/ScrollMinimap.tsx","../src/components/SofiHealthScroll.tsx","../src/components/TheFirstTheLastScroll.tsx"],"names":["gsap","ScrollTrigger","jsx","ReactLenis","useRef","useState","useCallback","THREE","useEffect","jsxs","useReducedMotion","cn","header1","header2","Fragment","useScroll","useTransform","motion","isClient","SplitText","THREE2","GLTFLoader"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\";\n\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport Lenis from \"lenis\";\nimport { ReactLenis } from \"lenis/react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport * as THREE from \"three\";\n\n// Import assets - these would normally be real image paths in production\nconst defaultImages = [\n  \"/assets/img1.jpg\",\n  \"/assets/img2.jpg\",\n  \"/assets/img3.jpg\",\n  \"/assets/img4.jpg\",\n  \"/assets/img5.jpg\",\n  \"/assets/img6.jpg\",\n  \"/assets/img7.jpg\",\n];\n\ngsap.registerPlugin(ScrollTrigger);\n\n// Define the extended Line interface for TypeScript\ninterface ExtendedLine extends THREE.Line {\n  curve: THREE.CatmullRomCurve3;\n  letterElements: HTMLDivElement[];\n}\n\nexport interface WodniackWorkScrollProps {\n  /** Array of letters to animate */\n  letters?: string[];\n  /** Array of image URLs for the card textures */\n  images?: string[];\n  /** Intro text */\n  introText?: string;\n  /** Outro text */\n  outroText?: string;\n  /** Primary color for animations */\n  primaryColor?: string;\n  /** Background color */\n  backgroundColor?: string;\n  /** Grid dot size */\n  dotSize?: number;\n  /** Grid spacing */\n  gridSpacing?: number;\n  /** Number of letter instances per character */\n  letterInstanceCount?: number;\n  /** Line speed multipliers for letter animations */\n  lineSpeedMultipliers?: number[];\n  /** Animation lerp factor */\n  lerpFactor?: number;\n  /** Enable smooth scrolling with Lenis */\n  enableSmoothScroll?: boolean;\n  /** Custom className for the container */\n  className?: string;\n  /** Lenis options for smooth scrolling */\n  lenisOptions?: {\n    lerp?: number;\n    smoothWheel?: boolean;\n    duration?: number;\n  };\n}\n\ninterface LetterPosition {\n  current: { x: number; y: number };\n  target: { x: number; y: number };\n}\n\nexport function WodniackWorkScroll({\n  letters = [\"W\", \"O\", \"R\", \"K\"],\n  images = defaultImages,\n  introText = \"( Intro )\",\n  outroText = \"( Outro )\",\n  primaryColor = \"#f40c3f\",\n  backgroundColor = \"#000000\",\n  dotSize = 0.75,\n  gridSpacing = 20,\n  letterInstanceCount = 15,\n  lineSpeedMultipliers = [0.8, 1, 0.7, 0.9],\n  lerpFactor = 0.07,\n  enableSmoothScroll = true,\n  className,\n  lenisOptions = {\n    lerp: 0.1,\n    smoothWheel: true,\n    duration: 1.2,\n  },\n}: WodniackWorkScrollProps) {\n  return (\n    <div className={`wodniack-work-scroll ${className || \"\"}`}>\n      {enableSmoothScroll ? (\n        <ReactLenis root options={lenisOptions}>\n          <WodniackWorkScrollContent\n            letters={letters}\n            images={images}\n            introText={introText}\n            outroText={outroText}\n            primaryColor={primaryColor}\n            backgroundColor={backgroundColor}\n            dotSize={dotSize}\n            gridSpacing={gridSpacing}\n            letterInstanceCount={letterInstanceCount}\n            lineSpeedMultipliers={lineSpeedMultipliers}\n            lerpFactor={lerpFactor}\n            className={className}\n          />\n        </ReactLenis>\n      ) : (\n        <WodniackWorkScrollContent\n          letters={letters}\n          images={images}\n          introText={introText}\n          outroText={outroText}\n          primaryColor={primaryColor}\n          backgroundColor={backgroundColor}\n          dotSize={dotSize}\n          gridSpacing={gridSpacing}\n          letterInstanceCount={letterInstanceCount}\n          lineSpeedMultipliers={lineSpeedMultipliers}\n          lerpFactor={lerpFactor}\n          className={className}\n        />\n      )}\n    </div>\n  );\n}\n\ninterface WodniackWorkScrollContentProps {\n  letters: string[];\n  images: string[];\n  introText: string;\n  outroText: string;\n  primaryColor: string;\n  backgroundColor: string;\n  dotSize: number;\n  gridSpacing: number;\n  letterInstanceCount: number;\n  lineSpeedMultipliers: number[];\n  lerpFactor: number;\n  className?: string;\n}\n\nfunction WodniackWorkScrollContent({\n  letters,\n  images,\n  introText,\n  outroText,\n  primaryColor,\n  backgroundColor,\n  dotSize,\n  gridSpacing,\n  letterInstanceCount,\n  lineSpeedMultipliers,\n  lerpFactor,\n  className,\n}: WodniackWorkScrollContentProps) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const workRef = useRef<HTMLDivElement>(null);\n  const textContainerRef = useRef<HTMLDivElement>(null);\n\n  // Canvas refs\n  const gridCanvasRef = useRef<HTMLCanvasElement>(null);\n  const lettersCanvasRef = useRef<HTMLCanvasElement>(null);\n  const cardsCanvasRef = useRef<HTMLCanvasElement>(null);\n\n  // Three.js refs\n  const lettersSceneRef = useRef<THREE.Scene | null>(null);\n  const cardsSceneRef = useRef<THREE.Scene | null>(null);\n  const lettersCameraRef = useRef<THREE.PerspectiveCamera | null>(null);\n  const cardsCameraRef = useRef<THREE.PerspectiveCamera | null>(null);\n  const lettersRendererRef = useRef<THREE.WebGLRenderer | null>(null);\n  const cardsRendererRef = useRef<THREE.WebGLRenderer | null>(null);\n  const pathsRef = useRef<\n    (THREE.Line & {\n      curve: THREE.CatmullRomCurve3;\n      letterElements: HTMLDivElement[];\n    })[]\n  >([]);\n  const cardsTextureRef = useRef<THREE.CanvasTexture | null>(null);\n  const textureCanvasRef = useRef<HTMLCanvasElement | null>(null);\n\n  // Animation refs\n  const lenisRef = useRef<Lenis | null>(null);\n  const letterPositionsRef = useRef<Map<HTMLDivElement, LetterPosition>>(\n    new Map()\n  );\n  const animationIdRef = useRef<number | null>(null);\n  const scrollTriggerRef = useRef<ScrollTrigger | null>(null);\n\n  // State\n  const [isReady, setIsReady] = useState(false);\n  const [loadedTextures, setLoadedTextures] = useState<THREE.Texture[]>([]);\n\n  // Utility functions\n  const lerp = useCallback((start: number, end: number, t: number) => {\n    return start + (end - start) * t;\n  }, []);\n\n  // Initialize grid canvas\n  const initGridCanvas = useCallback(() => {\n    const canvas = gridCanvasRef.current;\n    if (!canvas || !workRef.current) return;\n\n    const ctx = canvas.getContext(\"2d\")!;\n\n    const resizeCanvas = () => {\n      const dpr = window.devicePixelRatio || 1;\n      canvas.width = window.innerWidth * dpr;\n      canvas.height = window.innerHeight * dpr;\n      canvas.style.width = `${window.innerWidth}px`;\n      canvas.style.height = `${window.innerHeight}px`;\n      ctx.scale(dpr, dpr);\n    };\n\n    resizeCanvas();\n    window.addEventListener(\"resize\", resizeCanvas);\n\n    return () => window.removeEventListener(\"resize\", resizeCanvas);\n  }, []);\n\n  // Draw animated grid\n  const drawGrid = useCallback(\n    (scrollProgress = 0) => {\n      const canvas = gridCanvasRef.current;\n      if (!canvas) return;\n\n      const ctx = canvas.getContext(\"2d\")!;\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(0, 0, canvas.width, canvas.height);\n      ctx.fillStyle = primaryColor;\n\n      const rows = Math.ceil(canvas.height / gridSpacing);\n      const cols = Math.ceil(canvas.width / gridSpacing) + 15;\n      const offset = (scrollProgress * gridSpacing * 10) % gridSpacing;\n\n      for (let y = 0; y < rows; y++) {\n        for (let x = 0; x < cols; x++) {\n          ctx.beginPath();\n          ctx.arc(\n            x * gridSpacing - offset,\n            y * gridSpacing,\n            dotSize,\n            0,\n            Math.PI * 2\n          );\n          ctx.fill();\n        }\n      }\n    },\n    [backgroundColor, primaryColor, gridSpacing, dotSize]\n  );\n\n  // Create curved animation paths for letters\n  const createTextAnimationPath = useCallback(\n    (yPos: number, amplitude: number) => {\n      const points: THREE.Vector3[] = [];\n      for (let i = 0; i <= 20; i++) {\n        const t = i / 20;\n        points.push(\n          new THREE.Vector3(\n            -25 + 50 * t,\n            yPos + Math.sin(t * Math.PI) * -amplitude,\n            (1 - Math.pow(Math.abs(t - 0.5) * 2, 2)) * -5\n          )\n        );\n      }\n\n      const curve = new THREE.CatmullRomCurve3(points);\n      const line = new THREE.Line(\n        new THREE.BufferGeometry().setFromPoints(curve.getPoints(100)),\n        new THREE.LineBasicMaterial({ color: 0x000000, linewidth: 1 })\n      ) as unknown as ExtendedLine;\n\n      line.curve = curve;\n      line.letterElements = [];\n\n      return line;\n    },\n    []\n  );\n\n  // Load images as Three.js textures\n  const loadImages = useCallback(async () => {\n    const textureLoader = new THREE.TextureLoader();\n    const loadPromises = images.map(\n      (imageSrc) =>\n        new Promise<THREE.Texture>((resolve) => {\n          textureLoader.load(imageSrc, (texture: THREE.Texture) => {\n            texture.generateMipmaps = true;\n            texture.minFilter = THREE.LinearMipmapLinearFilter;\n            texture.magFilter = THREE.LinearFilter;\n            resolve(texture);\n          });\n        })\n    );\n\n    const textures = await Promise.all(loadPromises);\n    setLoadedTextures(textures);\n    return textures;\n  }, [images]);\n\n  // Initialize Three.js scenes\n  const initThreeJS = useCallback(() => {\n    if (!workRef.current) return;\n\n    // Create scenes\n    const lettersScene = new THREE.Scene();\n    const cardsScene = new THREE.Scene();\n    lettersSceneRef.current = lettersScene;\n    cardsSceneRef.current = cardsScene;\n\n    // Create cameras\n    const lettersCamera = new THREE.PerspectiveCamera(\n      50,\n      window.innerWidth / window.innerHeight,\n      0.1,\n      1000\n    );\n    const cardsCamera = new THREE.PerspectiveCamera(\n      50,\n      window.innerWidth / window.innerHeight,\n      0.1,\n      1000\n    );\n    lettersCamera.position.setZ(20);\n    cardsCamera.position.setZ(20);\n    lettersCameraRef.current = lettersCamera;\n    cardsCameraRef.current = cardsCamera;\n\n    // Create renderers\n    const lettersRenderer = new THREE.WebGLRenderer({\n      antialias: true,\n      alpha: true,\n    });\n    lettersRenderer.setSize(window.innerWidth, window.innerHeight);\n    lettersRenderer.setClearColor(0x000000, 0);\n    lettersRenderer.setPixelRatio(window.devicePixelRatio);\n\n    const cardsRenderer = new THREE.WebGLRenderer({\n      antialias: true,\n      alpha: true,\n    });\n    cardsRenderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n    cardsRenderer.setSize(window.innerWidth, window.innerHeight);\n    cardsRenderer.setClearColor(0x000000, 0);\n\n    lettersRendererRef.current = lettersRenderer;\n    cardsRendererRef.current = cardsRenderer;\n\n    // Create letter animation paths\n    const paths = [\n      createTextAnimationPath(10, 2),\n      createTextAnimationPath(3.5, 1),\n      createTextAnimationPath(-3.5, -1),\n      createTextAnimationPath(-10, -2),\n    ];\n\n    paths.forEach((line) => lettersScene.add(line));\n    pathsRef.current = paths;\n\n    // Add canvases to DOM\n    if (lettersCanvasRef.current) {\n      lettersCanvasRef.current.remove();\n    }\n    if (cardsCanvasRef.current) {\n      cardsCanvasRef.current.remove();\n    }\n\n    lettersRenderer.domElement.style.position = \"absolute\";\n    lettersRenderer.domElement.style.top = \"0\";\n    lettersRenderer.domElement.style.left = \"0\";\n    lettersRenderer.domElement.style.pointerEvents = \"none\";\n\n    cardsRenderer.domElement.style.position = \"absolute\";\n    cardsRenderer.domElement.style.top = \"0\";\n    cardsRenderer.domElement.style.left = \"0\";\n    cardsRenderer.domElement.style.pointerEvents = \"none\";\n\n    workRef.current.appendChild(lettersRenderer.domElement);\n    workRef.current.appendChild(cardsRenderer.domElement);\n\n    lettersCanvasRef.current = lettersRenderer.domElement;\n    cardsCanvasRef.current = cardsRenderer.domElement;\n\n    return () => {\n      lettersRenderer.dispose();\n      cardsRenderer.dispose();\n    };\n  }, [createTextAnimationPath]);\n\n  // Create letter elements\n  const createLetterElements = useCallback(() => {\n    if (!textContainerRef.current || !pathsRef.current.length) return;\n\n    // Clear existing letters\n    textContainerRef.current.innerHTML = \"\";\n    letterPositionsRef.current.clear();\n\n    pathsRef.current.forEach((line, pathIndex) => {\n      line.letterElements = Array.from({ length: letterInstanceCount }, () => {\n        const element = document.createElement(\"div\");\n        element.className = \"wodniack-letter\";\n        element.textContent = letters[pathIndex] || \"X\";\n        element.style.position = \"absolute\";\n        element.style.transform = \"translate(-50%, -50%)\";\n        element.style.color = primaryColor;\n        element.style.fontSize = \"4rem\";\n        element.style.fontWeight = \"bold\";\n        element.style.pointerEvents = \"none\";\n        element.style.zIndex = \"10\";\n\n        textContainerRef.current!.appendChild(element);\n\n        letterPositionsRef.current.set(element, {\n          current: { x: 0, y: 0 },\n          target: { x: 0, y: 0 },\n        });\n\n        return element;\n      });\n    });\n  }, [letters, letterInstanceCount, primaryColor]);\n\n  // Initialize cards texture canvas\n  const initCardsTexture = useCallback(async () => {\n    if (\n      !loadedTextures.length ||\n      !cardsSceneRef.current ||\n      !cardsRendererRef.current\n    )\n      return;\n\n    // Create texture canvas\n    const textureCanvas = document.createElement(\"canvas\");\n    textureCanvas.width = 4096;\n    textureCanvas.height = 2048;\n    textureCanvasRef.current = textureCanvas;\n\n    // Create cards texture\n    const cardsTexture = new THREE.CanvasTexture(textureCanvas);\n    cardsTexture.generateMipmaps = true;\n    cardsTexture.minFilter = THREE.LinearMipmapLinearFilter;\n    cardsTexture.magFilter = THREE.LinearFilter;\n    cardsTexture.anisotropy =\n      cardsRendererRef.current.capabilities.getMaxAnisotropy();\n    cardsTexture.wrapS = THREE.RepeatWrapping;\n    cardsTexture.wrapT = THREE.RepeatWrapping;\n    cardsTextureRef.current = cardsTexture;\n\n    // Create cards plane\n    const cardsPlane = new THREE.Mesh(\n      new THREE.PlaneGeometry(30, 15, 50, 1),\n      new THREE.MeshBasicMaterial({\n        map: cardsTexture,\n        side: THREE.DoubleSide,\n        transparent: true,\n        opacity: 1,\n        depthTest: false,\n        depthWrite: false,\n      })\n    );\n\n    // Create curved geometry\n    const positions = cardsPlane.geometry.attributes.position;\n    for (let i = 0; i < positions.count; i++) {\n      positions.setZ(i, Math.pow(positions.getX(i) / 15, 2) * 5);\n    }\n    positions.needsUpdate = true;\n\n    cardsSceneRef.current.add(cardsPlane);\n  }, [loadedTextures]);\n\n  // Draw cards on texture canvas\n  const drawCardsOnCanvas = useCallback(\n    (offset = 0) => {\n      const canvas = textureCanvasRef.current;\n      if (!canvas || !loadedTextures.length) return;\n\n      const ctx = canvas.getContext(\"2d\")!;\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n      const cardWidth = canvas.width / 3;\n      const cardHeight = canvas.height / 2;\n      const spacing = canvas.width / 2.5;\n\n      loadedTextures.forEach((texture, i) => {\n        if (texture.image) {\n          ctx.drawImage(\n            texture.image,\n            i * spacing + (0.35 - offset) * canvas.width * 5 - cardWidth,\n            (canvas.height - cardHeight) / 2,\n            cardWidth,\n            cardHeight\n          );\n        }\n      });\n\n      if (cardsTextureRef.current) {\n        cardsTextureRef.current.needsUpdate = true;\n      }\n    },\n    [loadedTextures]\n  );\n\n  // Update letter target positions\n  const updateTargetPositions = useCallback(\n    (scrollProgress = 0) => {\n      if (!pathsRef.current.length || !lettersCameraRef.current) return;\n\n      pathsRef.current.forEach((line, lineIndex) => {\n        const speedMultiplier = lineSpeedMultipliers[lineIndex] || 1;\n\n        line.letterElements.forEach((element: HTMLDivElement, i: number) => {\n          const point = line.curve.getPoint(\n            (i / (letterInstanceCount - 1) + scrollProgress * speedMultiplier) %\n              1\n          );\n          const vector = point.clone().project(lettersCameraRef.current!);\n          const positions = letterPositionsRef.current.get(element);\n\n          if (positions) {\n            positions.target = {\n              x: (-vector.x * 0.5 + 0.5) * window.innerWidth,\n              y: (-vector.y * 0.5 + 0.5) * window.innerHeight,\n            };\n          }\n        });\n      });\n    },\n    [letterInstanceCount, lineSpeedMultipliers]\n  );\n\n  // Update letter positions with lerp\n  const updateLetterPositions = useCallback(() => {\n    letterPositionsRef.current.forEach((positions, element) => {\n      const distX = positions.target.x - positions.current.x;\n\n      if (Math.abs(distX) > window.innerWidth * 0.7) {\n        positions.current.x = positions.target.x;\n        positions.current.y = positions.target.y;\n      } else {\n        positions.current.x = lerp(\n          positions.current.x,\n          positions.target.x,\n          lerpFactor\n        );\n        positions.current.y = lerp(\n          positions.current.y,\n          positions.target.y,\n          lerpFactor\n        );\n      }\n\n      element.style.transform = `translate(-50%, -50%) translate3d(${positions.current.x}px, ${positions.current.y}px, 0px)`;\n    });\n  }, [lerp, lerpFactor]);\n\n  // Animation loop\n  const animate = useCallback(() => {\n    updateLetterPositions();\n\n    if (\n      lettersSceneRef.current &&\n      lettersCameraRef.current &&\n      lettersRendererRef.current\n    ) {\n      lettersRendererRef.current.render(\n        lettersSceneRef.current,\n        lettersCameraRef.current\n      );\n    }\n\n    if (\n      cardsSceneRef.current &&\n      cardsCameraRef.current &&\n      cardsRendererRef.current\n    ) {\n      cardsRendererRef.current.render(\n        cardsSceneRef.current,\n        cardsCameraRef.current\n      );\n    }\n\n    animationIdRef.current = requestAnimationFrame(animate);\n  }, [updateLetterPositions]);\n\n  // Initialize ScrollTrigger\n  const initScrollTrigger = useCallback(() => {\n    if (!workRef.current) return;\n\n    const scrollTrigger = ScrollTrigger.create({\n      trigger: workRef.current,\n      start: \"top top\",\n      end: \"+=700%\",\n      pin: true,\n      pinSpacing: true,\n      scrub: 1,\n      onUpdate: (self: any) => {\n        updateTargetPositions(self.progress);\n        drawCardsOnCanvas(self.progress);\n        drawGrid(self.progress);\n      },\n    });\n\n    scrollTriggerRef.current = scrollTrigger;\n  }, [updateTargetPositions, drawCardsOnCanvas, drawGrid]);\n\n  // Handle window resize\n  const handleResize = useCallback(() => {\n    if (\n      !lettersCameraRef.current ||\n      !cardsCameraRef.current ||\n      !lettersRendererRef.current ||\n      !cardsRendererRef.current\n    )\n      return;\n\n    // Update cameras\n    lettersCameraRef.current.aspect = window.innerWidth / window.innerHeight;\n    lettersCameraRef.current.updateProjectionMatrix();\n    cardsCameraRef.current.aspect = window.innerWidth / window.innerHeight;\n    cardsCameraRef.current.updateProjectionMatrix();\n\n    // Update renderers\n    lettersRendererRef.current.setSize(window.innerWidth, window.innerHeight);\n    cardsRendererRef.current.setSize(window.innerWidth, window.innerHeight);\n    cardsRendererRef.current.setPixelRatio(\n      Math.min(window.devicePixelRatio, 2)\n    );\n\n    // Update grid canvas\n    const canvas = gridCanvasRef.current;\n    if (canvas) {\n      const ctx = canvas.getContext(\"2d\")!;\n      const dpr = window.devicePixelRatio || 1;\n      canvas.width = window.innerWidth * dpr;\n      canvas.height = window.innerHeight * dpr;\n      canvas.style.width = `${window.innerWidth}px`;\n      canvas.style.height = `${window.innerHeight}px`;\n      ctx.scale(dpr, dpr);\n    }\n\n    // Redraw grid and update positions\n    const progress = scrollTriggerRef.current?.progress || 0;\n    drawGrid(progress);\n    updateTargetPositions(progress);\n  }, [drawGrid, updateTargetPositions]);\n\n  // Main initialization effect\n  useEffect(() => {\n    const init = async () => {\n      try {\n        // Initialize grid canvas\n        initGridCanvas();\n\n        // Load images\n        await loadImages();\n\n        // Initialize Three.js\n        initThreeJS();\n\n        // Create letter elements\n        createLetterElements();\n\n        // Initialize cards texture\n        await initCardsTexture();\n\n        // Initialize animations\n        drawGrid(0);\n        updateTargetPositions(0);\n\n        // Start animation loop\n        animate();\n\n        // Initialize ScrollTrigger\n        initScrollTrigger();\n\n        // Add resize listener\n        window.addEventListener(\"resize\", handleResize);\n\n        setIsReady(true);\n      } catch (error) {\n        console.error(\"Failed to initialize WodniackWorkScroll:\", error);\n      }\n    };\n\n    init();\n\n    return () => {\n      // Cleanup\n      if (animationIdRef.current) {\n        cancelAnimationFrame(animationIdRef.current);\n      }\n\n      if (scrollTriggerRef.current) {\n        scrollTriggerRef.current.kill();\n      }\n\n      if (lenisRef.current) {\n        lenisRef.current.destroy();\n      }\n\n      window.removeEventListener(\"resize\", handleResize);\n\n      // Cleanup Three.js\n      if (lettersRendererRef.current) {\n        lettersRendererRef.current.dispose();\n      }\n      if (cardsRendererRef.current) {\n        cardsRendererRef.current.dispose();\n      }\n    };\n  }, [\n    initGridCanvas,\n    loadImages,\n    initThreeJS,\n    createLetterElements,\n    initCardsTexture,\n    drawGrid,\n    updateTargetPositions,\n    animate,\n    initScrollTrigger,\n    handleResize,\n  ]);\n\n  return (\n    <div\n      className={`wodniack-work-scroll-content ${className || \"\"}`}\n      ref={containerRef}\n    >\n      <section className=\"wodniack-intro\">\n        <h1>{introText}</h1>\n      </section>\n\n      <section className=\"wodniack-work\" ref={workRef}>\n        <canvas ref={gridCanvasRef} className=\"wodniack-grid-canvas\" />\n        <div ref={textContainerRef} className=\"wodniack-text-container\" />\n      </section>\n\n      <section className=\"wodniack-outro\">\n        <h1>{outroText}</h1>\n      </section>\n\n      {!isReady && (\n        <div className=\"wodniack-loading\">\n          <p>Loading...</p>\n        </div>\n      )}\n    </div>\n  );\n}\n","/**\n * SSR-safe utilities for animation components\n */\n\nexport const isSSR = typeof window === 'undefined';\nexport const isBrowser = !isSSR;\n\n/**\n * Check if code is running in browser environment\n */\nexport function canUseDOM(): boolean {\n  return !!(\n    typeof window !== 'undefined' &&\n    window.document &&\n    window.document.createElement\n  );\n}\n\n/**\n * Get window dimensions safely\n */\nexport function getWindowDimensions() {\n  if (!canUseDOM()) {\n    return { width: 0, height: 0 };\n  }\n  return {\n    width: window.innerWidth,\n    height: window.innerHeight,\n  };\n}\n\n/**\n * Safe requestAnimationFrame wrapper\n */\nexport function safeRAF(callback: FrameRequestCallback): number | null {\n  if (!canUseDOM() || !window.requestAnimationFrame) {\n    return null;\n  }\n  return window.requestAnimationFrame(callback);\n}\n\n/**\n * Safe cancelAnimationFrame wrapper\n */\nexport function safeCancelRAF(id: number | null): void {\n  if (!canUseDOM() || !window.cancelAnimationFrame || !id) {\n    return;\n  }\n  window.cancelAnimationFrame(id);\n}","import { cn } from \"@tuel/utils\";\nimport { useReducedMotion } from \"@tuel/performance\";\nimport { ReactNode, useEffect, useRef } from \"react\";\nimport { canUseDOM } from \"../hooks/useSSR\";\n\n// Lazy load GSAP only in browser\nlet gsap: any;\nlet ScrollTrigger: any;\n\nif (canUseDOM()) {\n  import(\"gsap\").then((mod) => {\n    gsap = mod.gsap;\n    import(\"gsap/ScrollTrigger\").then((st) => {\n      ScrollTrigger = st.ScrollTrigger;\n      gsap.registerPlugin(ScrollTrigger);\n    });\n  });\n}\n\nexport interface HorizontalScrollProps {\n  children: ReactNode;\n  className?: string;\n  containerClassName?: string;\n  speed?: number;\n  scrub?: boolean | number;\n  pin?: boolean;\n  snap?: boolean | number | \"labels\" | \"labelsDirectional\";\n  direction?: \"left\" | \"right\";\n  triggerElement?: string;\n  start?: string;\n  end?: string;\n  onUpdate?: (progress: number) => void;\n  onComplete?: () => void;\n}\n\nexport function HorizontalScroll({\n  children,\n  className,\n  containerClassName,\n  speed = 1,\n  scrub = 1,\n  pin = true,\n  snap = false,\n  direction = \"left\",\n  triggerElement,\n  start = \"top top\",\n  end = \"bottom top\",\n  onUpdate,\n  onComplete,\n}: HorizontalScrollProps) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const scrollRef = useRef<HTMLDivElement>(null);\n  const prefersReducedMotion = useReducedMotion();\n\n  useEffect(() => {\n    // Skip animations if SSR or user prefers reduced motion\n    if (!canUseDOM() || prefersReducedMotion || !gsap || !ScrollTrigger) {\n      return;\n    }\n\n    const container = containerRef.current;\n    const scrollElement = scrollRef.current;\n\n    if (!container || !scrollElement) return;\n\n    // Calculate scroll distance\n    const scrollWidth = scrollElement.scrollWidth;\n    const containerWidth = container.offsetWidth;\n    const scrollDistance = scrollWidth - containerWidth;\n\n    const scrollDirection =\n      direction === \"left\" ? -scrollDistance : scrollDistance;\n\n    // Create the scroll animation\n    const animation = gsap.to(scrollElement, {\n      x: scrollDirection * speed,\n      ease: \"none\",\n      scrollTrigger: {\n        trigger: triggerElement || container,\n        start,\n        end: end === \"auto\" ? `+=${scrollDistance}` : end,\n        scrub,\n        pin: pin ? container : false,\n        snap: typeof snap === \"boolean\" ? undefined : snap,\n        invalidateOnRefresh: true,\n        anticipatePin: 1,\n        onUpdate: (self: any) => {\n          if (onUpdate) {\n            onUpdate(self.progress);\n          }\n        },\n      },\n    });\n\n    return () => {\n      animation.kill();\n    };\n  }, [\n    speed,\n    scrub,\n    pin,\n    snap,\n    direction,\n    triggerElement,\n    start,\n    end,\n    onUpdate,\n    onComplete,\n    prefersReducedMotion,\n  ]);\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn(\"overflow-hidden\", containerClassName)}\n    >\n      <div ref={scrollRef} className={cn(\"flex w-fit\", className)}>\n        {children}\n      </div>\n    </div>\n  );\n}\n\n// Utility component for horizontal scroll items\nexport interface HorizontalScrollItemProps {\n  children: ReactNode;\n  className?: string;\n  width?: string | number;\n}\n\nexport function HorizontalScrollItem({\n  children,\n  className,\n  width = \"auto\",\n}: HorizontalScrollItemProps) {\n  return (\n    <div className={cn(\"flex-shrink-0\", className)} data-width={width}>\n      {children}\n    </div>\n  );\n}\n","\"use client\";\n\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport { useEffect, useRef, useState } from \"react\";\n\n// Register GSAP plugins\nif (typeof window !== \"undefined\") {\n  gsap.registerPlugin(ScrollTrigger);\n}\n\ninterface CubeData {\n  initial: {\n    top: number;\n    left: number;\n    rotateX: number;\n    rotateY: number;\n    rotateZ: number;\n    z: number;\n  };\n  final: {\n    top: number;\n    left: number;\n    rotateX: number;\n    rotateY: number;\n    rotateZ: number;\n    z: number;\n  };\n}\n\nconst cubesData: Record<string, CubeData> = {\n  \"cube-1\": {\n    initial: {\n      top: -55,\n      left: 37.5,\n      rotateX: 360,\n      rotateY: -360,\n      rotateZ: -48,\n      z: -30000,\n    },\n    final: {\n      top: 50,\n      left: 15,\n      rotateX: 0,\n      rotateY: 3,\n      rotateZ: 0,\n      z: 0,\n    },\n  },\n  \"cube-2\": {\n    initial: {\n      top: -35,\n      left: 12.5,\n      rotateX: -360,\n      rotateY: 360,\n      rotateZ: 135,\n      z: -30000,\n    },\n    final: {\n      top: 25,\n      left: 25,\n      rotateX: 1,\n      rotateY: 2,\n      rotateZ: 0,\n      z: 0,\n    },\n  },\n  \"cube-3\": {\n    initial: {\n      top: -75,\n      left: 87.5,\n      rotateX: -360,\n      rotateY: -360,\n      rotateZ: 180,\n      z: -30000,\n    },\n    final: {\n      top: 75,\n      left: 15,\n      rotateX: 0,\n      rotateY: -1,\n      rotateZ: 0,\n      z: 0,\n    },\n  },\n  \"cube-4\": {\n    initial: {\n      top: -75,\n      left: 12.5,\n      rotateX: 360,\n      rotateY: 360,\n      rotateZ: 90,\n      z: -30000,\n    },\n    final: {\n      top: 75,\n      left: 55,\n      rotateX: 0,\n      rotateY: 0,\n      rotateZ: 0,\n      z: 0,\n    },\n  },\n  \"cube-5\": {\n    initial: {\n      top: -55,\n      left: 62.5,\n      rotateX: 360,\n      rotateY: 360,\n      rotateZ: -135,\n      z: -30000,\n    },\n    final: {\n      top: 25,\n      left: 75,\n      rotateX: -1,\n      rotateY: -2,\n      rotateZ: 0,\n      z: 0,\n    },\n  },\n  \"cube-6\": {\n    initial: {\n      top: -35,\n      left: 67.5,\n      rotateX: -180,\n      rotateY: -360,\n      rotateZ: -180,\n      z: -30000,\n    },\n    final: {\n      top: 50,\n      left: 85,\n      rotateX: 0,\n      rotateY: -3,\n      rotateZ: 0,\n      z: 0,\n    },\n  },\n};\n\ninterface CubeProps {\n  cubeKey: string;\n  images: string[];\n  className?: string;\n}\n\nfunction Cube({ cubeKey, images, className = \"\" }: CubeProps) {\n  const data = cubesData[cubeKey];\n\n  return (\n    <div\n      className={`cube absolute z-10 w-20 h-20 md:w-24 md:h-24 preserve-3d ${className}`}\n      style={{\n        transformStyle: \"preserve-3d\",\n        perspective: \"1000px\",\n        top: `${data.initial.top}%`,\n        left: `${data.initial.left}%`,\n        transform: `\n          translate3d(-50%, -50%, ${data.initial.z}px)\n          rotateX(${data.initial.rotateX}deg)\n          rotateY(${data.initial.rotateY}deg)\n          rotateZ(${data.initial.rotateZ}deg)\n        `,\n      }}\n    >\n      {/* Front */}\n      <div\n        className=\"cube-face absolute w-full h-full\"\n        style={{ transform: \"rotateY(0deg) translateZ(50px)\" }}\n      >\n        <img\n          src={images[0] || \"/api/placeholder/300/300\"}\n          alt=\"cube-face\"\n          className=\"w-full h-full object-cover\"\n        />\n      </div>\n      {/* Back */}\n      <div\n        className=\"cube-face absolute w-full h-full\"\n        style={{ transform: \"rotateY(180deg) translateZ(50px)\" }}\n      >\n        <img\n          src={images[1] || \"/api/placeholder/300/300\"}\n          alt=\"cube-face\"\n          className=\"w-full h-full object-cover\"\n        />\n      </div>\n      {/* Right */}\n      <div\n        className=\"cube-face absolute w-full h-full\"\n        style={{ transform: \"rotateY(90deg) translateZ(50px)\" }}\n      >\n        <img\n          src={images[2] || \"/api/placeholder/300/300\"}\n          alt=\"cube-face\"\n          className=\"w-full h-full object-cover\"\n        />\n      </div>\n      {/* Left */}\n      <div\n        className=\"cube-face absolute w-full h-full\"\n        style={{ transform: \"rotateY(-90deg) translateZ(50px)\" }}\n      >\n        <img\n          src={images[3] || \"/api/placeholder/300/300\"}\n          alt=\"cube-face\"\n          className=\"w-full h-full object-cover\"\n        />\n      </div>\n      {/* Top */}\n      <div\n        className=\"cube-face absolute w-full h-full\"\n        style={{ transform: \"rotateX(90deg) translateZ(50px)\" }}\n      >\n        <img\n          src={images[4] || \"/api/placeholder/300/300\"}\n          alt=\"cube-face\"\n          className=\"w-full h-full object-cover\"\n        />\n      </div>\n      {/* Bottom */}\n      <div\n        className=\"cube-face absolute w-full h-full\"\n        style={{ transform: \"rotateX(-90deg) translateZ(50px)\" }}\n      >\n        <img\n          src={images[5] || \"/api/placeholder/300/300\"}\n          alt=\"cube-face\"\n          className=\"w-full h-full object-cover\"\n        />\n      </div>\n    </div>\n  );\n}\n\nexport interface OrchestraCubesProps {\n  className?: string;\n  header1?: string;\n  header2?: string;\n  subtitle?: string;\n  images?: string[];\n  stickyHeight?: number;\n  backgroundColor?: string;\n  textColor?: string;\n}\n\nexport function OrchestraCubes({\n  className = \"\",\n  header1 = \"The first media company crafted for the digital first generation.\",\n  header2 = \"Where innovation meets precision.\",\n  subtitle = \"Symphonia unites visionary thinkers, creative architects, and analytical experts, collaborating seamlessly to transform challenges into opportunities. Together, we deliver tailored solutions that drive impact and inspire growth.\",\n  images = Array.from(\n    { length: 36 },\n    (_, i) => `/api/placeholder/300/300?seed=${i + 1}`\n  ),\n  stickyHeight = 4,\n  backgroundColor = \"#331707\",\n  textColor = \"#ffe9d9\",\n}: OrchestraCubesProps) {\n  const stickyRef = useRef<HTMLDivElement>(null);\n  const logoRef = useRef<HTMLDivElement>(null);\n  const cubesRef = useRef<HTMLDivElement>(null);\n  const header1Ref = useRef<HTMLDivElement>(null);\n  const header2Ref = useRef<HTMLDivElement>(null);\n  const [cubeRefs] = useState(() => {\n    const refs: Record<string, React.RefObject<HTMLDivElement | null>> = {};\n    Object.keys(cubesData).forEach((key) => {\n      refs[key] = { current: null };\n    });\n    return refs;\n  });\n\n  const interpolate = (start: number, end: number, progress: number) => {\n    return start + (end - start) * progress;\n  };\n\n  useEffect(() => {\n    if (!stickyRef.current) return;\n\n    // Initialize cube positions with transforms\n    Object.entries(cubesData).forEach(([cubeKey, data]) => {\n      const cubeRef = cubeRefs[cubeKey];\n      if (!cubeRef.current) return;\n\n      cubeRef.current.style.top = `${data.initial.top}%`;\n      cubeRef.current.style.left = `${data.initial.left}%`;\n      cubeRef.current.style.transform = `\n        translate3d(-50%, -50%, ${data.initial.z}px)\n        rotateX(${data.initial.rotateX}deg)\n        rotateY(${data.initial.rotateY}deg)\n        rotateZ(${data.initial.rotateZ}deg)\n      `;\n    });\n\n    const scrollTrigger = ScrollTrigger.create({\n      trigger: stickyRef.current,\n      start: \"top top\",\n      end: `+=${stickyHeight * 100}vh`,\n      pin: true,\n      scrub: 1,\n      onUpdate: (self: any) => {\n        if (\n          !logoRef.current ||\n          !cubesRef.current ||\n          !header1Ref.current ||\n          !header2Ref.current\n        ) {\n          return;\n        }\n\n        const logo = logoRef.current;\n        const cubes = cubesRef.current;\n        const header1 = header1Ref.current;\n        const header2 = header2Ref.current;\n\n        // Logo phase (0-20%)\n        if (self.progress <= 0.2) {\n          const logoProgress = self.progress * 5;\n          const logoScale = interpolate(1, 0, logoProgress);\n          const logoOpacity = interpolate(1, 0, logoProgress);\n\n          logo.style.transform = `translate(-50%, -50%) scale(${logoScale})`;\n          logo.style.opacity = String(logoOpacity);\n\n          cubes.style.opacity = String(logoProgress);\n        } else {\n          logo.style.opacity = \"0\";\n          cubes.style.opacity = \"1\";\n        }\n\n        // Header 1 phase (20-40%)\n        if (self.progress >= 0.2 && self.progress <= 0.4) {\n          const header1StartProgress = (self.progress - 0.2) * 5;\n          const header1Progress = Math.max(\n            0,\n            Math.min(header1StartProgress, 1)\n          );\n          const header1Scale = interpolate(0.75, 1, header1Progress);\n          const header1Blur = interpolate(10, 0, header1Progress);\n\n          header1.style.transform = `translate(-50%, -50%) scale(${header1Scale})`;\n          header1.style.filter = `blur(${header1Blur}px)`;\n          header1.style.opacity = String(header1Progress);\n        } else if (self.progress > 0.4) {\n          header1.style.opacity = \"0\";\n        }\n\n        // Header 2 phase (40-60%)\n        if (self.progress >= 0.4 && self.progress <= 0.6) {\n          const header2StartProgress = (self.progress - 0.4) * 10;\n          const header2Progress = Math.max(\n            0,\n            Math.min(header2StartProgress, 1)\n          );\n          const header2Scale = interpolate(0.75, 1, header2Progress);\n          const header2Blur = interpolate(10, 0, header2Progress);\n\n          header2.style.transform = `translate(-50%, -50%) scale(${header2Scale})`;\n          header2.style.filter = `blur(${header2Blur}px)`;\n          header2.style.opacity = String(header2Progress);\n        }\n\n        // Animate cubes\n        const firstPhaseProgress = Math.min(self.progress * 2, 1);\n        const secondPhaseProgress =\n          self.progress >= 0.5 ? (self.progress - 0.5) * 2 : 0;\n\n        Object.entries(cubesData).forEach(([cubeKey, data]) => {\n          const cubeRef = cubeRefs[cubeKey];\n          if (!cubeRef.current) return;\n\n          const { initial, final } = data;\n\n          const currentTop = interpolate(\n            initial.top,\n            final.top,\n            firstPhaseProgress\n          );\n          const currentLeft = interpolate(\n            initial.left,\n            final.left,\n            firstPhaseProgress\n          );\n          const currentRotateX = interpolate(\n            initial.rotateX,\n            final.rotateX,\n            firstPhaseProgress\n          );\n          const currentRotateY = interpolate(\n            initial.rotateY,\n            final.rotateY,\n            firstPhaseProgress\n          );\n          const currentRotateZ = interpolate(\n            initial.rotateZ,\n            final.rotateZ,\n            firstPhaseProgress\n          );\n          const currentZ = interpolate(initial.z, final.z, firstPhaseProgress);\n\n          let additionalRotation = 0;\n          if (cubeKey === \"cube-2\") {\n            additionalRotation = interpolate(0, 180, secondPhaseProgress);\n          } else if (cubeKey === \"cube-4\") {\n            additionalRotation = interpolate(0, -180, secondPhaseProgress);\n          }\n\n          cubeRef.current.style.top = `${currentTop}%`;\n          cubeRef.current.style.left = `${currentLeft}%`;\n          cubeRef.current.style.transform = `\n            translate3d(-50%, -50%, ${currentZ}px)\n            rotateX(${currentRotateX}deg)\n            rotateY(${currentRotateY + additionalRotation}deg)\n            rotateZ(${currentRotateZ}deg)\n          `;\n        });\n      },\n    });\n\n    return () => {\n      scrollTrigger.kill();\n    };\n  }, [stickyHeight, cubeRefs]);\n\n  const cubeImages = Object.keys(cubesData).map((_, index) =>\n    images.slice(index * 6, (index + 1) * 6)\n  );\n\n  return (\n    <>\n      <div\n        ref={stickyRef}\n        className={`orchestra-cubes relative w-full h-screen overflow-hidden ${className}`}\n        data-bg={backgroundColor}\n        data-color={textColor}\n      >\n        {/* Logo */}\n        <div\n          ref={logoRef}\n          className=\"absolute top-[25%] left-1/2 transform -translate-x-1/2 -translate-y-1/2 flex gap-6 z-20\"\n        >\n          <div className=\"flex flex-col gap-2\">\n            <div className=\"w-4 h-4 bg-[#ffe9d9]\" />\n            <div className=\"w-4 h-4 bg-[#ffe9d9]\" />\n          </div>\n          <div className=\"flex flex-col gap-2\">\n            <div className=\"w-4 h-4 bg-[#ffe9d9]\" />\n            <div className=\"w-4 h-4 bg-[#ffe9d9]\" />\n          </div>\n          <div className=\"flex flex-col gap-2\">\n            <div className=\"w-4 h-4 bg-[#ffe9d9]\" />\n            <div className=\"w-4 h-4 bg-[#ffe9d9]\" />\n          </div>\n        </div>\n\n        <div ref={cubesRef} className=\"cubes-container opacity-0\">\n          {Object.keys(cubesData).map((cubeKey, index) => (\n            <div key={cubeKey} ref={cubeRefs[cubeKey]}>\n              <Cube cubeKey={cubeKey} images={cubeImages[index]} />\n            </div>\n          ))}\n        </div>\n\n        <div\n          ref={header1Ref}\n          className=\"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-center z-10 max-w-4xl px-8\"\n        >\n          <h1 className=\"text-4xl md:text-6xl font-bold leading-tight text-[#ffe9d9]\">\n            {header1}\n          </h1>\n        </div>\n\n        <div\n          ref={header2Ref}\n          className=\"header-2 absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-center z-10 max-w-2xl px-8 opacity-0\"\n        >\n          <h2 className=\"text-3xl md:text-5xl font-bold mb-6 text-[#ffe9d9]\">\n            {header2}\n          </h2>\n          <p className=\"text-lg md:text-xl leading-relaxed text-[#ffe9d9]\">\n            {subtitle}\n          </p>\n        </div>\n      </div>\n\n      <section className=\"relative w-full h-screen flex justify-center items-center text-center bg-[#cdb9ab] text-[#331707]\">\n        <h2 className=\"text-3xl md:text-5xl font-bold\">\n          Your next section goes here\n        </h2>\n      </section>\n    </>\n  );\n}\n","\"use client\";\n\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport { useEffect, useRef } from \"react\";\n\nif (typeof window !== \"undefined\") {\n  gsap.registerPlugin(ScrollTrigger);\n}\n\nexport interface OrkenWorldScrollProps {\n  className?: string;\n}\n\ninterface TriangleState {\n  order: number;\n  scale: number;\n  row: number;\n  col: number;\n}\n\ninterface CardData {\n  id: number;\n  title: string;\n  productCode: string;\n  image: string;\n}\n\nconst defaultCards: CardData[] = [\n  {\n    id: 1,\n    title: \"Silent Veil\",\n    productCode: \"PROD8372\",\n    image:\n      \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjYwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIwJSIgeTE9IjAlIiB4Mj0iMTAwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiM2NjY2NjYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMzMzMzMzMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2cpIi8+PC9zdmc+\",\n  },\n  {\n    id: 2,\n    title: \"Crimson Echoes\",\n    productCode: \"PROD4921\",\n    image:\n      \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjYwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIwJSIgeTE9IjAlIiB4Mj0iMTAwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiNkYzI2MjYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM5OTE5MTkiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2cpIi8+PC9zdmc+\",\n  },\n  {\n    id: 3,\n    title: \"Zenith Arc\",\n    productCode: \"PROD7586\",\n    image:\n      \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjYwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIwJSIgeTE9IjAlIiB4Mj0iMTAwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMyNTYzZWIiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMxZTQwYWYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2cpIi8+PC9zdmc+\",\n  },\n  {\n    id: 4,\n    title: \"Moonspire Dream\",\n    productCode: \"PROD3410\",\n    image:\n      \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjYwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIwJSIgeTE9IjAlIiB4Mj0iMTAwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiM2MzY2ZjEiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM0MzM4Y2EiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2cpIi8+PC9zdmc+\",\n  },\n  {\n    id: 5,\n    title: \"Ember Flux\",\n    productCode: \"PROD9053\",\n    image:\n      \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjYwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIwJSIgeTE9IjAlIiB4Mj0iMTAwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiNmOTc4MTYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlYTU4MDYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2cpIi8+PC9zdmc+\",\n  },\n];\n\nexport function OrkenWorldScroll({ className = \"\" }: OrkenWorldScrollProps) {\n  const stickyRef = useRef<HTMLDivElement>(null);\n  const outlineCanvasRef = useRef<HTMLCanvasElement>(null);\n  const fillCanvasRef = useRef<HTMLCanvasElement>(null);\n  const cardsRef = useRef<HTMLDivElement>(null);\n  const triangleStatesRef = useRef<Map<string, TriangleState>>(new Map());\n  const animationFrameIdRef = useRef<number | null>(null);\n  const canvasXPositionRef = useRef(0);\n\n  const TRIANGLE_SIZE = 15;\n  const TRIANGLE_ROWS = 100;\n  const TRIANGLE_COLS = 200;\n  const SCALE_THRESHOLD = 0.1;\n\n  const setCanvasSize = (\n    canvas: HTMLCanvasElement,\n    ctx: CanvasRenderingContext2D\n  ) => {\n    const rect = canvas.getBoundingClientRect();\n    const pixelRatio = window.devicePixelRatio || 1;\n\n    canvas.width = rect.width * pixelRatio;\n    canvas.height = rect.height * pixelRatio;\n\n    ctx.scale(pixelRatio, pixelRatio);\n    canvas.style.width = rect.width + \"px\";\n    canvas.style.height = rect.height + \"px\";\n  };\n\n  const drawTriangle = (\n    ctx: CanvasRenderingContext2D,\n    x: number,\n    y: number,\n    size: number,\n    flipped: boolean,\n    outlineScale: number,\n    fillScale: number,\n    lineWidth: number\n  ) => {\n    const halfSize = size * 0.5;\n\n    if (outlineScale >= SCALE_THRESHOLD) {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.scale(outlineScale, outlineScale);\n      ctx.translate(-x, -y);\n\n      ctx.beginPath();\n      if (!flipped) {\n        ctx.moveTo(x, y - halfSize);\n        ctx.lineTo(x + halfSize, y + halfSize);\n        ctx.lineTo(x - halfSize, y + halfSize);\n      } else {\n        ctx.moveTo(x, y + halfSize);\n        ctx.lineTo(x + halfSize, y - halfSize);\n        ctx.lineTo(x - halfSize, y - halfSize);\n      }\n      ctx.closePath();\n      ctx.strokeStyle = \"rgba(255, 255, 255, 0.075)\";\n      ctx.lineWidth = lineWidth;\n      ctx.stroke();\n    }\n\n    if (fillScale >= SCALE_THRESHOLD) {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.scale(fillScale, fillScale);\n      ctx.translate(-x, -y);\n\n      ctx.beginPath();\n      if (!flipped) {\n        ctx.moveTo(x, y - halfSize);\n        ctx.lineTo(x + halfSize, y + halfSize);\n        ctx.lineTo(x - halfSize, y + halfSize);\n      } else {\n        ctx.moveTo(x, y + halfSize);\n        ctx.lineTo(x + halfSize, y - halfSize);\n        ctx.lineTo(x - halfSize, y - halfSize);\n      }\n      ctx.closePath();\n      ctx.fillStyle = \"#ff6b00\";\n      ctx.strokeStyle = \"#ff6b00\";\n      ctx.lineWidth = lineWidth;\n      ctx.stroke();\n      ctx.fill();\n      ctx.restore();\n    }\n  };\n\n  const drawGrid = (scrollProgress = 0) => {\n    const outlineCanvas = outlineCanvasRef.current;\n    const fillCanvas = fillCanvasRef.current;\n\n    if (!outlineCanvas || !fillCanvas) return;\n\n    const outlineCtx = outlineCanvas.getContext(\"2d\");\n    const fillCtx = fillCanvas.getContext(\"2d\");\n\n    if (!outlineCtx || !fillCtx) return;\n\n    if (animationFrameIdRef.current) {\n      cancelAnimationFrame(animationFrameIdRef.current);\n    }\n\n    outlineCtx.clearRect(0, 0, outlineCanvas.width, outlineCanvas.height);\n    fillCtx.clearRect(0, 0, fillCanvas.width, fillCanvas.height);\n\n    const animationProgress =\n      scrollProgress <= 0.65 ? 0 : (scrollProgress - 0.65) / 0.35;\n    let needsUpdate = false;\n\n    const canvasWidth = outlineCanvas.style.width\n      ? parseInt(outlineCanvas.style.width.replace(\"px\", \"\"))\n      : outlineCanvas.width;\n    const canvasHeight = outlineCanvas.style.height\n      ? parseInt(outlineCanvas.style.height.replace(\"px\", \"\"))\n      : outlineCanvas.height;\n\n    for (let row = 0; row < TRIANGLE_ROWS; row++) {\n      for (let col = 0; col < TRIANGLE_COLS; col++) {\n        const isFlipped = (row + col) % 2 === 1;\n        const key = `${row}-${col}`;\n        const triangle = triangleStatesRef.current.get(key);\n\n        if (!triangle) continue;\n\n        const targetScale = triangle.order <= animationProgress ? 1 : 0;\n        const scaleSpeed = 0.08;\n\n        if (triangle.scale !== targetScale) {\n          triangle.scale += (targetScale - triangle.scale) * scaleSpeed;\n          needsUpdate = true;\n        }\n\n        const x = col * (TRIANGLE_SIZE * 0.75) + canvasXPositionRef.current;\n        const y =\n          row * (TRIANGLE_SIZE * 0.85) + (isFlipped ? TRIANGLE_SIZE * 0.3 : 0);\n\n        if (x + TRIANGLE_SIZE < 0 || x - TRIANGLE_SIZE > canvasWidth) continue;\n\n        const outlineScale = Math.min(triangle.scale + 0.3, 1);\n        const fillScale = Math.max(triangle.scale - 0.2, 0);\n\n        drawTriangle(\n          outlineCtx,\n          x,\n          y,\n          TRIANGLE_SIZE,\n          isFlipped,\n          outlineScale,\n          0,\n          1\n        );\n\n        drawTriangle(fillCtx, x, y, TRIANGLE_SIZE, isFlipped, 0, fillScale, 1);\n      }\n    }\n\n    if (needsUpdate) {\n      animationFrameIdRef.current = requestAnimationFrame(() =>\n        drawGrid(scrollProgress)\n      );\n    }\n  };\n\n  const initializeTriangles = () => {\n    const positions: { key: string; row: number; col: number }[] = [];\n\n    for (let row = 0; row < TRIANGLE_ROWS; row++) {\n      for (let col = 0; col < TRIANGLE_COLS; col++) {\n        positions.push({ key: `${row}-${col}`, row, col });\n      }\n    }\n\n    const totalTriangles = positions.length;\n\n    // Shuffle positions for random animation order\n    for (let i = positions.length - 1; i > 0; i--) {\n      const j = Math.floor(Math.random() * (i + 1));\n      [positions[i], positions[j]] = [positions[j], positions[i]];\n    }\n\n    triangleStatesRef.current.clear();\n    positions.forEach((pos, index) => {\n      triangleStatesRef.current.set(pos.key, {\n        order: index / totalTriangles,\n        scale: 0,\n        row: pos.row,\n        col: pos.col,\n      });\n    });\n  };\n\n  useEffect(() => {\n    const outlineCanvas = outlineCanvasRef.current;\n    const fillCanvas = fillCanvasRef.current;\n    const stickySection = stickyRef.current;\n    const cards = cardsRef.current;\n\n    if (!outlineCanvas || !fillCanvas || !stickySection || !cards) return;\n\n    const outlineCtx = outlineCanvas.getContext(\"2d\");\n    const fillCtx = fillCanvas.getContext(\"2d\");\n\n    if (!outlineCtx || !fillCtx) return;\n\n    // Setup canvas\n    setCanvasSize(outlineCanvas, outlineCtx);\n    setCanvasSize(fillCanvas, fillCtx);\n\n    // Initialize triangles\n    initializeTriangles();\n    drawGrid();\n\n    const stickyHeight = window.innerHeight * 5;\n\n    // ScrollTrigger animation\n    const scrollTrigger = ScrollTrigger.create({\n      trigger: stickySection,\n      start: \"top top\",\n      end: `+=${stickyHeight}px`,\n      pin: true,\n      onUpdate: (self: any) => {\n        canvasXPositionRef.current = -self.progress * 200;\n        drawGrid(self.progress);\n\n        // Move cards horizontally\n        const progress = Math.min(self.progress / 0.654, 1);\n        const translateX = -progress * 200;\n        cards.style.transform = `translateX(${translateX}%)`;\n      },\n    });\n\n    const handleResize = () => {\n      if (outlineCtx && fillCtx) {\n        setCanvasSize(outlineCanvas, outlineCtx);\n        setCanvasSize(fillCanvas, fillCtx);\n        drawGrid();\n      }\n    };\n\n    window.addEventListener(\"resize\", handleResize);\n\n    return () => {\n      if (animationFrameIdRef.current) {\n        cancelAnimationFrame(animationFrameIdRef.current);\n      }\n      scrollTrigger.kill();\n      window.removeEventListener(\"resize\", handleResize);\n    };\n  }, []);\n\n  return (\n    <div\n      className={`min-h-screen ${className}`}\n      style={{ height: \"800vh\", fontFamily: '\"PP Neue Montreal\", sans-serif' }}\n    >\n      {/* Hero Section */}\n      <section className=\"relative w-screen h-screen overflow-hidden flex justify-center items-center bg-black text-white\">\n        <h1 className=\"text-center text-4xl md:text-6xl lg:text-[80px] uppercase font-light leading-none\">\n          <span className=\"text-orange-500\">Enter a Universe</span> Powered by\n          Imagination\n        </h1>\n      </section>\n\n      {/* Sticky Section */}\n      <section\n        ref={stickyRef}\n        className=\"relative w-screen h-screen overflow-hidden\"\n      >\n        <div className=\"absolute inset-0 w-full h-full bg-gradient-to-br from-slate-900 via-purple-900 to-slate-900\"></div>\n\n        <canvas\n          ref={outlineCanvasRef}\n          className=\"absolute top-0 left-0 z-[1]\"\n          style={{ width: \"150%\", height: \"150%\" }}\n        />\n\n        <div\n          ref={cardsRef}\n          className=\"absolute top-0 left-0 w-[300%] h-screen flex justify-around items-center z-[2]\"\n          style={{ willChange: \"transform\" }}\n        >\n          {defaultCards.map((card) => (\n            <div\n              key={card.id}\n              className=\"relative w-[10%] h-[75%] bg-black rounded-xl overflow-hidden flex flex-col\"\n            >\n              <div className=\"flex-1 w-full\">\n                <img\n                  src={card.image}\n                  alt={card.title}\n                  className=\"w-full h-full object-cover\"\n                />\n              </div>\n              <div className=\"absolute bottom-5 left-5 text-white\">\n                <h1 className=\"text-2xl mb-1 font-light uppercase\">\n                  {card.title}\n                </h1>\n                <p className=\"text-sm opacity-70 font-medium\">\n                  {card.productCode}\n                </p>\n              </div>\n            </div>\n          ))}\n        </div>\n\n        <canvas\n          ref={fillCanvasRef}\n          className=\"absolute top-0 left-0 z-[3]\"\n          style={{ width: \"150%\", height: \"150%\" }}\n        />\n      </section>\n\n      {/* Outro Section */}\n      <section className=\"relative w-screen h-screen overflow-hidden flex justify-center items-center bg-black text-white\">\n        <h1 className=\"text-center text-4xl md:text-6xl lg:text-[80px] uppercase font-light leading-none\">\n          Chase the <span className=\"text-orange-500\">shadows</span> to embrace\n          the light\n        </h1>\n      </section>\n    </div>\n  );\n}\n","import { cn } from \"@tuel/utils\";\nimport { motion, MotionValue, useScroll, useTransform } from \"framer-motion\";\nimport { ReactNode, useRef } from \"react\";\n\nexport interface ParallaxScrollProps {\n  children: ReactNode;\n  className?: string;\n  speed?: number;\n  offset?: [string, string];\n  direction?: \"vertical\" | \"horizontal\";\n  fadeIn?: boolean;\n  scaleOnScroll?: boolean;\n  rotateOnScroll?: boolean;\n}\n\nexport function ParallaxScroll({\n  children,\n  className,\n  speed = 0.5,\n  offset = [\"start end\", \"end start\"],\n  direction = \"vertical\",\n  fadeIn = false,\n  scaleOnScroll = false,\n  rotateOnScroll = false,\n}: ParallaxScrollProps) {\n  const ref = useRef<HTMLDivElement>(null);\n  const { scrollYProgress } = useScroll({\n    target: ref,\n    offset: offset as any,\n  });\n\n  // Calculate parallax transforms\n  const distance = 100 * speed;\n  const y = useTransform(scrollYProgress, [0, 1], [-distance, distance]);\n  const x = useTransform(scrollYProgress, [0, 1], [-distance, distance]);\n\n  // Optional effects\n  const opacity = useTransform(\n    scrollYProgress,\n    [0, 0.5, 1],\n    fadeIn ? [0, 1, 0] : [1, 1, 1]\n  );\n  const scale = useTransform(\n    scrollYProgress,\n    [0, 0.5, 1],\n    scaleOnScroll ? [0.8, 1, 0.8] : [1, 1, 1]\n  );\n  const rotate = useTransform(\n    scrollYProgress,\n    [0, 1],\n    rotateOnScroll ? [-5, 5] : [0, 0]\n  );\n\n  const transforms: { [key: string]: MotionValue<any> } = {\n    opacity,\n    scale,\n    rotate,\n  };\n\n  if (direction === \"vertical\") {\n    transforms.y = y;\n  } else {\n    transforms.x = x;\n  }\n\n  return (\n    <motion.div\n      ref={ref}\n      style={transforms}\n      className={cn(\"will-change-transform\", className)}\n    >\n      {children}\n    </motion.div>\n  );\n}\n\n// Multi-layer parallax container\nexport interface ParallaxLayerProps {\n  children: ReactNode;\n  speed: number;\n  className?: string;\n  offset?: [string, string] | number;\n  direction?: \"vertical\" | \"horizontal\";\n  fadeIn?: boolean;\n  scaleOnScroll?: boolean;\n  rotateOnScroll?: boolean;\n}\n\nexport function ParallaxLayer({\n  children,\n  speed,\n  className,\n  offset,\n  direction,\n  fadeIn,\n  scaleOnScroll,\n  rotateOnScroll,\n}: ParallaxLayerProps) {\n  // Convert numeric offset to string tuple format\n  const scrollOffset: [string, string] =\n    typeof offset === \"number\"\n      ? [`${offset * 100}% end`, `${(offset + 1) * 100}% start`]\n      : offset || [\"start end\", \"end start\"];\n\n  return (\n    <ParallaxScroll\n      speed={speed}\n      className={className}\n      offset={scrollOffset}\n      direction={direction}\n      fadeIn={fadeIn}\n      scaleOnScroll={scaleOnScroll}\n      rotateOnScroll={rotateOnScroll}\n    >\n      {children}\n    </ParallaxScroll>\n  );\n}\n\nexport interface ParallaxContainerProps {\n  children: ReactNode;\n  className?: string;\n}\n\nexport function ParallaxContainer({\n  children,\n  className,\n}: ParallaxContainerProps) {\n  return (\n    <div className={cn(\"relative overflow-hidden\", className)}>{children}</div>\n  );\n}\n","\"use client\";\n\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport React, { useEffect, useRef } from \"react\";\n\nexport interface RadgaHorizontalScrollSlide {\n  id: string;\n  image: string;\n  title: string;\n  subtitle?: string;\n}\n\nexport interface RadgaHorizontalScrollProps {\n  slides: RadgaHorizontalScrollSlide[];\n  stickyHeight?: number;\n  backgroundColor?: string;\n  outroTitle?: string;\n  outroBackgroundColor?: string;\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nexport function RadgaHorizontalScroll({\n  slides,\n  stickyHeight = 6,\n  backgroundColor = \"#b4aea7\",\n  outroTitle = \"Shaping timeless spaces with contemporary vision\",\n  outroBackgroundColor = \"#141414\",\n  className = \"\",\n  style = {},\n}: RadgaHorizontalScrollProps) {\n  const stickyRef = useRef<HTMLElement>(null);\n  const slidesContainerRef = useRef<HTMLDivElement>(null);\n  const sliderRef = useRef<HTMLDivElement>(null);\n  const slideRefs = useRef<(HTMLDivElement | null)[]>([]);\n  const currentVisibleIndexRef = useRef<number | null>(null);\n  const observerRef = useRef<IntersectionObserver | null>(null);\n\n  useEffect(() => {\n    if (!stickyRef.current || !slidesContainerRef.current || !sliderRef.current)\n      return;\n\n    // Register GSAP plugins\n    if (typeof window !== \"undefined\") {\n      gsap.registerPlugin(ScrollTrigger);\n    }\n\n    const stickySection = stickyRef.current;\n    const slidesContainer = slidesContainerRef.current;\n    const slider = sliderRef.current;\n    const slideElements = slideRefs.current.filter(Boolean) as HTMLDivElement[];\n\n    const slideWidth = window.innerWidth;\n    const totalMove = slideWidth * (slides.length - 1);\n    const stickyHeightPx = window.innerHeight * stickyHeight;\n\n    // Set up initial slide positions\n    slideElements.forEach((slide, index) => {\n      gsap.set(slide, {\n        x: index * slideWidth,\n      });\n\n      const image = slide.querySelector(\"img\") as HTMLImageElement;\n      if (image) {\n        gsap.set(image, {\n          scale: 1.35,\n        });\n      }\n    });\n\n    // Create IntersectionObserver for slide visibility\n    const observer = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          const slideIndex = slideElements.indexOf(\n            entry.target as HTMLDivElement\n          );\n          if (entry.isIntersecting && entry.intersectionRatio > 0.25) {\n            if (currentVisibleIndexRef.current !== slideIndex) {\n              currentVisibleIndexRef.current = slideIndex;\n              // You can add slide change callbacks here if needed\n            }\n          }\n        });\n      },\n      {\n        root: slider,\n        threshold: [0, 0.25],\n      }\n    );\n\n    observerRef.current = observer;\n    slideElements.forEach((slide) => observer.observe(slide));\n\n    // Main ScrollTrigger animation\n    const scrollTrigger = ScrollTrigger.create({\n      trigger: stickySection,\n      start: \"top top\",\n      end: `+=${stickyHeightPx}px`,\n      scrub: 1,\n      pin: true,\n      pinSpacing: true,\n      onUpdate: (self: any) => {\n        const progress = self.progress;\n        const mainMove = progress * totalMove;\n\n        gsap.set(slidesContainer, {\n          x: -mainMove,\n        });\n\n        const currentSlide = Math.floor(mainMove / slideWidth);\n        const slideProgress = (mainMove % slideWidth) / slideWidth;\n\n        slideElements.forEach((slide, index) => {\n          const image = slide.querySelector(\"img\") as HTMLImageElement;\n          if (image) {\n            if (index === currentSlide || index === currentSlide + 1) {\n              const relativeProgress =\n                index === currentSlide ? slideProgress : slideProgress - 1;\n              const parallaxAmount = relativeProgress * slideWidth * 0.25;\n              gsap.set(image, {\n                x: parallaxAmount,\n                scale: 1.35,\n              });\n            } else {\n              gsap.set(image, {\n                x: 0,\n                scale: 1.35,\n              });\n            }\n          }\n        });\n      },\n    });\n\n    // Cleanup function\n    return () => {\n      if (observerRef.current) {\n        observerRef.current.disconnect();\n      }\n      scrollTrigger.kill();\n    };\n  }, [slides, stickyHeight, backgroundColor]);\n\n  return (\n    <div\n      className={`radga-horizontal-scroll ${className}`}\n      style={{\n        position: \"relative\",\n        fontFamily: \"Gilroy, Arial, sans-serif\",\n        ...style,\n      }}\n    >\n      {/* Main sticky section */}\n      <section\n        ref={stickyRef}\n        className=\"radga-sticky\"\n        style={{\n          position: \"relative\",\n          width: \"100vw\",\n          height: \"100vh\",\n          overflow: \"hidden\",\n          backgroundColor,\n        }}\n      >\n        <div\n          ref={sliderRef}\n          className=\"radga-slider\"\n          style={{\n            position: \"relative\",\n            width: \"100%\",\n            height: \"100%\",\n            overflow: \"hidden\",\n          }}\n        >\n          <div\n            ref={slidesContainerRef}\n            className=\"radga-slides-container\"\n            style={{\n              position: \"relative\",\n              width: `${slides.length * 100}vw`,\n              height: \"100%\",\n              display: \"flex\",\n              willChange: \"transform\",\n            }}\n          >\n            {slides.map((slide, index) => (\n              <div\n                key={slide.id}\n                ref={(el) => {\n                  slideRefs.current[index] = el;\n                }}\n                className=\"radga-slide\"\n                style={{\n                  position: \"relative\",\n                  width: \"100vw\",\n                  height: \"100%\",\n                  overflow: \"hidden\",\n                  willChange: \"transform\",\n                }}\n              >\n                <img\n                  src={slide.image}\n                  alt={slide.title}\n                  style={{\n                    position: \"absolute\",\n                    top: 0,\n                    left: 0,\n                    width: \"100%\",\n                    height: \"100%\",\n                    objectFit: \"cover\",\n                    willChange: \"transform\",\n                  }}\n                />\n                <div\n                  className=\"radga-slide-content\"\n                  style={{\n                    position: \"absolute\",\n                    bottom: \"1.5em\",\n                    left: \"1.5em\",\n                    zIndex: 10,\n                    color: \"#fff\",\n                    pointerEvents: \"none\",\n                  }}\n                >\n                  <h1\n                    style={{\n                      margin: 0,\n                      textTransform: \"uppercase\",\n                      fontSize: \"60px\",\n                      fontWeight: 900,\n                      letterSpacing: \"-2px\",\n                      lineHeight: \"0.9\",\n                      willChange: \"transform\",\n                      fontFamily: \"Gilroy, Arial, sans-serif\",\n                    }}\n                  >\n                    {slide.title}\n                    {slide.subtitle && (\n                      <>\n                        <br />\n                        {slide.subtitle}\n                      </>\n                    )}\n                  </h1>\n                </div>\n              </div>\n            ))}\n          </div>\n        </div>\n      </section>\n\n      {/* Outro section */}\n      <section\n        className=\"radga-outro\"\n        style={{\n          position: \"relative\",\n          width: \"100vw\",\n          height: \"100vh\",\n          padding: \"1.5em\",\n          overflow: \"hidden\",\n          backgroundColor: outroBackgroundColor,\n          display: \"flex\",\n          justifyContent: \"center\",\n          alignItems: \"center\",\n          textAlign: \"center\",\n        }}\n      >\n        <h1\n          style={{\n            color: \"#fff\",\n            textTransform: \"uppercase\",\n            fontSize: \"60px\",\n            fontWeight: 900,\n            letterSpacing: \"-2px\",\n            lineHeight: \"0.9\",\n            fontFamily: \"Gilroy, Arial, sans-serif\",\n          }}\n        >\n          {outroTitle}\n        </h1>\n      </section>\n    </div>\n  );\n}\n","import { cn, isClient } from \"@tuel/utils\";\nimport { gsap } from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport { ReactNode, useEffect, useRef } from \"react\";\n\nif (isClient) {\n  gsap.registerPlugin(ScrollTrigger);\n}\n\nexport interface ScrollFrameAnimationProps {\n  frameCount: number;\n  framePath: (index: number) => string;\n  className?: string;\n  scrollSpeed?: number;\n  pinContainer?: boolean;\n  startTrigger?: string;\n  endTrigger?: string;\n  onProgress?: (progress: number) => void;\n  children?: ReactNode;\n  fallback?: ReactNode;\n  preloadFrames?: boolean;\n}\n\nexport function ScrollFrameAnimation({\n  frameCount,\n  framePath,\n  className,\n  scrollSpeed = 1,\n  pinContainer = true,\n  startTrigger = \"top top\",\n  endTrigger = \"bottom top\",\n  onProgress,\n  children,\n  fallback,\n  preloadFrames = true,\n}: ScrollFrameAnimationProps) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const contextRef = useRef<CanvasRenderingContext2D | null>(null);\n  const imagesRef = useRef<HTMLImageElement[]>([]);\n  const frameRef = useRef({ current: 0 });\n  const isLoadedRef = useRef(false);\n\n  // Set up canvas\n  useEffect(() => {\n    if (!canvasRef.current || !isClient) return;\n\n    const canvas = canvasRef.current;\n    const context = canvas.getContext(\"2d\");\n    if (!context) return;\n\n    contextRef.current = context;\n\n    // Set canvas size\n    const setCanvasSize = () => {\n      const rect = canvas.getBoundingClientRect();\n      const dpr = window.devicePixelRatio || 1;\n\n      canvas.width = rect.width * dpr;\n      canvas.height = rect.height * dpr;\n\n      context.scale(dpr, dpr);\n      canvas.style.width = rect.width + \"px\";\n      canvas.style.height = rect.height + \"px\";\n    };\n\n    setCanvasSize();\n    window.addEventListener(\"resize\", setCanvasSize);\n\n    return () => {\n      window.removeEventListener(\"resize\", setCanvasSize);\n    };\n  }, []);\n\n  // Load images\n  useEffect(() => {\n    if (!preloadFrames || !isClient) return;\n\n    let loadedCount = 0;\n    const images: HTMLImageElement[] = [];\n\n    for (let i = 0; i < frameCount; i++) {\n      const img = new Image();\n      img.onload = () => {\n        loadedCount++;\n        if (loadedCount === frameCount) {\n          isLoadedRef.current = true;\n          renderFrame(0);\n        }\n      };\n      img.src = framePath(i);\n      images.push(img);\n    }\n\n    imagesRef.current = images;\n  }, [frameCount, framePath, preloadFrames]);\n\n  const renderFrame = (frameIndex: number) => {\n    const context = contextRef.current;\n    const canvas = canvasRef.current;\n    const images = imagesRef.current;\n\n    if (!context || !canvas || images.length === 0) return;\n\n    const img = images[Math.floor(frameIndex)];\n    if (!img || !img.complete) return;\n\n    const canvasWidth = canvas.width / (window.devicePixelRatio || 1);\n    const canvasHeight = canvas.height / (window.devicePixelRatio || 1);\n\n    context.clearRect(0, 0, canvasWidth, canvasHeight);\n\n    // Cover fit the image\n    const imageAspect = img.naturalWidth / img.naturalHeight;\n    const canvasAspect = canvasWidth / canvasHeight;\n\n    let drawWidth, drawHeight, drawX, drawY;\n\n    if (imageAspect > canvasAspect) {\n      drawHeight = canvasHeight;\n      drawWidth = drawHeight * imageAspect;\n      drawX = (canvasWidth - drawWidth) / 2;\n      drawY = 0;\n    } else {\n      drawWidth = canvasWidth;\n      drawHeight = drawWidth / imageAspect;\n      drawX = 0;\n      drawY = (canvasHeight - drawHeight) / 2;\n    }\n\n    context.drawImage(img, drawX, drawY, drawWidth, drawHeight);\n  };\n\n  // Set up scroll animation\n  useEffect(() => {\n    if (!isLoadedRef.current || !isClient || !containerRef.current) return;\n\n    const tl = gsap.timeline({\n      scrollTrigger: {\n        trigger: containerRef.current,\n        start: startTrigger,\n        end: endTrigger,\n        scrub: scrollSpeed,\n        pin: pinContainer,\n        onUpdate: (self: any) => {\n          const frame = Math.floor(self.progress * (frameCount - 1));\n          frameRef.current.current = frame;\n          renderFrame(frame);\n          onProgress?.(self.progress);\n        },\n      },\n    });\n\n    return () => {\n      tl.kill();\n    };\n  }, [\n    frameCount,\n    scrollSpeed,\n    pinContainer,\n    startTrigger,\n    endTrigger,\n    onProgress,\n  ]);\n\n  if (!isClient) {\n    return <div className={className}>{fallback}</div>;\n  }\n\n  return (\n    <div ref={containerRef} className={cn(\"relative\", className)}>\n      <canvas\n        ref={canvasRef}\n        className=\"fixed top-0 left-0 w-full h-full\"\n        style={{ zIndex: -1 }}\n      />\n      {children}\n    </div>\n  );\n}\n","\"use client\";\n\nimport { cn } from \"@tuel/utils\";\nimport { useEffect, useRef, useState } from \"react\";\n\nexport interface ScrollMinimapProps {\n  images: string[];\n  activeOpacity?: number;\n  lerpFactor?: number;\n  clickLerpFactor?: number;\n  breakpoint?: number;\n  className?: string;\n  onImageChange?: (index: number) => void;\n}\n\ninterface Dimensions {\n  itemSize: number;\n  containerSize: number;\n  indicatorSize: number;\n}\n\ninterface TranslateRef {\n  current: number;\n  target: number;\n  max: number;\n}\n\nexport function ScrollMinimap({\n  images,\n  activeOpacity = 0.3,\n  lerpFactor = 0.075,\n  clickLerpFactor = 0.05,\n  breakpoint = 900,\n  className,\n  onImageChange,\n}: ScrollMinimapProps) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const itemsRef = useRef<HTMLDivElement>(null);\n  const indicatorRef = useRef<HTMLDivElement>(null);\n  const previewImageRef = useRef<HTMLImageElement>(null);\n  const itemRefs = useRef<(HTMLDivElement | null)[]>([]);\n  const animationFrameRef = useRef<number | null>(null);\n\n  const translateRef = useRef<TranslateRef>({\n    current: 0,\n    target: 0,\n    max: 0,\n  });\n\n  const [isHorizontal, setIsHorizontal] = useState(false);\n  const [currentImageIndex, setCurrentImageIndex] = useState(0);\n  const dimensionsRef = useRef<Dimensions>({\n    itemSize: 0,\n    containerSize: 0,\n    indicatorSize: 0,\n  });\n\n  const isClickMoveRef = useRef(false);\n\n  const lerp = (start: number, end: number, factor: number): number => {\n    return start + (end - start) * factor;\n  };\n\n  const updateDimensions = () => {\n    const newIsHorizontal = window.innerWidth <= breakpoint;\n    const firstItem = itemRefs.current[0];\n\n    if (!firstItem) return;\n\n    const newDimensions: Dimensions = {\n      itemSize: newIsHorizontal\n        ? firstItem.getBoundingClientRect().width\n        : firstItem.getBoundingClientRect().height,\n      containerSize: newIsHorizontal\n        ? itemsRef.current?.scrollWidth || 0\n        : itemsRef.current?.getBoundingClientRect().height || 0,\n      indicatorSize: newIsHorizontal\n        ? indicatorRef.current?.getBoundingClientRect().width || 0\n        : indicatorRef.current?.getBoundingClientRect().height || 0,\n    };\n\n    dimensionsRef.current = newDimensions;\n    translateRef.current.max =\n      newDimensions.containerSize - newDimensions.indicatorSize;\n\n    if (isHorizontal !== newIsHorizontal) {\n      setIsHorizontal(newIsHorizontal);\n    }\n  };\n\n  const getItemInIndicator = (): number => {\n    itemRefs.current.forEach((item) => {\n      const img = item?.querySelector(\"img\") as HTMLImageElement;\n      if (img) {\n        img.style.opacity = \"1\";\n      }\n    });\n\n    const indicatorStart = -translateRef.current.current;\n    const indicatorEnd = indicatorStart + dimensionsRef.current.indicatorSize;\n\n    let maxOverlap = 0;\n    let selectedIndex = 0;\n\n    itemRefs.current.forEach((item, index) => {\n      const itemStart = index * dimensionsRef.current.itemSize;\n      const itemEnd = itemStart + dimensionsRef.current.itemSize;\n\n      const overlapStart = Math.max(indicatorStart, itemStart);\n      const overlapEnd = Math.min(indicatorEnd, itemEnd);\n      const overlap = Math.max(0, overlapEnd - overlapStart);\n\n      if (overlap > maxOverlap) {\n        maxOverlap = overlap;\n        selectedIndex = index;\n      }\n    });\n\n    const selectedImg = itemRefs.current[selectedIndex]?.querySelector(\n      \"img\"\n    ) as HTMLImageElement;\n    if (selectedImg) {\n      selectedImg.style.opacity = activeOpacity.toString();\n    }\n    return selectedIndex;\n  };\n\n  const updatePreviewImage = (index: number) => {\n    if (currentImageIndex !== index) {\n      setCurrentImageIndex(index);\n      if (previewImageRef.current) {\n        previewImageRef.current.src = images[index];\n      }\n      onImageChange?.(index);\n    }\n  };\n\n  const animate = () => {\n    const currentLerpFactor = isClickMoveRef.current\n      ? clickLerpFactor\n      : lerpFactor;\n    translateRef.current.current = lerp(\n      translateRef.current.current,\n      translateRef.current.target,\n      currentLerpFactor\n    );\n\n    if (\n      Math.abs(translateRef.current.current - translateRef.current.target) >\n      0.01\n    ) {\n      const transform = isHorizontal\n        ? `translateX(${translateRef.current.current}px)`\n        : `translateY(${translateRef.current.current}px)`;\n\n      if (itemsRef.current) {\n        itemsRef.current.style.transform = transform;\n      }\n\n      const activeIndex = getItemInIndicator();\n      updatePreviewImage(activeIndex);\n    } else {\n      isClickMoveRef.current = false;\n    }\n\n    animationFrameRef.current = requestAnimationFrame(animate);\n  };\n\n  useEffect(() => {\n    const handleWheel = (e: WheelEvent) => {\n      e.preventDefault();\n      isClickMoveRef.current = false;\n\n      const delta = e.deltaY;\n      const scrollVelocity = Math.min(Math.max(delta * 0.5, -20), 20);\n\n      translateRef.current.target = Math.min(\n        Math.max(\n          translateRef.current.target - scrollVelocity,\n          -translateRef.current.max\n        ),\n        0\n      );\n    };\n\n    let touchStartY = 0;\n    const handleTouchStart = (e: TouchEvent) => {\n      if (isHorizontal) {\n        touchStartY = e.touches[0].clientY;\n      }\n    };\n\n    const handleTouchMove = (e: TouchEvent) => {\n      if (isHorizontal) {\n        const touchY = e.touches[0].clientY;\n        const deltaY = touchStartY - touchY;\n\n        const scrollVelocity = Math.min(Math.max(deltaY * 0.5, -20), 20);\n\n        translateRef.current.target = Math.min(\n          Math.max(\n            translateRef.current.target - scrollVelocity,\n            -translateRef.current.max\n          ),\n          0\n        );\n\n        touchStartY = touchY;\n        e.preventDefault();\n      }\n    };\n\n    const handleResize = () => {\n      updateDimensions();\n\n      translateRef.current.target = Math.min(\n        Math.max(translateRef.current.target, -translateRef.current.max),\n        0\n      );\n      translateRef.current.current = translateRef.current.target;\n\n      const transform = isHorizontal\n        ? `translateX(${translateRef.current.current}px)`\n        : `translateY(${translateRef.current.current}px)`;\n\n      if (itemsRef.current) {\n        itemsRef.current.style.transform = transform;\n      }\n    };\n\n    const container = containerRef.current;\n    if (container) {\n      container.addEventListener(\"wheel\", handleWheel, { passive: false });\n      container.addEventListener(\"touchstart\", handleTouchStart);\n      container.addEventListener(\"touchmove\", handleTouchMove, {\n        passive: false,\n      });\n    }\n\n    window.addEventListener(\"resize\", handleResize);\n\n    updateDimensions();\n    const firstImg = itemRefs.current[0]?.querySelector(\n      \"img\"\n    ) as HTMLImageElement;\n    if (firstImg) {\n      firstImg.style.opacity = activeOpacity.toString();\n    }\n    updatePreviewImage(0);\n    animationFrameRef.current = requestAnimationFrame(animate);\n\n    return () => {\n      if (container) {\n        container.removeEventListener(\"wheel\", handleWheel);\n        container.removeEventListener(\"touchstart\", handleTouchStart);\n        container.removeEventListener(\"touchmove\", handleTouchMove);\n      }\n      window.removeEventListener(\"resize\", handleResize);\n      if (animationFrameRef.current) {\n        cancelAnimationFrame(animationFrameRef.current);\n      }\n    };\n  }, [\n    isHorizontal,\n    activeOpacity,\n    lerpFactor,\n    clickLerpFactor,\n    breakpoint,\n    onImageChange,\n  ]);\n\n  const handleItemClick = (index: number) => {\n    isClickMoveRef.current = true;\n    const newTranslate =\n      -index * dimensionsRef.current.itemSize +\n      (dimensionsRef.current.indicatorSize - dimensionsRef.current.itemSize) /\n        2;\n\n    translateRef.current.target = Math.max(\n      Math.min(newTranslate, 0),\n      -translateRef.current.max\n    );\n  };\n\n  return (\n    <div\n      className={cn(\"scroll-minimap-container\", className)}\n      ref={containerRef}\n    >\n      <div className=\"minimap\" style={{ position: \"relative\" }}>\n        <div\n          className=\"indicator\"\n          ref={indicatorRef}\n          style={{\n            position: \"absolute\",\n            backgroundColor: \"rgba(255, 255, 255, 0.2)\",\n            border: \"1px solid rgba(255, 255, 255, 0.3)\",\n            pointerEvents: \"none\",\n            zIndex: 10,\n          }}\n        />\n        <div\n          className=\"items\"\n          ref={itemsRef}\n          style={{\n            display: \"flex\",\n            flexDirection: isHorizontal ? \"row\" : \"column\",\n          }}\n        >\n          {images.map((src, index) => (\n            <div\n              key={src}\n              className=\"item\"\n              ref={(el) => {\n                itemRefs.current[index] = el;\n              }}\n              onClick={() => handleItemClick(index)}\n              style={{\n                cursor: \"pointer\",\n                flexShrink: 0,\n              }}\n            >\n              <img\n                src={src}\n                alt={`Minimap item ${index + 1}`}\n                style={{\n                  width: \"100%\",\n                  height: \"100%\",\n                  objectFit: \"cover\",\n                  transition: \"opacity 0.3s ease\",\n                }}\n              />\n            </div>\n          ))}\n        </div>\n      </div>\n\n      <div className=\"img-preview\" style={{ position: \"fixed\" }}>\n        <img\n          ref={previewImageRef}\n          src={images[0]}\n          alt=\"Preview\"\n          style={{\n            width: \"100%\",\n            height: \"100%\",\n            objectFit: \"cover\",\n          }}\n        />\n      </div>\n    </div>\n  );\n}\n","\"use client\";\n\nimport { cn } from \"@tuel/utils\";\nimport gsap from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport { SplitText } from \"gsap/SplitText\";\nimport { useEffect, useRef } from \"react\";\nimport * as THREE from \"three\";\nimport { GLTFLoader } from \"three/examples/jsm/loaders/GLTFLoader.js\";\n\nexport interface SofiHealthScrollProps {\n  modelUrl: string;\n  className?: string;\n  headerTexts?: {\n    header1: string;\n    header2: string;\n  };\n  tooltips?: Array<{\n    icon: string;\n    title: string;\n    description: string;\n    trigger: number;\n  }>;\n  animationDuration?: number;\n  staggerDelay?: number;\n  pinHeight?: number;\n  modelSettings?: {\n    metalness?: number;\n    roughness?: number;\n    cameraDistance?: { mobile: number; desktop: number };\n    rotation?: { desktop: number };\n    position?: {\n      mobile: [number, number, number];\n      desktop: [number, number, number];\n    };\n  };\n}\n\nexport function SofiHealthScroll({\n  modelUrl,\n  className,\n  headerTexts = {\n    header1: \"Product Overview\",\n    header2: \"Key Features\",\n  },\n  tooltips = [\n    {\n      icon: \"checkmark-circle\",\n      title: \"High Quality\",\n      description: \"Premium materials and construction\",\n      trigger: 0.65,\n    },\n    {\n      icon: \"star\",\n      title: \"User Friendly\",\n      description: \"Intuitive design for everyday use\",\n      trigger: 0.85,\n    },\n  ],\n  animationDuration = 1,\n  staggerDelay = 0.025,\n  pinHeight = 10,\n  modelSettings = {\n    metalness: 0.05,\n    roughness: 0.9,\n    cameraDistance: { mobile: 2, desktop: 1.25 },\n    rotation: { desktop: -25 },\n    position: { mobile: [1, 0.085, 0], desktop: [-0.4, 0.085, 0] },\n  },\n}: SofiHealthScrollProps) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const modelContainerRef = useRef<HTMLDivElement>(null);\n  const sceneRef = useRef<THREE.Scene | null>(null);\n  const rendererRef = useRef<THREE.WebGLRenderer | null>(null);\n  const cameraRef = useRef<THREE.PerspectiveCamera | null>(null);\n  const modelRef = useRef<THREE.Object3D | null>(null);\n  const currentRotationRef = useRef(0);\n  const modelSizeRef = useRef<THREE.Vector3 | null>(null);\n\n  useEffect(() => {\n    if (typeof window === \"undefined\" || !modelContainerRef.current) return;\n\n    gsap.registerPlugin(ScrollTrigger, SplitText);\n\n    // Initialize Three.js scene\n    const scene = new THREE.Scene();\n    const camera = new THREE.PerspectiveCamera(\n      60,\n      window.innerWidth / window.innerHeight,\n      0.1,\n      1000\n    );\n    const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n\n    renderer.setClearColor(0x000000, 0);\n    renderer.setSize(window.innerWidth, window.innerHeight);\n    renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\n    renderer.shadowMap.enabled = true;\n    renderer.shadowMap.type = THREE.PCFSoftShadowMap;\n    renderer.outputColorSpace = THREE.LinearSRGBColorSpace;\n    renderer.toneMapping = THREE.NoToneMapping;\n    renderer.toneMappingExposure = 1.0;\n\n    modelContainerRef.current.appendChild(renderer.domElement);\n\n    // Store refs\n    sceneRef.current = scene;\n    rendererRef.current = renderer;\n    cameraRef.current = camera;\n\n    // Add lighting\n    scene.add(new THREE.AmbientLight(0xffffff, 0.7));\n\n    const mainLight = new THREE.DirectionalLight(0xffffff, 1.0);\n    mainLight.position.set(1, 2, 3);\n    mainLight.castShadow = true;\n    mainLight.shadow.bias = -0.001;\n    mainLight.shadow.mapSize.width = 1024;\n    mainLight.shadow.mapSize.height = 1024;\n    scene.add(mainLight);\n\n    const fillLight = new THREE.DirectionalLight(0xffffff, 0.5);\n    fillLight.position.set(-2, 0, -2);\n    scene.add(fillLight);\n\n    const setupModel = () => {\n      const model = modelRef.current;\n      const modelSize = modelSizeRef.current;\n      if (!model || !modelSize) return;\n\n      const isMobile = window.innerWidth < 1000;\n      const box = new THREE.Box3().setFromObject(model);\n      const center = box.getCenter(new THREE.Vector3());\n\n      const [mobileX, mobileY, mobileZ] = modelSettings.position?.mobile || [\n        1, 0.085, 0,\n      ];\n      const [desktopX, desktopY, desktopZ] = modelSettings.position\n        ?.desktop || [-0.4, 0.085, 0];\n\n      model.position.set(\n        isMobile\n          ? center.x + modelSize.x * mobileX\n          : -center.x - modelSize.x * desktopX,\n        -center.y + modelSize.y * (isMobile ? mobileY : desktopY),\n        -center.z + (isMobile ? mobileZ : desktopZ)\n      );\n\n      model.rotation.z = isMobile\n        ? 0\n        : THREE.MathUtils.degToRad(modelSettings.rotation?.desktop || -25);\n\n      const cameraDistance = isMobile\n        ? modelSettings.cameraDistance?.mobile || 2\n        : modelSettings.cameraDistance?.desktop || 1.25;\n\n      camera.position.set(\n        0,\n        0,\n        Math.max(modelSize.x, modelSize.y, modelSize.z) * cameraDistance\n      );\n      camera.lookAt(0, 0, 0);\n    };\n\n    // Load model\n    new GLTFLoader().load(modelUrl, (gltf) => {\n      const model = gltf.scene;\n      modelRef.current = model;\n\n      model.traverse((node) => {\n        if ((node as any).isMesh && (node as any).material) {\n          Object.assign((node as any).material, {\n            metalness: modelSettings.metalness || 0.05,\n            roughness: modelSettings.roughness || 0.9,\n          });\n        }\n      });\n\n      const box = new THREE.Box3().setFromObject(model);\n      const size = box.getSize(new THREE.Vector3());\n      modelSizeRef.current = size;\n\n      scene.add(model);\n      setupModel();\n    });\n\n    // Animation loop\n    const animate = () => {\n      requestAnimationFrame(animate);\n      renderer.render(scene, camera);\n    };\n    animate();\n\n    // Split text animations\n    const header1Split = new SplitText(\".sofi-header-1 h1\", {\n      type: \"chars\",\n      charsClass: \"char\",\n    });\n    const titleSplits = new SplitText(\".sofi-tooltip .title h2\", {\n      type: \"lines\",\n      linesClass: \"line\",\n    });\n    const descriptionSplits = new SplitText(\".sofi-tooltip .description p\", {\n      type: \"lines\",\n      linesClass: \"line\",\n    });\n\n    header1Split.chars.forEach(\n      (char) => (char.innerHTML = `<span>${char.innerHTML}</span>`)\n    );\n    [...titleSplits.lines, ...descriptionSplits.lines].forEach(\n      (line) => (line.innerHTML = `<span>${line.innerHTML}</span>`)\n    );\n\n    const animOptions = {\n      duration: animationDuration,\n      ease: \"power3.out\",\n      stagger: staggerDelay,\n    };\n\n    // Header 1 animation\n    ScrollTrigger.create({\n      trigger: \".sofi-product-overview\",\n      start: \"75% bottom\",\n      onEnter: () =>\n        gsap.to(\".sofi-header-1 h1 .char > span\", {\n          y: \"0%\",\n          ...animOptions,\n        }),\n      onLeaveBack: () =>\n        gsap.to(\".sofi-header-1 h1 .char > span\", {\n          y: \"100%\",\n          ...animOptions,\n        }),\n    });\n\n    // Main scroll animation\n    ScrollTrigger.create({\n      trigger: \".sofi-product-overview\",\n      start: \"top top\",\n      end: `+=${window.innerHeight * pinHeight}px`,\n      pin: true,\n      pinSpacing: true,\n      scrub: 1,\n      onUpdate: ({ progress }) => {\n        // Header 1 slide out\n        const headerProgress = Math.max(\n          0,\n          Math.min(1, (progress - 0.05) / 0.3)\n        );\n        gsap.to(\".sofi-header-1\", {\n          xPercent:\n            progress < 0.05\n              ? 0\n              : progress > 0.35\n              ? -100\n              : -100 * headerProgress,\n        });\n\n        // Circular mask reveal\n        const maskSize =\n          progress < 0.2\n            ? 0\n            : progress > 0.3\n            ? 100\n            : 100 * ((progress - 0.2) / 0.1);\n        gsap.to(\".sofi-circular-mask\", {\n          clipPath: `circle(${maskSize}% at 50% 50%)`,\n        });\n\n        // Header 2 animation\n        const header2Progress = (progress - 0.15) / 0.35;\n        const header2XPercent =\n          progress < 0.15\n            ? 100\n            : progress > 0.5\n            ? -200\n            : 100 - 300 * header2Progress;\n        gsap.to(\".sofi-header-2\", { xPercent: header2XPercent });\n\n        // Tooltip divider scale\n        const scaleX =\n          progress < 0.45\n            ? 0\n            : progress > 0.65\n            ? 100\n            : 100 * ((progress - 0.45) / 0.2);\n        gsap.to(\".sofi-tooltip .divider\", {\n          scaleX: `${scaleX}%`,\n          ...animOptions,\n        });\n\n        // Tooltip animations\n        tooltips.forEach((tooltip, index) => {\n          const elements = [\n            `.sofi-tooltip:nth-child(${index + 1}) .icon i`,\n            `.sofi-tooltip:nth-child(${index + 1}) .title .line > span`,\n            `.sofi-tooltip:nth-child(${index + 1}) .description .line > span`,\n          ];\n\n          gsap.to(elements, {\n            y: progress >= tooltip.trigger ? \"0%\" : \"125%\",\n            ...animOptions,\n          });\n        });\n\n        // Model rotation\n        const model = modelRef.current;\n        if (model && progress >= 0.05) {\n          const rotationProgress = (progress - 0.05) / 0.95;\n          const targetRotation = Math.PI * 3 * 4 * rotationProgress;\n          const rotationDiff = targetRotation - currentRotationRef.current;\n          if (Math.abs(rotationDiff) > 0.001) {\n            model.rotateOnAxis(new THREE.Vector3(0, 1, 0), rotationDiff);\n            currentRotationRef.current = targetRotation;\n          }\n        }\n      },\n    });\n\n    // Resize handler\n    const handleResize = () => {\n      camera.aspect = window.innerWidth / window.innerHeight;\n      camera.updateProjectionMatrix();\n      renderer.setSize(window.innerWidth, window.innerHeight);\n      setupModel();\n    };\n\n    window.addEventListener(\"resize\", handleResize);\n\n    return () => {\n      window.removeEventListener(\"resize\", handleResize);\n      ScrollTrigger.getAll().forEach((trigger) => trigger.kill());\n      if (modelContainerRef.current && renderer.domElement) {\n        modelContainerRef.current.removeChild(renderer.domElement);\n      }\n      renderer.dispose();\n    };\n  }, [\n    modelUrl,\n    animationDuration,\n    staggerDelay,\n    pinHeight,\n    modelSettings,\n    tooltips,\n  ]);\n\n  return (\n    <div className={cn(\"sofi-health-scroll\", className)} ref={containerRef}>\n      <div className=\"sofi-product-overview\">\n        <div className=\"sofi-model-container\" ref={modelContainerRef} />\n\n        <div className=\"sofi-header-1\">\n          <h1>{headerTexts.header1}</h1>\n        </div>\n\n        <div className=\"sofi-circular-mask\">\n          <div className=\"sofi-header-2\">\n            <h1>{headerTexts.header2}</h1>\n\n            <div className=\"sofi-tooltips\">\n              {tooltips.map((tooltip, index) => (\n                <div key={index} className=\"sofi-tooltip\">\n                  <div className=\"icon\">\n                    <i className={`icon-${tooltip.icon}`} />\n                  </div>\n                  <div className=\"divider\"></div>\n                  <div className=\"content\">\n                    <div className=\"title\">\n                      <h2>{tooltip.title}</h2>\n                    </div>\n                    <div className=\"description\">\n                      <p>{tooltip.description}</p>\n                    </div>\n                  </div>\n                </div>\n              ))}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n","\"use client\";\n\nimport { cn } from \"@tuel/utils\";\nimport gsap from \"gsap\";\nimport { ScrollTrigger } from \"gsap/ScrollTrigger\";\nimport { useEffect, useRef } from \"react\";\n\nexport interface TheFirstTheLastScrollProps {\n  cards: Array<{\n    id: string;\n    content: React.ReactNode;\n    rotation?: number;\n  }>;\n  className?: string;\n  pinHeight?: number;\n  distanceMultiplier?: number;\n  exitDistance?: {\n    x: number;\n    y: number;\n  };\n}\n\nexport function TheFirstTheLastScroll({\n  cards,\n  className,\n  pinHeight = 8,\n  distanceMultiplier = 0.15,\n  exitDistance = { x: 0.3, y: 0.3 },\n}: TheFirstTheLastScrollProps) {\n  const containerRef = useRef<HTMLDivElement>(null);\n  const cardRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n  const defaultRotations = [-12, 10, -5, 5, -5, -2];\n\n  useEffect(() => {\n    if (typeof window === \"undefined\" || !containerRef.current) return;\n\n    gsap.registerPlugin(ScrollTrigger);\n\n    const cardElements = cardRefs.current.filter(Boolean);\n    const rotations = cards.map((card, index) =>\n      card.rotation !== undefined\n        ? card.rotation\n        : defaultRotations[index % defaultRotations.length]\n    );\n\n    // Set initial positions\n    cardElements.forEach((card, index) => {\n      if (card) {\n        gsap.set(card, {\n          y: window.innerHeight,\n          rotate: rotations[index],\n        });\n      }\n    });\n\n    // Create scroll trigger\n    const scrollTrigger = ScrollTrigger.create({\n      trigger: containerRef.current,\n      start: \"top top\",\n      end: `+=${window.innerHeight * pinHeight}px`,\n      pin: true,\n      pinSpacing: true,\n      scrub: 1,\n      onUpdate: (self) => {\n        const progress = self.progress;\n        const totalCards = cardElements.length;\n        const progressPerCard = 1 / totalCards;\n\n        cardElements.forEach((card, index) => {\n          if (!card) return;\n\n          const cardStart = index * progressPerCard;\n          let cardProgress = (progress - cardStart) / progressPerCard;\n          cardProgress = Math.min(Math.max(cardProgress, 0), 1);\n\n          let yPos = window.innerHeight * (1 - cardProgress);\n          let xPos = 0;\n\n          // Handle exit animation for all cards except the last one\n          if (cardProgress === 1 && index < totalCards - 1) {\n            const remainingProgress =\n              (progress - (cardStart + progressPerCard)) /\n              (1 - (cardStart + progressPerCard));\n\n            if (remainingProgress > 0) {\n              const currentDistanceMultiplier = 1 - index * distanceMultiplier;\n              xPos =\n                -window.innerWidth *\n                exitDistance.x *\n                currentDistanceMultiplier *\n                remainingProgress;\n              yPos =\n                -window.innerHeight *\n                exitDistance.y *\n                currentDistanceMultiplier *\n                remainingProgress;\n            }\n          }\n\n          gsap.to(card, {\n            y: yPos,\n            x: xPos,\n            duration: 0,\n            ease: \"none\",\n          });\n        });\n      },\n    });\n\n    return () => {\n      scrollTrigger.kill();\n    };\n  }, [cards, pinHeight, distanceMultiplier, exitDistance]);\n\n  return (\n    <div className={cn(\"the-first-the-last-scroll\", className)}>\n      <div className=\"sticky-cards\" ref={containerRef}>\n        {cards.map((card, index) => (\n          <div\n            key={card.id}\n            className=\"card\"\n            ref={(el) => {\n              cardRefs.current[index] = el;\n            }}\n            style={{\n              position: \"absolute\",\n              top: 0,\n              left: 0,\n              width: \"100%\",\n              height: \"100vh\",\n              display: \"flex\",\n              alignItems: \"center\",\n              justifyContent: \"center\",\n            }}\n          >\n            {card.content}\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n}\n"]}