{"version":3,"sources":["jsdelivr-header.js","/gh/webflow/brand_studio@4cb9e7e/resources/webflow-conf-2025/intro-animation.js"],"names":[],"mappings":"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","file":"/gh/webflow/brand_studio@4cb9e7e/resources/webflow-conf-2025/intro-animation.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /gh/webflow/brand_studio@4cb9e7e/resources/webflow-conf-2025/intro-animation.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","//--------------------------------------\n//---- Intro Animation -----------------\n//--------------------------------------\n//\n\n// Add Safari detection at the top of the file\nconst isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n// Check if screen is smaller than 991px to determine mobile view\nconst isMobileView = window.innerWidth < 991;\n\n// Track user's visit state using localStorage and sessionStorage\n// hasVisitedBefore: Persists across sessions using localStorage\n// isIntroTriggered: Temporary state for current session using sessionStorage\n// isFirstVisit: True only on very first visit to the site\nconst hasVisitedBefore = localStorage.getItem(\"hasVisitedWFC25\") === \"true\";\nconst isIntroTriggered =\n  sessionStorage.getItem(\"wfc25IntroTriggered\") === \"true\";\nconst isFirstVisit =\n  !hasVisitedBefore && !sessionStorage.getItem(\"shouldReload\");\n\n// Handle first visit reload - ensures proper initialization\nif (isFirstVisit) {\n  sessionStorage.setItem(\"shouldReload\", \"true\");\n  location.reload(true);\n  throw new Error(\"Reloading for first visit\");\n}\n\n// Clean up reload flag after use\nif (sessionStorage.getItem(\"shouldReload\")) {\n  sessionStorage.removeItem(\"shouldReload\");\n}\n\n// Set visited flag in localStorage (except when triggered by button)\nif (!isIntroTriggered && !hasVisitedBefore) {\n  localStorage.setItem(\"hasVisitedWFC25\", \"true\");\n} else if (isIntroTriggered) {\n  sessionStorage.removeItem(\"wfc25IntroTriggered\");\n}\n\n// Determine if intro animation should be shown\n// Only shows on desktop and either first visit or triggered by button\nconst shouldShowIntro =\n  !isMobileView && (!hasVisitedBefore || isIntroTriggered);\n\n// Get the animated wrapper element that contains the intro animation\nconst wrapper = document.querySelector(\"#animated-wrapper\");\n\n// Handle wrapper visibility based on intro animation state\nif (wrapper) {\n  wrapper.style.display = shouldShowIntro ? \"block\" : \"none\";\n  if (shouldShowIntro) {\n    wrapper.style.visibility = \"visible\";\n  }\n}\n\n// Function to force scroll to top of page\nfunction forceScrollToTop() {\n  if (window.scrollY !== 0) {\n    window.scrollTo(0, 0);\n  }\n}\n\n// Variables to track animation state\nlet scrollAnimationFrame; // Stores the animation frame ID\nlet startTime; // Tracks when animation started\n\n// Function to continuously check and maintain scroll position\n// Runs for 2 seconds to ensure page stays at top during intro\nfunction checkScroll(timestamp) {\n  if (!startTime) startTime = timestamp;\n  const elapsedTime = timestamp - startTime;\n\n  if (elapsedTime < 2000) {\n    forceScrollToTop();\n    scrollAnimationFrame = requestAnimationFrame(checkScroll);\n  } else {\n    cancelAnimationFrame(scrollAnimationFrame);\n  }\n}\n\n// Initialize scroll checking if intro animation should be shown\nif (shouldShowIntro) {\n  scrollAnimationFrame = requestAnimationFrame(checkScroll);\n\n  // Add scroll event listener to prevent scrolling during intro\n  const scrollHandler = () => {\n    forceScrollToTop();\n  };\n\n  window.addEventListener(\"scroll\", scrollHandler);\n\n  // Remove scroll handler after 2 seconds\n  setTimeout(() => {\n    window.removeEventListener(\"scroll\", scrollHandler);\n  }, 2000);\n}\n\n// Ensure page is at top before unloading\nwindow.onbeforeunload = function () {\n  forceScrollToTop();\n};\n\n// Register GSAP plugins needed for animations\ngsap.registerPlugin(Observer, ScrollTrigger);\n\n// Initialize Lenis for smooth scrolling with optimized settings\nlet lenis = new Lenis({\n  lerp: 0.15, // Subtle smoothing for natural feel\n  wheelMultiplier: 1, // Native 1:1 wheel speed\n  gestureOrientation: \"vertical\",\n  normalizeWheel: true, // Ensures consistent behavior across browsers\n  smoothTouch: false, // Disable touch smoothing for mobile\n  touchMultiplier: 1, // Native touch response\n  infinite: false, // Standard scroll boundaries\n});\n\n// Track animation state\nlet isInAnimatedSection = false;\nlet initialAnimationComplete = false;\n\n// Animation frame loop for smooth scrolling\nfunction raf(time) {\n  if (shouldShowIntro) {\n    lenis.raf(time);\n  }\n  requestAnimationFrame(raf);\n}\nrequestAnimationFrame(raf);\n\n// Clean up if intro animation shouldn't be shown\nif (!shouldShowIntro && wrapper) {\n  wrapper.style.display = \"none\";\n  lenis.destroy();\n}\n\n// Define clip path shapes for animations\nconst clipPaths = {\n  first: {\n    initial: \"polygon(46% 45%, 54% 45%, 55% 55%, 45% 55%)\",\n    final: \"polygon(48% 50%, 52% 50%, 54% 50%, 46% 50%)\",\n  },\n  second: {\n    initial: \"polygon(46% 50%, 54% 50%, 52% 50%, 48% 50%)\",\n    final: \"polygon(46% 45%, 54% 45%, 55% 55%, 45% 55%)\",\n  },\n  third: {\n    initial: \"polygon(46% 45%, 54% 45%, 55% 55%, 45% 55%)\",\n    final: \"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)\",\n  },\n};\n\n// Cache DOM elements for better performance\nlet sections = wrapper.querySelectorAll(\"[data-scroll-section]\"),\n  images = wrapper.querySelectorAll(\".bg\"),\n  headings = gsap.utils.toArray(\n    wrapper.querySelectorAll(\"[data-scroll-title]\")\n  ),\n  headingsSecondary = gsap.utils.toArray(\n    wrapper.querySelectorAll(\"[data-scroll-title-1]\")\n  ),\n  text = wrapper.querySelectorAll(\"[data-scroll-text]\"),\n  textSecondary = wrapper.querySelectorAll(\"[data-scroll-text-1]\"),\n  outerWrappers = gsap.utils.toArray(wrapper.querySelectorAll(\".outer\")),\n  innerWrappers = gsap.utils.toArray(wrapper.querySelectorAll(\".inner\")),\n  splitHeadings = [],\n  splitHeadingsSecondary = [],\n  currentIndex = -1,\n  animating;\n\n// Add click event listener for intro trigger button\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const triggerButton = document.querySelector(\"[data-wfc-intro-trigger]\");\n  if (triggerButton) {\n    triggerButton.addEventListener(\"click\", () => {\n      // Set flag to show animation on next page load\n      sessionStorage.setItem(\"wfc25IntroTriggered\", \"true\");\n\n      // Force scroll to top and prevent scrolling\n      forceScrollToTop();\n\n      // Maintain animated state through reload\n      sessionStorage.setItem(\"maintainAnimatedState\", \"true\");\n\n      // Start continuous scroll checking before reload\n      requestAnimationFrame(function checkBeforeReload(timestamp) {\n        forceScrollToTop();\n        setTimeout(() => {\n          location.reload();\n        }, 50);\n      });\n    });\n  }\n});\n\n// Handle maintaining animated state after reload\nif (sessionStorage.getItem(\"maintainAnimatedState\") === \"true\") {\n  sessionStorage.removeItem(\"maintainAnimatedState\");\n  isInAnimatedSection = true;\n  currentIndex = 0;\n  initialAnimationComplete = false; // Reset for new animation\n\n  // Ensure wrapper is properly set up\n  if (wrapper) {\n    gsap.set(wrapper, {\n      display: \"block\",\n      height: \"100vh\",\n      overflow: \"hidden\",\n      visibility: \"visible\",\n    });\n  }\n\n  // Stop Lenis scrolling\n  if (lenis) {\n    lenis.stop();\n  }\n\n  // Force scroll position\n  window.scrollTo(0, 0);\n}\n\n// Initialize GSAP plugins needed for outro animation\ngsap.registerPlugin(ScrollTrigger);\n\n//--------------------------------------\n//---- Outro Animation -----------------\n//--------------------------------------\n\n// Cache outro section elements\nconst outroSection = document.querySelector(\"#outro\");\nconst outroImg = outroSection?.querySelector(\"[data-outro-img]\");\nconst outroLeft = outroSection?.querySelector(\"[data-outro-left]\");\nconst outroRight = outroSection?.querySelector(\"[data-outro-right]\");\n\nif (outroImg) {\n  // Set initial states for outro elements\n  gsap.set(outroImg, {\n    clipPath: \"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)\",\n  });\n\n  if (outroLeft) {\n    gsap.set(outroLeft, { x: \"10vw\" });\n  }\n\n  if (outroRight) {\n    gsap.set(outroRight, { x: \"-10vw\" });\n  }\n\n  // Calculate trigger offset based on intro animation state\n  const triggerOffset = shouldShowIntro ? \"130%\" : \"30%\"; // Add 100vh when intro is hidden\n  \n  const endOffset = shouldShowIntro ? \"10% 130%\" : \"10% 30%\"; // Add 100vh when intro is hidden\n\n  // Create the outro animation timeline\n  const outroTl = gsap.timeline({\n    defaults: {\n      ease: \"none\",\n    },\n  });\n\n  // Add all animations to the timeline\n  outroTl\n    .fromTo(\n      outroImg,\n      { clipPath: \"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)\" },\n      { clipPath: \"polygon(45.5% 45%, 54.5% 45%, 55% 55%, 45% 55%)\" }\n    )\n    .to(\n      [outroLeft, outroRight],\n      {\n        x: \"0\",\n      },\n      0\n    );\n\n  // Create the ScrollTrigger for outro animation\n  const outroTrigger = ScrollTrigger.create({\n    trigger: outroSection,\n    start: `top ${triggerOffset}`,\n    end: endOffset,\n    animation: outroTl,\n    scrub: 1, // Smooth scrubbing effect\n  });\n\n  // Add refresh listener to ensure proper trigger behavior\n  ScrollTrigger.addEventListener(\"refresh\", () => {\n    if (outroTrigger) {\n      outroTrigger.refresh();\n    }\n  });\n\n  // Reset state if section is not in view\n  if (!outroTrigger.isActive) {\n    gsap.set(outroImg, {\n      clipPath: \"polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)\",\n    });\n    if (outroLeft) gsap.set(outroLeft, { x: \"10vw\" });\n    if (outroRight) gsap.set(outroRight, { x: \"-10vw\" });\n  }\n}\n\n// Wait for fonts to load before initializing animations\ndocument.fonts.ready.then(() => {\n  // Skip animation initialization if not needed\n  if (!shouldShowIntro) return;\n\n  // Initialize split text animations if available\n  if (typeof SplitText !== \"undefined\") {\n    splitHeadings = headings.map((heading) => {\n      if (!heading) return null;\n      try {\n        return new SplitText(heading, {\n          type: \"lines\",\n          linesClass: \"clip-text\",\n        });\n      } catch (error) {\n        return null;\n      }\n    });\n\n    splitHeadingsSecondary = headingsSecondary.map((heading) => {\n      if (!heading) return null;\n      try {\n        return new SplitText(heading, {\n          type: \"lines\",\n          linesClass: \"clip-text\",\n        });\n      } catch (error) {\n        return null;\n      }\n    });\n  }\n\n  // Set initial states for sections\n  gsap.set(sections, {\n    autoAlpha: 0,\n    display: \"block\",\n    visibility: \"visible\",\n  });\n\n  // Set initial state for secondary elements\n  const secondaryTitles = wrapper.querySelectorAll(\"[data-scroll-title-1]\");\n  const secondaryTexts = wrapper.querySelectorAll(\"[data-scroll-text-1]\");\n\n  gsap.set([secondaryTitles, secondaryTexts], {\n    autoAlpha: 0,\n    y: 20,\n  });\n\n  // Initialize first section\n  if (sections.length > 0) {\n    gsap.set(sections[0], {\n      autoAlpha: 1,\n      zIndex: 1,\n      display: \"block\",\n      visibility: \"visible\",\n    });\n\n    if (outerWrappers[0]) gsap.set(outerWrappers[0], { yPercent: 0 });\n    if (innerWrappers[0]) gsap.set(innerWrappers[0], { yPercent: 0 });\n\n    // Find elements to animate in first section\n    const flipImages = sections[0].querySelectorAll(\"[data-flip-img]\");\n    const initialTl = gsap.timeline({\n      onStart: () => {\n        animating = true;\n        isInAnimatedSection = true;\n        initialAnimationComplete = false;\n        if (lenis) lenis.stop();\n\n        // Ensure wrapper setup during initial animation\n        gsap.set(wrapper, {\n          display: \"block\",\n          height: \"100vh\",\n          overflow: \"hidden\",\n          visibility: \"visible\",\n        });\n      },\n      onComplete: () => {\n        animating = false;\n        currentIndex = 0;\n        initialAnimationComplete = true;\n      },\n    });\n\n    // Cache UI elements\n    const infoWrapper = wrapper.querySelector(\".scroll-wfc25-info-wrapper\");\n    const navMenu = document.querySelector(\".wfc25-nav-menu\");\n    const scrollDown = document.querySelector(\".intro_scroll-down_wrap\");\n\n    // Set initial states for UI elements\n    if (infoWrapper) {\n      gsap.set(infoWrapper, { autoAlpha: 0 });\n    }\n\n    if (navMenu) {\n      gsap.set(navMenu, { autoAlpha: 0 });\n    }\n\n    if (scrollDown) {\n      gsap.set(scrollDown, { autoAlpha: 0 });\n    }\n\n    // Animate clip paths for flip images\n    flipImages.forEach((img) => {\n      gsap.set(img, { clipPath: clipPaths.first.initial });\n\n      initialTl\n        .fromTo(\n          img,\n          {\n            clipPath: clipPaths.first.initial,\n          },\n          {\n            clipPath: clipPaths.first.final,\n            duration: 1,\n            ease: \"power4.in\",\n          }\n        )\n        .fromTo(\n          img,\n          {\n            clipPath: clipPaths.second.initial,\n          },\n          {\n            clipPath: clipPaths.second.final,\n            duration: 1,\n            ease: \"power4.out\",\n          }\n        );\n    });\n\n    // Fade in UI elements\n    const elementsToFade = [infoWrapper, navMenu, scrollDown].filter(Boolean);\n    if (elementsToFade.length > 0) {\n      initialTl.to(\n        elementsToFade,\n        {\n          autoAlpha: 1,\n          duration: 0.8,\n          ease: \"power2.out\",\n        },\n        \"+=0.05\"\n      );\n    }\n\n    // Ensure wrapper setup during initial animation\n    gsap.set(wrapper, {\n      display: \"block\",\n      height: \"100vh\",\n      overflow: \"hidden\",\n      visibility: \"visible\",\n    });\n  }\n\n  // Handle entering/leaving animated section\n  function goToTop() {\n    // Only apply if animation should be shown\n    if (!shouldShowIntro) return;\n\n    // Force scroll to absolute top\n    window.scrollTo(0, 0);\n\n    lenis.stop();\n    isInAnimatedSection = true;\n  }\n\n  // Only create ScrollTriggers if intro animation should be shown\n  if (shouldShowIntro) {\n    // Create ScrollTrigger for the animated wrapper section\n    ScrollTrigger.create({\n      trigger: wrapper,\n      start: \"top top\",\n      end: \"bottom top\",\n      onLeave: () => {\n        // Ensure clean state before proceeding\n        const cleanup = () => {\n          isInAnimatedSection = false;\n          \n          // Remove theme class when leaving the animated wrapper\n          const infoWrapper = document.querySelector(\".scroll-wfc25-info-wrapper\");\n          const navMenu = document.querySelector(\".wfc25-nav\");\n          if (infoWrapper) infoWrapper.classList.remove(\"wfc25-theme-base\");\n          if (navMenu) navMenu.classList.remove(\"wfc25-theme-base\");\n          \n          if (lenis) {\n            lenis.stop();\n            lenis.destroy();\n          }\n          \n          // Force cleanup of all GSAP animations\n          gsap.killTweensOf(wrapper);\n          gsap.killTweensOf(wrapper.querySelectorAll(\"*\"));\n          \n          // Kill all ScrollTriggers for this wrapper\n          ScrollTrigger.getAll().forEach(trigger => {\n            if (trigger.vars.trigger === wrapper || \n                (trigger.vars.trigger && trigger.vars.trigger.closest(\"#animated-wrapper\"))) {\n              trigger.kill();\n            }\n          });\n          \n          // Kill all Observers\n          Observer.getAll().forEach(observer => {\n            if (observer.vars.target === wrapper) {\n              observer.kill();\n            }\n          });\n          \n          // Safari-specific handling\n          if (isSafari) {\n            // First, ensure we're at the top\n            window.scrollTo({\n              top: 0,\n              behavior: 'instant'\n            });\n            \n            // Force scroll to top immediately\n            document.documentElement.scrollTop = 0;\n            document.body.scrollTop = 0;\n            \n            // Then ensure scrolling is enabled\n            document.body.style.overflow = 'visible';\n            document.documentElement.style.overflow = 'visible';\n            document.body.style.position = 'relative';\n            document.documentElement.style.position = 'relative';\n            \n            // Force immediate style updates with !important\n            wrapper.style.cssText = `\n              display: none !important;\n              visibility: hidden !important;\n              opacity: 0 !important;\n              position: absolute !important;\n              top: 0 !important;\n              left: 0 !important;\n              width: 100% !important;\n              height: 100% !important;\n              pointer-events: none !important;\n              z-index: -1 !important;\n            `;\n            \n            // Force a repaint\n            wrapper.offsetHeight;\n            \n            // Use setTimeout to ensure cleanup completes\n            setTimeout(() => {\n              // Clear all GSAP properties and set new ones\n              gsap.set(wrapper, {\n                clearProps: \"all\",\n                display: \"none\",\n                visibility: \"hidden\",\n                opacity: 0,\n                position: \"absolute\",\n                top: 0,\n                left: 0,\n                width: \"100%\",\n                height: \"100%\",\n                pointerEvents: \"none\",\n                zIndex: -1\n              });\n              \n              // Additional direct style manipulation\n              wrapper.style.cssText = `\n                display: none !important;\n                visibility: hidden !important;\n                opacity: 0 !important;\n                position: absolute !important;\n                top: 0 !important;\n                left: 0 !important;\n                width: 100% !important;\n                height: 100% !important;\n                pointer-events: none !important;\n                z-index: -1 !important;\n              `;\n              \n              // Ensure date wrapper color is reset\n              const dateWrapper = document.querySelector('.wfc-date-wrapper');\n              if (dateWrapper) {\n                dateWrapper.classList.remove('wfc25-theme-base');\n              }\n              \n              // Remove any remaining scroll locks\n              document.body.style.overflow = 'visible';\n              document.documentElement.style.overflow = 'visible';\n              document.body.style.position = 'relative';\n              document.documentElement.style.position = 'relative';\n              \n              // Re-enable touch events\n              document.body.style.touchAction = 'pan-y';\n              document.documentElement.style.touchAction = 'pan-y';\n              \n              // Force scroll to top again after cleanup\n              window.scrollTo({\n                top: 0,\n                behavior: 'instant'\n              });\n              document.documentElement.scrollTop = 0;\n              document.body.scrollTop = 0;\n              \n              // Force a final repaint\n              document.body.offsetHeight;\n              \n              // Additional check to ensure wrapper is hidden\n              if (wrapper.style.display !== 'none' || wrapper.style.visibility !== 'hidden') {\n                wrapper.style.display = 'none';\n                wrapper.style.visibility = 'hidden';\n                wrapper.style.opacity = '0';\n                wrapper.style.position = 'absolute';\n                wrapper.style.zIndex = '-1';\n              }\n              \n              // Create a new Lenis instance for smooth scrolling\n              if (isSafari) {\n                lenis = new Lenis({\n                  lerp: 0.15,\n                  wheelMultiplier: 1,\n                  gestureOrientation: \"vertical\",\n                  normalizeWheel: true,\n                  smoothTouch: false,\n                  touchMultiplier: 1,\n                  infinite: false,\n                });\n                \n                // Start the Lenis animation loop\n                function raf(time) {\n                  lenis.raf(time);\n                  requestAnimationFrame(raf);\n                }\n                requestAnimationFrame(raf);\n              }\n            }, 100);\n          } else {\n            gsap.set(wrapper, {\n              display: \"none\",\n              visibility: \"hidden\"\n            });\n          }\n          \n          // Remove event listeners\n          window.removeEventListener(\"scroll\", forceScrollToTop);\n          if (scrollAnimationFrame) {\n            cancelAnimationFrame(scrollAnimationFrame);\n          }\n          \n          // Update storage\n          localStorage.setItem(\"hasVisitedWFC25\", \"true\");\n        };\n        \n        // Safari: Use RAF to ensure synchronous style updates\n        if (isSafari) {\n          // First ensure we're at the top\n          window.scrollTo({\n            top: 0,\n            behavior: 'instant'\n          });\n          document.documentElement.scrollTop = 0;\n          document.body.scrollTop = 0;\n          \n          // Then ensure scrolling is enabled\n          document.body.style.overflow = 'visible';\n          document.documentElement.style.overflow = 'visible';\n          \n          requestAnimationFrame(() => {\n            cleanup();\n          });\n        } else {\n          cleanup();\n        }\n      },\n      onEnterBack: () => {\n        // Only add the class back if we were past the animation point\n        if (currentIndex > 0) {\n          const infoWrapper = document.querySelector(\".scroll-wfc25-info-wrapper\");\n          const navMenu = document.querySelector(\".wfc25-nav\");\n          if (infoWrapper) infoWrapper.classList.add(\"wfc25-theme-base\");\n          if (navMenu) navMenu.classList.add(\"wfc25-theme-base\");\n        }\n        goToTop();\n      }\n    });\n\n    // Create additional ScrollTrigger for handling re-entry\n    ScrollTrigger.create({\n      trigger: wrapper,\n      start: \"top 10%\",\n      end: \"top -10%\",\n      onEnter: () => {\n        goToTop();\n      },\n      onLeaveBack: () => {\n        // Remove theme class when going back to the start\n        const infoWrapper = document.querySelector(\n          \".scroll-wfc25-info-wrapper\"\n        );\n        const navMenu = document.querySelector(\".wfc25-nav\");\n        if (infoWrapper) infoWrapper.classList.remove(\"wfc25-theme-base\");\n        if (navMenu) navMenu.classList.remove(\"wfc25-theme-base\");\n\n        isInAnimatedSection = false;\n        lenis.start();\n      },\n    });\n  }\n\n  // Initialize Observer with mobile-friendly behavior\n  if (shouldShowIntro) {\n    Observer.create({\n      target: wrapper,\n      type: \"wheel,touch,pointer\",\n      wheelSpeed: -1,\n      dragMinimum: 3,\n      tolerance: 10,\n      onDown: () => {\n        if (!initialAnimationComplete) return;\n\n        if (isInAnimatedSection && !animating) {\n          if (currentIndex > 0) {\n            gotoSection(currentIndex - 1, -1);\n          }\n        }\n      },\n      onUp: () => {\n        if (!initialAnimationComplete) return;\n\n        if (isInAnimatedSection && !animating) {\n          if (currentIndex === sections.length - 1) {\n            isInAnimatedSection = false;\n            lenis.start();\n\n            setTimeout(() => {\n              window.scrollBy({\n                top: 5,\n                behavior: \"smooth\",\n              });\n            }, 100);\n          } else {\n            gotoSection(currentIndex + 1, 1);\n          }\n        }\n      },\n      preventDefault: (e) => {\n        if (!initialAnimationComplete) return true;\n        return isInAnimatedSection;\n      },\n      lockAxis: true,\n    });\n\n    // Create ScrollTrigger for handling re-entry\n    ScrollTrigger.create({\n      trigger: wrapper,\n      start: \"top top\",\n      end: \"4px top\",\n      onLeave: () => {\n        isInAnimatedSection = false;\n        sessionStorage.removeItem(\"maintainAnimatedState\");\n      },\n      onEnterBack: () => {\n        window.scrollTo(0, 0);\n        isInAnimatedSection = true;\n        lenis.stop();\n\n        gsap.set(wrapper, {\n          display: \"block\",\n          height: \"100vh\",\n          overflow: \"hidden\",\n          visibility: \"visible\",\n        });\n\n        if (sections[currentIndex]) {\n          gsap.set(sections[currentIndex], {\n            display: \"block\",\n            visibility: \"visible\",\n            autoAlpha: 1,\n            zIndex: 1,\n          });\n        }\n      },\n    });\n  }\n\n  // Add wheel event listener with passive: false for better scroll control\n  window.addEventListener(\n    \"wheel\",\n    (e) => {\n      if (isInAnimatedSection) {\n        // Wheel event handling without logging\n      }\n    },\n    { passive: false }\n  );\n\n  // Start at first section only if animation should be shown\n  if (shouldShowIntro) {\n    gotoSection(0, 1);\n  }\n});\n\n// Helper function to wrap index within valid range\nfunction wrapIndex(index) {\n  if (index < 0) return 0;\n  if (index >= sections.length) return sections.length - 1;\n  return index;\n}\n\n// Main function to handle section transitions\nfunction gotoSection(index, direction) {\n  index = wrapIndex(index);\n  if (index === currentIndex) return;\n\n  animating = true;\n  let fromTop = direction === -1,\n    dFactor = fromTop ? -1 : 1,\n    tl = gsap.timeline({\n      defaults: { duration: 0.625, ease: \"power1.inOut\" },\n      onComplete: () => {\n        animating = false;\n      },\n    });\n\n  if (currentIndex === 0 && index === 1) {\n    handleFirstToSecond(tl, index);\n  } else if (currentIndex === 1 && index === 0) {\n    handleSecondToFirst(tl, index);\n  } else {\n    handleOtherTransitions(tl, index, dFactor);\n  }\n\n  currentIndex = index;\n}\n\n// Handle transition from first to second section\nfunction handleFirstToSecond(tl, index) {\n  const flipImages = sections[0].querySelectorAll(\"[data-flip-img]\");\n  const infoWrapper = document.querySelector(\".scroll-wfc25-info-wrapper\");\n  const scrollDown = document.querySelector(\".intro_scroll-down_wrap\");\n  const navMenu = document.querySelector(\".wfc25-nav\");\n  const secondaryTitles = wrapper.querySelectorAll(\"[data-scroll-title-1]\");\n  const secondaryTexts = wrapper.querySelectorAll(\"[data-scroll-text-1]\");\n\n  // Reset secondary elements to initial state\n  gsap.set([secondaryTitles, secondaryTexts], {\n    autoAlpha: 0,\n    y: 20,\n  });\n\n  gsap.set(sections[index], {\n    autoAlpha: 1,\n    zIndex: 0,\n    display: \"block\",\n  });\n\n  if (outerWrappers[index] && innerWrappers[index]) {\n    gsap.set([outerWrappers[index], innerWrappers[index]], {\n      yPercent: (i) => (i ? -100 : 100),\n    });\n  }\n\n  // Animate clip paths\n  flipImages.forEach((img) => {\n    tl.fromTo(\n      img,\n      {\n        clipPath: clipPaths.second.final,\n      },\n      {\n        clipPath: clipPaths.third.final,\n        duration: 0.75,\n        ease: \"power4.inOut\",\n        onComplete: () => {\n          if (infoWrapper) infoWrapper.classList.add(\"wfc25-theme-base\");\n          if (navMenu) navMenu.classList.add(\"wfc25-theme-base\");\n        },\n      }\n    );\n  });\n\n  // Animate secondary titles with stagger effect\n  if (secondaryTitles.length > 0) {\n    tl.fromTo(\n      secondaryTitles,\n      {\n        autoAlpha: 0,\n        y: 20,\n      },\n      {\n        autoAlpha: 1,\n        y: 0,\n        duration: 0.5,\n        stagger: 0.1,\n        ease: \"power2.out\",\n      },\n      \"-=0.3\"\n    );\n  }\n\n  // Animate secondary texts with stagger effect\n  if (secondaryTexts.length > 0) {\n    tl.fromTo(\n      secondaryTexts,\n      {\n        autoAlpha: 0,\n        y: 20,\n      },\n      {\n        autoAlpha: 1,\n        y: 0,\n        duration: 0.5,\n        stagger: 0.1,\n        ease: \"power2.out\",\n      },\n      \"-=0.3\"\n    );\n  }\n\n  // Animate section content\n  animateSectionContent(tl, index, 1);\n\n  // Animate wrappers\n  if (outerWrappers[index] && innerWrappers[index]) {\n    tl.to(\n      [outerWrappers[index], innerWrappers[index]],\n      {\n        yPercent: 0,\n        duration: 0.625,\n        ease: \"power1.inOut\",\n      },\n      \"-=0.3\"\n    );\n  }\n\n  // Finalize transition\n  tl.set(sections[currentIndex], {\n    autoAlpha: 0,\n    zIndex: 0,\n  })\n    .set(sections[index], {\n      zIndex: 1,\n    })\n    .set(flipImages, {\n      clipPath: clipPaths.first.initial,\n    });\n}\n\n// Handle transition from second to first section\nfunction handleSecondToFirst(tl, index) {\n  const flipImages = sections[0].querySelectorAll(\"[data-flip-img]\");\n  const infoWrapper = document.querySelector(\".scroll-wfc25-info-wrapper\");\n  const navMenu = document.querySelector(\".wfc25-nav\");\n  const secondaryTitles = wrapper.querySelectorAll(\"[data-scroll-title-1]\");\n  const secondaryTexts = wrapper.querySelectorAll(\"[data-scroll-text-1]\");\n\n  gsap.set(sections[index], {\n    autoAlpha: 1,\n    zIndex: 0,\n    display: \"block\",\n  });\n  gsap.set(flipImages, {\n    clipPath: clipPaths.third.final,\n  });\n\n  // Remove theme class when going back to first section\n  if (infoWrapper) infoWrapper.classList.remove(\"wfc25-theme-base\");\n  if (navMenu) navMenu.classList.remove(\"wfc25-theme-base\");\n\n  // Fade out secondary elements\n  tl.to([secondaryTitles, secondaryTexts], {\n    autoAlpha: 0,\n    y: 20,\n    duration: 0.3,\n    stagger: 0.05,\n    ease: \"power2.in\",\n  });\n\n  // Fade out current section\n  tl.to(sections[currentIndex], {\n    autoAlpha: 0,\n    duration: 0.6,\n    ease: \"power2.inOut\",\n  });\n\n  // Animate clip paths\n  flipImages.forEach((img) => {\n    tl.to(\n      img,\n      {\n        clipPath: clipPaths.second.final,\n        duration: 0.85,\n        ease: \"power3.inOut\",\n      },\n      \"-=0.5\"\n    );\n  });\n\n  // Animate first section content\n  animateSectionContent(tl, index, -1);\n\n  tl.fromTo(\n    sections[index],\n    {\n      autoAlpha: 0.85,\n    },\n    {\n      autoAlpha: 1,\n      duration: 0.4,\n      ease: \"power2.inOut\",\n    },\n    \"-=0.6\"\n  )\n    .set(\n      sections[index],\n      {\n        zIndex: 1,\n      },\n      \"-=0.2\"\n    )\n    .set(\n      sections[currentIndex],\n      {\n        zIndex: 0,\n      },\n      \"<\"\n    );\n}\n\n// Handle transitions between other sections\nfunction handleOtherTransitions(tl, index, dFactor) {\n  if (currentIndex >= 0 && currentIndex < sections.length) {\n    gsap.set(sections[currentIndex], {\n      zIndex: 0,\n      display: \"block\",\n    });\n    if (images[currentIndex]) {\n      tl.to(images[currentIndex], {\n        yPercent: -15 * dFactor,\n        duration: 0.625,\n        ease: \"power1.inOut\",\n      });\n    }\n    tl.set(sections[currentIndex], {\n      autoAlpha: 0,\n      display: \"block\",\n    });\n  }\n\n  gsap.set(sections[index], {\n    autoAlpha: 1,\n    zIndex: 1,\n    display: \"block\",\n    visibility: \"visible\",\n  });\n\n  if (outerWrappers[index] && innerWrappers[index]) {\n    tl.fromTo(\n      [outerWrappers[index], innerWrappers[index]],\n      {\n        yPercent: (i) => (i ? -100 * dFactor : 100 * dFactor),\n      },\n      {\n        yPercent: 0,\n        duration: 0.625,\n        ease: \"power1.inOut\",\n      },\n      0\n    );\n  }\n\n  if (images[index]) {\n    tl.fromTo(\n      images[index],\n      {\n        yPercent: 15 * dFactor,\n      },\n      {\n        yPercent: 0,\n        duration: 0.625,\n        ease: \"power1.inOut\",\n      },\n      0\n    );\n  }\n\n  animateSectionContent(tl, index, dFactor);\n}\n\n// Animate secondary elements with stagger effect\nfunction animateSecondaryElements(tl, delay) {\n  if (splitHeadingsSecondary?.length > 0) {\n    splitHeadingsSecondary.forEach((splitHeading) => {\n      if (splitHeading?.lines?.length > 0) {\n        tl.fromTo(\n          splitHeading.lines,\n          {\n            autoAlpha: 0,\n            yPercent: 150,\n          },\n          {\n            autoAlpha: 1,\n            yPercent: 0,\n            duration: 0.5,\n            ease: \"power2\",\n            stagger: {\n              each: 0.025,\n              from: \"random\",\n            },\n          },\n          delay\n        );\n      }\n    });\n  }\n\n  if (textSecondary.length > 0) {\n    tl.fromTo(\n      textSecondary,\n      {\n        opacity: 0,\n        y: 20,\n      },\n      {\n        opacity: 1,\n        y: 0,\n        duration: 0.4,\n        ease: \"power2.out\",\n      },\n      \"-=0.2\"\n    );\n  }\n}\n\n// Animate section content with stagger effect\nfunction animateSectionContent(tl, index, dFactor) {\n  const splitHeading = splitHeadings[index];\n\n  if (splitHeading?.lines?.length > 0) {\n    tl.fromTo(\n      splitHeading.lines,\n      {\n        autoAlpha: 0,\n        yPercent: 150 * dFactor,\n      },\n      {\n        autoAlpha: 1,\n        yPercent: 0,\n        duration: 0.5,\n        ease: \"power2\",\n        stagger: {\n          each: 0.025,\n          from: \"random\",\n        },\n      },\n      0.35\n    );\n  }\n\n  const scrollTexts = sections[index].querySelectorAll(\"[data-scroll-text]\");\n\n  if (scrollTexts.length > 0) {\n    tl.fromTo(\n      scrollTexts,\n      {\n        opacity: 0,\n        y: 20 * dFactor,\n      },\n      {\n        opacity: 1,\n        y: 0,\n        duration: 0.4,\n        ease: \"power2.out\",\n      },\n      0.5\n    );\n  }\n}\n\n// Reset secondary elements to initial state\nfunction resetSecondaryElements() {\n  if (splitHeadingsSecondary?.length > 0) {\n    splitHeadingsSecondary.forEach((splitHeading) => {\n      if (splitHeading?.lines) {\n        gsap.set(splitHeading.lines, {\n          autoAlpha: 0,\n          yPercent: 150,\n        });\n      }\n    });\n  }\n  if (textSecondary.length > 0) {\n    gsap.set(textSecondary, {\n      opacity: 0,\n      y: 20,\n    });\n  }\n}\n\n// Handle viewport changes\nwindow.addEventListener(\"resize\", function () {\n  const newIsMobileView = window.innerWidth < 991;\n  const currentShouldShow = shouldShowIntro;\n  const newShouldShow =\n    !newIsMobileView && (!hasVisitedBefore || isIntroTriggered);\n\n  // Reload if viewport state changes\n  if (newIsMobileView !== isMobileView || newShouldShow !== currentShouldShow) {\n    location.reload();\n  }\n});"]}