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!
