Close Menu

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    What's Hot

    How to make Animated Gaming Website GSAP in HTML CSS & JS

    20 December 2025

    How to make Awesome Cool Loading Animation in HTML CSS & JS

    15 December 2025

    How to make Christmas Tree Animation using HTML and CSS

    12 December 2025
    Facebook X (Twitter) Instagram YouTube Telegram Threads
    Coding StellaCoding Stella
    • Home
    • Blog
    • HTML & CSS
      • Login Form
    • JavaScript
    • Hire us!
    Coding StellaCoding Stella
    Home - JavaScript - How to make Animated Gaming Website GSAP in HTML CSS & JS
    JavaScript

    How to make Animated Gaming Website GSAP in HTML CSS & JS

    Coding StellaBy Coding Stella20 December 2025Updated:20 December 2025No Comments207 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Email WhatsApp Copy Link

    Let’s create an Animated Gaming Website using HTML, CSS, JavaScript, and GSAP. This project focuses on building a high-energy gaming-style website with smooth animations and interactive effects that feel modern and immersive.

    We’ll use:

    • HTML to structure the website sections and content.
    • CSS to style the layout with bold colors, gaming visuals, and responsive design.
    • JavaScript + GSAP to add smooth animations, transitions, and scroll-based effects.

    This project is perfect for learning how professional gaming websites are built and how animations can elevate user experience. Whether you’re a beginner or an advanced developer, creating an Animated Gaming Website with GSAP is a great way to sharpen your front-end and animation skills. Let’s bring the gaming vibe to life! 🎮🔥

    HTML :

    This HTML builds a modern animated gaming website layout with a header, hero section, content sections, and footer, styled and animated using external CSS and JavaScript (likely GSAP). The header contains navigation, a logo, menu toggle, and audio control, while the hero section uses multiple videos for background, preview, and transitions to create an interactive first impression.

    A preloader shows loading progress before the site appears. Sections like About, Discover, Story, and CTA present content using images, videos, tilt effects, and scroll animations. Videos are autoplayed and muted for smooth visuals, images are optimized with responsive sources, and accessibility tags are included. The footer adds social links, copyright text, and background music, completing a polished, animation-rich gaming website structure.

    <!doctype html>
    <html lang="en">
    
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<link rel="preload" href="./assets/fonts/zentry-regular.woff2" as="font" type="font/woff2" crossorigin="anonymous">
    	<link rel="preload" href="./assets/fonts/robert-regular.woff2" as="font" type="font/woff2" crossorigin="anonymous">
    	<link rel="preload" href="./assets/fonts/robert-medium.woff2" as="font" type="font/woff2" crossorigin="anonymous">
    	<link rel="preload" href="./assets/fonts/general.woff2" as="font" type="font/woff2" crossorigin="anonymous">
    	<link rel="shortcut icon" href="./assets/img/favicon.ico">
    	<title>Animated Gaming Website GSAP</title>
    	<script type="module" crossorigin="" src="./js/index.min.js?v=1757083809505"></script>
    	<link rel="stylesheet" crossorigin="" href="./css/index.min.css?v=1757083809505">
    </head>
    
    <body>
    	<div class="wrapper">
    		<header data-fls-header="" class="header" data-fls-header-scroll="" data-fls-header-scroll-show="">
    			<div class="header__wrapper">
    				<div class="header__container">
    					<div class="header__menu menu">
    						<div class="menu__left-side">
    							<div class="menu__logo">GAMELAND</div>
    							<a class="menu__btn btn --icon-cursor-r" href="#">
    								<span class="btn__label">
    									<span class="btn__main">PRODUCT</span>
    									<span class="btn__alt">SEE now!</span>
    								</span>
    							</a>
    						</div>
    						<div class="menu__body-wrapper">
    							<nav class="menu__body">
    								<ul class="menu__list">
    									<li class="menu__item">
    										<a href="#" class="menu__link">Nexus</a>
    									</li>
    									<li class="menu__item">
    										<a href="#" class="menu__link">Vault</a>
    									</li>
    									<li class="menu__item">
    										<a href="#" class="menu__link">Prologue</a>
    									</li>
    									<li class="menu__item">
    										<a href="#" class="menu__link">About</a>
    									</li>
    									<li class="menu__item">
    										<a href="#" class="menu__link">Contacts</a>
    									</li>
    								</ul>
    							</nav>
    							<div class="menu__action">
    								<button type="button" class="menu__audio-toggle --icon-music" aria-label="Toggle audio"
    									aria-pressed="false" data-fls-dynamic=".menu__body, 385, 1">
    									<div class="menu__audio-icon">
    										<span></span>
    										<span></span>
    										<span></span>
    										<span></span>
    									</div>
    								</button>
    								<button type="button" data-fls-menu="" class="menu__icon icon-menu"
    									aria-label="Toggle menu">
    									<span></span>
    								</button>
    							</div>
    						</div>
    					</div>
    				</div>
    			</div>
    		</header>
    		<main class="page page--home">
    			<div id="preloader" class="preloader" aria-hidden="true">
    				<div class="preloader__inner">
    					<h3 class="preloader__brand">GAMELAND</h3>
    					<div class="preloader__bar">
    						<span class="preloader__fill" data-preloader-fill=""></span>
    					</div>
    					<p class="preloader__meta">
    						<span data-preloader-percent="">0%</span>
    						<span class="dot">•</span>
    						<span data-preloader-status="">BOOTING METAGAME LAYER…</span>
    					</p>
    				</div>
    			</div>
    			<section class="hero" id="home" aria-label="Hero">
    				<div class="hero__wrapper wrapper__container">
    					<h1 class="visually-hidden">LANDGAME: Redefine Gaming</h1>
    					<div class="hero__row">
    						<div class="hero__stage">
    							<video id="next-video" class="hero__next-video" loop muted playsinline=""></video>
    							<video id="bg-video" class="hero__bg" autoplay muted playsinline="" loop
    								preload="auto"></video>
    						</div>
    						<div class="hero__mini">
    							<div class="hero__mini-inner" id="mini-click" title="Watch next">
    								<video id="current-video" class="hero__mini-video" loop muted playsinline=""></video>
    							</div>
    						</div>
    						<div class="hero__container">
    							<div class="hero__content" id="video-frame">
    								<div class="hero__copy">
    									<h2 class="hero__label">redefine</h2>
    									<p class="hero__subtitle">Enter the Metagame Layer Unleash the Play Economy</p>
    									<a class="hero__btn btn btn--light-gr --icon-cursor-l" href="#trailer">
    										<span class="btn__label">
    											<span class="btn__main">watch trailer</span>
    											<span class="btn__alt">watch now!</span>
    										</span>
    									</a>
    								</div>
    							</div>
    							<h2 class="hero__label hero__label--top">Gaming</h2>
    						</div>
    					</div>
    					<h2 class="hero__label hero__label--inside">Gaming</h2>
    				</div>
    			</section>
    			<section id="about" class="about">
    				<h2 class="visually-hidden">About Zentry</h2>
    				<div class="about__container">
    					<p class="about__eyebrow">Welcome to Zentry</p>
    					<h3 class="about__title anim-title">Discover the world's largest shared adventure</h3>
    					<div class="about__subtext">
    						<p>The Game of Games begins — your life, now an epic MMORPG</p>
    						<p>Zentry unites every player from countless games and platforms</p>
    					</div>
    				</div>
    				<!-- Піниться, тут відбувається розгортання маски -->
    				<div class="about__viewport" id="clip">
    					<div class="about__image mask-clip-path">
    						<picture>
    							<source media="(max-width: 600px)" srcset="./assets/img/about-600.webp" type="image/webp">
    							<source media="(max-width: 1200px)" srcset="./assets/img/about-1200.webp" type="image/webp">
    							<img alt="Background" loading="lazy" class="about__img" src="./assets/img/about.webp">
    						</picture>
    					</div>
    				</div>
    			</section>
    			<section class="discover" id="discover" aria-labelledby="discover-title">
    				<div class="discover__container">
    					<div class="discover__top">
    						<h2 class="discover__title" id="discover-title">Into the Metagame Layer</h2>
    						<div class="discover__text">
    							<p>
    								Immerse yourself in a rich and ever-expanding ecosystem where a vibrant array of
    								products converge
    								into an
    								interconnected universe.
    							</p>
    						</div>
    					</div>
    					<div class="discover__inner">
    						<article class="discover__item js-tilt">
    							<div class="discover__tilt">
    								<div class="discover__item-content">
    									<h3 class="discover__item-title">RADIANT</h3>
    									<p class="discover__item-text">
    										A cross-platform metagame app, turning your activities across Web2 and Web3
    										games into a
    										rewarding
    										adventure.
    									</p>
    								</div>
    								<video class="discover__item-video" src="./files/feature-1.mp4" autoplay muted loop
    									playsinline=""></video>
    							</div>
    						</article>
    						<article class="discover__item js-tilt">
    							<div class="discover__tilt">
    								<div class="discover__item-content">
    									<h3 class="discover__item-title">Zigma</h3>
    									<p class="discover__item-text">An anime and gaming-inspired NFT collection — the IP
    										primed for expansion.</p>
    								</div>
    								<video class="discover__item-video" src="./files/feature-2.mp4" autoplay muted loop
    									playsinline=""></video>
    							</div>
    						</article>
    						<article class="discover__item js-tilt">
    							<div class="discover__tilt">
    								<div class="discover__item-content">
    									<h3 class="discover__item-title">nexus</h3>
    									<p class="discover__item-text">
    										A gamified social hub, adding a new dimension of play to social interaction for
    										Web3
    										communities.
    									</p>
    								</div>
    								<video class="discover__item-video" src="./files/feature-3.mp4" autoplay muted loop
    									playsinline=""></video>
    							</div>
    						</article>
    						<article class="discover__item js-tilt">
    							<div class="discover__tilt">
    								<div class="discover__item-content">
    									<h3 class="discover__item-title">azul</h3>
    									<p class="discover__item-text">A cross-world AI Agent — elevating your gameplay to
    										be more fun and productive.</p>
    								</div>
    								<video class="discover__item-video" src="./files/feature-4.mp4" autoplay muted loop
    									playsinline=""></video>
    							</div>
    						</article>
    						<article class="discover__item js-tilt">
    							<div class="discover__tilt">
    								<div class="discover__item-content">
    									<h3 class="discover__item-title visually-hidden" aria-hidden="true">Game Preview
    									</h3>
    								</div>
    								<video class="discover__item-video" src="./files/feature-5.mp4" autoplay muted loop
    									playsinline=""></video>
    							</div>
    						</article>
    						<article class="discover__item discover__item--color js-tilt" data-tilt-glare="true">
    							<div class="discover__tilt">
    								<div class="discover__item-content">
    									<h3 class="discover__item-title">More Coming Soon!</h3>
    									<div class="discover__icon --icon-cursor-r" aria-hidden="true"></div>
    								</div>
    							</div>
    						</article>
    					</div>
    				</div>
    			</section>
    			<section class="story" id="story">
    				<div class="story__container">
    					<p class="story__pretitle">The Multiversal ip world</p>
    					<div class="story__wrap">
    						<h2 class="story__title anim-title">
    							The story of
    							<br>
    							a hidden realm
    						</h2>
    						<div class="story__image">
    							<div class="story__image-area js-tilt-area" data-tilt-area="" data-tilt-max="12">
    								<div class="story__image-inner" data-tilt-target="">
    									<picture>
    										<source media="(max-width: 600px)" srcset="./assets/img/entrance-600.webp"
    											type="image/webp">
    										<source media="(max-width: 1200px)" srcset="./assets/img/entrance-1200.webp"
    											type="image/webp">
    										<img class="story__image-img js-tilt-frame" alt="entrance" loading="lazy"
    											draggable="false" src="./assets/img/entrance.webp">
    									</picture>
    								</div>
    							</div>
    						</div>
    					</div>
    				</div>
    			</section>
    			<section class="cta" id="contact" aria-labelledby="cta-title">
    				<div class="cta__container">
    					<div class="cta__content">
    						<div class="cta__label">Join Zentry</div>
    						<h2 class="cta__title anim-title" id="cta-title">
    							LET'S BUILD
    							<br>
    							THE NEW ERA OF GAMING TOGETHER
    						</h2>
    						<a class="cta__button btn" href="mailto:team@example.com">
    							<span class="btn__label">
    								<span class="btn__main">contact us</span>
    								<span class="btn__alt">now! now!</span>
    							</span>
    						</a>
    						<div class="cta__decor decor">
    							<div class="decor__item decor__item--1" data-fls-mouse="" data-fls-mouse-dyr="">
    								<picture>
    									<source media="(max-width: 600px)" srcset="./assets/img/contact-1-600.webp"
    										type="image/webp">
    									<source media="(max-width: 1200px)" srcset="./assets/img/contact-1-1200.webp"
    										type="image/webp">
    									<img class="decor__img" alt="" loading="lazy" src="./assets/img/contact-1.webp">
    								</picture>
    							</div>
    							<div class="decor__item decor__item--2" data-fls-mouse="">
    								<picture>
    									<source media="(max-width: 600px)" srcset="./assets/img/contact-2-600.webp"
    										type="image/webp">
    									<source media="(max-width: 1200px)" srcset="./assets/img/contact-2-1200.webp"
    										type="image/webp">
    									<img class="decor__img" alt="" loading="lazy" src="./assets/img/contact-2.webp">
    								</picture>
    							</div>
    							<div class="decor__item decor__item--3" data-fls-mouse="" data-fls-mouse-dxr="">
    								<picture>
    									<source media="(max-width: 600px)" srcset="./assets/img/swordman-600.webp"
    										type="image/webp">
    									<source media="(max-width: 1200px)" srcset="./assets/img/swordman-1200.webp"
    										type="image/webp">
    									<img class="decor__img" alt="" loading="lazy" src="./assets/img/swordman.webp">
    								</picture>
    							</div>
    						</div>
    					</div>
    				</div>
    			</section>
    		</main>
    		<audio id="bg-audio" src="./files/music.mp3" preload="auto" loop></audio>
    		<footer data-fls-footer="" class="footer">
    			<div class="footer__container">
    				<div class="footer__copy">© 2025 LANDGAME. All rights reserved.</div>
    				<ul class="footer__sociall">
    					<li class="footer__social-item">
    						<a href="#" class="footer__social-link --icon-dribbble">
    							<span class="visually-hidden">Dribbble</span>
    						</a>
    					</li>
    					<li class="footer__social-item">
    						<a href="#" class="footer__social-link --icon-github">
    							<span class="visually-hidden">GitHub</span>
    						</a>
    					</li>
    					<li class="footer__social-item">
    						<a href="#" class="footer__social-link --icon-discord">
    							<span class="visually-hidden">Discord</span>
    						</a>
    					</li>
    				</ul>
    				<a href="#" class="footer__privacy">Privacy Policy</a>
    			</div>
    		</footer>
    	</div>
    </body>
    
    </html>

    CSS :

    This CSS file sets up fonts, icons, resets, and core styling for the animated gaming website. It loads custom fonts and an icon font, then applies a global reset to remove default margins and ensure consistent box sizing. Base styles define typography, colors, layout structure, and responsive containers.

    It styles reusable components like buttons with smooth hover text animations, a full-screen preloader with a progress bar, and utility classes like visually-hidden for accessibility. The menu styles handle layout, alignment, and animated underline effects on hover. Overall, this CSS creates a clean foundation, smooth animations, and a modern UI look for the site.

    @charset "UTF-8";@font-face {font-family: zentry;font-display: swap;src: url("../assets/fonts/zentry-regular.woff2") format("woff2");font-weight: 400;font-style: normal;}
    @font-face {font-family: robert;font-display: swap;src: url("../assets/fonts/robert-regular.woff2") format("woff2");font-weight: 400;font-style: normal;}
    @font-face {font-family: robert;font-display: swap;src: url("../assets/fonts/robert-medium.woff2") format("woff2");font-weight: 500;font-style: normal;}
    @font-face {font-family: general;font-display: swap;src: url("../assets/fonts/general.woff2") format("woff2");font-weight: 400;font-style: normal;}
    @font-face { 
    	font-family: "iconfont"; 
    	font-display: swap;
    	src: url("data:font/woff2;base64,d09GMgABAAAAAAagAAsAAAAADDgAAAZSAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHIFABmAAhRwKiCCHMQE2AiQDUAsqAAQgBYQWB4EOG9oKUVRyqpB9kWCbRt/RIIMEdSplgzi6eqlvt+X6W+hr8M+39rtvZnVm1v5+JEEyqzQSmaTNPXM6JdETVWX+8fT/pik8KhParQNZDCpSKD1pBr7uf6fPUJMvgAf6q709L8vwxIDSizaQJoTEmkiasPBPXP/b50ttgH/frz7/+7k89VD0TuJ6e/9v/t4MFQuNQ2mEZKIhU0kQSiJkQkIjPJub9CiIQTdBwJlVirFdaJYD8bxO2EEoJjZbcDpq3jeoAXeXKkowSBY+QOvSgAyVkRaJpbk5dzHEknC9M7W8BaZ3LiikylX3frBMjUc8b97wxZQiN+OKUK8dwUkdrxL5ghYDFszVnAeAO+Pr9SaLGGDECexUi+caHbhME3jwA8BaWglnQENAsBLEwILJSUjXPTn3HmzVToK5qOZMNwA1fw4YbDOxwYwExo+8/8EGAysMHqAfOYFh8JRaoFDhx40RB1ByKh0ChVyDPfRariCd1mzD4rejHJZd1lUnarocmu0fAtSlMIVogOSlvgXYkCjBJhzYQgW20QHYhQd7KMA+cnCEBuAYCThFC3CBGuASGbhCANf2FI9QBIMxkCQG4yBCkHGRxILx4H8haVdjo0Npqx1AL0w9qV4kf0zHhgXbWwhfVFS2sGHIeLh2ijHUWT55+/xh4PJ43DQNwQJIu2odBM0F8cmzoStD1wauTVi5akcAD62RhxK4TwWtOyeAqMa70ufyUFq1MpDSH0exFpo7FrYxcmOqO2dH/D13w67EXYI94avDLyAuf1oRTMmX+3uUg/L319+WA3fyniMAuNYE0LSKhuaUFOlJ+fNmwKXweKZsbsODiBS3Kp5bc9hc7lZ4Op7LKeUt+Ypkj+SK7HAoPk3brig8Ckq+VhpKt9HDK0IkYYvJnyopKIhWqV2gAFfWwoFUDKU8JVC4wLBHgWJSSbWWWj1FKVcH54uEpg8/L2OzQ+knC1cFeRaoVgSczj4gqfdbSspBnj04d+ic+8wB1/7TIteDTI0vX71mRYC6Z8WKHbuCplatXbkzfJvlQ6Uk+s5366Mlac3Nab2C6J9HsuWvx2hLt18TWlnshiDZXK7mVctxfqUy+k/hwZ9v+cCE7Ts+7fWDOiGyfv8AaBXGNgl6obxgJdzMgptYchgRh/r9ug1EeMeJzVE1UwFRk//FySRR29JjRZEKuIUFt7JUcEp+X76H6RANrWuYaGdAISNdD8Oswmvb+yIXuhKVST26mVJzscFQbC79iwgRm7gTM7qwAyUqF7pAVNUX+v6E7niSjO9O6L8viJ4gydXc/Qn3I/5ntK69IbwubGn90MrCuhe6x8JeSFqQklbVUbd5MFgn1IvU/prpDX0NVHBVcDVoXBG+TKyB36kOPVMp8VvYdNJ/Nq8139SUrS4Iq4to7BB+Bh4VbrAy4HOMgd4gkWpoRX0GFKB/4t8ZUommneEw4T5ewUrkQFu0qqEqqCLQXDB44HVTLMj++SWNxCyIz5fncG+H99mvLJNaOjA/diXymmgFoXw15Sv747VdqycLWBNzq3e99mjed38EQinenLAs3q1qCl47mz9LZpJaZVYwudB1U5B/2JArK9t2NP77LbfKlzedpRb6/azLy3zHzzS2gF3AFgDYJ3cJ9rNrAfYH3wD+Dx+Dt3wvz8b8X/juhuJfuQL7AGiff3yXkfy/bJGfo8rJmKeX4o1Qmfz/15GfY9ZNCMiUZPJlnwyiqjB3Go+qDXC8EP6RX7vZhbj+BXLBfO19Ttha0QqCSNKHmDeIRGYczoTM3b3WAJjSHKk5FBilW1i1hYJIshGxXgeRqF2Hs+T5At5wlGLSYna9GEB0ooYRqxq/BQyzEsWdpgpEJs3wX6YOtaO4mkB1iGYCcY4aMglCj+hxzIbUJpwOtVoxxIFjZlRLSI0E4ShMT9dHbSPVYjZgooWx02s/TeiEMhhhpYbTiN7mSiicc8Vj/ggZqYwMgjpqz+SuRkDpFteYgHAaZZB5ziboV2E92mNsELXFslFWXotBOKKXM0NpEaSMBaodCqXTTPqsVNp81Pao+r6xo7IP7UYMWUWKlShVplxOXkGFSlWqIR/IF/KD/KEAwLpcO01atmGfMI5ouLoLk0Z5aivK0e07tRiuY2uvcSeGQzaNyCmTtDKIkFEa6YTLKlQYAA==") format("woff2"); 
    } 
    [class*="--icon-"]::before{
    	font-family: iconfont; 
    }
    	[class*="--icon-music"]::before { 
    		content: "\f101"; 
    	} 
    	[class*="--icon-cursor"]::before { 
    		content: "\f102"; 
    	} 
    	[class*="--icon-github"]::before { 
    		content: "\f107"; 
    	} 
    	[class*="--icon-dribbble"]::before { 
    		content: "\f108"; 
    	} 
    	[class*="--icon-discord"]::before { 
    		content: "\f109"; 
    	} 
    * {
    	padding: 0rem;
    	margin: 0rem;
    	border: 0rem;
    }
    *,
    *::before,
    *::after {
    	box-sizing: border-box;
    }
    *::before,
    *::after {
    	display: inline-block;
    }
    html,
    body {
    	height: 100%;
    }
    body {
    	line-height: 1;
    	scrollbar-gutter: stable;
    	-ms-text-size-adjust: 100%;
    	-moz-text-size-adjust: 100%;
    	-webkit-text-size-adjust: 100%;
    	-webkit-font-smoothing: antialiased;
    	-moz-osx-font-smoothing: grayscale;
    }
    input,
    button,
    textarea {
    	font-family: inherit;
    	font-size: inherit;
    	line-height: inherit;
    	color: inherit;
    	background-color: transparent;
    }
    input,
    textarea {
    	width: 100%;
    }
    label {
    	display: inline-block;
    }
    button,
    select,
    option {
    	cursor: pointer;
    }
    a {
    	display: inline-block;
    	color: inherit;
    	text-decoration: none;
    }
    ul li {
    	list-style: none;
    }
    img {
    	max-width: 100%;
    	height: auto;
    	vertical-align: middle;
    }
    h1,
    h2,
    h3,
    h4,
    h5,
    h6 {
    	font-weight: inherit;
    	font-size: inherit;
    }
    
    /* Generated by vite-plugin-svg-spritemap */
    body {
      min-width: 20rem;
      color: #fff;
      font-family: "robert";
      font-size: 1rem;
      background-color: #fff;
    }
    [data-fls-scrolllock] body {
      overflow: hidden;
      touch-action: none;
      overscroll-behavior: none;
    }
    .wrapper {
      min-height: 100%;
      display: flex;
      flex-direction: column;
      overflow: clip;
    }
    .wrapper > main {
      flex: 1 1 auto;
    }
    .wrapper > * {
      min-width: 0;
    }
    
    [class*=__container] {
      max-width: 91.875rem;
      margin: 0 auto;
      padding-left: 0.9375rem;
      padding-right: 0.9375rem;
    }
    
    .btn {
      position: relative;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      color: #000;
      text-transform: uppercase;
      font-size: 0.875rem;
      background-color: #fff;
      border-radius: 1.875rem;
      /* один transition на transform */
      transition: scale 0.3s cubic-bezier(0.22, 0.61, 0.36, 1);
      will-change: transform;
      /* ------------------ текст-стікер ------------------ */
    }
    .btn--light-gr {
      background-color: #edff66;
    }
    .btn__label {
      display: inline-grid;
      align-items: center;
      justify-items: center;
      line-height: 1;
      overflow: hidden;
    }
    .btn__main, .btn__alt {
      grid-area: 1/1;
      white-space: nowrap;
      transition: transform 0.45s cubic-bezier(0.22, 0.61, 0.36, 1);
      will-change: transform;
    }
    .btn__main {
      transform: translateY(0%);
    }
    .btn__alt {
      transform: translateY(120%);
    }
    
    .visually-hidden {
      position: absolute !important;
      width: 0.0625rem !important;
      height: 0.0625rem !important;
      padding: 0 !important;
      margin: 0 !important;
      overflow: hidden !important;
      clip: rect(0, 0, 0, 0) !important;
      border-width: 0 !important;
      word-spacing: 0 !important;
    }
    
    .preloader {
      position: fixed;
      inset: 0;
      z-index: 9999;
      display: grid;
      place-items: center;
      background-color: #000;
      transition: opacity 0.35s ease, visibility 0.35s ease;
    }
    .preloader.is-done {
      opacity: 0;
      visibility: hidden;
      pointer-events: none;
    }
    .preloader__inner {
      width: min(47.5rem, 90vw);
      text-align: left;
      color: #fff;
    }
    .preloader__brand {
      margin: 0 0 1.125rem;
      font-family: zentry, system-ui;
      letter-spacing: 0.06em;
      opacity: 0.95;
    }
    .preloader__bar {
      width: 100%;
      height: 0.625rem;
      border-radius: 62.4375rem;
      background: rgba(255, 255, 255, 0.15);
      overflow: hidden;
    }
    .preloader__fill {
      display: block;
      height: 100%;
      width: 0%;
      background: linear-gradient(90deg, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.9));
    }
    .preloader__meta {
      margin-top: 0.875rem;
      font-family: robert, system-ui;
      opacity: 0.9;
      letter-spacing: 0.04em;
    }
    .preloader .dot {
      opacity: 0.6;
      margin: 0 0.5rem;
    }/* Generated by vite-plugin-svg-spritemap */
    .menu {
      position: relative;
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 0.625rem 0;
    }
    
    .menu__left-side {
      display: flex;
      align-items: center;
    }
    
    .menu__logo {
      z-index: 4;
      font-family: robert;
      font-weight: 700;
      line-height: 120%;
    }
    
    .menu__btn {
      z-index: 4;
    }
    
    .menu__body-wrapper {
      display: flex;
      align-items: center;
      row-gap: 0.3125rem;
    }
    
    .menu__body {
      display: inline-flex;
      flex-direction: column;
      align-items: center;
      row-gap: 2.1875rem;
    }
    
    .menu__list {
      flex: 1 1 auto;
      row-gap: 0.3125rem;
    }
    
    .menu__item {
      text-align: center;
    }
    
    .menu__link {
      position: relative;
      display: inline-block;
      line-height: 130%;
    }
    
    .menu__link::before {
      content: "";
      position: absolute;
      left: 0;
      bottom: 0;
      width: 0;
      height: 0.125rem;
      background-color: #fff;
      will-change: left, width;
      animation: underline-out 0.3s ease forwards;
    }
    
    .menu__link:hover::before,
    .menu__link:focus-visible::before {
      animation: underline-in 0.3s ease forwards;
    }
    
    .menu__link:not(:hover)::before {
      animation: underline-out 0.3s ease forwards;
    }
    
    @keyframes underline-in {
      from {
        left: 0;
        width: 0;
      }
      to {
        left: 0;
        width: 100%;
      }
    }
    @keyframes underline-out {
      from {
        left: 0;
        width: 100%;
      }
      to {
        left: 100%;
        width: 0;
      }
    }
    .menu__action {
      display: flex;
      align-items: center;
      justify-content: center;
    }
    
    .menu__audio-toggle {
      z-index: 4;
      font-size: 1.875rem;
    }
    
    .menu__audio-toggle span {
      display: none;
      width: 0.125rem;
      height: 50%;
      background-color: #fff;
      pointer-events: none;
      opacity: 0.7;
      transform: scaleY(0.5);
    }
    
    .menu__audio-toggle.is-playing .menu__audio-icon {
      display: flex;
      align-items: center;
      justify-content: center;
      column-gap: 0.25rem;
      width: 1.875rem;
      height: 1.875rem;
    }
    
    .menu__audio-toggle.is-playing .menu__audio-icon span {
      display: block;
      animation: music-play 0.8s infinite alternate;
    }
    
    .menu__audio-toggle.is-playing .menu__audio-icon span:nth-child(1) {
      animation-delay: 0s;
    }
    
    .menu__audio-toggle.is-playing .menu__audio-icon span:nth-child(2) {
      animation-delay: 0.2s;
    }
    
    .menu__audio-toggle.is-playing .menu__audio-icon span:nth-child(3) {
      animation-delay: 0.4s;
    }
    
    @keyframes music-play {
      0% {
        transform: scaleY(0.5);
        opacity: 0.7;
      }
      100% {
        transform: scaleY(1.2);
        opacity: 1;
      }
    }
    .icon-menu {
      display: none;
    }/* Generated by vite-plugin-svg-spritemap */
    .header__wrapper {
      margin: 0.625rem 0.625rem 0 0.625rem;
    }/* Generated by vite-plugin-svg-spritemap */
    [data-fls-header-scroll] {
      position: fixed;
      top: 0;
      right: 0;
      left: 0;
      width: 100%;
      z-index: 1000;
    }
    
    .header__container {
      transition: background-color 0.3s ease, border 0.3s ease;
    }
    
    [data-fls-header-scroll-show].--header-scroll {
      transform: translate(0, -130%);
      transition: transform 0.5s;
    }
    [data-fls-header-scroll-show].--header-scroll .header__container {
      background-color: #000;
    }
    [data-fls-header-scroll-show].--header-show {
      transform: translate(0, 0);
      transition: transform 0.4s;
    }
    [data-fls-header-scroll-show].--header-show .header__container {
      background-color: #000;
      border: 0.0625rem solid rgba(255, 255, 255, 0.2);
    }/* Generated by vite-plugin-svg-spritemap */
    .footer {
      background-color: #5724ff;
      padding-top: 1.875rem;
      padding-bottom: 1.875rem;
    }
    .footer__container {
      display: grid;
      grid-template-columns: 1fr auto 1fr;
      align-items: center;
      row-gap: 0.9375rem;
    }
    .footer__sociall {
      display: flex;
      align-items: center;
      justify-self: center;
      column-gap: 0.9375rem;
    }
    .footer__social-link {
      transition: color 0.3s, transform 0.3s;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    .footer__privacy {
      position: relative;
      line-height: 125%;
      justify-self: end;
    }
    .footer__privacy::before {
      content: "";
      position: absolute;
      left: 0;
      bottom: 0;
      width: 0;
      height: 0.125rem;
      background-color: #fff;
      will-change: left, width;
      animation: underline-out 0.3s ease forwards;
    }
    .footer__privacy:hover::before, .footer__privacy:focus-visible::before {
      animation: underline-in 0.3s ease forwards;
    }
    .footer__privacy:not(:hover)::before {
      animation: underline-out 0.3s ease forwards;
    }
    
    @keyframes underline-in {
      from {
        left: 0;
        width: 0;
      }
      to {
        left: 0;
        width: 100%;
      }
    }
    @keyframes underline-out {
      from {
        left: 0;
        width: 100%;
      }
      to {
        left: 100%;
        width: 0;
      }
    }/* Generated by vite-plugin-svg-spritemap */
    /* Generated by vite-plugin-svg-spritemap */
    .hero {
      position: relative;
    }
    .hero__wrapper {
      position: relative;
    }
    .hero__row {
      position: relative;
      left: 50%;
      right: 50%;
      margin-left: -50vw;
      margin-right: -50vw;
      z-index: 10;
      isolation: isolate;
      width: 100vw;
      max-width: none;
      height: 100dvh;
      overflow: clip;
      border-radius: 0 0 40% 10%;
    }
    .hero__content {
      position: static;
      display: grid;
      grid-template-columns: repeat(2, 1fr);
      grid-template-rows: repeat(2, 1fr);
      align-items: start;
      row-gap: 1.25rem;
      height: 100%;
      background: transparent;
    }
    .hero__container {
      position: relative;
      height: 100dvh;
    }
    .hero__stage {
      position: absolute;
      top: 0;
      left: 50%;
      width: 100vw;
      height: 100%;
      transform: translateX(-50%);
    }
    .hero__bg, .hero__next-video {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
    }
    .hero__next-video {
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }
    .hero__mini {
      position: absolute;
      left: 50%;
      top: 50%;
      z-index: 10;
      transform: translate(-50%, -50%);
    }
    .hero__mini-inner {
      transform: scale(0.5);
      transition: transform 0.5s ease;
    }
    .hero__mini-video {
      overflow: hidden;
      aspect-ratio: 1/1;
      width: 100%;
      height: 100%;
      max-width: 16rem;
      max-height: 16rem;
      border-radius: 1rem;
      object-fit: cover;
      transform: scale(1.5);
      cursor: pointer;
    }
    .hero__copy {
      display: flex;
      flex-direction: column;
      align-items: start;
      grid-column: span 2;
      row-gap: 0.9375rem;
      z-index: 3;
      padding-bottom: 1.875rem;
    }
    .hero__label {
      font-family: zentry;
      font-weight: 900;
      text-transform: uppercase;
      line-height: 0.85;
    }
    .hero__label--top {
      display: block;
      position: absolute;
      bottom: 5%;
      right: 0.9375rem;
      z-index: 3;
      pointer-events: none;
    }
    .hero__label--inside {
      display: block;
      position: absolute;
      bottom: 5%;
      right: 0.9375rem;
      z-index: 0;
      color: #000;
      pointer-events: none;
    }
    .hero__subtitle {
      font-family: robert;
      line-height: 120%;
      max-width: 18.75rem;
    }
    .hero__btn {
      padding: 0.75rem 1.5625rem;
    }
    
    .about {
      min-height: 100dvh;
    }
    .about__container {
      position: relative;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-items: center;
      text-align: center;
    }
    .about__container:not(:last-child) {
      margin-bottom: 1.875rem;
    }
    .about__eyebrow {
      font-family: robert;
      text-transform: uppercase;
      letter-spacing: 0.08em;
      color: #000;
      opacity: 0.8;
    }
    .about__title {
      font-family: zentry;
      font-weight: 900;
      text-transform: uppercase;
      line-height: 100%;
      color: #000;
    }
    .about__subtext {
      display: grid;
      gap: 0.375rem;
      text-align: center;
      font-family: robert;
      font-weight: 700;
      line-height: 125%;
      color: #000;
      opacity: 0.9;
      z-index: -1;
    }
    .about__viewport {
      position: relative;
      height: 100dvh;
      overflow: hidden;
    }
    .about__image {
      position: absolute;
      top: 0;
      left: 50%;
      transform: translateX(-50%);
      border-radius: 1.5rem;
      overflow: hidden;
      will-change: width, height, border-radius;
      pointer-events: none;
    }
    .about__img {
      position: absolute;
      inset: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
    }
    
    .discover {
      background-color: #000;
    }
    .discover__top {
      max-width: 31.25rem;
    }
    .discover__title {
      font-family: robert;
      font-weight: 700;
    }
    .discover__title:not(:last-child) {
      margin-bottom: 0.625rem;
    }
    .discover__text {
      line-height: 120%;
      opacity: 0.8;
    }
    .discover__inner {
      display: grid;
      grid-template-columns: repeat(2, 1fr);
      grid-template-rows: repeat(4, 1fr);
    }
    .discover__item {
      position: relative;
      will-change: transform;
      transition: box-shadow 0.2s ease;
      cursor: pointer;
    }
    .discover__item.is-tilting {
      box-shadow: 0 1.125rem 2.5rem rgba(0, 0, 0, 0.35);
    }
    .discover__item--color {
      color: #000;
    }
    .discover__item--color .discover__tilt {
      background-color: #5724ff;
    }
    .discover__item--color .discover__item-content {
      display: flex;
      flex-direction: column;
      justify-content: space-between;
    }
    .discover__tilt {
      position: absolute;
      inset: 0;
      overflow: hidden;
      border: 0.00625rem solid rgba(255, 255, 255, 0.3);
      border-radius: 0.3125rem;
      transform-origin: 50% 50%;
      transform-style: preserve-3d;
      will-change: transform;
      transition: transform 0.12s ease-out;
      transform: perspective(var(--p)) rotateX(var(--rx)) rotateY(var(--ry)) scale(var(--s));
      --p: 56.25rem;
      --rx: 0deg;
      --ry: 0deg;
      --s: 1;
    }
    .discover__item-video {
      position: absolute;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
      pointer-events: none;
    }
    .discover__item-content {
      position: relative;
      z-index: 2;
      overflow: hidden;
      min-height: 100%;
      will-change: auto;
      transform: none;
    }
    .discover__item-title {
      font-family: zentry;
      line-height: 110%;
    }
    .discover__item-title:not(:last-child) {
      margin-bottom: 0.9375rem;
    }
    .discover__item-text {
      line-height: 120%;
      max-width: 18.75rem;
    }
    .discover__icon {
      align-self: end;
    }
    .discover__glare {
      position: absolute;
      inset: -60%;
      z-index: 3;
      opacity: 0;
      mix-blend-mode: screen;
      transition: opacity 0.15s ease;
      --gx: 50%;
      --gy: 50%;
      background: radial-gradient(circle at var(--gx) var(--gy), rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0) 45%);
      pointer-events: none;
    }
    
    /* accessibility / мобільні — якщо треба повністю вимкнути трансформації */
    .story {
      display: flex;
      background-color: #000;
    }
    .story__container {
      display: flex;
      flex-direction: column;
      align-items: center;
      row-gap: 0.9375rem;
    }
    .story__pretitle {
      text-transform: uppercase;
      letter-spacing: 0.22em;
      opacity: 0.9;
    }
    .story__wrap {
      position: relative;
    }
    .story__title {
      position: relative;
      z-index: 3;
      margin: 0 auto -5% auto;
      text-align: center;
      font-family: zentry;
      font-weight: 800;
      line-height: 1.05;
      mix-blend-mode: difference;
      pointer-events: none;
    }
    .story__image {
      perspective: 93.75rem;
      perspective-origin: 10% 30%;
    }
    .story__image-area {
      transform-style: preserve-3d;
      transform: rotateY(18deg) rotateX(2deg) rotateZ(5deg);
      transform-origin: left right;
    }
    .story__image-img {
      display: block;
      aspect-ratio: 1050/500;
      object-fit: contain;
      user-select: none;
      pointer-events: none;
      will-change: transform;
    }
    .cta__content {
      position: relative;
      z-index: 1;
      display: grid;
      align-items: center;
      background-color: #000;
      overflow: hidden;
    }
    .cta__label {
      z-index: 2;
      font-family: robert;
      text-transform: uppercase;
      letter-spacing: 0.08em;
      text-align: center;
      opacity: 0.8;
    }
    .cta__label:not(:last-child) {
      margin-bottom: 0.9375rem;
    }
    .cta__title {
      z-index: 2;
      margin: 0 auto;
      max-width: 31.25rem;
      text-align: center;
      font-family: zentry;
      font-weight: 900;
      text-transform: uppercase;
      line-height: 100%;
    }
    .cta__button {
      z-index: 2;
      margin: 0 auto;
      padding: 0.9375rem 1.5625rem;
    }
    
    .decor__item {
      position: absolute;
      pointer-events: none;
    }
    .decor__item--1 {
      top: -5%;
      left: 3%;
    }
    .decor__item--1 img {
      clip-path: polygon(0% 0%, 100% 30%, 90% 60%, 10% 90%);
    }
    .decor__item--2 {
      left: 12%;
      bottom: -9%;
    }
    .decor__item--2 img {
      clip-path: polygon(15% 0%, 65% 10%, 60% 85%, 0% 100%);
    }
    .decor__item--3 {
      right: 0;
      top: 1%;
    }
    .decor__item--3 img {
      clip-path: polygon(8% 6%, 100% 18%, 92% 96%, 0% 90%);
    }
    @media (min-width: 91.875em){
      .btn {
        column-gap: 0.625rem;
      }
      .preloader__brand {
        font-size: 1.75rem;
      }
      [data-preloader-status] {
        font-size: 1.125rem;
      }
      .menu {
        column-gap: 1.25rem;
      }
      .menu {
        min-height: 5rem;
      }
      .menu__left-side {
        column-gap: 1.875rem;
      }
      .menu__logo {
        font-size: 1.6875rem;
      }
      .menu__btn {
        padding-top: 0.75rem;
      }
      .menu__btn {
        padding-right: 1.5625rem;
      }
      .menu__btn {
        padding-bottom: 0.75rem;
      }
      .menu__btn {
        padding-left: 1.5625rem;
      }
      .menu__body-wrapper {
        column-gap: 3.5rem;
      }
      .menu__list {
        column-gap: 3.5rem;
      }
      .menu__action {
        column-gap: 1.25rem;
      }
      .header__container {
        border-radius: 2.5rem;
      }
      .header__container {
        padding-right: 1.25rem;
      }
      .header__container {
        padding-left: 1.25rem;
      }
      .footer__container {
        column-gap: 1.875rem;
      }
      .footer__social-link {
        font-size: 1.875rem;
      }
      .footer__container {
        column-gap: 1.875rem;
      }
      .footer__social-link::before {
        font-size: 1.875rem;
      }
      .hero__copy {
        padding-top: 7.5rem;
      }
      .hero__label {
        font-size: 12.5rem;
      }
      .about {
        padding-top: 6.25rem;
      }
      .about__container {
        gap: 1.25rem;
      }
      .about__eyebrow {
        font-size: 1rem;
      }
      .about__title {
        font-size: 6.25rem;
      }
      .about__image {
        width: 32.5rem;
      }
      .about__image {
        height: 37.5rem;
      }
      .discover {
        padding-top: 6.25rem;
      }
      .discover {
        padding-bottom: 6.25rem;
      }
      .discover__top:not(:last-child) {
        margin-bottom: 6.25rem;
      }
      .discover__title {
        font-size: 1.25rem;
      }
      .discover__text {
        font-size: 1.125rem;
      }
      .discover__inner {
        gap: 1.875rem;
      }
      .discover__item {
        min-height: 25rem;
      }
      .discover__item-content {
        padding: 1.25rem;
      }
      .discover__item-title {
        font-size: 3.75rem;
      }
      .discover__icon {
        font-size: 2.5rem;
      }
      .story {
        padding-bottom: 6.25rem;
      }
      .story__pretitle {
        font-size: 0.875rem;
      }
      .story__title {
        font-size: 6.25rem;
      }
      .cta__container {
        padding-top: 6.25rem;
      }
      .cta__container {
        padding-bottom: 6.25rem;
      }
      .cta__content {
        padding-top: 4.375rem;
      }
      .cta__content {
        padding-right: 2.5rem;
      }
      .cta__content {
        padding-bottom: 4.375rem;
      }
      .cta__content {
        padding-left: 2.5rem;
      }
      .cta__content {
        border-radius: 0.625rem;
      }
      .cta__label {
        font-size: 0.9375rem;
      }
      .cta__title {
        font-size: 5rem;
      }
      .cta__title:not(:last-child) {
        margin-bottom: 1.875rem;
      }
      .decor__item--1 img {
        width: 20rem;
      }
      .decor__item--1 img {
        height: 16.375rem;
      }
      .decor__item--2 img {
        width: 21.25rem;
      }
      .decor__item--2 img {
        height: 12.5rem;
      }
      .decor__item--3 img {
        width: 20rem;
      }
      .decor__item--3 img {
        height: 28.125rem;
      }}
    @media (min-width: 20em) and (max-width: 91.875em){
      .btn {
        column-gap: clamp( 0.3125rem , 0.2255434782625rem  +  0.4347826087vw , 0.625rem );
      }
      .preloader__brand {
        font-size: clamp( 1.375rem , 1.2706521739125rem  +  0.5217391304vw , 1.75rem );
      }
      [data-preloader-status] {
        font-size: clamp( 0.875rem , 0.80543478260625rem  +  0.347826087vw , 1.125rem );
      }
      .menu {
        column-gap: clamp(0.9375rem, 0.8505434783rem + 0.4347826087vw, 1.25rem);
      }
      .menu {
        min-height: clamp(3.75rem, 3.402173913rem + 1.7391304348vw, 5rem);
      }
      .menu__left-side {
        column-gap: clamp(0.9375rem, 0.6766304348rem + 1.3043478261vw, 1.875rem);
      }
      .menu__logo {
        font-size: clamp(1.125rem, 0.9684782609rem + 0.7826086957vw, 1.6875rem);
      }
      .menu__btn {
        padding-top: clamp(0.5rem, 0.4304347826rem + 0.347826087vw, 0.75rem);
      }
      .menu__btn {
        padding-right: clamp(0.9375rem, 0.7635869565rem + 0.8695652174vw, 1.5625rem);
      }
      .menu__btn {
        padding-bottom: clamp(0.5rem, 0.4304347826rem + 0.347826087vw, 0.75rem);
      }
      .menu__btn {
        padding-left: clamp(0.9375rem, 0.7635869565rem + 0.8695652174vw, 1.5625rem);
      }
      .menu__action {
        column-gap: clamp(0.9375rem, 0.8505434783rem + 0.4347826087vw, 1.25rem);
      }
      .header__container {
        border-radius: clamp(1.25rem, 0.902173913rem + 1.7391304348vw, 2.5rem);
      }
      .header__container {
        padding-right: clamp(0.75rem, 0.6108695652rem + 0.6956521739vw, 1.25rem);
      }
      .header__container {
        padding-left: clamp(0.75rem, 0.6108695652rem + 0.6956521739vw, 1.25rem);
      }
      .footer__container {
        column-gap: clamp(0.9375rem, 0.6766304348rem + 1.3043478261vw, 1.875rem);
      }
      .footer__social-link {
        font-size: clamp(1.5625rem, 1.4755434783rem + 0.4347826087vw, 1.875rem);
      }
      .footer__container {
        column-gap: clamp( 0.9375rem , 0.67663043478125rem  +  1.3043478261vw , 1.875rem );
      }
      .footer__social-link::before {
        font-size: clamp( 1.5625rem , 1.4755434782625rem  +  0.4347826087vw , 1.875rem );
      }
      .hero__label {
        font-size: clamp( 4.125rem , 1.79456521739375rem  +  11.652173913vw , 12.5rem );
      }
      .about {
        padding-top: clamp( 3.125rem , 2.25543478260625rem  +  4.347826087vw , 6.25rem );
      }
      .about__container {
        gap: clamp( 0.9375rem , 0.8505434782625rem  +  0.4347826087vw , 1.25rem );
      }
      .about__eyebrow {
        font-size: clamp( 0.75rem , 0.68043478260625rem  +  0.347826087vw , 1rem );
      }
      .about__title {
        font-size: clamp( 2.625rem , 1.616304347825rem  +  5.0434782609vw , 6.25rem );
      }
      .about__image {
        width: clamp( 18.125rem , 14.125rem  +  20vw , 32.5rem );
      }
      .about__image {
        height: clamp( 25rem , 21.5217391304375rem  +  17.3913043478vw , 37.5rem );
      }
      .discover {
        padding-top: clamp( 3.125rem , 2.25543478260625rem  +  4.347826087vw , 6.25rem );
      }
      .discover {
        padding-bottom: clamp( 3.125rem , 2.25543478260625rem  +  4.347826087vw , 6.25rem );
      }
      .discover__top:not(:last-child) {
        margin-bottom: clamp( 1.875rem , 0.65760869565rem  +  6.0869565217vw , 6.25rem );
      }
      .discover__title {
        font-size: clamp( 1.125rem , 1.09021739130625rem  +  0.1739130435vw , 1.25rem );
      }
      .discover__text {
        font-size: clamp( 1rem , 0.96521739130625rem  +  0.1739130435vw , 1.125rem );
      }
      .discover__inner {
        gap: clamp( 0.9375rem , 0.67663043478125rem  +  1.3043478261vw , 1.875rem );
      }
      .discover__item {
        min-height: clamp( 18.75rem , 17.01086956521875rem  +  8.6956521739vw , 25rem );
      }
      .discover__item-content {
        padding: clamp( 0.8125rem , 0.6907608695625rem  +  0.6086956522vw , 1.25rem );
      }
      .discover__item-title {
        font-size: clamp( 1.875rem , 1.3532608695625rem  +  2.6086956522vw , 3.75rem );
      }
      .discover__icon {
        font-size: clamp( 1.5rem , 1.2217391304375rem  +  1.3913043478vw , 2.5rem );
      }
      .story {
        padding-bottom: clamp( 3.125rem , 2.25543478260625rem  +  4.347826087vw , 6.25rem );
      }
      .story__pretitle {
        font-size: clamp( 0.625rem , 0.55543478260625rem  +  0.347826087vw , 0.875rem );
      }
      .story__title {
        font-size: clamp( 2.4375rem , 1.37663043478125rem  +  5.3043478261vw , 6.25rem );
      }
      .cta__container {
        padding-top: clamp( 2.5rem , 1.45652173913125rem  +  5.2173913043vw , 6.25rem );
      }
      .cta__container {
        padding-bottom: clamp( 2.5rem , 1.45652173913125rem  +  5.2173913043vw , 6.25rem );
      }
      .cta__content {
        padding-top: clamp( 2.5rem , 1.9782608695625rem  +  2.6086956522vw , 4.375rem );
      }
      .cta__content {
        padding-right: clamp( 1.25rem , 0.90217391304375rem  +  1.7391304348vw , 2.5rem );
      }
      .cta__content {
        padding-bottom: clamp( 2.5rem , 1.9782608695625rem  +  2.6086956522vw , 4.375rem );
      }
      .cta__content {
        padding-left: clamp( 1.25rem , 0.90217391304375rem  +  1.7391304348vw , 2.5rem );
      }
      .cta__content {
        border-radius: clamp( 0.3125rem , 0.2255434782625rem  +  0.4347826087vw , 0.625rem );
      }
      .cta__label {
        font-size: clamp( 0.75rem , 0.69782608695625rem  +  0.2608695652vw , 0.9375rem );
      }
      .cta__title {
        font-size: clamp( 2.3125rem , 1.56467391304375rem  +  3.7391304348vw , 5rem );
      }
      .cta__title:not(:last-child) {
        margin-bottom: clamp( 0.9375rem , 0.67663043478125rem  +  1.3043478261vw , 1.875rem );
      }
      .decor__item--1 img {
        width: clamp( 6.875rem , 3.22282608695625rem  +  18.2608695652vw , 20rem );
      }
      .decor__item--1 img {
        height: clamp( 5rem , 1.83478260869375rem  +  15.8260869565vw , 16.375rem );
      }
      .decor__item--2 img {
        width: clamp( 11.25rem , 8.46739130435rem  +  13.9130434783vw , 21.25rem );
      }
      .decor__item--2 img {
        height: clamp( 7.5rem , 6.108695652175rem  +  6.9565217391vw , 12.5rem );
      }
      .decor__item--3 img {
        width: clamp( 6.25rem , 2.42391304348125rem  +  19.1304347826vw , 20rem );
      }
      .decor__item--3 img {
        height: clamp( 9.375rem , 4.15760869565rem  +  26.0869565217vw , 28.125rem );
      }}
    @media (max-width: 20em){
      .btn {
        column-gap: 0.3125rem;
      }
      .preloader__brand {
        font-size: 1.375rem;
      }
      [data-preloader-status] {
        font-size: 0.875rem;
      }
      .menu {
        column-gap: 0.9375rem;
      }
      .menu {
        min-height: 3.75rem;
      }
      .menu__left-side {
        column-gap: 0.9375rem;
      }
      .menu__logo {
        font-size: 1.125rem;
      }
      .menu__btn {
        padding-top: 0.5rem;
      }
      .menu__btn {
        padding-right: 0.9375rem;
      }
      .menu__btn {
        padding-bottom: 0.5rem;
      }
      .menu__btn {
        padding-left: 0.9375rem;
      }
      .menu__action {
        column-gap: 0.9375rem;
      }
      .header__container {
        border-radius: 1.25rem;
      }
      .header__container {
        padding-right: 0.75rem;
      }
      .header__container {
        padding-left: 0.75rem;
      }
      .footer__container {
        column-gap: 0.9375rem;
      }
      .footer__social-link {
        font-size: 1.5625rem;
      }
      .footer__container {
        column-gap: 0.9375rem;
      }
      .footer__social-link::before {
        font-size: 1.5625rem;
      }
      .hero__label {
        font-size: 4.125rem;
      }
      .about {
        padding-top: 3.125rem;
      }
      .about__container {
        gap: 0.9375rem;
      }
      .about__eyebrow {
        font-size: 0.75rem;
      }
      .about__title {
        font-size: 2.625rem;
      }
      .about__image {
        width: 18.125rem;
      }
      .about__image {
        height: 25rem;
      }
      .discover {
        padding-top: 3.125rem;
      }
      .discover {
        padding-bottom: 3.125rem;
      }
      .discover__top:not(:last-child) {
        margin-bottom: 1.875rem;
      }
      .discover__title {
        font-size: 1.125rem;
      }
      .discover__text {
        font-size: 1rem;
      }
      .discover__inner {
        gap: 0.9375rem;
      }
      .discover__item {
        min-height: 18.75rem;
      }
      .discover__item-content {
        padding: 0.8125rem;
      }
      .discover__item-title {
        font-size: 1.875rem;
      }
      .discover__icon {
        font-size: 1.5rem;
      }
      .story {
        padding-bottom: 3.125rem;
      }
      .story__pretitle {
        font-size: 0.625rem;
      }
      .story__title {
        font-size: 2.4375rem;
      }
      .cta__container {
        padding-top: 2.5rem;
      }
      .cta__container {
        padding-bottom: 2.5rem;
      }
      .cta__content {
        padding-top: 2.5rem;
      }
      .cta__content {
        padding-right: 1.25rem;
      }
      .cta__content {
        padding-bottom: 2.5rem;
      }
      .cta__content {
        padding-left: 1.25rem;
      }
      .cta__content {
        border-radius: 0.3125rem;
      }
      .cta__label {
        font-size: 0.75rem;
      }
      .cta__title {
        font-size: 2.3125rem;
      }
      .cta__title:not(:last-child) {
        margin-bottom: 0.9375rem;
      }
      .decor__item--1 img {
        width: 6.875rem;
      }
      .decor__item--1 img {
        height: 5rem;
      }
      .decor__item--2 img {
        width: 11.25rem;
      }
      .decor__item--2 img {
        height: 7.5rem;
      }
      .decor__item--3 img {
        width: 6.25rem;
      }
      .decor__item--3 img {
        height: 9.375rem;
      }}
    @media (any-hover: hover){
      .btn:hover {
        scale: 1.1;
      }
      .btn:hover .btn__main {
        transform: translateY(-120%);
      }
      .btn:hover .btn__alt {
        transform: translateY(0%);
      }
      .footer__social-link:hover {
        color: #edff66;
        transform: scale(1.1);
      }
      .footer__social-link:hover {
        color: #edff66;
        transform: scale(1.1);
      }
      .hero__mini-inner:hover {
        transform: scale(0.8);
      }}
    @media (min-width: 47.99875em) and (max-width: 91.875em){
      .menu__body-wrapper {
        column-gap: clamp(1.5625rem, -0.5570425344rem + 4.4158286089vw, 3.5rem);
      }
      .menu__list {
        column-gap: clamp(0.9375rem, -1.8657659326rem + 5.8402894504vw, 3.5rem);
      }}
    @media (max-width: 47.99875em){
      .menu__body-wrapper {
        column-gap: 1.5625rem;
      }
      .menu__body {
        position: fixed;
        top: 0;
        left: -100%;
        width: 100%;
        height: 100%;
        min-height: 100dvh;
        overflow: auto;
        padding: 5.625rem 0.9375rem 1.875rem 0.9375rem;
        transition: left 0.3s;
        background-color: #000;
      }
      .menu__body::before {
        content: "";
        position: fixed;
        top: 0;
        left: -100%;
        z-index: 2;
        width: 100%;
        background-color: #000;
        transition: left 0.3s;
      }
      [data-fls-menu-open] .menu__body {
        left: 0;
      }
      [data-fls-menu-open] .menu__body::before {
        left: 0;
      }
      .menu__list {
        column-gap: 0.9375rem;
      }
      .menu__item:not(:last-child) {
        margin-bottom: 1.25rem;
      }
      .menu__link {
        font-size: 1.875rem;
      }
      .icon-menu {
        display: block;
        position: relative;
        width: 1.875rem;
        height: 1.125rem;
        z-index: 5;
      }
      .icon-menu span, .icon-menu::before, .icon-menu::after {
        content: "";
        transition: all 0.3s ease 0s;
        right: 0;
        position: absolute;
        width: 100%;
        height: 0.125rem;
        background-color: #fff;
      }
      .icon-menu::before {
        top: 0;
      }
      .icon-menu::after {
        bottom: 0;
      }
      .icon-menu span {
        top: calc(50% - 0.0625rem);
      }
      [data-fls-menu-open] .icon-menu span {
        width: 0;
      }
      [data-fls-menu-open] .icon-menu::before {
        top: calc(50% - 0.0625rem);
        transform: rotate(-45deg);
      }
      [data-fls-menu-open] .icon-menu::after {
        bottom: calc(50% - 0.0625rem);
        transform: rotate(45deg);
      }
      .discover__inner {
        grid-template-columns: 1fr;
      }}
    @media (max-width: 47.99875em) and (min-width: 91.875em){
      .menu__body::before {
        height: 6.25rem;
      }}
    @media (max-width: 47.99875em) and (min-width: 20em) and (max-width: 91.875em){
      .menu__body::before {
        height: clamp(5rem, 4.652173913rem + 1.7391304348vw, 6.25rem);
      }}
    @media (max-width: 47.99875em) and (max-width: 20em){
      .menu__body::before {
        height: 5rem;
      }}
    @media (min-width: 47.99875em){
      .menu__list {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        justify-content: end;
      }
      .discover__inner :nth-child(1) {
        grid-column: span 2;
      }
      .discover__inner :nth-child(2) {
        grid-row: span 2;
      }}
    @media (any-hover: none){
      .menu__link::before {
        display: none;
      }
      .footer__privacy::before {
        display: none;
      }
      .hero__mini {
        display: none !important;
      }
      .hero__mini-inner {
        display: none !important;
      }
      .hero__mini-video {
        display: none !important;
      }
      .discover__item--color .discover__item-content {
        background-color: #5724ff;
      }
      .discover__glare {
        display: none;
      }}
    @media (max-width: 24.0625em){
      .menu__audio-toggle {
        display: flex;
        align-items: center;
        justify-content: center;
        min-width: 9.375rem;
        min-height: 2.1875rem;
        background-color: #edff66;
        border-radius: 1.875rem;
      }
      .menu__audio-toggle::before {
        content: "Play Music";
        font-family: zentry;
        font-size: 1.125rem;
        letter-spacing: 0.05em;
        color: #000;
      }
      .menu__audio-toggle span {
        background-color: #000;
      }
      .menu__audio-toggle.is-playing::before {
        display: none;
      }}
    @media (max-width: 36.875em){
      .footer__container {
        grid-template-columns: repeat(2, 1fr);
        grid-template-rows: repeat(2, 1fr);
      }
      .footer__sociall {
        grid-column: span 2;
        order: 3;
      }
      .footer__container {
        grid-template-columns: repeat(2, 1fr);
        grid-template-rows: repeat(2, 1fr);
      }}
    @media (max-width: 27.5em){
      .footer__container {
        grid-template-columns: 1fr;
      }
      .footer__copy {
        justify-self: center;
        text-align: center;
      }
      .footer__sociall {
        grid-column: span 1;
        justify-self: center;
      }
      .footer__privacy {
        justify-self: center;
      }
      .footer__container {
        grid-template-columns: 1fr;
      }}
    @media (max-width: 47.99875em) and (any-hover: none){
      .icon-menu {
        cursor: default;
      }}
    @media (max-width: 36.875rem){
      .footer__sociall {
        grid-column: span 2;
        order: 3;
      }}
    @media (max-width: 27.5rem){
      .footer__sociall {
        grid-column: span 1;
        justify-self: center;
      }
      .footer__privacy {
        justify-self: center;
      }}
    @media (max-width: 61.99875em){
      .hero__mini {
        display: none;
      }
      .hero__copy {
        padding-top: 5.625rem;
      }}
    @media (min-width: 61.99875em) and (max-width: 91.875em){
      .hero__copy {
        padding-top: clamp( 5.625rem , 1.73402786494375rem  +  6.2758880382vw , 7.5rem );
      }}
    @media (prefers-reduced-motion: reduce){
      .discover__tilt {
        transform: none !important;
      }
      .discover__item-content {
        transform: none !important;
      }}
    @media (pointer: coarse){
      .discover__tilt {
        transform: none !important;
      }
      .discover__item-content {
        transform: none !important;
      }}

    JavaScript:

    This JavaScript controls the interactive behavior of the website. It first adds a polyfill to support module preloading in older browsers. Then it manages body scroll locking when the menu opens or closes, preventing background scrolling. It handles menu toggle clicks, header hide and show behavior on scroll, and dynamically moves elements to different places in the layout based on screen size using the DynamicAdapt class. It also adds smooth mouse-based parallax effects to elements for depth and motion. Overall, this script powers responsiveness, animations, scrolling behavior, and interactive UI effects across the site.

    (function polyfill() {
      const relList = document.createElement("link").relList;
      if (relList && relList.supports && relList.supports("modulepreload")) {
        return;
      }
      for (const link of document.querySelectorAll('link[rel="modulepreload"]')) {
        processPreload(link);
      }
      new MutationObserver((mutations) => {
        for (const mutation of mutations) {
          if (mutation.type !== "childList") {
            continue;
          }
          for (const node of mutation.addedNodes) {
            if (node.tagName === "LINK" && node.rel === "modulepreload")
              processPreload(node);
          }
        }
      }).observe(document, { childList: true, subtree: true });
      function getFetchOpts(link) {
        const fetchOpts = {};
        if (link.integrity) fetchOpts.integrity = link.integrity;
        if (link.referrerPolicy) fetchOpts.referrerPolicy = link.referrerPolicy;
        if (link.crossOrigin === "use-credentials")
          fetchOpts.credentials = "include";
        else if (link.crossOrigin === "anonymous") fetchOpts.credentials = "omit";
        else fetchOpts.credentials = "same-origin";
        return fetchOpts;
      }
      function processPreload(link) {
        if (link.ep)
          return;
        link.ep = true;
        const fetchOpts = getFetchOpts(link);
        fetch(link.href, fetchOpts);
      }
    })();
    let bodyLockStatus = true;
    let bodyLockToggle = (delay = 500) => {
      if (document.documentElement.hasAttribute("data-fls-scrolllock")) {
        bodyUnlock(delay);
      } else {
        bodyLock(delay);
      }
    };
    let bodyUnlock = (delay = 500) => {
      if (bodyLockStatus) {
        const lockPaddingElements = document.querySelectorAll("[data-fls-lp]");
        setTimeout(() => {
          lockPaddingElements.forEach((lockPaddingElement) => {
            lockPaddingElement.style.paddingRight = "";
          });
          document.body.style.paddingRight = "";
          document.documentElement.removeAttribute("data-fls-scrolllock");
        }, delay);
        bodyLockStatus = false;
        setTimeout(function() {
          bodyLockStatus = true;
        }, delay);
      }
    };
    let bodyLock = (delay = 500) => {
      if (bodyLockStatus) {
        const lockPaddingElements = document.querySelectorAll("[data-fls-lp]");
        const lockPaddingValue = window.innerWidth - document.body.offsetWidth + "px";
        lockPaddingElements.forEach((lockPaddingElement) => {
          lockPaddingElement.style.paddingRight = lockPaddingValue;
        });
        document.body.style.paddingRight = lockPaddingValue;
        document.documentElement.setAttribute("data-fls-scrolllock", "");
        bodyLockStatus = false;
        setTimeout(function() {
          bodyLockStatus = true;
        }, delay);
      }
    };
    function menuInit() {
      document.addEventListener("click", function(e) {
        if (bodyLockStatus && e.target.closest("[data-fls-menu]")) {
          bodyLockToggle();
          document.documentElement.toggleAttribute("data-fls-menu-open");
        }
      });
    }
    document.querySelector("[data-fls-menu]") ? window.addEventListener("load", menuInit) : null;
    function headerScroll() {
      const header = document.querySelector("[data-fls-header-scroll]");
      const headerShow = header.hasAttribute("data-fls-header-scroll-show");
      const headerShowTimer = header.dataset.flsHeaderScrollShow ? header.dataset.flsHeaderScrollShow : 500;
      const startPoint = header.dataset.flsHeaderScroll ? header.dataset.flsHeaderScroll : 1;
      let scrollDirection = 0;
      let timer;
      document.addEventListener("scroll", function(e) {
        const scrollTop = window.scrollY;
        clearTimeout(timer);
        if (scrollTop >= startPoint) {
          !header.classList.contains("--header-scroll") ? header.classList.add("--header-scroll") : null;
          if (headerShow) {
            if (scrollTop > scrollDirection) {
              header.classList.contains("--header-show") ? header.classList.remove("--header-show") : null;
            } else {
              !header.classList.contains("--header-show") ? header.classList.add("--header-show") : null;
            }
            timer = setTimeout(() => {
              !header.classList.contains("--header-show") ? header.classList.add("--header-show") : null;
            }, headerShowTimer);
          }
        } else {
          header.classList.contains("--header-scroll") ? header.classList.remove("--header-scroll") : null;
          if (headerShow) {
            header.classList.contains("--header-show") ? header.classList.remove("--header-show") : null;
          }
        }
        scrollDirection = scrollTop <= 0 ? 0 : scrollTop;
      });
    }
    document.querySelector("[data-fls-header-scroll]") ? window.addEventListener("load", headerScroll) : null;
    class DynamicAdapt {
      constructor() {
        this.type = "max";
        this.init();
      }
      init() {
        this.objects = [];
        this.daClassname = "--dynamic";
        this.nodes = [...document.querySelectorAll("[data-fls-dynamic]")];
        this.nodes.forEach((node) => {
          const data = node.dataset.flsDynamic.trim();
          const dataArray = data.split(`,`);
          const object = {};
          object.element = node;
          object.parent = node.parentNode;
          object.destinationParent = dataArray[3] ? node.closest(dataArray[3].trim()) || document : document;
          dataArray[3] ? dataArray[3].trim() : null;
          const objectSelector = dataArray[0] ? dataArray[0].trim() : null;
          if (objectSelector) {
            const foundDestination = object.destinationParent.querySelector(objectSelector);
            if (foundDestination) {
              object.destination = foundDestination;
            }
          }
          object.breakpoint = dataArray[1] ? dataArray[1].trim() : `767.98`;
          object.place = dataArray[2] ? dataArray[2].trim() : `last`;
          object.index = this.indexInParent(object.parent, object.element);
          this.objects.push(object);
        });
        this.arraySort(this.objects);
        this.mediaQueries = this.objects.map(({ breakpoint }) => `(${this.type}-width: ${breakpoint / 16}em),${breakpoint}`).filter((item, index, self) => self.indexOf(item) === index);
        this.mediaQueries.forEach((media) => {
          const mediaSplit = media.split(",");
          const matchMedia3 = window.matchMedia(mediaSplit[0]);
          const mediaBreakpoint = mediaSplit[1];
          const objectsFilter = this.objects.filter(({ breakpoint }) => breakpoint === mediaBreakpoint);
          matchMedia3.addEventListener("change", () => {
            this.mediaHandler(matchMedia3, objectsFilter);
          });
          this.mediaHandler(matchMedia3, objectsFilter);
        });
      }
      mediaHandler(matchMedia3, objects) {
        if (matchMedia3.matches) {
          objects.forEach((object) => {
            if (object.destination) {
              this.moveTo(object.place, object.element, object.destination);
            }
          });
        } else {
          objects.forEach(({ parent, element, index }) => {
            if (element.classList.contains(this.daClassname)) {
              this.moveBack(parent, element, index);
            }
          });
        }
      }
      moveTo(place, element, destination) {
        element.classList.add(this.daClassname);
        const index = place === "last" || place === "first" ? place : parseInt(place, 10);
        if (index === "last" || index >= destination.children.length) {
          destination.append(element);
        } else if (index === "first") {
          destination.prepend(element);
        } else {
          destination.children[index].before(element);
        }
      }
      moveBack(parent, element, index) {
        element.classList.remove(this.daClassname);
        if (parent.children[index] !== void 0) {
          parent.children[index].before(element);
        } else {
          parent.append(element);
        }
      }
      indexInParent(parent, element) {
        return [...parent.children].indexOf(element);
      }
      arraySort(arr) {
        if (this.type === "min") {
          arr.sort((a, b) => {
            if (a.breakpoint === b.breakpoint) {
              if (a.place === b.place) {
                return 0;
              }
              if (a.place === "first" || b.place === "last") {
                return -1;
              }
              if (a.place === "last" || b.place === "first") {
                return 1;
              }
              return 0;
            }
            return a.breakpoint - b.breakpoint;
          });
        } else {
          arr.sort((a, b) => {
            if (a.breakpoint === b.breakpoint) {
              if (a.place === b.place) {
                return 0;
              }
              if (a.place === "first" || b.place === "last") {
                return 1;
              }
              if (a.place === "last" || b.place === "first") {
                return -1;
              }
              return 0;
            }
            return b.breakpoint - a.breakpoint;
          });
          return;
        }
      }
    }
    if (document.querySelector("[data-fls-dynamic]")) {
      window.addEventListener("load", () => new DynamicAdapt());
    }
    class MousePRLX {
      constructor(props, data = null) {
        let defaultConfig = {
          init: true
        };
        this.config = Object.assign(defaultConfig, props);
        if (this.config.init) {
          const paralaxMouse = document.querySelectorAll("[data-fls-mouse]");
          if (paralaxMouse.length) {
            this.paralaxMouseInit(paralaxMouse);
          }
        }
      }
      paralaxMouseInit(paralaxMouse) {
        paralaxMouse.forEach((el) => {
          const paralaxMouseWrapper = el.closest("[data-fls-mouse-wrapper]");
          const paramСoefficientX = el.dataset.flsMouseCx ? +el.dataset.flsMouseCx : 100;
          const paramСoefficientY = el.dataset.prlxCy ? +el.dataset.prlxCy : 100;
          const directionX = el.hasAttribute("data-fls-mouse-dxr") ? -1 : 1;
          const directionY = el.hasAttribute("data-fls-mouse-dyr") ? -1 : 1;
          const paramAnimation = el.dataset.prlxA ? +el.dataset.prlxA : 50;
          let positionX = 0, positionY = 0;
          let coordXprocent = 0, coordYprocent = 0;
          setMouseParallaxStyle();
          if (paralaxMouseWrapper) {
            mouseMoveParalax(paralaxMouseWrapper);
          } else {
            mouseMoveParalax();
          }
          function setMouseParallaxStyle() {
            const distX = coordXprocent - positionX;
            const distY = coordYprocent - positionY;
            positionX = positionX + distX * paramAnimation / 1e3;
            positionY = positionY + distY * paramAnimation / 1e3;
            el.style.cssText = `transform: translate3D(${directionX * positionX / (paramСoefficientX / 10)}%,${directionY * positionY / (paramСoefficientY / 10)}%,0) rotate(0.02deg);`;
            requestAnimationFrame(setMouseParallaxStyle);
          }
          function mouseMoveParalax(wrapper = window) {
            wrapper.addEventListener("mousemove", function(e) {
              const offsetTop = el.getBoundingClientRect().top + window.scrollY;
              if (offsetTop >= window.scrollY || offsetTop + el.offsetHeight >= window.scrollY) {
                const parallaxWidth = window.innerWidth;
                const parallaxHeight = window.innerHeight;
                const coordX = e.clientX - parallaxWidth / 2;
                const coordY = e.clientY - parallaxHeight / 2;
                coordXprocent = coordX / parallaxWidth * 100;
                coordYprocent = coordY / parallaxHeight * 100;
              }
            });
          }
        });
      }
    }
    document.querySelector("[data-fls-mouse]") ? window.addEventListener("load", new MousePRLX({})) : null;
    function _assertThisInitialized(self) {
      if (self === void 0) {
        throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
      }
      return self;
    }
    function _inheritsLoose(subClass, superClass) {
      subClass.prototype = Object.create(superClass.prototype);
      subClass.prototype.constructor = subClass;
      subClass.__proto__ = superClass;
    }
    /*!
     * GSAP 3.13.0
     * https://gsap.com
     *
     * @license Copyright 2008-2025, GreenSock. All rights reserved.
     * Subject to the terms at https://gsap.com/standard-license
     * @author: Jack Doyle, jack@greensock.com
    */
    var _config = {
      autoSleep: 120,
      force3D: "auto",
      nullTargetWarn: 1,
      units: {
        lineHeight: ""
      }
    }, _defaults$1 = {
      duration: 0.5,
      overwrite: false,
      delay: 0
    }, _suppressOverwrites$1, _reverting$1, _context$3, _bigNum$1 = 1e8, _tinyNum = 1 / _bigNum$1, _2PI = Math.PI * 2, _HALF_PI = _2PI / 4, _gsID = 0, _sqrt = Math.sqrt, _cos = Math.cos, _sin = Math.sin, _isString$1 = function _isString2(value) {
      return typeof value === "string";
    }, _isFunction$1 = function _isFunction2(value) {
      return typeof value === "function";
    }, _isNumber$1 = function _isNumber2(value) {
      return typeof value === "number";
    }, _isUndefined = function _isUndefined2(value) {
      return typeof value === "undefined";
    }, _isObject$1 = function _isObject2(value) {
      return typeof value === "object";
    }, _isNotFalse = function _isNotFalse2(value) {
      return value !== false;
    }, _windowExists$2 = function _windowExists2() {
      return typeof window !== "undefined";
    }, _isFuncOrString = function _isFuncOrString2(value) {
      return _isFunction$1(value) || _isString$1(value);
    }, _isTypedArray = typeof ArrayBuffer === "function" && ArrayBuffer.isView || function() {
    }, _isArray = Array.isArray, _strictNumExp = /(?:-?\.?\d|\.)+/gi, _numExp = /[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g, _numWithUnitExp = /[-+=.]*\d+[.e-]*\d*[a-z%]*/g, _complexStringNumExp = /[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi, _relExp = /[+-]=-?[.\d]+/, _delimitedValueExp = /[^,'"\[\]\s]+/gi, _unitExp = /^[+\-=e\s\d]*\d+[.\d]*([a-z]*|%)\s*$/i, _globalTimeline, _win$3, _coreInitted$3, _doc$3, _globals = {}, _installScope = {}, _coreReady, _install = function _install2(scope) {
      return (_installScope = _merge(scope, _globals)) && gsap$3;
    }, _missingPlugin = function _missingPlugin2(property, value) {
      return console.warn("Invalid property", property, "set to", value, "Missing plugin? gsap.registerPlugin()");
    }, _warn = function _warn2(message, suppress) {
      return !suppress && console.warn(message);
    }, _addGlobal = function _addGlobal2(name, obj) {
      return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;
    }, _emptyFunc = function _emptyFunc2() {
      return 0;
    }, _startAtRevertConfig = {
      suppressEvents: true,
      isStart: true,
      kill: false
    }, _revertConfigNoKill = {
      suppressEvents: true,
      kill: false
    }, _revertConfig = {
      suppressEvents: true
    }, _reservedProps = {}, _lazyTweens = [], _lazyLookup = {}, _lastRenderedFrame, _plugins = {}, _effects = {}, _nextGCFrame = 30, _harnessPlugins = [], _callbackNames = "", _harness = function _harness2(targets) {
      var target = targets[0], harnessPlugin, i;
      _isObject$1(target) || _isFunction$1(target) || (targets = [targets]);
      if (!(harnessPlugin = (target._gsap || {}).harness)) {
        i = _harnessPlugins.length;
        while (i-- && !_harnessPlugins[i].targetTest(target)) {
        }
        harnessPlugin = _harnessPlugins[i];
      }
      i = targets.length;
      while (i--) {
        targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);
      }
      return targets;
    }, _getCache = function _getCache2(target) {
      return target._gsap || _harness(toArray(target))[0]._gsap;
    }, _getProperty = function _getProperty2(target, property, v) {
      return (v = target[property]) && _isFunction$1(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v;
    }, _forEachName = function _forEachName2(names, func) {
      return (names = names.split(",")).forEach(func) || names;
    }, _round$1 = function _round2(value) {
      return Math.round(value * 1e5) / 1e5 || 0;
    }, _roundPrecise = function _roundPrecise2(value) {
      return Math.round(value * 1e7) / 1e7 || 0;
    }, _parseRelative = function _parseRelative2(start, value) {
      var operator = value.charAt(0), end = parseFloat(value.substr(2));
      start = parseFloat(start);
      return operator === "+" ? start + end : operator === "-" ? start - end : operator === "*" ? start * end : start / end;
    }, _arrayContainsAny = function _arrayContainsAny2(toSearch, toFind) {
      var l = toFind.length, i = 0;
      for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l; ) {
      }
      return i < l;
    }, _lazyRender = function _lazyRender2() {
      var l = _lazyTweens.length, a = _lazyTweens.slice(0), i, tween;
      _lazyLookup = {};
      _lazyTweens.length = 0;
      for (i = 0; i < l; i++) {
        tween = a[i];
        tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0);
      }
    }, _isRevertWorthy = function _isRevertWorthy2(animation) {
      return !!(animation._initted || animation._startAt || animation.add);
    }, _lazySafeRender = function _lazySafeRender2(animation, time, suppressEvents, force) {
      _lazyTweens.length && !_reverting$1 && _lazyRender();
      animation.render(time, suppressEvents, !!(_reverting$1 && time < 0 && _isRevertWorthy(animation)));
      _lazyTweens.length && !_reverting$1 && _lazyRender();
    }, _numericIfPossible = function _numericIfPossible2(value) {
      var n = parseFloat(value);
      return (n || n === 0) && (value + "").match(_delimitedValueExp).length < 2 ? n : _isString$1(value) ? value.trim() : value;
    }, _passThrough$1 = function _passThrough2(p) {
      return p;
    }, _setDefaults$1 = function _setDefaults2(obj, defaults2) {
      for (var p in defaults2) {
        p in obj || (obj[p] = defaults2[p]);
      }
      return obj;
    }, _setKeyframeDefaults = function _setKeyframeDefaults2(excludeDuration) {
      return function(obj, defaults2) {
        for (var p in defaults2) {
          p in obj || p === "duration" && excludeDuration || p === "ease" || (obj[p] = defaults2[p]);
        }
      };
    }, _merge = function _merge2(base, toMerge) {
      for (var p in toMerge) {
        base[p] = toMerge[p];
      }
      return base;
    }, _mergeDeep = function _mergeDeep2(base, toMerge) {
      for (var p in toMerge) {
        p !== "__proto__" && p !== "constructor" && p !== "prototype" && (base[p] = _isObject$1(toMerge[p]) ? _mergeDeep2(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]);
      }
      return base;
    }, _copyExcluding = function _copyExcluding2(obj, excluding) {
      var copy = {}, p;
      for (p in obj) {
        p in excluding || (copy[p] = obj[p]);
      }
      return copy;
    }, _inheritDefaults = function _inheritDefaults2(vars) {
      var parent = vars.parent || _globalTimeline, func = vars.keyframes ? _setKeyframeDefaults(_isArray(vars.keyframes)) : _setDefaults$1;
      if (_isNotFalse(vars.inherit)) {
        while (parent) {
          func(vars, parent.vars.defaults);
          parent = parent.parent || parent._dp;
        }
      }
      return vars;
    }, _arraysMatch = function _arraysMatch2(a1, a2) {
      var i = a1.length, match = i === a2.length;
      while (match && i-- && a1[i] === a2[i]) {
      }
      return i < 0;
    }, _addLinkedListItem = function _addLinkedListItem2(parent, child, firstProp, lastProp, sortBy) {
      var prev = parent[lastProp], t;
      if (sortBy) {
        t = child[sortBy];
        while (prev && prev[sortBy] > t) {
          prev = prev._prev;
        }
      }
      if (prev) {
        child._next = prev._next;
        prev._next = child;
      } else {
        child._next = parent[firstProp];
        parent[firstProp] = child;
      }
      if (child._next) {
        child._next._prev = child;
      } else {
        parent[lastProp] = child;
      }
      child._prev = prev;
      child.parent = child._dp = parent;
      return child;
    }, _removeLinkedListItem = function _removeLinkedListItem2(parent, child, firstProp, lastProp) {
      if (firstProp === void 0) {
        firstProp = "_first";
      }
      if (lastProp === void 0) {
        lastProp = "_last";
      }
      var prev = child._prev, next = child._next;
      if (prev) {
        prev._next = next;
      } else if (parent[firstProp] === child) {
        parent[firstProp] = next;
      }
      if (next) {
        next._prev = prev;
      } else if (parent[lastProp] === child) {
        parent[lastProp] = prev;
      }
      child._next = child._prev = child.parent = null;
    }, _removeFromParent = function _removeFromParent2(child, onlyIfParentHasAutoRemove) {
      child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove && child.parent.remove(child);
      child._act = 0;
    }, _uncache = function _uncache2(animation, child) {
      if (animation && (!child || child._end > animation._dur || child._start < 0)) {
        var a = animation;
        while (a) {
          a._dirty = 1;
          a = a.parent;
        }
      }
      return animation;
    }, _recacheAncestors = function _recacheAncestors2(animation) {
      var parent = animation.parent;
      while (parent && parent.parent) {
        parent._dirty = 1;
        parent.totalDuration();
        parent = parent.parent;
      }
      return animation;
    }, _rewindStartAt = function _rewindStartAt2(tween, totalTime, suppressEvents, force) {
      return tween._startAt && (_reverting$1 ? tween._startAt.revert(_revertConfigNoKill) : tween.vars.immediateRender && !tween.vars.autoRevert || tween._startAt.render(totalTime, true, force));
    }, _hasNoPausedAncestors = function _hasNoPausedAncestors2(animation) {
      return !animation || animation._ts && _hasNoPausedAncestors2(animation.parent);
    }, _elapsedCycleDuration = function _elapsedCycleDuration2(animation) {
      return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;
    }, _animationCycle = function _animationCycle2(tTime, cycleDuration) {
      var whole = Math.floor(tTime = _roundPrecise(tTime / cycleDuration));
      return tTime && whole === tTime ? whole - 1 : whole;
    }, _parentToChildTotalTime = function _parentToChildTotalTime2(parentTime, child) {
      return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);
    }, _setEnd = function _setEnd2(animation) {
      return animation._end = _roundPrecise(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0));
    }, _alignPlayhead = function _alignPlayhead2(animation, totalTime) {
      var parent = animation._dp;
      if (parent && parent.smoothChildTiming && animation._ts) {
        animation._start = _roundPrecise(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts));
        _setEnd(animation);
        parent._dirty || _uncache(parent, animation);
      }
      return animation;
    }, _postAddChecks = function _postAddChecks2(timeline2, child) {
      var t;
      if (child._time || !child._dur && child._initted || child._start < timeline2._time && (child._dur || !child.add)) {
        t = _parentToChildTotalTime(timeline2.rawTime(), child);
        if (!child._dur || _clamp$1(0, child.totalDuration(), t) - child._tTime > _tinyNum) {
          child.render(t, true);
        }
      }
      if (_uncache(timeline2, child)._dp && timeline2._initted && timeline2._time >= timeline2._dur && timeline2._ts) {
        if (timeline2._dur < timeline2.duration()) {
          t = timeline2;
          while (t._dp) {
            t.rawTime() >= 0 && t.totalTime(t._tTime);
            t = t._dp;
          }
        }
        timeline2._zTime = -_tinyNum;
      }
    }, _addToTimeline = function _addToTimeline2(timeline2, child, position, skipChecks) {
      child.parent && _removeFromParent(child);
      child._start = _roundPrecise((_isNumber$1(position) ? position : position || timeline2 !== _globalTimeline ? _parsePosition$1(timeline2, position, child) : timeline2._time) + child._delay);
      child._end = _roundPrecise(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0));
      _addLinkedListItem(timeline2, child, "_first", "_last", timeline2._sort ? "_start" : 0);
      _isFromOrFromStart(child) || (timeline2._recent = child);
      skipChecks || _postAddChecks(timeline2, child);
      timeline2._ts < 0 && _alignPlayhead(timeline2, timeline2._tTime);
      return timeline2;
    }, _scrollTrigger = function _scrollTrigger2(animation, trigger) {
      return (_globals.ScrollTrigger || _missingPlugin("scrollTrigger", trigger)) && _globals.ScrollTrigger.create(trigger, animation);
    }, _attemptInitTween = function _attemptInitTween2(tween, time, force, suppressEvents, tTime) {
      _initTween(tween, time, tTime);
      if (!tween._initted) {
        return 1;
      }
      if (!force && tween._pt && !_reverting$1 && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {
        _lazyTweens.push(tween);
        tween._lazy = [tTime, suppressEvents];
        return 1;
      }
    }, _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart2(_ref) {
      var parent = _ref.parent;
      return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart2(parent));
    }, _isFromOrFromStart = function _isFromOrFromStart2(_ref2) {
      var data = _ref2.data;
      return data === "isFromStart" || data === "isStart";
    }, _renderZeroDurationTween = function _renderZeroDurationTween2(tween, totalTime, suppressEvents, force) {
      var prevRatio = tween.ratio, ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1, repeatDelay = tween._rDelay, tTime = 0, pt, iteration, prevIteration;
      if (repeatDelay && tween._repeat) {
        tTime = _clamp$1(0, tween._tDur, totalTime);
        iteration = _animationCycle(tTime, repeatDelay);
        tween._yoyo && iteration & 1 && (ratio = 1 - ratio);
        if (iteration !== _animationCycle(tween._tTime, repeatDelay)) {
          prevRatio = 1 - ratio;
          tween.vars.repeatRefresh && tween._initted && tween.invalidate();
        }
      }
      if (ratio !== prevRatio || _reverting$1 || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {
        if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents, tTime)) {
          return;
        }
        prevIteration = tween._zTime;
        tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0);
        suppressEvents || (suppressEvents = totalTime && !prevIteration);
        tween.ratio = ratio;
        tween._from && (ratio = 1 - ratio);
        tween._time = 0;
        tween._tTime = tTime;
        pt = tween._pt;
        while (pt) {
          pt.r(ratio, pt.d);
          pt = pt._next;
        }
        totalTime < 0 && _rewindStartAt(tween, totalTime, suppressEvents, true);
        tween._onUpdate && !suppressEvents && _callback$1(tween, "onUpdate");
        tTime && tween._repeat && !suppressEvents && tween.parent && _callback$1(tween, "onRepeat");
        if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {
          ratio && _removeFromParent(tween, 1);
          if (!suppressEvents && !_reverting$1) {
            _callback$1(tween, ratio ? "onComplete" : "onReverseComplete", true);
            tween._prom && tween._prom();
          }
        }
      } else if (!tween._zTime) {
        tween._zTime = totalTime;
      }
    }, _findNextPauseTween = function _findNextPauseTween2(animation, prevTime, time) {
      var child;
      if (time > prevTime) {
        child = animation._first;
        while (child && child._start <= time) {
          if (child.data === "isPause" && child._start > prevTime) {
            return child;
          }
          child = child._next;
        }
      } else {
        child = animation._last;
        while (child && child._start >= time) {
          if (child.data === "isPause" && child._start < prevTime) {
            return child;
          }
          child = child._prev;
        }
      }
    }, _setDuration = function _setDuration2(animation, duration, skipUncache, leavePlayhead) {
      var repeat = animation._repeat, dur = _roundPrecise(duration) || 0, totalProgress = animation._tTime / animation._tDur;
      totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur);
      animation._dur = dur;
      animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _roundPrecise(dur * (repeat + 1) + animation._rDelay * repeat);
      totalProgress > 0 && !leavePlayhead && _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress);
      animation.parent && _setEnd(animation);
      skipUncache || _uncache(animation.parent, animation);
      return animation;
    }, _onUpdateTotalDuration = function _onUpdateTotalDuration2(animation) {
      return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur);
    }, _zeroPosition = {
      _start: 0,
      endTime: _emptyFunc,
      totalDuration: _emptyFunc
    }, _parsePosition$1 = function _parsePosition2(animation, position, percentAnimation) {
      var labels = animation.labels, recent = animation._recent || _zeroPosition, clippedDuration = animation.duration() >= _bigNum$1 ? recent.endTime(false) : animation._dur, i, offset, isPercent;
      if (_isString$1(position) && (isNaN(position) || position in labels)) {
        offset = position.charAt(0);
        isPercent = position.substr(-1) === "%";
        i = position.indexOf("=");
        if (offset === "<" || offset === ">") {
          i >= 0 && (position = position.replace(/=/, ""));
          return (offset === "<" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1);
        }
        if (i < 0) {
          position in labels || (labels[position] = clippedDuration);
          return labels[position];
        }
        offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1));
        if (isPercent && percentAnimation) {
          offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration();
        }
        return i > 1 ? _parsePosition2(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset;
      }
      return position == null ? clippedDuration : +position;
    }, _createTweenType = function _createTweenType2(type, params, timeline2) {
      var isLegacy = _isNumber$1(params[1]), varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1), vars = params[varsIndex], irVars, parent;
      isLegacy && (vars.duration = params[1]);
      vars.parent = timeline2;
      if (type) {
        irVars = vars;
        parent = timeline2;
        while (parent && !("immediateRender" in irVars)) {
          irVars = parent.vars.defaults || {};
          parent = _isNotFalse(parent.vars.inherit) && parent.parent;
        }
        vars.immediateRender = _isNotFalse(irVars.immediateRender);
        type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1];
      }
      return new Tween(params[0], vars, params[varsIndex + 1]);
    }, _conditionalReturn = function _conditionalReturn2(value, func) {
      return value || value === 0 ? func(value) : func;
    }, _clamp$1 = function _clamp2(min, max, value) {
      return value < min ? min : value > max ? max : value;
    }, getUnit = function getUnit2(value, v) {
      return !_isString$1(value) || !(v = _unitExp.exec(value)) ? "" : v[1];
    }, clamp = function clamp2(min, max, value) {
      return _conditionalReturn(value, function(v) {
        return _clamp$1(min, max, v);
      });
    }, _slice = [].slice, _isArrayLike = function _isArrayLike2(value, nonEmpty) {
      return value && _isObject$1(value) && "length" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject$1(value[0])) && !value.nodeType && value !== _win$3;
    }, _flatten = function _flatten2(ar, leaveStrings, accumulator) {
      if (accumulator === void 0) {
        accumulator = [];
      }
      return ar.forEach(function(value) {
        var _accumulator;
        return _isString$1(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);
      }) || accumulator;
    }, toArray = function toArray2(value, scope, leaveStrings) {
      return _context$3 && !scope && _context$3.selector ? _context$3.selector(value) : _isString$1(value) && !leaveStrings && (_coreInitted$3 || !_wake()) ? _slice.call((scope || _doc$3).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];
    }, selector = function selector2(value) {
      value = toArray(value)[0] || _warn("Invalid scope") || {};
      return function(v) {
        var el = value.current || value.nativeElement || value;
        return toArray(v, el.querySelectorAll ? el : el === value ? _warn("Invalid scope") || _doc$3.createElement("div") : value);
      };
    }, shuffle = function shuffle2(a) {
      return a.sort(function() {
        return 0.5 - Math.random();
      });
    }, distribute = function distribute2(v) {
      if (_isFunction$1(v)) {
        return v;
      }
      var vars = _isObject$1(v) ? v : {
        each: v
      }, ease = _parseEase(vars.ease), from = vars.from || 0, base = parseFloat(vars.base) || 0, cache = {}, isDecimal = from > 0 && from < 1, ratios = isNaN(from) || isDecimal, axis = vars.axis, ratioX = from, ratioY = from;
      if (_isString$1(from)) {
        ratioX = ratioY = {
          center: 0.5,
          edges: 0.5,
          end: 1
        }[from] || 0;
      } else if (!isDecimal && ratios) {
        ratioX = from[0];
        ratioY = from[1];
      }
      return function(i, target, a) {
        var l = (a || vars).length, distances = cache[l], originX, originY, x, y, d, j, max, min, wrapAt;
        if (!distances) {
          wrapAt = vars.grid === "auto" ? 0 : (vars.grid || [1, _bigNum$1])[1];
          if (!wrapAt) {
            max = -_bigNum$1;
            while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {
            }
            wrapAt < l && wrapAt--;
          }
          distances = cache[l] = [];
          originX = ratios ? Math.min(wrapAt, l) * ratioX - 0.5 : from % wrapAt;
          originY = wrapAt === _bigNum$1 ? 0 : ratios ? l * ratioY / wrapAt - 0.5 : from / wrapAt | 0;
          max = 0;
          min = _bigNum$1;
          for (j = 0; j < l; j++) {
            x = j % wrapAt - originX;
            y = originY - (j / wrapAt | 0);
            distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === "y" ? y : x);
            d > max && (max = d);
            d < min && (min = d);
          }
          from === "random" && shuffle(distances);
          distances.max = max - min;
          distances.min = min;
          distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === "y" ? l / wrapAt : wrapAt) || 0) * (from === "edges" ? -1 : 1);
          distances.b = l < 0 ? base - l : base;
          distances.u = getUnit(vars.amount || vars.each) || 0;
          ease = ease && l < 0 ? _invertEase(ease) : ease;
        }
        l = (distances[i] - distances.min) / distances.max || 0;
        return _roundPrecise(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u;
      };
    }, _roundModifier = function _roundModifier2(v) {
      var p = Math.pow(10, ((v + "").split(".")[1] || "").length);
      return function(raw) {
        var n = _roundPrecise(Math.round(parseFloat(raw) / v) * v * p);
        return (n - n % 1) / p + (_isNumber$1(raw) ? 0 : getUnit(raw));
      };
    }, snap = function snap2(snapTo, value) {
      var isArray = _isArray(snapTo), radius, is2D;
      if (!isArray && _isObject$1(snapTo)) {
        radius = isArray = snapTo.radius || _bigNum$1;
        if (snapTo.values) {
          snapTo = toArray(snapTo.values);
          if (is2D = !_isNumber$1(snapTo[0])) {
            radius *= radius;
          }
        } else {
          snapTo = _roundModifier(snapTo.increment);
        }
      }
      return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction$1(snapTo) ? function(raw) {
        is2D = snapTo(raw);
        return Math.abs(is2D - raw) <= radius ? is2D : raw;
      } : function(raw) {
        var x = parseFloat(is2D ? raw.x : raw), y = parseFloat(is2D ? raw.y : 0), min = _bigNum$1, closest = 0, i = snapTo.length, dx, dy;
        while (i--) {
          if (is2D) {
            dx = snapTo[i].x - x;
            dy = snapTo[i].y - y;
            dx = dx * dx + dy * dy;
          } else {
            dx = Math.abs(snapTo[i] - x);
          }
          if (dx < min) {
            min = dx;
            closest = i;
          }
        }
        closest = !radius || min <= radius ? snapTo[closest] : raw;
        return is2D || closest === raw || _isNumber$1(raw) ? closest : closest + getUnit(raw);
      });
    }, random = function random2(min, max, roundingIncrement, returnFunction) {
      return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function() {
        return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + "").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * 0.99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;
      });
    }, pipe = function pipe2() {
      for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {
        functions[_key] = arguments[_key];
      }
      return function(value) {
        return functions.reduce(function(v, f) {
          return f(v);
        }, value);
      };
    }, unitize = function unitize2(func, unit) {
      return function(value) {
        return func(parseFloat(value)) + (unit || getUnit(value));
      };
    }, normalize = function normalize2(min, max, value) {
      return mapRange(min, max, 0, 1, value);
    }, _wrapArray = function _wrapArray2(a, wrapper, value) {
      return _conditionalReturn(value, function(index) {
        return a[~~wrapper(index)];
      });
    }, wrap = function wrap2(min, max, value) {
      var range = max - min;
      return _isArray(min) ? _wrapArray(min, wrap2(0, min.length), max) : _conditionalReturn(value, function(value2) {
        return (range + (value2 - min) % range) % range + min;
      });
    }, wrapYoyo = function wrapYoyo2(min, max, value) {
      var range = max - min, total = range * 2;
      return _isArray(min) ? _wrapArray(min, wrapYoyo2(0, min.length - 1), max) : _conditionalReturn(value, function(value2) {
        value2 = (total + (value2 - min) % total) % total || 0;
        return min + (value2 > range ? total - value2 : value2);
      });
    }, _replaceRandom = function _replaceRandom2(value) {
      var prev = 0, s = "", i, nums, end, isArray;
      while (~(i = value.indexOf("random(", prev))) {
        end = value.indexOf(")", i);
        isArray = value.charAt(i + 7) === "[";
        nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);
        s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5);
        prev = end + 1;
      }
      return s + value.substr(prev, value.length - prev);
    }, mapRange = function mapRange2(inMin, inMax, outMin, outMax, value) {
      var inRange = inMax - inMin, outRange = outMax - outMin;
      return _conditionalReturn(value, function(value2) {
        return outMin + ((value2 - inMin) / inRange * outRange || 0);
      });
    }, interpolate = function interpolate2(start, end, progress, mutate) {
      var func = isNaN(start + end) ? 0 : function(p2) {
        return (1 - p2) * start + p2 * end;
      };
      if (!func) {
        var isString = _isString$1(start), master = {}, p, i, interpolators, l, il;
        progress === true && (mutate = 1) && (progress = null);
        if (isString) {
          start = {
            p: start
          };
          end = {
            p: end
          };
        } else if (_isArray(start) && !_isArray(end)) {
          interpolators = [];
          l = start.length;
          il = l - 2;
          for (i = 1; i < l; i++) {
            interpolators.push(interpolate2(start[i - 1], start[i]));
          }
          l--;
          func = function func2(p2) {
            p2 *= l;
            var i2 = Math.min(il, ~~p2);
            return interpolators[i2](p2 - i2);
          };
          progress = end;
        } else if (!mutate) {
          start = _merge(_isArray(start) ? [] : {}, start);
        }
        if (!interpolators) {
          for (p in end) {
            _addPropTween.call(master, start, p, "get", end[p]);
          }
          func = function func2(p2) {
            return _renderPropTweens(p2, master) || (isString ? start.p : start);
          };
        }
      }
      return _conditionalReturn(progress, func);
    }, _getLabelInDirection = function _getLabelInDirection2(timeline2, fromTime, backward) {
      var labels = timeline2.labels, min = _bigNum$1, p, distance, label;
      for (p in labels) {
        distance = labels[p] - fromTime;
        if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {
          label = p;
          min = distance;
        }
      }
      return label;
    }, _callback$1 = function _callback2(animation, type, executeLazyFirst) {
      var v = animation.vars, callback = v[type], prevContext = _context$3, context3 = animation._ctx, params, scope, result;
      if (!callback) {
        return;
      }
      params = v[type + "Params"];
      scope = v.callbackScope || animation;
      executeLazyFirst && _lazyTweens.length && _lazyRender();
      context3 && (_context$3 = context3);
      result = params ? callback.apply(scope, params) : callback.call(scope);
      _context$3 = prevContext;
      return result;
    }, _interrupt = function _interrupt2(animation) {
      _removeFromParent(animation);
      animation.scrollTrigger && animation.scrollTrigger.kill(!!_reverting$1);
      animation.progress() < 1 && _callback$1(animation, "onInterrupt");
      return animation;
    }, _quickTween, _registerPluginQueue = [], _createPlugin = function _createPlugin2(config3) {
      if (!config3) return;
      config3 = !config3.name && config3["default"] || config3;
      if (_windowExists$2() || config3.headless) {
        var name = config3.name, isFunc = _isFunction$1(config3), Plugin = name && !isFunc && config3.init ? function() {
          this._props = [];
        } : config3, instanceDefaults = {
          init: _emptyFunc,
          render: _renderPropTweens,
          add: _addPropTween,
          kill: _killPropTweensOf,
          modifier: _addPluginModifier,
          rawVars: 0
        }, statics = {
          targetTest: 0,
          get: 0,
          getSetter: _getSetter,
          aliases: {},
          register: 0
        };
        _wake();
        if (config3 !== Plugin) {
          if (_plugins[name]) {
            return;
          }
          _setDefaults$1(Plugin, _setDefaults$1(_copyExcluding(config3, instanceDefaults), statics));
          _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config3, statics)));
          _plugins[Plugin.prop = name] = Plugin;
          if (config3.targetTest) {
            _harnessPlugins.push(Plugin);
            _reservedProps[name] = 1;
          }
          name = (name === "css" ? "CSS" : name.charAt(0).toUpperCase() + name.substr(1)) + "Plugin";
        }
        _addGlobal(name, Plugin);
        config3.register && config3.register(gsap$3, Plugin, PropTween);
      } else {
        _registerPluginQueue.push(config3);
      }
    }, _255 = 255, _colorLookup = {
      aqua: [0, _255, _255],
      lime: [0, _255, 0],
      silver: [192, 192, 192],
      black: [0, 0, 0],
      maroon: [128, 0, 0],
      teal: [0, 128, 128],
      blue: [0, 0, _255],
      navy: [0, 0, 128],
      white: [_255, _255, _255],
      olive: [128, 128, 0],
      yellow: [_255, _255, 0],
      orange: [_255, 165, 0],
      gray: [128, 128, 128],
      purple: [128, 0, 128],
      green: [0, 128, 0],
      red: [_255, 0, 0],
      pink: [_255, 192, 203],
      cyan: [0, _255, _255],
      transparent: [_255, _255, _255, 0]
    }, _hue = function _hue2(h, m1, m2) {
      h += h < 0 ? 1 : h > 1 ? -1 : 0;
      return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < 0.5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + 0.5 | 0;
    }, splitColor = function splitColor2(v, toHSL, forceAlpha) {
      var a = !v ? _colorLookup.black : _isNumber$1(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0, r, g, b, h, s, l, max, min, d, wasHSL;
      if (!a) {
        if (v.substr(-1) === ",") {
          v = v.substr(0, v.length - 1);
        }
        if (_colorLookup[v]) {
          a = _colorLookup[v];
        } else if (v.charAt(0) === "#") {
          if (v.length < 6) {
            r = v.charAt(1);
            g = v.charAt(2);
            b = v.charAt(3);
            v = "#" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : "");
          }
          if (v.length === 9) {
            a = parseInt(v.substr(1, 6), 16);
            return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255];
          }
          v = parseInt(v.substr(1), 16);
          a = [v >> 16, v >> 8 & _255, v & _255];
        } else if (v.substr(0, 3) === "hsl") {
          a = wasHSL = v.match(_strictNumExp);
          if (!toHSL) {
            h = +a[0] % 360 / 360;
            s = +a[1] / 100;
            l = +a[2] / 100;
            g = l <= 0.5 ? l * (s + 1) : l + s - l * s;
            r = l * 2 - g;
            a.length > 3 && (a[3] *= 1);
            a[0] = _hue(h + 1 / 3, r, g);
            a[1] = _hue(h, r, g);
            a[2] = _hue(h - 1 / 3, r, g);
          } else if (~v.indexOf("=")) {
            a = v.match(_numExp);
            forceAlpha && a.length < 4 && (a[3] = 1);
            return a;
          }
        } else {
          a = v.match(_strictNumExp) || _colorLookup.transparent;
        }
        a = a.map(Number);
      }
      if (toHSL && !wasHSL) {
        r = a[0] / _255;
        g = a[1] / _255;
        b = a[2] / _255;
        max = Math.max(r, g, b);
        min = Math.min(r, g, b);
        l = (max + min) / 2;
        if (max === min) {
          h = s = 0;
        } else {
          d = max - min;
          s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
          h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;
          h *= 60;
        }
        a[0] = ~~(h + 0.5);
        a[1] = ~~(s * 100 + 0.5);
        a[2] = ~~(l * 100 + 0.5);
      }
      forceAlpha && a.length < 4 && (a[3] = 1);
      return a;
    }, _colorOrderData = function _colorOrderData2(v) {
      var values = [], c = [], i = -1;
      v.split(_colorExp).forEach(function(v22) {
        var a = v22.match(_numWithUnitExp) || [];
        values.push.apply(values, a);
        c.push(i += a.length + 1);
      });
      values.c = c;
      return values;
    }, _formatColors = function _formatColors2(s, toHSL, orderMatchData) {
      var result = "", colors = (s + result).match(_colorExp), type = toHSL ? "hsla(" : "rgba(", i = 0, c, shell, d, l;
      if (!colors) {
        return s;
      }
      colors = colors.map(function(color) {
        return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + "," + color[1] + "%," + color[2] + "%," + color[3] : color.join(",")) + ")";
      });
      if (orderMatchData) {
        d = _colorOrderData(s);
        c = orderMatchData.c;
        if (c.join(result) !== d.c.join(result)) {
          shell = s.replace(_colorExp, "1").split(_numWithUnitExp);
          l = shell.length - 1;
          for (; i < l; i++) {
            result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + "0,0,0,0)" : (d.length ? d : colors.length ? colors : orderMatchData).shift());
          }
        }
      }
      if (!shell) {
        shell = s.split(_colorExp);
        l = shell.length - 1;
        for (; i < l; i++) {
          result += shell[i] + colors[i];
        }
      }
      return result + shell[l];
    }, _colorExp = function() {
      var s = "(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3,4}){1,2}\\b", p;
      for (p in _colorLookup) {
        s += "|" + p + "\\b";
      }
      return new RegExp(s + ")", "gi");
    }(), _hslExp = /hsl[a]?\(/, _colorStringFilter = function _colorStringFilter2(a) {
      var combined = a.join(" "), toHSL;
      _colorExp.lastIndex = 0;
      if (_colorExp.test(combined)) {
        toHSL = _hslExp.test(combined);
        a[1] = _formatColors(a[1], toHSL);
        a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1]));
        return true;
      }
    }, _tickerActive, _ticker = function() {
      var _getTime2 = Date.now, _lagThreshold = 500, _adjustedLag = 33, _startTime = _getTime2(), _lastUpdate = _startTime, _gap = 1e3 / 240, _nextTime = _gap, _listeners2 = [], _id, _req, _raf, _self, _delta, _i2, _tick = function _tick2(v) {
        var elapsed = _getTime2() - _lastUpdate, manual = v === true, overlap, dispatch, time, frame;
        (elapsed > _lagThreshold || elapsed < 0) && (_startTime += elapsed - _adjustedLag);
        _lastUpdate += elapsed;
        time = _lastUpdate - _startTime;
        overlap = time - _nextTime;
        if (overlap > 0 || manual) {
          frame = ++_self.frame;
          _delta = time - _self.time * 1e3;
          _self.time = time = time / 1e3;
          _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap);
          dispatch = 1;
        }
        manual || (_id = _req(_tick2));
        if (dispatch) {
          for (_i2 = 0; _i2 < _listeners2.length; _i2++) {
            _listeners2[_i2](time, _delta, frame, v);
          }
        }
      };
      _self = {
        time: 0,
        frame: 0,
        tick: function tick() {
          _tick(true);
        },
        deltaRatio: function deltaRatio(fps) {
          return _delta / (1e3 / (fps || 60));
        },
        wake: function wake() {
          if (_coreReady) {
            if (!_coreInitted$3 && _windowExists$2()) {
              _win$3 = _coreInitted$3 = window;
              _doc$3 = _win$3.document || {};
              _globals.gsap = gsap$3;
              (_win$3.gsapVersions || (_win$3.gsapVersions = [])).push(gsap$3.version);
              _install(_installScope || _win$3.GreenSockGlobals || !_win$3.gsap && _win$3 || {});
              _registerPluginQueue.forEach(_createPlugin);
            }
            _raf = typeof requestAnimationFrame !== "undefined" && requestAnimationFrame;
            _id && _self.sleep();
            _req = _raf || function(f) {
              return setTimeout(f, _nextTime - _self.time * 1e3 + 1 | 0);
            };
            _tickerActive = 1;
            _tick(2);
          }
        },
        sleep: function sleep() {
          (_raf ? cancelAnimationFrame : clearTimeout)(_id);
          _tickerActive = 0;
          _req = _emptyFunc;
        },
        lagSmoothing: function lagSmoothing(threshold, adjustedLag) {
          _lagThreshold = threshold || Infinity;
          _adjustedLag = Math.min(adjustedLag || 33, _lagThreshold);
        },
        fps: function fps(_fps) {
          _gap = 1e3 / (_fps || 240);
          _nextTime = _self.time * 1e3 + _gap;
        },
        add: function add(callback, once, prioritize) {
          var func = once ? function(t, d, f, v) {
            callback(t, d, f, v);
            _self.remove(func);
          } : callback;
          _self.remove(callback);
          _listeners2[prioritize ? "unshift" : "push"](func);
          _wake();
          return func;
        },
        remove: function remove(callback, i) {
          ~(i = _listeners2.indexOf(callback)) && _listeners2.splice(i, 1) && _i2 >= i && _i2--;
        },
        _listeners: _listeners2
      };
      return _self;
    }(), _wake = function _wake2() {
      return !_tickerActive && _ticker.wake();
    }, _easeMap = {}, _customEaseExp = /^[\d.\-M][\d.\-,\s]/, _quotesExp = /["']/g, _parseObjectInString = function _parseObjectInString2(value) {
      var obj = {}, split = value.substr(1, value.length - 3).split(":"), key = split[0], i = 1, l = split.length, index, val, parsedVal;
      for (; i < l; i++) {
        val = split[i];
        index = i !== l - 1 ? val.lastIndexOf(",") : val.length;
        parsedVal = val.substr(0, index);
        obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, "").trim() : +parsedVal;
        key = val.substr(index + 1).trim();
      }
      return obj;
    }, _valueInParentheses = function _valueInParentheses2(value) {
      var open = value.indexOf("(") + 1, close = value.indexOf(")"), nested = value.indexOf("(", open);
      return value.substring(open, ~nested && nested < close ? value.indexOf(")", close + 1) : close);
    }, _configEaseFromString = function _configEaseFromString2(name) {
      var split = (name + "").split("("), ease = _easeMap[split[0]];
      return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf("{") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(",").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE("", name) : ease;
    }, _invertEase = function _invertEase2(ease) {
      return function(p) {
        return 1 - ease(1 - p);
      };
    }, _propagateYoyoEase = function _propagateYoyoEase2(timeline2, isYoyo) {
      var child = timeline2._first, ease;
      while (child) {
        if (child instanceof Timeline) {
          _propagateYoyoEase2(child, isYoyo);
        } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) {
          if (child.timeline) {
            _propagateYoyoEase2(child.timeline, isYoyo);
          } else {
            ease = child._ease;
            child._ease = child._yEase;
            child._yEase = ease;
            child._yoyo = isYoyo;
          }
        }
        child = child._next;
      }
    }, _parseEase = function _parseEase2(ease, defaultEase) {
      return !ease ? defaultEase : (_isFunction$1(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;
    }, _insertEase = function _insertEase2(names, easeIn, easeOut, easeInOut) {
      if (easeOut === void 0) {
        easeOut = function easeOut2(p) {
          return 1 - easeIn(1 - p);
        };
      }
      if (easeInOut === void 0) {
        easeInOut = function easeInOut2(p) {
          return p < 0.5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;
        };
      }
      var ease = {
        easeIn,
        easeOut,
        easeInOut
      }, lowercaseName;
      _forEachName(names, function(name) {
        _easeMap[name] = _globals[name] = ease;
        _easeMap[lowercaseName = name.toLowerCase()] = easeOut;
        for (var p in ease) {
          _easeMap[lowercaseName + (p === "easeIn" ? ".in" : p === "easeOut" ? ".out" : ".inOut")] = _easeMap[name + "." + p] = ease[p];
        }
      });
      return ease;
    }, _easeInOutFromOut = function _easeInOutFromOut2(easeOut) {
      return function(p) {
        return p < 0.5 ? (1 - easeOut(1 - p * 2)) / 2 : 0.5 + easeOut((p - 0.5) * 2) / 2;
      };
    }, _configElastic = function _configElastic2(type, amplitude, period) {
      var p1 = amplitude >= 1 ? amplitude : 1, p2 = (period || (type ? 0.3 : 0.45)) / (amplitude < 1 ? amplitude : 1), p3 = p2 / _2PI * (Math.asin(1 / p1) || 0), easeOut = function easeOut2(p) {
        return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;
      }, ease = type === "out" ? easeOut : type === "in" ? function(p) {
        return 1 - easeOut(1 - p);
      } : _easeInOutFromOut(easeOut);
      p2 = _2PI / p2;
      ease.config = function(amplitude2, period2) {
        return _configElastic2(type, amplitude2, period2);
      };
      return ease;
    }, _configBack = function _configBack2(type, overshoot) {
      if (overshoot === void 0) {
        overshoot = 1.70158;
      }
      var easeOut = function easeOut2(p) {
        return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0;
      }, ease = type === "out" ? easeOut : type === "in" ? function(p) {
        return 1 - easeOut(1 - p);
      } : _easeInOutFromOut(easeOut);
      ease.config = function(overshoot2) {
        return _configBack2(type, overshoot2);
      };
      return ease;
    };
    _forEachName("Linear,Quad,Cubic,Quart,Quint,Strong", function(name, i) {
      var power = i < 5 ? i + 1 : i;
      _insertEase(name + ",Power" + (power - 1), i ? function(p) {
        return Math.pow(p, power);
      } : function(p) {
        return p;
      }, function(p) {
        return 1 - Math.pow(1 - p, power);
      }, function(p) {
        return p < 0.5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;
      });
    });
    _easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;
    _insertEase("Elastic", _configElastic("in"), _configElastic("out"), _configElastic());
    (function(n, c) {
      var n1 = 1 / c, n2 = 2 * n1, n3 = 2.5 * n1, easeOut = function easeOut2(p) {
        return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + 0.75 : p < n3 ? n * (p -= 2.25 / c) * p + 0.9375 : n * Math.pow(p - 2.625 / c, 2) + 0.984375;
      };
      _insertEase("Bounce", function(p) {
        return 1 - easeOut(1 - p);
      }, easeOut);
    })(7.5625, 2.75);
    _insertEase("Expo", function(p) {
      return Math.pow(2, 10 * (p - 1)) * p + p * p * p * p * p * p * (1 - p);
    });
    _insertEase("Circ", function(p) {
      return -(_sqrt(1 - p * p) - 1);
    });
    _insertEase("Sine", function(p) {
      return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1;
    });
    _insertEase("Back", _configBack("in"), _configBack("out"), _configBack());
    _easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {
      config: function config(steps, immediateStart) {
        if (steps === void 0) {
          steps = 1;
        }
        var p1 = 1 / steps, p2 = steps + (immediateStart ? 0 : 1), p3 = immediateStart ? 1 : 0, max = 1 - _tinyNum;
        return function(p) {
          return ((p2 * _clamp$1(0, max, p) | 0) + p3) * p1;
        };
      }
    };
    _defaults$1.ease = _easeMap["quad.out"];
    _forEachName("onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt", function(name) {
      return _callbackNames += name + "," + name + "Params,";
    });
    var GSCache = function GSCache2(target, harness) {
      this.id = _gsID++;
      target._gsap = this;
      this.target = target;
      this.harness = harness;
      this.get = harness ? harness.get : _getProperty;
      this.set = harness ? harness.getSetter : _getSetter;
    };
    var Animation = /* @__PURE__ */ function() {
      function Animation2(vars) {
        this.vars = vars;
        this._delay = +vars.delay || 0;
        if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) {
          this._rDelay = vars.repeatDelay || 0;
          this._yoyo = !!vars.yoyo || !!vars.yoyoEase;
        }
        this._ts = 1;
        _setDuration(this, +vars.duration, 1, 1);
        this.data = vars.data;
        if (_context$3) {
          this._ctx = _context$3;
          _context$3.data.push(this);
        }
        _tickerActive || _ticker.wake();
      }
      var _proto = Animation2.prototype;
      _proto.delay = function delay(value) {
        if (value || value === 0) {
          this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay);
          this._delay = value;
          return this;
        }
        return this._delay;
      };
      _proto.duration = function duration(value) {
        return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur;
      };
      _proto.totalDuration = function totalDuration(value) {
        if (!arguments.length) {
          return this._tDur;
        }
        this._dirty = 0;
        return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1));
      };
      _proto.totalTime = function totalTime(_totalTime, suppressEvents) {
        _wake();
        if (!arguments.length) {
          return this._tTime;
        }
        var parent = this._dp;
        if (parent && parent.smoothChildTiming && this._ts) {
          _alignPlayhead(this, _totalTime);
          !parent._dp || parent.parent || _postAddChecks(parent, this);
          while (parent && parent.parent) {
            if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {
              parent.totalTime(parent._tTime, true);
            }
            parent = parent.parent;
          }
          if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) {
            _addToTimeline(this._dp, this, this._start - this._delay);
          }
        }
        if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) {
          this._ts || (this._pTime = _totalTime);
          _lazySafeRender(this, _totalTime, suppressEvents);
        }
        return this;
      };
      _proto.time = function time(value, suppressEvents) {
        return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % (this._dur + this._rDelay) || (value ? this._dur : 0), suppressEvents) : this._time;
      };
      _proto.totalProgress = function totalProgress(value, suppressEvents) {
        return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.rawTime() >= 0 && this._initted ? 1 : 0;
      };
      _proto.progress = function progress(value, suppressEvents) {
        return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.rawTime() > 0 ? 1 : 0;
      };
      _proto.iteration = function iteration(value, suppressEvents) {
        var cycleDuration = this.duration() + this._rDelay;
        return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;
      };
      _proto.timeScale = function timeScale(value, suppressEvents) {
        if (!arguments.length) {
          return this._rts === -_tinyNum ? 0 : this._rts;
        }
        if (this._rts === value) {
          return this;
        }
        var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime;
        this._rts = +value || 0;
        this._ts = this._ps || value === -_tinyNum ? 0 : this._rts;
        this.totalTime(_clamp$1(-Math.abs(this._delay), this.totalDuration(), tTime), suppressEvents !== false);
        _setEnd(this);
        return _recacheAncestors(this);
      };
      _proto.paused = function paused(value) {
        if (!arguments.length) {
          return this._ps;
        }
        if (this._ps !== value) {
          this._ps = value;
          if (value) {
            this._pTime = this._tTime || Math.max(-this._delay, this.rawTime());
            this._ts = this._act = 0;
          } else {
            _wake();
            this._ts = this._rts;
            this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && Math.abs(this._zTime) !== _tinyNum && (this._tTime -= _tinyNum));
          }
        }
        return this;
      };
      _proto.startTime = function startTime(value) {
        if (arguments.length) {
          this._start = value;
          var parent = this.parent || this._dp;
          parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay);
          return this;
        }
        return this._start;
      };
      _proto.endTime = function endTime(includeRepeats) {
        return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts || 1);
      };
      _proto.rawTime = function rawTime(wrapRepeats) {
        var parent = this.parent || this._dp;
        return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);
      };
      _proto.revert = function revert(config3) {
        if (config3 === void 0) {
          config3 = _revertConfig;
        }
        var prevIsReverting = _reverting$1;
        _reverting$1 = config3;
        if (_isRevertWorthy(this)) {
          this.timeline && this.timeline.revert(config3);
          this.totalTime(-0.01, config3.suppressEvents);
        }
        this.data !== "nested" && config3.kill !== false && this.kill();
        _reverting$1 = prevIsReverting;
        return this;
      };
      _proto.globalTime = function globalTime(rawTime) {
        var animation = this, time = arguments.length ? rawTime : animation.rawTime();
        while (animation) {
          time = animation._start + time / (Math.abs(animation._ts) || 1);
          animation = animation._dp;
        }
        return !this.parent && this._sat ? this._sat.globalTime(rawTime) : time;
      };
      _proto.repeat = function repeat(value) {
        if (arguments.length) {
          this._repeat = value === Infinity ? -2 : value;
          return _onUpdateTotalDuration(this);
        }
        return this._repeat === -2 ? Infinity : this._repeat;
      };
      _proto.repeatDelay = function repeatDelay(value) {
        if (arguments.length) {
          var time = this._time;
          this._rDelay = value;
          _onUpdateTotalDuration(this);
          return time ? this.time(time) : this;
        }
        return this._rDelay;
      };
      _proto.yoyo = function yoyo(value) {
        if (arguments.length) {
          this._yoyo = value;
          return this;
        }
        return this._yoyo;
      };
      _proto.seek = function seek(position, suppressEvents) {
        return this.totalTime(_parsePosition$1(this, position), _isNotFalse(suppressEvents));
      };
      _proto.restart = function restart(includeDelay, suppressEvents) {
        this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));
        this._dur || (this._zTime = -_tinyNum);
        return this;
      };
      _proto.play = function play(from, suppressEvents) {
        from != null && this.seek(from, suppressEvents);
        return this.reversed(false).paused(false);
      };
      _proto.reverse = function reverse(from, suppressEvents) {
        from != null && this.seek(from || this.totalDuration(), suppressEvents);
        return this.reversed(true).paused(false);
      };
      _proto.pause = function pause(atTime, suppressEvents) {
        atTime != null && this.seek(atTime, suppressEvents);
        return this.paused(true);
      };
      _proto.resume = function resume() {
        return this.paused(false);
      };
      _proto.reversed = function reversed(value) {
        if (arguments.length) {
          !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0));
          return this;
        }
        return this._rts < 0;
      };
      _proto.invalidate = function invalidate() {
        this._initted = this._act = 0;
        this._zTime = -_tinyNum;
        return this;
      };
      _proto.isActive = function isActive() {
        var parent = this.parent || this._dp, start = this._start, rawTime;
        return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);
      };
      _proto.eventCallback = function eventCallback(type, callback, params) {
        var vars = this.vars;
        if (arguments.length > 1) {
          if (!callback) {
            delete vars[type];
          } else {
            vars[type] = callback;
            params && (vars[type + "Params"] = params);
            type === "onUpdate" && (this._onUpdate = callback);
          }
          return this;
        }
        return vars[type];
      };
      _proto.then = function then(onFulfilled) {
        var self = this;
        return new Promise(function(resolve) {
          var f = _isFunction$1(onFulfilled) ? onFulfilled : _passThrough$1, _resolve = function _resolve2() {
            var _then = self.then;
            self.then = null;
            _isFunction$1(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then);
            resolve(f);
            self.then = _then;
          };
          if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {
            _resolve();
          } else {
            self._prom = _resolve;
          }
        });
      };
      _proto.kill = function kill() {
        _interrupt(this);
      };
      return Animation2;
    }();
    _setDefaults$1(Animation.prototype, {
      _time: 0,
      _start: 0,
      _end: 0,
      _tTime: 0,
      _tDur: 0,
      _dirty: 0,
      _repeat: 0,
      _yoyo: false,
      parent: null,
      _initted: false,
      _rDelay: 0,
      _ts: 1,
      _dp: 0,
      ratio: 0,
      _zTime: -_tinyNum,
      _prom: 0,
      _ps: false,
      _rts: 1
    });
    var Timeline = /* @__PURE__ */ function(_Animation) {
      _inheritsLoose(Timeline2, _Animation);
      function Timeline2(vars, position) {
        var _this;
        if (vars === void 0) {
          vars = {};
        }
        _this = _Animation.call(this, vars) || this;
        _this.labels = {};
        _this.smoothChildTiming = !!vars.smoothChildTiming;
        _this.autoRemoveChildren = !!vars.autoRemoveChildren;
        _this._sort = _isNotFalse(vars.sortChildren);
        _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position);
        vars.reversed && _this.reverse();
        vars.paused && _this.paused(true);
        vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger);
        return _this;
      }
      var _proto2 = Timeline2.prototype;
      _proto2.to = function to(targets, vars, position) {
        _createTweenType(0, arguments, this);
        return this;
      };
      _proto2.from = function from(targets, vars, position) {
        _createTweenType(1, arguments, this);
        return this;
      };
      _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {
        _createTweenType(2, arguments, this);
        return this;
      };
      _proto2.set = function set(targets, vars, position) {
        vars.duration = 0;
        vars.parent = this;
        _inheritDefaults(vars).repeatDelay || (vars.repeat = 0);
        vars.immediateRender = !!vars.immediateRender;
        new Tween(targets, vars, _parsePosition$1(this, position), 1);
        return this;
      };
      _proto2.call = function call(callback, params, position) {
        return _addToTimeline(this, Tween.delayedCall(0, callback, params), position);
      };
      _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {
        vars.duration = duration;
        vars.stagger = vars.stagger || stagger;
        vars.onComplete = onCompleteAll;
        vars.onCompleteParams = onCompleteAllParams;
        vars.parent = this;
        new Tween(targets, vars, _parsePosition$1(this, position));
        return this;
      };
      _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {
        vars.runBackwards = 1;
        _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender);
        return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);
      };
      _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {
        toVars.startAt = fromVars;
        _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender);
        return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);
      };
      _proto2.render = function render22(totalTime, suppressEvents, force) {
        var prevTime = this._time, tDur = this._dirty ? this.totalDuration() : this._tDur, dur = this._dur, tTime = totalTime <= 0 ? 0 : _roundPrecise(totalTime), crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur), time, child, next, iteration, cycleDuration, prevPaused, pauseTween, timeScale, prevStart, prevIteration, yoyo, isYoyo;
        this !== _globalTimeline && tTime > tDur && totalTime >= 0 && (tTime = tDur);
        if (tTime !== this._tTime || force || crossingStart) {
          if (prevTime !== this._time && dur) {
            tTime += this._time - prevTime;
            totalTime += this._time - prevTime;
          }
          time = tTime;
          prevStart = this._start;
          timeScale = this._ts;
          prevPaused = !timeScale;
          if (crossingStart) {
            dur || (prevTime = this._zTime);
            (totalTime || !suppressEvents) && (this._zTime = totalTime);
          }
          if (this._repeat) {
            yoyo = this._yoyo;
            cycleDuration = dur + this._rDelay;
            if (this._repeat < -1 && totalTime < 0) {
              return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);
            }
            time = _roundPrecise(tTime % cycleDuration);
            if (tTime === tDur) {
              iteration = this._repeat;
              time = dur;
            } else {
              prevIteration = _roundPrecise(tTime / cycleDuration);
              iteration = ~~prevIteration;
              if (iteration && iteration === prevIteration) {
                time = dur;
                iteration--;
              }
              time > dur && (time = dur);
            }
            prevIteration = _animationCycle(this._tTime, cycleDuration);
            !prevTime && this._tTime && prevIteration !== iteration && this._tTime - prevIteration * cycleDuration - this._dur <= 0 && (prevIteration = iteration);
            if (yoyo && iteration & 1) {
              time = dur - time;
              isYoyo = 1;
            }
            if (iteration !== prevIteration && !this._lock) {
              var rewinding = yoyo && prevIteration & 1, doesWrap = rewinding === (yoyo && iteration & 1);
              iteration < prevIteration && (rewinding = !rewinding);
              prevTime = rewinding ? 0 : tTime % dur ? dur : tTime;
              this._lock = 1;
              this.render(prevTime || (isYoyo ? 0 : _roundPrecise(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0;
              this._tTime = tTime;
              !suppressEvents && this.parent && _callback$1(this, "onRepeat");
              this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1);
              if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) {
                return this;
              }
              dur = this._dur;
              tDur = this._tDur;
              if (doesWrap) {
                this._lock = 2;
                prevTime = rewinding ? dur : -1e-4;
                this.render(prevTime, true);
                this.vars.repeatRefresh && !isYoyo && this.invalidate();
              }
              this._lock = 0;
              if (!this._ts && !prevPaused) {
                return this;
              }
              _propagateYoyoEase(this, isYoyo);
            }
          }
          if (this._hasPause && !this._forcing && this._lock < 2) {
            pauseTween = _findNextPauseTween(this, _roundPrecise(prevTime), _roundPrecise(time));
            if (pauseTween) {
              tTime -= time - (time = pauseTween._start);
            }
          }
          this._tTime = tTime;
          this._time = time;
          this._act = !timeScale;
          if (!this._initted) {
            this._onUpdate = this.vars.onUpdate;
            this._initted = 1;
            this._zTime = totalTime;
            prevTime = 0;
          }
          if (!prevTime && tTime && !suppressEvents && !prevIteration) {
            _callback$1(this, "onStart");
            if (this._tTime !== tTime) {
              return this;
            }
          }
          if (time >= prevTime && totalTime >= 0) {
            child = this._first;
            while (child) {
              next = child._next;
              if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {
                if (child.parent !== this) {
                  return this.render(totalTime, suppressEvents, force);
                }
                child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);
                if (time !== this._time || !this._ts && !prevPaused) {
                  pauseTween = 0;
                  next && (tTime += this._zTime = -_tinyNum);
                  break;
                }
              }
              child = next;
            }
          } else {
            child = this._last;
            var adjustedTime = totalTime < 0 ? totalTime : time;
            while (child) {
              next = child._prev;
              if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {
                if (child.parent !== this) {
                  return this.render(totalTime, suppressEvents, force);
                }
                child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force || _reverting$1 && _isRevertWorthy(child));
                if (time !== this._time || !this._ts && !prevPaused) {
                  pauseTween = 0;
                  next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum);
                  break;
                }
              }
              child = next;
            }
          }
          if (pauseTween && !suppressEvents) {
            this.pause();
            pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;
            if (this._ts) {
              this._start = prevStart;
              _setEnd(this);
              return this.render(totalTime, suppressEvents, force);
            }
          }
          this._onUpdate && !suppressEvents && _callback$1(this, "onUpdate", true);
          if (tTime === tDur && this._tTime >= this.totalDuration() || !tTime && prevTime) {
            if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) {
              if (!this._lock) {
                (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1);
                if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) {
                  _callback$1(this, tTime === tDur && totalTime >= 0 ? "onComplete" : "onReverseComplete", true);
                  this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();
                }
              }
            }
          }
        }
        return this;
      };
      _proto2.add = function add(child, position) {
        var _this2 = this;
        _isNumber$1(position) || (position = _parsePosition$1(this, position, child));
        if (!(child instanceof Animation)) {
          if (_isArray(child)) {
            child.forEach(function(obj) {
              return _this2.add(obj, position);
            });
            return this;
          }
          if (_isString$1(child)) {
            return this.addLabel(child, position);
          }
          if (_isFunction$1(child)) {
            child = Tween.delayedCall(0, child);
          } else {
            return this;
          }
        }
        return this !== child ? _addToTimeline(this, child, position) : this;
      };
      _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {
        if (nested === void 0) {
          nested = true;
        }
        if (tweens === void 0) {
          tweens = true;
        }
        if (timelines === void 0) {
          timelines = true;
        }
        if (ignoreBeforeTime === void 0) {
          ignoreBeforeTime = -_bigNum$1;
        }
        var a = [], child = this._first;
        while (child) {
          if (child._start >= ignoreBeforeTime) {
            if (child instanceof Tween) {
              tweens && a.push(child);
            } else {
              timelines && a.push(child);
              nested && a.push.apply(a, child.getChildren(true, tweens, timelines));
            }
          }
          child = child._next;
        }
        return a;
      };
      _proto2.getById = function getById2(id) {
        var animations = this.getChildren(1, 1, 1), i = animations.length;
        while (i--) {
          if (animations[i].vars.id === id) {
            return animations[i];
          }
        }
      };
      _proto2.remove = function remove(child) {
        if (_isString$1(child)) {
          return this.removeLabel(child);
        }
        if (_isFunction$1(child)) {
          return this.killTweensOf(child);
        }
        child.parent === this && _removeLinkedListItem(this, child);
        if (child === this._recent) {
          this._recent = this._last;
        }
        return _uncache(this);
      };
      _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {
        if (!arguments.length) {
          return this._tTime;
        }
        this._forcing = 1;
        if (!this._dp && this._ts) {
          this._start = _roundPrecise(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts));
        }
        _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);
        this._forcing = 0;
        return this;
      };
      _proto2.addLabel = function addLabel(label, position) {
        this.labels[label] = _parsePosition$1(this, position);
        return this;
      };
      _proto2.removeLabel = function removeLabel(label) {
        delete this.labels[label];
        return this;
      };
      _proto2.addPause = function addPause(position, callback, params) {
        var t = Tween.delayedCall(0, callback || _emptyFunc, params);
        t.data = "isPause";
        this._hasPause = 1;
        return _addToTimeline(this, t, _parsePosition$1(this, position));
      };
      _proto2.removePause = function removePause(position) {
        var child = this._first;
        position = _parsePosition$1(this, position);
        while (child) {
          if (child._start === position && child.data === "isPause") {
            _removeFromParent(child);
          }
          child = child._next;
        }
      };
      _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {
        var tweens = this.getTweensOf(targets, onlyActive), i = tweens.length;
        while (i--) {
          _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);
        }
        return this;
      };
      _proto2.getTweensOf = function getTweensOf2(targets, onlyActive) {
        var a = [], parsedTargets = toArray(targets), child = this._first, isGlobalTime = _isNumber$1(onlyActive), children;
        while (child) {
          if (child instanceof Tween) {
            if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) {
              a.push(child);
            }
          } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {
            a.push.apply(a, children);
          }
          child = child._next;
        }
        return a;
      };
      _proto2.tweenTo = function tweenTo(position, vars) {
        vars = vars || {};
        var tl = this, endTime = _parsePosition$1(tl, position), _vars = vars, startAt = _vars.startAt, _onStart = _vars.onStart, onStartParams = _vars.onStartParams, immediateRender = _vars.immediateRender, initted, tween = Tween.to(tl, _setDefaults$1({
          ease: vars.ease || "none",
          lazy: false,
          immediateRender: false,
          time: endTime,
          overwrite: "auto",
          duration: vars.duration || Math.abs((endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum,
          onStart: function onStart() {
            tl.pause();
            if (!initted) {
              var duration = vars.duration || Math.abs((endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale());
              tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true);
              initted = 1;
            }
            _onStart && _onStart.apply(tween, onStartParams || []);
          }
        }, vars));
        return immediateRender ? tween.render(0) : tween;
      };
      _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {
        return this.tweenTo(toPosition, _setDefaults$1({
          startAt: {
            time: _parsePosition$1(this, fromPosition)
          }
        }, vars));
      };
      _proto2.recent = function recent() {
        return this._recent;
      };
      _proto2.nextLabel = function nextLabel(afterTime) {
        if (afterTime === void 0) {
          afterTime = this._time;
        }
        return _getLabelInDirection(this, _parsePosition$1(this, afterTime));
      };
      _proto2.previousLabel = function previousLabel(beforeTime) {
        if (beforeTime === void 0) {
          beforeTime = this._time;
        }
        return _getLabelInDirection(this, _parsePosition$1(this, beforeTime), 1);
      };
      _proto2.currentLabel = function currentLabel(value) {
        return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);
      };
      _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {
        if (ignoreBeforeTime === void 0) {
          ignoreBeforeTime = 0;
        }
        var child = this._first, labels = this.labels, p;
        while (child) {
          if (child._start >= ignoreBeforeTime) {
            child._start += amount;
            child._end += amount;
          }
          child = child._next;
        }
        if (adjustLabels) {
          for (p in labels) {
            if (labels[p] >= ignoreBeforeTime) {
              labels[p] += amount;
            }
          }
        }
        return _uncache(this);
      };
      _proto2.invalidate = function invalidate(soft) {
        var child = this._first;
        this._lock = 0;
        while (child) {
          child.invalidate(soft);
          child = child._next;
        }
        return _Animation.prototype.invalidate.call(this, soft);
      };
      _proto2.clear = function clear(includeLabels) {
        if (includeLabels === void 0) {
          includeLabels = true;
        }
        var child = this._first, next;
        while (child) {
          next = child._next;
          this.remove(child);
          child = next;
        }
        this._dp && (this._time = this._tTime = this._pTime = 0);
        includeLabels && (this.labels = {});
        return _uncache(this);
      };
      _proto2.totalDuration = function totalDuration(value) {
        var max = 0, self = this, child = self._last, prevStart = _bigNum$1, prev, start, parent;
        if (arguments.length) {
          return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value));
        }
        if (self._dirty) {
          parent = self.parent;
          while (child) {
            prev = child._prev;
            child._dirty && child.totalDuration();
            start = child._start;
            if (start > prevStart && self._sort && child._ts && !self._lock) {
              self._lock = 1;
              _addToTimeline(self, child, start - child._delay, 1)._lock = 0;
            } else {
              prevStart = start;
            }
            if (start < 0 && child._ts) {
              max -= start;
              if (!parent && !self._dp || parent && parent.smoothChildTiming) {
                self._start += start / self._ts;
                self._time -= start;
                self._tTime -= start;
              }
              self.shiftChildren(-start, false, -Infinity);
              prevStart = 0;
            }
            child._end > max && child._ts && (max = child._end);
            child = prev;
          }
          _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1);
          self._dirty = 0;
        }
        return self._tDur;
      };
      Timeline2.updateRoot = function updateRoot(time) {
        if (_globalTimeline._ts) {
          _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));
          _lastRenderedFrame = _ticker.frame;
        }
        if (_ticker.frame >= _nextGCFrame) {
          _nextGCFrame += _config.autoSleep || 120;
          var child = _globalTimeline._first;
          if (!child || !child._ts) {
            if (_config.autoSleep && _ticker._listeners.length < 2) {
              while (child && !child._ts) {
                child = child._next;
              }
              child || _ticker.sleep();
            }
          }
        }
      };
      return Timeline2;
    }(Animation);
    _setDefaults$1(Timeline.prototype, {
      _lock: 0,
      _hasPause: 0,
      _forcing: 0
    });
    var _addComplexStringPropTween = function _addComplexStringPropTween2(target, prop, start, end, setter, stringFilter, funcParam) {
      var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter), index = 0, matchIndex = 0, result, startNums, color, endNum, chunk, startNum, hasRandom, a;
      pt.b = start;
      pt.e = end;
      start += "";
      end += "";
      if (hasRandom = ~end.indexOf("random(")) {
        end = _replaceRandom(end);
      }
      if (stringFilter) {
        a = [start, end];
        stringFilter(a, target, prop);
        start = a[0];
        end = a[1];
      }
      startNums = start.match(_complexStringNumExp) || [];
      while (result = _complexStringNumExp.exec(end)) {
        endNum = result[0];
        chunk = end.substring(index, result.index);
        if (color) {
          color = (color + 1) % 5;
        } else if (chunk.substr(-5) === "rgba(") {
          color = 1;
        }
        if (endNum !== startNums[matchIndex++]) {
          startNum = parseFloat(startNums[matchIndex - 1]) || 0;
          pt._pt = {
            _next: pt._pt,
            p: chunk || matchIndex === 1 ? chunk : ",",
            //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.
            s: startNum,
            c: endNum.charAt(1) === "=" ? _parseRelative(startNum, endNum) - startNum : parseFloat(endNum) - startNum,
            m: color && color < 4 ? Math.round : 0
          };
          index = _complexStringNumExp.lastIndex;
        }
      }
      pt.c = index < end.length ? end.substring(index, end.length) : "";
      pt.fp = funcParam;
      if (_relExp.test(end) || hasRandom) {
        pt.e = 0;
      }
      this._pt = pt;
      return pt;
    }, _addPropTween = function _addPropTween2(target, prop, start, end, index, targets, modifier, stringFilter, funcParam, optional) {
      _isFunction$1(end) && (end = end(index || 0, target, targets));
      var currentValue = target[prop], parsedStart = start !== "get" ? start : !_isFunction$1(currentValue) ? currentValue : funcParam ? target[prop.indexOf("set") || !_isFunction$1(target["get" + prop.substr(3)]) ? prop : "get" + prop.substr(3)](funcParam) : target[prop](), setter = !_isFunction$1(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc, pt;
      if (_isString$1(end)) {
        if (~end.indexOf("random(")) {
          end = _replaceRandom(end);
        }
        if (end.charAt(1) === "=") {
          pt = _parseRelative(parsedStart, end) + (getUnit(parsedStart) || 0);
          if (pt || pt === 0) {
            end = pt;
          }
        }
      }
      if (!optional || parsedStart !== end || _forceAllPropTweens) {
        if (!isNaN(parsedStart * end) && end !== "") {
          pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === "boolean" ? _renderBoolean : _renderPlain, 0, setter);
          funcParam && (pt.fp = funcParam);
          modifier && pt.modifier(modifier, this, target);
          return this._pt = pt;
        }
        !currentValue && !(prop in target) && _missingPlugin(prop, end);
        return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);
      }
    }, _processVars = function _processVars2(vars, index, target, targets, tween) {
      _isFunction$1(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets));
      if (!_isObject$1(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) {
        return _isString$1(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;
      }
      var copy = {}, p;
      for (p in vars) {
        copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);
      }
      return copy;
    }, _checkPlugin = function _checkPlugin2(property, vars, tween, index, target, targets) {
      var plugin, pt, ptLookup, i;
      if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {
        tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);
        if (tween !== _quickTween) {
          ptLookup = tween._ptLookup[tween._targets.indexOf(target)];
          i = plugin._props.length;
          while (i--) {
            ptLookup[plugin._props[i]] = pt;
          }
        }
      }
      return plugin;
    }, _overwritingTween, _forceAllPropTweens, _initTween = function _initTween2(tween, time, tTime) {
      var vars = tween.vars, ease = vars.ease, startAt = vars.startAt, immediateRender = vars.immediateRender, lazy = vars.lazy, onUpdate = vars.onUpdate, runBackwards = vars.runBackwards, yoyoEase = vars.yoyoEase, keyframes = vars.keyframes, autoRevert = vars.autoRevert, dur = tween._dur, prevStartAt = tween._startAt, targets = tween._targets, parent = tween.parent, fullTargets = parent && parent.data === "nested" ? parent.vars.targets : targets, autoOverwrite = tween._overwrite === "auto" && !_suppressOverwrites$1, tl = tween.timeline, cleanVars, i, p, pt, target, hasPriority, gsData, harness, plugin, ptLookup, index, harnessVars, overwritten;
      tl && (!keyframes || !ease) && (ease = "none");
      tween._ease = _parseEase(ease, _defaults$1.ease);
      tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults$1.ease)) : 0;
      if (yoyoEase && tween._yoyo && !tween._repeat) {
        yoyoEase = tween._yEase;
        tween._yEase = tween._ease;
        tween._ease = yoyoEase;
      }
      tween._from = !tl && !!vars.runBackwards;
      if (!tl || keyframes && !vars.stagger) {
        harness = targets[0] ? _getCache(targets[0]).harness : 0;
        harnessVars = harness && vars[harness.prop];
        cleanVars = _copyExcluding(vars, _reservedProps);
        if (prevStartAt) {
          prevStartAt._zTime < 0 && prevStartAt.progress(1);
          time < 0 && runBackwards && immediateRender && !autoRevert ? prevStartAt.render(-1, true) : prevStartAt.revert(runBackwards && dur ? _revertConfigNoKill : _startAtRevertConfig);
          prevStartAt._lazy = 0;
        }
        if (startAt) {
          _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults$1({
            data: "isStart",
            overwrite: false,
            parent,
            immediateRender: true,
            lazy: !prevStartAt && _isNotFalse(lazy),
            startAt: null,
            delay: 0,
            onUpdate: onUpdate && function() {
              return _callback$1(tween, "onUpdate");
            },
            stagger: 0
          }, startAt)));
          tween._startAt._dp = 0;
          tween._startAt._sat = tween;
          time < 0 && (_reverting$1 || !immediateRender && !autoRevert) && tween._startAt.revert(_revertConfigNoKill);
          if (immediateRender) {
            if (dur && time <= 0 && tTime <= 0) {
              time && (tween._zTime = time);
              return;
            }
          }
        } else if (runBackwards && dur) {
          if (!prevStartAt) {
            time && (immediateRender = false);
            p = _setDefaults$1({
              overwrite: false,
              data: "isFromStart",
              //we tag the tween with as "isFromStart" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a "from()" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:"height", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.
              lazy: immediateRender && !prevStartAt && _isNotFalse(lazy),
              immediateRender,
              //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)
              stagger: 0,
              parent
              //ensures that nested tweens that had a stagger are handled properly, like gsap.from(".class", {y: gsap.utils.wrap([-100,100]), stagger: 0.5})
            }, cleanVars);
            harnessVars && (p[harness.prop] = harnessVars);
            _removeFromParent(tween._startAt = Tween.set(targets, p));
            tween._startAt._dp = 0;
            tween._startAt._sat = tween;
            time < 0 && (_reverting$1 ? tween._startAt.revert(_revertConfigNoKill) : tween._startAt.render(-1, true));
            tween._zTime = time;
            if (!immediateRender) {
              _initTween2(tween._startAt, _tinyNum, _tinyNum);
            } else if (!time) {
              return;
            }
          }
        }
        tween._pt = tween._ptCache = 0;
        lazy = dur && _isNotFalse(lazy) || lazy && !dur;
        for (i = 0; i < targets.length; i++) {
          target = targets[i];
          gsData = target._gsap || _harness(targets)[i]._gsap;
          tween._ptLookup[i] = ptLookup = {};
          _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender();
          index = fullTargets === targets ? i : fullTargets.indexOf(target);
          if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {
            tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);
            plugin._props.forEach(function(name) {
              ptLookup[name] = pt;
            });
            plugin.priority && (hasPriority = 1);
          }
          if (!harness || harnessVars) {
            for (p in cleanVars) {
              if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {
                plugin.priority && (hasPriority = 1);
              } else {
                ptLookup[p] = pt = _addPropTween.call(tween, target, p, "get", cleanVars[p], index, fullTargets, 0, vars.stringFilter);
              }
            }
          }
          tween._op && tween._op[i] && tween.kill(target, tween._op[i]);
          if (autoOverwrite && tween._pt) {
            _overwritingTween = tween;
            _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(time));
            overwritten = !tween.parent;
            _overwritingTween = 0;
          }
          tween._pt && lazy && (_lazyLookup[gsData.id] = 1);
        }
        hasPriority && _sortPropTweensByPriority(tween);
        tween._onInit && tween._onInit(tween);
      }
      tween._onUpdate = onUpdate;
      tween._initted = (!tween._op || tween._pt) && !overwritten;
      keyframes && time <= 0 && tl.render(_bigNum$1, true, true);
    }, _updatePropTweens = function _updatePropTweens2(tween, property, value, start, startIsRelative, ratio, time, skipRecursion) {
      var ptCache = (tween._pt && tween._ptCache || (tween._ptCache = {}))[property], pt, rootPT, lookup, i;
      if (!ptCache) {
        ptCache = tween._ptCache[property] = [];
        lookup = tween._ptLookup;
        i = tween._targets.length;
        while (i--) {
          pt = lookup[i][property];
          if (pt && pt.d && pt.d._pt) {
            pt = pt.d._pt;
            while (pt && pt.p !== property && pt.fp !== property) {
              pt = pt._next;
            }
          }
          if (!pt) {
            _forceAllPropTweens = 1;
            tween.vars[property] = "+=0";
            _initTween(tween, time);
            _forceAllPropTweens = 0;
            return skipRecursion ? _warn(property + " not eligible for reset") : 1;
          }
          ptCache.push(pt);
        }
      }
      i = ptCache.length;
      while (i--) {
        rootPT = ptCache[i];
        pt = rootPT._pt || rootPT;
        pt.s = (start || start === 0) && !startIsRelative ? start : pt.s + (start || 0) + ratio * pt.c;
        pt.c = value - pt.s;
        rootPT.e && (rootPT.e = _round$1(value) + getUnit(rootPT.e));
        rootPT.b && (rootPT.b = pt.s + getUnit(rootPT.b));
      }
    }, _addAliasesToVars = function _addAliasesToVars2(targets, vars) {
      var harness = targets[0] ? _getCache(targets[0]).harness : 0, propertyAliases = harness && harness.aliases, copy, p, i, aliases;
      if (!propertyAliases) {
        return vars;
      }
      copy = _merge({}, vars);
      for (p in propertyAliases) {
        if (p in copy) {
          aliases = propertyAliases[p].split(",");
          i = aliases.length;
          while (i--) {
            copy[aliases[i]] = copy[p];
          }
        }
      }
      return copy;
    }, _parseKeyframe = function _parseKeyframe2(prop, obj, allProps, easeEach) {
      var ease = obj.ease || easeEach || "power1.inOut", p, a;
      if (_isArray(obj)) {
        a = allProps[prop] || (allProps[prop] = []);
        obj.forEach(function(value, i) {
          return a.push({
            t: i / (obj.length - 1) * 100,
            v: value,
            e: ease
          });
        });
      } else {
        for (p in obj) {
          a = allProps[p] || (allProps[p] = []);
          p === "ease" || a.push({
            t: parseFloat(prop),
            v: obj[p],
            e: ease
          });
        }
      }
    }, _parseFuncOrString = function _parseFuncOrString2(value, tween, i, target, targets) {
      return _isFunction$1(value) ? value.call(tween, i, target, targets) : _isString$1(value) && ~value.indexOf("random(") ? _replaceRandom(value) : value;
    }, _staggerTweenProps = _callbackNames + "repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert", _staggerPropsToSkip = {};
    _forEachName(_staggerTweenProps + ",id,stagger,delay,duration,paused,scrollTrigger", function(name) {
      return _staggerPropsToSkip[name] = 1;
    });
    var Tween = /* @__PURE__ */ function(_Animation2) {
      _inheritsLoose(Tween2, _Animation2);
      function Tween2(targets, vars, position, skipInherit) {
        var _this3;
        if (typeof vars === "number") {
          position.duration = vars;
          vars = position;
          position = null;
        }
        _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this;
        var _this3$vars = _this3.vars, duration = _this3$vars.duration, delay = _this3$vars.delay, immediateRender = _this3$vars.immediateRender, stagger = _this3$vars.stagger, overwrite = _this3$vars.overwrite, keyframes = _this3$vars.keyframes, defaults2 = _this3$vars.defaults, scrollTrigger = _this3$vars.scrollTrigger, yoyoEase = _this3$vars.yoyoEase, parent = vars.parent || _globalTimeline, parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber$1(targets[0]) : "length" in vars) ? [targets] : toArray(targets), tl, i, copy, l, p, curTarget, staggerFunc, staggerVarsToMerge;
        _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn("GSAP target " + targets + " not found. https://gsap.com", !_config.nullTargetWarn) || [];
        _this3._ptLookup = [];
        _this3._overwrite = overwrite;
        if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {
          vars = _this3.vars;
          tl = _this3.timeline = new Timeline({
            data: "nested",
            defaults: defaults2 || {},
            targets: parent && parent.data === "nested" ? parent.vars.targets : parsedTargets
          });
          tl.kill();
          tl.parent = tl._dp = _assertThisInitialized(_this3);
          tl._start = 0;
          if (stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {
            l = parsedTargets.length;
            staggerFunc = stagger && distribute(stagger);
            if (_isObject$1(stagger)) {
              for (p in stagger) {
                if (~_staggerTweenProps.indexOf(p)) {
                  staggerVarsToMerge || (staggerVarsToMerge = {});
                  staggerVarsToMerge[p] = stagger[p];
                }
              }
            }
            for (i = 0; i < l; i++) {
              copy = _copyExcluding(vars, _staggerPropsToSkip);
              copy.stagger = 0;
              yoyoEase && (copy.yoyoEase = yoyoEase);
              staggerVarsToMerge && _merge(copy, staggerVarsToMerge);
              curTarget = parsedTargets[i];
              copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);
              copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;
              if (!stagger && l === 1 && copy.delay) {
                _this3._delay = delay = copy.delay;
                _this3._start += delay;
                copy.delay = 0;
              }
              tl.to(curTarget, copy, staggerFunc ? staggerFunc(i, curTarget, parsedTargets) : 0);
              tl._ease = _easeMap.none;
            }
            tl.duration() ? duration = delay = 0 : _this3.timeline = 0;
          } else if (keyframes) {
            _inheritDefaults(_setDefaults$1(tl.vars.defaults, {
              ease: "none"
            }));
            tl._ease = _parseEase(keyframes.ease || vars.ease || "none");
            var time = 0, a, kf, v;
            if (_isArray(keyframes)) {
              keyframes.forEach(function(frame) {
                return tl.to(parsedTargets, frame, ">");
              });
              tl.duration();
            } else {
              copy = {};
              for (p in keyframes) {
                p === "ease" || p === "easeEach" || _parseKeyframe(p, keyframes[p], copy, keyframes.easeEach);
              }
              for (p in copy) {
                a = copy[p].sort(function(a2, b) {
                  return a2.t - b.t;
                });
                time = 0;
                for (i = 0; i < a.length; i++) {
                  kf = a[i];
                  v = {
                    ease: kf.e,
                    duration: (kf.t - (i ? a[i - 1].t : 0)) / 100 * duration
                  };
                  v[p] = kf.v;
                  tl.to(parsedTargets, v, time);
                  time += v.duration;
                }
              }
              tl.duration() < duration && tl.to({}, {
                duration: duration - tl.duration()
              });
            }
          }
          duration || _this3.duration(duration = tl.duration());
        } else {
          _this3.timeline = 0;
        }
        if (overwrite === true && !_suppressOverwrites$1) {
          _overwritingTween = _assertThisInitialized(_this3);
          _globalTimeline.killTweensOf(parsedTargets);
          _overwritingTween = 0;
        }
        _addToTimeline(parent, _assertThisInitialized(_this3), position);
        vars.reversed && _this3.reverse();
        vars.paused && _this3.paused(true);
        if (immediateRender || !duration && !keyframes && _this3._start === _roundPrecise(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== "nested") {
          _this3._tTime = -_tinyNum;
          _this3.render(Math.max(0, -delay) || 0);
        }
        scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger);
        return _this3;
      }
      var _proto3 = Tween2.prototype;
      _proto3.render = function render22(totalTime, suppressEvents, force) {
        var prevTime = this._time, tDur = this._tDur, dur = this._dur, isNegative = totalTime < 0, tTime = totalTime > tDur - _tinyNum && !isNegative ? tDur : totalTime < _tinyNum ? 0 : totalTime, time, pt, iteration, cycleDuration, prevIteration, isYoyo, ratio, timeline2, yoyoEase;
        if (!dur) {
          _renderZeroDurationTween(this, totalTime, suppressEvents, force);
        } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== isNegative || this._lazy) {
          time = tTime;
          timeline2 = this.timeline;
          if (this._repeat) {
            cycleDuration = dur + this._rDelay;
            if (this._repeat < -1 && isNegative) {
              return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);
            }
            time = _roundPrecise(tTime % cycleDuration);
            if (tTime === tDur) {
              iteration = this._repeat;
              time = dur;
            } else {
              prevIteration = _roundPrecise(tTime / cycleDuration);
              iteration = ~~prevIteration;
              if (iteration && iteration === prevIteration) {
                time = dur;
                iteration--;
              } else if (time > dur) {
                time = dur;
              }
            }
            isYoyo = this._yoyo && iteration & 1;
            if (isYoyo) {
              yoyoEase = this._yEase;
              time = dur - time;
            }
            prevIteration = _animationCycle(this._tTime, cycleDuration);
            if (time === prevTime && !force && this._initted && iteration === prevIteration) {
              this._tTime = tTime;
              return this;
            }
            if (iteration !== prevIteration) {
              timeline2 && this._yEase && _propagateYoyoEase(timeline2, isYoyo);
              if (this.vars.repeatRefresh && !isYoyo && !this._lock && time !== cycleDuration && this._initted) {
                this._lock = force = 1;
                this.render(_roundPrecise(cycleDuration * iteration), true).invalidate()._lock = 0;
              }
            }
          }
          if (!this._initted) {
            if (_attemptInitTween(this, isNegative ? totalTime : time, force, suppressEvents, tTime)) {
              this._tTime = 0;
              return this;
            }
            if (prevTime !== this._time && !(force && this.vars.repeatRefresh && iteration !== prevIteration)) {
              return this;
            }
            if (dur !== this._dur) {
              return this.render(totalTime, suppressEvents, force);
            }
          }
          this._tTime = tTime;
          this._time = time;
          if (!this._act && this._ts) {
            this._act = 1;
            this._lazy = 0;
          }
          this.ratio = ratio = (yoyoEase || this._ease)(time / dur);
          if (this._from) {
            this.ratio = ratio = 1 - ratio;
          }
          if (!prevTime && tTime && !suppressEvents && !prevIteration) {
            _callback$1(this, "onStart");
            if (this._tTime !== tTime) {
              return this;
            }
          }
          pt = this._pt;
          while (pt) {
            pt.r(ratio, pt.d);
            pt = pt._next;
          }
          timeline2 && timeline2.render(totalTime < 0 ? totalTime : timeline2._dur * timeline2._ease(time / this._dur), suppressEvents, force) || this._startAt && (this._zTime = totalTime);
          if (this._onUpdate && !suppressEvents) {
            isNegative && _rewindStartAt(this, totalTime, suppressEvents, force);
            _callback$1(this, "onUpdate");
          }
          this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback$1(this, "onRepeat");
          if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {
            isNegative && !this._onUpdate && _rewindStartAt(this, totalTime, true, true);
            (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1);
            if (!suppressEvents && !(isNegative && !prevTime) && (tTime || prevTime || isYoyo)) {
              _callback$1(this, tTime === tDur ? "onComplete" : "onReverseComplete", true);
              this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();
            }
          }
        }
        return this;
      };
      _proto3.targets = function targets() {
        return this._targets;
      };
      _proto3.invalidate = function invalidate(soft) {
        (!soft || !this.vars.runBackwards) && (this._startAt = 0);
        this._pt = this._op = this._onUpdate = this._lazy = this.ratio = 0;
        this._ptLookup = [];
        this.timeline && this.timeline.invalidate(soft);
        return _Animation2.prototype.invalidate.call(this, soft);
      };
      _proto3.resetTo = function resetTo(property, value, start, startIsRelative, skipRecursion) {
        _tickerActive || _ticker.wake();
        this._ts || this.play();
        var time = Math.min(this._dur, (this._dp._time - this._start) * this._ts), ratio;
        this._initted || _initTween(this, time);
        ratio = this._ease(time / this._dur);
        if (_updatePropTweens(this, property, value, start, startIsRelative, ratio, time, skipRecursion)) {
          return this.resetTo(property, value, start, startIsRelative, 1);
        }
        _alignPlayhead(this, 0);
        this.parent || _addLinkedListItem(this._dp, this, "_first", "_last", this._dp._sort ? "_start" : 0);
        return this.render(0);
      };
      _proto3.kill = function kill(targets, vars) {
        if (vars === void 0) {
          vars = "all";
        }
        if (!targets && (!vars || vars === "all")) {
          this._lazy = this._pt = 0;
          this.parent ? _interrupt(this) : this.scrollTrigger && this.scrollTrigger.kill(!!_reverting$1);
          return this;
        }
        if (this.timeline) {
          var tDur = this.timeline.totalDuration();
          this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this);
          this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1);
          return this;
        }
        var parsedTargets = this._targets, killingTargets = targets ? toArray(targets) : parsedTargets, propTweenLookup = this._ptLookup, firstPT = this._pt, overwrittenProps, curLookup, curOverwriteProps, props, p, pt, i;
        if ((!vars || vars === "all") && _arraysMatch(parsedTargets, killingTargets)) {
          vars === "all" && (this._pt = 0);
          return _interrupt(this);
        }
        overwrittenProps = this._op = this._op || [];
        if (vars !== "all") {
          if (_isString$1(vars)) {
            p = {};
            _forEachName(vars, function(name) {
              return p[name] = 1;
            });
            vars = p;
          }
          vars = _addAliasesToVars(parsedTargets, vars);
        }
        i = parsedTargets.length;
        while (i--) {
          if (~killingTargets.indexOf(parsedTargets[i])) {
            curLookup = propTweenLookup[i];
            if (vars === "all") {
              overwrittenProps[i] = vars;
              props = curLookup;
              curOverwriteProps = {};
            } else {
              curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};
              props = vars;
            }
            for (p in props) {
              pt = curLookup && curLookup[p];
              if (pt) {
                if (!("kill" in pt.d) || pt.d.kill(p) === true) {
                  _removeLinkedListItem(this, pt, "_pt");
                }
                delete curLookup[p];
              }
              if (curOverwriteProps !== "all") {
                curOverwriteProps[p] = 1;
              }
            }
          }
        }
        this._initted && !this._pt && firstPT && _interrupt(this);
        return this;
      };
      Tween2.to = function to(targets, vars) {
        return new Tween2(targets, vars, arguments[2]);
      };
      Tween2.from = function from(targets, vars) {
        return _createTweenType(1, arguments);
      };
      Tween2.delayedCall = function delayedCall(delay, callback, params, scope) {
        return new Tween2(callback, 0, {
          immediateRender: false,
          lazy: false,
          overwrite: false,
          delay,
          onComplete: callback,
          onReverseComplete: callback,
          onCompleteParams: params,
          onReverseCompleteParams: params,
          callbackScope: scope
        });
      };
      Tween2.fromTo = function fromTo(targets, fromVars, toVars) {
        return _createTweenType(2, arguments);
      };
      Tween2.set = function set(targets, vars) {
        vars.duration = 0;
        vars.repeatDelay || (vars.repeat = 0);
        return new Tween2(targets, vars);
      };
      Tween2.killTweensOf = function killTweensOf(targets, props, onlyActive) {
        return _globalTimeline.killTweensOf(targets, props, onlyActive);
      };
      return Tween2;
    }(Animation);
    _setDefaults$1(Tween.prototype, {
      _targets: [],
      _lazy: 0,
      _startAt: 0,
      _op: 0,
      _onInit: 0
    });
    _forEachName("staggerTo,staggerFrom,staggerFromTo", function(name) {
      Tween[name] = function() {
        var tl = new Timeline(), params = _slice.call(arguments, 0);
        params.splice(name === "staggerFromTo" ? 5 : 4, 0, 0);
        return tl[name].apply(tl, params);
      };
    });
    var _setterPlain = function _setterPlain2(target, property, value) {
      return target[property] = value;
    }, _setterFunc = function _setterFunc2(target, property, value) {
      return target[property](value);
    }, _setterFuncWithParam = function _setterFuncWithParam2(target, property, value, data) {
      return target[property](data.fp, value);
    }, _setterAttribute = function _setterAttribute2(target, property, value) {
      return target.setAttribute(property, value);
    }, _getSetter = function _getSetter2(target, property) {
      return _isFunction$1(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;
    }, _renderPlain = function _renderPlain2(ratio, data) {
      return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1e6) / 1e6, data);
    }, _renderBoolean = function _renderBoolean2(ratio, data) {
      return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);
    }, _renderComplexString = function _renderComplexString2(ratio, data) {
      var pt = data._pt, s = "";
      if (!ratio && data.b) {
        s = data.b;
      } else if (ratio === 1 && data.e) {
        s = data.e;
      } else {
        while (pt) {
          s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 1e4) / 1e4) + s;
          pt = pt._next;
        }
        s += data.c;
      }
      data.set(data.t, data.p, s, data);
    }, _renderPropTweens = function _renderPropTweens2(ratio, data) {
      var pt = data._pt;
      while (pt) {
        pt.r(ratio, pt.d);
        pt = pt._next;
      }
    }, _addPluginModifier = function _addPluginModifier2(modifier, tween, target, property) {
      var pt = this._pt, next;
      while (pt) {
        next = pt._next;
        pt.p === property && pt.modifier(modifier, tween, target);
        pt = next;
      }
    }, _killPropTweensOf = function _killPropTweensOf2(property) {
      var pt = this._pt, hasNonDependentRemaining, next;
      while (pt) {
        next = pt._next;
        if (pt.p === property && !pt.op || pt.op === property) {
          _removeLinkedListItem(this, pt, "_pt");
        } else if (!pt.dep) {
          hasNonDependentRemaining = 1;
        }
        pt = next;
      }
      return !hasNonDependentRemaining;
    }, _setterWithModifier = function _setterWithModifier2(target, property, value, data) {
      data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);
    }, _sortPropTweensByPriority = function _sortPropTweensByPriority2(parent) {
      var pt = parent._pt, next, pt2, first, last;
      while (pt) {
        next = pt._next;
        pt2 = first;
        while (pt2 && pt2.pr > pt.pr) {
          pt2 = pt2._next;
        }
        if (pt._prev = pt2 ? pt2._prev : last) {
          pt._prev._next = pt;
        } else {
          first = pt;
        }
        if (pt._next = pt2) {
          pt2._prev = pt;
        } else {
          last = pt;
        }
        pt = next;
      }
      parent._pt = first;
    };
    var PropTween = /* @__PURE__ */ function() {
      function PropTween2(next, target, prop, start, change, renderer, data, setter, priority) {
        this.t = target;
        this.s = start;
        this.c = change;
        this.p = prop;
        this.r = renderer || _renderPlain;
        this.d = data || this;
        this.set = setter || _setterPlain;
        this.pr = priority || 0;
        this._next = next;
        if (next) {
          next._prev = this;
        }
      }
      var _proto4 = PropTween2.prototype;
      _proto4.modifier = function modifier(func, tween, target) {
        this.mSet = this.mSet || this.set;
        this.set = _setterWithModifier;
        this.m = func;
        this.mt = target;
        this.tween = tween;
      };
      return PropTween2;
    }();
    _forEachName(_callbackNames + "parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger", function(name) {
      return _reservedProps[name] = 1;
    });
    _globals.TweenMax = _globals.TweenLite = Tween;
    _globals.TimelineLite = _globals.TimelineMax = Timeline;
    _globalTimeline = new Timeline({
      sortChildren: false,
      defaults: _defaults$1,
      autoRemoveChildren: true,
      id: "root",
      smoothChildTiming: true
    });
    _config.stringFilter = _colorStringFilter;
    var _media = [], _listeners$1 = {}, _emptyArray$2 = [], _lastMediaTime = 0, _contextID = 0, _dispatch$1 = function _dispatch2(type) {
      return (_listeners$1[type] || _emptyArray$2).map(function(f) {
        return f();
      });
    }, _onMediaChange = function _onMediaChange2() {
      var time = Date.now(), matches = [];
      if (time - _lastMediaTime > 2) {
        _dispatch$1("matchMediaInit");
        _media.forEach(function(c) {
          var queries = c.queries, conditions = c.conditions, match, p, anyMatch, toggled;
          for (p in queries) {
            match = _win$3.matchMedia(queries[p]).matches;
            match && (anyMatch = 1);
            if (match !== conditions[p]) {
              conditions[p] = match;
              toggled = 1;
            }
          }
          if (toggled) {
            c.revert();
            anyMatch && matches.push(c);
          }
        });
        _dispatch$1("matchMediaRevert");
        matches.forEach(function(c) {
          return c.onMatch(c, function(func) {
            return c.add(null, func);
          });
        });
        _lastMediaTime = time;
        _dispatch$1("matchMedia");
      }
    };
    var Context = /* @__PURE__ */ function() {
      function Context2(func, scope) {
        this.selector = scope && selector(scope);
        this.data = [];
        this._r = [];
        this.isReverted = false;
        this.id = _contextID++;
        func && this.add(func);
      }
      var _proto5 = Context2.prototype;
      _proto5.add = function add(name, func, scope) {
        if (_isFunction$1(name)) {
          scope = func;
          func = name;
          name = _isFunction$1;
        }
        var self = this, f = function f2() {
          var prev = _context$3, prevSelector = self.selector, result;
          prev && prev !== self && prev.data.push(self);
          scope && (self.selector = selector(scope));
          _context$3 = self;
          result = func.apply(self, arguments);
          _isFunction$1(result) && self._r.push(result);
          _context$3 = prev;
          self.selector = prevSelector;
          self.isReverted = false;
          return result;
        };
        self.last = f;
        return name === _isFunction$1 ? f(self, function(func2) {
          return self.add(null, func2);
        }) : name ? self[name] = f : f;
      };
      _proto5.ignore = function ignore(func) {
        var prev = _context$3;
        _context$3 = null;
        func(this);
        _context$3 = prev;
      };
      _proto5.getTweens = function getTweens() {
        var a = [];
        this.data.forEach(function(e) {
          return e instanceof Context2 ? a.push.apply(a, e.getTweens()) : e instanceof Tween && !(e.parent && e.parent.data === "nested") && a.push(e);
        });
        return a;
      };
      _proto5.clear = function clear() {
        this._r.length = this.data.length = 0;
      };
      _proto5.kill = function kill(revert, matchMedia22) {
        var _this4 = this;
        if (revert) {
          (function() {
            var tweens = _this4.getTweens(), i2 = _this4.data.length, t;
            while (i2--) {
              t = _this4.data[i2];
              if (t.data === "isFlip") {
                t.revert();
                t.getChildren(true, true, false).forEach(function(tween) {
                  return tweens.splice(tweens.indexOf(tween), 1);
                });
              }
            }
            tweens.map(function(t2) {
              return {
                g: t2._dur || t2._delay || t2._sat && !t2._sat.vars.immediateRender ? t2.globalTime(0) : -Infinity,
                t: t2
              };
            }).sort(function(a, b) {
              return b.g - a.g || -Infinity;
            }).forEach(function(o) {
              return o.t.revert(revert);
            });
            i2 = _this4.data.length;
            while (i2--) {
              t = _this4.data[i2];
              if (t instanceof Timeline) {
                if (t.data !== "nested") {
                  t.scrollTrigger && t.scrollTrigger.revert();
                  t.kill();
                }
              } else {
                !(t instanceof Tween) && t.revert && t.revert(revert);
              }
            }
            _this4._r.forEach(function(f) {
              return f(revert, _this4);
            });
            _this4.isReverted = true;
          })();
        } else {
          this.data.forEach(function(e) {
            return e.kill && e.kill();
          });
        }
        this.clear();
        if (matchMedia22) {
          var i = _media.length;
          while (i--) {
            _media[i].id === this.id && _media.splice(i, 1);
          }
        }
      };
      _proto5.revert = function revert(config3) {
        this.kill(config3 || {});
      };
      return Context2;
    }();
    var MatchMedia = /* @__PURE__ */ function() {
      function MatchMedia2(scope) {
        this.contexts = [];
        this.scope = scope;
        _context$3 && _context$3.data.push(this);
      }
      var _proto6 = MatchMedia2.prototype;
      _proto6.add = function add(conditions, func, scope) {
        _isObject$1(conditions) || (conditions = {
          matches: conditions
        });
        var context3 = new Context(0, scope || this.scope), cond = context3.conditions = {}, mq, p, active;
        _context$3 && !context3.selector && (context3.selector = _context$3.selector);
        this.contexts.push(context3);
        func = context3.add("onMatch", func);
        context3.queries = conditions;
        for (p in conditions) {
          if (p === "all") {
            active = 1;
          } else {
            mq = _win$3.matchMedia(conditions[p]);
            if (mq) {
              _media.indexOf(context3) < 0 && _media.push(context3);
              (cond[p] = mq.matches) && (active = 1);
              mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener("change", _onMediaChange);
            }
          }
        }
        active && func(context3, function(f) {
          return context3.add(null, f);
        });
        return this;
      };
      _proto6.revert = function revert(config3) {
        this.kill(config3 || {});
      };
      _proto6.kill = function kill(revert) {
        this.contexts.forEach(function(c) {
          return c.kill(revert, true);
        });
      };
      return MatchMedia2;
    }();
    var _gsap = {
      registerPlugin: function registerPlugin() {
        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
          args[_key2] = arguments[_key2];
        }
        args.forEach(function(config3) {
          return _createPlugin(config3);
        });
      },
      timeline: function timeline(vars) {
        return new Timeline(vars);
      },
      getTweensOf: function getTweensOf(targets, onlyActive) {
        return _globalTimeline.getTweensOf(targets, onlyActive);
      },
      getProperty: function getProperty(target, property, unit, uncache) {
        _isString$1(target) && (target = toArray(target)[0]);
        var getter = _getCache(target || {}).get, format = unit ? _passThrough$1 : _numericIfPossible;
        unit === "native" && (unit = "");
        return !target ? target : !property ? function(property2, unit2, uncache2) {
          return format((_plugins[property2] && _plugins[property2].get || getter)(target, property2, unit2, uncache2));
        } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));
      },
      quickSetter: function quickSetter(target, property, unit) {
        target = toArray(target);
        if (target.length > 1) {
          var setters = target.map(function(t) {
            return gsap$3.quickSetter(t, property, unit);
          }), l = setters.length;
          return function(value) {
            var i = l;
            while (i--) {
              setters[i](value);
            }
          };
        }
        target = target[0] || {};
        var Plugin = _plugins[property], cache = _getCache(target), p = cache.harness && (cache.harness.aliases || {})[property] || property, setter = Plugin ? function(value) {
          var p2 = new Plugin();
          _quickTween._pt = 0;
          p2.init(target, unit ? value + unit : value, _quickTween, 0, [target]);
          p2.render(1, p2);
          _quickTween._pt && _renderPropTweens(1, _quickTween);
        } : cache.set(target, p);
        return Plugin ? setter : function(value) {
          return setter(target, p, unit ? value + unit : value, cache, 1);
        };
      },
      quickTo: function quickTo(target, property, vars) {
        var _setDefaults22;
        var tween = gsap$3.to(target, _setDefaults$1((_setDefaults22 = {}, _setDefaults22[property] = "+=0.1", _setDefaults22.paused = true, _setDefaults22.stagger = 0, _setDefaults22), vars || {})), func = function func2(value, start, startIsRelative) {
          return tween.resetTo(property, value, start, startIsRelative);
        };
        func.tween = tween;
        return func;
      },
      isTweening: function isTweening(targets) {
        return _globalTimeline.getTweensOf(targets, true).length > 0;
      },
      defaults: function defaults(value) {
        value && value.ease && (value.ease = _parseEase(value.ease, _defaults$1.ease));
        return _mergeDeep(_defaults$1, value || {});
      },
      config: function config2(value) {
        return _mergeDeep(_config, value || {});
      },
      registerEffect: function registerEffect(_ref3) {
        var name = _ref3.name, effect = _ref3.effect, plugins = _ref3.plugins, defaults2 = _ref3.defaults, extendTimeline = _ref3.extendTimeline;
        (plugins || "").split(",").forEach(function(pluginName) {
          return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + " effect requires " + pluginName + " plugin.");
        });
        _effects[name] = function(targets, vars, tl) {
          return effect(toArray(targets), _setDefaults$1(vars || {}, defaults2), tl);
        };
        if (extendTimeline) {
          Timeline.prototype[name] = function(targets, vars, position) {
            return this.add(_effects[name](targets, _isObject$1(vars) ? vars : (position = vars) && {}, this), position);
          };
        }
      },
      registerEase: function registerEase(name, ease) {
        _easeMap[name] = _parseEase(ease);
      },
      parseEase: function parseEase(ease, defaultEase) {
        return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;
      },
      getById: function getById(id) {
        return _globalTimeline.getById(id);
      },
      exportRoot: function exportRoot(vars, includeDelayedCalls) {
        if (vars === void 0) {
          vars = {};
        }
        var tl = new Timeline(vars), child, next;
        tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);
        _globalTimeline.remove(tl);
        tl._dp = 0;
        tl._time = tl._tTime = _globalTimeline._time;
        child = _globalTimeline._first;
        while (child) {
          next = child._next;
          if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {
            _addToTimeline(tl, child, child._start - child._delay);
          }
          child = next;
        }
        _addToTimeline(_globalTimeline, tl, 0);
        return tl;
      },
      context: function context(func, scope) {
        return func ? new Context(func, scope) : _context$3;
      },
      matchMedia: function matchMedia2(scope) {
        return new MatchMedia(scope);
      },
      matchMediaRefresh: function matchMediaRefresh() {
        return _media.forEach(function(c) {
          var cond = c.conditions, found, p;
          for (p in cond) {
            if (cond[p]) {
              cond[p] = false;
              found = 1;
            }
          }
          found && c.revert();
        }) || _onMediaChange();
      },
      addEventListener: function addEventListener2(type, callback) {
        var a = _listeners$1[type] || (_listeners$1[type] = []);
        ~a.indexOf(callback) || a.push(callback);
      },
      removeEventListener: function removeEventListener(type, callback) {
        var a = _listeners$1[type], i = a && a.indexOf(callback);
        i >= 0 && a.splice(i, 1);
      },
      utils: {
        wrap,
        wrapYoyo,
        distribute,
        random,
        snap,
        normalize,
        getUnit,
        clamp,
        splitColor,
        toArray,
        selector,
        mapRange,
        pipe,
        unitize,
        interpolate,
        shuffle
      },
      install: _install,
      effects: _effects,
      ticker: _ticker,
      updateRoot: Timeline.updateRoot,
      plugins: _plugins,
      globalTimeline: _globalTimeline,
      core: {
        PropTween,
        globals: _addGlobal,
        Tween,
        Timeline,
        Animation,
        getCache: _getCache,
        _removeLinkedListItem,
        reverting: function reverting() {
          return _reverting$1;
        },
        context: function context2(toAdd) {
          if (toAdd && _context$3) {
            _context$3.data.push(toAdd);
            toAdd._ctx = _context$3;
          }
          return _context$3;
        },
        suppressOverwrites: function suppressOverwrites(value) {
          return _suppressOverwrites$1 = value;
        }
      }
    };
    _forEachName("to,from,fromTo,delayedCall,set,killTweensOf", function(name) {
      return _gsap[name] = Tween[name];
    });
    _ticker.add(Timeline.updateRoot);
    _quickTween = _gsap.to({}, {
      duration: 0
    });
    var _getPluginPropTween = function _getPluginPropTween2(plugin, prop) {
      var pt = plugin._pt;
      while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {
        pt = pt._next;
      }
      return pt;
    }, _addModifiers = function _addModifiers2(tween, modifiers) {
      var targets = tween._targets, p, i, pt;
      for (p in modifiers) {
        i = targets.length;
        while (i--) {
          pt = tween._ptLookup[i][p];
          if (pt && (pt = pt.d)) {
            if (pt._pt) {
              pt = _getPluginPropTween(pt, p);
            }
            pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);
          }
        }
      }
    }, _buildModifierPlugin = function _buildModifierPlugin2(name, modifier) {
      return {
        name,
        headless: 1,
        rawVars: 1,
        //don't pre-process function-based values or "random()" strings.
        init: function init32(target, vars, tween) {
          tween._onInit = function(tween2) {
            var temp, p;
            if (_isString$1(vars)) {
              temp = {};
              _forEachName(vars, function(name2) {
                return temp[name2] = 1;
              });
              vars = temp;
            }
            if (modifier) {
              temp = {};
              for (p in vars) {
                temp[p] = modifier(vars[p]);
              }
              vars = temp;
            }
            _addModifiers(tween2, vars);
          };
        }
      };
    };
    var gsap$3 = _gsap.registerPlugin({
      name: "attr",
      init: function init(target, vars, tween, index, targets) {
        var p, pt, v;
        this.tween = tween;
        for (p in vars) {
          v = target.getAttribute(p) || "";
          pt = this.add(target, "setAttribute", (v || 0) + "", vars[p], index, targets, 0, 0, p);
          pt.op = p;
          pt.b = v;
          this._props.push(p);
        }
      },
      render: function render(ratio, data) {
        var pt = data._pt;
        while (pt) {
          _reverting$1 ? pt.set(pt.t, pt.p, pt.b, pt) : pt.r(ratio, pt.d);
          pt = pt._next;
        }
      }
    }, {
      name: "endArray",
      headless: 1,
      init: function init2(target, value) {
        var i = value.length;
        while (i--) {
          this.add(target, i, target[i] || 0, value[i], 0, 0, 0, 0, 0, 1);
        }
      }
    }, _buildModifierPlugin("roundProps", _roundModifier), _buildModifierPlugin("modifiers"), _buildModifierPlugin("snap", snap)) || _gsap;
    Tween.version = Timeline.version = gsap$3.version = "3.13.0";
    _coreReady = 1;
    _windowExists$2() && _wake();
    _easeMap.Power0;
    _easeMap.Power1;
    _easeMap.Power2;
    _easeMap.Power3;
    _easeMap.Power4;
    _easeMap.Linear;
    _easeMap.Quad;
    _easeMap.Cubic;
    _easeMap.Quart;
    _easeMap.Quint;
    _easeMap.Strong;
    _easeMap.Elastic;
    _easeMap.Back;
    _easeMap.SteppedEase;
    _easeMap.Bounce;
    _easeMap.Sine;
    _easeMap.Expo;
    _easeMap.Circ;
    /*!
     * CSSPlugin 3.13.0
     * https://gsap.com
     *
     * Copyright 2008-2025, GreenSock. All rights reserved.
     * Subject to the terms at https://gsap.com/standard-license
     * @author: Jack Doyle, jack@greensock.com
    */
    var _win$2, _doc$2, _docElement, _pluginInitted, _tempDiv, _recentSetterPlugin, _reverting, _windowExists$1 = function _windowExists22() {
      return typeof window !== "undefined";
    }, _transformProps = {}, _RAD2DEG = 180 / Math.PI, _DEG2RAD = Math.PI / 180, _atan2 = Math.atan2, _bigNum = 1e8, _capsExp$1 = /([A-Z])/g, _horizontalExp = /(left|right|width|margin|padding|x)/i, _complexExp = /[\s,\(]\S/, _propertyAliases = {
      autoAlpha: "opacity,visibility",
      scale: "scaleX,scaleY",
      alpha: "opacity"
    }, _renderCSSProp = function _renderCSSProp2(ratio, data) {
      return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1e4) / 1e4 + data.u, data);
    }, _renderPropWithEnd = function _renderPropWithEnd2(ratio, data) {
      return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 1e4) / 1e4 + data.u, data);
    }, _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning2(ratio, data) {
      return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 1e4) / 1e4 + data.u : data.b, data);
    }, _renderRoundedCSSProp = function _renderRoundedCSSProp2(ratio, data) {
      var value = data.s + data.c * ratio;
      data.set(data.t, data.p, ~~(value + (value < 0 ? -0.5 : 0.5)) + data.u, data);
    }, _renderNonTweeningValue = function _renderNonTweeningValue2(ratio, data) {
      return data.set(data.t, data.p, ratio ? data.e : data.b, data);
    }, _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd2(ratio, data) {
      return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);
    }, _setterCSSStyle = function _setterCSSStyle2(target, property, value) {
      return target.style[property] = value;
    }, _setterCSSProp = function _setterCSSProp2(target, property, value) {
      return target.style.setProperty(property, value);
    }, _setterTransform = function _setterTransform2(target, property, value) {
      return target._gsap[property] = value;
    }, _setterScale = function _setterScale2(target, property, value) {
      return target._gsap.scaleX = target._gsap.scaleY = value;
    }, _setterScaleWithRender = function _setterScaleWithRender2(target, property, value, data, ratio) {
      var cache = target._gsap;
      cache.scaleX = cache.scaleY = value;
      cache.renderTransform(ratio, cache);
    }, _setterTransformWithRender = function _setterTransformWithRender2(target, property, value, data, ratio) {
      var cache = target._gsap;
      cache[property] = value;
      cache.renderTransform(ratio, cache);
    }, _transformProp$1 = "transform", _transformOriginProp = _transformProp$1 + "Origin", _saveStyle = function _saveStyle2(property, isNotCSS) {
      var _this = this;
      var target = this.target, style = target.style, cache = target._gsap;
      if (property in _transformProps && style) {
        this.tfm = this.tfm || {};
        if (property !== "transform") {
          property = _propertyAliases[property] || property;
          ~property.indexOf(",") ? property.split(",").forEach(function(a) {
            return _this.tfm[a] = _get(target, a);
          }) : this.tfm[property] = cache.x ? cache[property] : _get(target, property);
          property === _transformOriginProp && (this.tfm.zOrigin = cache.zOrigin);
        } else {
          return _propertyAliases.transform.split(",").forEach(function(p) {
            return _saveStyle2.call(_this, p, isNotCSS);
          });
        }
        if (this.props.indexOf(_transformProp$1) >= 0) {
          return;
        }
        if (cache.svg) {
          this.svgo = target.getAttribute("data-svg-origin");
          this.props.push(_transformOriginProp, isNotCSS, "");
        }
        property = _transformProp$1;
      }
      (style || isNotCSS) && this.props.push(property, isNotCSS, style[property]);
    }, _removeIndependentTransforms = function _removeIndependentTransforms2(style) {
      if (style.translate) {
        style.removeProperty("translate");
        style.removeProperty("scale");
        style.removeProperty("rotate");
      }
    }, _revertStyle = function _revertStyle2() {
      var props = this.props, target = this.target, style = target.style, cache = target._gsap, i, p;
      for (i = 0; i < props.length; i += 3) {
        if (!props[i + 1]) {
          props[i + 2] ? style[props[i]] = props[i + 2] : style.removeProperty(props[i].substr(0, 2) === "--" ? props[i] : props[i].replace(_capsExp$1, "-$1").toLowerCase());
        } else if (props[i + 1] === 2) {
          target[props[i]](props[i + 2]);
        } else {
          target[props[i]] = props[i + 2];
        }
      }
      if (this.tfm) {
        for (p in this.tfm) {
          cache[p] = this.tfm[p];
        }
        if (cache.svg) {
          cache.renderTransform();
          target.setAttribute("data-svg-origin", this.svgo || "");
        }
        i = _reverting();
        if ((!i || !i.isStart) && !style[_transformProp$1]) {
          _removeIndependentTransforms(style);
          if (cache.zOrigin && style[_transformOriginProp]) {
            style[_transformOriginProp] += " " + cache.zOrigin + "px";
            cache.zOrigin = 0;
            cache.renderTransform();
          }
          cache.uncache = 1;
        }
      }
    }, _getStyleSaver = function _getStyleSaver2(target, properties) {
      var saver = {
        target,
        props: [],
        revert: _revertStyle,
        save: _saveStyle
      };
      target._gsap || gsap$3.core.getCache(target);
      properties && target.style && target.nodeType && properties.split(",").forEach(function(p) {
        return saver.save(p);
      });
      return saver;
    }, _supports3D, _createElement = function _createElement2(type, ns) {
      var e = _doc$2.createElementNS ? _doc$2.createElementNS((ns || "http://www.w3.org/1999/xhtml").replace(/^https/, "http"), type) : _doc$2.createElement(type);
      return e && e.style ? e : _doc$2.createElement(type);
    }, _getComputedProperty = function _getComputedProperty2(target, property, skipPrefixFallback) {
      var cs = getComputedStyle(target);
      return cs[property] || cs.getPropertyValue(property.replace(_capsExp$1, "-$1").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty2(target, _checkPropPrefix(property) || property, 1) || "";
    }, _prefixes = "O,Moz,ms,Ms,Webkit".split(","), _checkPropPrefix = function _checkPropPrefix2(property, element, preferPrefix) {
      var e = element || _tempDiv, s = e.style, i = 5;
      if (property in s && !preferPrefix) {
        return property;
      }
      property = property.charAt(0).toUpperCase() + property.substr(1);
      while (i-- && !(_prefixes[i] + property in s)) {
      }
      return i < 0 ? null : (i === 3 ? "ms" : i >= 0 ? _prefixes[i] : "") + property;
    }, _initCore$1 = function _initCore2() {
      if (_windowExists$1() && window.document) {
        _win$2 = window;
        _doc$2 = _win$2.document;
        _docElement = _doc$2.documentElement;
        _tempDiv = _createElement("div") || {
          style: {}
        };
        _createElement("div");
        _transformProp$1 = _checkPropPrefix(_transformProp$1);
        _transformOriginProp = _transformProp$1 + "Origin";
        _tempDiv.style.cssText = "border-width:0;line-height:0;position:absolute;padding:0";
        _supports3D = !!_checkPropPrefix("perspective");
        _reverting = gsap$3.core.reverting;
        _pluginInitted = 1;
      }
    }, _getReparentedCloneBBox = function _getReparentedCloneBBox2(target) {
      var owner = target.ownerSVGElement, svg = _createElement("svg", owner && owner.getAttribute("xmlns") || "http://www.w3.org/2000/svg"), clone = target.cloneNode(true), bbox;
      clone.style.display = "block";
      svg.appendChild(clone);
      _docElement.appendChild(svg);
      try {
        bbox = clone.getBBox();
      } catch (e) {
      }
      svg.removeChild(clone);
      _docElement.removeChild(svg);
      return bbox;
    }, _getAttributeFallbacks = function _getAttributeFallbacks2(target, attributesArray) {
      var i = attributesArray.length;
      while (i--) {
        if (target.hasAttribute(attributesArray[i])) {
          return target.getAttribute(attributesArray[i]);
        }
      }
    }, _getBBox = function _getBBox2(target) {
      var bounds, cloned;
      try {
        bounds = target.getBBox();
      } catch (error) {
        bounds = _getReparentedCloneBBox(target);
        cloned = 1;
      }
      bounds && (bounds.width || bounds.height) || cloned || (bounds = _getReparentedCloneBBox(target));
      return bounds && !bounds.width && !bounds.x && !bounds.y ? {
        x: +_getAttributeFallbacks(target, ["x", "cx", "x1"]) || 0,
        y: +_getAttributeFallbacks(target, ["y", "cy", "y1"]) || 0,
        width: 0,
        height: 0
      } : bounds;
    }, _isSVG = function _isSVG2(e) {
      return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));
    }, _removeProperty = function _removeProperty2(target, property) {
      if (property) {
        var style = target.style, first2Chars;
        if (property in _transformProps && property !== _transformOriginProp) {
          property = _transformProp$1;
        }
        if (style.removeProperty) {
          first2Chars = property.substr(0, 2);
          if (first2Chars === "ms" || property.substr(0, 6) === "webkit") {
            property = "-" + property;
          }
          style.removeProperty(first2Chars === "--" ? property : property.replace(_capsExp$1, "-$1").toLowerCase());
        } else {
          style.removeAttribute(property);
        }
      }
    }, _addNonTweeningPT = function _addNonTweeningPT2(plugin, target, property, beginning, end, onlySetAtEnd) {
      var pt = new PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);
      plugin._pt = pt;
      pt.b = beginning;
      pt.e = end;
      plugin._props.push(property);
      return pt;
    }, _nonConvertibleUnits = {
      deg: 1,
      rad: 1,
      turn: 1
    }, _nonStandardLayouts = {
      grid: 1,
      flex: 1
    }, _convertToUnit = function _convertToUnit2(target, property, value, unit) {
      var curValue = parseFloat(value) || 0, curUnit = (value + "").trim().substr((curValue + "").length) || "px", style = _tempDiv.style, horizontal = _horizontalExp.test(property), isRootSVG = target.tagName.toLowerCase() === "svg", measureProperty = (isRootSVG ? "client" : "offset") + (horizontal ? "Width" : "Height"), amount = 100, toPixels = unit === "px", toPercent = unit === "%", px, parent, cache, isSVG;
      if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {
        return curValue;
      }
      curUnit !== "px" && !toPixels && (curValue = _convertToUnit2(target, property, value, "px"));
      isSVG = target.getCTM && _isSVG(target);
      if ((toPercent || curUnit === "%") && (_transformProps[property] || ~property.indexOf("adius"))) {
        px = isSVG ? target.getBBox()[horizontal ? "width" : "height"] : target[measureProperty];
        return _round$1(toPercent ? curValue / px * amount : curValue / 100 * px);
      }
      style[horizontal ? "width" : "height"] = amount + (toPixels ? curUnit : unit);
      parent = unit !== "rem" && ~property.indexOf("adius") || unit === "em" && target.appendChild && !isRootSVG ? target : target.parentNode;
      if (isSVG) {
        parent = (target.ownerSVGElement || {}).parentNode;
      }
      if (!parent || parent === _doc$2 || !parent.appendChild) {
        parent = _doc$2.body;
      }
      cache = parent._gsap;
      if (cache && toPercent && cache.width && horizontal && cache.time === _ticker.time && !cache.uncache) {
        return _round$1(curValue / cache.width * amount);
      } else {
        if (toPercent && (property === "height" || property === "width")) {
          var v = target.style[property];
          target.style[property] = amount + unit;
          px = target[measureProperty];
          v ? target.style[property] = v : _removeProperty(target, property);
        } else {
          (toPercent || curUnit === "%") && !_nonStandardLayouts[_getComputedProperty(parent, "display")] && (style.position = _getComputedProperty(target, "position"));
          parent === target && (style.position = "static");
          parent.appendChild(_tempDiv);
          px = _tempDiv[measureProperty];
          parent.removeChild(_tempDiv);
          style.position = "absolute";
        }
        if (horizontal && toPercent) {
          cache = _getCache(parent);
          cache.time = _ticker.time;
          cache.width = parent[measureProperty];
        }
      }
      return _round$1(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0);
    }, _get = function _get2(target, property, unit, uncache) {
      var value;
      _pluginInitted || _initCore$1();
      if (property in _propertyAliases && property !== "transform") {
        property = _propertyAliases[property];
        if (~property.indexOf(",")) {
          property = property.split(",")[0];
        }
      }
      if (_transformProps[property] && property !== "transform") {
        value = _parseTransform(target, uncache);
        value = property !== "transformOrigin" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + " " + value.zOrigin + "px";
      } else {
        value = target.style[property];
        if (!value || value === "auto" || uncache || ~(value + "").indexOf("calc(")) {
          value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || _getProperty(target, property) || (property === "opacity" ? 1 : 0);
        }
      }
      return unit && !~(value + "").trim().indexOf(" ") ? _convertToUnit(target, property, value, unit) + unit : value;
    }, _tweenComplexCSSString = function _tweenComplexCSSString2(target, prop, start, end) {
      if (!start || start === "none") {
        var p = _checkPropPrefix(prop, target, 1), s = p && _getComputedProperty(target, p, 1);
        if (s && s !== start) {
          prop = p;
          start = s;
        } else if (prop === "borderColor") {
          start = _getComputedProperty(target, "borderTopColor");
        }
      }
      var pt = new PropTween(this._pt, target.style, prop, 0, 1, _renderComplexString), index = 0, matchIndex = 0, a, result, startValues, startNum, color, startValue, endValue, endNum, chunk, endUnit, startUnit, endValues;
      pt.b = start;
      pt.e = end;
      start += "";
      end += "";
      if (end.substring(0, 6) === "var(--") {
        end = _getComputedProperty(target, end.substring(4, end.indexOf(")")));
      }
      if (end === "auto") {
        startValue = target.style[prop];
        target.style[prop] = end;
        end = _getComputedProperty(target, prop) || end;
        startValue ? target.style[prop] = startValue : _removeProperty(target, prop);
      }
      a = [start, end];
      _colorStringFilter(a);
      start = a[0];
      end = a[1];
      startValues = start.match(_numWithUnitExp) || [];
      endValues = end.match(_numWithUnitExp) || [];
      if (endValues.length) {
        while (result = _numWithUnitExp.exec(end)) {
          endValue = result[0];
          chunk = end.substring(index, result.index);
          if (color) {
            color = (color + 1) % 5;
          } else if (chunk.substr(-5) === "rgba(" || chunk.substr(-5) === "hsla(") {
            color = 1;
          }
          if (endValue !== (startValue = startValues[matchIndex++] || "")) {
            startNum = parseFloat(startValue) || 0;
            startUnit = startValue.substr((startNum + "").length);
            endValue.charAt(1) === "=" && (endValue = _parseRelative(startNum, endValue) + startUnit);
            endNum = parseFloat(endValue);
            endUnit = endValue.substr((endNum + "").length);
            index = _numWithUnitExp.lastIndex - endUnit.length;
            if (!endUnit) {
              endUnit = endUnit || _config.units[prop] || startUnit;
              if (index === end.length) {
                end += endUnit;
                pt.e += endUnit;
              }
            }
            if (startUnit !== endUnit) {
              startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;
            }
            pt._pt = {
              _next: pt._pt,
              p: chunk || matchIndex === 1 ? chunk : ",",
              //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.
              s: startNum,
              c: endNum - startNum,
              m: color && color < 4 || prop === "zIndex" ? Math.round : 0
            };
          }
        }
        pt.c = index < end.length ? end.substring(index, end.length) : "";
      } else {
        pt.r = prop === "display" && end === "none" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;
      }
      _relExp.test(end) && (pt.e = 0);
      this._pt = pt;
      return pt;
    }, _keywordToPercent = {
      top: "0%",
      bottom: "100%",
      left: "0%",
      right: "100%",
      center: "50%"
    }, _convertKeywordsToPercentages = function _convertKeywordsToPercentages2(value) {
      var split = value.split(" "), x = split[0], y = split[1] || "50%";
      if (x === "top" || x === "bottom" || y === "left" || y === "right") {
        value = x;
        x = y;
        y = value;
      }
      split[0] = _keywordToPercent[x] || x;
      split[1] = _keywordToPercent[y] || y;
      return split.join(" ");
    }, _renderClearProps = function _renderClearProps2(ratio, data) {
      if (data.tween && data.tween._time === data.tween._dur) {
        var target = data.t, style = target.style, props = data.u, cache = target._gsap, prop, clearTransforms, i;
        if (props === "all" || props === true) {
          style.cssText = "";
          clearTransforms = 1;
        } else {
          props = props.split(",");
          i = props.length;
          while (--i > -1) {
            prop = props[i];
            if (_transformProps[prop]) {
              clearTransforms = 1;
              prop = prop === "transformOrigin" ? _transformOriginProp : _transformProp$1;
            }
            _removeProperty(target, prop);
          }
        }
        if (clearTransforms) {
          _removeProperty(target, _transformProp$1);
          if (cache) {
            cache.svg && target.removeAttribute("transform");
            style.scale = style.rotate = style.translate = "none";
            _parseTransform(target, 1);
            cache.uncache = 1;
            _removeIndependentTransforms(style);
          }
        }
      }
    }, _specialProps = {
      clearProps: function clearProps(plugin, target, property, endValue, tween) {
        if (tween.data !== "isFromStart") {
          var pt = plugin._pt = new PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);
          pt.u = endValue;
          pt.pr = -10;
          pt.tween = tween;
          plugin._props.push(property);
          return 1;
        }
      }
      /* className feature (about 0.4kb gzipped).
      , className(plugin, target, property, endValue, tween) {
      	let _renderClassName = (ratio, data) => {
      			data.css.render(ratio, data.css);
      			if (!ratio || ratio === 1) {
      				let inline = data.rmv,
      					target = data.t,
      					p;
      				target.setAttribute("class", ratio ? data.e : data.b);
      				for (p in inline) {
      					_removeProperty(target, p);
      				}
      			}
      		},
      		_getAllStyles = (target) => {
      			let styles = {},
      				computed = getComputedStyle(target),
      				p;
      			for (p in computed) {
      				if (isNaN(p) && p !== "cssText" && p !== "length") {
      					styles[p] = computed[p];
      				}
      			}
      			_setDefaults(styles, _parseTransform(target, 1));
      			return styles;
      		},
      		startClassList = target.getAttribute("class"),
      		style = target.style,
      		cssText = style.cssText,
      		cache = target._gsap,
      		classPT = cache.classPT,
      		inlineToRemoveAtEnd = {},
      		data = {t:target, plugin:plugin, rmv:inlineToRemoveAtEnd, b:startClassList, e:(endValue.charAt(1) !== "=") ? endValue : startClassList.replace(new RegExp("(?:\\s|^)" + endValue.substr(2) + "(?![\\w-])"), "") + ((endValue.charAt(0) === "+") ? " " + endValue.substr(2) : "")},
      		changingVars = {},
      		startVars = _getAllStyles(target),
      		transformRelated = /(transform|perspective)/i,
      		endVars, p;
      	if (classPT) {
      		classPT.r(1, classPT.d);
      		_removeLinkedListItem(classPT.d.plugin, classPT, "_pt");
      	}
      	target.setAttribute("class", data.e);
      	endVars = _getAllStyles(target, true);
      	target.setAttribute("class", startClassList);
      	for (p in endVars) {
      		if (endVars[p] !== startVars[p] && !transformRelated.test(p)) {
      			changingVars[p] = endVars[p];
      			if (!style[p] && style[p] !== "0") {
      				inlineToRemoveAtEnd[p] = 1;
      			}
      		}
      	}
      	cache.classPT = plugin._pt = new PropTween(plugin._pt, target, "className", 0, 0, _renderClassName, data, 0, -11);
      	if (style.cssText !== cssText) { //only apply if things change. Otherwise, in cases like a background-image that's pulled dynamically, it could cause a refresh. See https://gsap.com/forums/topic/20368-possible-gsap-bug-switching-classnames-in-chrome/.
      		style.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).
      	}
      	_parseTransform(target, true); //to clear the caching of transforms
      	data.css = new gsap.plugins.css();
      	data.css.init(target, changingVars, tween);
      	plugin._props.push(...data.css._props);
      	return 1;
      }
      */
    }, _identity2DMatrix = [1, 0, 0, 1, 0, 0], _rotationalProperties = {}, _isNullTransform = function _isNullTransform2(value) {
      return value === "matrix(1, 0, 0, 1, 0, 0)" || value === "none" || !value;
    }, _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray2(target) {
      var matrixString = _getComputedProperty(target, _transformProp$1);
      return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_numExp).map(_round$1);
    }, _getMatrix = function _getMatrix2(target, force2D) {
      var cache = target._gsap || _getCache(target), style = target.style, matrix = _getComputedTransformMatrixAsArray(target), parent, nextSibling, temp, addedToDOM;
      if (cache.svg && target.getAttribute("transform")) {
        temp = target.transform.baseVal.consolidate().matrix;
        matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];
        return matrix.join(",") === "1,0,0,1,0,0" ? _identity2DMatrix : matrix;
      } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {
        temp = style.display;
        style.display = "block";
        parent = target.parentNode;
        if (!parent || !target.offsetParent && !target.getBoundingClientRect().width) {
          addedToDOM = 1;
          nextSibling = target.nextElementSibling;
          _docElement.appendChild(target);
        }
        matrix = _getComputedTransformMatrixAsArray(target);
        temp ? style.display = temp : _removeProperty(target, "display");
        if (addedToDOM) {
          nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target);
        }
      }
      return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;
    }, _applySVGOrigin = function _applySVGOrigin2(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {
      var cache = target._gsap, matrix = matrixArray || _getMatrix(target, true), xOriginOld = cache.xOrigin || 0, yOriginOld = cache.yOrigin || 0, xOffsetOld = cache.xOffset || 0, yOffsetOld = cache.yOffset || 0, a = matrix[0], b = matrix[1], c = matrix[2], d = matrix[3], tx = matrix[4], ty = matrix[5], originSplit = origin.split(" "), xOrigin = parseFloat(originSplit[0]) || 0, yOrigin = parseFloat(originSplit[1]) || 0, bounds, determinant, x, y;
      if (!originIsAbsolute) {
        bounds = _getBBox(target);
        xOrigin = bounds.x + (~originSplit[0].indexOf("%") ? xOrigin / 100 * bounds.width : xOrigin);
        yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf("%") ? yOrigin / 100 * bounds.height : yOrigin);
      } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {
        x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;
        y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;
        xOrigin = x;
        yOrigin = y;
      }
      if (smooth || smooth !== false && cache.smooth) {
        tx = xOrigin - xOriginOld;
        ty = yOrigin - yOriginOld;
        cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;
        cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;
      } else {
        cache.xOffset = cache.yOffset = 0;
      }
      cache.xOrigin = xOrigin;
      cache.yOrigin = yOrigin;
      cache.smooth = !!smooth;
      cache.origin = origin;
      cache.originIsAbsolute = !!originIsAbsolute;
      target.style[_transformOriginProp] = "0px 0px";
      if (pluginToAddPropTweensTo) {
        _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOrigin", xOriginOld, xOrigin);
        _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOrigin", yOriginOld, yOrigin);
        _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOffset", xOffsetOld, cache.xOffset);
        _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOffset", yOffsetOld, cache.yOffset);
      }
      target.setAttribute("data-svg-origin", xOrigin + " " + yOrigin);
    }, _parseTransform = function _parseTransform2(target, uncache) {
      var cache = target._gsap || new GSCache(target);
      if ("x" in cache && !uncache && !cache.uncache) {
        return cache;
      }
      var style = target.style, invertedScaleX = cache.scaleX < 0, px = "px", deg = "deg", cs = getComputedStyle(target), origin = _getComputedProperty(target, _transformOriginProp) || "0", x, y, z, scaleX, scaleY, rotation, rotationX, rotationY, skewX, skewY, perspective, xOrigin, yOrigin, matrix, angle, cos, sin, a, b, c, d, a12, a22, t1, t2, t3, a13, a23, a33, a42, a43, a32;
      x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;
      scaleX = scaleY = 1;
      cache.svg = !!(target.getCTM && _isSVG(target));
      if (cs.translate) {
        if (cs.translate !== "none" || cs.scale !== "none" || cs.rotate !== "none") {
          style[_transformProp$1] = (cs.translate !== "none" ? "translate3d(" + (cs.translate + " 0 0").split(" ").slice(0, 3).join(", ") + ") " : "") + (cs.rotate !== "none" ? "rotate(" + cs.rotate + ") " : "") + (cs.scale !== "none" ? "scale(" + cs.scale.split(" ").join(",") + ") " : "") + (cs[_transformProp$1] !== "none" ? cs[_transformProp$1] : "");
        }
        style.scale = style.rotate = style.translate = "none";
      }
      matrix = _getMatrix(target, cache.svg);
      if (cache.svg) {
        if (cache.uncache) {
          t2 = target.getBBox();
          origin = cache.xOrigin - t2.x + "px " + (cache.yOrigin - t2.y) + "px";
          t1 = "";
        } else {
          t1 = !uncache && target.getAttribute("data-svg-origin");
        }
        _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix);
      }
      xOrigin = cache.xOrigin || 0;
      yOrigin = cache.yOrigin || 0;
      if (matrix !== _identity2DMatrix) {
        a = matrix[0];
        b = matrix[1];
        c = matrix[2];
        d = matrix[3];
        x = a12 = matrix[4];
        y = a22 = matrix[5];
        if (matrix.length === 6) {
          scaleX = Math.sqrt(a * a + b * b);
          scaleY = Math.sqrt(d * d + c * c);
          rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0;
          skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;
          skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD)));
          if (cache.svg) {
            x -= xOrigin - (xOrigin * a + yOrigin * c);
            y -= yOrigin - (xOrigin * b + yOrigin * d);
          }
        } else {
          a32 = matrix[6];
          a42 = matrix[7];
          a13 = matrix[8];
          a23 = matrix[9];
          a33 = matrix[10];
          a43 = matrix[11];
          x = matrix[12];
          y = matrix[13];
          z = matrix[14];
          angle = _atan2(a32, a33);
          rotationX = angle * _RAD2DEG;
          if (angle) {
            cos = Math.cos(-angle);
            sin = Math.sin(-angle);
            t1 = a12 * cos + a13 * sin;
            t2 = a22 * cos + a23 * sin;
            t3 = a32 * cos + a33 * sin;
            a13 = a12 * -sin + a13 * cos;
            a23 = a22 * -sin + a23 * cos;
            a33 = a32 * -sin + a33 * cos;
            a43 = a42 * -sin + a43 * cos;
            a12 = t1;
            a22 = t2;
            a32 = t3;
          }
          angle = _atan2(-c, a33);
          rotationY = angle * _RAD2DEG;
          if (angle) {
            cos = Math.cos(-angle);
            sin = Math.sin(-angle);
            t1 = a * cos - a13 * sin;
            t2 = b * cos - a23 * sin;
            t3 = c * cos - a33 * sin;
            a43 = d * sin + a43 * cos;
            a = t1;
            b = t2;
            c = t3;
          }
          angle = _atan2(b, a);
          rotation = angle * _RAD2DEG;
          if (angle) {
            cos = Math.cos(angle);
            sin = Math.sin(angle);
            t1 = a * cos + b * sin;
            t2 = a12 * cos + a22 * sin;
            b = b * cos - a * sin;
            a22 = a22 * cos - a12 * sin;
            a = t1;
            a12 = t2;
          }
          if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {
            rotationX = rotation = 0;
            rotationY = 180 - rotationY;
          }
          scaleX = _round$1(Math.sqrt(a * a + b * b + c * c));
          scaleY = _round$1(Math.sqrt(a22 * a22 + a32 * a32));
          angle = _atan2(a12, a22);
          skewX = Math.abs(angle) > 2e-4 ? angle * _RAD2DEG : 0;
          perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;
        }
        if (cache.svg) {
          t1 = target.getAttribute("transform");
          cache.forceCSS = target.setAttribute("transform", "") || !_isNullTransform(_getComputedProperty(target, _transformProp$1));
          t1 && target.setAttribute("transform", t1);
        }
      }
      if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {
        if (invertedScaleX) {
          scaleX *= -1;
          skewX += rotation <= 0 ? 180 : -180;
          rotation += rotation <= 0 ? 180 : -180;
        } else {
          scaleY *= -1;
          skewX += skewX <= 0 ? 180 : -180;
        }
      }
      uncache = uncache || cache.uncache;
      cache.x = x - ((cache.xPercent = x && (!uncache && cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px;
      cache.y = y - ((cache.yPercent = y && (!uncache && cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px;
      cache.z = z + px;
      cache.scaleX = _round$1(scaleX);
      cache.scaleY = _round$1(scaleY);
      cache.rotation = _round$1(rotation) + deg;
      cache.rotationX = _round$1(rotationX) + deg;
      cache.rotationY = _round$1(rotationY) + deg;
      cache.skewX = skewX + deg;
      cache.skewY = skewY + deg;
      cache.transformPerspective = perspective + px;
      if (cache.zOrigin = parseFloat(origin.split(" ")[2]) || !uncache && cache.zOrigin || 0) {
        style[_transformOriginProp] = _firstTwoOnly(origin);
      }
      cache.xOffset = cache.yOffset = 0;
      cache.force3D = _config.force3D;
      cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;
      cache.uncache = 0;
      return cache;
    }, _firstTwoOnly = function _firstTwoOnly2(value) {
      return (value = value.split(" "))[0] + " " + value[1];
    }, _addPxTranslate = function _addPxTranslate2(target, start, value) {
      var unit = getUnit(start);
      return _round$1(parseFloat(start) + parseFloat(_convertToUnit(target, "x", value + "px", unit))) + unit;
    }, _renderNon3DTransforms = function _renderNon3DTransforms2(ratio, cache) {
      cache.z = "0px";
      cache.rotationY = cache.rotationX = "0deg";
      cache.force3D = 0;
      _renderCSSTransforms(ratio, cache);
    }, _zeroDeg = "0deg", _zeroPx = "0px", _endParenthesis = ") ", _renderCSSTransforms = function _renderCSSTransforms2(ratio, cache) {
      var _ref = cache || this, xPercent = _ref.xPercent, yPercent = _ref.yPercent, x = _ref.x, y = _ref.y, z = _ref.z, rotation = _ref.rotation, rotationY = _ref.rotationY, rotationX = _ref.rotationX, skewX = _ref.skewX, skewY = _ref.skewY, scaleX = _ref.scaleX, scaleY = _ref.scaleY, transformPerspective = _ref.transformPerspective, force3D = _ref.force3D, target = _ref.target, zOrigin = _ref.zOrigin, transforms = "", use3D = force3D === "auto" && ratio && ratio !== 1 || force3D === true;
      if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {
        var angle = parseFloat(rotationY) * _DEG2RAD, a13 = Math.sin(angle), a33 = Math.cos(angle), cos;
        angle = parseFloat(rotationX) * _DEG2RAD;
        cos = Math.cos(angle);
        x = _addPxTranslate(target, x, a13 * cos * -zOrigin);
        y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);
        z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);
      }
      if (transformPerspective !== _zeroPx) {
        transforms += "perspective(" + transformPerspective + _endParenthesis;
      }
      if (xPercent || yPercent) {
        transforms += "translate(" + xPercent + "%, " + yPercent + "%) ";
      }
      if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {
        transforms += z !== _zeroPx || use3D ? "translate3d(" + x + ", " + y + ", " + z + ") " : "translate(" + x + ", " + y + _endParenthesis;
      }
      if (rotation !== _zeroDeg) {
        transforms += "rotate(" + rotation + _endParenthesis;
      }
      if (rotationY !== _zeroDeg) {
        transforms += "rotateY(" + rotationY + _endParenthesis;
      }
      if (rotationX !== _zeroDeg) {
        transforms += "rotateX(" + rotationX + _endParenthesis;
      }
      if (skewX !== _zeroDeg || skewY !== _zeroDeg) {
        transforms += "skew(" + skewX + ", " + skewY + _endParenthesis;
      }
      if (scaleX !== 1 || scaleY !== 1) {
        transforms += "scale(" + scaleX + ", " + scaleY + _endParenthesis;
      }
      target.style[_transformProp$1] = transforms || "translate(0, 0)";
    }, _renderSVGTransforms = function _renderSVGTransforms2(ratio, cache) {
      var _ref2 = cache || this, xPercent = _ref2.xPercent, yPercent = _ref2.yPercent, x = _ref2.x, y = _ref2.y, rotation = _ref2.rotation, skewX = _ref2.skewX, skewY = _ref2.skewY, scaleX = _ref2.scaleX, scaleY = _ref2.scaleY, target = _ref2.target, xOrigin = _ref2.xOrigin, yOrigin = _ref2.yOrigin, xOffset = _ref2.xOffset, yOffset = _ref2.yOffset, forceCSS = _ref2.forceCSS, tx = parseFloat(x), ty = parseFloat(y), a11, a21, a12, a22, temp;
      rotation = parseFloat(rotation);
      skewX = parseFloat(skewX);
      skewY = parseFloat(skewY);
      if (skewY) {
        skewY = parseFloat(skewY);
        skewX += skewY;
        rotation += skewY;
      }
      if (rotation || skewX) {
        rotation *= _DEG2RAD;
        skewX *= _DEG2RAD;
        a11 = Math.cos(rotation) * scaleX;
        a21 = Math.sin(rotation) * scaleX;
        a12 = Math.sin(rotation - skewX) * -scaleY;
        a22 = Math.cos(rotation - skewX) * scaleY;
        if (skewX) {
          skewY *= _DEG2RAD;
          temp = Math.tan(skewX - skewY);
          temp = Math.sqrt(1 + temp * temp);
          a12 *= temp;
          a22 *= temp;
          if (skewY) {
            temp = Math.tan(skewY);
            temp = Math.sqrt(1 + temp * temp);
            a11 *= temp;
            a21 *= temp;
          }
        }
        a11 = _round$1(a11);
        a21 = _round$1(a21);
        a12 = _round$1(a12);
        a22 = _round$1(a22);
      } else {
        a11 = scaleX;
        a22 = scaleY;
        a21 = a12 = 0;
      }
      if (tx && !~(x + "").indexOf("px") || ty && !~(y + "").indexOf("px")) {
        tx = _convertToUnit(target, "x", x, "px");
        ty = _convertToUnit(target, "y", y, "px");
      }
      if (xOrigin || yOrigin || xOffset || yOffset) {
        tx = _round$1(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);
        ty = _round$1(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);
      }
      if (xPercent || yPercent) {
        temp = target.getBBox();
        tx = _round$1(tx + xPercent / 100 * temp.width);
        ty = _round$1(ty + yPercent / 100 * temp.height);
      }
      temp = "matrix(" + a11 + "," + a21 + "," + a12 + "," + a22 + "," + tx + "," + ty + ")";
      target.setAttribute("transform", temp);
      forceCSS && (target.style[_transformProp$1] = temp);
    }, _addRotationalPropTween = function _addRotationalPropTween2(plugin, target, property, startNum, endValue) {
      var cap = 360, isString = _isString$1(endValue), endNum = parseFloat(endValue) * (isString && ~endValue.indexOf("rad") ? _RAD2DEG : 1), change = endNum - startNum, finalValue = startNum + change + "deg", direction, pt;
      if (isString) {
        direction = endValue.split("_")[1];
        if (direction === "short") {
          change %= cap;
          if (change !== change % (cap / 2)) {
            change += change < 0 ? cap : -cap;
          }
        }
        if (direction === "cw" && change < 0) {
          change = (change + cap * _bigNum) % cap - ~~(change / cap) * cap;
        } else if (direction === "ccw" && change > 0) {
          change = (change - cap * _bigNum) % cap - ~~(change / cap) * cap;
        }
      }
      plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);
      pt.e = finalValue;
      pt.u = "deg";
      plugin._props.push(property);
      return pt;
    }, _assign = function _assign2(target, source) {
      for (var p in source) {
        target[p] = source[p];
      }
      return target;
    }, _addRawTransformPTs = function _addRawTransformPTs2(plugin, transforms, target) {
      var startCache = _assign({}, target._gsap), exclude = "perspective,force3D,transformOrigin,svgOrigin", style = target.style, endCache, p, startValue, endValue, startNum, endNum, startUnit, endUnit;
      if (startCache.svg) {
        startValue = target.getAttribute("transform");
        target.setAttribute("transform", "");
        style[_transformProp$1] = transforms;
        endCache = _parseTransform(target, 1);
        _removeProperty(target, _transformProp$1);
        target.setAttribute("transform", startValue);
      } else {
        startValue = getComputedStyle(target)[_transformProp$1];
        style[_transformProp$1] = transforms;
        endCache = _parseTransform(target, 1);
        style[_transformProp$1] = startValue;
      }
      for (p in _transformProps) {
        startValue = startCache[p];
        endValue = endCache[p];
        if (startValue !== endValue && exclude.indexOf(p) < 0) {
          startUnit = getUnit(startValue);
          endUnit = getUnit(endValue);
          startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);
          endNum = parseFloat(endValue);
          plugin._pt = new PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp);
          plugin._pt.u = endUnit || 0;
          plugin._props.push(p);
        }
      }
      _assign(endCache, startCache);
    };
    _forEachName("padding,margin,Width,Radius", function(name, index) {
      var t = "Top", r = "Right", b = "Bottom", l = "Left", props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function(side) {
        return index < 2 ? name + side : "border" + side + name;
      });
      _specialProps[index > 1 ? "border" + name : name] = function(plugin, target, property, endValue, tween) {
        var a, vars;
        if (arguments.length < 4) {
          a = props.map(function(prop) {
            return _get(plugin, prop, property);
          });
          vars = a.join(" ");
          return vars.split(a[0]).length === 5 ? a[0] : vars;
        }
        a = (endValue + "").split(" ");
        vars = {};
        props.forEach(function(prop, i) {
          return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];
        });
        plugin.init(target, vars, tween);
      };
    });
    var CSSPlugin = {
      name: "css",
      register: _initCore$1,
      targetTest: function targetTest(target) {
        return target.style && target.nodeType;
      },
      init: function init3(target, vars, tween, index, targets) {
        var props = this._props, style = target.style, startAt = tween.vars.startAt, startValue, endValue, endNum, startNum, type, specialProp, p, startUnit, endUnit, relative, isTransformRelated, transformPropTween, cache, smooth, hasPriority, inlineProps;
        _pluginInitted || _initCore$1();
        this.styles = this.styles || _getStyleSaver(target);
        inlineProps = this.styles.props;
        this.tween = tween;
        for (p in vars) {
          if (p === "autoRound") {
            continue;
          }
          endValue = vars[p];
          if (_plugins[p] && _checkPlugin(p, vars, tween, index, target, targets)) {
            continue;
          }
          type = typeof endValue;
          specialProp = _specialProps[p];
          if (type === "function") {
            endValue = endValue.call(tween, index, target, targets);
            type = typeof endValue;
          }
          if (type === "string" && ~endValue.indexOf("random(")) {
            endValue = _replaceRandom(endValue);
          }
          if (specialProp) {
            specialProp(this, target, p, endValue, tween) && (hasPriority = 1);
          } else if (p.substr(0, 2) === "--") {
            startValue = (getComputedStyle(target).getPropertyValue(p) + "").trim();
            endValue += "";
            _colorExp.lastIndex = 0;
            if (!_colorExp.test(startValue)) {
              startUnit = getUnit(startValue);
              endUnit = getUnit(endValue);
            }
            endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit);
            this.add(style, "setProperty", startValue, endValue, index, targets, 0, 0, p);
            props.push(p);
            inlineProps.push(p, 0, style[p]);
          } else if (type !== "undefined") {
            if (startAt && p in startAt) {
              startValue = typeof startAt[p] === "function" ? startAt[p].call(tween, index, target, targets) : startAt[p];
              _isString$1(startValue) && ~startValue.indexOf("random(") && (startValue = _replaceRandom(startValue));
              getUnit(startValue + "") || startValue === "auto" || (startValue += _config.units[p] || getUnit(_get(target, p)) || "");
              (startValue + "").charAt(1) === "=" && (startValue = _get(target, p));
            } else {
              startValue = _get(target, p);
            }
            startNum = parseFloat(startValue);
            relative = type === "string" && endValue.charAt(1) === "=" && endValue.substr(0, 2);
            relative && (endValue = endValue.substr(2));
            endNum = parseFloat(endValue);
            if (p in _propertyAliases) {
              if (p === "autoAlpha") {
                if (startNum === 1 && _get(target, "visibility") === "hidden" && endNum) {
                  startNum = 0;
                }
                inlineProps.push("visibility", 0, style.visibility);
                _addNonTweeningPT(this, style, "visibility", startNum ? "inherit" : "hidden", endNum ? "inherit" : "hidden", !endNum);
              }
              if (p !== "scale" && p !== "transform") {
                p = _propertyAliases[p];
                ~p.indexOf(",") && (p = p.split(",")[0]);
              }
            }
            isTransformRelated = p in _transformProps;
            if (isTransformRelated) {
              this.styles.save(p);
              if (type === "string" && endValue.substring(0, 6) === "var(--") {
                endValue = _getComputedProperty(target, endValue.substring(4, endValue.indexOf(")")));
                endNum = parseFloat(endValue);
              }
              if (!transformPropTween) {
                cache = target._gsap;
                cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform);
                smooth = vars.smoothOrigin !== false && cache.smooth;
                transformPropTween = this._pt = new PropTween(this._pt, style, _transformProp$1, 0, 1, cache.renderTransform, cache, 0, -1);
                transformPropTween.dep = 1;
              }
              if (p === "scale") {
                this._pt = new PropTween(this._pt, cache, "scaleY", cache.scaleY, (relative ? _parseRelative(cache.scaleY, relative + endNum) : endNum) - cache.scaleY || 0, _renderCSSProp);
                this._pt.u = 0;
                props.push("scaleY", p);
                p += "X";
              } else if (p === "transformOrigin") {
                inlineProps.push(_transformOriginProp, 0, style[_transformOriginProp]);
                endValue = _convertKeywordsToPercentages(endValue);
                if (cache.svg) {
                  _applySVGOrigin(target, endValue, 0, smooth, 0, this);
                } else {
                  endUnit = parseFloat(endValue.split(" ")[2]) || 0;
                  endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, "zOrigin", cache.zOrigin, endUnit);
                  _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));
                }
                continue;
              } else if (p === "svgOrigin") {
                _applySVGOrigin(target, endValue, 1, smooth, 0, this);
                continue;
              } else if (p in _rotationalProperties) {
                _addRotationalPropTween(this, cache, p, startNum, relative ? _parseRelative(startNum, relative + endValue) : endValue);
                continue;
              } else if (p === "smoothOrigin") {
                _addNonTweeningPT(this, cache, "smooth", cache.smooth, endValue);
                continue;
              } else if (p === "force3D") {
                cache[p] = endValue;
                continue;
              } else if (p === "transform") {
                _addRawTransformPTs(this, endValue, target);
                continue;
              }
            } else if (!(p in style)) {
              p = _checkPropPrefix(p) || p;
            }
            if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {
              startUnit = (startValue + "").substr((startNum + "").length);
              endNum || (endNum = 0);
              endUnit = getUnit(endValue) || (p in _config.units ? _config.units[p] : startUnit);
              startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit));
              this._pt = new PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, (relative ? _parseRelative(startNum, relative + endNum) : endNum) - startNum, !isTransformRelated && (endUnit === "px" || p === "zIndex") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp);
              this._pt.u = endUnit || 0;
              if (startUnit !== endUnit && endUnit !== "%") {
                this._pt.b = startValue;
                this._pt.r = _renderCSSPropWithBeginning;
              }
            } else if (!(p in style)) {
              if (p in target) {
                this.add(target, p, startValue || target[p], relative ? relative + endValue : endValue, index, targets);
              } else if (p !== "parseTransform") {
                _missingPlugin(p, endValue);
                continue;
              }
            } else {
              _tweenComplexCSSString.call(this, target, p, startValue, relative ? relative + endValue : endValue);
            }
            isTransformRelated || (p in style ? inlineProps.push(p, 0, style[p]) : typeof target[p] === "function" ? inlineProps.push(p, 2, target[p]()) : inlineProps.push(p, 1, startValue || target[p]));
            props.push(p);
          }
        }
        hasPriority && _sortPropTweensByPriority(this);
      },
      render: function render2(ratio, data) {
        if (data.tween._time || !_reverting()) {
          var pt = data._pt;
          while (pt) {
            pt.r(ratio, pt.d);
            pt = pt._next;
          }
        } else {
          data.styles.revert();
        }
      },
      get: _get,
      aliases: _propertyAliases,
      getSetter: function getSetter(target, property, plugin) {
        var p = _propertyAliases[property];
        p && p.indexOf(",") < 0 && (property = p);
        return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, "x")) ? plugin && _recentSetterPlugin === plugin ? property === "scale" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === "scale" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !_isUndefined(target.style[property]) ? _setterCSSStyle : ~property.indexOf("-") ? _setterCSSProp : _getSetter(target, property);
      },
      core: {
        _removeProperty,
        _getMatrix
      }
    };
    gsap$3.utils.checkPrefix = _checkPropPrefix;
    gsap$3.core.getStyleSaver = _getStyleSaver;
    (function(positionAndScale, rotation, others, aliases) {
      var all = _forEachName(positionAndScale + "," + rotation + "," + others, function(name) {
        _transformProps[name] = 1;
      });
      _forEachName(rotation, function(name) {
        _config.units[name] = "deg";
        _rotationalProperties[name] = 1;
      });
      _propertyAliases[all[13]] = positionAndScale + "," + rotation;
      _forEachName(aliases, function(name) {
        var split = name.split(":");
        _propertyAliases[split[1]] = all[split[0]];
      });
    })("x,y,z,scale,scaleX,scaleY,xPercent,yPercent", "rotation,rotationX,rotationY,skewX,skewY", "transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective", "0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY");
    _forEachName("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective", function(name) {
      _config.units[name] = "px";
    });
    gsap$3.registerPlugin(CSSPlugin);
    var gsapWithCSS = gsap$3.registerPlugin(CSSPlugin) || gsap$3;
    gsapWithCSS.core.Tween;
    function _defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
        var descriptor = props[i];
        descriptor.enumerable = descriptor.enumerable || false;
        descriptor.configurable = true;
        if ("value" in descriptor) descriptor.writable = true;
        Object.defineProperty(target, descriptor.key, descriptor);
      }
    }
    function _createClass(Constructor, protoProps, staticProps) {
      if (protoProps) _defineProperties(Constructor.prototype, protoProps);
      return Constructor;
    }
    /*!
     * Observer 3.13.0
     * https://gsap.com
     *
     * @license Copyright 2008-2025, GreenSock. All rights reserved.
     * Subject to the terms at https://gsap.com/standard-license
     * @author: Jack Doyle, jack@greensock.com
    */
    var gsap$2, _coreInitted$2, _win$1, _doc$1, _docEl$1, _body$1, _isTouch, _pointerType, ScrollTrigger$1, _root$1, _normalizer$1, _eventTypes, _context$2, _getGSAP$1 = function _getGSAP() {
      return gsap$2 || typeof window !== "undefined" && (gsap$2 = window.gsap) && gsap$2.registerPlugin && gsap$2;
    }, _startup$1 = 1, _observers = [], _scrollers = [], _proxies = [], _getTime$1 = Date.now, _bridge = function _bridge2(name, value) {
      return value;
    }, _integrate = function _integrate2() {
      var core = ScrollTrigger$1.core, data = core.bridge || {}, scrollers = core._scrollers, proxies = core._proxies;
      scrollers.push.apply(scrollers, _scrollers);
      proxies.push.apply(proxies, _proxies);
      _scrollers = scrollers;
      _proxies = proxies;
      _bridge = function _bridge3(name, value) {
        return data[name](value);
      };
    }, _getProxyProp = function _getProxyProp2(element, property) {
      return ~_proxies.indexOf(element) && _proxies[_proxies.indexOf(element) + 1][property];
    }, _isViewport$1 = function _isViewport(el) {
      return !!~_root$1.indexOf(el);
    }, _addListener$1 = function _addListener(element, type, func, passive, capture) {
      return element.addEventListener(type, func, {
        passive: passive !== false,
        capture: !!capture
      });
    }, _removeListener$1 = function _removeListener(element, type, func, capture) {
      return element.removeEventListener(type, func, !!capture);
    }, _scrollLeft = "scrollLeft", _scrollTop = "scrollTop", _onScroll$1 = function _onScroll() {
      return _normalizer$1 && _normalizer$1.isPressed || _scrollers.cache++;
    }, _scrollCacheFunc = function _scrollCacheFunc2(f, doNotCache) {
      var cachingFunc = function cachingFunc2(value) {
        if (value || value === 0) {
          _startup$1 && (_win$1.history.scrollRestoration = "manual");
          var isNormalizing = _normalizer$1 && _normalizer$1.isPressed;
          value = cachingFunc2.v = Math.round(value) || (_normalizer$1 && _normalizer$1.iOS ? 1 : 0);
          f(value);
          cachingFunc2.cacheID = _scrollers.cache;
          isNormalizing && _bridge("ss", value);
        } else if (doNotCache || _scrollers.cache !== cachingFunc2.cacheID || _bridge("ref")) {
          cachingFunc2.cacheID = _scrollers.cache;
          cachingFunc2.v = f();
        }
        return cachingFunc2.v + cachingFunc2.offset;
      };
      cachingFunc.offset = 0;
      return f && cachingFunc;
    }, _horizontal = {
      s: _scrollLeft,
      p: "left",
      p2: "Left",
      os: "right",
      os2: "Right",
      d: "width",
      d2: "Width",
      a: "x",
      sc: _scrollCacheFunc(function(value) {
        return arguments.length ? _win$1.scrollTo(value, _vertical.sc()) : _win$1.pageXOffset || _doc$1[_scrollLeft] || _docEl$1[_scrollLeft] || _body$1[_scrollLeft] || 0;
      })
    }, _vertical = {
      s: _scrollTop,
      p: "top",
      p2: "Top",
      os: "bottom",
      os2: "Bottom",
      d: "height",
      d2: "Height",
      a: "y",
      op: _horizontal,
      sc: _scrollCacheFunc(function(value) {
        return arguments.length ? _win$1.scrollTo(_horizontal.sc(), value) : _win$1.pageYOffset || _doc$1[_scrollTop] || _docEl$1[_scrollTop] || _body$1[_scrollTop] || 0;
      })
    }, _getTarget = function _getTarget2(t, self) {
      return (self && self._ctx && self._ctx.selector || gsap$2.utils.toArray)(t)[0] || (typeof t === "string" && gsap$2.config().nullTargetWarn !== false ? console.warn("Element not found:", t) : null);
    }, _isWithin = function _isWithin2(element, list) {
      var i = list.length;
      while (i--) {
        if (list[i] === element || list[i].contains(element)) {
          return true;
        }
      }
      return false;
    }, _getScrollFunc = function _getScrollFunc2(element, _ref) {
      var s = _ref.s, sc = _ref.sc;
      _isViewport$1(element) && (element = _doc$1.scrollingElement || _docEl$1);
      var i = _scrollers.indexOf(element), offset = sc === _vertical.sc ? 1 : 2;
      !~i && (i = _scrollers.push(element) - 1);
      _scrollers[i + offset] || _addListener$1(element, "scroll", _onScroll$1);
      var prev = _scrollers[i + offset], func = prev || (_scrollers[i + offset] = _scrollCacheFunc(_getProxyProp(element, s), true) || (_isViewport$1(element) ? sc : _scrollCacheFunc(function(value) {
        return arguments.length ? element[s] = value : element[s];
      })));
      func.target = element;
      prev || (func.smooth = gsap$2.getProperty(element, "scrollBehavior") === "smooth");
      return func;
    }, _getVelocityProp = function _getVelocityProp2(value, minTimeRefresh, useDelta) {
      var v12 = value, v22 = value, t1 = _getTime$1(), t2 = t1, min = minTimeRefresh || 50, dropToZeroTime = Math.max(500, min * 3), update = function update2(value2, force) {
        var t = _getTime$1();
        if (force || t - t1 > min) {
          v22 = v12;
          v12 = value2;
          t2 = t1;
          t1 = t;
        } else if (useDelta) {
          v12 += value2;
        } else {
          v12 = v22 + (value2 - v22) / (t - t2) * (t1 - t2);
        }
      }, reset = function reset2() {
        v22 = v12 = useDelta ? 0 : v12;
        t2 = t1 = 0;
      }, getVelocity = function getVelocity2(latestValue) {
        var tOld = t2, vOld = v22, t = _getTime$1();
        (latestValue || latestValue === 0) && latestValue !== v12 && update(latestValue);
        return t1 === t2 || t - t2 > dropToZeroTime ? 0 : (v12 + (useDelta ? vOld : -vOld)) / ((useDelta ? t : t1) - tOld) * 1e3;
      };
      return {
        update,
        reset,
        getVelocity
      };
    }, _getEvent = function _getEvent2(e, preventDefault) {
      preventDefault && !e._gsapAllow && e.preventDefault();
      return e.changedTouches ? e.changedTouches[0] : e;
    }, _getAbsoluteMax = function _getAbsoluteMax2(a) {
      var max = Math.max.apply(Math, a), min = Math.min.apply(Math, a);
      return Math.abs(max) >= Math.abs(min) ? max : min;
    }, _setScrollTrigger = function _setScrollTrigger2() {
      ScrollTrigger$1 = gsap$2.core.globals().ScrollTrigger;
      ScrollTrigger$1 && ScrollTrigger$1.core && _integrate();
    }, _initCore = function _initCore3(core) {
      gsap$2 = core || _getGSAP$1();
      if (!_coreInitted$2 && gsap$2 && typeof document !== "undefined" && document.body) {
        _win$1 = window;
        _doc$1 = document;
        _docEl$1 = _doc$1.documentElement;
        _body$1 = _doc$1.body;
        _root$1 = [_win$1, _doc$1, _docEl$1, _body$1];
        gsap$2.utils.clamp;
        _context$2 = gsap$2.core.context || function() {
        };
        _pointerType = "onpointerenter" in _body$1 ? "pointer" : "mouse";
        _isTouch = Observer.isTouch = _win$1.matchMedia && _win$1.matchMedia("(hover: none), (pointer: coarse)").matches ? 1 : "ontouchstart" in _win$1 || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 ? 2 : 0;
        _eventTypes = Observer.eventTypes = ("ontouchstart" in _docEl$1 ? "touchstart,touchmove,touchcancel,touchend" : !("onpointerdown" in _docEl$1) ? "mousedown,mousemove,mouseup,mouseup" : "pointerdown,pointermove,pointercancel,pointerup").split(",");
        setTimeout(function() {
          return _startup$1 = 0;
        }, 500);
        _setScrollTrigger();
        _coreInitted$2 = 1;
      }
      return _coreInitted$2;
    };
    _horizontal.op = _vertical;
    _scrollers.cache = 0;
    var Observer = /* @__PURE__ */ function() {
      function Observer2(vars) {
        this.init(vars);
      }
      var _proto = Observer2.prototype;
      _proto.init = function init4(vars) {
        _coreInitted$2 || _initCore(gsap$2) || console.warn("Please gsap.registerPlugin(Observer)");
        ScrollTrigger$1 || _setScrollTrigger();
        var tolerance = vars.tolerance, dragMinimum = vars.dragMinimum, type = vars.type, target = vars.target, lineHeight = vars.lineHeight, debounce = vars.debounce, preventDefault = vars.preventDefault, onStop = vars.onStop, onStopDelay = vars.onStopDelay, ignore = vars.ignore, wheelSpeed = vars.wheelSpeed, event = vars.event, onDragStart = vars.onDragStart, onDragEnd = vars.onDragEnd, onDrag = vars.onDrag, onPress = vars.onPress, onRelease = vars.onRelease, onRight = vars.onRight, onLeft = vars.onLeft, onUp = vars.onUp, onDown = vars.onDown, onChangeX = vars.onChangeX, onChangeY = vars.onChangeY, onChange = vars.onChange, onToggleX = vars.onToggleX, onToggleY = vars.onToggleY, onHover = vars.onHover, onHoverEnd = vars.onHoverEnd, onMove = vars.onMove, ignoreCheck = vars.ignoreCheck, isNormalizer = vars.isNormalizer, onGestureStart = vars.onGestureStart, onGestureEnd = vars.onGestureEnd, onWheel = vars.onWheel, onEnable = vars.onEnable, onDisable = vars.onDisable, onClick = vars.onClick, scrollSpeed = vars.scrollSpeed, capture = vars.capture, allowClicks = vars.allowClicks, lockAxis = vars.lockAxis, onLockAxis = vars.onLockAxis;
        this.target = target = _getTarget(target) || _docEl$1;
        this.vars = vars;
        ignore && (ignore = gsap$2.utils.toArray(ignore));
        tolerance = tolerance || 1e-9;
        dragMinimum = dragMinimum || 0;
        wheelSpeed = wheelSpeed || 1;
        scrollSpeed = scrollSpeed || 1;
        type = type || "wheel,touch,pointer";
        debounce = debounce !== false;
        lineHeight || (lineHeight = parseFloat(_win$1.getComputedStyle(_body$1).lineHeight) || 22);
        var id, onStopDelayedCall, dragged, moved, wheeled, locked, axis, self = this, prevDeltaX = 0, prevDeltaY = 0, passive = vars.passive || !preventDefault && vars.passive !== false, scrollFuncX = _getScrollFunc(target, _horizontal), scrollFuncY = _getScrollFunc(target, _vertical), scrollX = scrollFuncX(), scrollY = scrollFuncY(), limitToTouch = ~type.indexOf("touch") && !~type.indexOf("pointer") && _eventTypes[0] === "pointerdown", isViewport = _isViewport$1(target), ownerDoc = target.ownerDocument || _doc$1, deltaX = [0, 0, 0], deltaY = [0, 0, 0], onClickTime = 0, clickCapture = function clickCapture2() {
          return onClickTime = _getTime$1();
        }, _ignoreCheck = function _ignoreCheck2(e, isPointerOrTouch) {
          return (self.event = e) && ignore && _isWithin(e.target, ignore) || isPointerOrTouch && limitToTouch && e.pointerType !== "touch" || ignoreCheck && ignoreCheck(e, isPointerOrTouch);
        }, onStopFunc = function onStopFunc2() {
          self._vx.reset();
          self._vy.reset();
          onStopDelayedCall.pause();
          onStop && onStop(self);
        }, update = function update2() {
          var dx = self.deltaX = _getAbsoluteMax(deltaX), dy = self.deltaY = _getAbsoluteMax(deltaY), changedX = Math.abs(dx) >= tolerance, changedY = Math.abs(dy) >= tolerance;
          onChange && (changedX || changedY) && onChange(self, dx, dy, deltaX, deltaY);
          if (changedX) {
            onRight && self.deltaX > 0 && onRight(self);
            onLeft && self.deltaX < 0 && onLeft(self);
            onChangeX && onChangeX(self);
            onToggleX && self.deltaX < 0 !== prevDeltaX < 0 && onToggleX(self);
            prevDeltaX = self.deltaX;
            deltaX[0] = deltaX[1] = deltaX[2] = 0;
          }
          if (changedY) {
            onDown && self.deltaY > 0 && onDown(self);
            onUp && self.deltaY < 0 && onUp(self);
            onChangeY && onChangeY(self);
            onToggleY && self.deltaY < 0 !== prevDeltaY < 0 && onToggleY(self);
            prevDeltaY = self.deltaY;
            deltaY[0] = deltaY[1] = deltaY[2] = 0;
          }
          if (moved || dragged) {
            onMove && onMove(self);
            if (dragged) {
              onDragStart && dragged === 1 && onDragStart(self);
              onDrag && onDrag(self);
              dragged = 0;
            }
            moved = false;
          }
          locked && !(locked = false) && onLockAxis && onLockAxis(self);
          if (wheeled) {
            onWheel(self);
            wheeled = false;
          }
          id = 0;
        }, onDelta = function onDelta2(x, y, index) {
          deltaX[index] += x;
          deltaY[index] += y;
          self._vx.update(x);
          self._vy.update(y);
          debounce ? id || (id = requestAnimationFrame(update)) : update();
        }, onTouchOrPointerDelta = function onTouchOrPointerDelta2(x, y) {
          if (lockAxis && !axis) {
            self.axis = axis = Math.abs(x) > Math.abs(y) ? "x" : "y";
            locked = true;
          }
          if (axis !== "y") {
            deltaX[2] += x;
            self._vx.update(x, true);
          }
          if (axis !== "x") {
            deltaY[2] += y;
            self._vy.update(y, true);
          }
          debounce ? id || (id = requestAnimationFrame(update)) : update();
        }, _onDrag = function _onDrag2(e) {
          if (_ignoreCheck(e, 1)) {
            return;
          }
          e = _getEvent(e, preventDefault);
          var x = e.clientX, y = e.clientY, dx = x - self.x, dy = y - self.y, isDragging = self.isDragging;
          self.x = x;
          self.y = y;
          if (isDragging || (dx || dy) && (Math.abs(self.startX - x) >= dragMinimum || Math.abs(self.startY - y) >= dragMinimum)) {
            dragged = isDragging ? 2 : 1;
            isDragging || (self.isDragging = true);
            onTouchOrPointerDelta(dx, dy);
          }
        }, _onPress = self.onPress = function(e) {
          if (_ignoreCheck(e, 1) || e && e.button) {
            return;
          }
          self.axis = axis = null;
          onStopDelayedCall.pause();
          self.isPressed = true;
          e = _getEvent(e);
          prevDeltaX = prevDeltaY = 0;
          self.startX = self.x = e.clientX;
          self.startY = self.y = e.clientY;
          self._vx.reset();
          self._vy.reset();
          _addListener$1(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, passive, true);
          self.deltaX = self.deltaY = 0;
          onPress && onPress(self);
        }, _onRelease = self.onRelease = function(e) {
          if (_ignoreCheck(e, 1)) {
            return;
          }
          _removeListener$1(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);
          var isTrackingDrag = !isNaN(self.y - self.startY), wasDragging = self.isDragging, isDragNotClick = wasDragging && (Math.abs(self.x - self.startX) > 3 || Math.abs(self.y - self.startY) > 3), eventData = _getEvent(e);
          if (!isDragNotClick && isTrackingDrag) {
            self._vx.reset();
            self._vy.reset();
            if (preventDefault && allowClicks) {
              gsap$2.delayedCall(0.08, function() {
                if (_getTime$1() - onClickTime > 300 && !e.defaultPrevented) {
                  if (e.target.click) {
                    e.target.click();
                  } else if (ownerDoc.createEvent) {
                    var syntheticEvent = ownerDoc.createEvent("MouseEvents");
                    syntheticEvent.initMouseEvent("click", true, true, _win$1, 1, eventData.screenX, eventData.screenY, eventData.clientX, eventData.clientY, false, false, false, false, 0, null);
                    e.target.dispatchEvent(syntheticEvent);
                  }
                }
              });
            }
          }
          self.isDragging = self.isGesturing = self.isPressed = false;
          onStop && wasDragging && !isNormalizer && onStopDelayedCall.restart(true);
          dragged && update();
          onDragEnd && wasDragging && onDragEnd(self);
          onRelease && onRelease(self, isDragNotClick);
        }, _onGestureStart = function _onGestureStart2(e) {
          return e.touches && e.touches.length > 1 && (self.isGesturing = true) && onGestureStart(e, self.isDragging);
        }, _onGestureEnd = function _onGestureEnd2() {
          return (self.isGesturing = false) || onGestureEnd(self);
        }, onScroll = function onScroll2(e) {
          if (_ignoreCheck(e)) {
            return;
          }
          var x = scrollFuncX(), y = scrollFuncY();
          onDelta((x - scrollX) * scrollSpeed, (y - scrollY) * scrollSpeed, 1);
          scrollX = x;
          scrollY = y;
          onStop && onStopDelayedCall.restart(true);
        }, _onWheel = function _onWheel2(e) {
          if (_ignoreCheck(e)) {
            return;
          }
          e = _getEvent(e, preventDefault);
          onWheel && (wheeled = true);
          var multiplier = (e.deltaMode === 1 ? lineHeight : e.deltaMode === 2 ? _win$1.innerHeight : 1) * wheelSpeed;
          onDelta(e.deltaX * multiplier, e.deltaY * multiplier, 0);
          onStop && !isNormalizer && onStopDelayedCall.restart(true);
        }, _onMove = function _onMove2(e) {
          if (_ignoreCheck(e)) {
            return;
          }
          var x = e.clientX, y = e.clientY, dx = x - self.x, dy = y - self.y;
          self.x = x;
          self.y = y;
          moved = true;
          onStop && onStopDelayedCall.restart(true);
          (dx || dy) && onTouchOrPointerDelta(dx, dy);
        }, _onHover = function _onHover2(e) {
          self.event = e;
          onHover(self);
        }, _onHoverEnd = function _onHoverEnd2(e) {
          self.event = e;
          onHoverEnd(self);
        }, _onClick = function _onClick2(e) {
          return _ignoreCheck(e) || _getEvent(e, preventDefault) && onClick(self);
        };
        onStopDelayedCall = self._dc = gsap$2.delayedCall(onStopDelay || 0.25, onStopFunc).pause();
        self.deltaX = self.deltaY = 0;
        self._vx = _getVelocityProp(0, 50, true);
        self._vy = _getVelocityProp(0, 50, true);
        self.scrollX = scrollFuncX;
        self.scrollY = scrollFuncY;
        self.isDragging = self.isGesturing = self.isPressed = false;
        _context$2(this);
        self.enable = function(e) {
          if (!self.isEnabled) {
            _addListener$1(isViewport ? ownerDoc : target, "scroll", _onScroll$1);
            type.indexOf("scroll") >= 0 && _addListener$1(isViewport ? ownerDoc : target, "scroll", onScroll, passive, capture);
            type.indexOf("wheel") >= 0 && _addListener$1(target, "wheel", _onWheel, passive, capture);
            if (type.indexOf("touch") >= 0 && _isTouch || type.indexOf("pointer") >= 0) {
              _addListener$1(target, _eventTypes[0], _onPress, passive, capture);
              _addListener$1(ownerDoc, _eventTypes[2], _onRelease);
              _addListener$1(ownerDoc, _eventTypes[3], _onRelease);
              allowClicks && _addListener$1(target, "click", clickCapture, true, true);
              onClick && _addListener$1(target, "click", _onClick);
              onGestureStart && _addListener$1(ownerDoc, "gesturestart", _onGestureStart);
              onGestureEnd && _addListener$1(ownerDoc, "gestureend", _onGestureEnd);
              onHover && _addListener$1(target, _pointerType + "enter", _onHover);
              onHoverEnd && _addListener$1(target, _pointerType + "leave", _onHoverEnd);
              onMove && _addListener$1(target, _pointerType + "move", _onMove);
            }
            self.isEnabled = true;
            self.isDragging = self.isGesturing = self.isPressed = moved = dragged = false;
            self._vx.reset();
            self._vy.reset();
            scrollX = scrollFuncX();
            scrollY = scrollFuncY();
            e && e.type && _onPress(e);
            onEnable && onEnable(self);
          }
          return self;
        };
        self.disable = function() {
          if (self.isEnabled) {
            _observers.filter(function(o) {
              return o !== self && _isViewport$1(o.target);
            }).length || _removeListener$1(isViewport ? ownerDoc : target, "scroll", _onScroll$1);
            if (self.isPressed) {
              self._vx.reset();
              self._vy.reset();
              _removeListener$1(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);
            }
            _removeListener$1(isViewport ? ownerDoc : target, "scroll", onScroll, capture);
            _removeListener$1(target, "wheel", _onWheel, capture);
            _removeListener$1(target, _eventTypes[0], _onPress, capture);
            _removeListener$1(ownerDoc, _eventTypes[2], _onRelease);
            _removeListener$1(ownerDoc, _eventTypes[3], _onRelease);
            _removeListener$1(target, "click", clickCapture, true);
            _removeListener$1(target, "click", _onClick);
            _removeListener$1(ownerDoc, "gesturestart", _onGestureStart);
            _removeListener$1(ownerDoc, "gestureend", _onGestureEnd);
            _removeListener$1(target, _pointerType + "enter", _onHover);
            _removeListener$1(target, _pointerType + "leave", _onHoverEnd);
            _removeListener$1(target, _pointerType + "move", _onMove);
            self.isEnabled = self.isPressed = self.isDragging = false;
            onDisable && onDisable(self);
          }
        };
        self.kill = self.revert = function() {
          self.disable();
          var i = _observers.indexOf(self);
          i >= 0 && _observers.splice(i, 1);
          _normalizer$1 === self && (_normalizer$1 = 0);
        };
        _observers.push(self);
        isNormalizer && _isViewport$1(target) && (_normalizer$1 = self);
        self.enable(event);
      };
      _createClass(Observer2, [{
        key: "velocityX",
        get: function get() {
          return this._vx.getVelocity();
        }
      }, {
        key: "velocityY",
        get: function get() {
          return this._vy.getVelocity();
        }
      }]);
      return Observer2;
    }();
    Observer.version = "3.13.0";
    Observer.create = function(vars) {
      return new Observer(vars);
    };
    Observer.register = _initCore;
    Observer.getAll = function() {
      return _observers.slice();
    };
    Observer.getById = function(id) {
      return _observers.filter(function(o) {
        return o.vars.id === id;
      })[0];
    };
    _getGSAP$1() && gsap$2.registerPlugin(Observer);
    /*!
     * ScrollTrigger 3.13.0
     * https://gsap.com
     *
     * @license Copyright 2008-2025, GreenSock. All rights reserved.
     * Subject to the terms at https://gsap.com/standard-license
     * @author: Jack Doyle, jack@greensock.com
    */
    var gsap$1, _coreInitted$1, _win, _doc, _docEl, _body, _root, _resizeDelay, _toArray$1, _clamp, _time2, _syncInterval, _refreshing, _pointerIsDown, _transformProp, _i, _prevWidth, _prevHeight, _autoRefresh, _sort, _suppressOverwrites, _ignoreResize, _normalizer, _ignoreMobileResize, _baseScreenHeight, _baseScreenWidth, _fixIOSBug, _context$1, _scrollRestoration, _div100vh, _100vh, _isReverted, _clampingMax, _limitCallbacks, _startup = 1, _getTime = Date.now, _time1 = _getTime(), _lastScrollTime = 0, _enabled = 0, _parseClamp = function _parseClamp2(value, type, self) {
      var clamp3 = _isString(value) && (value.substr(0, 6) === "clamp(" || value.indexOf("max") > -1);
      self["_" + type + "Clamp"] = clamp3;
      return clamp3 ? value.substr(6, value.length - 7) : value;
    }, _keepClamp = function _keepClamp2(value, clamp3) {
      return clamp3 && (!_isString(value) || value.substr(0, 6) !== "clamp(") ? "clamp(" + value + ")" : value;
    }, _rafBugFix = function _rafBugFix2() {
      return _enabled && requestAnimationFrame(_rafBugFix2);
    }, _pointerDownHandler = function _pointerDownHandler2() {
      return _pointerIsDown = 1;
    }, _pointerUpHandler = function _pointerUpHandler2() {
      return _pointerIsDown = 0;
    }, _passThrough = function _passThrough3(v) {
      return v;
    }, _round = function _round3(value) {
      return Math.round(value * 1e5) / 1e5 || 0;
    }, _windowExists = function _windowExists3() {
      return typeof window !== "undefined";
    }, _getGSAP2 = function _getGSAP3() {
      return gsap$1 || _windowExists() && (gsap$1 = window.gsap) && gsap$1.registerPlugin && gsap$1;
    }, _isViewport2 = function _isViewport3(e) {
      return !!~_root.indexOf(e);
    }, _getViewportDimension = function _getViewportDimension2(dimensionProperty) {
      return (dimensionProperty === "Height" ? _100vh : _win["inner" + dimensionProperty]) || _docEl["client" + dimensionProperty] || _body["client" + dimensionProperty];
    }, _getBoundsFunc = function _getBoundsFunc2(element) {
      return _getProxyProp(element, "getBoundingClientRect") || (_isViewport2(element) ? function() {
        _winOffsets.width = _win.innerWidth;
        _winOffsets.height = _100vh;
        return _winOffsets;
      } : function() {
        return _getBounds(element);
      });
    }, _getSizeFunc = function _getSizeFunc2(scroller, isViewport, _ref) {
      var d = _ref.d, d2 = _ref.d2, a = _ref.a;
      return (a = _getProxyProp(scroller, "getBoundingClientRect")) ? function() {
        return a()[d];
      } : function() {
        return (isViewport ? _getViewportDimension(d2) : scroller["client" + d2]) || 0;
      };
    }, _getOffsetsFunc = function _getOffsetsFunc2(element, isViewport) {
      return !isViewport || ~_proxies.indexOf(element) ? _getBoundsFunc(element) : function() {
        return _winOffsets;
      };
    }, _maxScroll = function _maxScroll2(element, _ref2) {
      var s = _ref2.s, d2 = _ref2.d2, d = _ref2.d, a = _ref2.a;
      return Math.max(0, (s = "scroll" + d2) && (a = _getProxyProp(element, s)) ? a() - _getBoundsFunc(element)()[d] : _isViewport2(element) ? (_docEl[s] || _body[s]) - _getViewportDimension(d2) : element[s] - element["offset" + d2]);
    }, _iterateAutoRefresh = function _iterateAutoRefresh2(func, events) {
      for (var i = 0; i < _autoRefresh.length; i += 3) {
        (!events || ~events.indexOf(_autoRefresh[i + 1])) && func(_autoRefresh[i], _autoRefresh[i + 1], _autoRefresh[i + 2]);
      }
    }, _isString = function _isString3(value) {
      return typeof value === "string";
    }, _isFunction = function _isFunction3(value) {
      return typeof value === "function";
    }, _isNumber = function _isNumber3(value) {
      return typeof value === "number";
    }, _isObject = function _isObject3(value) {
      return typeof value === "object";
    }, _endAnimation = function _endAnimation2(animation, reversed, pause) {
      return animation && animation.progress(reversed ? 0 : 1) && pause && animation.pause();
    }, _callback = function _callback3(self, func) {
      if (self.enabled) {
        var result = self._ctx ? self._ctx.add(function() {
          return func(self);
        }) : func(self);
        result && result.totalTime && (self.callbackAnimation = result);
      }
    }, _abs = Math.abs, _left = "left", _top = "top", _right = "right", _bottom = "bottom", _width = "width", _height = "height", _Right = "Right", _Left = "Left", _Top = "Top", _Bottom = "Bottom", _padding = "padding", _margin = "margin", _Width = "Width", _Height = "Height", _px = "px", _getComputedStyle = function _getComputedStyle2(element) {
      return _win.getComputedStyle(element);
    }, _makePositionable = function _makePositionable2(element) {
      var position = _getComputedStyle(element).position;
      element.style.position = position === "absolute" || position === "fixed" ? position : "relative";
    }, _setDefaults = function _setDefaults3(obj, defaults2) {
      for (var p in defaults2) {
        p in obj || (obj[p] = defaults2[p]);
      }
      return obj;
    }, _getBounds = function _getBounds2(element, withoutTransforms) {
      var tween = withoutTransforms && _getComputedStyle(element)[_transformProp] !== "matrix(1, 0, 0, 1, 0, 0)" && gsap$1.to(element, {
        x: 0,
        y: 0,
        xPercent: 0,
        yPercent: 0,
        rotation: 0,
        rotationX: 0,
        rotationY: 0,
        scale: 1,
        skewX: 0,
        skewY: 0
      }).progress(1), bounds = element.getBoundingClientRect();
      tween && tween.progress(0).kill();
      return bounds;
    }, _getSize = function _getSize2(element, _ref3) {
      var d2 = _ref3.d2;
      return element["offset" + d2] || element["client" + d2] || 0;
    }, _getLabelRatioArray = function _getLabelRatioArray2(timeline2) {
      var a = [], labels = timeline2.labels, duration = timeline2.duration(), p;
      for (p in labels) {
        a.push(labels[p] / duration);
      }
      return a;
    }, _getClosestLabel = function _getClosestLabel2(animation) {
      return function(value) {
        return gsap$1.utils.snap(_getLabelRatioArray(animation), value);
      };
    }, _snapDirectional = function _snapDirectional2(snapIncrementOrArray) {
      var snap3 = gsap$1.utils.snap(snapIncrementOrArray), a = Array.isArray(snapIncrementOrArray) && snapIncrementOrArray.slice(0).sort(function(a2, b) {
        return a2 - b;
      });
      return a ? function(value, direction, threshold) {
        if (threshold === void 0) {
          threshold = 1e-3;
        }
        var i;
        if (!direction) {
          return snap3(value);
        }
        if (direction > 0) {
          value -= threshold;
          for (i = 0; i < a.length; i++) {
            if (a[i] >= value) {
              return a[i];
            }
          }
          return a[i - 1];
        } else {
          i = a.length;
          value += threshold;
          while (i--) {
            if (a[i] <= value) {
              return a[i];
            }
          }
        }
        return a[0];
      } : function(value, direction, threshold) {
        if (threshold === void 0) {
          threshold = 1e-3;
        }
        var snapped = snap3(value);
        return !direction || Math.abs(snapped - value) < threshold || snapped - value < 0 === direction < 0 ? snapped : snap3(direction < 0 ? value - snapIncrementOrArray : value + snapIncrementOrArray);
      };
    }, _getLabelAtDirection = function _getLabelAtDirection2(timeline2) {
      return function(value, st) {
        return _snapDirectional(_getLabelRatioArray(timeline2))(value, st.direction);
      };
    }, _multiListener = function _multiListener2(func, element, types, callback) {
      return types.split(",").forEach(function(type) {
        return func(element, type, callback);
      });
    }, _addListener2 = function _addListener3(element, type, func, nonPassive, capture) {
      return element.addEventListener(type, func, {
        passive: !nonPassive,
        capture: !!capture
      });
    }, _removeListener2 = function _removeListener3(element, type, func, capture) {
      return element.removeEventListener(type, func, !!capture);
    }, _wheelListener = function _wheelListener2(func, el, scrollFunc) {
      scrollFunc = scrollFunc && scrollFunc.wheelHandler;
      if (scrollFunc) {
        func(el, "wheel", scrollFunc);
        func(el, "touchmove", scrollFunc);
      }
    }, _markerDefaults = {
      startColor: "green",
      endColor: "red",
      indent: 0,
      fontSize: "16px",
      fontWeight: "normal"
    }, _defaults = {
      toggleActions: "play",
      anticipatePin: 0
    }, _keywords = {
      top: 0,
      left: 0,
      center: 0.5,
      bottom: 1,
      right: 1
    }, _offsetToPx = function _offsetToPx2(value, size) {
      if (_isString(value)) {
        var eqIndex = value.indexOf("="), relative = ~eqIndex ? +(value.charAt(eqIndex - 1) + 1) * parseFloat(value.substr(eqIndex + 1)) : 0;
        if (~eqIndex) {
          value.indexOf("%") > eqIndex && (relative *= size / 100);
          value = value.substr(0, eqIndex - 1);
        }
        value = relative + (value in _keywords ? _keywords[value] * size : ~value.indexOf("%") ? parseFloat(value) * size / 100 : parseFloat(value) || 0);
      }
      return value;
    }, _createMarker = function _createMarker2(type, name, container, direction, _ref4, offset, matchWidthEl, containerAnimation) {
      var startColor = _ref4.startColor, endColor = _ref4.endColor, fontSize = _ref4.fontSize, indent = _ref4.indent, fontWeight = _ref4.fontWeight;
      var e = _doc.createElement("div"), useFixedPosition = _isViewport2(container) || _getProxyProp(container, "pinType") === "fixed", isScroller = type.indexOf("scroller") !== -1, parent = useFixedPosition ? _body : container, isStart = type.indexOf("start") !== -1, color = isStart ? startColor : endColor, css = "border-color:" + color + ";font-size:" + fontSize + ";color:" + color + ";font-weight:" + fontWeight + ";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;";
      css += "position:" + ((isScroller || containerAnimation) && useFixedPosition ? "fixed;" : "absolute;");
      (isScroller || containerAnimation || !useFixedPosition) && (css += (direction === _vertical ? _right : _bottom) + ":" + (offset + parseFloat(indent)) + "px;");
      matchWidthEl && (css += "box-sizing:border-box;text-align:left;width:" + matchWidthEl.offsetWidth + "px;");
      e._isStart = isStart;
      e.setAttribute("class", "gsap-marker-" + type + (name ? " marker-" + name : ""));
      e.style.cssText = css;
      e.innerText = name || name === 0 ? type + "-" + name : type;
      parent.children[0] ? parent.insertBefore(e, parent.children[0]) : parent.appendChild(e);
      e._offset = e["offset" + direction.op.d2];
      _positionMarker(e, 0, direction, isStart);
      return e;
    }, _positionMarker = function _positionMarker2(marker, start, direction, flipped) {
      var vars = {
        display: "block"
      }, side = direction[flipped ? "os2" : "p2"], oppositeSide = direction[flipped ? "p2" : "os2"];
      marker._isFlipped = flipped;
      vars[direction.a + "Percent"] = flipped ? -100 : 0;
      vars[direction.a] = flipped ? "1px" : 0;
      vars["border" + side + _Width] = 1;
      vars["border" + oppositeSide + _Width] = 0;
      vars[direction.p] = start + "px";
      gsap$1.set(marker, vars);
    }, _triggers = [], _ids = {}, _rafID, _sync = function _sync2() {
      return _getTime() - _lastScrollTime > 34 && (_rafID || (_rafID = requestAnimationFrame(_updateAll)));
    }, _onScroll2 = function _onScroll3() {
      if (!_normalizer || !_normalizer.isPressed || _normalizer.startX > _body.clientWidth) {
        _scrollers.cache++;
        if (_normalizer) {
          _rafID || (_rafID = requestAnimationFrame(_updateAll));
        } else {
          _updateAll();
        }
        _lastScrollTime || _dispatch("scrollStart");
        _lastScrollTime = _getTime();
      }
    }, _setBaseDimensions = function _setBaseDimensions2() {
      _baseScreenWidth = _win.innerWidth;
      _baseScreenHeight = _win.innerHeight;
    }, _onResize = function _onResize2(force) {
      _scrollers.cache++;
      (force === true || !_refreshing && !_ignoreResize && !_doc.fullscreenElement && !_doc.webkitFullscreenElement && (!_ignoreMobileResize || _baseScreenWidth !== _win.innerWidth || Math.abs(_win.innerHeight - _baseScreenHeight) > _win.innerHeight * 0.25)) && _resizeDelay.restart(true);
    }, _listeners = {}, _emptyArray$1 = [], _softRefresh = function _softRefresh2() {
      return _removeListener2(ScrollTrigger, "scrollEnd", _softRefresh2) || _refreshAll(true);
    }, _dispatch = function _dispatch3(type) {
      return _listeners[type] && _listeners[type].map(function(f) {
        return f();
      }) || _emptyArray$1;
    }, _savedStyles = [], _revertRecorded = function _revertRecorded2(media) {
      for (var i = 0; i < _savedStyles.length; i += 5) {
        if (!media || _savedStyles[i + 4] && _savedStyles[i + 4].query === media) {
          _savedStyles[i].style.cssText = _savedStyles[i + 1];
          _savedStyles[i].getBBox && _savedStyles[i].setAttribute("transform", _savedStyles[i + 2] || "");
          _savedStyles[i + 3].uncache = 1;
        }
      }
    }, _revertAll = function _revertAll2(kill, media) {
      var trigger;
      for (_i = 0; _i < _triggers.length; _i++) {
        trigger = _triggers[_i];
        if (trigger && (!media || trigger._ctx === media)) {
          if (kill) {
            trigger.kill(1);
          } else {
            trigger.revert(true, true);
          }
        }
      }
      _isReverted = true;
      media && _revertRecorded(media);
      media || _dispatch("revert");
    }, _clearScrollMemory = function _clearScrollMemory2(scrollRestoration, force) {
      _scrollers.cache++;
      (force || !_refreshingAll) && _scrollers.forEach(function(obj) {
        return _isFunction(obj) && obj.cacheID++ && (obj.rec = 0);
      });
      _isString(scrollRestoration) && (_win.history.scrollRestoration = _scrollRestoration = scrollRestoration);
    }, _refreshingAll, _refreshID = 0, _queueRefreshID, _queueRefreshAll = function _queueRefreshAll2() {
      if (_queueRefreshID !== _refreshID) {
        var id = _queueRefreshID = _refreshID;
        requestAnimationFrame(function() {
          return id === _refreshID && _refreshAll(true);
        });
      }
    }, _refresh100vh = function _refresh100vh2() {
      _body.appendChild(_div100vh);
      _100vh = !_normalizer && _div100vh.offsetHeight || _win.innerHeight;
      _body.removeChild(_div100vh);
    }, _hideAllMarkers = function _hideAllMarkers2(hide) {
      return _toArray$1(".gsap-marker-start, .gsap-marker-end, .gsap-marker-scroller-start, .gsap-marker-scroller-end").forEach(function(el) {
        return el.style.display = hide ? "none" : "block";
      });
    }, _refreshAll = function _refreshAll2(force, skipRevert) {
      _docEl = _doc.documentElement;
      _body = _doc.body;
      _root = [_win, _doc, _docEl, _body];
      if (_lastScrollTime && !force && !_isReverted) {
        _addListener2(ScrollTrigger, "scrollEnd", _softRefresh);
        return;
      }
      _refresh100vh();
      _refreshingAll = ScrollTrigger.isRefreshing = true;
      _scrollers.forEach(function(obj) {
        return _isFunction(obj) && ++obj.cacheID && (obj.rec = obj());
      });
      var refreshInits = _dispatch("refreshInit");
      _sort && ScrollTrigger.sort();
      skipRevert || _revertAll();
      _scrollers.forEach(function(obj) {
        if (_isFunction(obj)) {
          obj.smooth && (obj.target.style.scrollBehavior = "auto");
          obj(0);
        }
      });
      _triggers.slice(0).forEach(function(t) {
        return t.refresh();
      });
      _isReverted = false;
      _triggers.forEach(function(t) {
        if (t._subPinOffset && t.pin) {
          var prop = t.vars.horizontal ? "offsetWidth" : "offsetHeight", original = t.pin[prop];
          t.revert(true, 1);
          t.adjustPinSpacing(t.pin[prop] - original);
          t.refresh();
        }
      });
      _clampingMax = 1;
      _hideAllMarkers(true);
      _triggers.forEach(function(t) {
        var max = _maxScroll(t.scroller, t._dir), endClamp = t.vars.end === "max" || t._endClamp && t.end > max, startClamp = t._startClamp && t.start >= max;
        (endClamp || startClamp) && t.setPositions(startClamp ? max - 1 : t.start, endClamp ? Math.max(startClamp ? max : t.start + 1, max) : t.end, true);
      });
      _hideAllMarkers(false);
      _clampingMax = 0;
      refreshInits.forEach(function(result) {
        return result && result.render && result.render(-1);
      });
      _scrollers.forEach(function(obj) {
        if (_isFunction(obj)) {
          obj.smooth && requestAnimationFrame(function() {
            return obj.target.style.scrollBehavior = "smooth";
          });
          obj.rec && obj(obj.rec);
        }
      });
      _clearScrollMemory(_scrollRestoration, 1);
      _resizeDelay.pause();
      _refreshID++;
      _refreshingAll = 2;
      _updateAll(2);
      _triggers.forEach(function(t) {
        return _isFunction(t.vars.onRefresh) && t.vars.onRefresh(t);
      });
      _refreshingAll = ScrollTrigger.isRefreshing = false;
      _dispatch("refresh");
    }, _lastScroll = 0, _direction = 1, _primary, _updateAll = function _updateAll2(force) {
      if (force === 2 || !_refreshingAll && !_isReverted) {
        ScrollTrigger.isUpdating = true;
        _primary && _primary.update(0);
        var l = _triggers.length, time = _getTime(), recordVelocity = time - _time1 >= 50, scroll = l && _triggers[0].scroll();
        _direction = _lastScroll > scroll ? -1 : 1;
        _refreshingAll || (_lastScroll = scroll);
        if (recordVelocity) {
          if (_lastScrollTime && !_pointerIsDown && time - _lastScrollTime > 200) {
            _lastScrollTime = 0;
            _dispatch("scrollEnd");
          }
          _time2 = _time1;
          _time1 = time;
        }
        if (_direction < 0) {
          _i = l;
          while (_i-- > 0) {
            _triggers[_i] && _triggers[_i].update(0, recordVelocity);
          }
          _direction = 1;
        } else {
          for (_i = 0; _i < l; _i++) {
            _triggers[_i] && _triggers[_i].update(0, recordVelocity);
          }
        }
        ScrollTrigger.isUpdating = false;
      }
      _rafID = 0;
    }, _propNamesToCopy = [_left, _top, _bottom, _right, _margin + _Bottom, _margin + _Right, _margin + _Top, _margin + _Left, "display", "flexShrink", "float", "zIndex", "gridColumnStart", "gridColumnEnd", "gridRowStart", "gridRowEnd", "gridArea", "justifySelf", "alignSelf", "placeSelf", "order"], _stateProps = _propNamesToCopy.concat([_width, _height, "boxSizing", "max" + _Width, "max" + _Height, "position", _margin, _padding, _padding + _Top, _padding + _Right, _padding + _Bottom, _padding + _Left]), _swapPinOut = function _swapPinOut2(pin, spacer, state) {
      _setState(state);
      var cache = pin._gsap;
      if (cache.spacerIsNative) {
        _setState(cache.spacerState);
      } else if (pin._gsap.swappedIn) {
        var parent = spacer.parentNode;
        if (parent) {
          parent.insertBefore(pin, spacer);
          parent.removeChild(spacer);
        }
      }
      pin._gsap.swappedIn = false;
    }, _swapPinIn = function _swapPinIn2(pin, spacer, cs, spacerState) {
      if (!pin._gsap.swappedIn) {
        var i = _propNamesToCopy.length, spacerStyle = spacer.style, pinStyle = pin.style, p;
        while (i--) {
          p = _propNamesToCopy[i];
          spacerStyle[p] = cs[p];
        }
        spacerStyle.position = cs.position === "absolute" ? "absolute" : "relative";
        cs.display === "inline" && (spacerStyle.display = "inline-block");
        pinStyle[_bottom] = pinStyle[_right] = "auto";
        spacerStyle.flexBasis = cs.flexBasis || "auto";
        spacerStyle.overflow = "visible";
        spacerStyle.boxSizing = "border-box";
        spacerStyle[_width] = _getSize(pin, _horizontal) + _px;
        spacerStyle[_height] = _getSize(pin, _vertical) + _px;
        spacerStyle[_padding] = pinStyle[_margin] = pinStyle[_top] = pinStyle[_left] = "0";
        _setState(spacerState);
        pinStyle[_width] = pinStyle["max" + _Width] = cs[_width];
        pinStyle[_height] = pinStyle["max" + _Height] = cs[_height];
        pinStyle[_padding] = cs[_padding];
        if (pin.parentNode !== spacer) {
          pin.parentNode.insertBefore(spacer, pin);
          spacer.appendChild(pin);
        }
        pin._gsap.swappedIn = true;
      }
    }, _capsExp = /([A-Z])/g, _setState = function _setState2(state) {
      if (state) {
        var style = state.t.style, l = state.length, i = 0, p, value;
        (state.t._gsap || gsap$1.core.getCache(state.t)).uncache = 1;
        for (; i < l; i += 2) {
          value = state[i + 1];
          p = state[i];
          if (value) {
            style[p] = value;
          } else if (style[p]) {
            style.removeProperty(p.replace(_capsExp, "-$1").toLowerCase());
          }
        }
      }
    }, _getState = function _getState2(element) {
      var l = _stateProps.length, style = element.style, state = [], i = 0;
      for (; i < l; i++) {
        state.push(_stateProps[i], style[_stateProps[i]]);
      }
      state.t = element;
      return state;
    }, _copyState = function _copyState2(state, override, omitOffsets) {
      var result = [], l = state.length, i = omitOffsets ? 8 : 0, p;
      for (; i < l; i += 2) {
        p = state[i];
        result.push(p, p in override ? override[p] : state[i + 1]);
      }
      result.t = state.t;
      return result;
    }, _winOffsets = {
      left: 0,
      top: 0
    }, _parsePosition = function _parsePosition3(value, trigger, scrollerSize, direction, scroll, marker, markerScroller, self, scrollerBounds, borderWidth, useFixedPosition, scrollerMax, containerAnimation, clampZeroProp) {
      _isFunction(value) && (value = value(self));
      if (_isString(value) && value.substr(0, 3) === "max") {
        value = scrollerMax + (value.charAt(4) === "=" ? _offsetToPx("0" + value.substr(3), scrollerSize) : 0);
      }
      var time = containerAnimation ? containerAnimation.time() : 0, p1, p2, element;
      containerAnimation && containerAnimation.seek(0);
      isNaN(value) || (value = +value);
      if (!_isNumber(value)) {
        _isFunction(trigger) && (trigger = trigger(self));
        var offsets = (value || "0").split(" "), bounds, localOffset, globalOffset, display;
        element = _getTarget(trigger, self) || _body;
        bounds = _getBounds(element) || {};
        if ((!bounds || !bounds.left && !bounds.top) && _getComputedStyle(element).display === "none") {
          display = element.style.display;
          element.style.display = "block";
          bounds = _getBounds(element);
          display ? element.style.display = display : element.style.removeProperty("display");
        }
        localOffset = _offsetToPx(offsets[0], bounds[direction.d]);
        globalOffset = _offsetToPx(offsets[1] || "0", scrollerSize);
        value = bounds[direction.p] - scrollerBounds[direction.p] - borderWidth + localOffset + scroll - globalOffset;
        markerScroller && _positionMarker(markerScroller, globalOffset, direction, scrollerSize - globalOffset < 20 || markerScroller._isStart && globalOffset > 20);
        scrollerSize -= scrollerSize - globalOffset;
      } else {
        containerAnimation && (value = gsap$1.utils.mapRange(containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, 0, scrollerMax, value));
        markerScroller && _positionMarker(markerScroller, scrollerSize, direction, true);
      }
      if (clampZeroProp) {
        self[clampZeroProp] = value || -1e-3;
        value < 0 && (value = 0);
      }
      if (marker) {
        var position = value + scrollerSize, isStart = marker._isStart;
        p1 = "scroll" + direction.d2;
        _positionMarker(marker, position, direction, isStart && position > 20 || !isStart && (useFixedPosition ? Math.max(_body[p1], _docEl[p1]) : marker.parentNode[p1]) <= position + 1);
        if (useFixedPosition) {
          scrollerBounds = _getBounds(markerScroller);
          useFixedPosition && (marker.style[direction.op.p] = scrollerBounds[direction.op.p] - direction.op.m - marker._offset + _px);
        }
      }
      if (containerAnimation && element) {
        p1 = _getBounds(element);
        containerAnimation.seek(scrollerMax);
        p2 = _getBounds(element);
        containerAnimation._caScrollDist = p1[direction.p] - p2[direction.p];
        value = value / containerAnimation._caScrollDist * scrollerMax;
      }
      containerAnimation && containerAnimation.seek(time);
      return containerAnimation ? value : Math.round(value);
    }, _prefixExp = /(webkit|moz|length|cssText|inset)/i, _reparent = function _reparent2(element, parent, top, left) {
      if (element.parentNode !== parent) {
        var style = element.style, p, cs;
        if (parent === _body) {
          element._stOrig = style.cssText;
          cs = _getComputedStyle(element);
          for (p in cs) {
            if (!+p && !_prefixExp.test(p) && cs[p] && typeof style[p] === "string" && p !== "0") {
              style[p] = cs[p];
            }
          }
          style.top = top;
          style.left = left;
        } else {
          style.cssText = element._stOrig;
        }
        gsap$1.core.getCache(element).uncache = 1;
        parent.appendChild(element);
      }
    }, _interruptionTracker = function _interruptionTracker2(getValueFunc, initialValue, onInterrupt) {
      var last1 = initialValue, last2 = last1;
      return function(value) {
        var current = Math.round(getValueFunc());
        if (current !== last1 && current !== last2 && Math.abs(current - last1) > 3 && Math.abs(current - last2) > 3) {
          value = current;
          onInterrupt && onInterrupt();
        }
        last2 = last1;
        last1 = Math.round(value);
        return last1;
      };
    }, _shiftMarker = function _shiftMarker2(marker, direction, value) {
      var vars = {};
      vars[direction.p] = "+=" + value;
      gsap$1.set(marker, vars);
    }, _getTweenCreator = function _getTweenCreator2(scroller, direction) {
      var getScroll = _getScrollFunc(scroller, direction), prop = "_scroll" + direction.p2, getTween = function getTween2(scrollTo, vars, initialValue, change1, change2) {
        var tween = getTween2.tween, onComplete = vars.onComplete, modifiers = {};
        initialValue = initialValue || getScroll();
        var checkForInterruption = _interruptionTracker(getScroll, initialValue, function() {
          tween.kill();
          getTween2.tween = 0;
        });
        change2 = change1 && change2 || 0;
        change1 = change1 || scrollTo - initialValue;
        tween && tween.kill();
        vars[prop] = scrollTo;
        vars.inherit = false;
        vars.modifiers = modifiers;
        modifiers[prop] = function() {
          return checkForInterruption(initialValue + change1 * tween.ratio + change2 * tween.ratio * tween.ratio);
        };
        vars.onUpdate = function() {
          _scrollers.cache++;
          getTween2.tween && _updateAll();
        };
        vars.onComplete = function() {
          getTween2.tween = 0;
          onComplete && onComplete.call(tween);
        };
        tween = getTween2.tween = gsap$1.to(scroller, vars);
        return tween;
      };
      scroller[prop] = getScroll;
      getScroll.wheelHandler = function() {
        return getTween.tween && getTween.tween.kill() && (getTween.tween = 0);
      };
      _addListener2(scroller, "wheel", getScroll.wheelHandler);
      ScrollTrigger.isTouch && _addListener2(scroller, "touchmove", getScroll.wheelHandler);
      return getTween;
    };
    var ScrollTrigger = /* @__PURE__ */ function() {
      function ScrollTrigger2(vars, animation) {
        _coreInitted$1 || ScrollTrigger2.register(gsap$1) || console.warn("Please gsap.registerPlugin(ScrollTrigger)");
        _context$1(this);
        this.init(vars, animation);
      }
      var _proto = ScrollTrigger2.prototype;
      _proto.init = function init4(vars, animation) {
        this.progress = this.start = 0;
        this.vars && this.kill(true, true);
        if (!_enabled) {
          this.update = this.refresh = this.kill = _passThrough;
          return;
        }
        vars = _setDefaults(_isString(vars) || _isNumber(vars) || vars.nodeType ? {
          trigger: vars
        } : vars, _defaults);
        var _vars = vars, onUpdate = _vars.onUpdate, toggleClass = _vars.toggleClass, id = _vars.id, onToggle = _vars.onToggle, onRefresh = _vars.onRefresh, scrub = _vars.scrub, trigger = _vars.trigger, pin = _vars.pin, pinSpacing = _vars.pinSpacing, invalidateOnRefresh = _vars.invalidateOnRefresh, anticipatePin = _vars.anticipatePin, onScrubComplete = _vars.onScrubComplete, onSnapComplete = _vars.onSnapComplete, once = _vars.once, snap3 = _vars.snap, pinReparent = _vars.pinReparent, pinSpacer = _vars.pinSpacer, containerAnimation = _vars.containerAnimation, fastScrollEnd = _vars.fastScrollEnd, preventOverlaps = _vars.preventOverlaps, direction = vars.horizontal || vars.containerAnimation && vars.horizontal !== false ? _horizontal : _vertical, isToggle = !scrub && scrub !== 0, scroller = _getTarget(vars.scroller || _win), scrollerCache = gsap$1.core.getCache(scroller), isViewport = _isViewport2(scroller), useFixedPosition = ("pinType" in vars ? vars.pinType : _getProxyProp(scroller, "pinType") || isViewport && "fixed") === "fixed", callbacks = [vars.onEnter, vars.onLeave, vars.onEnterBack, vars.onLeaveBack], toggleActions = isToggle && vars.toggleActions.split(" "), markers = "markers" in vars ? vars.markers : _defaults.markers, borderWidth = isViewport ? 0 : parseFloat(_getComputedStyle(scroller)["border" + direction.p2 + _Width]) || 0, self = this, onRefreshInit = vars.onRefreshInit && function() {
          return vars.onRefreshInit(self);
        }, getScrollerSize = _getSizeFunc(scroller, isViewport, direction), getScrollerOffsets = _getOffsetsFunc(scroller, isViewport), lastSnap = 0, lastRefresh = 0, prevProgress = 0, scrollFunc = _getScrollFunc(scroller, direction), tweenTo, pinCache, snapFunc, scroll1, scroll2, start, end, markerStart, markerEnd, markerStartTrigger, markerEndTrigger, markerVars, executingOnRefresh, change, pinOriginalState, pinActiveState, pinState, spacer, offset, pinGetter, pinSetter, pinStart, pinChange, spacingStart, spacerState, markerStartSetter, pinMoves, markerEndSetter, cs, snap1, snap22, scrubTween, scrubSmooth, snapDurClamp, snapDelayedCall, prevScroll, prevAnimProgress, caMarkerSetter, customRevertReturn;
        self._startClamp = self._endClamp = false;
        self._dir = direction;
        anticipatePin *= 45;
        self.scroller = scroller;
        self.scroll = containerAnimation ? containerAnimation.time.bind(containerAnimation) : scrollFunc;
        scroll1 = scrollFunc();
        self.vars = vars;
        animation = animation || vars.animation;
        if ("refreshPriority" in vars) {
          _sort = 1;
          vars.refreshPriority === -9999 && (_primary = self);
        }
        scrollerCache.tweenScroll = scrollerCache.tweenScroll || {
          top: _getTweenCreator(scroller, _vertical),
          left: _getTweenCreator(scroller, _horizontal)
        };
        self.tweenTo = tweenTo = scrollerCache.tweenScroll[direction.p];
        self.scrubDuration = function(value) {
          scrubSmooth = _isNumber(value) && value;
          if (!scrubSmooth) {
            scrubTween && scrubTween.progress(1).kill();
            scrubTween = 0;
          } else {
            scrubTween ? scrubTween.duration(value) : scrubTween = gsap$1.to(animation, {
              ease: "expo",
              totalProgress: "+=0",
              inherit: false,
              duration: scrubSmooth,
              paused: true,
              onComplete: function onComplete() {
                return onScrubComplete && onScrubComplete(self);
              }
            });
          }
        };
        if (animation) {
          animation.vars.lazy = false;
          animation._initted && !self.isReverted || animation.vars.immediateRender !== false && vars.immediateRender !== false && animation.duration() && animation.render(0, true, true);
          self.animation = animation.pause();
          animation.scrollTrigger = self;
          self.scrubDuration(scrub);
          snap1 = 0;
          id || (id = animation.vars.id);
        }
        if (snap3) {
          if (!_isObject(snap3) || snap3.push) {
            snap3 = {
              snapTo: snap3
            };
          }
          "scrollBehavior" in _body.style && gsap$1.set(isViewport ? [_body, _docEl] : scroller, {
            scrollBehavior: "auto"
          });
          _scrollers.forEach(function(o) {
            return _isFunction(o) && o.target === (isViewport ? _doc.scrollingElement || _docEl : scroller) && (o.smooth = false);
          });
          snapFunc = _isFunction(snap3.snapTo) ? snap3.snapTo : snap3.snapTo === "labels" ? _getClosestLabel(animation) : snap3.snapTo === "labelsDirectional" ? _getLabelAtDirection(animation) : snap3.directional !== false ? function(value, st) {
            return _snapDirectional(snap3.snapTo)(value, _getTime() - lastRefresh < 500 ? 0 : st.direction);
          } : gsap$1.utils.snap(snap3.snapTo);
          snapDurClamp = snap3.duration || {
            min: 0.1,
            max: 2
          };
          snapDurClamp = _isObject(snapDurClamp) ? _clamp(snapDurClamp.min, snapDurClamp.max) : _clamp(snapDurClamp, snapDurClamp);
          snapDelayedCall = gsap$1.delayedCall(snap3.delay || scrubSmooth / 2 || 0.1, function() {
            var scroll = scrollFunc(), refreshedRecently = _getTime() - lastRefresh < 500, tween = tweenTo.tween;
            if ((refreshedRecently || Math.abs(self.getVelocity()) < 10) && !tween && !_pointerIsDown && lastSnap !== scroll) {
              var progress = (scroll - start) / change, totalProgress = animation && !isToggle ? animation.totalProgress() : progress, velocity = refreshedRecently ? 0 : (totalProgress - snap22) / (_getTime() - _time2) * 1e3 || 0, change1 = gsap$1.utils.clamp(-progress, 1 - progress, _abs(velocity / 2) * velocity / 0.185), naturalEnd = progress + (snap3.inertia === false ? 0 : change1), endValue, endScroll, _snap = snap3, onStart = _snap.onStart, _onInterrupt = _snap.onInterrupt, _onComplete = _snap.onComplete;
              endValue = snapFunc(naturalEnd, self);
              _isNumber(endValue) || (endValue = naturalEnd);
              endScroll = Math.max(0, Math.round(start + endValue * change));
              if (scroll <= end && scroll >= start && endScroll !== scroll) {
                if (tween && !tween._initted && tween.data <= _abs(endScroll - scroll)) {
                  return;
                }
                if (snap3.inertia === false) {
                  change1 = endValue - progress;
                }
                tweenTo(endScroll, {
                  duration: snapDurClamp(_abs(Math.max(_abs(naturalEnd - totalProgress), _abs(endValue - totalProgress)) * 0.185 / velocity / 0.05 || 0)),
                  ease: snap3.ease || "power3",
                  data: _abs(endScroll - scroll),
                  // record the distance so that if another snap tween occurs (conflict) we can prioritize the closest snap.
                  onInterrupt: function onInterrupt() {
                    return snapDelayedCall.restart(true) && _onInterrupt && _onInterrupt(self);
                  },
                  onComplete: function onComplete() {
                    self.update();
                    lastSnap = scrollFunc();
                    if (animation && !isToggle) {
                      scrubTween ? scrubTween.resetTo("totalProgress", endValue, animation._tTime / animation._tDur) : animation.progress(endValue);
                    }
                    snap1 = snap22 = animation && !isToggle ? animation.totalProgress() : self.progress;
                    onSnapComplete && onSnapComplete(self);
                    _onComplete && _onComplete(self);
                  }
                }, scroll, change1 * change, endScroll - scroll - change1 * change);
                onStart && onStart(self, tweenTo.tween);
              }
            } else if (self.isActive && lastSnap !== scroll) {
              snapDelayedCall.restart(true);
            }
          }).pause();
        }
        id && (_ids[id] = self);
        trigger = self.trigger = _getTarget(trigger || pin !== true && pin);
        customRevertReturn = trigger && trigger._gsap && trigger._gsap.stRevert;
        customRevertReturn && (customRevertReturn = customRevertReturn(self));
        pin = pin === true ? trigger : _getTarget(pin);
        _isString(toggleClass) && (toggleClass = {
          targets: trigger,
          className: toggleClass
        });
        if (pin) {
          pinSpacing === false || pinSpacing === _margin || (pinSpacing = !pinSpacing && pin.parentNode && pin.parentNode.style && _getComputedStyle(pin.parentNode).display === "flex" ? false : _padding);
          self.pin = pin;
          pinCache = gsap$1.core.getCache(pin);
          if (!pinCache.spacer) {
            if (pinSpacer) {
              pinSpacer = _getTarget(pinSpacer);
              pinSpacer && !pinSpacer.nodeType && (pinSpacer = pinSpacer.current || pinSpacer.nativeElement);
              pinCache.spacerIsNative = !!pinSpacer;
              pinSpacer && (pinCache.spacerState = _getState(pinSpacer));
            }
            pinCache.spacer = spacer = pinSpacer || _doc.createElement("div");
            spacer.classList.add("pin-spacer");
            id && spacer.classList.add("pin-spacer-" + id);
            pinCache.pinState = pinOriginalState = _getState(pin);
          } else {
            pinOriginalState = pinCache.pinState;
          }
          vars.force3D !== false && gsap$1.set(pin, {
            force3D: true
          });
          self.spacer = spacer = pinCache.spacer;
          cs = _getComputedStyle(pin);
          spacingStart = cs[pinSpacing + direction.os2];
          pinGetter = gsap$1.getProperty(pin);
          pinSetter = gsap$1.quickSetter(pin, direction.a, _px);
          _swapPinIn(pin, spacer, cs);
          pinState = _getState(pin);
        }
        if (markers) {
          markerVars = _isObject(markers) ? _setDefaults(markers, _markerDefaults) : _markerDefaults;
          markerStartTrigger = _createMarker("scroller-start", id, scroller, direction, markerVars, 0);
          markerEndTrigger = _createMarker("scroller-end", id, scroller, direction, markerVars, 0, markerStartTrigger);
          offset = markerStartTrigger["offset" + direction.op.d2];
          var content = _getTarget(_getProxyProp(scroller, "content") || scroller);
          markerStart = this.markerStart = _createMarker("start", id, content, direction, markerVars, offset, 0, containerAnimation);
          markerEnd = this.markerEnd = _createMarker("end", id, content, direction, markerVars, offset, 0, containerAnimation);
          containerAnimation && (caMarkerSetter = gsap$1.quickSetter([markerStart, markerEnd], direction.a, _px));
          if (!useFixedPosition && !(_proxies.length && _getProxyProp(scroller, "fixedMarkers") === true)) {
            _makePositionable(isViewport ? _body : scroller);
            gsap$1.set([markerStartTrigger, markerEndTrigger], {
              force3D: true
            });
            markerStartSetter = gsap$1.quickSetter(markerStartTrigger, direction.a, _px);
            markerEndSetter = gsap$1.quickSetter(markerEndTrigger, direction.a, _px);
          }
        }
        if (containerAnimation) {
          var oldOnUpdate = containerAnimation.vars.onUpdate, oldParams = containerAnimation.vars.onUpdateParams;
          containerAnimation.eventCallback("onUpdate", function() {
            self.update(0, 0, 1);
            oldOnUpdate && oldOnUpdate.apply(containerAnimation, oldParams || []);
          });
        }
        self.previous = function() {
          return _triggers[_triggers.indexOf(self) - 1];
        };
        self.next = function() {
          return _triggers[_triggers.indexOf(self) + 1];
        };
        self.revert = function(revert, temp) {
          if (!temp) {
            return self.kill(true);
          }
          var r = revert !== false || !self.enabled, prevRefreshing = _refreshing;
          if (r !== self.isReverted) {
            if (r) {
              prevScroll = Math.max(scrollFunc(), self.scroll.rec || 0);
              prevProgress = self.progress;
              prevAnimProgress = animation && animation.progress();
            }
            markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function(m) {
              return m.style.display = r ? "none" : "block";
            });
            if (r) {
              _refreshing = self;
              self.update(r);
            }
            if (pin && (!pinReparent || !self.isActive)) {
              if (r) {
                _swapPinOut(pin, spacer, pinOriginalState);
              } else {
                _swapPinIn(pin, spacer, _getComputedStyle(pin), spacerState);
              }
            }
            r || self.update(r);
            _refreshing = prevRefreshing;
            self.isReverted = r;
          }
        };
        self.refresh = function(soft, force, position, pinOffset) {
          if ((_refreshing || !self.enabled) && !force) {
            return;
          }
          if (pin && soft && _lastScrollTime) {
            _addListener2(ScrollTrigger2, "scrollEnd", _softRefresh);
            return;
          }
          !_refreshingAll && onRefreshInit && onRefreshInit(self);
          _refreshing = self;
          if (tweenTo.tween && !position) {
            tweenTo.tween.kill();
            tweenTo.tween = 0;
          }
          scrubTween && scrubTween.pause();
          if (invalidateOnRefresh && animation) {
            animation.revert({
              kill: false
            }).invalidate();
            animation.getChildren && animation.getChildren(true, true, false).forEach(function(t) {
              return t.vars.immediateRender && t.render(0, true, true);
            });
          }
          self.isReverted || self.revert(true, true);
          self._subPinOffset = false;
          var size = getScrollerSize(), scrollerBounds = getScrollerOffsets(), max = containerAnimation ? containerAnimation.duration() : _maxScroll(scroller, direction), isFirstRefresh = change <= 0.01 || !change, offset2 = 0, otherPinOffset = pinOffset || 0, parsedEnd = _isObject(position) ? position.end : vars.end, parsedEndTrigger = vars.endTrigger || trigger, parsedStart = _isObject(position) ? position.start : vars.start || (vars.start === 0 || !trigger ? 0 : pin ? "0 0" : "0 100%"), pinnedContainer = self.pinnedContainer = vars.pinnedContainer && _getTarget(vars.pinnedContainer, self), triggerIndex = trigger && Math.max(0, _triggers.indexOf(self)) || 0, i = triggerIndex, cs2, bounds, scroll, isVertical, override, curTrigger, curPin, oppositeScroll, initted, revertedPins, forcedOverflow, markerStartOffset, markerEndOffset;
          if (markers && _isObject(position)) {
            markerStartOffset = gsap$1.getProperty(markerStartTrigger, direction.p);
            markerEndOffset = gsap$1.getProperty(markerEndTrigger, direction.p);
          }
          while (i-- > 0) {
            curTrigger = _triggers[i];
            curTrigger.end || curTrigger.refresh(0, 1) || (_refreshing = self);
            curPin = curTrigger.pin;
            if (curPin && (curPin === trigger || curPin === pin || curPin === pinnedContainer) && !curTrigger.isReverted) {
              revertedPins || (revertedPins = []);
              revertedPins.unshift(curTrigger);
              curTrigger.revert(true, true);
            }
            if (curTrigger !== _triggers[i]) {
              triggerIndex--;
              i--;
            }
          }
          _isFunction(parsedStart) && (parsedStart = parsedStart(self));
          parsedStart = _parseClamp(parsedStart, "start", self);
          start = _parsePosition(parsedStart, trigger, size, direction, scrollFunc(), markerStart, markerStartTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._startClamp && "_startClamp") || (pin ? -1e-3 : 0);
          _isFunction(parsedEnd) && (parsedEnd = parsedEnd(self));
          if (_isString(parsedEnd) && !parsedEnd.indexOf("+=")) {
            if (~parsedEnd.indexOf(" ")) {
              parsedEnd = (_isString(parsedStart) ? parsedStart.split(" ")[0] : "") + parsedEnd;
            } else {
              offset2 = _offsetToPx(parsedEnd.substr(2), size);
              parsedEnd = _isString(parsedStart) ? parsedStart : (containerAnimation ? gsap$1.utils.mapRange(0, containerAnimation.duration(), containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, start) : start) + offset2;
              parsedEndTrigger = trigger;
            }
          }
          parsedEnd = _parseClamp(parsedEnd, "end", self);
          end = Math.max(start, _parsePosition(parsedEnd || (parsedEndTrigger ? "100% 0" : max), parsedEndTrigger, size, direction, scrollFunc() + offset2, markerEnd, markerEndTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._endClamp && "_endClamp")) || -1e-3;
          offset2 = 0;
          i = triggerIndex;
          while (i--) {
            curTrigger = _triggers[i];
            curPin = curTrigger.pin;
            if (curPin && curTrigger.start - curTrigger._pinPush <= start && !containerAnimation && curTrigger.end > 0) {
              cs2 = curTrigger.end - (self._startClamp ? Math.max(0, curTrigger.start) : curTrigger.start);
              if ((curPin === trigger && curTrigger.start - curTrigger._pinPush < start || curPin === pinnedContainer) && isNaN(parsedStart)) {
                offset2 += cs2 * (1 - curTrigger.progress);
              }
              curPin === pin && (otherPinOffset += cs2);
            }
          }
          start += offset2;
          end += offset2;
          self._startClamp && (self._startClamp += offset2);
          if (self._endClamp && !_refreshingAll) {
            self._endClamp = end || -1e-3;
            end = Math.min(end, _maxScroll(scroller, direction));
          }
          change = end - start || (start -= 0.01) && 1e-3;
          if (isFirstRefresh) {
            prevProgress = gsap$1.utils.clamp(0, 1, gsap$1.utils.normalize(start, end, prevScroll));
          }
          self._pinPush = otherPinOffset;
          if (markerStart && offset2) {
            cs2 = {};
            cs2[direction.a] = "+=" + offset2;
            pinnedContainer && (cs2[direction.p] = "-=" + scrollFunc());
            gsap$1.set([markerStart, markerEnd], cs2);
          }
          if (pin && !(_clampingMax && self.end >= _maxScroll(scroller, direction))) {
            cs2 = _getComputedStyle(pin);
            isVertical = direction === _vertical;
            scroll = scrollFunc();
            pinStart = parseFloat(pinGetter(direction.a)) + otherPinOffset;
            if (!max && end > 1) {
              forcedOverflow = (isViewport ? _doc.scrollingElement || _docEl : scroller).style;
              forcedOverflow = {
                style: forcedOverflow,
                value: forcedOverflow["overflow" + direction.a.toUpperCase()]
              };
              if (isViewport && _getComputedStyle(_body)["overflow" + direction.a.toUpperCase()] !== "scroll") {
                forcedOverflow.style["overflow" + direction.a.toUpperCase()] = "scroll";
              }
            }
            _swapPinIn(pin, spacer, cs2);
            pinState = _getState(pin);
            bounds = _getBounds(pin, true);
            oppositeScroll = useFixedPosition && _getScrollFunc(scroller, isVertical ? _horizontal : _vertical)();
            if (pinSpacing) {
              spacerState = [pinSpacing + direction.os2, change + otherPinOffset + _px];
              spacerState.t = spacer;
              i = pinSpacing === _padding ? _getSize(pin, direction) + change + otherPinOffset : 0;
              if (i) {
                spacerState.push(direction.d, i + _px);
                spacer.style.flexBasis !== "auto" && (spacer.style.flexBasis = i + _px);
              }
              _setState(spacerState);
              if (pinnedContainer) {
                _triggers.forEach(function(t) {
                  if (t.pin === pinnedContainer && t.vars.pinSpacing !== false) {
                    t._subPinOffset = true;
                  }
                });
              }
              useFixedPosition && scrollFunc(prevScroll);
            } else {
              i = _getSize(pin, direction);
              i && spacer.style.flexBasis !== "auto" && (spacer.style.flexBasis = i + _px);
            }
            if (useFixedPosition) {
              override = {
                top: bounds.top + (isVertical ? scroll - start : oppositeScroll) + _px,
                left: bounds.left + (isVertical ? oppositeScroll : scroll - start) + _px,
                boxSizing: "border-box",
                position: "fixed"
              };
              override[_width] = override["max" + _Width] = Math.ceil(bounds.width) + _px;
              override[_height] = override["max" + _Height] = Math.ceil(bounds.height) + _px;
              override[_margin] = override[_margin + _Top] = override[_margin + _Right] = override[_margin + _Bottom] = override[_margin + _Left] = "0";
              override[_padding] = cs2[_padding];
              override[_padding + _Top] = cs2[_padding + _Top];
              override[_padding + _Right] = cs2[_padding + _Right];
              override[_padding + _Bottom] = cs2[_padding + _Bottom];
              override[_padding + _Left] = cs2[_padding + _Left];
              pinActiveState = _copyState(pinOriginalState, override, pinReparent);
              _refreshingAll && scrollFunc(0);
            }
            if (animation) {
              initted = animation._initted;
              _suppressOverwrites(1);
              animation.render(animation.duration(), true, true);
              pinChange = pinGetter(direction.a) - pinStart + change + otherPinOffset;
              pinMoves = Math.abs(change - pinChange) > 1;
              useFixedPosition && pinMoves && pinActiveState.splice(pinActiveState.length - 2, 2);
              animation.render(0, true, true);
              initted || animation.invalidate(true);
              animation.parent || animation.totalTime(animation.totalTime());
              _suppressOverwrites(0);
            } else {
              pinChange = change;
            }
            forcedOverflow && (forcedOverflow.value ? forcedOverflow.style["overflow" + direction.a.toUpperCase()] = forcedOverflow.value : forcedOverflow.style.removeProperty("overflow-" + direction.a));
          } else if (trigger && scrollFunc() && !containerAnimation) {
            bounds = trigger.parentNode;
            while (bounds && bounds !== _body) {
              if (bounds._pinOffset) {
                start -= bounds._pinOffset;
                end -= bounds._pinOffset;
              }
              bounds = bounds.parentNode;
            }
          }
          revertedPins && revertedPins.forEach(function(t) {
            return t.revert(false, true);
          });
          self.start = start;
          self.end = end;
          scroll1 = scroll2 = _refreshingAll ? prevScroll : scrollFunc();
          if (!containerAnimation && !_refreshingAll) {
            scroll1 < prevScroll && scrollFunc(prevScroll);
            self.scroll.rec = 0;
          }
          self.revert(false, true);
          lastRefresh = _getTime();
          if (snapDelayedCall) {
            lastSnap = -1;
            snapDelayedCall.restart(true);
          }
          _refreshing = 0;
          animation && isToggle && (animation._initted || prevAnimProgress) && animation.progress() !== prevAnimProgress && animation.progress(prevAnimProgress || 0, true).render(animation.time(), true, true);
          if (isFirstRefresh || prevProgress !== self.progress || containerAnimation || invalidateOnRefresh || animation && !animation._initted) {
            animation && !isToggle && (animation._initted || prevProgress || animation.vars.immediateRender !== false) && animation.totalProgress(containerAnimation && start < -1e-3 && !prevProgress ? gsap$1.utils.normalize(start, end, 0) : prevProgress, true);
            self.progress = isFirstRefresh || (scroll1 - start) / change === prevProgress ? 0 : prevProgress;
          }
          pin && pinSpacing && (spacer._pinOffset = Math.round(self.progress * pinChange));
          scrubTween && scrubTween.invalidate();
          if (!isNaN(markerStartOffset)) {
            markerStartOffset -= gsap$1.getProperty(markerStartTrigger, direction.p);
            markerEndOffset -= gsap$1.getProperty(markerEndTrigger, direction.p);
            _shiftMarker(markerStartTrigger, direction, markerStartOffset);
            _shiftMarker(markerStart, direction, markerStartOffset - (pinOffset || 0));
            _shiftMarker(markerEndTrigger, direction, markerEndOffset);
            _shiftMarker(markerEnd, direction, markerEndOffset - (pinOffset || 0));
          }
          isFirstRefresh && !_refreshingAll && self.update();
          if (onRefresh && !_refreshingAll && !executingOnRefresh) {
            executingOnRefresh = true;
            onRefresh(self);
            executingOnRefresh = false;
          }
        };
        self.getVelocity = function() {
          return (scrollFunc() - scroll2) / (_getTime() - _time2) * 1e3 || 0;
        };
        self.endAnimation = function() {
          _endAnimation(self.callbackAnimation);
          if (animation) {
            scrubTween ? scrubTween.progress(1) : !animation.paused() ? _endAnimation(animation, animation.reversed()) : isToggle || _endAnimation(animation, self.direction < 0, 1);
          }
        };
        self.labelToScroll = function(label) {
          return animation && animation.labels && (start || self.refresh() || start) + animation.labels[label] / animation.duration() * change || 0;
        };
        self.getTrailing = function(name) {
          var i = _triggers.indexOf(self), a = self.direction > 0 ? _triggers.slice(0, i).reverse() : _triggers.slice(i + 1);
          return (_isString(name) ? a.filter(function(t) {
            return t.vars.preventOverlaps === name;
          }) : a).filter(function(t) {
            return self.direction > 0 ? t.end <= start : t.start >= end;
          });
        };
        self.update = function(reset, recordVelocity, forceFake) {
          if (containerAnimation && !forceFake && !reset) {
            return;
          }
          var scroll = _refreshingAll === true ? prevScroll : self.scroll(), p = reset ? 0 : (scroll - start) / change, clipped = p < 0 ? 0 : p > 1 ? 1 : p || 0, prevProgress2 = self.progress, isActive, wasActive, toggleState, action, stateChanged, toggled, isAtMax, isTakingAction;
          if (recordVelocity) {
            scroll2 = scroll1;
            scroll1 = containerAnimation ? scrollFunc() : scroll;
            if (snap3) {
              snap22 = snap1;
              snap1 = animation && !isToggle ? animation.totalProgress() : clipped;
            }
          }
          if (anticipatePin && pin && !_refreshing && !_startup && _lastScrollTime) {
            if (!clipped && start < scroll + (scroll - scroll2) / (_getTime() - _time2) * anticipatePin) {
              clipped = 1e-4;
            } else if (clipped === 1 && end > scroll + (scroll - scroll2) / (_getTime() - _time2) * anticipatePin) {
              clipped = 0.9999;
            }
          }
          if (clipped !== prevProgress2 && self.enabled) {
            isActive = self.isActive = !!clipped && clipped < 1;
            wasActive = !!prevProgress2 && prevProgress2 < 1;
            toggled = isActive !== wasActive;
            stateChanged = toggled || !!clipped !== !!prevProgress2;
            self.direction = clipped > prevProgress2 ? 1 : -1;
            self.progress = clipped;
            if (stateChanged && !_refreshing) {
              toggleState = clipped && !prevProgress2 ? 0 : clipped === 1 ? 1 : prevProgress2 === 1 ? 2 : 3;
              if (isToggle) {
                action = !toggled && toggleActions[toggleState + 1] !== "none" && toggleActions[toggleState + 1] || toggleActions[toggleState];
                isTakingAction = animation && (action === "complete" || action === "reset" || action in animation);
              }
            }
            preventOverlaps && (toggled || isTakingAction) && (isTakingAction || scrub || !animation) && (_isFunction(preventOverlaps) ? preventOverlaps(self) : self.getTrailing(preventOverlaps).forEach(function(t) {
              return t.endAnimation();
            }));
            if (!isToggle) {
              if (scrubTween && !_refreshing && !_startup) {
                scrubTween._dp._time - scrubTween._start !== scrubTween._time && scrubTween.render(scrubTween._dp._time - scrubTween._start);
                if (scrubTween.resetTo) {
                  scrubTween.resetTo("totalProgress", clipped, animation._tTime / animation._tDur);
                } else {
                  scrubTween.vars.totalProgress = clipped;
                  scrubTween.invalidate().restart();
                }
              } else if (animation) {
                animation.totalProgress(clipped, !!(_refreshing && (lastRefresh || reset)));
              }
            }
            if (pin) {
              reset && pinSpacing && (spacer.style[pinSpacing + direction.os2] = spacingStart);
              if (!useFixedPosition) {
                pinSetter(_round(pinStart + pinChange * clipped));
              } else if (stateChanged) {
                isAtMax = !reset && clipped > prevProgress2 && end + 1 > scroll && scroll + 1 >= _maxScroll(scroller, direction);
                if (pinReparent) {
                  if (!reset && (isActive || isAtMax)) {
                    var bounds = _getBounds(pin, true), _offset = scroll - start;
                    _reparent(pin, _body, bounds.top + (direction === _vertical ? _offset : 0) + _px, bounds.left + (direction === _vertical ? 0 : _offset) + _px);
                  } else {
                    _reparent(pin, spacer);
                  }
                }
                _setState(isActive || isAtMax ? pinActiveState : pinState);
                pinMoves && clipped < 1 && isActive || pinSetter(pinStart + (clipped === 1 && !isAtMax ? pinChange : 0));
              }
            }
            snap3 && !tweenTo.tween && !_refreshing && !_startup && snapDelayedCall.restart(true);
            toggleClass && (toggled || once && clipped && (clipped < 1 || !_limitCallbacks)) && _toArray$1(toggleClass.targets).forEach(function(el) {
              return el.classList[isActive || once ? "add" : "remove"](toggleClass.className);
            });
            onUpdate && !isToggle && !reset && onUpdate(self);
            if (stateChanged && !_refreshing) {
              if (isToggle) {
                if (isTakingAction) {
                  if (action === "complete") {
                    animation.pause().totalProgress(1);
                  } else if (action === "reset") {
                    animation.restart(true).pause();
                  } else if (action === "restart") {
                    animation.restart(true);
                  } else {
                    animation[action]();
                  }
                }
                onUpdate && onUpdate(self);
              }
              if (toggled || !_limitCallbacks) {
                onToggle && toggled && _callback(self, onToggle);
                callbacks[toggleState] && _callback(self, callbacks[toggleState]);
                once && (clipped === 1 ? self.kill(false, 1) : callbacks[toggleState] = 0);
                if (!toggled) {
                  toggleState = clipped === 1 ? 1 : 3;
                  callbacks[toggleState] && _callback(self, callbacks[toggleState]);
                }
              }
              if (fastScrollEnd && !isActive && Math.abs(self.getVelocity()) > (_isNumber(fastScrollEnd) ? fastScrollEnd : 2500)) {
                _endAnimation(self.callbackAnimation);
                scrubTween ? scrubTween.progress(1) : _endAnimation(animation, action === "reverse" ? 1 : !clipped, 1);
              }
            } else if (isToggle && onUpdate && !_refreshing) {
              onUpdate(self);
            }
          }
          if (markerEndSetter) {
            var n = containerAnimation ? scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0) : scroll;
            markerStartSetter(n + (markerStartTrigger._isFlipped ? 1 : 0));
            markerEndSetter(n);
          }
          caMarkerSetter && caMarkerSetter(-scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0));
        };
        self.enable = function(reset, refresh) {
          if (!self.enabled) {
            self.enabled = true;
            _addListener2(scroller, "resize", _onResize);
            isViewport || _addListener2(scroller, "scroll", _onScroll2);
            onRefreshInit && _addListener2(ScrollTrigger2, "refreshInit", onRefreshInit);
            if (reset !== false) {
              self.progress = prevProgress = 0;
              scroll1 = scroll2 = lastSnap = scrollFunc();
            }
            refresh !== false && self.refresh();
          }
        };
        self.getTween = function(snap4) {
          return snap4 && tweenTo ? tweenTo.tween : scrubTween;
        };
        self.setPositions = function(newStart, newEnd, keepClamp, pinOffset) {
          if (containerAnimation) {
            var st = containerAnimation.scrollTrigger, duration = containerAnimation.duration(), _change = st.end - st.start;
            newStart = st.start + _change * newStart / duration;
            newEnd = st.start + _change * newEnd / duration;
          }
          self.refresh(false, false, {
            start: _keepClamp(newStart, keepClamp && !!self._startClamp),
            end: _keepClamp(newEnd, keepClamp && !!self._endClamp)
          }, pinOffset);
          self.update();
        };
        self.adjustPinSpacing = function(amount) {
          if (spacerState && amount) {
            var i = spacerState.indexOf(direction.d) + 1;
            spacerState[i] = parseFloat(spacerState[i]) + amount + _px;
            spacerState[1] = parseFloat(spacerState[1]) + amount + _px;
            _setState(spacerState);
          }
        };
        self.disable = function(reset, allowAnimation) {
          if (self.enabled) {
            reset !== false && self.revert(true, true);
            self.enabled = self.isActive = false;
            allowAnimation || scrubTween && scrubTween.pause();
            prevScroll = 0;
            pinCache && (pinCache.uncache = 1);
            onRefreshInit && _removeListener2(ScrollTrigger2, "refreshInit", onRefreshInit);
            if (snapDelayedCall) {
              snapDelayedCall.pause();
              tweenTo.tween && tweenTo.tween.kill() && (tweenTo.tween = 0);
            }
            if (!isViewport) {
              var i = _triggers.length;
              while (i--) {
                if (_triggers[i].scroller === scroller && _triggers[i] !== self) {
                  return;
                }
              }
              _removeListener2(scroller, "resize", _onResize);
              isViewport || _removeListener2(scroller, "scroll", _onScroll2);
            }
          }
        };
        self.kill = function(revert, allowAnimation) {
          self.disable(revert, allowAnimation);
          scrubTween && !allowAnimation && scrubTween.kill();
          id && delete _ids[id];
          var i = _triggers.indexOf(self);
          i >= 0 && _triggers.splice(i, 1);
          i === _i && _direction > 0 && _i--;
          i = 0;
          _triggers.forEach(function(t) {
            return t.scroller === self.scroller && (i = 1);
          });
          i || _refreshingAll || (self.scroll.rec = 0);
          if (animation) {
            animation.scrollTrigger = null;
            revert && animation.revert({
              kill: false
            });
            allowAnimation || animation.kill();
          }
          markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function(m) {
            return m.parentNode && m.parentNode.removeChild(m);
          });
          _primary === self && (_primary = 0);
          if (pin) {
            pinCache && (pinCache.uncache = 1);
            i = 0;
            _triggers.forEach(function(t) {
              return t.pin === pin && i++;
            });
            i || (pinCache.spacer = 0);
          }
          vars.onKill && vars.onKill(self);
        };
        _triggers.push(self);
        self.enable(false, false);
        customRevertReturn && customRevertReturn(self);
        if (animation && animation.add && !change) {
          var updateFunc = self.update;
          self.update = function() {
            self.update = updateFunc;
            _scrollers.cache++;
            start || end || self.refresh();
          };
          gsap$1.delayedCall(0.01, self.update);
          change = 0.01;
          start = end = 0;
        } else {
          self.refresh();
        }
        pin && _queueRefreshAll();
      };
      ScrollTrigger2.register = function register(core) {
        if (!_coreInitted$1) {
          gsap$1 = core || _getGSAP2();
          _windowExists() && window.document && ScrollTrigger2.enable();
          _coreInitted$1 = _enabled;
        }
        return _coreInitted$1;
      };
      ScrollTrigger2.defaults = function defaults2(config3) {
        if (config3) {
          for (var p in config3) {
            _defaults[p] = config3[p];
          }
        }
        return _defaults;
      };
      ScrollTrigger2.disable = function disable(reset, kill) {
        _enabled = 0;
        _triggers.forEach(function(trigger) {
          return trigger[kill ? "kill" : "disable"](reset);
        });
        _removeListener2(_win, "wheel", _onScroll2);
        _removeListener2(_doc, "scroll", _onScroll2);
        clearInterval(_syncInterval);
        _removeListener2(_doc, "touchcancel", _passThrough);
        _removeListener2(_body, "touchstart", _passThrough);
        _multiListener(_removeListener2, _doc, "pointerdown,touchstart,mousedown", _pointerDownHandler);
        _multiListener(_removeListener2, _doc, "pointerup,touchend,mouseup", _pointerUpHandler);
        _resizeDelay.kill();
        _iterateAutoRefresh(_removeListener2);
        for (var i = 0; i < _scrollers.length; i += 3) {
          _wheelListener(_removeListener2, _scrollers[i], _scrollers[i + 1]);
          _wheelListener(_removeListener2, _scrollers[i], _scrollers[i + 2]);
        }
      };
      ScrollTrigger2.enable = function enable() {
        _win = window;
        _doc = document;
        _docEl = _doc.documentElement;
        _body = _doc.body;
        if (gsap$1) {
          _toArray$1 = gsap$1.utils.toArray;
          _clamp = gsap$1.utils.clamp;
          _context$1 = gsap$1.core.context || _passThrough;
          _suppressOverwrites = gsap$1.core.suppressOverwrites || _passThrough;
          _scrollRestoration = _win.history.scrollRestoration || "auto";
          _lastScroll = _win.pageYOffset || 0;
          gsap$1.core.globals("ScrollTrigger", ScrollTrigger2);
          if (_body) {
            _enabled = 1;
            _div100vh = document.createElement("div");
            _div100vh.style.height = "100vh";
            _div100vh.style.position = "absolute";
            _refresh100vh();
            _rafBugFix();
            Observer.register(gsap$1);
            ScrollTrigger2.isTouch = Observer.isTouch;
            _fixIOSBug = Observer.isTouch && /(iPad|iPhone|iPod|Mac)/g.test(navigator.userAgent);
            _ignoreMobileResize = Observer.isTouch === 1;
            _addListener2(_win, "wheel", _onScroll2);
            _root = [_win, _doc, _docEl, _body];
            if (gsap$1.matchMedia) {
              ScrollTrigger2.matchMedia = function(vars) {
                var mm = gsap$1.matchMedia(), p;
                for (p in vars) {
                  mm.add(p, vars[p]);
                }
                return mm;
              };
              gsap$1.addEventListener("matchMediaInit", function() {
                return _revertAll();
              });
              gsap$1.addEventListener("matchMediaRevert", function() {
                return _revertRecorded();
              });
              gsap$1.addEventListener("matchMedia", function() {
                _refreshAll(0, 1);
                _dispatch("matchMedia");
              });
              gsap$1.matchMedia().add("(orientation: portrait)", function() {
                _setBaseDimensions();
                return _setBaseDimensions;
              });
            } else {
              console.warn("Requires GSAP 3.11.0 or later");
            }
            _setBaseDimensions();
            _addListener2(_doc, "scroll", _onScroll2);
            var bodyHasStyle = _body.hasAttribute("style"), bodyStyle = _body.style, border = bodyStyle.borderTopStyle, AnimationProto = gsap$1.core.Animation.prototype, bounds, i;
            AnimationProto.revert || Object.defineProperty(AnimationProto, "revert", {
              value: function value() {
                return this.time(-0.01, true);
              }
            });
            bodyStyle.borderTopStyle = "solid";
            bounds = _getBounds(_body);
            _vertical.m = Math.round(bounds.top + _vertical.sc()) || 0;
            _horizontal.m = Math.round(bounds.left + _horizontal.sc()) || 0;
            border ? bodyStyle.borderTopStyle = border : bodyStyle.removeProperty("border-top-style");
            if (!bodyHasStyle) {
              _body.setAttribute("style", "");
              _body.removeAttribute("style");
            }
            _syncInterval = setInterval(_sync, 250);
            gsap$1.delayedCall(0.5, function() {
              return _startup = 0;
            });
            _addListener2(_doc, "touchcancel", _passThrough);
            _addListener2(_body, "touchstart", _passThrough);
            _multiListener(_addListener2, _doc, "pointerdown,touchstart,mousedown", _pointerDownHandler);
            _multiListener(_addListener2, _doc, "pointerup,touchend,mouseup", _pointerUpHandler);
            _transformProp = gsap$1.utils.checkPrefix("transform");
            _stateProps.push(_transformProp);
            _coreInitted$1 = _getTime();
            _resizeDelay = gsap$1.delayedCall(0.2, _refreshAll).pause();
            _autoRefresh = [_doc, "visibilitychange", function() {
              var w = _win.innerWidth, h = _win.innerHeight;
              if (_doc.hidden) {
                _prevWidth = w;
                _prevHeight = h;
              } else if (_prevWidth !== w || _prevHeight !== h) {
                _onResize();
              }
            }, _doc, "DOMContentLoaded", _refreshAll, _win, "load", _refreshAll, _win, "resize", _onResize];
            _iterateAutoRefresh(_addListener2);
            _triggers.forEach(function(trigger) {
              return trigger.enable(0, 1);
            });
            for (i = 0; i < _scrollers.length; i += 3) {
              _wheelListener(_removeListener2, _scrollers[i], _scrollers[i + 1]);
              _wheelListener(_removeListener2, _scrollers[i], _scrollers[i + 2]);
            }
          }
        }
      };
      ScrollTrigger2.config = function config3(vars) {
        "limitCallbacks" in vars && (_limitCallbacks = !!vars.limitCallbacks);
        var ms = vars.syncInterval;
        ms && clearInterval(_syncInterval) || (_syncInterval = ms) && setInterval(_sync, ms);
        "ignoreMobileResize" in vars && (_ignoreMobileResize = ScrollTrigger2.isTouch === 1 && vars.ignoreMobileResize);
        if ("autoRefreshEvents" in vars) {
          _iterateAutoRefresh(_removeListener2) || _iterateAutoRefresh(_addListener2, vars.autoRefreshEvents || "none");
          _ignoreResize = (vars.autoRefreshEvents + "").indexOf("resize") === -1;
        }
      };
      ScrollTrigger2.scrollerProxy = function scrollerProxy(target, vars) {
        var t = _getTarget(target), i = _scrollers.indexOf(t), isViewport = _isViewport2(t);
        if (~i) {
          _scrollers.splice(i, isViewport ? 6 : 2);
        }
        if (vars) {
          isViewport ? _proxies.unshift(_win, vars, _body, vars, _docEl, vars) : _proxies.unshift(t, vars);
        }
      };
      ScrollTrigger2.clearMatchMedia = function clearMatchMedia(query) {
        _triggers.forEach(function(t) {
          return t._ctx && t._ctx.query === query && t._ctx.kill(true, true);
        });
      };
      ScrollTrigger2.isInViewport = function isInViewport(element, ratio, horizontal) {
        var bounds = (_isString(element) ? _getTarget(element) : element).getBoundingClientRect(), offset = bounds[horizontal ? _width : _height] * ratio || 0;
        return horizontal ? bounds.right - offset > 0 && bounds.left + offset < _win.innerWidth : bounds.bottom - offset > 0 && bounds.top + offset < _win.innerHeight;
      };
      ScrollTrigger2.positionInViewport = function positionInViewport(element, referencePoint, horizontal) {
        _isString(element) && (element = _getTarget(element));
        var bounds = element.getBoundingClientRect(), size = bounds[horizontal ? _width : _height], offset = referencePoint == null ? size / 2 : referencePoint in _keywords ? _keywords[referencePoint] * size : ~referencePoint.indexOf("%") ? parseFloat(referencePoint) * size / 100 : parseFloat(referencePoint) || 0;
        return horizontal ? (bounds.left + offset) / _win.innerWidth : (bounds.top + offset) / _win.innerHeight;
      };
      ScrollTrigger2.killAll = function killAll(allowListeners) {
        _triggers.slice(0).forEach(function(t) {
          return t.vars.id !== "ScrollSmoother" && t.kill();
        });
        if (allowListeners !== true) {
          var listeners = _listeners.killAll || [];
          _listeners = {};
          listeners.forEach(function(f) {
            return f();
          });
        }
      };
      return ScrollTrigger2;
    }();
    ScrollTrigger.version = "3.13.0";
    ScrollTrigger.saveStyles = function(targets) {
      return targets ? _toArray$1(targets).forEach(function(target) {
        if (target && target.style) {
          var i = _savedStyles.indexOf(target);
          i >= 0 && _savedStyles.splice(i, 5);
          _savedStyles.push(target, target.style.cssText, target.getBBox && target.getAttribute("transform"), gsap$1.core.getCache(target), _context$1());
        }
      }) : _savedStyles;
    };
    ScrollTrigger.revert = function(soft, media) {
      return _revertAll(!soft, media);
    };
    ScrollTrigger.create = function(vars, animation) {
      return new ScrollTrigger(vars, animation);
    };
    ScrollTrigger.refresh = function(safe) {
      return safe ? _onResize(true) : (_coreInitted$1 || ScrollTrigger.register()) && _refreshAll(true);
    };
    ScrollTrigger.update = function(force) {
      return ++_scrollers.cache && _updateAll(force === true ? 2 : 0);
    };
    ScrollTrigger.clearScrollMemory = _clearScrollMemory;
    ScrollTrigger.maxScroll = function(element, horizontal) {
      return _maxScroll(element, horizontal ? _horizontal : _vertical);
    };
    ScrollTrigger.getScrollFunc = function(element, horizontal) {
      return _getScrollFunc(_getTarget(element), horizontal ? _horizontal : _vertical);
    };
    ScrollTrigger.getById = function(id) {
      return _ids[id];
    };
    ScrollTrigger.getAll = function() {
      return _triggers.filter(function(t) {
        return t.vars.id !== "ScrollSmoother";
      });
    };
    ScrollTrigger.isScrolling = function() {
      return !!_lastScrollTime;
    };
    ScrollTrigger.snapDirectional = _snapDirectional;
    ScrollTrigger.addEventListener = function(type, callback) {
      var a = _listeners[type] || (_listeners[type] = []);
      ~a.indexOf(callback) || a.push(callback);
    };
    ScrollTrigger.removeEventListener = function(type, callback) {
      var a = _listeners[type], i = a && a.indexOf(callback);
      i >= 0 && a.splice(i, 1);
    };
    ScrollTrigger.batch = function(targets, vars) {
      var result = [], varsCopy = {}, interval = vars.interval || 0.016, batchMax = vars.batchMax || 1e9, proxyCallback = function proxyCallback2(type, callback) {
        var elements = [], triggers = [], delay = gsap$1.delayedCall(interval, function() {
          callback(elements, triggers);
          elements = [];
          triggers = [];
        }).pause();
        return function(self) {
          elements.length || delay.restart(true);
          elements.push(self.trigger);
          triggers.push(self);
          batchMax <= elements.length && delay.progress(1);
        };
      }, p;
      for (p in vars) {
        varsCopy[p] = p.substr(0, 2) === "on" && _isFunction(vars[p]) && p !== "onRefreshInit" ? proxyCallback(p, vars[p]) : vars[p];
      }
      if (_isFunction(batchMax)) {
        batchMax = batchMax();
        _addListener2(ScrollTrigger, "refresh", function() {
          return batchMax = vars.batchMax();
        });
      }
      _toArray$1(targets).forEach(function(target) {
        var config3 = {};
        for (p in varsCopy) {
          config3[p] = varsCopy[p];
        }
        config3.trigger = target;
        result.push(ScrollTrigger.create(config3));
      });
      return result;
    };
    var _clampScrollAndGetDurationMultiplier = function _clampScrollAndGetDurationMultiplier2(scrollFunc, current, end, max) {
      current > max ? scrollFunc(max) : current < 0 && scrollFunc(0);
      return end > max ? (max - current) / (end - current) : end < 0 ? current / (current - end) : 1;
    }, _allowNativePanning = function _allowNativePanning2(target, direction) {
      if (direction === true) {
        target.style.removeProperty("touch-action");
      } else {
        target.style.touchAction = direction === true ? "auto" : direction ? "pan-" + direction + (Observer.isTouch ? " pinch-zoom" : "") : "none";
      }
      target === _docEl && _allowNativePanning2(_body, direction);
    }, _overflow = {
      auto: 1,
      scroll: 1
    }, _nestedScroll = function _nestedScroll2(_ref5) {
      var event = _ref5.event, target = _ref5.target, axis = _ref5.axis;
      var node = (event.changedTouches ? event.changedTouches[0] : event).target, cache = node._gsap || gsap$1.core.getCache(node), time = _getTime(), cs;
      if (!cache._isScrollT || time - cache._isScrollT > 2e3) {
        while (node && node !== _body && (node.scrollHeight <= node.clientHeight && node.scrollWidth <= node.clientWidth || !(_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]))) {
          node = node.parentNode;
        }
        cache._isScroll = node && node !== target && !_isViewport2(node) && (_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]);
        cache._isScrollT = time;
      }
      if (cache._isScroll || axis === "x") {
        event.stopPropagation();
        event._gsapAllow = true;
      }
    }, _inputObserver = function _inputObserver2(target, type, inputs, nested) {
      return Observer.create({
        target,
        capture: true,
        debounce: false,
        lockAxis: true,
        type,
        onWheel: nested = nested && _nestedScroll,
        onPress: nested,
        onDrag: nested,
        onScroll: nested,
        onEnable: function onEnable() {
          return inputs && _addListener2(_doc, Observer.eventTypes[0], _captureInputs, false, true);
        },
        onDisable: function onDisable() {
          return _removeListener2(_doc, Observer.eventTypes[0], _captureInputs, true);
        }
      });
    }, _inputExp = /(input|label|select|textarea)/i, _inputIsFocused, _captureInputs = function _captureInputs2(e) {
      var isInput = _inputExp.test(e.target.tagName);
      if (isInput || _inputIsFocused) {
        e._gsapAllow = true;
        _inputIsFocused = isInput;
      }
    }, _getScrollNormalizer = function _getScrollNormalizer2(vars) {
      _isObject(vars) || (vars = {});
      vars.preventDefault = vars.isNormalizer = vars.allowClicks = true;
      vars.type || (vars.type = "wheel,touch");
      vars.debounce = !!vars.debounce;
      vars.id = vars.id || "normalizer";
      var _vars2 = vars, normalizeScrollX = _vars2.normalizeScrollX, momentum = _vars2.momentum, allowNestedScroll = _vars2.allowNestedScroll, onRelease = _vars2.onRelease, self, maxY, target = _getTarget(vars.target) || _docEl, smoother = gsap$1.core.globals().ScrollSmoother, smootherInstance = smoother && smoother.get(), content = _fixIOSBug && (vars.content && _getTarget(vars.content) || smootherInstance && vars.content !== false && !smootherInstance.smooth() && smootherInstance.content()), scrollFuncY = _getScrollFunc(target, _vertical), scrollFuncX = _getScrollFunc(target, _horizontal), scale = 1, initialScale = (Observer.isTouch && _win.visualViewport ? _win.visualViewport.scale * _win.visualViewport.width : _win.outerWidth) / _win.innerWidth, wheelRefresh = 0, resolveMomentumDuration = _isFunction(momentum) ? function() {
        return momentum(self);
      } : function() {
        return momentum || 2.8;
      }, lastRefreshID, skipTouchMove, inputObserver = _inputObserver(target, vars.type, true, allowNestedScroll), resumeTouchMove = function resumeTouchMove2() {
        return skipTouchMove = false;
      }, scrollClampX = _passThrough, scrollClampY = _passThrough, updateClamps = function updateClamps2() {
        maxY = _maxScroll(target, _vertical);
        scrollClampY = _clamp(_fixIOSBug ? 1 : 0, maxY);
        normalizeScrollX && (scrollClampX = _clamp(0, _maxScroll(target, _horizontal)));
        lastRefreshID = _refreshID;
      }, removeContentOffset = function removeContentOffset2() {
        content._gsap.y = _round(parseFloat(content._gsap.y) + scrollFuncY.offset) + "px";
        content.style.transform = "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, " + parseFloat(content._gsap.y) + ", 0, 1)";
        scrollFuncY.offset = scrollFuncY.cacheID = 0;
      }, ignoreDrag = function ignoreDrag2() {
        if (skipTouchMove) {
          requestAnimationFrame(resumeTouchMove);
          var offset = _round(self.deltaY / 2), scroll = scrollClampY(scrollFuncY.v - offset);
          if (content && scroll !== scrollFuncY.v + scrollFuncY.offset) {
            scrollFuncY.offset = scroll - scrollFuncY.v;
            var y = _round((parseFloat(content && content._gsap.y) || 0) - scrollFuncY.offset);
            content.style.transform = "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, " + y + ", 0, 1)";
            content._gsap.y = y + "px";
            scrollFuncY.cacheID = _scrollers.cache;
            _updateAll();
          }
          return true;
        }
        scrollFuncY.offset && removeContentOffset();
        skipTouchMove = true;
      }, tween, startScrollX, startScrollY, onStopDelayedCall, onResize = function onResize2() {
        updateClamps();
        if (tween.isActive() && tween.vars.scrollY > maxY) {
          scrollFuncY() > maxY ? tween.progress(1) && scrollFuncY(maxY) : tween.resetTo("scrollY", maxY);
        }
      };
      content && gsap$1.set(content, {
        y: "+=0"
      });
      vars.ignoreCheck = function(e) {
        return _fixIOSBug && e.type === "touchmove" && ignoreDrag() || scale > 1.05 && e.type !== "touchstart" || self.isGesturing || e.touches && e.touches.length > 1;
      };
      vars.onPress = function() {
        skipTouchMove = false;
        var prevScale = scale;
        scale = _round((_win.visualViewport && _win.visualViewport.scale || 1) / initialScale);
        tween.pause();
        prevScale !== scale && _allowNativePanning(target, scale > 1.01 ? true : normalizeScrollX ? false : "x");
        startScrollX = scrollFuncX();
        startScrollY = scrollFuncY();
        updateClamps();
        lastRefreshID = _refreshID;
      };
      vars.onRelease = vars.onGestureStart = function(self2, wasDragging) {
        scrollFuncY.offset && removeContentOffset();
        if (!wasDragging) {
          onStopDelayedCall.restart(true);
        } else {
          _scrollers.cache++;
          var dur = resolveMomentumDuration(), currentScroll, endScroll;
          if (normalizeScrollX) {
            currentScroll = scrollFuncX();
            endScroll = currentScroll + dur * 0.05 * -self2.velocityX / 0.227;
            dur *= _clampScrollAndGetDurationMultiplier(scrollFuncX, currentScroll, endScroll, _maxScroll(target, _horizontal));
            tween.vars.scrollX = scrollClampX(endScroll);
          }
          currentScroll = scrollFuncY();
          endScroll = currentScroll + dur * 0.05 * -self2.velocityY / 0.227;
          dur *= _clampScrollAndGetDurationMultiplier(scrollFuncY, currentScroll, endScroll, _maxScroll(target, _vertical));
          tween.vars.scrollY = scrollClampY(endScroll);
          tween.invalidate().duration(dur).play(0.01);
          if (_fixIOSBug && tween.vars.scrollY >= maxY || currentScroll >= maxY - 1) {
            gsap$1.to({}, {
              onUpdate: onResize,
              duration: dur
            });
          }
        }
        onRelease && onRelease(self2);
      };
      vars.onWheel = function() {
        tween._ts && tween.pause();
        if (_getTime() - wheelRefresh > 1e3) {
          lastRefreshID = 0;
          wheelRefresh = _getTime();
        }
      };
      vars.onChange = function(self2, dx, dy, xArray, yArray) {
        _refreshID !== lastRefreshID && updateClamps();
        dx && normalizeScrollX && scrollFuncX(scrollClampX(xArray[2] === dx ? startScrollX + (self2.startX - self2.x) : scrollFuncX() + dx - xArray[1]));
        if (dy) {
          scrollFuncY.offset && removeContentOffset();
          var isTouch = yArray[2] === dy, y = isTouch ? startScrollY + self2.startY - self2.y : scrollFuncY() + dy - yArray[1], yClamped = scrollClampY(y);
          isTouch && y !== yClamped && (startScrollY += yClamped - y);
          scrollFuncY(yClamped);
        }
        (dy || dx) && _updateAll();
      };
      vars.onEnable = function() {
        _allowNativePanning(target, normalizeScrollX ? false : "x");
        ScrollTrigger.addEventListener("refresh", onResize);
        _addListener2(_win, "resize", onResize);
        if (scrollFuncY.smooth) {
          scrollFuncY.target.style.scrollBehavior = "auto";
          scrollFuncY.smooth = scrollFuncX.smooth = false;
        }
        inputObserver.enable();
      };
      vars.onDisable = function() {
        _allowNativePanning(target, true);
        _removeListener2(_win, "resize", onResize);
        ScrollTrigger.removeEventListener("refresh", onResize);
        inputObserver.kill();
      };
      vars.lockAxis = vars.lockAxis !== false;
      self = new Observer(vars);
      self.iOS = _fixIOSBug;
      _fixIOSBug && !scrollFuncY() && scrollFuncY(1);
      _fixIOSBug && gsap$1.ticker.add(_passThrough);
      onStopDelayedCall = self._dc;
      tween = gsap$1.to(self, {
        ease: "power4",
        paused: true,
        inherit: false,
        scrollX: normalizeScrollX ? "+=0.1" : "+=0",
        scrollY: "+=0.1",
        modifiers: {
          scrollY: _interruptionTracker(scrollFuncY, scrollFuncY(), function() {
            return tween.pause();
          })
        },
        onUpdate: _updateAll,
        onComplete: onStopDelayedCall.vars.onComplete
      });
      return self;
    };
    ScrollTrigger.sort = function(func) {
      if (_isFunction(func)) {
        return _triggers.sort(func);
      }
      var scroll = _win.pageYOffset || 0;
      ScrollTrigger.getAll().forEach(function(t) {
        return t._sortY = t.trigger ? scroll + t.trigger.getBoundingClientRect().top : t.start + _win.innerHeight;
      });
      return _triggers.sort(func || function(a, b) {
        return (a.vars.refreshPriority || 0) * -1e6 + (a.vars.containerAnimation ? 1e6 : a._sortY) - ((b.vars.containerAnimation ? 1e6 : b._sortY) + (b.vars.refreshPriority || 0) * -1e6);
      });
    };
    ScrollTrigger.observe = function(vars) {
      return new Observer(vars);
    };
    ScrollTrigger.normalizeScroll = function(vars) {
      if (typeof vars === "undefined") {
        return _normalizer;
      }
      if (vars === true && _normalizer) {
        return _normalizer.enable();
      }
      if (vars === false) {
        _normalizer && _normalizer.kill();
        _normalizer = vars;
        return;
      }
      var normalizer = vars instanceof Observer ? vars : _getScrollNormalizer(vars);
      _normalizer && _normalizer.target === normalizer.target && _normalizer.kill();
      _isViewport2(normalizer.target) && (_normalizer = normalizer);
      return normalizer;
    };
    ScrollTrigger.core = {
      // smaller file size way to leverage in ScrollSmoother and Observer
      _getVelocityProp,
      _inputObserver,
      _scrollers,
      _proxies,
      bridge: {
        // when normalizeScroll sets the scroll position (ss = setScroll)
        ss: function ss() {
          _lastScrollTime || _dispatch("scrollStart");
          _lastScrollTime = _getTime();
        },
        // a way to get the _refreshing value in Observer
        ref: function ref() {
          return _refreshing;
        }
      }
    };
    _getGSAP2() && gsap$1.registerPlugin(ScrollTrigger);
    /*!
     * SplitText 3.13.0
     * https://gsap.com
     *
     * @license Copyright 2025, GreenSock. All rights reserved. Subject to the terms at https://gsap.com/standard-license.
     * @author: Jack Doyle
     */
    let gsap, _fonts, _coreInitted, _initIfNecessary = () => _coreInitted || SplitText.register(window.gsap), _charSegmenter = typeof Intl !== "undefined" ? new Intl.Segmenter() : 0, _toArray = (r) => typeof r === "string" ? _toArray(document.querySelectorAll(r)) : "length" in r ? Array.from(r) : [r], _elements = (targets) => _toArray(targets).filter((e) => e instanceof HTMLElement), _emptyArray = [], _context = function() {
    }, _spacesRegEx = /\s+/g, _emojiSafeRegEx = new RegExp("\\p{RI}\\p{RI}|\\p{Emoji}(\\p{EMod}|\\u{FE0F}\\u{20E3}?|[\\u{E0020}-\\u{E007E}]+\\u{E007F})?(\\u{200D}\\p{Emoji}(\\p{EMod}|\\u{FE0F}\\u{20E3}?|[\\u{E0020}-\\u{E007E}]+\\u{E007F})?)*|.", "gu"), _emptyBounds = { left: 0, top: 0, width: 0, height: 0 }, _stretchToFitSpecialChars = (collection, specialCharsRegEx) => {
      if (specialCharsRegEx) {
        let charsFound = new Set(collection.join("").match(specialCharsRegEx) || _emptyArray), i = collection.length, slots, word, char, combined;
        if (charsFound.size) {
          while (--i > -1) {
            word = collection[i];
            for (char of charsFound) {
              if (char.startsWith(word) && char.length > word.length) {
                slots = 0;
                combined = word;
                while (char.startsWith(combined += collection[i + ++slots]) && combined.length < char.length) {
                }
                if (slots && combined.length === char.length) {
                  collection[i] = char;
                  collection.splice(i + 1, slots);
                  break;
                }
              }
            }
          }
        }
      }
      return collection;
    }, _disallowInline = (element) => window.getComputedStyle(element).display === "inline" && (element.style.display = "inline-block"), _insertNodeBefore = (newChild, parent, existingChild) => parent.insertBefore(typeof newChild === "string" ? document.createTextNode(newChild) : newChild, existingChild), _getWrapper = (type, config3, collection) => {
      let className = config3[type + "sClass"] || "", { tag = "div", aria = "auto", propIndex = false } = config3, display = type === "line" ? "block" : "inline-block", incrementClass = className.indexOf("++") > -1, wrapper = (text) => {
        let el = document.createElement(tag), i = collection.length + 1;
        className && (el.className = className + (incrementClass ? " " + className + i : ""));
        propIndex && el.style.setProperty("--" + type, i + "");
        aria !== "none" && el.setAttribute("aria-hidden", "true");
        if (tag !== "span") {
          el.style.position = "relative";
          el.style.display = display;
        }
        el.textContent = text;
        collection.push(el);
        return el;
      };
      incrementClass && (className = className.replace("++", ""));
      wrapper.collection = collection;
      return wrapper;
    }, _getLineWrapper = (element, nodes, config3, collection) => {
      let lineWrapper = _getWrapper("line", config3, collection), textAlign = window.getComputedStyle(element).textAlign || "left";
      return (startIndex, endIndex) => {
        let newLine = lineWrapper("");
        newLine.style.textAlign = textAlign;
        element.insertBefore(newLine, nodes[startIndex]);
        for (; startIndex < endIndex; startIndex++) {
          newLine.appendChild(nodes[startIndex]);
        }
        newLine.normalize();
      };
    }, _splitWordsAndCharsRecursively = (element, config3, wordWrapper, charWrapper, prepForCharsOnly, deepSlice, ignore, charSplitRegEx, specialCharsRegEx, isNested) => {
      var _a;
      let nodes = Array.from(element.childNodes), i = 0, { wordDelimiter, reduceWhiteSpace = true, prepareText } = config3, elementBounds = element.getBoundingClientRect(), lastBounds = elementBounds, isPreformatted = !reduceWhiteSpace && window.getComputedStyle(element).whiteSpace.substring(0, 3) === "pre", ignoredPreviousSibling = 0, wordsCollection = wordWrapper.collection, wordDelimIsNotSpace, wordDelimString, wordDelimSplitter, curNode, words, curWordEl, startsWithSpace, endsWithSpace, j, bounds, curWordChars, clonedNode, curSubNode, tempSubNode, curTextContent, wordText, lastWordText, k;
      if (typeof wordDelimiter === "object") {
        wordDelimSplitter = wordDelimiter.delimiter || wordDelimiter;
        wordDelimString = wordDelimiter.replaceWith || "";
      } else {
        wordDelimString = wordDelimiter === "" ? "" : wordDelimiter || " ";
      }
      wordDelimIsNotSpace = wordDelimString !== " ";
      for (; i < nodes.length; i++) {
        curNode = nodes[i];
        if (curNode.nodeType === 3) {
          curTextContent = curNode.textContent || "";
          if (reduceWhiteSpace) {
            curTextContent = curTextContent.replace(_spacesRegEx, " ");
          } else if (isPreformatted) {
            curTextContent = curTextContent.replace(/\n/g, wordDelimString + "\n");
          }
          prepareText && (curTextContent = prepareText(curTextContent, element));
          curNode.textContent = curTextContent;
          words = wordDelimString || wordDelimSplitter ? curTextContent.split(wordDelimSplitter || wordDelimString) : curTextContent.match(charSplitRegEx) || _emptyArray;
          lastWordText = words[words.length - 1];
          endsWithSpace = wordDelimIsNotSpace ? lastWordText.slice(-1) === " " : !lastWordText;
          lastWordText || words.pop();
          lastBounds = elementBounds;
          startsWithSpace = wordDelimIsNotSpace ? words[0].charAt(0) === " " : !words[0];
          startsWithSpace && _insertNodeBefore(" ", element, curNode);
          words[0] || words.shift();
          _stretchToFitSpecialChars(words, specialCharsRegEx);
          deepSlice && isNested || (curNode.textContent = "");
          for (j = 1; j <= words.length; j++) {
            wordText = words[j - 1];
            if (!reduceWhiteSpace && isPreformatted && wordText.charAt(0) === "\n") {
              (_a = curNode.previousSibling) == null ? void 0 : _a.remove();
              _insertNodeBefore(document.createElement("br"), element, curNode);
              wordText = wordText.slice(1);
            }
            if (!reduceWhiteSpace && wordText === "") {
              _insertNodeBefore(wordDelimString, element, curNode);
            } else if (wordText === " ") {
              element.insertBefore(document.createTextNode(" "), curNode);
            } else {
              wordDelimIsNotSpace && wordText.charAt(0) === " " && _insertNodeBefore(" ", element, curNode);
              if (ignoredPreviousSibling && j === 1 && !startsWithSpace && wordsCollection.indexOf(ignoredPreviousSibling.parentNode) > -1) {
                curWordEl = wordsCollection[wordsCollection.length - 1];
                curWordEl.appendChild(document.createTextNode(charWrapper ? "" : wordText));
              } else {
                curWordEl = wordWrapper(charWrapper ? "" : wordText);
                _insertNodeBefore(curWordEl, element, curNode);
                ignoredPreviousSibling && j === 1 && !startsWithSpace && curWordEl.insertBefore(ignoredPreviousSibling, curWordEl.firstChild);
              }
              if (charWrapper) {
                curWordChars = _charSegmenter ? _stretchToFitSpecialChars([..._charSegmenter.segment(wordText)].map((s) => s.segment), specialCharsRegEx) : wordText.match(charSplitRegEx) || _emptyArray;
                for (k = 0; k < curWordChars.length; k++) {
                  curWordEl.appendChild(curWordChars[k] === " " ? document.createTextNode(" ") : charWrapper(curWordChars[k]));
                }
              }
              if (deepSlice && isNested) {
                curTextContent = curNode.textContent = curTextContent.substring(wordText.length + 1, curTextContent.length);
                bounds = curWordEl.getBoundingClientRect();
                if (bounds.top > lastBounds.top && bounds.left <= lastBounds.left) {
                  clonedNode = element.cloneNode();
                  curSubNode = element.childNodes[0];
                  while (curSubNode && curSubNode !== curWordEl) {
                    tempSubNode = curSubNode;
                    curSubNode = curSubNode.nextSibling;
                    clonedNode.appendChild(tempSubNode);
                  }
                  element.parentNode.insertBefore(clonedNode, element);
                  prepForCharsOnly && _disallowInline(clonedNode);
                }
                lastBounds = bounds;
              }
              if (j < words.length || endsWithSpace) {
                _insertNodeBefore(j >= words.length ? " " : wordDelimIsNotSpace && wordText.slice(-1) === " " ? " " + wordDelimString : wordDelimString, element, curNode);
              }
            }
          }
          element.removeChild(curNode);
          ignoredPreviousSibling = 0;
        } else if (curNode.nodeType === 1) {
          if (ignore && ignore.indexOf(curNode) > -1) {
            wordsCollection.indexOf(curNode.previousSibling) > -1 && wordsCollection[wordsCollection.length - 1].appendChild(curNode);
            ignoredPreviousSibling = curNode;
          } else {
            _splitWordsAndCharsRecursively(curNode, config3, wordWrapper, charWrapper, prepForCharsOnly, deepSlice, ignore, charSplitRegEx, specialCharsRegEx, true);
            ignoredPreviousSibling = 0;
          }
          prepForCharsOnly && _disallowInline(curNode);
        }
      }
    };
    const _SplitText = class _SplitText2 {
      constructor(elements, config3) {
        this.isSplit = false;
        _initIfNecessary();
        this.elements = _elements(elements);
        this.chars = [];
        this.words = [];
        this.lines = [];
        this.masks = [];
        this.vars = config3;
        this._split = () => this.isSplit && this.split(this.vars);
        let orig = [], timerId, checkWidths = () => {
          let i = orig.length, o;
          while (i--) {
            o = orig[i];
            let w = o.element.offsetWidth;
            if (w !== o.width) {
              o.width = w;
              this._split();
              return;
            }
          }
        };
        this._data = { orig, obs: typeof ResizeObserver !== "undefined" && new ResizeObserver(() => {
          clearTimeout(timerId);
          timerId = setTimeout(checkWidths, 200);
        }) };
        _context(this);
        this.split(config3);
      }
      split(config3) {
        this.isSplit && this.revert();
        this.vars = config3 = config3 || this.vars || {};
        let { type = "chars,words,lines", aria = "auto", deepSlice = true, smartWrap, onSplit, autoSplit = false, specialChars, mask } = this.vars, splitLines = type.indexOf("lines") > -1, splitCharacters = type.indexOf("chars") > -1, splitWords = type.indexOf("words") > -1, onlySplitCharacters = splitCharacters && !splitWords && !splitLines, specialCharsRegEx = specialChars && ("push" in specialChars ? new RegExp("(?:" + specialChars.join("|") + ")", "gu") : specialChars), finalCharSplitRegEx = specialCharsRegEx ? new RegExp(specialCharsRegEx.source + "|" + _emojiSafeRegEx.source, "gu") : _emojiSafeRegEx, ignore = !!config3.ignore && _elements(config3.ignore), { orig, animTime, obs } = this._data, onSplitResult;
        if (splitCharacters || splitWords || splitLines) {
          this.elements.forEach((element, index) => {
            orig[index] = {
              element,
              html: element.innerHTML,
              ariaL: element.getAttribute("aria-label"),
              ariaH: element.getAttribute("aria-hidden")
            };
            aria === "auto" ? element.setAttribute("aria-label", (element.textContent || "").trim()) : aria === "hidden" && element.setAttribute("aria-hidden", "true");
            let chars = [], words = [], lines = [], charWrapper = splitCharacters ? _getWrapper("char", config3, chars) : null, wordWrapper = _getWrapper("word", config3, words), i, curWord, smartWrapSpan, nextSibling;
            _splitWordsAndCharsRecursively(element, config3, wordWrapper, charWrapper, onlySplitCharacters, deepSlice && (splitLines || onlySplitCharacters), ignore, finalCharSplitRegEx, specialCharsRegEx, false);
            if (splitLines) {
              let nodes = _toArray(element.childNodes), wrapLine = _getLineWrapper(element, nodes, config3, lines), curNode, toRemove = [], lineStartIndex = 0, allBounds = nodes.map((n) => n.nodeType === 1 ? n.getBoundingClientRect() : _emptyBounds), lastBounds = _emptyBounds;
              for (i = 0; i < nodes.length; i++) {
                curNode = nodes[i];
                if (curNode.nodeType === 1) {
                  if (curNode.nodeName === "BR") {
                    toRemove.push(curNode);
                    wrapLine(lineStartIndex, i + 1);
                    lineStartIndex = i + 1;
                    lastBounds = allBounds[lineStartIndex];
                  } else {
                    if (i && allBounds[i].top > lastBounds.top && allBounds[i].left <= lastBounds.left) {
                      wrapLine(lineStartIndex, i);
                      lineStartIndex = i;
                    }
                    lastBounds = allBounds[i];
                  }
                }
              }
              lineStartIndex < i && wrapLine(lineStartIndex, i);
              toRemove.forEach((el) => {
                var _a;
                return (_a = el.parentNode) == null ? void 0 : _a.removeChild(el);
              });
            }
            if (!splitWords) {
              for (i = 0; i < words.length; i++) {
                curWord = words[i];
                if (splitCharacters || !curWord.nextSibling || curWord.nextSibling.nodeType !== 3) {
                  if (smartWrap && !splitLines) {
                    smartWrapSpan = document.createElement("span");
                    smartWrapSpan.style.whiteSpace = "nowrap";
                    while (curWord.firstChild) {
                      smartWrapSpan.appendChild(curWord.firstChild);
                    }
                    curWord.replaceWith(smartWrapSpan);
                  } else {
                    curWord.replaceWith(...curWord.childNodes);
                  }
                } else {
                  nextSibling = curWord.nextSibling;
                  if (nextSibling && nextSibling.nodeType === 3) {
                    nextSibling.textContent = (curWord.textContent || "") + (nextSibling.textContent || "");
                    curWord.remove();
                  }
                }
              }
              words.length = 0;
              element.normalize();
            }
            this.lines.push(...lines);
            this.words.push(...words);
            this.chars.push(...chars);
          });
          mask && this[mask] && this.masks.push(...this[mask].map((el) => {
            let maskEl = el.cloneNode();
            el.replaceWith(maskEl);
            maskEl.appendChild(el);
            el.className && (maskEl.className = el.className.replace(/(\b\w+\b)/g, "$1-mask"));
            maskEl.style.overflow = "clip";
            return maskEl;
          }));
        }
        this.isSplit = true;
        _fonts && (autoSplit ? _fonts.addEventListener("loadingdone", this._split) : _fonts.status === "loading" && console.warn("SplitText called before fonts loaded"));
        if ((onSplitResult = onSplit && onSplit(this)) && onSplitResult.totalTime) {
          this._data.anim = animTime ? onSplitResult.totalTime(animTime) : onSplitResult;
        }
        splitLines && autoSplit && this.elements.forEach((element, index) => {
          orig[index].width = element.offsetWidth;
          obs && obs.observe(element);
        });
        return this;
      }
      revert() {
        var _a, _b;
        let { orig, anim, obs } = this._data;
        obs && obs.disconnect();
        orig.forEach(({ element, html, ariaL, ariaH }) => {
          element.innerHTML = html;
          ariaL ? element.setAttribute("aria-label", ariaL) : element.removeAttribute("aria-label");
          ariaH ? element.setAttribute("aria-hidden", ariaH) : element.removeAttribute("aria-hidden");
        });
        this.chars.length = this.words.length = this.lines.length = orig.length = this.masks.length = 0;
        this.isSplit = false;
        _fonts == null ? void 0 : _fonts.removeEventListener("loadingdone", this._split);
        if (anim) {
          this._data.animTime = anim.totalTime();
          anim.revert();
        }
        (_b = (_a = this.vars).onRevert) == null ? void 0 : _b.call(_a, this);
        return this;
      }
      static create(elements, config3) {
        return new _SplitText2(elements, config3);
      }
      static register(core) {
        gsap = gsap || core || window.gsap;
        if (gsap) {
          _toArray = gsap.utils.toArray;
          _context = gsap.core.context || _context;
        }
        if (!_coreInitted && window.innerWidth > 0) {
          _fonts = document.fonts;
          _coreInitted = true;
        }
      }
    };
    _SplitText.version = "3.13.0";
    let SplitText = _SplitText;
    const v1 = "" + new URL("../files/hero-1.mp4", import.meta.url).href;
    const v2 = "" + new URL("../files/hero-2.mp4", import.meta.url).href;
    const v3 = "" + new URL("../files/hero-3.mp4", import.meta.url).href;
    const v4 = "" + new URL("../files/hero-4.mp4", import.meta.url).href;
    gsapWithCSS.registerPlugin(SplitText);
    gsapWithCSS.registerPlugin(ScrollTrigger);
    const videos = [null, v1, v2, v3, v4];
    let currentIndex = 1;
    const totalVideos = 4;
    let isAnimating = false;
    let queuedClick = false;
    const upcoming = () => currentIndex % totalVideos + 1;
    const getSrc = (i) => videos[i];
    const setSrc = (el, src) => {
      var _a;
      if (!el) return;
      if (el.src !== src) {
        el.src = src;
        try {
          (_a = el.load) == null ? void 0 : _a.call(el);
        } catch {
        }
      }
    };
    function armAutoplayAttrs(v) {
      if (!v) return;
      v.muted = true;
      v.defaultMuted = true;
      v.autoplay = true;
      v.playsInline = true;
      v.preload = "auto";
      v.controls = false;
      v.setAttribute("muted", "");
      v.setAttribute("playsinline", "");
      v.setAttribute("webkit-playsinline", "");
      v.setAttribute("autoplay", "");
      v.setAttribute("preload", "auto");
    }
    function hardAutoplay(video) {
      if (!video) return;
      const tryPlay = () => {
        var _a;
        const p = (_a = video.play) == null ? void 0 : _a.call(video);
        if (p && typeof p.then === "function") {
          p.catch(() => {
            const resume = () => {
              video.play().catch(() => {
              });
              window.removeEventListener("pointerdown", resume);
              window.removeEventListener("touchstart", resume);
              window.removeEventListener("click", resume);
              window.removeEventListener("keydown", resume);
              window.removeEventListener("wheel", resume);
            };
            window.addEventListener("pointerdown", resume, { once: true });
            window.addEventListener("touchstart", resume, { once: true });
            window.addEventListener("click", resume, { once: true });
            window.addEventListener("keydown", resume, { once: true });
            window.addEventListener("wheel", resume, { once: true, passive: true });
          });
        }
      };
      requestAnimationFrame(tryPlay);
      requestAnimationFrame(() => requestAnimationFrame(tryPlay));
      const onReady = () => {
        tryPlay();
        cleanup();
      };
      const cleanup = () => {
        video.removeEventListener("loadedmetadata", onReady);
        video.removeEventListener("loadeddata", onReady);
        video.removeEventListener("canplay", onReady);
        video.removeEventListener("canplaythrough", onReady);
      };
      video.addEventListener("loadedmetadata", onReady);
      video.addEventListener("loadeddata", onReady);
      video.addEventListener("canplay", onReady);
      video.addEventListener("canplaythrough", onReady);
      try {
        if (video.currentTime === 0) video.currentTime = 1e-3;
      } catch {
      }
      document.addEventListener("visibilitychange", () => {
        if (!document.hidden && (video.paused || video.readyState < 2)) tryPlay();
      });
      setTimeout(tryPlay, 200);
      setTimeout(tryPlay, 800);
    }
    function resetOverlayState(nextVideoEl) {
      gsapWithCSS.killTweensOf(nextVideoEl);
      gsapWithCSS.set(nextVideoEl, { clearProps: "all" });
      gsapWithCSS.set(nextVideoEl, {
        position: "absolute",
        left: "50%",
        top: "50%",
        width: "16rem",
        height: "16rem",
        xPercent: -50,
        yPercent: -50,
        visibility: "hidden",
        zIndex: 2,
        pointerEvents: "none"
      });
      gsapWithCSS.set("#mini-click", { autoAlpha: 1, pointerEvents: "auto" });
    }
    function updateSources({ currentVideo, nextVideo, bgVideo }) {
      const nextIdx = upcoming();
      setSrc(nextVideo, getSrc(currentIndex));
      setSrc(currentVideo, getSrc(nextIdx));
      setSrc(bgVideo, getSrc(currentIndex === totalVideos - 1 ? 1 : currentIndex));
    }
    function switchVideo(ctx) {
      const { currentVideo, nextVideo, bgVideo } = ctx;
      if (isAnimating) {
        queuedClick = true;
        return;
      }
      isAnimating = true;
      queuedClick = false;
      currentIndex = upcoming();
      gsapWithCSS.killTweensOf([nextVideo, currentVideo]);
      gsapWithCSS.set("#mini-click", { pointerEvents: "none" });
      updateSources(ctx);
      armAutoplayAttrs(bgVideo);
      hardAutoplay(bgVideo);
      gsapWithCSS.set(nextVideo, {
        visibility: "visible",
        position: "absolute",
        left: "50%",
        top: "50%",
        width: "16rem",
        height: "16rem",
        xPercent: -50,
        yPercent: -50,
        zIndex: 2,
        pointerEvents: "none"
      });
      const tl = gsapWithCSS.timeline({
        defaults: { ease: "power1.inOut" },
        onComplete: () => {
          resetOverlayState(nextVideo);
          isAnimating = false;
          if (queuedClick) {
            queuedClick = false;
            switchVideo(ctx);
          }
        }
      });
      tl.to(nextVideo, {
        width: "100%",
        height: "100%",
        left: 0,
        top: 0,
        xPercent: 0,
        yPercent: 0,
        duration: 1,
        onStart: () => {
          try {
            nextVideo.play();
          } catch {
          }
        }
      }).from(
        currentVideo,
        { transformOrigin: "center center", scale: 0, duration: 1.2 },
        0
      );
    }
    const isTouchScreen = (() => {
      try {
        if ("matchMedia" in window) {
          const mq = window.matchMedia("(pointer: coarse)");
          if ("matches" in mq) return mq.matches;
        }
      } catch {
      }
      return "ontouchstart" in window || navigator.maxTouchPoints > 0;
    })();
    if (isTouchScreen) {
      window.switchVideo = () => {
      };
    }
    function boot() {
      const clipFrame = document.querySelector(".hero__row") || document.querySelector(".hero") || document.querySelector("#video-frame");
      const miniClick = document.querySelector("#mini-click");
      const currentVideo = document.querySelector("#current-video");
      const nextVideo = document.querySelector("#next-video");
      const bgVideo = document.querySelector("#bg-video");
      [currentVideo, nextVideo, bgVideo].forEach(armAutoplayAttrs);
      setSrc(bgVideo, v1);
      setSrc(currentVideo, v2);
      setSrc(nextVideo, v1);
      hardAutoplay(bgVideo);
      resetOverlayState(nextVideo);
      gsapWithCSS.set("#mini-click", { autoAlpha: 1 });
      miniClick == null ? void 0 : miniClick.addEventListener("click", (e) => {
        e.preventDefault();
        switchVideo({ currentVideo, nextVideo, bgVideo });
      });
      if (clipFrame) {
        gsapWithCSS.set(clipFrame, {
          clipPath: "polygon(14% 0% , 72% 0%, 90% 90% , 0% 100%)",
          borderRadius: "0 0 40% 10%"
        });
        gsapWithCSS.from(clipFrame, {
          clipPath: "polygon(0% 0% , 100% 0%, 100% 100% , 0% 100%)",
          borderRadius: "0 0 0 0",
          ease: "power1.inOut",
          scrollTrigger: {
            trigger: clipFrame,
            start: "center center",
            end: "bottom center",
            scrub: true
          }
        });
      }
    }
    if (document.readyState === "loading") {
      document.addEventListener("DOMContentLoaded", boot, { once: true });
    } else {
      boot();
    }
    const tlClip = gsapWithCSS.timeline({
      scrollTrigger: {
        trigger: "#clip",
        start: "top top",
        scrub: 0.5,
        pin: true,
        pinSpacing: true
      }
    });
    tlClip.to(".mask-clip-path", {
      width: "100vw",
      height: "100vh",
      borderRadius: 0,
      ease: "none"
    });
    document.fonts.ready.then(() => {
      document.querySelectorAll(".anim-title").forEach((el) => {
        ScrollTrigger.create({
          trigger: el,
          start: "top 95%",
          once: true,
          onEnter: () => {
            gsapWithCSS.set(el, { opacity: 1 });
            const words = new SplitText(el, {
              type: "words",
              wordsClass: "word++"
            }).words;
            gsapWithCSS.from(words, {
              y: 40,
              opacity: 0,
              rotation: () => gsapWithCSS.utils.random(-20, 20),
              stagger: 0.1,
              duration: 1,
              ease: "back.out(1.7)"
            });
          }
        });
      });
    });
    gsapWithCSS.from(".about__subtext", {
      opacity: 0,
      y: 40,
      duration: 0.5,
      ease: "power2.out",
      scrollTrigger: { trigger: ".about__subtext", start: "top 95%", once: true }
    });
    function prepHeroIntro() {
      gsapWithCSS.set(".hero__label", {
        y: 60,
        opacity: 0,
        scale: 0.98,
        willChange: "transform,opacity"
      });
      gsapWithCSS.set(".hero__subtitle", {
        y: 22,
        opacity: 0,
        skewY: 5,
        willChange: "transform,opacity"
      });
      gsapWithCSS.set(".hero__btn", {
        y: 18,
        opacity: 0,
        scale: 0,
        willChange: "transform,opacity"
      });
      gsapWithCSS.set("#current-video", {
        scale: 0.7,
        rotation: 8,
        opacity: 0,
        willChange: "transform,opacity"
      });
    }
    function runHeroAnimations() {
      const tlIntro = gsapWithCSS.timeline({
        defaults: { ease: "power2.out" },
        scrollTrigger: { trigger: ".hero", start: "top 85%", once: true }
      });
      tlIntro.to(
        ".hero__label",
        {
          y: 0,
          opacity: 1,
          scale: 1,
          duration: 0.45,
          stagger: 0.09,
          immediateRender: false
        },
        0
      ).to(
        ".hero__subtitle",
        { y: 0, opacity: 1, skewY: 0, duration: 0.38, immediateRender: false },
        ">-0.18"
      ).to(
        ".hero__btn",
        {
          y: 0,
          opacity: 1,
          scale: 1,
          duration: 0.38,
          ease: "back.out(1.5)",
          immediateRender: false,
          onComplete: () => gsapWithCSS.set(".hero__btn", { clearProps: "transform,willChange" })
        },
        ">-0.13"
      ).to(
        "#current-video",
        {
          scale: 1.4,
          rotation: 0,
          opacity: 1,
          duration: 0.38,
          immediateRender: false,
          onComplete: () => gsapWithCSS.set("#current-video", { clearProps: "willChange" })
        },
        ">-0.12"
      );
    }
    function runDiscoverTextAnims() {
      const top = document.querySelector(".discover__top");
      if (top) {
        const titleEl = top.querySelector(".discover__title");
        const textEl = top.querySelector(".discover__text p");
        const tlTop = gsapWithCSS.timeline({
          defaults: { ease: "power1.out" },
          scrollTrigger: { trigger: top, start: "top 85%", once: true }
        });
        if (titleEl) {
          const stTitle = new SplitText(titleEl, { type: "words" });
          gsapWithCSS.set(stTitle.words, { opacity: 0 });
          tlTop.to(stTitle.words, { opacity: 1, duration: 0.4, stagger: 0.06 }, 0);
        }
        if (textEl) {
          const stText = new SplitText(textEl, { type: "words" });
          gsapWithCSS.set(stText.words, { opacity: 0 });
          tlTop.to(
            stText.words,
            { opacity: 1, duration: 0.5, stagger: 0.02 },
            ">-0.05"
          );
        }
      }
      document.querySelectorAll(".discover__item").forEach((card) => {
        const titleEl = card.querySelector(".discover__item-title");
        const bodyEl = card.querySelector(".discover__item-text");
        const tl = gsapWithCSS.timeline({
          defaults: { ease: "power1.out" },
          scrollTrigger: { trigger: card, start: "top 88%", once: true }
        });
        if (titleEl) {
          const splitTitle = new SplitText(titleEl, { type: "words" });
          gsapWithCSS.set(splitTitle.words, { opacity: 0 });
          tl.to(splitTitle.words, { opacity: 1, duration: 0.35, stagger: 0.06 }, 0);
        }
        if (bodyEl) {
          const splitBody = new SplitText(bodyEl, { type: "words" });
          gsapWithCSS.set(splitBody.words, { opacity: 0 });
          tl.to(
            splitBody.words,
            { opacity: 1, duration: 0.3, stagger: 0.03 },
            ">-0.05"
          );
        }
      });
    }
    (() => {
      const startPreloader = () => {
        const pre = document.getElementById("preloader");
        if (!pre) {
          prepHeroIntro();
          if (window.ScrollTrigger) ScrollTrigger.refresh();
          runHeroAnimations();
          runDiscoverTextAnims();
          if (window.ScrollTrigger) ScrollTrigger.refresh(true);
          return;
        }
        document.documentElement.style.overflow = "hidden";
        const elPercent = pre.querySelector("[data-preloader-percent]");
        const elStatus = pre.querySelector("[data-preloader-status]");
        const elFill = pre.querySelector("[data-preloader-fill]");
        const MIN_SHOW_MS = 900;
        const MAX_WAIT_MS = 7e3;
        const UPDATE_EASE = 0.18;
        const START_TS = performance.now();
        const collect = () => {
          const vids = Array.from(document.querySelectorAll("video")).filter(
            (v) => Boolean(v.src || v.getAttribute("src") || v.querySelector("source"))
          );
          const imgs = Array.from(document.images);
          return [.../* @__PURE__ */ new Set([...vids, ...imgs])];
        };
        let items = [];
        let loaded = 0;
        let viewProgress = 0;
        let done = false;
        const isReady = (el) => el.tagName === "VIDEO" ? el.readyState >= 2 : el.complete && el.naturalWidth > 0;
        const markLoaded = (el) => {
          if (!el.__pre_done) {
            el.__pre_done = true;
            loaded++;
          }
        };
        const attachVideo = (v) => {
          if (isReady(v)) {
            markLoaded(v);
            return;
          }
          const onReady = () => {
            markLoaded(v);
            cleanup();
          };
          const cleanup = () => {
            v.removeEventListener("loadeddata", onReady);
            v.removeEventListener("canplay", onReady);
            v.removeEventListener("canplaythrough", onReady);
            v.removeEventListener("error", onReady);
            v.removeEventListener("stalled", onReady);
            v.removeEventListener("suspend", onReady);
          };
          v.addEventListener("loadeddata", onReady);
          v.addEventListener("canplay", onReady);
          v.addEventListener("canplaythrough", onReady);
          v.addEventListener("error", onReady);
          v.addEventListener("stalled", onReady);
          v.addEventListener("suspend", onReady);
          try {
            v.load();
          } catch {
          }
        };
        const attachImg = (img) => {
          if (isReady(img)) {
            markLoaded(img);
            return;
          }
          const onLoad = () => {
            markLoaded(img);
            cleanup();
          };
          const onErr = () => {
            markLoaded(img);
            cleanup();
          };
          const cleanup = () => {
            img.removeEventListener("load", onLoad);
            img.removeEventListener("error", onErr);
          };
          img.addEventListener("load", onLoad);
          img.addEventListener("error", onErr);
        };
        const rafStep = () => {
          if (done) return;
          const target = loaded / Math.max(items.length, 1);
          viewProgress += (target - viewProgress) * UPDATE_EASE;
          const pct = target >= 1 && viewProgress >= 0.99 ? 100 : Math.floor(viewProgress * 100);
          if (elPercent) elPercent.textContent = String(pct).padStart(2, "0") + "%";
          if (elFill) elFill.style.width = pct + "%";
          const elapsed = performance.now() - START_TS;
          const allReady = loaded >= items.length && items.length > 0;
          const timedOut = elapsed > MAX_WAIT_MS;
          if (allReady && elapsed > MIN_SHOW_MS || timedOut) {
            closePreloader();
            return;
          }
          requestAnimationFrame(rafStep);
        };
        function closePreloader() {
          if (done) return;
          done = true;
          if (elStatus) elStatus.textContent = "READY";
          gsapWithCSS.to(
            {},
            {
              duration: 0.25,
              onUpdate: () => {
                viewProgress += (1 - viewProgress) * 0.3;
                const pct = viewProgress >= 0.99 ? 100 : Math.floor(viewProgress * 100);
                if (elPercent) elPercent.textContent = pct + "%";
                if (elFill) elFill.style.width = pct + "%";
              },
              onComplete: () => {
                prepHeroIntro();
                if (window.ScrollTrigger) ScrollTrigger.refresh();
                gsapWithCSS.to(pre, {
                  opacity: 0,
                  duration: 0.35,
                  ease: "power2.out",
                  onComplete() {
                    pre.remove();
                    document.documentElement.classList.add("site-ready");
                    document.documentElement.style.overflow = "";
                    runHeroAnimations();
                    runDiscoverTextAnims();
                    if (window.ScrollTrigger) ScrollTrigger.refresh(true);
                  }
                });
              }
            }
          );
        }
        const start = () => {
          items = collect();
          if (!items.length) {
            closePreloader();
            return;
          }
          if (elStatus) elStatus.textContent = "BOOTING METAGAME LAYER…";
          items.forEach(
            (el) => el.tagName === "VIDEO" ? attachVideo(el) : attachImg(el)
          );
          items.forEach((el) => {
            if (isReady(el)) markLoaded(el);
          });
          requestAnimationFrame(rafStep);
        };
        if (document.readyState === "loading") {
          document.addEventListener("DOMContentLoaded", start, { once: true });
        } else {
          setTimeout(start, 0);
        }
      };
      startPreloader();
    })();
    (() => {
      const mqlHoverFine = matchMedia("(hover: hover) and (pointer: fine)");
      const mqlCoarse = matchMedia("(pointer: coarse)");
      const mqlReduced = matchMedia("(prefers-reduced-motion: reduce)");
      const isLikelyTouch = mqlCoarse.matches || !mqlHoverFine.matches || "ontouchstart" in window || navigator.maxTouchPoints > 0;
      if (isLikelyTouch || mqlReduced.matches) {
        document.documentElement.classList.add("tilt-disabled");
        return;
      }
      const clamp3 = (v, a, b) => Math.min(b, Math.max(a, v));
      const deadzone01 = (t, d = 0.055) => clamp3(t, d, 1 - d);
      const lerp = (a, b, t) => a + (b - a) * t;
      function initTilt(card) {
        if (card.dataset.tiltReady) return;
        card.dataset.tiltReady = "1";
        const max = Number(card.dataset.tiltMax ?? 12);
        const scaleHover = Number(card.dataset.tiltScale ?? 0.985);
        const perspective = Number(card.dataset.tiltPerspective ?? 2500);
        const glare = (card.dataset.tiltGlare ?? "true") !== "false";
        const tilt = card.querySelector(".discover__tilt");
        if (!tilt) return;
        let glareEl = glare ? tilt.querySelector(".discover__glare") : null;
        if (glare && !glareEl) {
          glareEl = document.createElement("span");
          glareEl.className = "discover__glare";
          tilt.appendChild(glareEl);
        }
        let rect = null, rectDirty = false, raf = 0, hover = false;
        let tx = 0.5, ty = 0.5, targetX = 0.5, targetY = 0.5;
        let s = 1, targetS = 1;
        const setVar = (name, val) => tilt.style.setProperty(name, val);
        function measure() {
          rect = card.getBoundingClientRect();
          rectDirty = false;
        }
        function enter() {
          measure();
          hover = true;
          targetS = scaleHover;
          card.classList.add("is-tilting");
          setVar("--p", perspective + "px");
          if (glareEl) glareEl.style.opacity = "0.55";
          if (!raf) raf = requestAnimationFrame(tick);
        }
        function move(e) {
          if (!hover) return;
          if (!rect) measure();
          const rawX = (e.clientX - rect.left) / rect.width;
          const rawY = (e.clientY - rect.top) / rect.height;
          targetX = deadzone01(rawX);
          targetY = deadzone01(rawY);
          if (!raf) raf = requestAnimationFrame(tick);
        }
        function leave() {
          hover = false;
          targetX = 0.5;
          targetY = 0.5;
          targetS = 1;
          if (glareEl) glareEl.style.opacity = "0";
          if (!raf) raf = requestAnimationFrame(tick);
          card.classList.remove("is-tilting");
        }
        function tick() {
          raf = 0;
          if (rectDirty) measure();
          tx = lerp(tx, targetX, 0.18);
          ty = lerp(ty, targetY, 0.18);
          s = lerp(s, targetS, 0.25);
          const ry = clamp3((tx - 0.5) * (max * 2), -max, max);
          const rx = clamp3(-(ty - 0.5) * (max * 2), -max, max);
          setVar("--ry", ry + "deg");
          setVar("--rx", rx + "deg");
          setVar("--s", s);
          if (glareEl) {
            glareEl.style.setProperty("--gx", clamp3(tx * 100, 2, 98) + "%");
            glareEl.style.setProperty("--gy", clamp3(ty * 100, 2, 98) + "%");
          }
          const settling = Math.abs(targetX - tx) > 1e-3 || Math.abs(targetY - ty) > 1e-3 || Math.abs(targetS - s) > 1e-3 || hover;
          if (settling) raf = requestAnimationFrame(tick);
        }
        card.addEventListener("pointerenter", enter, { passive: true });
        card.addEventListener("pointermove", move, { passive: true });
        card.addEventListener("pointerleave", leave, { passive: true });
        const onDirty = () => {
          if (hover) rectDirty = true;
        };
        addEventListener("resize", onDirty, { passive: true });
        addEventListener("scroll", onDirty, { passive: true, capture: true });
      }
      document.querySelectorAll(".discover__item.js-tilt").forEach(initTilt);
    })();
    (() => {
      const isCoarse = matchMedia("(pointer: coarse)").matches;
      const isReduced = matchMedia("(prefers-reduced-motion: reduce)").matches;
      if (isCoarse || isReduced) return;
      document.querySelectorAll("[data-tilt-area]").forEach((area) => {
        const frame = area.querySelector("[data-tilt-target]");
        if (!frame) return;
        const MAX = Number(area.getAttribute("data-tilt-max")) || 12;
        const PERS = Number(area.getAttribute("data-tilt-perspective")) || 1500;
        const LERP = Number(area.getAttribute("data-tilt-lerp")) || 0.18;
        gsapWithCSS.set(frame, {
          transformStyle: "preserve-3d",
          backfaceVisibility: "hidden",
          willChange: "transform",
          transformPerspective: PERS
        });
        const setRX = gsapWithCSS.quickSetter(frame, "rotationX", "deg");
        const setRY = gsapWithCSS.quickSetter(frame, "rotationY", "deg");
        const setP = gsapWithCSS.quickSetter(frame, "transformPerspective", "px");
        let rect, hover = false;
        const state = { rx: 0, ry: 0 };
        const target = { rx: 0, ry: 0 };
        const clamp3 = (v, a, b) => Math.min(b, Math.max(a, v));
        const dead01 = (t, d = 0.02) => clamp3(t, d, 1 - d);
        const updateRect = () => {
          rect = area.getBoundingClientRect();
        };
        const apply = () => {
          setP(PERS);
          setRX(state.rx);
          setRY(state.ry);
        };
        const tick = () => {
          if (!hover) return;
          state.rx += (target.rx - state.rx) * LERP;
          state.ry += (target.ry - state.ry) * LERP;
          apply();
        };
        gsapWithCSS.ticker.add(tick);
        area.addEventListener(
          "pointerenter",
          () => {
            hover = true;
            updateRect();
            gsapWithCSS.to(frame, { scale: 0.985, duration: 0.25, ease: "expo.out" });
          },
          { passive: true }
        );
        area.addEventListener(
          "pointermove",
          (e) => {
            if (!hover) return;
            if (!rect) updateRect();
            let x = (e.clientX - rect.left) / rect.width;
            let y = (e.clientY - rect.top) / rect.height;
            x = dead01(x);
            y = dead01(y);
            target.ry = clamp3((x - 0.5) * (MAX * 2), -MAX, MAX);
            target.rx = clamp3(-(y - 0.5) * (MAX * 2), -MAX, MAX);
          },
          { passive: true }
        );
        area.addEventListener(
          "pointerleave",
          () => {
            hover = false;
            gsapWithCSS.to(state, {
              rx: 0,
              ry: 0,
              duration: 0.35,
              ease: "expo.out",
              onUpdate: apply
            });
            gsapWithCSS.to(frame, { scale: 1, duration: 0.25, ease: "expo.out" });
          },
          { passive: true }
        );
        addEventListener("resize", () => hover && updateRect(), { passive: true });
        addEventListener("scroll", () => hover && updateRect(), { passive: true });
      });
    })();
    const btn = document.querySelector(".menu__audio-toggle");
    const audio = document.getElementById("bg-audio");
    if (btn && audio) {
      let isPlaying = false;
      const updateUI = () => {
        btn.setAttribute("aria-pressed", String(isPlaying));
        btn.setAttribute(
          "aria-label",
          isPlaying ? "Вимкнути музику" : "Увімкнути музику"
        );
        btn.classList.toggle("is-playing", isPlaying);
        if (isPlaying) {
          btn.classList.remove("--icon-music");
        } else {
          btn.classList.add("--icon-music");
        }
      };
      btn.addEventListener("click", () => {
        if (!isPlaying) {
          audio.play().then(() => {
            isPlaying = true;
            updateUI();
          }).catch((err) => console.warn("Playback blocked:", err));
        } else {
          audio.pause();
          isPlaying = false;
          updateUI();
        }
      });
    }
    

    In conclusion, building an Animated Gaming Website using GSAP with HTML, CSS, and JavaScript is a great way to create a high-energy and immersive web experience. By combining smooth GSAP animations with modern layouts and interactions, you can bring gaming websites to life 🎮✨

    If you run into any problems with your project, worry not. The remedy is just a click away – Download the source code and confront your coding challenges with enthusiasm. Enjoy your coding adventure!

    Animation CSS Animation
    Share. Copy Link Twitter Facebook LinkedIn Email WhatsApp
    Previous ArticleHow to make Awesome Cool Loading Animation in HTML CSS & JS
    Coding Stella
    • Website

    Related Posts

    JavaScript

    How to make Awesome Cool Loading Animation in HTML CSS & JS

    15 December 2025
    HTML & CSS

    How to make Christmas Tree Animation using HTML and CSS

    12 December 2025
    JavaScript

    How to make Scooter Bike Animation Scroll in HTML CSS & JS

    6 December 2025
    Add A Comment
    Leave A Reply Cancel Reply

    Trending Post

    Master Frontend in 100 Days Ebook

    2 March 202431K Views

    How to make Modern Login Form using HTML & CSS | Glassmorphism

    11 January 202430K Views

    How to make I love you Animation in HTML CSS & JavaScript

    14 February 202423K Views

    How to make Valentine’s Day Card using HTML & CSS

    13 February 202415K Views
    Follow Us
    • Instagram
    • Facebook
    • YouTube
    • Twitter
    ads
    Featured Post

    How to create Order Confirm Animation using HTML CSS and JS

    27 June 2025

    How to create Cool Responsive Card Slider using HTML CSS & JavaScript

    17 January 2025

    How to make Hi-Tech Notification Button using HTML & CSS

    1 June 2024

    How to make Animated Pepsi Product Card using HTML & CSS

    19 August 2025
    Latest Post

    How to make Animated Gaming Website GSAP in HTML CSS & JS

    20 December 2025

    How to make Awesome Cool Loading Animation in HTML CSS & JS

    15 December 2025

    How to make Christmas Tree Animation using HTML and CSS

    12 December 2025

    How to make Scooter Bike Animation Scroll in HTML CSS & JS

    6 December 2025
    Facebook X (Twitter) Instagram YouTube
    • About Us
    • Privacy Policy
    • Return and Refund Policy
    • Terms and Conditions
    • Contact Us
    • Buy me a coffee
    © 2025 Coding Stella. Made with 💙 by @coding.stella

    Type above and press Enter to search. Press Esc to cancel.

    Ad Blocker Enabled!
    Ad Blocker Enabled!
    Looks like you're using an ad blocker. We rely on advertising to help fund our site.
    Okay! I understood