# MASTER PROMPT — Dewpoint — Barrier-first Skincare · v2
### Plain HTML, CSS and JavaScript. No WordPress, no page builder, no framework, no build step.
## ▶ HOW TO USE THIS PROMPT
**Paste this whole document into Claude. Nothing to attach.** It carries the complete source of the page — including its own copies of GSAP, ScrollTrigger, CustomEase and Lenis — plus the address of every image and font, so Claude can assemble a folder that owns all of its assets and hand it back as a zip that runs with the network off.
**INSTRUCTION TO CLAUDE — BUILD IT, DO NOT ASK.** Write the files, download the media, zip the folder, hand over the archive, then report.
1. Create a folder named `dewpoint` and write out every file in the appendix at the path in its heading (keep the `css/`, `js/` and `js/vendor/` folders). Do not reformat, rename, shorten, reorder or "improve" anything.
2. **Download the 21 images into `images/` and the 3 fonts into `fonts/`.** The code already points at `images/…` and `../fonts/…`. Run from inside the folder:
```bash
mkdir -p images fonts
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-cta-shelf.jpg' -o 'images/cta-shelf.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-hero-macro.jpg' -o 'images/hero-macro.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-hero-serum.png' -o 'images/hero-serum.png'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-betaglucan.jpg' -o 'images/ing-betaglucan.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-ceramides.jpg' -o 'images/ing-ceramides.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-niacinamide.jpg' -o 'images/ing-niacinamide.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-panthenol.jpg' -o 'images/ing-panthenol.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-squalane.jpg' -o 'images/ing-squalane.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-zinc.jpg' -o 'images/ing-zinc.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-balm.png' -o 'images/prod-balm.png'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-cleanser.png' -o 'images/prod-cleanser.png'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-drops.png' -o 'images/prod-drops.png'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-gelcream.png' -o 'images/prod-gelcream.png'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-serum.png' -o 'images/prod-serum.png'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-spf.png' -o 'images/prod-spf.png'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-squalane.png' -o 'images/prod-squalane.png'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ritual-cleanse.jpg' -o 'images/ritual-cleanse.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ritual-protect.jpg' -o 'images/ritual-protect.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ritual-treat.jpg' -o 'images/ritual-treat.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ritual-wide.jpg' -o 'images/ritual-wide.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-smear-backdrop.jpg' -o 'images/smear-backdrop.jpg'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__fonts-host-grotesk-latin.woff2' -o 'fonts/host-grotesk-latin.woff2'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__fonts-rethink-sans-latin.woff2' -o 'fonts/rethink-sans-latin.woff2'
curl -fsSL 'https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__fonts-sometype-mono-latin.woff2' -o 'fonts/sometype-mono-latin.woff2'
```
Then confirm nothing is a zero-byte or HTML error page:
```bash
ls images | wc -l # expect 21
ls fonts | wc -l # expect 3
find images fonts -size -1k # expect no output
```
If a download fails, retry it — do **not** fall back to hotlinking; the folder must work offline.
3. **Zip the folder and hand over `dewpoint.zip`** as a downloadable file (not text). Shape:
```
dewpoint/
index.html
css/style.css
js/main.js js/smear.js
js/vendor/ (gsap, ScrollTrigger, CustomEase, lenis + lenis.css)
fonts/ (3 woff2)
images/ (21 images)
```
```bash
zip -r dewpoint.zip dewpoint -x '*.DS_Store'
```
4. Serve it and confirm it runs offline before handing over:
```bash
cd dewpoint && python3 -m http.server 8000 # open http://localhost:8000
```
Check the intro plays into the hero, the ribbon marquee runs, the product orbit **revolves on hover**, the ritual pins and cross-fades, the smear canvas smears, the ingredient panel opens, the quiz returns a trio — all offline. Then check 390 / 768 / 1024 / 1440 px: no overlaps, no horizontal scroll, nav links jump to sections.
The finished folder needs no network at all. The appendix is the deliverable; do not rebuild from the description.
---
## ▶ WHAT YOU GET
Dewpoint is a barrier-first skincare brand with seven formulas. This is its one-page site.
**A `dewpoint/` folder — HTML, CSS, two scripts, four vendored libraries, 3 fonts and 21 images — delivered as `dewpoint.zip`, fully offline.**
| File | What it is |
| `index.html` | the page, 27 KB |
| `css/style.css` | the stylesheet + `@font-face`, 31 KB |
| `js/main.js` | intro, header, hover-revolve orbit, ritual pin, ingredient panel, reviews, quiz |
| `js/smear.js` | the drag-to-smear `<canvas>` texture effect |
| `js/vendor/` | GSAP, ScrollTrigger, CustomEase, Lenis (+ `lenis.css`) |
| `fonts/` · `images/` | downloaded at build time |
**Sections:** intro loader · hero (`#top`) · range (`#range`) · ritual (`#ritual`) · ritual steps (`#ritual-steps`) · smear test (`#smear`) · ingredients (`#ingredients`) · reviews (`#reviews`) · quiz (`#quiz`) · footer.
---
## ▶ HOW THE PAGE MOVES
- **Intro loader** — a droplet falls, then the hero opens from a circle wipe. `?skip-intro`, `?static` and reduced motion skip it.
- **Hero** — a jelly-pink ribbon runs a `textPath` marquee behind the serum bottle, with a parallax lift.
- **Range** — a 3-D depth-orbit of the seven products: hover the orbit and the ring revolves continuously, settling on the nearest product when you leave; a rotating label ring and a live readout follow. No prev/next buttons.
- **Ritual** — a full-height statement, then a wide basin image that reveals as it pins.
- **Ritual steps** — Cleanse · Treat · Protect: a pinned card cross-fades through three shots as the copy scrolls.
- **Smear test** — an interactive `<canvas>`: drag to smear; chips swap the read-outs; it wipes after a few seconds.
- **Ingredients** — a pinned horizontal accordion of six actives with a custom cursor and a slide-in side panel.
- **Reviews** — two opposed marquee rows over a barrier-study stat row.
- **Quiz** — three questions return a three-product trio, on the page.
Smooth scrolling is Lenis; the motion is GSAP + ScrollTrigger with CustomEase. All ship inside the zip under `js/vendor/`.
---
## ▶ WHERE THE MEDIA COMES FROM
The 21 images live in `images/` and the 3 fonts in `fonts/`, exactly where the markup, CSS and scripts point. Once assembled, the folder owns everything: no CDN, no media library, no external host.
Images and fonts are fetched **once, at build time**, from the WordPress media library on `https://demo.uichemy.com` — the same `dewpoint__` files the WordPress build uses. Nothing in the delivered code points back at that host, and the libraries under `js/vendor/` ship verbatim in the appendix, so the site needs no network once built.
---
## ▶ WHAT THIS PROMPT DELIBERATELY DOES NOT CONTAIN
- No WordPress, no page builder, no builder wrapper classes. The WordPress build is a separate prompt.
- No framework, no TypeScript, no bundler, no `package.json`.
- No backend. The quiz runs on the page; nothing posts anywhere.
- No external host at runtime — images, fonts and libraries all ship inside the zip.
---
# APPENDIX · VERBATIM SOURCE
Transcribe every file exactly, at the path in its heading. The image and font paths already read `images/…` and `../fonts/…`; do not change them.
## `index.html`
```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Dewpoint · Barrier-first skincare</title>
<meta name="description" content="Dewpoint makes seven short-list skincare formulas built around one job: a calmer, stronger skin barrier. Percentages on the front, fragrance-free, refillable.">
<meta name="theme-color" content="#6F7DFF">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' fill='%236F7DFF'/%3E%3Cpath d='M32 9C38 22 48 31 48 42a16 16 0 0 1-32 0c0-11 10-20 16-33z' fill='%23FFB3F0'/%3E%3C/svg%3E">
<link rel="stylesheet" href="js/vendor/lenis.css">
<link rel="stylesheet" href="css/style.css">
<script>
// flags before first paint: ?skip-intro, ?static, reduced motion
(function () {
var q = location.search, h = document.documentElement;
var rm = window.matchMedia && matchMedia('(prefers-reduced-motion: reduce)').matches;
h.classList.add('js');
if (rm) h.classList.add('is-rm'); else h.classList.add('fx');
if (/[?&]static\b/.test(q)) h.classList.add('is-static');
if (!rm && !/[?&](skip-intro|static)\b/.test(q)) h.classList.add('is-intro');
})();
</script>
</head>
<body>
<div class="loader" aria-hidden="true">
<svg class="loader-drop" viewBox="0 0 40 56"><path d="M20 0C26 14 40 25 40 37a20 20 0 0 1-40 0C0 25 14 14 20 0z" fill="#6F7DFF"/></svg>
<span class="loader-ring"></span>
<span class="loader-note mono">Dewpoint · barrier-first</span>
</div>
<a class="skip" href="#range">Skip to the range</a>
<header class="hdr" data-theme="light">
<a class="hdr-mark" href="#top" aria-label="Dewpoint, back to top">DEWPOINT</a>
<nav class="hdr-nav" aria-label="Sections">
<a href="#range">Range</a>
<a href="#ritual">Ritual</a>
<a href="#smear">Smear test</a>
<a href="#ingredients">Ingredients</a>
<a href="#reviews">Reviews</a>
</nav>
<a class="hdr-cta" href="#quiz">Skin quiz</a>
<button class="hdr-menu" type="button" aria-expanded="false" aria-controls="mnav">Menu</button>
</header>
<div class="mnav" id="mnav" hidden>
<nav aria-label="Sections, mobile">
<a href="#range">Range</a>
<a href="#ritual">Ritual</a>
<a href="#smear">Smear test</a>
<a href="#ingredients">Ingredients</a>
<a href="#reviews">Reviews</a>
<a href="#quiz">Skin quiz</a>
</nav>
<p class="mono">Fragrance-free · refillable · £14–£38</p>
</div>
<main>
<!-- 1 · RIBBON HERO -->
<section id="top" class="hero" data-header="light" aria-label="Dewpoint">
<div class="hero-media">
<img class="hero-bg" src="images/hero-macro.jpg" alt="Macro of a glossy clear gel swatch with water droplets on a periwinkle set" width="2560" height="1440" fetchpriority="high">
<svg class="ribbon" aria-hidden="true" focusable="false">
<defs>
<mask id="rb-mask" maskUnits="userSpaceOnUse">
<path class="rb-mask-path" fill="none" stroke="#FFFFFF" stroke-linecap="round"/>
</mask>
</defs>
<path id="rb-path" class="rb-center" fill="none" stroke="none"/>
<path class="rb-band" fill="none" stroke-linecap="round"/>
<g class="rb-ink" mask="url(#rb-mask)">
<path class="rb-gloss" fill="none" stroke-linecap="round"/>
<text class="rb-text"><textPath href="#rb-path" class="rb-tp"></textPath></text>
<g class="rb-stars"></g>
</g>
<text class="rb-measure" x="0" y="-999"></text>
</svg>
<div class="hero-product cut" style="--ly:.62;--lh:.13">
<img src="images/hero-serum.png" alt="Dewpoint Barrier Serum, a frosted periwinkle glass dropper bottle with a white cap" width="1200" height="1800">
<span class="label-ov" aria-hidden="true"><b>DEWPOINT</b><i>CERAMIDES 3%</i></span>
</div>
<p class="hero-callout mono" aria-hidden="true"><span>Barrier Serum</span><span>Ceramides 3% · £32</span></p>
</div>
<div class="hero-ui">
<p class="hero-tags mono">Barrier-first skincare <span>/</span> 7 formulas <span>/</span> fragrance-free refills</p>
<h1 class="hero-mark"><span class="sr">Dewpoint: </span><span class="hm-row" aria-hidden="true">DEWPOINT</span></h1>
<div class="hero-copy">
<p>Seven products. One job: a calmer, stronger barrier.</p>
<div class="hero-actions">
<a class="btn btn-jelly" href="#quiz">Build my routine</a>
<a class="lnk" href="#range">See the range</a>
</div>
</div>
</div>
</section>
<!-- 2 · THE RANGE · DEPTH ORBIT -->
<section id="range" class="range" data-header="dark" aria-labelledby="range-title">
<div class="range-head">
<p class="mono">The range <span>/</span> seven formulas <span>/</span> £14–£38</p>
<h2 id="range-title" class="t-title">Seven formulas.<br>Nothing extra.</h2>
<p class="range-sub">Short ingredient lists, the working percentage printed on the front, and a refill pouch for every bottle.</p>
</div>
<div class="orbit" aria-roledescription="carousel" aria-label="The Dewpoint range">
<div class="orbit-ring" aria-hidden="true">
<span class="ring-line"></span>
<span class="ring-l"><i>Ceramides 3%</i></span>
<span class="ring-l"><i>Niacinamide 4%</i></span>
<span class="ring-l"><i>Beta-glucan 1%</i></span>
<span class="ring-l"><i>Squalane 100%</i></span>
<span class="ring-l"><i>Panthenol 5%</i></span>
<span class="ring-l"><i>Zinc PCA 1%</i></span>
<span class="ring-l"><i>pH 5.5</i></span>
</div>
<div class="orbit-stage">
<figure class="orbit-item cut" style="--ly:.52;--lh:.14" data-name="Cloud Cleanser" data-pct="Glycerin 5% · pH 5.5" data-tag="pH 5.5" data-price="£14" data-desc="A gel that turns to milk. Lifts sunscreen, leaves the barrier alone.">
<img src="images/prod-cleanser.png" alt="Cloud Cleanser, a glossy jelly-pink squeeze tube with a white flip cap" width="1200" height="1500">
<span class="label-ov" aria-hidden="true"><b>DEWPOINT</b><i>pH 5.5</i></span>
<figcaption><b>Cloud Cleanser</b> <span>Glycerin 5% · £14</span></figcaption>
</figure>
<figure class="orbit-item cut" style="--ly:.64;--lh:.14" data-name="Barrier Serum" data-pct="Ceramides 3%" data-tag="3%" data-price="£32" data-desc="Three ceramides, cholesterol and fatty acids, in the ratio skin already uses.">
<img src="images/prod-serum.png" alt="Barrier Serum, a frosted periwinkle glass dropper bottle" width="1200" height="1500">
<span class="label-ov" aria-hidden="true"><b>DEWPOINT</b><i>3%</i></span>
<figcaption><b>Barrier Serum</b> <span>Ceramides 3% · £32</span></figcaption>
</figure>
<figure class="orbit-item cut" style="--ly:.70;--lh:.12" data-name="Niacin Drops" data-pct="Niacinamide 4%" data-tag="4%" data-price="£22" data-desc="Evens tone and tames shine at a percentage that doesn't sting.">
<img src="images/prod-drops.png" alt="Niacin Drops, a small jelly-pink glass dropper bottle" width="1200" height="1500">
<span class="label-ov" aria-hidden="true"><b>DEWPOINT</b><i>4%</i></span>
<figcaption><b>Niacin Drops</b> <span>Niacinamide 4% · £22</span></figcaption>
</figure>
<figure class="orbit-item cut" style="--ly:.72;--lh:.14" data-name="Glaze Gel Cream" data-pct="Beta-glucan 1%" data-tag="1%" data-price="£28" data-desc="Water-light moisture with a glassy finish. Sits well under SPF.">
<img src="images/prod-gelcream.png" alt="Glaze Gel Cream, a wide periwinkle glass jar with a white lid" width="1200" height="1500">
<span class="label-ov" aria-hidden="true"><b>DEWPOINT</b><i>1%</i></span>
<figcaption><b>Glaze Gel Cream</b> <span>Beta-glucan 1% · £28</span></figcaption>
</figure>
<figure class="orbit-item cut" style="--ly:.62;--lh:.14" data-name="Squalane Veil" data-pct="Squalane 100%" data-tag="100%" data-price="£24" data-desc="One ingredient, plant-derived. Two drops seal everything in.">
<img src="images/prod-squalane.png" alt="Squalane Veil, a slim jelly-pink bottle with a white pump" width="1200" height="1500">
<span class="label-ov" aria-hidden="true"><b>DEWPOINT</b><i>100%</i></span>
<figcaption><b>Squalane Veil</b> <span>Squalane 100% · £24</span></figcaption>
</figure>
<figure class="orbit-item cut" style="--ly:.58;--lh:.14" data-name="SPF 50 Milk" data-pct="SPF 50 · PA++++" data-tag="SPF 50" data-price="£26" data-desc="A fluid mineral-hybrid filter. No white cast, no eye sting.">
<img src="images/prod-spf.png" alt="SPF 50 Milk, a glossy jelly-pink bottle with a white flip cap" width="1200" height="1500">
<span class="label-ov" aria-hidden="true"><b>DEWPOINT</b><i>SPF 50</i></span>
<figcaption><b>SPF 50 Milk</b> <span>SPF 50 · PA++++ · £26</span></figcaption>
</figure>
<figure class="orbit-item cut" style="--ly:.78;--lh:.12" data-name="Overnight Balm" data-pct="Panthenol 5%" data-tag="5%" data-price="£38" data-desc="A cushiony balm for the nights your skin feels loud.">
<img src="images/prod-balm.png" alt="Overnight Balm, a squat jelly-pink jar with a white lid" width="1200" height="1500">
<span class="label-ov" aria-hidden="true"><b>DEWPOINT</b><i>5%</i></span>
<figcaption><b>Overnight Balm</b> <span>Panthenol 5% · £38</span></figcaption>
</figure>
</div>
</div>
<div class="orbit-info">
<p class="oi-count mono" aria-hidden="true"><span class="oi-reel"><span>01</span><span>02</span><span>03</span><span>04</span><span>05</span><span>06</span><span>07</span><span>01</span></span><span>/ 07</span></p>
<h3 class="oi-name" aria-live="polite"><span class="roll">Cloud Cleanser</span></h3>
<p class="oi-meta mono"><span class="oi-pct">Glycerin 5% · pH 5.5</span><span class="oi-price">£14</span></p>
<p class="oi-desc">A gel that turns to milk. Lifts sunscreen, leaves the barrier alone.</p>
<p class="oi-hint mono" aria-hidden="true">Hover the range to revolve</p>
</div>
</section>
<!-- 3 · THE RITUAL -->
<section id="ritual" class="ri" data-header="dark" aria-labelledby="ri-title">
<div class="ri-head">
<p class="mono">The ritual <span>/</span> morning and night</p>
<h2 id="ri-title" class="ri-title"><span class="w">Three</span> <span class="w">steps.</span><br><span class="w">Ninety</span> <span class="w">seconds.</span></h2>
<p class="ri-sub">Cleanse, treat, protect. If a step doesn't earn its place on your shelf, it isn't in the routine.</p>
</div>
<div class="ri-wide" data-header="light">
<div class="ri-wide-in">
<img src="images/ritual-wide.jpg" alt="Periwinkle basin with a clear stream of water and three Dewpoint bottles lined up on the rim" width="2400" height="1350">
<div class="ri-wide-copy">
<p class="mono">AM + PM <span>/</span> 3 steps <span>/</span> 90 s</p>
<p class="ri-wide-line">Less routine.<br>More skin.</p>
</div>
</div>
</div>
</section>
<section id="ritual-steps" class="rt" data-header="light" aria-label="The three ritual steps">
<div class="rt-media" aria-hidden="true">
<div class="rt-bg">
<img src="images/ritual-cleanse.jpg" alt="" width="1600" height="1200">
<img src="images/ritual-treat.jpg" alt="" width="1600" height="1200">
<img src="images/ritual-protect.jpg" alt="" width="1600" height="1200">
</div>
<div class="rt-scrim"></div>
<div class="rt-card">
<img src="images/ritual-cleanse.jpg" alt="" width="1600" height="1200">
<img src="images/ritual-treat.jpg" alt="" width="1600" height="1200">
<img src="images/ritual-protect.jpg" alt="" width="1600" height="1200">
</div>
<div class="rt-progress"><i></i></div>
</div>
<div class="rt-steps">
<article class="rt-step">
<img class="rt-step-img" src="images/ritual-cleanse.jpg" alt="A jelly-pink cleanser tube beside a swirl of white foam on wet periwinkle tiles" width="1600" height="1200">
<p class="rt-count mono"><b>01</b> / 03</p>
<h3 class="rt-title">Cleanse</h3>
<p class="rt-chips"><span>AM</span><span>PM</span><span class="rt-prod">Cloud Cleanser</span></p>
<p class="rt-how">Massage onto dry skin for 30 seconds, add water, rinse. Soft is the goal; squeaky means stripped.</p>
<a class="lnk lnk-w" href="#range" data-goto="0">Shop Cloud Cleanser</a>
</article>
<article class="rt-step">
<img class="rt-step-img" src="images/ritual-treat.jpg" alt="A periwinkle dropper releasing a single glossy drop of serum onto a fingertip" width="1600" height="1200">
<p class="rt-count mono"><b>02</b> / 03</p>
<h3 class="rt-title">Treat</h3>
<p class="rt-chips"><span>AM</span><span>PM</span><span class="rt-prod">Barrier Serum + Niacin Drops</span></p>
<p class="rt-how">Three drops of each onto damp skin. Press in with flat palms, don't rub, and give it a minute.</p>
<a class="lnk lnk-w" href="#range" data-goto="1">Shop Barrier Serum</a>
</article>
<article class="rt-step">
<img class="rt-step-img" src="images/ritual-protect.jpg" alt="Two finger-lengths of white sunscreen milk on a jelly-pink surface in hard sunlight" width="1600" height="1200">
<p class="rt-count mono"><b>03</b> / 03</p>
<h3 class="rt-title">Protect</h3>
<p class="rt-chips"><span>AM · SPF 50 Milk</span><span>PM · Overnight Balm</span></p>
<p class="rt-how">Mornings, two finger-lengths of SPF, every day. Nights, a pea of balm to seal the lot.</p>
<a class="lnk lnk-w" href="#range" data-goto="5">Shop SPF 50 Milk</a>
</article>
</div>
</section>
<!-- 3b · SMEAR TEST (signature) -->
<section id="smear" class="smear" data-header="dark" aria-labelledby="smear-title">
<div class="smear-copy">
<p class="mono">Texture lab <span>/</span> try before you buy</p>
<h2 id="smear-title" class="t-title">The smear<br>test</h2>
<p class="smear-lede">Drag across the glass. Each formula slips, shines and sinks in its own way, and six seconds later it's gone, the way it would be on skin.</p>
<div class="smear-chips" role="radiogroup" aria-label="Choose a texture">
<button type="button" class="chip is-on" role="radio" aria-checked="true" data-f="gel"><i class="sw sw-gel"></i>Gel<small>Glaze Gel Cream</small></button>
<button type="button" class="chip" role="radio" aria-checked="false" data-f="cream"><i class="sw sw-cream"></i>Cream<small>Overnight Balm</small></button>
<button type="button" class="chip" role="radio" aria-checked="false" data-f="squa"><i class="sw sw-squa"></i>Squalane<small>Squalane Veil</small></button>
</div>
<dl class="smear-read mono">
<div><dt>Slip</dt><dd data-k="slip">8 / 10</dd></div>
<div><dt>Shine</dt><dd data-k="shine">Glassy</dd></div>
<div><dt>Finish</dt><dd data-k="finish">Dewy, no film</dd></div>
<div><dt>Absorbs</dt><dd data-k="abs">6.0 s</dd></div>
</dl>
</div>
<div class="smear-card">
<canvas class="smear-canvas" aria-label="Texture canvas. Drag to smear the selected formula across the glass." role="img"></canvas>
<img class="smear-src" src="images/smear-backdrop.jpg" alt="" width="1600" height="1000" aria-hidden="true">
<p class="smear-hint mono" aria-hidden="true"><span>Drag to smear</span></p>
<div class="smear-bar mono">
<span class="smear-state">Glass is clean</span>
<button type="button" class="smear-clear">Wipe</button>
</div>
</div>
</section>
<!-- 4 · INGREDIENT STORIES · PINNED ACCORDION -->
<section id="ingredients" class="ing" data-header="dark" aria-labelledby="ing-title">
<div class="ing-head">
<h2 id="ing-title" class="t-title ing-title"><span class="ln"><span>What's inside,</span></span><span class="ln"><span>and why it's there.</span></span></h2>
<p class="ing-note mono">Six actives <span>/</span> full INCI on every box</p>
</div>
<div class="ing-row">
<article class="ing-card c-white" data-i="0">
<div class="ing-in">
<div class="ing-spine"><span class="mono">3%</span><b>Ceramides</b></div>
<div class="ing-body">
<h3>Ceramides</h3>
<p class="ing-pct mono">NP · AP · EOP <span>3%</span></p>
<p class="ing-does">Refill the mortar between skin cells, so water stays in and irritants stay out.</p>
<p class="ing-foot mono"><span>In Barrier Serum, Overnight Balm</span><button type="button" class="ing-open">Read the note</button></p>
</div>
<figure class="ing-fig"><img src="images/ing-ceramides.jpg" alt="Glossy white ceramide beads suspended in clear gel on a periwinkle surface" width="1000" height="1400" loading="eager"></figure>
</div>
</article>
<article class="ing-card c-peri" data-i="1">
<div class="ing-in">
<div class="ing-spine"><span class="mono">4%</span><b>Niacinamide</b></div>
<div class="ing-body">
<h3>Niacinamide</h3>
<p class="ing-pct mono">Vitamin B3 <span>4%</span></p>
<p class="ing-does">Calms redness, evens tone and nudges skin to make more of its own ceramides.</p>
<p class="ing-foot mono"><span>In Niacin Drops</span><button type="button" class="ing-open">Read the note</button></p>
</div>
<figure class="ing-fig"><img src="images/ing-niacinamide.jpg" alt="Fine white niacinamide crystals scattered on jelly-pink glass" width="1000" height="1400" loading="eager"></figure>
</div>
</article>
<article class="ing-card c-black" data-i="2">
<div class="ing-in">
<div class="ing-spine"><span class="mono">1%</span><b>Beta-glucan</b></div>
<div class="ing-body">
<h3>Beta-glucan</h3>
<p class="ing-pct mono">From oats <span>1%</span></p>
<p class="ing-does">A humectant that holds water on the surface and soothes on contact.</p>
<p class="ing-foot mono"><span>In Glaze Gel Cream</span><button type="button" class="ing-open">Read the note</button></p>
</div>
<figure class="ing-fig"><img src="images/ing-betaglucan.jpg" alt="A thick clear gel ribbon folding over itself on a periwinkle surface" width="1000" height="1400" loading="eager"></figure>
</div>
</article>
<article class="ing-card c-white" data-i="3">
<div class="ing-in">
<div class="ing-spine"><span class="mono">100%</span><b>Squalane</b></div>
<div class="ing-body">
<h3>Squalane</h3>
<p class="ing-pct mono">Plant-derived <span>100%</span></p>
<p class="ing-does">A skin-identical oil that seals without clogging or feeling greasy.</p>
<p class="ing-foot mono"><span>In Squalane Veil</span><button type="button" class="ing-open">Read the note</button></p>
</div>
<figure class="ing-fig"><img src="images/ing-squalane.jpg" alt="A single clear drop of oil falling into a pool with rings, lit pink and periwinkle" width="1000" height="1400" loading="eager"></figure>
</div>
</article>
<article class="ing-card c-peri" data-i="4">
<div class="ing-in">
<div class="ing-spine"><span class="mono">5%</span><b>Panthenol</b></div>
<div class="ing-body">
<h3>Panthenol</h3>
<p class="ing-pct mono">Pro-vitamin B5 <span>5%</span></p>
<p class="ing-does">Cushions, softens and helps skin bounce back overnight.</p>
<p class="ing-foot mono"><span>In Overnight Balm</span><button type="button" class="ing-open">Read the note</button></p>
</div>
<figure class="ing-fig"><img src="images/ing-panthenol.jpg" alt="A swirl of dense jelly-pink balm on a white surface" width="1000" height="1400" loading="eager"></figure>
</div>
</article>
<article class="ing-card c-black" data-i="5">
<div class="ing-in">
<div class="ing-spine"><span class="mono">1%</span><b>Zinc PCA</b></div>
<div class="ing-body">
<h3>Zinc PCA</h3>
<p class="ing-pct mono">Mineral salt <span>1%</span></p>
<p class="ing-does">Balances oil and keeps breakouts quieter, without drying you out.</p>
<p class="ing-foot mono"><span>In Niacin Drops, SPF 50 Milk</span><button type="button" class="ing-open">Read the note</button></p>
</div>
<figure class="ing-fig"><img src="images/ing-zinc.jpg" alt="Pale mineral powder pressed into a periwinkle tile beside a glossy droplet" width="1000" height="1400" loading="eager"></figure>
</div>
</article>
</div>
<div class="ing-cursor" aria-hidden="true"><span>Open</span></div>
</section>
<!-- 5 · REVIEWS -->
<section id="reviews" class="rev" data-header="dark" aria-labelledby="rev-title">
<div class="rev-head">
<p class="mono">Reviews <span>/</span> 4.8 average from 2,140 routines</p>
<h2 id="rev-title" class="t-title">Reviewed by people<br>who read the back.</h2>
</div>
<div class="rev-stats">
<div><b>+62%</b><span class="mono">hydration at 8 h · n=42</span></div>
<div><b>−31%</b><span class="mono">water loss at 4 weeks · n=38</span></div>
<div><b>9 in 10</b><span class="mono">felt less tight at 2 weeks · n=60</span></div>
</div>
<div class="mq" aria-label="Customer reviews">
<div class="mq-row"><div class="mq-track">
<figure class="rv"><blockquote>Finally a serum that doesn't sting after retinol night. My cheeks stopped flaking inside a week.</blockquote><figcaption class="mono">Priya · dry, sensitive</figcaption></figure>
<figure class="rv"><blockquote>I own too many actives. This is the first thing that made my skin quieter, not busier.</blockquote><figcaption class="mono">Tom · combination</figcaption></figure>
<figure class="rv"><blockquote>The cleanser turns to milk and I've become weirdly emotional about it.</blockquote><figcaption class="mono">Aoife · normal</figcaption></figure>
<figure class="rv"><blockquote>Five ingredients I can pronounce and one I can't, and they explain that one too.</blockquote><figcaption class="mono">Marcus · oily</figcaption></figure>
<figure class="rv"><blockquote>SPF with no white cast on brown skin. I checked in three different lights.</blockquote><figcaption class="mono">Ifeoma · combination</figcaption></figure>
</div></div>
<div class="mq-row mq-rev"><div class="mq-track">
<figure class="rv"><blockquote>My over-exfoliated barrier and I are on speaking terms again.</blockquote><figcaption class="mono">Jess · sensitive</figcaption></figure>
<figure class="rv"><blockquote>Squalane Veil is two drops and done. One bottle lasted me four months.</blockquote><figcaption class="mono">Leo · dry</figcaption></figure>
<figure class="rv"><blockquote>Niacinamide at 4% instead of 10%. No tingling, no drama, just less shine by lunch.</blockquote><figcaption class="mono">Hana · oily</figcaption></figure>
<figure class="rv"><blockquote>The refill pouch is why I switched. The balm is why I stayed.</blockquote><figcaption class="mono">Sam · dry</figcaption></figure>
<figure class="rv"><blockquote>Seven steps down to three. Nobody noticed except my skin.</blockquote><figcaption class="mono">Carla · redness-prone</figcaption></figure>
</div></div>
</div>
<p class="rev-foot mono">Study figures are illustrative for this template.</p>
</section>
<!-- 6 · QUIZ CTA -->
<section id="quiz" class="quiz" data-header="light" aria-labelledby="quiz-title">
<img class="quiz-bg" src="images/cta-shelf.jpg" alt="A colour-blocked bathroom shelf in periwinkle and jelly pink holding three Dewpoint bottles and a folded white towel" width="2400" height="1350" loading="eager">
<div class="quiz-panel">
<p class="mono quiz-kicker">60-second skin quiz <span class="quiz-step">/ start</span></p>
<div class="qz" data-q="intro">
<h2 id="quiz-title" class="t-title">Three questions.<br>One routine.</h2>
<p>Tell us how your skin behaves and we'll suggest three products, not thirteen. Nothing leaves this page.</p>
<button type="button" class="btn btn-black qz-start">Take the 60-second skin quiz</button>
</div>
<div class="qz" data-q="0" hidden>
<h3 class="qz-q">By 3 pm, your skin feels…</h3>
<div class="qz-opts">
<button type="button" data-v="dry">Tight</button>
<button type="button" data-v="oily">Shiny</button>
<button type="button" data-v="combo">Both, somehow</button>
<button type="button" data-v="normal">Fine, honestly</button>
</div>
</div>
<div class="qz" data-q="1" hidden>
<h3 class="qz-q">Your last routine had too much…</h3>
<div class="qz-opts">
<button type="button" data-v="acids">Acids</button>
<button type="button" data-v="fragrance">Fragrance</button>
<button type="button" data-v="steps">Steps</button>
<button type="button" data-v="new">I'm new to this</button>
</div>
</div>
<div class="qz" data-q="2" hidden>
<h3 class="qz-q">It flares up after…</h3>
<div class="qz-opts">
<button type="button" data-v="dry">Cold weather</button>
<button type="button" data-v="oily">Workouts</button>
<button type="button" data-v="sens">New products</button>
<button type="button" data-v="normal">It doesn't</button>
</div>
</div>
<div class="qz" data-q="result" hidden>
<h3 class="qz-q qz-rtitle">Your trio</h3>
<ol class="qz-trio"></ol>
<p class="qz-why"></p>
<p class="qz-total mono"></p>
<div class="qz-actions">
<button type="button" class="btn btn-black qz-see">See it in the range</button>
<button type="button" class="lnk qz-again">Start over</button>
</div>
</div>
</div>
</section>
</main>
<footer class="ft" data-header="light">
<div class="ft-top">
<div class="ft-refill">
<p class="mono">Refills</p>
<p>Every bottle has a refill. Pouches are mono-material and ship flat. Send ten empties back and the postage is on us.</p>
</div>
<nav class="ft-col" aria-label="Shop">
<p class="mono">Shop</p>
<a href="#range">The range</a><a href="#quiz">Trio sets</a><a href="#top">Refill pouches</a><a href="#top">Gift card</a>
</nav>
<nav class="ft-col" aria-label="Help">
<p class="mono">Help</p>
<a href="#top">Shipping</a><a href="#top">Returns</a><a href="#ingredients">Ingredient glossary</a><a href="#top">Contact</a>
</nav>
<div class="ft-col">
<p class="mono">Stockists</p>
<span>Marlow & Finch, London</span><span>Kettle Pharmacy, Leeds</span><span>Hjem Apotek, Oslo</span><span>Salt House, Dublin</span>
</div>
</div>
<p class="ft-mark" aria-hidden="true">DEWPOINT</p>
<div class="ft-base mono">
<span>© 2026 Dewpoint Skin Ltd. Fragrance-free since day one.</span>
<a href="#top" class="ft-up">Back to top</a>
</div>
</footer>
<div class="panel-back" aria-hidden="true"></div>
<aside class="panel" role="dialog" aria-modal="true" aria-labelledby="panel-title" hidden>
<button type="button" class="panel-close">Close</button>
<figure class="panel-fig"><img src="images/ing-ceramides.jpg" alt="" width="1000" height="1400"></figure>
<p class="panel-pct mono"></p>
<h3 id="panel-title" class="panel-title"></h3>
<div class="panel-text"></div>
</aside>
<script src="js/vendor/gsap.min.js"></script>
<script src="js/vendor/ScrollTrigger.min.js"></script>
<script src="js/vendor/CustomEase.min.js"></script>
<script src="js/vendor/lenis.min.js"></script>
<script src="js/smear.js"></script>
<script src="js/main.js"></script>
</body>
</html>
```
## `css/style.css`
```css
/* DEWPOINT · barrier-first skincare
Palette: electric periwinkle, jelly pink, pure white, pure black. Nothing else.
Type: Host Grotesk (titles), Rethink Sans (UI), Sometype Mono (labels). */
@font-face { font-family: "Host Grotesk"; font-style: normal; font-weight: 300 800; font-display: swap;
src: url(../fonts/host-grotesk-latin.woff2) format("woff2"); }
@font-face { font-family: "Rethink Sans"; font-style: normal; font-weight: 400 800; font-display: swap;
src: url(../fonts/rethink-sans-latin.woff2) format("woff2"); }
@font-face { font-family: "Sometype Mono"; font-style: normal; font-weight: 400 700; font-display: swap;
src: url(../fonts/sometype-mono-latin.woff2) format("woff2"); }
:root {
--peri: #6F7DFF;
--jelly: #FFB3F0;
--white: #FFFFFF;
--black: #000000;
--black-60: rgba(0, 0, 0, .6);
--black-35: rgba(0, 0, 0, .35);
--black-12: rgba(0, 0, 0, .12);
--white-70: rgba(255, 255, 255, .7);
--white-25: rgba(255, 255, 255, .25);
--f-title: "Host Grotesk", Arial, sans-serif;
--f-ui: "Rethink Sans", Arial, sans-serif;
--f-mono: "Sometype Mono", "Courier New", monospace;
--gut: clamp(16px, 2.08vw, 40px);
--hdr: 66px;
}
*, *::before, *::after { box-sizing: border-box; }
html { overflow-x: clip; -webkit-text-size-adjust: 100%; }
body {
margin: 0; overflow-x: clip; background: var(--white); color: var(--black);
font: 400 17px/1.5 var(--f-ui); -webkit-font-smoothing: antialiased;
}
img { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; }
h1, h2, h3, p, figure, blockquote, dl, dd, ol { margin: 0; }
ol { padding: 0; list-style: none; }
:focus-visible { outline: 2px solid var(--black); outline-offset: 3px; }
.hero :focus-visible, .rt :focus-visible, .ft :focus-visible, .c-black :focus-visible { outline-color: var(--white); }
.sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.skip { position: fixed; left: 12px; top: -60px; z-index: 200; background: var(--black); color: var(--white); padding: 10px 14px; }
.skip:focus { top: 12px; }
.mono { font: 400 12px/1.4 var(--f-mono); text-transform: uppercase; letter-spacing: .06em; }
.mono span { opacity: 1; }
.t-title {
font: 300 clamp(44px, 6.4vw, 118px)/.92 var(--f-title); text-transform: uppercase; letter-spacing: -.01em;
}
.t-title .ln { display: block; overflow: hidden; padding-bottom: .05em; margin-bottom: -.05em; }
.t-title .ln > span { display: block; }
.btn {
display: inline-flex; align-items: center; gap: 10px; height: 52px; padding: 0 26px; border-radius: 999px;
font: 500 16px/1 var(--f-ui); transition: background-color .3s, color .3s;
}
.btn-jelly { background: var(--jelly); color: var(--black); }
.btn-jelly:hover { background: var(--white); }
.btn-black { background: var(--black); color: var(--white); }
.btn-black:hover { background: var(--white); color: var(--black); }
.lnk { font: 500 16px/1.3 var(--f-ui); background: linear-gradient(currentColor, currentColor) 0 100% / 100% 1px no-repeat; padding-bottom: 3px; transition: background-size .45s cubic-bezier(.625, .05, 0, 1); }
.lnk:hover { background-size: 0 1px; background-position: 100% 100%; }
.lnk::after { content: " \2192"; }
/* ---------- loader (single droplet) ---------- */
.loader { display: none; }
.is-intro .loader { display: block; position: fixed; inset: 0; z-index: 90; background: var(--white); }
.loader-drop { position: absolute; left: 50%; top: 0; width: 34px; height: 48px; margin-left: -17px; transform: translateY(-80px); }
.loader-ring { position: absolute; left: 50%; top: 58%; width: 40px; height: 40px; margin: -20px 0 0 -20px; border: 1.5px solid var(--peri); border-radius: 50%; opacity: 0; }
.loader-note { position: absolute; left: 0; right: 0; bottom: 28px; text-align: center; color: var(--black); }
.is-intro .hero { z-index: 92; clip-path: circle(0% at 50% 58%); }
.is-intro .hdr { opacity: 0; }
/* ---------- header ---------- */
.hdr {
position: fixed; top: 0; left: 0; right: 0; z-index: 50; height: var(--hdr); padding: 0 var(--gut);
display: flex; align-items: center; gap: 28px; color: var(--white); transition: color .35s;
}
.hdr[data-theme="dark"] { color: var(--black); }
.hdr-mark { font: 700 19px/1 var(--f-title); letter-spacing: .02em; }
.hdr-nav { margin-left: auto; display: flex; gap: 26px; font: 500 15px/1 var(--f-ui); }
.hdr-nav a { position: relative; padding: 6px 0; }
.hdr-nav a::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: currentColor; transform: scaleX(0); transform-origin: right; transition: transform .45s cubic-bezier(.625, .05, 0, 1); }
.hdr-nav a:hover::after { transform: scaleX(1); transform-origin: left; }
.hdr-cta { font: 500 15px/1 var(--f-ui); padding: 11px 18px; border: 1px solid currentColor; border-radius: 999px; transition: background-color .3s, color .3s; }
.hdr[data-theme="light"] .hdr-cta:hover { background: var(--white); color: var(--black); }
.hdr[data-theme="dark"] .hdr-cta:hover { background: var(--black); color: var(--white); }
.hdr-menu { display: none; margin-left: auto; font: 500 15px/1 var(--f-ui); padding: 11px 16px; border: 1px solid currentColor; border-radius: 999px; }
.mnav { position: fixed; inset: 0; z-index: 45; background: var(--peri); color: var(--black); padding: 96px var(--gut) 32px; display: flex; flex-direction: column; justify-content: space-between; }
.mnav[hidden] { display: none; }
.mnav nav { display: flex; flex-direction: column; }
.mnav nav a { font: 300 44px/1.12 var(--f-title); text-transform: uppercase; letter-spacing: -.01em; border-bottom: 1px solid var(--black-35); padding: 6px 0; }
/* ---------- 1 · hero ---------- */
.hero { position: relative; height: 100vh; height: 100svh; min-height: 560px; overflow: hidden; background: var(--peri); color: var(--white); }
.hero-media { position: absolute; inset: 0; will-change: transform; }
.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.ribbon { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.rb-band { stroke: var(--jelly); }
.rb-gloss { stroke: var(--white); opacity: .28; }
.rb-text { font-family: var(--f-title); font-weight: 700; text-transform: uppercase; letter-spacing: -.01em; fill: var(--black); }
.rb-measure { font-family: var(--f-title); font-weight: 700; text-transform: uppercase; letter-spacing: -.01em; visibility: hidden; }
.rb-stars path { fill: var(--black); }
.cut { container-type: inline-size; }
.cut img { width: 100%; height: 100%; object-fit: cover; }
.label-ov {
position: absolute; left: 0; right: 0; top: calc((var(--ly) - var(--lh) / 2) * 100%); height: calc(var(--lh) * 100%);
display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .6cqw; color: var(--black); pointer-events: none;
}
.label-ov b { font: 700 calc(var(--lf, 6) * 1cqw)/1 var(--f-title); letter-spacing: .04em; }
.label-ov i { font: 400 calc(var(--lf, 6) * .55cqw)/1 var(--f-mono); font-style: normal; letter-spacing: .06em; }
.hero-product { position: absolute; left: 50%; top: 15vh; height: 71vh; aspect-ratio: 2 / 3; transform: translateX(-50%); --lf: 7; }
.hero-product img { filter: drop-shadow(0 3vh 3vh rgba(0, 0, 0, .22)); }
.hero-callout { position: absolute; left: calc(50% + 12vh); top: 30vh; display: flex; flex-direction: column; gap: 2px; color: var(--black); padding-left: 64px; }
.hero-callout::before { content: ""; position: absolute; left: 0; top: 50%; width: 52px; height: 1px; background: var(--black); }
.hero-callout span:first-child { font-weight: 400; }
.hero-ui { position: absolute; inset: 0; pointer-events: none; }
.hero-ui a, .hero-ui button { pointer-events: auto; }
.hero-tags { position: absolute; left: var(--gut); top: calc(var(--hdr) + 18px); display: flex; gap: 10px; }
.hero-mark { position: absolute; left: calc(var(--gut) - .06em); bottom: 1.2vw; font: 700 11vw/.76 var(--f-title); letter-spacing: -.01em; }
.hm-row { display: block; overflow: hidden; padding-top: .04em; }
.hm-row .ch { display: inline-block; }
.hero-copy { position: absolute; right: var(--gut); bottom: 3vw; width: min(360px, 27vw); }
.hero-copy p { font: 400 21px/1.3 var(--f-ui); margin-bottom: 22px; }
.hero-actions { display: flex; align-items: center; gap: 24px; flex-wrap: wrap; }
/* ---------- 2 · range / orbit ---------- */
.range { position: relative; background: var(--peri); color: var(--black); padding: 128px 0 110px; overflow: clip; }
.range-head { padding: 0 var(--gut); display: grid; grid-template-columns: 1fr minmax(260px, 26vw); gap: 20px 4vw; align-items: end; }
.range-head .mono { grid-column: 1 / -1; }
.range-head .t-title { color: var(--white); }
.range-sub { font-size: 18px; max-width: 34ch; }
.orbit { position: relative; height: 40vw; margin-top: 2vw; }
.orbit-stage { position: absolute; inset: 0; }
.orbit-item { position: absolute; left: 50%; top: 50%; width: 25vw; aspect-ratio: 4 / 5; transform: translate(-50%, -50%); will-change: transform, filter; --lf: 6; }
.orbit-item figcaption { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
.orbit-item img { filter: drop-shadow(0 1.4vw 1.2vw rgba(0, 0, 0, .18)); }
.orbit-item:nth-child(1) { --lf: 5.4; } .orbit-item:nth-child(2) { --lf: 6.2; } .orbit-item:nth-child(3) { --lf: 5; }
.orbit-item:nth-child(4) { --lf: 7; } .orbit-item:nth-child(5) { --lf: 4.6; } .orbit-item:nth-child(6) { --lf: 5.6; } .orbit-item:nth-child(7) { --lf: 7; }
.orbit-shadow { position: absolute; left: 50%; top: 50%; width: 21vw; height: 2.6vw; margin: 14.4vw 0 0 -10.5vw; border-radius: 50%; background: radial-gradient(closest-side, rgba(0, 0, 0, .34), rgba(0, 0, 0, 0)); pointer-events: none; will-change: transform, opacity; }
.orbit-tag { position: absolute; left: 50%; top: 50%; margin-top: -17.4vw; transform: translate(-50%, -50%); padding: 7px 12px; border-radius: 999px; background: var(--black); color: var(--white); white-space: nowrap; pointer-events: none; will-change: transform, opacity; }
.orbit-ring { position: absolute; left: 50%; top: 50%; width: 38vw; aspect-ratio: 1; margin: -19vw 0 0 -19vw; pointer-events: none; }
.ring-line { position: absolute; inset: 0; border-radius: 50%; border: 1px dashed var(--black-35); }
.ring-l { position: absolute; left: 50%; top: 50%; width: 0; height: 0; transform: rotate(var(--a)) translateY(-19vw) rotate(calc(-1 * var(--a))); }
.ring-l i { position: absolute; left: 0; top: 0; transform: translate(-50%, -50%); font: 400 11px/1 var(--f-mono); font-style: normal; text-transform: uppercase; letter-spacing: .06em; white-space: nowrap; background: var(--peri); padding: 4px 6px; color: var(--black); }
.orbit-info { position: relative; z-index: 2; text-align: center; padding: 0 var(--gut); margin-top: 1.4vw; }
.oi-count { display: inline-flex; gap: 6px; height: 17px; overflow: hidden; margin-bottom: 14px; }
.oi-reel { display: flex; flex-direction: column; will-change: transform; }
.oi-reel span { height: 17px; line-height: 17px; }
.oi-name { font: 300 clamp(34px, 3.5vw, 60px)/1 var(--f-title); text-transform: uppercase; letter-spacing: -.01em; color: var(--white); }
.roll { display: inline-block; overflow: hidden; vertical-align: top; padding-bottom: .06em; }
.roll .ch { display: inline-block; white-space: pre; }
.oi-meta { display: flex; justify-content: center; gap: 18px; margin-top: 14px; font-size: 13px; }
.oi-desc { margin: 12px auto 0; max-width: 44ch; font-size: 17px; }
.oi-hint { margin-top: 22px; color: var(--black-60); }
.orbit-ctrl { display: flex; align-items: center; justify-content: center; gap: 22px; margin-top: 28px; }
.oc-btn { width: 52px; height: 52px; border-radius: 50%; border: 1px solid var(--black); display: grid; place-items: center; transition: background-color .3s, color .3s; }
.oc-btn svg { width: 20px; height: 20px; }
.oc-btn:hover { background: var(--black); color: var(--peri); }
.oc-dots { display: flex; gap: 8px; }
.oc-dots button { width: 9px; height: 9px; border-radius: 99px; background: var(--black-35); transition: width .5s cubic-bezier(.625, .05, 0, 1), background-color .3s; }
.oc-dots button[aria-selected="true"] { width: 28px; background: var(--black); }
/* orbit as a grid: reduced motion or no JS */
html:not(.fx) .orbit { height: auto; margin: 48px var(--gut) 0; }
html:not(.fx) .orbit-ring, html:not(.fx) .orbit-info .oi-count, html:not(.fx) .orbit-ctrl, html:not(.fx) .oi-hint, html:not(.fx) .oi-name, html:not(.fx) .oi-meta, html:not(.fx) .oi-desc { display: none; }
html:not(.fx) .orbit-stage { position: static; display: grid; grid-template-columns: repeat(4, 1fr); gap: 28px 20px; }
html:not(.fx) .orbit-item { position: relative; left: auto; top: auto; width: auto; transform: none; }
html:not(.fx) .orbit-item figcaption { position: static; width: auto; height: auto; clip-path: none; margin-top: 8px; text-align: center; }
html:not(.fx) .orbit-item figcaption b { display: block; font: 300 22px/1.1 var(--f-title); text-transform: uppercase; color: var(--white); }
html:not(.fx) .orbit-item figcaption span { font: 400 12px/1.4 var(--f-mono); text-transform: uppercase; letter-spacing: .06em; }
html:not(.fx) .orbit-item .label-ov { bottom: auto; }
/* ---------- 3 · ritual intro ---------- */
.ri { position: relative; background: var(--white); color: var(--black); }
.ri-head { position: relative; z-index: 1; min-height: 100vh; padding: 140px var(--gut) 90px; display: flex; flex-direction: column; justify-content: center; gap: 30px; }
.ri-title { font: 300 clamp(52px, 9.2vw, 168px)/.9 var(--f-title); text-transform: uppercase; letter-spacing: -.01em; }
.ri-title .w { display: inline-block; }
.ri-sub { max-width: 36ch; font-size: 19px; margin-left: 50vw; }
.ri-wide { position: relative; z-index: 2; height: 100vh; }
.ri-wide-in { position: absolute; inset: 0; overflow: hidden; background: var(--peri); will-change: transform, clip-path; }
.ri-wide-in img { width: 100%; height: 100%; object-fit: cover; }
.ri-wide-copy { position: absolute; left: var(--gut); right: var(--gut); bottom: 5vh; display: flex; justify-content: space-between; align-items: flex-end; color: var(--white); gap: 20px; }
.ri-wide-line { font: 300 clamp(40px, 6vw, 110px)/.92 var(--f-title); text-transform: uppercase; letter-spacing: -.01em; text-align: right; }
/* ---------- 3 · ritual steps ---------- */
.rt { position: relative; background: var(--black); color: var(--white); }
.rt-media { position: sticky; top: 0; height: 100vh; overflow: hidden; }
.rt-bg { position: absolute; inset: 0; }
.rt-bg img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transform: scale(1.2); filter: blur(40px) saturate(1.3); opacity: 0; }
.rt-bg img:nth-child(1) { z-index: 3; opacity: .69; } .rt-bg img:nth-child(2) { z-index: 2; } .rt-bg img:nth-child(3) { z-index: 1; }
.rt-scrim { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(0, 0, 0, 0) 38%, rgba(0, 0, 0, .38) 70%); }
.rt-card { position: absolute; left: 17.8vw; top: 50%; width: 31.1vw; aspect-ratio: 4 / 3; transform: translateY(-50%); overflow: hidden; background: var(--black); }
.rt-card img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.rt-card img:nth-child(n+2) { clip-path: inset(50%); }
.rt-progress { position: absolute; left: 16px; right: 16px; bottom: 18px; height: 2px; background: var(--white-25); }
.rt-progress i { position: absolute; inset: 0; background: var(--white); transform: scaleX(0); transform-origin: 0 50%; }
.rt-steps { position: relative; z-index: 2; margin-top: -100vh; }
.rt-step { height: 100vh; display: flex; flex-direction: column; justify-content: center; padding: 0 var(--gut) 0 59.4vw; }
.rt-step-img { display: none; }
.rt-count { font-size: 14px; letter-spacing: .08em; }
.rt-count b { font-weight: 400; color: var(--jelly); }
.rt-title { font: 300 clamp(56px, 7.2vw, 132px)/.95 var(--f-title); text-transform: uppercase; letter-spacing: -.01em; margin: 26px 0 22px; }
.rt-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 22px; }
.rt-chips span { font: 400 12px/1 var(--f-mono); text-transform: uppercase; letter-spacing: .06em; padding: 8px 11px; border: 1px solid var(--white-70); border-radius: 999px; }
.rt-chips .rt-prod { border-color: transparent; background: var(--jelly); color: var(--black); }
.rt-how { font-size: 19px; line-height: 1.45; max-width: 31ch; margin-bottom: 30px; }
.lnk-w { align-self: flex-start; }
/* ritual stacked: reduced motion or no JS */
html:not(.fx) .rt-media { display: none; }
html:not(.fx) .rt-steps { margin-top: 0; padding: 60px var(--gut); display: grid; gap: 70px; }
html:not(.fx) .rt-step { height: auto; padding: 0; display: grid; grid-template-columns: 38vw 1fr; grid-template-rows: auto; column-gap: 5vw; align-content: start; }
html:not(.fx) .rt-step > :not(img) { grid-column: 2; }
html:not(.fx) .rt-step-img { display: block; grid-row: 1 / span 6; align-self: start; width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; }
/* ---------- 3b · smear test ---------- */
.smear { position: relative; background: var(--white); color: var(--black); padding: 150px var(--gut) 130px; display: grid; grid-template-columns: minmax(300px, 33vw) 1fr; gap: 4.5vw; align-items: center; }
.smear-copy { display: flex; flex-direction: column; gap: 24px; }
.smear-lede { font-size: 18px; max-width: 36ch; }
.smear-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.chip { display: grid; grid-template-columns: auto 1fr; grid-template-rows: auto auto; column-gap: 10px; align-items: center; text-align: left; padding: 12px 16px 12px 12px; border: 1px solid var(--black); border-radius: 999px; font: 500 16px/1.1 var(--f-ui); transition: background-color .3s, color .3s; }
.chip small { grid-column: 2; font: 400 11px/1.2 var(--f-mono); text-transform: uppercase; letter-spacing: .06em; }
.chip .sw { grid-row: 1 / span 2; width: 26px; height: 26px; border-radius: 50%; border: 1px solid var(--black); }
.chip.is-on { background: var(--black); color: var(--white); }
.chip.is-on .sw { border-color: var(--white); }
.sw-gel { background: radial-gradient(circle at 34% 30%, var(--white) 0 14%, var(--peri) 36%); }
.sw-cream { background: var(--jelly); }
.sw-squa { background: radial-gradient(circle at 34% 30%, var(--white) 0 18%, rgba(111, 125, 255, .25) 60%); }
.smear-read { display: grid; grid-template-columns: 1fr 1fr; gap: 0 22px; }
.smear-read div { border-top: 1px solid var(--black); padding: 10px 0 12px; }
.smear-read dt { color: var(--black-60); margin-bottom: 4px; }
.smear-read dd { font-size: 14px; }
.smear-card { position: relative; aspect-ratio: 16 / 10; overflow: hidden; background: var(--peri); border: 1px solid var(--black); }
.smear-canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; touch-action: none; cursor: crosshair; }
.smear-src { display: none; }
.smear-hint { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); pointer-events: none; transition: opacity .6s; }
.smear-hint span { display: inline-block; background: var(--white); color: var(--black); padding: 10px 14px; border-radius: 999px; }
.smear-hint.is-gone { opacity: 0; }
.smear-bar { position: absolute; left: 0; right: 0; bottom: 0; display: flex; justify-content: space-between; align-items: center; padding: 12px 14px; pointer-events: none; }
.smear-state { background: var(--white); padding: 7px 10px; }
.smear-clear { pointer-events: auto; background: var(--black); color: var(--white); padding: 9px 14px; border-radius: 999px; font: inherit; text-transform: uppercase; letter-spacing: .06em; }
.smear-clear:hover { background: var(--jelly); color: var(--black); }
/* ---------- 4 · ingredients accordion ---------- */
.ing { position: relative; background: var(--jelly); color: var(--black); padding: 120px 0 calc(50vh - clamp(190px, 26vh, 300px) + 28px); min-height: 100vh; overflow: clip; }
.ing-head { padding: 0 var(--gut); display: flex; justify-content: space-between; align-items: flex-end; gap: 24px; margin-bottom: 26px; }
.ing-title { font-size: clamp(40px, 4.3vw, 76px); }
.ing-title .ln { display: block; overflow: hidden; padding-bottom: .04em; }
.ing-title .ln > span { display: block; }
.ing-note { padding-bottom: 10px; }
.ing-row { position: relative; margin: 0 var(--gut); height: clamp(380px, 52vh, 600px); }
.ing-card { position: absolute; top: 0; left: 0; width: 46vw; height: 100%; will-change: transform; }
.ing-in { position: absolute; top: 0; left: 0; bottom: 0; width: 100%; display: grid; grid-template-columns: 8.82vw 1fr 17vw; border-left: 1px solid var(--black); }
.c-white .ing-in { background: var(--white); color: var(--black); }
.c-peri .ing-in { background: var(--peri); color: var(--black); }
.c-black .ing-in { background: var(--black); color: var(--white); border-left-color: var(--jelly); }
.ing-spine { display: flex; flex-direction: column; justify-content: space-between; padding: 22px 0 22px; align-items: center; border-right: 1px solid currentColor; }
.ing-spine b { writing-mode: vertical-rl; transform: rotate(180deg); font: 700 clamp(20px, 1.9vw, 34px)/1 var(--f-title); text-transform: uppercase; letter-spacing: -.01em; }
.ing-body { padding: 26px 24px 22px; display: flex; flex-direction: column; min-width: 0; }
.ing-body h3 { font: 300 clamp(30px, 2.8vw, 50px)/.95 var(--f-title); text-transform: uppercase; letter-spacing: -.01em; }
.ing-pct { display: flex; justify-content: space-between; align-items: baseline; margin-top: 14px; padding-top: 12px; border-top: 1px solid currentColor; }
.ing-pct span { font-size: clamp(30px, 3vw, 54px); letter-spacing: 0; }
.ing-does { margin-top: 16px; font-size: 16px; line-height: 1.45; }
.ing-foot { margin-top: auto; display: flex; flex-direction: column; gap: 12px; align-items: flex-start; }
.ing-open { font: inherit; text-transform: uppercase; letter-spacing: .06em; border-bottom: 1px solid currentColor; padding-bottom: 2px; }
.ing-fig { position: relative; overflow: hidden; }
.ing-fig img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.2s cubic-bezier(.625, .05, 0, 1); }
.ing-card:hover .ing-fig img { transform: scale(1.05); }
.fx .ing-row { cursor: none; }
.ing-cursor { position: fixed; left: 0; top: 0; z-index: 60; width: 8.82vw; height: 8.82vw; min-width: 96px; min-height: 96px; border-radius: 50%; background: var(--black); color: var(--white); display: grid; place-items: center; font: 500 18px/1 var(--f-ui); pointer-events: none; opacity: 0; }
.ing-cursor.on-dark { background: var(--jelly); color: var(--black); }
/* carousel: mobile, reduced motion, no JS */
html:not(.fx) .ing-row { height: auto; margin: 0; padding: 0 var(--gut) 12px; display: flex; gap: 10px; overflow-x: auto; scroll-snap-type: x mandatory; cursor: auto; }
html:not(.fx) .ing-card { position: relative; flex: none; width: min(82vw, 520px); height: 560px; scroll-snap-align: start; transform: none !important; }
/* side panel */
.panel-back { position: fixed; inset: 0; z-index: 79; background: rgba(0, 0, 0, 0); pointer-events: none; }
.panel-back.is-on { pointer-events: auto; }
.panel { position: fixed; top: 0; bottom: 0; right: calc(-1 * min(620px, 100vw)); width: min(620px, 100vw); z-index: 80; background: var(--white); color: var(--black); overflow-y: auto; overscroll-behavior: contain; padding: 22px 28px 48px; }
.panel[hidden] { display: none; }
.panel-close { display: block; margin-left: auto; font: 400 12px/1 var(--f-mono); text-transform: uppercase; letter-spacing: .06em; padding: 12px 16px; border: 1px solid var(--black); border-radius: 999px; }
.panel-close:hover { background: var(--black); color: var(--white); }
.panel-fig { margin: 18px 0 22px; aspect-ratio: 16 / 10; overflow: hidden; background: var(--jelly); }
.panel-fig img { width: 100%; height: 100%; object-fit: cover; }
.panel-title { font: 300 clamp(40px, 4.4vw, 64px)/.95 var(--f-title); text-transform: uppercase; letter-spacing: -.01em; margin: 8px 0 22px; }
.panel-text p { font-size: 17px; line-height: 1.55; margin-bottom: 14px; max-width: 52ch; }
.panel-text .mono { margin-top: 22px; padding-top: 12px; border-top: 1px solid var(--black); }
/* ---------- 5 · reviews ---------- */
.rev { position: relative; background: var(--peri); color: var(--black); padding: 130px 0 70px; overflow: clip; }
.rev-head { padding: 0 var(--gut); display: flex; flex-direction: column; gap: 22px; }
.rev-head .t-title { color: var(--white); }
.rev-stats { display: grid; grid-template-columns: repeat(3, 1fr); margin: 64px var(--gut) 56px; border-top: 1px solid var(--black); }
.rev-stats div { padding: 18px 20px 0 0; display: flex; flex-direction: column; gap: 6px; }
.rev-stats b { font: 300 clamp(48px, 6vw, 108px)/1 var(--f-title); letter-spacing: -.02em; color: var(--white); }
.mq { display: grid; gap: 12px; }
.mq-row { overflow: hidden; }
.mq-track { display: flex; width: max-content; }
.fx .mq-track { animation: mq 64s linear infinite; }
.fx .mq-rev .mq-track { animation-direction: reverse; animation-duration: 72s; }
.fx .mq-row:hover .mq-track { animation-play-state: paused; }
.is-static .mq-track { animation-play-state: paused !important; }
@keyframes mq { to { transform: translate3d(-50%, 0, 0); } }
.rv { flex: none; width: clamp(290px, 29vw, 460px); margin-right: 12px; padding: 26px 26px 22px; background: var(--white); display: flex; flex-direction: column; justify-content: space-between; gap: 22px; }
.mq-rev .rv { background: var(--jelly); }
.rv blockquote { font: 500 clamp(18px, 1.5vw, 23px)/1.32 var(--f-ui); }
html:not(.fx) .mq-row { overflow-x: auto; }
.rev-foot { padding: 30px var(--gut) 0; }
/* ---------- 6 · quiz ---------- */
.quiz { position: relative; min-height: 100vh; display: flex; justify-content: flex-end; overflow: hidden; background: var(--peri); }
.quiz-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.quiz-panel { position: relative; width: min(620px, 42vw); background: var(--jelly); color: var(--black); padding: 130px 3.4vw 60px; display: flex; flex-direction: column; justify-content: center; gap: 28px; }
.quiz-kicker { display: flex; gap: 8px; }
.qz { display: flex; flex-direction: column; gap: 24px; }
.qz[hidden] { display: none; }
.qz .t-title { font-size: clamp(40px, 4.4vw, 76px); }
.qz p { font-size: 18px; max-width: 38ch; }
.qz .btn { align-self: flex-start; }
.qz-q { font: 300 clamp(32px, 3vw, 52px)/1 var(--f-title); text-transform: uppercase; letter-spacing: -.01em; }
.qz-opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.qz-opts button { text-align: left; padding: 20px 18px; border: 1px solid var(--black); font: 500 17px/1.2 var(--f-ui); transition: background-color .25s, color .25s; }
.qz-opts button:hover, .qz-opts button:focus-visible { background: var(--black); color: var(--jelly); }
.qz-trio { display: grid; gap: 0; border-top: 1px solid var(--black); }
.qz-trio li { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 14px 0; border-bottom: 1px solid var(--black); font: 300 26px/1.1 var(--f-title); text-transform: uppercase; }
.qz-trio li span { font: 400 12px/1 var(--f-mono); letter-spacing: .06em; }
.qz-actions { display: flex; align-items: center; gap: 24px; flex-wrap: wrap; }
/* ---------- footer ---------- */
.ft { background: var(--black); color: var(--white); padding: 96px var(--gut) 26px; overflow: clip; }
.ft-top { display: grid; grid-template-columns: 1.5fr 1fr 1fr 1fr; gap: 32px; }
.ft-top .mono { color: var(--jelly); margin-bottom: 14px; }
.ft-refill p:not(.mono) { font-size: 19px; max-width: 34ch; }
.ft-col { display: flex; flex-direction: column; gap: 8px; font-size: 16px; }
.ft-col a:hover { color: var(--jelly); }
.ft-mark { font: 300 20vw/.8 var(--f-title); letter-spacing: -.02em; text-transform: uppercase; white-space: nowrap; margin: 80px 0 26px; text-align: center; }
.ft-base { display: flex; justify-content: space-between; gap: 16px; border-top: 1px solid var(--white-25); padding-top: 18px; }
.ft-up:hover { color: var(--jelly); }
/* ---------- tablet ---------- */
@media (max-width: 1100px) {
.hdr-nav { gap: 18px; }
.hero-copy { width: 34vw; }
}
@media (max-width: 991px) {
.hdr-nav, .hdr-cta { display: none; }
.hdr-menu { display: inline-flex; }
.hero-copy { width: 40vw; }
.ft-top { grid-template-columns: 1fr 1fr; }
.quiz-panel { width: 54vw; }
}
/* ---------- mobile ---------- */
@media (max-width: 767px) {
body { font-size: 16px; }
.mono { font-size: 11px; }
.hero-tags { display: none; }
.hero-product { height: 50vh; bottom: auto; top: 21vh; --lf: 7; }
.hero-callout { display: none; }
.hero-mark { font-size: 17.4vw; bottom: 4vw; }
.hero-copy { left: var(--gut); right: var(--gut); width: auto; bottom: calc(17.4vw * .76 + 10vw); }
.hero-copy p { font-size: 18px; margin-bottom: 14px; max-width: 26ch; }
.hero-actions .btn { height: 46px; padding: 0 20px; font-size: 15px; }
.range { padding: 104px 0 84px; }
.range-head { grid-template-columns: 1fr; }
.range-sub { font-size: 16px; }
.orbit { height: 88vw; margin-top: 18px; }
.orbit-item { width: 44vw; }
.orbit-shadow { width: 36vw; height: 4.6vw; margin: 25.4vw 0 0 -18vw; }
.orbit-tag { margin-top: -30.6vw; font-size: 10px; padding: 5px 9px; }
.orbit-ring { width: 74vw; margin: -37vw 0 0 -37vw; }
.ring-l { transform: rotate(var(--a)) translateY(-37vw) rotate(calc(-1 * var(--a))); }
.ring-l i { font-size: 9px; }
.orbit-info { margin-top: 0; }
.oi-meta { flex-direction: column; gap: 4px; }
.oi-desc { font-size: 16px; }
html:not(.fx) .orbit-stage { grid-template-columns: 1fr 1fr; }
.ri-head { min-height: 86vh; padding: 110px var(--gut) 70px; }
.ri-title { font-size: 15.4vw; }
.ri-sub { margin-left: 0; font-size: 17px; }
.ri-wide-copy { flex-direction: column; align-items: flex-start; }
.ri-wide-line { font-size: 13vw; text-align: left; }
.fx .rt { height: 100vh; }
.fx .rt-media { position: absolute; inset: 0; height: 100%; }
.rt-scrim { background: linear-gradient(180deg, rgba(0, 0, 0, 0) 30%, rgba(0, 0, 0, .45) 70%); }
.rt-card { left: var(--gut); right: var(--gut); top: 82px; width: auto; transform: none; }
.fx .rt-steps { position: absolute; inset: 0; margin: 0; }
.fx .rt-step { position: absolute; left: 0; right: 0; top: calc(82px + (100vw - 2 * var(--gut)) * .75 + 22px); height: auto; padding: 0 var(--gut); display: block; }
.rt-title { font-size: 15vw; margin: 12px 0 14px; }
.rt-chips { margin-bottom: 14px; }
.rt-how { font-size: 16px; margin-bottom: 16px; }
html:not(.fx) .rt-step { grid-template-columns: 1fr; }
html:not(.fx) .rt-step > :not(img) { grid-column: 1; }
html:not(.fx) .rt-step-img { grid-row: auto; margin-bottom: 18px; }
.smear { grid-template-columns: 1fr; padding: 100px var(--gut) 80px; gap: 28px; }
.smear-card { aspect-ratio: 4 / 5; }
.smear-lede { font-size: 16px; }
.chip { padding: 10px 14px 10px 10px; font-size: 15px; }
.ing { padding: 100px 0 56px; }
.ing-head { flex-direction: column; align-items: flex-start; margin-bottom: 26px; }
.ing-row { height: auto; margin: 0; padding: 0 var(--gut) 12px; display: flex; gap: 10px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-padding: 0 var(--gut); cursor: auto !important; }
.ing-card { position: relative; flex: none; width: 82vw; height: 540px; scroll-snap-align: start; transform: none !important; }
.ing-in, html:not(.fx) .ing-in { grid-template-columns: 1fr; grid-template-rows: 46% 1fr; }
.ing-spine { display: none; }
.ing-fig { grid-row: 1; }
.ing-body { grid-row: 2; padding: 18px 18px 18px; }
.ing-cursor { display: none; }
.rev { padding: 100px 0 60px; }
.rev-stats { grid-template-columns: 1fr; margin: 40px var(--gut) 40px; }
.rev-stats div { padding: 14px 0; border-bottom: 1px solid var(--black); }
.rv { width: 78vw; }
.quiz { flex-direction: column; min-height: 0; }
.quiz-bg { position: relative; height: 46vh; }
.quiz-panel { width: 100%; padding: 40px var(--gut) 56px; }
.qz-opts { grid-template-columns: 1fr; }
.qz-trio li { font-size: 21px; }
.ft { padding: 72px var(--gut) 22px; }
.ft-top { grid-template-columns: 1fr 1fr; gap: 28px 18px; }
.ft-refill { grid-column: 1 / -1; }
.ft-mark { margin: 56px 0 18px; }
.ft-base { flex-direction: column; }
}
/* non-enhanced desktop tweaks: carousel keeps its own layout */
@media (min-width: 768px) {
html:not(.fx) .ing-in { grid-template-columns: 0 1fr 42%; }
html:not(.fx) .ing-spine { display: none; }
}
```
## `js/smear.js`
```js
/* Smear test: a 2D canvas card where dragging leaves a glossy smear of the chosen formula.
- Gel: translucent periwinkle body, a specular rim offset toward the light, and a gloss band that drifts.
- Cream: opaque jelly pink with soft edges and a low, matte sheen.
- Squalane: a thin clear film that re-draws the backdrop shifted a few px (refraction) with a fine bright rim.
Strokes are brush paths along the pointer; width follows pointer speed (fast = thin), every point
absorbs over 6 s (it thins to nothing on an ease-in curve). All colours are read from the :root tokens.
No pixel reads, so a file:// backdrop never taints anything. */
(function () {
'use strict';
var LIFE = 6000;
var BASE = { gel: 0.062, cream: 0.078, squa: 0.04 }; // brush width, as a fraction of card width
var READ = {
gel: { slip: '8 / 10', shine: 'Glassy', finish: 'Dewy, no film' },
cream: { slip: '5 / 10', shine: 'Soft matte', finish: 'Cushioned, velvet' },
squa: { slip: '10 / 10', shine: 'Clear sheen', finish: 'Bare, just glowier' }
};
function clamp(v, a, b) { return v < a ? a : v > b ? b : v; }
function mk() { var c = document.createElement('canvas'); return { c: c, x: c.getContext('2d') }; }
window.DPSmear = function (card, opt) {
opt = opt || {};
var cv = card.querySelector('canvas');
var ctx = cv && cv.getContext('2d');
if (!ctx) return null;
var src = card.querySelector('.smear-src');
var hint = card.querySelector('.smear-hint');
var stateEl = card.querySelector('.smear-state');
var root = getComputedStyle(document.documentElement);
var tok = function (n, d) { return (root.getPropertyValue(n) || '').trim() || d; };
var C = { peri: tok('--peri', '#6F7DFF'), jelly: tok('--jelly', '#FFB3F0'), white: tok('--white', '#FFFFFF'), black: tok('--black', '#000000') };
var INK = { gel: C.peri, cream: C.jelly, squa: C.white };
var dpr = Math.min(window.devicePixelRatio || 1, 1.5);
var W = 2, H = 2, cw = 1;
var L = { gel: mk(), cream: mk(), squa: mk() }, T1 = mk(), T2 = mk();
var strokes = [], cur = null, last = null, speed = 0, wS = null, formula = 'gel';
var visible = false, raf = 0, frozen = !!opt.frozen, still = !!opt.reduced, lastState = 0, demoDone = false;
function size() {
var r = card.getBoundingClientRect();
cw = Math.max(1, r.width);
W = Math.max(2, Math.round(r.width * dpr)); H = Math.max(2, Math.round(r.height * dpr));
[cv, L.gel.c, L.cream.c, L.squa.c, T1.c, T2.c].forEach(function (c) { c.width = W; c.height = H; });
kick(true);
}
// backdrop, cover-fitted; a drawn glass-tile fallback if the image is missing
function backdrop(g, dx, dy, s) {
dx = dx || 0; dy = dy || 0; s = s || 1;
if (src && src.complete && src.naturalWidth) {
var iw = src.naturalWidth, ih = src.naturalHeight, k = Math.max(W / iw, H / ih) * s;
var w = iw * k, h = ih * k;
g.drawImage(src, (W - w) / 2 + dx, (H - h) / 2 + dy, w, h);
} else {
g.fillStyle = C.peri; g.fillRect(0, 0, W, H);
g.globalAlpha = 0.16; g.strokeStyle = C.white; g.lineWidth = 1 * dpr;
var step = Math.round(W / 9);
for (var x = (dx % step); x < W; x += step) { g.beginPath(); g.moveTo(x, 0); g.lineTo(x, H); g.stroke(); }
for (var y = (dy % step); y < H; y += step) { g.beginPath(); g.moveTo(0, y); g.lineTo(W, y); g.stroke(); }
g.globalAlpha = 1;
}
}
function absorb(age) { var k = clamp(age / LIFE, 0, 1); return 1 - k * k * k; }
// draw every live stroke of one formula into its mask layer (opaque ink, so overlaps never darken)
function paintMask(f, now) {
var g = L[f].x, any = false;
g.clearRect(0, 0, W, H);
g.lineCap = 'round'; g.lineJoin = 'round'; g.strokeStyle = INK[f]; g.fillStyle = INK[f];
for (var s = 0; s < strokes.length; s++) {
var st = strokes[s]; if (st.f !== f) continue;
var p = st.pts, n = p.length;
if (n === 1) {
var r1 = p[0].w * absorb(now - p[0].t) * W / 2;
if (r1 > 0.4) { g.beginPath(); g.arc(p[0].x * W, p[0].y * W, r1, 0, 6.2832); g.fill(); any = true; }
continue;
}
for (var i = 1; i < n; i++) {
var a = p[i - 1], b = p[i];
var w = b.w * absorb(now - b.t) * W;
if (w < 0.5) continue;
g.lineWidth = w; g.beginPath(); g.moveTo(a.x * W, a.y * W); g.lineTo(b.x * W, b.y * W); g.stroke(); any = true;
}
}
return any;
}
// T = mask minus mask shifted by (ox, oy): a crescent on one edge; then tinted
function rim(mask, ox, oy, color) {
var g = T1.x;
g.globalCompositeOperation = 'source-over'; g.clearRect(0, 0, W, H);
g.drawImage(mask, 0, 0);
g.globalCompositeOperation = 'destination-out'; g.drawImage(mask, ox, oy);
g.globalCompositeOperation = 'source-in'; g.fillStyle = color; g.fillRect(0, 0, W, H);
g.globalCompositeOperation = 'source-over';
return T1.c;
}
function tint(mask, color) {
var g = T1.x;
g.globalCompositeOperation = 'source-over'; g.clearRect(0, 0, W, H);
g.drawImage(mask, 0, 0);
g.globalCompositeOperation = 'source-in'; g.fillStyle = color; g.fillRect(0, 0, W, H);
g.globalCompositeOperation = 'source-over';
return T1.c;
}
function render(now) {
var t = still ? 0 : now;
var ang = -2.2 + (still ? 0 : 0.42 * Math.sin(t / 1900)); // light comes from the upper left, drifting
var lx = Math.cos(ang), ly = Math.sin(ang);
ctx.globalCompositeOperation = 'source-over'; ctx.globalAlpha = 1; ctx.shadowBlur = 0;
ctx.clearRect(0, 0, W, H);
backdrop(ctx);
// squalane first: it is the thinnest film and sits under the others
if (paintMask('squa', now)) {
var m = L.squa.c, g2 = T2.x;
g2.globalCompositeOperation = 'source-over'; g2.clearRect(0, 0, W, H);
backdrop(g2, -lx * 6 * dpr, -ly * 6 * dpr, 1.025); // refraction shift
g2.globalCompositeOperation = 'destination-in'; g2.drawImage(m, 0, 0);
g2.globalCompositeOperation = 'source-over';
ctx.drawImage(T2.c, 0, 0);
ctx.globalAlpha = 0.12; ctx.drawImage(tint(m, C.white), 0, 0);
ctx.globalAlpha = 0.2; ctx.drawImage(rim(m, lx * 2 * dpr, ly * 2 * dpr, C.black), 0, 0);
ctx.globalAlpha = 0.85; ctx.drawImage(rim(m, -lx * 2.2 * dpr, -ly * 2.2 * dpr, C.white), 0, 0);
ctx.globalAlpha = 1;
}
if (paintMask('gel', now)) {
var mg = L.gel.c;
ctx.globalAlpha = 0.2; ctx.drawImage(rim(mg, lx * 3 * dpr, ly * 3 * dpr, C.black), 0, 0);
ctx.globalAlpha = 0.5; ctx.drawImage(mg, 0, 0);
// specular rim toward the light, softened with a glow
ctx.save(); ctx.shadowColor = C.white; ctx.shadowBlur = 5 * dpr;
ctx.globalAlpha = 0.9; ctx.drawImage(rim(mg, -lx * 4 * dpr, -ly * 4 * dpr, C.white), 0, 0);
ctx.restore();
// gloss band that drifts across the gel
var g3 = T2.x, gx = -ly, gy = lx; // the band sweeps along this axis
var pr = [0, gx * W, gy * H, gx * W + gy * H], lo = Math.min.apply(null, pr), hi = Math.max.apply(null, pr), bw = W * 0.16;
var pos = lo - bw + ((t / 2600) % 1) * (hi - lo + bw * 2);
g3.globalCompositeOperation = 'source-over'; g3.clearRect(0, 0, W, H);
var grad = g3.createLinearGradient(gx * pos, gy * pos, gx * (pos + bw), gy * (pos + bw));
grad.addColorStop(0, 'rgba(255,255,255,0)'); grad.addColorStop(0.5, 'rgba(255,255,255,.55)'); grad.addColorStop(1, 'rgba(255,255,255,0)');
g3.fillStyle = grad; g3.fillRect(0, 0, W, H);
g3.globalCompositeOperation = 'destination-in'; g3.drawImage(mg, 0, 0);
g3.globalCompositeOperation = 'source-over';
ctx.globalAlpha = still ? 0 : 0.7; ctx.drawImage(T2.c, 0, 0);
ctx.globalAlpha = 1;
}
if (paintMask('cream', now)) {
var mc = L.cream.c;
ctx.globalAlpha = 0.14; ctx.drawImage(rim(mc, lx * 5 * dpr, ly * 5 * dpr, C.black), lx * 1.5 * dpr, ly * 1.5 * dpr);
ctx.save(); ctx.shadowColor = C.jelly; ctx.shadowBlur = 14 * dpr;
ctx.globalAlpha = 0.97; ctx.drawImage(mc, 0, 0);
ctx.restore();
ctx.save(); ctx.shadowColor = C.white; ctx.shadowBlur = 12 * dpr;
ctx.globalAlpha = 0.2; ctx.drawImage(rim(mc, -lx * 10 * dpr, -ly * 10 * dpr, C.white), 0, 0);
ctx.restore();
ctx.globalAlpha = 1;
}
}
function prune(now) {
for (var s = strokes.length - 1; s >= 0; s--) {
var p = strokes[s].pts;
while (p.length && now - p[0].t > LIFE) p.shift();
if (!p.length && strokes[s] !== cur) strokes.splice(s, 1);
}
}
function status(now) {
if (!stateEl || now - lastState < 120) return;
lastState = now;
var newest = 0;
strokes.forEach(function (st) { var p = st.pts; if (p.length) newest = Math.max(newest, p[p.length - 1].t); });
stateEl.textContent = newest ? 'Absorbing · ' + Math.max(0, (LIFE - (now - newest)) / 1000).toFixed(1) + ' s' : 'Glass is clean';
}
function frame() {
raf = 0;
var now = performance.now();
if (!frozen) prune(now);
render(frozen ? (opt.frozenAt || now) : now);
status(now);
if (!frozen && visible && (strokes.length || cur)) raf = requestAnimationFrame(frame);
}
function kick(force) { if (!raf && (visible || force)) raf = requestAnimationFrame(frame); }
// pointer input: points are stored in card-width units (x and y both / card width)
function norm(cx, cy) { var r = cv.getBoundingClientRect(); return { x: (cx - r.left) / r.width, y: (cy - r.top) / r.width, cw: r.width }; }
function addPoint(x, y, t, f, cwNow) {
var cwp = cwNow || cw;
if (last) {
var d = Math.hypot(x - last.x, y - last.y) * cwp;
if (d < 1.5) return;
var dt = Math.max(1, t - last.t);
speed = speed * 0.72 + (d / dt) * 0.28;
}
var target = BASE[f] * clamp(1.25 - speed * 0.42, 0.34, 1.25);
wS = wS == null ? target : wS + (target - wS) * 0.28;
// fill long gaps with in-between stamps so width eases and the path stays round
if (last) {
var gap = Math.hypot(x - last.x, y - last.y) * cwp, n = Math.floor(gap / 5);
for (var i = 1; i < n; i++) {
var k = i / n;
cur.pts.push({ x: last.x + (x - last.x) * k, y: last.y + (y - last.y) * k, w: last.w + (wS - last.w) * k, t: last.t + (t - last.t) * k });
}
}
last = { x: x, y: y, w: wS, t: t };
cur.pts.push(last);
}
function addClient(cx, cy, t, f) { var p = norm(cx, cy); addPoint(p.x, p.y, t, f, p.cw); }
function begin(f) { cur = { f: f, pts: [] }; strokes.push(cur); last = null; speed = 0; wS = null; }
function end() { cur = null; last = null; }
cv.addEventListener('pointerdown', function (e) {
if (e.button > 0) return;
try { cv.setPointerCapture(e.pointerId); } catch (err) {}
frozen = false;
begin(formula); addClient(e.clientX, e.clientY, performance.now(), formula);
if (hint) hint.classList.add('is-gone');
kick(true);
});
cv.addEventListener('pointermove', function (e) {
if (!cur) return;
var list = e.getCoalescedEvents ? e.getCoalescedEvents() : null;
if (!list || !list.length) list = [e];
for (var i = 0; i < list.length; i++) addClient(list[i].clientX, list[i].clientY, performance.now(), cur.f);
kick(true);
});
['pointerup', 'pointercancel', 'lostpointercapture'].forEach(function (ev) { cv.addEventListener(ev, end); });
// a scripted swipe so the glass is never blank on arrival (card-space coords, immune to page scroll)
function demo(f, ms, done) {
f = f || formula; ms = ms || 1300;
var t0 = performance.now(), ar = H / W;
begin(f);
(function step() {
var now = performance.now(), k = clamp((now - t0) / ms, 0, 1);
var e = k < 0.5 ? 2 * k * k : 1 - Math.pow(-2 * k + 2, 2) / 2;
addPoint(0.14 + 0.72 * e, ar * (0.52 + Math.sin(e * Math.PI * 2) * 0.2), now, f);
kick(true);
if (k < 1 && cur) requestAnimationFrame(step); else { end(); if (done) done(); }
})();
}
// frozen still for ?static: three swipes, rendered once
function still3() {
var now = performance.now(), ar = H / W;
['squa', 'gel', 'cream'].forEach(function (f, j) {
begin(f);
for (var i = 0; i <= 60; i++) {
var e = i / 60;
addPoint(0.12 + 0.76 * e, ar * (0.28 + j * 0.22 + Math.sin(e * 6.2832 + j) * 0.07), now - 600 + i * 10, f);
}
end();
});
opt.frozenAt = now + 400; frozen = true; raf = requestAnimationFrame(frame);
}
var io = 'IntersectionObserver' in window ? new IntersectionObserver(function (en) {
visible = en[0].isIntersecting;
if (visible) {
kick(true);
if (!demoDone && !frozen && !still && en[0].intersectionRatio > 0.45) { demoDone = true; setTimeout(function () { demo('gel', 1400); }, 250); }
}
}, { threshold: [0, 0.5] }) : null;
if (io) io.observe(card); else visible = true;
if (src && !(src.complete && src.naturalWidth)) src.addEventListener('load', function () { kick(true); });
var rt; window.addEventListener('resize', function () { clearTimeout(rt); rt = setTimeout(size, 120); });
size();
if (frozen) still3();
return {
setFormula: function (f) { if (BASE[f]) formula = f; return READ[f]; },
clear: function () { strokes = []; cur = null; kick(true); },
read: READ
};
};
})();
```
## `js/main.js`
```js
/* DEWPOINT · main.js (plain script, UMD globals: gsap, ScrollTrigger, CustomEase, Lenis) */
(function () {
'use strict';
var html = document.documentElement;
var RM = html.classList.contains('is-rm');
var STATIC = html.classList.contains('is-static');
var INTRO = html.classList.contains('is-intro');
var FX = html.classList.contains('fx');
function $(s, r) { return (r || document).querySelector(s); }
function $$(s, r) { return Array.prototype.slice.call((r || document).querySelectorAll(s)); }
var isMob = function () { return window.innerWidth < 768; };
var finePointer = window.matchMedia && matchMedia('(hover: hover) and (pointer: fine)').matches;
// retry a failed image once, never show alt text on a broken image
$$('img').forEach(function (img) {
img.addEventListener('error', function () {
if (!img.dataset.retry) { img.dataset.retry = '1'; var s = img.getAttribute('src'); img.src = s + (s.indexOf('?') < 0 ? '?r=1' : '&r=1'); }
else { img.style.visibility = 'hidden'; }
});
});
if (typeof gsap === 'undefined') { html.classList.remove('is-intro', 'fx'); return; }
gsap.registerPlugin(ScrollTrigger, CustomEase);
// measured eases
CustomEase.create('dp', '0.625,0.05,0,1'); // brand ease
CustomEase.create('orbit', '0.625,0.05,0,1'); // orbit stepping
CustomEase.create('rise', 'M0,0 C0.17,0.17 0,1 1,1'); // title lines
CustomEase.create('popup', 'M0,0 C0.6,0 0,1 1,1'); // side panel
/* ---------------- smooth scroll ---------------- */
var lenis = null;
if (!RM && typeof Lenis !== 'undefined') {
lenis = new Lenis({ autoRaf: false });
lenis.on('scroll', ScrollTrigger.update);
gsap.ticker.add(function (t) { lenis.raf(t * 1000); });
gsap.ticker.lagSmoothing(0);
}
if ('scrollRestoration' in history) history.scrollRestoration = 'manual';
function scrollToEl(el, cb) {
if (!el) return;
if (lenis) lenis.scrollTo(el, { duration: 1.4, easing: function (t) { return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2; }, onComplete: cb });
else { el.scrollIntoView({ behavior: RM ? 'auto' : 'smooth' }); if (cb) setTimeout(cb, 600); }
}
/* ---------------- header: hide on scroll down (-66px), theme by section ---------------- */
var hdr = $('.hdr'), mnav = $('#mnav'), menuBtn = $('.hdr-menu');
var hdrShown = true, lastY = 0, themeRaf = 0, wideLight = false;
var themed = $$('[data-header]');
function theme() {
themeRaf = 0;
var t = 'light';
for (var i = 0; i < themed.length; i++) {
var r = themed[i].getBoundingClientRect();
if (r.top <= 33 && r.bottom > 33) t = themed[i].getAttribute('data-header');
}
if (wideLight) t = 'light';
if (!mnav.hidden) t = 'dark';
if (hdr.getAttribute('data-theme') !== t) hdr.setAttribute('data-theme', t);
}
function onScroll(y) {
if (!mnav.hidden) return;
if (y > 140 && y > lastY + 2 && hdrShown) { hdrShown = false; gsap.to(hdr, { y: -66, duration: 0.5, ease: 'dp', overwrite: true }); }
else if ((y < lastY - 2 || y <= 140) && !hdrShown) { hdrShown = true; gsap.to(hdr, { y: 0, duration: 0.5, ease: 'dp', overwrite: true }); }
lastY = y;
if (!themeRaf) themeRaf = requestAnimationFrame(theme);
}
ScrollTrigger.create({ start: 0, end: 'max', onUpdate: function (s) { onScroll(s.scroll()); } });
window.addEventListener('scroll', function () { if (!themeRaf) themeRaf = requestAnimationFrame(theme); }, { passive: true });
menuBtn.addEventListener('click', function () {
var open = mnav.hidden;
mnav.hidden = !open; menuBtn.setAttribute('aria-expanded', String(open)); menuBtn.textContent = open ? 'Close' : 'Menu';
if (lenis) { if (open) lenis.stop(); else lenis.start(); }
theme();
});
document.addEventListener('click', function (e) {
var a = e.target.closest && e.target.closest('a[href^="#"]');
if (!a) return;
var id = a.getAttribute('href');
var el = id === '#top' ? $('#top') : $(id);
if (!el) return;
e.preventDefault();
if (!mnav.hidden) menuBtn.click();
var goto = a.getAttribute('data-goto');
scrollToEl(el, goto != null && Orbit ? function () { Orbit.goTo(+goto); } : null);
});
/* ---------------- 1 · ribbon hero ----------------
Measured: media layer parallax 0.75x (translateY +150px per 600px scrolled); header hides with translateY(-66px).
Estimated from frames: band ≈ 16vh thick (11vh on mobile), cap height ≈ 70% of the band.
Text runs along the path at 60 px/s idle; Lenis velocity × 6 is added, eased. */
var Ribbon = (function () {
var svg = $('.ribbon'); if (!svg) return null;
var center = $('#rb-path'), band = $('.rb-band'), maskP = $('.rb-mask-path'), gloss = $('.rb-gloss');
var mask = $('#rb-mask'), text = $('.rb-text'), tp = $('.rb-tp'), starsG = $('.rb-stars'), meas = $('.rb-measure');
var NS = 'http://www.w3.org/2000/svg';
var PHRASES = ['Barrier first', 'Less routine', 'More skin'];
var GAP = ' ';
var unitLen = 1, sepOff = [], offset = 0, pathLen = 1, reps = 3, stars = [], vel = 0, bandW = 1, built = false, running = false, capRatio = 0.7;
function pathD(W, H) {
var f = function (x, y) { return (x * W).toFixed(1) + ',' + (y * H).toFixed(1); };
if (W / H < 0.9) // portrait: a steeper S
return 'M' + f(-0.3, 0.16) + ' C' + f(0.62, 0.02) + ' ' + f(1.18, 0.29) + ' ' + f(0.5, 0.43) + ' C' + f(-0.18, 0.57) + ' ' + f(0.16, 0.7) + ' ' + f(1.35, 0.62);
return 'M' + f(-0.1, 0.25) + ' C' + f(0.16, 0.16) + ' ' + f(0.3, 0.64) + ' ' + f(0.5, 0.63) + ' C' + f(0.7, 0.62) + ' ' + f(0.84, 0.12) + ' ' + f(1.12, 0.19);
}
function measureCap() {
try {
var c = document.createElement('canvas').getContext('2d');
c.font = '700 100px "Host Grotesk"';
var m = c.measureText('H');
if (m.actualBoundingBoxAscent) capRatio = m.actualBoundingBoxAscent / 100;
} catch (e) {}
}
function star(size) {
var s = size / 2, k = s * 0.22;
var p = document.createElementNS(NS, 'path');
p.setAttribute('d', 'M0,' + (-s) + ' C' + k + ',' + (-k) + ' ' + k + ',' + (-k) + ' ' + s + ',0 C' + k + ',' + k + ' ' + k + ',' + k + ' 0,' + s + ' C' + (-k) + ',' + k + ' ' + (-k) + ',' + k + ' ' + (-s) + ',0 C' + (-k) + ',' + (-k) + ' ' + (-k) + ',' + (-k) + ' 0,' + (-s) + 'Z');
return p;
}
function build() {
var hero = $('.hero'); var W = hero.clientWidth, H = hero.clientHeight;
if (!W || !H) return;
svg.setAttribute('viewBox', '0 0 ' + W + ' ' + H);
var portrait = W / H < 0.9;
bandW = (portrait ? 0.11 : 0.16) * H;
var d = pathD(W, H);
[center, band, maskP, gloss].forEach(function (p) { p.setAttribute('d', d); });
band.setAttribute('stroke-width', bandW.toFixed(1));
maskP.setAttribute('stroke-width', bandW.toFixed(1));
gloss.setAttribute('stroke-width', (bandW * 0.1).toFixed(1));
gloss.setAttribute('transform', 'translate(0,' + (-bandW * 0.3).toFixed(1) + ')');
mask.setAttribute('x', -W); mask.setAttribute('y', -H); mask.setAttribute('width', W * 3); mask.setAttribute('height', H * 3);
measureCap();
var fs = 0.7 * bandW / capRatio;
text.style.fontSize = fs.toFixed(1) + 'px'; meas.style.fontSize = fs.toFixed(1) + 'px';
var unit = PHRASES.join(GAP).toUpperCase() + GAP;
meas.textContent = unit;
unitLen = meas.getComputedTextLength() || unit.length * fs * 0.6;
sepOff = [];
var idx = -1;
while ((idx = unit.indexOf(GAP, idx + 1)) >= 0) {
var before = 0, gapL = fs * 3;
try { before = idx ? meas.getSubStringLength(0, idx) : 0; gapL = meas.getSubStringLength(idx, GAP.length); } catch (e) {}
sepOff.push(before + gapL / 2);
idx += GAP.length - 1;
}
pathLen = center.getTotalLength();
reps = Math.ceil((pathLen + unitLen) / unitLen) + 1;
var all = ''; for (var i = 0; i < reps; i++) all += unit;
while (tp.firstChild) tp.removeChild(tp.firstChild);
var ts = document.createElementNS(NS, 'tspan');
ts.setAttribute('dy', (capRatio * fs / 2).toFixed(1)); // centre the caps on the path
ts.textContent = all;
tp.appendChild(ts);
while (starsG.firstChild) starsG.removeChild(starsG.firstChild);
stars = [];
for (var r = 0; r < reps; r++) for (var j = 0; j < sepOff.length; j++) { var s = star(fs * 0.5); starsG.appendChild(s); stars.push({ el: s, r: r, j: j }); }
built = true;
place();
}
function place() {
tp.setAttribute('startOffset', offset.toFixed(2));
for (var i = 0; i < stars.length; i++) {
var st = stars[i], pos = offset + st.r * unitLen + sepOff[st.j];
if (pos < 0 || pos > pathLen - 1) { st.el.setAttribute('visibility', 'hidden'); continue; }
var a = center.getPointAtLength(pos), b = center.getPointAtLength(pos + 1);
st.el.setAttribute('visibility', 'visible');
st.el.setAttribute('transform', 'translate(' + a.x.toFixed(1) + ',' + a.y.toFixed(1) + ') rotate(' + (Math.atan2(b.y - a.y, b.x - a.x) * 57.2958).toFixed(1) + ')');
}
}
function tick(time, dt) {
if (!built) return;
var s = Math.min(dt / 1000, 0.05);
var v = lenis ? lenis.velocity : 0;
vel += (v * 6 - vel) * Math.min(1, s * 5); // eased velocity boost
offset -= (60 + vel * 6) * s; // 60 px/s idle + velocity × 6
while (offset <= -unitLen) offset += unitLen;
while (offset > 0) offset -= unitLen;
place();
}
function run(on) {
if (RM || STATIC) return;
if (on && !running) { running = true; gsap.ticker.add(tick); }
if (!on && running) { running = false; gsap.ticker.remove(tick); }
}
return { build: build, run: run, len: function () { return center.getTotalLength(); } };
})();
function splitChars(el) {
var t = el.textContent; el.textContent = '';
for (var i = 0; i < t.length; i++) { var s = document.createElement('span'); s.className = 'ch'; s.textContent = t[i]; el.appendChild(s); }
return $$('.ch', el);
}
var markChars = splitChars($('.hm-row'));
function heroEnter() {
var tl = gsap.timeline();
var L = Ribbon ? Ribbon.len() : 3000;
var dash = [$('.rb-band'), $('.rb-mask-path')];
tl.fromTo(dash, { strokeDasharray: L + ' ' + L, strokeDashoffset: L }, { strokeDashoffset: 0, duration: 1.6, ease: 'dp', clearProps: 'strokeDasharray,strokeDashoffset' }, 0)
.fromTo('.hero-product', { y: '9vh', opacity: 0 }, { y: 0, opacity: 1, duration: 1.4, ease: 'dp', clearProps: 'transform,opacity' }, 0.15)
.fromTo(markChars, { yPercent: 105 }, { yPercent: 0, duration: 1.2, ease: 'dp', stagger: 0.045 }, 0.25)
.fromTo(['.hero-tags', '.hero-copy', '.hero-callout'], { opacity: 0, y: 18 }, { opacity: 1, y: 0, duration: 1, ease: 'dp', stagger: 0.08, clearProps: 'transform' }, 0.55);
return tl;
}
// hero parallax: media layer at 0.75x scroll (translateY = 0.25 × scrolled)
if (FX) {
gsap.to('.hero-media', { y: function () { return $('.hero').offsetHeight * 0.25; }, ease: 'none',
scrollTrigger: { trigger: '.hero', start: 'top top', end: 'bottom top', scrub: true, invalidateOnRefresh: true } });
ScrollTrigger.create({ trigger: '.hero', start: 'top bottom', end: 'bottom top', onToggle: function (s) { if (Ribbon) Ribbon.run(s.isActive); } });
}
/* ---------------- intro: a single droplet falls and spreads into the hero ---------------- */
function runIntro() {
if (lenis) lenis.stop();
window.scrollTo(0, 0);
var hero = $('.hero'), drop = $('.loader-drop'), ring = $('.loader-ring');
var yHit = window.innerHeight * 0.58 - 24;
var tl = gsap.timeline({ delay: 0.2, onComplete: function () {
html.classList.remove('is-intro');
gsap.set(hero, { clearProps: 'clipPath,zIndex' });
var l = $('.loader'); if (l) l.parentNode.removeChild(l);
if (lenis) lenis.start();
} });
tl.fromTo(drop, { y: -80, scaleX: 0.9, scaleY: 1.15 }, { y: yHit, duration: 0.78, ease: 'power2.in' })
.to(drop, { scaleX: 1.9, scaleY: 0.4, transformOrigin: '50% 100%', duration: 0.12, ease: 'power1.out' })
.to(drop, { opacity: 0, duration: 0.14 }, '>-0.02')
.fromTo(ring, { scale: 1, opacity: 0.9 }, { scale: 11, opacity: 0, duration: 1.1, ease: 'dp' }, '<')
.fromTo(hero, { clipPath: 'circle(0% at 50% 58%)' }, { clipPath: 'circle(142% at 50% 58%)', duration: 1.25, ease: 'dp' }, '<+0.02')
.add(heroEnter(), '<+0.3')
.to(hdr, { opacity: 1, duration: 0.6 }, '<+0.5');
}
/* ---------------- 2 · range: depth orbit ----------------
Measured: orbit list rotate 360 / 24 s / ease none / repeat -1, items counter-rotate -360 (used on the label ring).
Per item, from its angle θ on the orbit: x = R·sinθ, depth f = ((cosθ + 1) / 2)^1.3,
scale 0.2 + 0.8f, blur 17.28·(1 − f) px, brightness 0.3 + 0.7f, zIndex round(1000f).
(Checks: side item at 90° → scale 0.5249, blur 10.262 px, brightness 0.5843, z 406; back → 0.2 / 17.28 / 0.3 / 0.)
R = 30vw (432 px at 1440), 34vw on mobile with blur halved.
Stepping: every 2.75 s the controller tweens progress to the next integer, duration 2.5, ease orbit (0.625,0.05,0,1),
four staggered progress tweens at 0 / 0.075 / 0.15 / 0.225 s (products, floor shadows, % tags, counter reel). */
var Orbit = (function () {
var items = $$('.orbit-item'); var N = items.length;
if (!N) return null;
var nameEl = $('.oi-name'), pctEl = $('.oi-pct'), priceEl = $('.oi-price'), descEl = $('.oi-desc');
var active = 0, target = 0, tl = null, inView = false, spin = null;
function setInfo(i, instant) {
var it = items[i];
var roll = $('.roll', nameEl);
var apply = function () {
roll.textContent = it.getAttribute('data-name');
pctEl.textContent = it.getAttribute('data-pct'); priceEl.textContent = it.getAttribute('data-price'); descEl.textContent = it.getAttribute('data-desc');
};
if (instant || !FX) { apply(); return; }
var old = $$('.ch', roll);
if (!old.length) old = splitChars(roll);
gsap.killTweensOf(old);
gsap.to([pctEl, priceEl, descEl], { opacity: 0, y: -6, duration: 0.3, ease: 'power1.in' });
gsap.to(old, { yPercent: -110, duration: 0.42, ease: 'power2.in', stagger: 0.012, onComplete: function () {
apply();
var fresh = splitChars(roll);
gsap.fromTo(fresh, { yPercent: 110 }, { yPercent: 0, duration: 0.8, ease: 'dp', stagger: 0.018 });
gsap.fromTo([pctEl, priceEl, descEl], { opacity: 0, y: 8 }, { opacity: 1, y: 0, duration: 0.7, ease: 'dp', stagger: 0.05 });
} });
}
if (!FX) return { goTo: function () {} };
var stage = $('.orbit-stage');
var shadows = items.map(function () { var s = document.createElement('span'); s.className = 'orbit-shadow'; stage.appendChild(s); return s; });
var tags = items.map(function (it) { var s = document.createElement('span'); s.className = 'orbit-tag mono'; s.textContent = it.getAttribute('data-tag'); stage.appendChild(s); return s; });
var reel = $('.oi-reel');
var P = [{ p: 0 }, { p: 0 }, { p: 0 }, { p: 0 }];
var STEP = 2 * Math.PI / N;
var R = function () { return window.innerWidth * (isMob() ? 0.34 : 0.30); };
function depth(i, p) { var th = (i - p) * STEP; return { s: Math.sin(th), f: Math.pow((Math.cos(th) + 1) / 2, 1.3) }; }
function drawProducts() {
var r = R(), bk = isMob() ? 0.5 : 1, p = P[0].p;
for (var i = 0; i < N; i++) {
var d = depth(i, p), sc = 0.2 + 0.8 * d.f, el = items[i];
el.style.transform = 'translate(-50%,-50%) translate3d(' + (r * d.s).toFixed(2) + 'px,0,0) scale(' + sc.toFixed(4) + ')';
el.style.filter = 'blur(' + (17.28 * (1 - d.f) * bk).toFixed(3) + 'px) brightness(' + (0.3 + 0.7 * d.f).toFixed(4) + ')';
el.style.zIndex = Math.round(1000 * d.f) * 4 + 2;
}
}
function drawShadows() {
var r = R(), p = P[1].p;
for (var i = 0; i < N; i++) {
var d = depth(i, p), sc = 0.2 + 0.8 * d.f, h = items[i].offsetHeight;
shadows[i].style.transform = 'translate3d(' + (r * d.s).toFixed(2) + 'px,' + (-(1 - sc) * h * 0.5).toFixed(2) + 'px,0) scale(' + sc.toFixed(4) + ')';
shadows[i].style.opacity = (0.25 + 0.75 * d.f).toFixed(3);
shadows[i].style.zIndex = Math.round(1000 * d.f) * 4;
}
}
function drawTags() {
var r = R(), p = P[2].p;
for (var i = 0; i < N; i++) {
var d = depth(i, p), sc = 0.2 + 0.8 * d.f, h = items[i].offsetHeight;
tags[i].style.transform = 'translate(-50%,-50%) translate3d(' + (r * d.s).toFixed(2) + 'px,' + ((1 - sc) * h * 0.5).toFixed(2) + 'px,0) scale(' + (0.6 + 0.4 * d.f).toFixed(4) + ')';
tags[i].style.opacity = Math.pow(d.f, 2).toFixed(3);
tags[i].style.zIndex = Math.round(1000 * d.f) * 4 + 3;
}
}
function drawReel() {
var p = P[3].p, k = ((p % N) + N) % N, h = reel.firstElementChild.offsetHeight || 17;
reel.style.transform = 'translate3d(0,' + (-k * h).toFixed(2) + 'px,0)';
}
var draws = [drawProducts, drawShadows, drawTags, drawReel];
function drawAll() { draws.forEach(function (f) { f(); }); }
function go(t) {
target = t;
if (tl) tl.kill();
tl = gsap.timeline();
P.forEach(function (o, li) { tl.to(o, { p: t, duration: 2.5, ease: 'orbit', onUpdate: draws[li] }, li * 0.075); });
var idx = ((t % N) + N) % N;
if (idx !== active) { active = idx; setInfo(idx); }
}
function goTo(i) {
if (spin) { spin.kill(); spin = null; }
var cur = ((target % N) + N) % N, diff = i - cur;
if (diff > N / 2) diff -= N; if (diff < -N / 2) diff += N;
if (diff) go(target + diff);
}
// Hover to revolve: while the pointer is over the orbit the ring turns continuously
// (one product every SPIN_STEP s, ease none); leaving settles onto the nearest product.
// The layout is periodic in N, so a single long linear tween runs without a visible loop.
var SPIN_STEP = 1.6;
function drawSpin() {
P[1].p = P[2].p = P[3].p = P[0].p;
drawShadows(); drawTags(); drawReel();
var idx = ((Math.round(P[0].p) % N) + N) % N;
if (idx !== active) { active = idx; setInfo(idx); }
}
function startSpin() {
if (spin || STATIC || !inView) return;
if (tl) { tl.kill(); tl = null; }
spin = gsap.to(P[0], { p: P[0].p + N * 1000, duration: SPIN_STEP * N * 1000, ease: 'none',
onUpdate: function () { drawProducts(); drawSpin(); } });
}
function stopSpin() {
if (!spin) return;
spin.kill(); spin = null;
go(Math.round(P[0].p));
}
var orbit = $('.orbit');
orbit.addEventListener('mouseenter', startSpin);
orbit.addEventListener('mouseleave', stopSpin);
items.forEach(function (it, i) { it.addEventListener('click', function () { goTo(i); }); });
// label ring: 360° per 24 s, labels counter-rotate so they stay upright
var labels = $$('.ring-l');
labels.forEach(function (l, i) { l.style.setProperty('--a', (i * 360 / labels.length) + 'deg'); });
var labelIn = $$('.ring-l i');
gsap.set(labelIn, { x: 0, y: 0, xPercent: -50, yPercent: -50 });
var ringT = gsap.to('.orbit-ring', { rotate: 360, duration: 24, ease: 'none', repeat: -1, paused: true });
var labT = gsap.to(labelIn, { rotate: -360, duration: 24, ease: 'none', repeat: -1, paused: true });
ScrollTrigger.create({ trigger: orbit, start: 'top 90%', end: 'bottom 10%', onToggle: function (s) {
inView = s.isActive; if (!inView) stopSpin();
if (!STATIC) { if (inView) { ringT.play(); labT.play(); } else { ringT.pause(); labT.pause(); } }
} });
window.addEventListener('resize', drawAll);
drawAll();
return { goTo: goTo, redraw: drawAll };
})();
/* ---------------- section title reveals (rise ease, lines stagger 0.12) ---------------- */
function lineWrap(el) {
var parts = el.innerHTML.split(/<br\s*\/?>/i);
el.innerHTML = parts.map(function (p) { return '<span class="ln"><span>' + p.trim() + '</span></span>'; }).join('');
return $$('.ln > span', el);
}
if (FX) {
$$('.range-head .t-title, .smear .t-title, .rev-head .t-title, .qz[data-q="intro"] .t-title').forEach(function (el) {
var lines = lineWrap(el);
gsap.fromTo(lines, { yPercent: 108 }, { yPercent: 0, duration: 1, stagger: 0.12, ease: 'rise', scrollTrigger: { trigger: el, start: 'top 80%' } });
});
// ingredients title: measured y 108% → 0, 1 s, stagger 0.12, rise ease, start 'top 80%'
gsap.fromTo('.ing-title .ln > span', { yPercent: 108 }, { yPercent: 0, duration: 1, stagger: 0.12, ease: 'rise', scrollTrigger: { trigger: '.ing-title', start: 'top 80%' } });
}
/* ---------------- 3 · ritual intro ----------------
Measured: intro title words scale 2 → 1, opacity 0 → 1, blur(8px) → blur(0).
Wide image opens from the centre: clip inset(49.85%) → inset(0), scale 1.199 → 1, translateY −897 → 0 px (at 900 tall).
Derived from the logged element positions (not wheel deltas): all three share one linear progress that runs while the
block's top travels 'top bottom' → 'top top' (100vh), and translateY = −(block top), so the frame holds still at the
viewport top while it opens. Title blur-out, opacity 1 → 0 with blur 0 → 12px, is linear over the first 69vh of that
same travel ('top bottom' → 'top 31%'; 621 px at 900, samples 0.757 / 0.351 / 0 match). */
if (FX) {
gsap.fromTo('.ri-title .w', { scale: 2, opacity: 0, filter: 'blur(8px)' }, { scale: 1, opacity: 1, filter: 'blur(0px)', duration: 1.1, ease: 'dp', stagger: 0.07,
scrollTrigger: { trigger: '.ri-head', start: 'top 70%', toggleActions: 'play none none reverse' } });
gsap.fromTo('.ri-sub', { opacity: 0, y: 16 }, { opacity: 1, y: 0, duration: 1, ease: 'dp', scrollTrigger: { trigger: '.ri-head', start: 'top 55%', toggleActions: 'play none none reverse' } });
gsap.fromTo('.ri-wide-in', { y: function () { return -window.innerHeight * (897 / 900); }, scale: 1.199, clipPath: 'inset(49.85%)' },
{ y: 0, scale: 1, clipPath: 'inset(0%)', ease: 'none', immediateRender: true,
scrollTrigger: { trigger: '.ri-wide', start: 'top bottom', end: 'top top', scrub: true, invalidateOnRefresh: true,
onUpdate: function (s) { wideLight = s.progress > 0.92 && s.progress < 1; } } });
gsap.fromTo('.ri-head > *', { opacity: 1, filter: 'blur(0px)' }, { opacity: 0, filter: 'blur(12px)', ease: 'none',
scrollTrigger: { trigger: '.ri-wide', start: 'top bottom', end: 'top 31%', scrub: true } });
}
/* ---------------- 3 · ritual steps ----------------
Measured: incoming sharp card clip inset(34.5%) → inset(0%); outgoing blurred background opacity 0.69 → 0;
global progress bar scaleX, linear.
Derived from the logged positions: each step is a 900 px (100vh) block; the change runs linearly while the next
block's top travels 'top 69%' → 'top top' (621 px at 900), reproducing 34.5 → 19.44 → 2.78 → 0 and
0.69 → 0.389 → 0.056 → 0 at 300 px intervals. Mobile: pinned for 2 × 900 px, same 279 px lead-in per step. */
var mm = gsap.matchMedia();
var rtCards = $$('.rt-card img'), rtBgs = $$('.rt-bg img'), rtSteps = $$('.rt-step'), rtBar = $('.rt-progress i');
var RT = { p1: 0, p2: 0 };
function rtUpdate() {
var p1 = RT.p1, p2 = RT.p2;
rtCards[1].style.clipPath = p1 <= 0 ? 'inset(50%)' : 'inset(' + (34.5 * (1 - p1)).toFixed(3) + '%)';
rtCards[2].style.clipPath = p2 <= 0 ? 'inset(50%)' : 'inset(' + (34.5 * (1 - p2)).toFixed(3) + '%)';
rtBgs[0].style.opacity = (0.69 * (1 - p1)).toFixed(4);
rtBgs[1].style.opacity = p1 <= 0 ? '0' : (0.69 * (1 - p2)).toFixed(4);
rtBgs[2].style.opacity = p2 <= 0 ? '0' : '0.69';
}
if (FX) {
mm.add('(min-width: 768px)', function () {
var t1 = ScrollTrigger.create({ trigger: rtSteps[1], start: 'top 69%', end: 'top top', onUpdate: function (s) { RT.p1 = s.progress; rtUpdate(); }, onRefresh: function (s) { RT.p1 = s.progress; rtUpdate(); } });
var t2 = ScrollTrigger.create({ trigger: rtSteps[2], start: 'top 69%', end: 'top top', onUpdate: function (s) { RT.p2 = s.progress; rtUpdate(); }, onRefresh: function (s) { RT.p2 = s.progress; rtUpdate(); } });
gsap.fromTo(rtBar, { scaleX: 0 }, { scaleX: 1, ease: 'none', scrollTrigger: { trigger: '.rt', start: 'top top', end: 'bottom bottom', scrub: true } });
return function () { RT.p1 = RT.p2 = 0; rtUpdate(); };
});
mm.add('(max-width: 767px)', function () {
gsap.set(rtSteps.slice(1), { autoAlpha: 0, y: 40 });
var tl = gsap.timeline({ defaults: { ease: 'none' }, scrollTrigger: { trigger: '.rt', start: 'top top', end: '+=1800', pin: true, scrub: true, anticipatePin: 1 } });
tl.to(rtBar, { scaleX: 1, duration: 1800 }, 0)
.to(RT, { p1: 1, duration: 621, onUpdate: rtUpdate }, 279)
.to(rtSteps[0], { autoAlpha: 0, y: -40, duration: 240 }, 279)
.to(rtSteps[1], { autoAlpha: 1, y: 0, duration: 420 }, 480)
.to(RT, { p2: 1, duration: 621, onUpdate: rtUpdate }, 1179)
.to(rtSteps[1], { autoAlpha: 0, y: -40, duration: 240 }, 1179)
.to(rtSteps[2], { autoAlpha: 1, y: 0, duration: 420 }, 1380);
return function () { RT.p1 = RT.p2 = 0; rtUpdate(); gsap.set(rtSteps, { clearProps: 'all' }); gsap.set(rtBar, { clearProps: 'transform' }); };
});
}
/* ---------------- 3b · smear test ---------------- */
var smear = window.DPSmear ? window.DPSmear($('.smear-card'), { reduced: RM, frozen: STATIC }) : null;
var chips = $$('.chip');
function setChip(btn) {
chips.forEach(function (c) { var on = c === btn; c.classList.toggle('is-on', on); c.setAttribute('aria-checked', on ? 'true' : 'false'); });
var r = smear ? smear.setFormula(btn.getAttribute('data-f')) : null;
if (r) Object.keys(r).forEach(function (k) { var dd = $('.smear-read [data-k="' + k + '"]'); if (dd) dd.textContent = r[k]; });
}
chips.forEach(function (c) {
c.addEventListener('click', function () { setChip(c); });
c.addEventListener('keydown', function (e) {
var i = chips.indexOf(c), n = null;
if (e.key === 'ArrowRight' || e.key === 'ArrowDown') n = chips[(i + 1) % chips.length];
if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') n = chips[(i + chips.length - 1) % chips.length];
if (n) { e.preventDefault(); n.focus(); setChip(n); }
});
});
var wipe = $('.smear-clear'); if (wipe && smear) wipe.addEventListener('click', function () { smear.clear(); });
/* ---------------- 4 · ingredients: pinned horizontal accordion ----------------
Measured: trigger cards row, start 'center center', end '+=400%', pin section, scrub (true).
Cards advance on x (function-based) in 1-unit segments, default ease; hovered card width += 63.6, x -= 63.6, 0.4 s.
Magnet cursor "Open": xPercent/yPercent −50, quickTo x/y 0.4 s power2.out; press scale 0.9 → 1 (0.2 s each);
fades in with opacity 1 (0.2 s). Side panel: right → 0, 0.75 s, ease (0.6,0,0,1), backdrop rgba(0,0,0,0 → .4).
Estimated from frames at 1440: stacked strip 127 px (8.82vw); the last card ends flush with the row's right edge. */
var ING = [
{ t: 'Ceramides', pct: 'Ceramides · 3% · NP / AP / EOP', img: 'images/ing-ceramides.jpg', inn: 'Barrier Serum, Overnight Balm', p: [
'Think of the outer layer of your skin as a brick wall. The cells are the bricks; ceramides are most of the mortar. When that mortar thins, from over-exfoliating, harsh cleansers, cold wind or just time, water escapes faster and irritants get in more easily. That is the tight, stingy, everything-burns feeling.',
'We use three skin-identical ceramides (NP, AP and EOP) at 3%, with cholesterol and free fatty acids in roughly the 3:1:1 ratio skin makes on its own. Ceramides alone help; the full set is what lets the layers re-stack.',
'Nothing dramatic happens on day one. By week two most people notice the post-wash tightness has gone, and that products they used to react to feel a lot less spicy.'] },
{ t: 'Niacinamide', pct: 'Niacinamide · 4% · vitamin B3', img: 'images/ing-niacinamide.jpg', inn: 'Niacin Drops', p: [
'Niacinamide is vitamin B3, and one of the few actives with good evidence for several jobs at once: it calms visible redness, evens patchy tone, keeps oil in check and prompts skin to make more of its own ceramides.',
'The trend has been to push it to 10% or even 20%. For sensitive or compromised skin, that is often where the flushing and tingling begin. The studies that made it famous mostly used 2% to 5%. We settled on 4%: enough to do the work, gentle enough to wear twice a day.',
'Niacin Drops also carry 1% zinc PCA for oil balance and a little panthenol so the formula never feels stripping. It layers happily under everything, vitamin C included.'] },
{ t: 'Beta-glucan', pct: 'Beta-glucan · 1% · from oats', img: 'images/ing-betaglucan.jpg', inn: 'Glaze Gel Cream', p: [
'Beta-glucan is a long sugar molecule, and ours comes from oats. It is a humectant, so it pulls water into the top layers of skin and holds it there, with a reputation for calming skin that feels hot or reactive.',
'It forms a light, flexible film you cannot really feel, which is how Glaze Gel Cream stays so light and still leaves skin looking plump for hours. In our in-house test, one layer lifted surface hydration by 62% at eight hours (n=42, illustrative).',
'1% sounds small. For beta-glucan it is not: the molecule is big and a little goes a long way. More would mostly make the texture tacky, and we would rather you enjoyed putting it on.'] },
{ t: 'Squalane', pct: 'Squalane · 100% · sugarcane-derived', img: 'images/ing-squalane.jpg', inn: 'Squalane Veil', p: [
'Your skin makes squalene, an oil that keeps the surface soft and sealed. The catch is that squalene oxidises fast in a bottle. Squalane, with an A, is the stable version: the same job, a much longer shelf life.',
'Ours is derived from sugarcane and it is the only ingredient in Squalane Veil. No fragrance, no carrier oils, no botanical blend to dilute it. It sinks in within a minute and sits well under SPF and make-up.',
'Use two drops as the last step at night to seal everything underneath, or press one over sunscreen on dry patches. It is also good for cuticles, hair ends and the bits of your face that flake when the heating comes on.'] },
{ t: 'Panthenol', pct: 'Panthenol · 5% · pro-vitamin B5', img: 'images/ing-panthenol.jpg', inn: 'Overnight Balm', p: [
'Panthenol is pro-vitamin B5. On skin it converts to pantothenic acid, which plays a part in how skin repairs itself. In plainer words, it is what you want on nights when your face feels raw, windburnt or over-treated.',
'It is also a humectant and a softener, so it cushions as well as hydrates. At 5%, Overnight Balm sits at the upper end of what is common in leave-on skincare, paired with shea butter and our ceramide complex for a balm that feels rich without being greasy.',
'Use a pea-sized amount as your last step. On retinoid nights, apply it first around the nose, mouth and eyes as a buffer, then carry on as usual.'] },
{ t: 'Zinc PCA', pct: 'Zinc PCA · 1% · mineral salt', img: 'images/ing-zinc.jpg', inn: 'Niacin Drops, SPF 50 Milk', p: [
'Zinc PCA pairs zinc, a mineral that helps regulate oil, with PCA, part of your skin’s own natural moisturising factor. The result is an oil-balancer that does not leave skin parched the way many mattifying ingredients do.',
'We add it at 1% to Niacin Drops, where it works with niacinamide on shine and congestion, and at a lower level in SPF 50 Milk, so a sunscreen meant for every single day does not turn your T-zone into a mirror by noon.',
'If you are breakout-prone and sensitive at the same time, this is the pairing to look for. It will not replace an acne treatment. It just makes the days in between less oily and less angry.'] }
];
var panel = $('.panel'), back = $('.panel-back'), panelOpen = false, opener = null, ptl = null;
function openPanel(i, from) {
var d = ING[i]; if (!d) return;
opener = from || document.activeElement;
$('.panel-fig img').src = d.img; $('.panel-fig img').alt = d.t + ' texture, close-up';
$('.panel-pct').textContent = d.pct; $('.panel-title').textContent = d.t;
$('.panel-text').innerHTML = d.p.map(function (x) { return '<p>' + x + '</p>'; }).join('') + '<p class="mono">Found in: ' + d.inn + '</p>';
panel.hidden = false; panel.scrollTop = 0; back.classList.add('is-on'); panelOpen = true;
if (lenis) lenis.stop();
if (ptl) ptl.kill();
ptl = gsap.timeline()
.fromTo(back, { backgroundColor: 'rgba(0,0,0,0)' }, { backgroundColor: 'rgba(0,0,0,0.4)', duration: RM ? 0 : 0.75, ease: 'popup' }, 0)
.to(panel, { right: 0, duration: RM ? 0 : 0.75, ease: 'popup' }, 0);
setTimeout(function () { $('.panel-close').focus({ preventScroll: true }); }, 30);
}
function closePanel() {
if (!panelOpen) return;
panelOpen = false;
if (ptl) ptl.kill();
ptl = gsap.timeline({ onComplete: function () { panel.hidden = true; back.classList.remove('is-on'); } })
.to(back, { backgroundColor: 'rgba(0,0,0,0)', duration: RM ? 0 : 0.5, ease: 'popup' }, 0)
.to(panel, { right: function () { return -Math.min(620, window.innerWidth); }, duration: RM ? 0 : 0.6, ease: 'popup' }, 0);
if (lenis) lenis.start();
if (opener && opener.focus) opener.focus({ preventScroll: true });
}
$('.panel-close').addEventListener('click', closePanel);
back.addEventListener('click', closePanel);
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape') { if (panelOpen) closePanel(); else if (!mnav.hidden) menuBtn.click(); }
if (e.key === 'Tab' && panelOpen) {
var f = $$('button, a[href]', panel); if (!f.length) return;
if (e.shiftKey && document.activeElement === f[0]) { e.preventDefault(); f[f.length - 1].focus(); }
else if (!e.shiftKey && document.activeElement === f[f.length - 1]) { e.preventDefault(); f[0].focus(); }
}
});
var ingCards = $$('.ing-card'), ingRow = $('.ing-row');
ingCards.forEach(function (c, i) {
$('.ing-open', c).addEventListener('click', function (e) { e.stopPropagation(); openPanel(i, e.currentTarget); });
c.addEventListener('click', function () { openPanel(i, $('.ing-open', c)); });
});
if (FX) {
mm.add('(min-width: 768px)', function () {
var N = ingCards.length;
var S = function () { return window.innerWidth * 0.0882; };
var Wc = function () { return ingCards[0].offsetWidth; };
var C = function () { return ingRow.clientWidth; };
var xAt = function (i, k) {
var s = S(), w = Wc();
if (k === N - 1 && i === N - 1) return Math.max((N - 1) * s, C() - w);
return i <= k ? i * s : k * s + (i - k) * w;
};
gsap.set(ingCards, { x: function (i) { return xAt(i, 0); }, zIndex: function (i) { return i + 1; } });
var tl = gsap.timeline({ scrollTrigger: { trigger: ingRow, start: 'center center', end: '+=400%', pin: '.ing', scrub: true, invalidateOnRefresh: true } });
for (var k = 1; k < N; k++) {
(function (k) { tl.to(ingCards.slice(k), { x: function (j) { return xAt(k + j, k); }, duration: 1 }, k - 1); })(k);
}
// hover: the card grows 63.6 px (at 1440) to the left over the strip it covers
var hov = ingCards.map(function (c) {
var inn = $('.ing-in', c);
var tw = gsap.to(inn, { width: function () { return c.offsetWidth + 63.6 * window.innerWidth / 1440; }, x: function () { return -63.6 * window.innerWidth / 1440; }, duration: 0.4, paused: true,
onReverseComplete: function () { gsap.set(inn, { clearProps: 'width,x' }); } });
var en = function () { tw.invalidate().play(); }, lv = function () { tw.reverse(); };
c.addEventListener('mouseenter', en); c.addEventListener('mouseleave', lv);
return function () { c.removeEventListener('mouseenter', en); c.removeEventListener('mouseleave', lv); tw.kill(); gsap.set(inn, { clearProps: 'width,x' }); };
});
// magnet cursor
var cur = $('.ing-cursor'), onMove, onEnter, onLeave, onDown, onOver;
if (finePointer) {
gsap.set(cur, { xPercent: -50, yPercent: -50 });
var qx = gsap.quickTo(cur, 'x', { duration: 0.4, ease: 'power2.out' });
var qy = gsap.quickTo(cur, 'y', { duration: 0.4, ease: 'power2.out' });
var live = false;
onMove = function (e) { if (live) { qx(e.clientX); qy(e.clientY); } };
onEnter = function (e) { live = true; gsap.set(cur, { x: e.clientX, y: e.clientY }); qx(e.clientX); qy(e.clientY); gsap.to(cur, { opacity: 1, duration: 0.2, overwrite: 'auto' }); };
onLeave = function () { live = false; gsap.to(cur, { opacity: 0, duration: 0.2, overwrite: 'auto' }); };
onDown = function () { gsap.timeline().to(cur, { scale: 0.9, duration: 0.2 }).to(cur, { scale: 1, duration: 0.2 }); };
onOver = function (e) { var c = e.target.closest && e.target.closest('.ing-card'); cur.classList.toggle('on-dark', !!(c && c.classList.contains('c-black'))); };
window.addEventListener('pointermove', onMove, { passive: true });
ingRow.addEventListener('pointerenter', onEnter); ingRow.addEventListener('pointerleave', onLeave);
ingRow.addEventListener('pointerdown', onDown); ingRow.addEventListener('pointerover', onOver);
}
return function () {
hov.forEach(function (f) { f(); });
gsap.set(ingCards, { clearProps: 'transform,zIndex' });
if (onMove) { window.removeEventListener('pointermove', onMove); ingRow.removeEventListener('pointerenter', onEnter); ingRow.removeEventListener('pointerleave', onLeave); ingRow.removeEventListener('pointerdown', onDown); ingRow.removeEventListener('pointerover', onOver); }
};
});
}
/* ---------------- 5 · reviews marquee (two rows, opposite directions) ---------------- */
$$('.mq-track').forEach(function (t) {
$$('.rv', t).forEach(function (rv) { var c = rv.cloneNode(true); c.setAttribute('aria-hidden', 'true'); t.appendChild(c); });
});
/* ---------------- 6 · quiz (local only) ---------------- */
(function () {
var PROD = { cleanser: ['Cloud Cleanser', 14], serum: ['Barrier Serum', 32], drops: ['Niacin Drops', 22], gel: ['Glaze Gel Cream', 28], squa: ['Squalane Veil', 24], spf: ['SPF 50 Milk', 26], balm: ['Overnight Balm', 38] };
var ORBIT_I = { cleanser: 0, serum: 1, drops: 2, gel: 3, squa: 4, spf: 5, balm: 6 };
var TRIO = {
dry: { p: ['cleanser', 'serum', 'balm'], why: 'Your skin is short on lipids. Ceramides by day, a cushion of panthenol by night, and a cleanser that never strips.' },
oily: { p: ['cleanser', 'drops', 'gel'], why: 'Shine is often thirst in disguise. Niacinamide and zinc for balance, then water-light moisture that never feels heavy.' },
sens: { p: ['cleanser', 'serum', 'squa'], why: 'Your barrier needs a break. Fewer actives, ceramides to rebuild, and one pure oil to seal it all in.' },
normal: { p: ['cleanser', 'gel', 'spf'], why: 'You don’t need a fix, just good habits: clean, hydrate, and SPF you’ll actually wear every day.' }
};
var panes = $$('.qz'), stepEl = $('.quiz-step'), ans = [];
function show(key) {
panes.forEach(function (p) {
var on = p.getAttribute('data-q') === String(key);
p.hidden = !on;
if (on && FX) gsap.fromTo(p.children, { opacity: 0, y: 14 }, { opacity: 1, y: 0, duration: 0.6, ease: 'dp', stagger: 0.05 });
});
stepEl.textContent = key === 'intro' ? '/ start' : key === 'result' ? '/ your trio' : '/ ' + (+key + 1) + ' of 3';
var first = $('.qz:not([hidden]) button'); if (first && key !== 'intro') first.focus({ preventScroll: true });
}
function result() {
var dry = 0, oily = 0, sens = 0;
ans.forEach(function (a) { if (a === 'dry') dry++; if (a === 'oily') oily++; if (a === 'combo') { dry += 0.5; oily += 0.5; } if (a === 'sens' || a === 'acids' || a === 'fragrance') sens++; });
var k = sens >= 1 && (ans[1] === 'acids' || ans[2] === 'sens') ? 'sens' : dry > oily ? 'dry' : oily > dry ? 'oily' : sens ? 'sens' : 'normal';
var t = TRIO[k], total = 0;
$('.qz-trio').innerHTML = t.p.map(function (id, i) { total += PROD[id][1]; return '<li>' + PROD[id][0] + '<span>' + ['AM + PM', 'Treat', 'Finish'][i] + ' · £' + PROD[id][1] + '</span></li>'; }).join('');
$('.qz-why').textContent = t.why;
$('.qz-total').textContent = 'Trio total £' + total + ' · refills from £' + Math.round(total * 0.7);
$('.qz-see').setAttribute('data-first', ORBIT_I[t.p[1]]);
show('result');
}
$('.qz-start').addEventListener('click', function () { ans = []; show(0); });
panes.forEach(function (p) {
var q = p.getAttribute('data-q');
$$('.qz-opts button', p).forEach(function (b) {
b.addEventListener('click', function () { ans[+q] = b.getAttribute('data-v'); if (+q < 2) show(+q + 1); else result(); });
});
});
$('.qz-again').addEventListener('click', function () { ans = []; show('intro'); $('.qz-start').focus({ preventScroll: true }); });
$('.qz-see').addEventListener('click', function () {
var i = +$('.qz-see').getAttribute('data-first');
scrollToEl($('#range'), function () { if (Orbit) Orbit.goTo(i); });
});
})();
/* ---------------- footer wordmark: fit to width ---------------- */
var ftMark = $('.ft-mark');
function fitMark() {
if (!ftMark) return;
if (!ftMark.firstElementChild) { ftMark.innerHTML = '<span>' + ftMark.textContent + '</span>'; }
ftMark.style.fontSize = '100px';
var w = ftMark.firstElementChild.getBoundingClientRect().width, avail = ftMark.clientWidth;
if (w) ftMark.style.fontSize = (100 * avail / w * 0.995).toFixed(2) + 'px';
}
/* ---------------- boot ---------------- */
function boot() {
if (Ribbon) Ribbon.build();
fitMark();
if (Orbit && Orbit.redraw) Orbit.redraw();
ScrollTrigger.refresh();
}
var rsT;
window.addEventListener('resize', function () { clearTimeout(rsT); rsT = setTimeout(function () { if (Ribbon) Ribbon.build(); fitMark(); }, 150); });
if (Ribbon) Ribbon.build();
fitMark();
if (document.fonts && document.fonts.ready) document.fonts.ready.then(boot);
window.addEventListener('load', boot);
if (INTRO) runIntro();
else if (FX && Ribbon) Ribbon.run(true);
if (!FX && Ribbon) { /* static ribbon under reduced motion */ }
})();
```
## `js/vendor/lenis.css`
```css
html.lenis,html.lenis body{height:auto}.lenis:not(.lenis-autoToggle).lenis-stopped{overflow:clip}.lenis.lenis-smooth [data-lenis-prevent]{overscroll-behavior:contain}.lenis.lenis-smooth iframe{pointer-events:none}.lenis.lenis-autoToggle{transition-property:overflow;transition-duration:1ms;transition-behavior:allow-discrete}
```
## `js/vendor/gsap.min.js`
```js
/*!
* GSAP 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,
[email protected]
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).window=t.window||{})}(this,function(e){"use strict";function _inheritsLoose(t,e){t.prototype=Object.create(e.prototype),(t.prototype.constructor=t).__proto__=e}function _assertThisInitialized(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function r(t){return"string"==typeof t}function s(t){return"function"==typeof t}function t(t){return"number"==typeof t}function u(t){return void 0===t}function v(t){return"object"==typeof t}function w(t){return!1!==t}function x(){return"undefined"!=typeof window}function y(t){return s(t)||r(t)}function P(t){return(i=yt(t,ot))&&ze}function Q(t,e){return console.warn("Invalid property",t,"set to",e,"Missing plugin? gsap.registerPlugin()")}function R(t,e){return!e&&console.warn(t)}function S(t,e){return t&&(ot[t]=e)&&i&&(i[t]=e)||ot}function T(){return 0}function ea(t){var e,r,i=t[0];if(v(i)||s(i)||(t=[t]),!(e=(i._gsap||{}).harness)){for(r=gt.length;r--&&!gt[r].targetTest(i););e=gt[r]}for(r=t.length;r--;)t[r]&&(t[r]._gsap||(t[r]._gsap=new Zt(t[r],e)))||t.splice(r,1);return t}function fa(t){return t._gsap||ea(Ot(t))[0]._gsap}function ga(t,e,r){return(r=t[e])&&s(r)?t[e]():u(r)&&t.getAttribute&&t.getAttribute(e)||r}function ha(t,e){return(t=t.split(",")).forEach(e)||t}function ia(t){return Math.round(1e5*t)/1e5||0}function ja(t){return Math.round(1e7*t)/1e7||0}function ka(t,e){var r=e.charAt(0),i=parseFloat(e.substr(2));return t=parseFloat(t),"+"===r?t+i:"-"===r?t-i:"*"===r?t*i:t/i}function la(t,e){for(var r=e.length,i=0;t.indexOf(e[i])<0&&++i<r;);return i<r}function ma(){var t,e,r=dt.length,i=dt.slice(0);for(ct={},t=dt.length=0;t<r;t++)(e=i[t])&&e._lazy&&(e.render(e._lazy[0],e._lazy[1],!0)._lazy=0)}function na(t){return!!(t._initted||t._startAt||t.add)}function oa(t,e,r,i){dt.length&&!L&&ma(),t.render(e,r,i||!!(L&&e<0&&na(t))),dt.length&&!L&&ma()}function pa(t){var e=parseFloat(t);return(e||0===e)&&(t+"").match(at).length<2?e:r(t)?t.trim():t}function qa(t){return t}function ra(t,e){for(var r in e)r in t||(t[r]=e[r]);return t}function ua(t,e){for(var r in e)"__proto__"!==r&&"constructor"!==r&&"prototype"!==r&&(t[r]=v(e[r])?ua(t[r]||(t[r]={}),e[r]):e[r]);return t}function va(t,e){var r,i={};for(r in t)r in e||(i[r]=t[r]);return i}function wa(t){var e=t.parent||I,r=t.keyframes?function _setKeyframeDefaults(i){return function(t,e){for(var r in e)r in t||"duration"===r&&i||"ease"===r||(t[r]=e[r])}}($(t.keyframes)):ra;if(w(t.inherit))for(;e;)r(t,e.vars.defaults),e=e.parent||e._dp;return t}function ya(t,e,r,i,n){void 0===r&&(r="_first"),void 0===i&&(i="_last");var a,s=t[i];if(n)for(a=e[n];s&&s[n]>a;)s=s._prev;return s?(e._next=s._next,s._next=e):(e._next=t[r],t[r]=e),e._next?e._next._prev=e:t[i]=e,e._prev=s,e.parent=e._dp=t,e}function za(t,e,r,i){void 0===r&&(r="_first"),void 0===i&&(i="_last");var n=e._prev,a=e._next;n?n._next=a:t[r]===e&&(t[r]=a),a?a._prev=n:t[i]===e&&(t[i]=n),e._next=e._prev=e.parent=null}function Aa(t,e){t.parent&&(!e||t.parent.autoRemoveChildren)&&t.parent.remove&&t.parent.remove(t),t._act=0}function Ba(t,e){if(t&&(!e||e._end>t._dur||e._start<0))for(var r=t;r;)r._dirty=1,r=r.parent;return t}function Da(t,e,r,i){return t._startAt&&(L?t._startAt.revert(ht):t.vars.immediateRender&&!t.vars.autoRevert||t._startAt.render(e,!0,i))}function Fa(t){return t._repeat?Tt(t._tTime,t=t.duration()+t._rDelay)*t:0}function Ha(t,e){return(t-e._start)*e._ts+(0<=e._ts?0:e._dirty?e.totalDuration():e._tDur)}function Ia(t){return t._end=ja(t._start+(t._tDur/Math.abs(t._ts||t._rts||U)||0))}function Ja(t,e){var r=t._dp;return r&&r.smoothChildTiming&&t._ts&&(t._start=ja(r._time-(0<t._ts?e/t._ts:((t._dirty?t.totalDuration():t._tDur)-e)/-t._ts)),Ia(t),r._dirty||Ba(r,t)),t}function Ka(t,e){var r;if((e._time||!e._dur&&e._initted||e._start<t._time&&(e._dur||!e.add))&&(r=Ha(t.rawTime(),e),(!e._dur||Mt(0,e.totalDuration(),r)-e._tTime>U)&&e.render(r,!0)),Ba(t,e)._dp&&t._initted&&t._time>=t._dur&&t._ts){if(t._dur<t.duration())for(r=t;r._dp;)0<=r.rawTime()&&r.totalTime(r._tTime),r=r._dp;t._zTime=-U}}function La(e,r,i,n){return r.parent&&Aa(r),r._start=ja((t(i)?i:i||e!==I?xt(e,i,r):e._time)+r._delay),r._end=ja(r._start+(r.totalDuration()/Math.abs(r.timeScale())||0)),ya(e,r,"_first","_last",e._sort?"_start":0),bt(r)||(e._recent=r),n||Ka(e,r),e._ts<0&&Ja(e,e._tTime),e}function Ma(t,e){return(ot.ScrollTrigger||Q("scrollTrigger",e))&&ot.ScrollTrigger.create(e,t)}function Na(t,e,r,i,n){return Wt(t,e,n),t._initted?!r&&t._pt&&!L&&(t._dur&&!1!==t.vars.lazy||!t._dur&&t.vars.lazy)&&f!==Rt.frame?(dt.push(t),t._lazy=[n,i],1):void 0:1}function Sa(t,e,r,i){var n=t._repeat,a=ja(e)||0,s=t._tTime/t._tDur;return s&&!i&&(t._time*=a/t._dur),t._dur=a,t._tDur=n?n<0?1e10:ja(a*(n+1)+t._rDelay*n):a,0<s&&!i&&Ja(t,t._tTime=t._tDur*s),t.parent&&Ia(t),r||Ba(t.parent,t),t}function Ta(t){return t instanceof Qt?Ba(t):Sa(t,t._dur)}function Wa(e,r,i){var n,a,s=t(r[1]),o=(s?2:1)+(e<2?0:1),u=r[o];if(s&&(u.duration=r[1]),u.parent=i,e){for(n=u,a=i;a&&!("immediateRender"in n);)n=a.vars.defaults||{},a=w(a.vars.inherit)&&a.parent;u.immediateRender=w(n.immediateRender),e<2?u.runBackwards=1:u.startAt=r[o-1]}return new Jt(r[0],u,r[1+o])}function Xa(t,e){return t||0===t?e(t):e}function Za(t,e){return r(t)&&(e=st.exec(t))?e[1]:""}function ab(t,e){return t&&v(t)&&"length"in t&&(!e&&!t.length||t.length-1 in t&&v(t[0]))&&!t.nodeType&&t!==h}function db(r){return r=Ot(r)[0]||R("Invalid scope")||{},function(t){var e=r.current||r.nativeElement||r;return Ot(t,e.querySelectorAll?e:e===r?R("Invalid scope")||a.createElement("div"):r)}}function eb(t){return t.sort(function(){return.5-Math.random()})}function fb(t){if(s(t))return t;var p=v(t)?t:{each:t},_=Yt(p.ease),m=p.from||0,g=parseFloat(p.base)||0,y={},e=0<m&&m<1,T=isNaN(m)||e,b=p.axis,w=m,x=m;return r(m)?w=x={center:.5,edges:.5,end:1}[m]||0:!e&&T&&(w=m[0],x=m[1]),function(t,e,r){var i,n,a,s,o,u,h,l,f,d=(r||p).length,c=y[d];if(!c){if(!(f="auto"===p.grid?0:(p.grid||[1,N])[1])){for(h=-N;h<(h=r[f++].getBoundingClientRect().left)&&f<d;);f<d&&f--}for(c=y[d]=[],i=T?Math.min(f,d)*w-.5:m%f,n=f===N?0:T?d*x/f-.5:m/f|0,l=N,u=h=0;u<d;u++)a=u%f-i,s=n-(u/f|0),c[u]=o=b?Math.abs("y"===b?s:a):G(a*a+s*s),h<o&&(h=o),o<l&&(l=o);"random"===m&&eb(c),c.max=h-l,c.min=l,c.v=d=(parseFloat(p.amount)||parseFloat(p.each)*(d<f?d-1:b?"y"===b?d/f:f:Math.max(f,d/f))||0)*("edges"===m?-1:1),c.b=d<0?g-d:g,c.u=Za(p.amount||p.each)||0,_=_&&d<0?jt(_):_}return d=(c[t]-c.min)/c.max||0,ja(c.b+(_?_(d):d)*c.v)+c.u}}function gb(i){var n=Math.pow(10,((i+"").split(".")[1]||"").length);return function(e){var r=ja(Math.round(parseFloat(e)/i)*i*n);return(r-r%1)/n+(t(e)?0:Za(e))}}function hb(h,e){var l,f,r=$(h);return!r&&v(h)&&(l=r=h.radius||N,h.values?(h=Ot(h.values),(f=!t(h[0]))&&(l*=l)):h=gb(h.increment)),Xa(e,r?s(h)?function(t){return f=h(t),Math.abs(f-t)<=l?f:t}:function(e){for(var r,i,n=parseFloat(f?e.x:e),a=parseFloat(f?e.y:0),s=N,o=0,u=h.length;u--;)(r=f?(r=h[u].x-n)*r+(i=h[u].y-a)*i:Math.abs(h[u]-n))<s&&(s=r,o=u);return o=!l||s<=l?h[o]:e,f||o===e||t(e)?o:o+Za(e)}:gb(h))}function ib(t,e,r,i){return Xa($(t)?!e:!0===r?!!(r=0):!i,function(){return $(t)?t[~~(Math.random()*t.length)]:(r=r||1e-5)&&(i=r<1?Math.pow(10,(r+"").length-2):1)&&Math.floor(Math.round((t-r/2+Math.random()*(e-t+.99*r))/r)*r*i)/i})}function mb(e,r,t){return Xa(t,function(t){return e[~~r(t)]})}function pb(t){for(var e,r,i,n,a=0,s="";~(e=t.indexOf("random(",a));)i=t.indexOf(")",e),n="["===t.charAt(e+7),r=t.substr(e+7,i-e-7).match(n?at:tt),s+=t.substr(a,e-a)+ib(n?r:+r[0],n?0:+r[1],+r[2]||1e-5),a=i+1;return s+t.substr(a,t.length-a)}function sb(t,e,r){var i,n,a,s=t.labels,o=N;for(i in s)(n=s[i]-e)<0==!!r&&n&&o>(n=Math.abs(n))&&(a=i,o=n);return a}function ub(t){return Aa(t),t.scrollTrigger&&t.scrollTrigger.kill(!!L),t.progress()<1&&Pt(t,"onInterrupt"),t}function xb(t){if(t)if(t=!t.name&&t.default||t,x()||t.headless){var e=t.name,r=s(t),i=e&&!r&&t.init?function(){this._props=[]}:t,n={init:T,render:ue,add:Vt,kill:de,modifier:he,rawVars:0},a={targetTest:0,get:0,getSetter:ie,aliases:{},register:0};if(Ft(),t!==i){if(pt[e])return;ra(i,ra(va(t,n),a)),yt(i.prototype,yt(n,va(t,a))),pt[i.prop=e]=i,t.targetTest&&(gt.push(i),ft[e]=1),e=("css"===e?"CSS":e.charAt(0).toUpperCase()+e.substr(1))+"Plugin"}S(e,i),t.register&&t.register(ze,i,ge)}else Ct.push(t)}function Ab(t,e,r){return(6*(t+=t<0?1:1<t?-1:0)<1?e+(r-e)*t*6:t<.5?r:3*t<2?e+(r-e)*(2/3-t)*6:e)*St+.5|0}function Bb(e,r,i){var n,a,s,o,u,h,l,f,d,c,p=e?t(e)?[e>>16,e>>8&St,e&St]:0:Dt.black;if(!p){if(","===e.substr(-1)&&(e=e.substr(0,e.length-1)),Dt[e])p=Dt[e];else if("#"===e.charAt(0)){if(e.length<6&&(e="#"+(n=e.charAt(1))+n+(a=e.charAt(2))+a+(s=e.charAt(3))+s+(5===e.length?e.charAt(4)+e.charAt(4):"")),9===e.length)return[(p=parseInt(e.substr(1,6),16))>>16,p>>8&St,p&St,parseInt(e.substr(7),16)/255];p=[(e=parseInt(e.substr(1),16))>>16,e>>8&St,e&St]}else if("hsl"===e.substr(0,3))if(p=c=e.match(tt),r){if(~e.indexOf("="))return p=e.match(et),i&&p.length<4&&(p[3]=1),p}else o=+p[0]%360/360,u=p[1]/100,n=2*(h=p[2]/100)-(a=h<=.5?h*(u+1):h+u-h*u),3<p.length&&(p[3]*=1),p[0]=Ab(o+1/3,n,a),p[1]=Ab(o,n,a),p[2]=Ab(o-1/3,n,a);else p=e.match(tt)||Dt.transparent;p=p.map(Number)}return r&&!c&&(n=p[0]/St,a=p[1]/St,s=p[2]/St,h=((l=Math.max(n,a,s))+(f=Math.min(n,a,s)))/2,l===f?o=u=0:(d=l-f,u=.5<h?d/(2-l-f):d/(l+f),o=l===n?(a-s)/d+(a<s?6:0):l===a?(s-n)/d+2:(n-a)/d+4,o*=60),p[0]=~~(o+.5),p[1]=~~(100*u+.5),p[2]=~~(100*h+.5)),i&&p.length<4&&(p[3]=1),p}function Cb(t){var r=[],i=[],n=-1;return t.split(zt).forEach(function(t){var e=t.match(rt)||[];r.push.apply(r,e),i.push(n+=e.length+1)}),r.c=i,r}function Db(t,e,r){var i,n,a,s,o="",u=(t+o).match(zt),h=e?"hsla(":"rgba(",l=0;if(!u)return t;if(u=u.map(function(t){return(t=Bb(t,e,1))&&h+(e?t[0]+","+t[1]+"%,"+t[2]+"%,"+t[3]:t.join(","))+")"}),r&&(a=Cb(t),(i=r.c).join(o)!==a.c.join(o)))for(s=(n=t.replace(zt,"1").split(rt)).length-1;l<s;l++)o+=n[l]+(~i.indexOf(l)?u.shift()||h+"0,0,0,0)":(a.length?a:u.length?u:r).shift());if(!n)for(s=(n=t.split(zt)).length-1;l<s;l++)o+=n[l]+u[l];return o+n[s]}function Gb(t){var e,r=t.join(" ");if(zt.lastIndex=0,zt.test(r))return e=Et.test(r),t[1]=Db(t[1],e),t[0]=Db(t[0],e,Cb(t[1])),!0}function Pb(t){var e=(t+"").split("("),r=Lt[e[0]];return r&&1<e.length&&r.config?r.config.apply(null,~t.indexOf("{")?[function _parseObjectInString(t){for(var e,r,i,n={},a=t.substr(1,t.length-3).split(":"),s=a[0],o=1,u=a.length;o<u;o++)r=a[o],e=o!==u-1?r.lastIndexOf(","):r.length,i=r.substr(0,e),n[s]=isNaN(i)?i.replace(Bt,"").trim():+i,s=r.substr(e+1).trim();return n}(e[1])]:function _valueInParentheses(t){var e=t.indexOf("(")+1,r=t.indexOf(")"),i=t.indexOf("(",e);return t.substring(e,~i&&i<r?t.indexOf(")",r+1):r)}(t).split(",").map(pa)):Lt._CE&&It.test(t)?Lt._CE("",t):r}function Rb(t,e){for(var r,i=t._first;i;)i instanceof Qt?Rb(i,e):!i.vars.yoyoEase||i._yoyo&&i._repeat||i._yoyo===e||(i.timeline?Rb(i.timeline,e):(r=i._ease,i._ease=i._yEase,i._yEase=r,i._yoyo=e)),i=i._next}function Tb(t,e,r,i){void 0===r&&(r=function easeOut(t){return 1-e(1-t)}),void 0===i&&(i=function easeInOut(t){return t<.5?e(2*t)/2:1-e(2*(1-t))/2});var n,a={easeIn:e,easeOut:r,easeInOut:i};return ha(t,function(t){for(var e in Lt[t]=ot[t]=a,Lt[n=t.toLowerCase()]=r,a)Lt[n+("easeIn"===e?".in":"easeOut"===e?".out":".inOut")]=Lt[t+"."+e]=a[e]}),a}function Ub(e){return function(t){return t<.5?(1-e(1-2*t))/2:.5+e(2*(t-.5))/2}}function Vb(r,t,e){function Lm(t){return 1===t?1:i*Math.pow(2,-10*t)*K((t-a)*n)+1}var i=1<=t?t:1,n=(e||(r?.3:.45))/(t<1?t:1),a=n/q*(Math.asin(1/i)||0),s="out"===r?Lm:"in"===r?function(t){return 1-Lm(1-t)}:Ub(Lm);return n=q/n,s.config=function(t,e){return Vb(r,t,e)},s}function Wb(e,r){function Tm(t){return t?--t*t*((r+1)*t+r)+1:0}void 0===r&&(r=1.70158);var t="out"===e?Tm:"in"===e?function(t){return 1-Tm(1-t)}:Ub(Tm);return t.config=function(t){return Wb(e,t)},t}var F,L,l,I,h,n,a,i,o,f,d,c,p,_,m,g,b,M,k,O,A,C,D,z,E,B,j,Y,X={autoSleep:120,force3D:"auto",nullTargetWarn:1,units:{lineHeight:""}},Z={duration:.5,overwrite:!1,delay:0},N=1e8,U=1/N,q=2*Math.PI,V=q/4,W=0,G=Math.sqrt,H=Math.cos,K=Math.sin,J="function"==typeof ArrayBuffer&&ArrayBuffer.isView||function(){},$=Array.isArray,tt=/(?:-?\.?\d|\.)+/gi,et=/[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,rt=/[-+=.]*\d+[.e-]*\d*[a-z%]*/g,it=/[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,nt=/[+-]=-?[.\d]+/,at=/[^,'"\[\]\s]+/gi,st=/^[+\-=e\s\d]*\d+[.\d]*([a-z]*|%)\s*$/i,ot={},ut={suppressEvents:!0,isStart:!0,kill:!1},ht={suppressEvents:!0,kill:!1},lt={suppressEvents:!0},ft={},dt=[],ct={},pt={},_t={},mt=30,gt=[],vt="",yt=function _merge(t,e){for(var r in e)t[r]=e[r];return t},Tt=function _animationCycle(t,e){var r=Math.floor(t=ja(t/e));return t&&r===t?r-1:r},bt=function _isFromOrFromStart(t){var e=t.data;return"isFromStart"===e||"isStart"===e},wt={_start:0,endTime:T,totalDuration:T},xt=function _parsePosition(t,e,i){var n,a,s,o=t.labels,u=t._recent||wt,h=t.duration()>=N?u.endTime(!1):t._dur;return r(e)&&(isNaN(e)||e in o)?(a=e.charAt(0),s="%"===e.substr(-1),n=e.indexOf("="),"<"===a||">"===a?(0<=n&&(e=e.replace(/=/,"")),("<"===a?u._start:u.endTime(0<=u._repeat))+(parseFloat(e.substr(1))||0)*(s?(n<0?u:i).totalDuration()/100:1)):n<0?(e in o||(o[e]=h),o[e]):(a=parseFloat(e.charAt(n-1)+e.substr(n+1)),s&&i&&(a=a/100*($(i)?i[0]:i).totalDuration()),1<n?_parsePosition(t,e.substr(0,n-1),i)+a:h+a)):null==e?h:+e},Mt=function _clamp(t,e,r){return r<t?t:e<r?e:r},kt=[].slice,Ot=function toArray(t,e,i){return l&&!e&&l.selector?l.selector(t):!r(t)||i||!n&&Ft()?$(t)?function _flatten(t,e,i){return void 0===i&&(i=[]),t.forEach(function(t){return r(t)&&!e||ab(t,1)?i.push.apply(i,Ot(t)):i.push(t)})||i}(t,i):ab(t)?kt.call(t,0):t?[t]:[]:kt.call((e||a).querySelectorAll(t),0)},At=function mapRange(e,t,r,i,n){var a=t-e,s=i-r;return Xa(n,function(t){return r+((t-e)/a*s||0)})},Pt=function _callback(t,e,r){var i,n,a,s=t.vars,o=s[e],u=l,h=t._ctx;if(o)return i=s[e+"Params"],n=s.callbackScope||t,r&&dt.length&&ma(),h&&(l=h),a=i?o.apply(n,i):o.call(n),l=u,a},Ct=[],St=255,Dt={aqua:[0,St,St],lime:[0,St,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,St],navy:[0,0,128],white:[St,St,St],olive:[128,128,0],yellow:[St,St,0],orange:[St,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[St,0,0],pink:[St,192,203],cyan:[0,St,St],transparent:[St,St,St,0]},zt=function(){var t,e="(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3,4}){1,2}\\b";for(t in Dt)e+="|"+t+"\\b";return new RegExp(e+")","gi")}(),Et=/hsl[a]?\(/,Rt=(k=Date.now,O=500,A=33,C=k(),D=C,E=z=1e3/240,g={time:0,frame:0,tick:function tick(){Al(!0)},deltaRatio:function deltaRatio(t){return b/(1e3/(t||60))},wake:function wake(){o&&(!n&&x()&&(h=n=window,a=h.document||{},ot.gsap=ze,(h.gsapVersions||(h.gsapVersions=[])).push(ze.version),P(i||h.GreenSockGlobals||!h.gsap&&h||{}),Ct.forEach(xb)),m="undefined"!=typeof requestAnimationFrame&&requestAnimationFrame,p&&g.sleep(),_=m||function(t){return setTimeout(t,E-1e3*g.time+1|0)},c=1,Al(2))},sleep:function sleep(){(m?cancelAnimationFrame:clearTimeout)(p),c=0,_=T},lagSmoothing:function lagSmoothing(t,e){O=t||1/0,A=Math.min(e||33,O)},fps:function fps(t){z=1e3/(t||240),E=1e3*g.time+z},add:function add(n,t,e){var a=t?function(t,e,r,i){n(t,e,r,i),g.remove(a)}:n;return g.remove(n),B[e?"unshift":"push"](a),Ft(),a},remove:function remove(t,e){~(e=B.indexOf(t))&&B.splice(e,1)&&e<=M&&M--},_listeners:B=[]}),Ft=function _wake(){return!c&&Rt.wake()},Lt={},It=/^[\d.\-M][\d.\-,\s]/,Bt=/["']/g,jt=function _invertEase(e){return function(t){return 1-e(1-t)}},Yt=function _parseEase(t,e){return t&&(s(t)?t:Lt[t]||Pb(t))||e};function Al(t){var e,r,i,n,a=k()-D,s=!0===t;if((O<a||a<0)&&(C+=a-A),(0<(e=(i=(D+=a)-C)-E)||s)&&(n=++g.frame,b=i-1e3*g.time,g.time=i/=1e3,E+=e+(z<=e?4:z-e),r=1),s||(p=_(Al)),r)for(M=0;M<B.length;M++)B[M](i,b,n,t)}function jn(t){return t<Y?j*t*t:t<.7272727272727273?j*Math.pow(t-1.5/2.75,2)+.75:t<.9090909090909092?j*(t-=2.25/2.75)*t+.9375:j*Math.pow(t-2.625/2.75,2)+.984375}ha("Linear,Quad,Cubic,Quart,Quint,Strong",function(t,e){var r=e<5?e+1:e;Tb(t+",Power"+(r-1),e?function(t){return Math.pow(t,r)}:function(t){return t},function(t){return 1-Math.pow(1-t,r)},function(t){return t<.5?Math.pow(2*t,r)/2:1-Math.pow(2*(1-t),r)/2})}),Lt.Linear.easeNone=Lt.none=Lt.Linear.easeIn,Tb("Elastic",Vb("in"),Vb("out"),Vb()),j=7.5625,Y=1/2.75,Tb("Bounce",function(t){return 1-jn(1-t)},jn),Tb("Expo",function(t){return Math.pow(2,10*(t-1))*t+t*t*t*t*t*t*(1-t)}),Tb("Circ",function(t){return-(G(1-t*t)-1)}),Tb("Sine",function(t){return 1===t?1:1-H(t*V)}),Tb("Back",Wb("in"),Wb("out"),Wb()),Lt.SteppedEase=Lt.steps=ot.SteppedEase={config:function config(t,e){void 0===t&&(t=1);var r=1/t,i=t+(e?0:1),n=e?1:0;return function(t){return((i*Mt(0,.99999999,t)|0)+n)*r}}},Z.ease=Lt["quad.out"],ha("onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt",function(t){return vt+=t+","+t+"Params,"});var Xt,Zt=function GSCache(t,e){this.id=W++,(t._gsap=this).target=t,this.harness=e,this.get=e?e.get:ga,this.set=e?e.getSetter:ie},Nt=((Xt=Animation.prototype).delay=function delay(t){return t||0===t?(this.parent&&this.parent.smoothChildTiming&&this.startTime(this._start+t-this._delay),this._delay=t,this):this._delay},Xt.duration=function duration(t){return arguments.length?this.totalDuration(0<this._repeat?t+(t+this._rDelay)*this._repeat:t):this.totalDuration()&&this._dur},Xt.totalDuration=function totalDuration(t){return arguments.length?(this._dirty=0,Sa(this,this._repeat<0?t:(t-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},Xt.totalTime=function totalTime(t,e){if(Ft(),!arguments.length)return this._tTime;var r=this._dp;if(r&&r.smoothChildTiming&&this._ts){for(Ja(this,t),!r._dp||r.parent||Ka(r,this);r&&r.parent;)r.parent._time!==r._start+(0<=r._ts?r._tTime/r._ts:(r.totalDuration()-r._tTime)/-r._ts)&&r.totalTime(r._tTime,!0),r=r.parent;!this.parent&&this._dp.autoRemoveChildren&&(0<this._ts&&t<this._tDur||this._ts<0&&0<t||!this._tDur&&!t)&&La(this._dp,this,this._start-this._delay)}return(this._tTime!==t||!this._dur&&!e||this._initted&&Math.abs(this._zTime)===U||!t&&!this._initted&&(this.add||this._ptLookup))&&(this._ts||(this._pTime=t),oa(this,t,e)),this},Xt.time=function time(t,e){return arguments.length?this.totalTime(Math.min(this.totalDuration(),t+Fa(this))%(this._dur+this._rDelay)||(t?this._dur:0),e):this._time},Xt.totalProgress=function totalProgress(t,e){return arguments.length?this.totalTime(this.totalDuration()*t,e):this.totalDuration()?Math.min(1,this._tTime/this._tDur):0<=this.rawTime()&&this._initted?1:0},Xt.progress=function progress(t,e){return arguments.length?this.totalTime(this.duration()*(!this._yoyo||1&this.iteration()?t:1-t)+Fa(this),e):this.duration()?Math.min(1,this._time/this._dur):0<this.rawTime()?1:0},Xt.iteration=function iteration(t,e){var r=this.duration()+this._rDelay;return arguments.length?this.totalTime(this._time+(t-1)*r,e):this._repeat?Tt(this._tTime,r)+1:1},Xt.timeScale=function timeScale(t,e){if(!arguments.length)return this._rts===-U?0:this._rts;if(this._rts===t)return this;var r=this.parent&&this._ts?Ha(this.parent._time,this):this._tTime;return this._rts=+t||0,this._ts=this._ps||t===-U?0:this._rts,this.totalTime(Mt(-Math.abs(this._delay),this.totalDuration(),r),!1!==e),Ia(this),function _recacheAncestors(t){for(var e=t.parent;e&&e.parent;)e._dirty=1,e.totalDuration(),e=e.parent;return t}(this)},Xt.paused=function paused(t){return arguments.length?(this._ps!==t&&((this._ps=t)?(this._pTime=this._tTime||Math.max(-this._delay,this.rawTime()),this._ts=this._act=0):(Ft(),this._ts=this._rts,this.totalTime(this.parent&&!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,1===this.progress()&&Math.abs(this._zTime)!==U&&(this._tTime-=U)))),this):this._ps},Xt.startTime=function startTime(t){if(arguments.length){this._start=t;var e=this.parent||this._dp;return!e||!e._sort&&this.parent||La(e,this,t-this._delay),this}return this._start},Xt.endTime=function endTime(t){return this._start+(w(t)?this.totalDuration():this.duration())/Math.abs(this._ts||1)},Xt.rawTime=function rawTime(t){var e=this.parent||this._dp;return e?t&&(!this._ts||this._repeat&&this._time&&this.totalProgress()<1)?this._tTime%(this._dur+this._rDelay):this._ts?Ha(e.rawTime(t),this):this._tTime:this._tTime},Xt.revert=function revert(t){void 0===t&&(t=lt);var e=L;return L=t,na(this)&&(this.timeline&&this.timeline.revert(t),this.totalTime(-.01,t.suppressEvents)),"nested"!==this.data&&!1!==t.kill&&this.kill(),L=e,this},Xt.globalTime=function globalTime(t){for(var e=this,r=arguments.length?t:e.rawTime();e;)r=e._start+r/(Math.abs(e._ts)||1),e=e._dp;return!this.parent&&this._sat?this._sat.globalTime(t):r},Xt.repeat=function repeat(t){return arguments.length?(this._repeat=t===1/0?-2:t,Ta(this)):-2===this._repeat?1/0:this._repeat},Xt.repeatDelay=function repeatDelay(t){if(arguments.length){var e=this._time;return this._rDelay=t,Ta(this),e?this.time(e):this}return this._rDelay},Xt.yoyo=function yoyo(t){return arguments.length?(this._yoyo=t,this):this._yoyo},Xt.seek=function seek(t,e){return this.totalTime(xt(this,t),w(e))},Xt.restart=function restart(t,e){return this.play().totalTime(t?-this._delay:0,w(e)),this._dur||(this._zTime=-U),this},Xt.play=function play(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},Xt.reverse=function reverse(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},Xt.pause=function pause(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},Xt.resume=function resume(){return this.paused(!1)},Xt.reversed=function reversed(t){return arguments.length?(!!t!==this.reversed()&&this.timeScale(-this._rts||(t?-U:0)),this):this._rts<0},Xt.invalidate=function invalidate(){return this._initted=this._act=0,this._zTime=-U,this},Xt.isActive=function isActive(){var t,e=this.parent||this._dp,r=this._start;return!(e&&!(this._ts&&this._initted&&e.isActive()&&(t=e.rawTime(!0))>=r&&t<this.endTime(!0)-U))},Xt.eventCallback=function eventCallback(t,e,r){var i=this.vars;return 1<arguments.length?(e?(i[t]=e,r&&(i[t+"Params"]=r),"onUpdate"===t&&(this._onUpdate=e)):delete i[t],this):i[t]},Xt.then=function then(t){var i=this;return new Promise(function(e){function Eo(){var t=i.then;i.then=null,s(r)&&(r=r(i))&&(r.then||r===i)&&(i.then=t),e(r),i.then=t}var r=s(t)?t:qa;i._initted&&1===i.totalProgress()&&0<=i._ts||!i._tTime&&i._ts<0?Eo():i._prom=Eo})},Xt.kill=function kill(){ub(this)},Animation);function Animation(t){this.vars=t,this._delay=+t.delay||0,(this._repeat=t.repeat===1/0?-2:t.repeat||0)&&(this._rDelay=t.repeatDelay||0,this._yoyo=!!t.yoyo||!!t.yoyoEase),this._ts=1,Sa(this,+t.duration,1,1),this.data=t.data,l&&(this._ctx=l).data.push(this),c||Rt.wake()}ra(Nt.prototype,{_time:0,_start:0,_end:0,_tTime:0,_tDur:0,_dirty:0,_repeat:0,_yoyo:!1,parent:null,_initted:!1,_rDelay:0,_ts:1,_dp:0,ratio:0,_zTime:-U,_prom:0,_ps:!1,_rts:1});var Qt=function(i){function Timeline(t,e){var r;return void 0===t&&(t={}),(r=i.call(this,t)||this).labels={},r.smoothChildTiming=!!t.smoothChildTiming,r.autoRemoveChildren=!!t.autoRemoveChildren,r._sort=w(t.sortChildren),I&&La(t.parent||I,_assertThisInitialized(r),e),t.reversed&&r.reverse(),t.paused&&r.paused(!0),t.scrollTrigger&&Ma(_assertThisInitialized(r),t.scrollTrigger),r}_inheritsLoose(Timeline,i);var e=Timeline.prototype;return e.to=function to(t,e,r){return Wa(0,arguments,this),this},e.from=function from(t,e,r){return Wa(1,arguments,this),this},e.fromTo=function fromTo(t,e,r,i){return Wa(2,arguments,this),this},e.set=function set(t,e,r){return e.duration=0,e.parent=this,wa(e).repeatDelay||(e.repeat=0),e.immediateRender=!!e.immediateRender,new Jt(t,e,xt(this,r),1),this},e.call=function call(t,e,r){return La(this,Jt.delayedCall(0,t,e),r)},e.staggerTo=function staggerTo(t,e,r,i,n,a,s){return r.duration=e,r.stagger=r.stagger||i,r.onComplete=a,r.onCompleteParams=s,r.parent=this,new Jt(t,r,xt(this,n)),this},e.staggerFrom=function staggerFrom(t,e,r,i,n,a,s){return r.runBackwards=1,wa(r).immediateRender=w(r.immediateRender),this.staggerTo(t,e,r,i,n,a,s)},e.staggerFromTo=function staggerFromTo(t,e,r,i,n,a,s,o){return i.startAt=r,wa(i).immediateRender=w(i.immediateRender),this.staggerTo(t,e,i,n,a,s,o)},e.render=function render(t,e,r){var i,n,a,s,o,u,h,l,f,d,c,p,_=this._time,m=this._dirty?this.totalDuration():this._tDur,g=this._dur,v=t<=0?0:ja(t),y=this._zTime<0!=t<0&&(this._initted||!g);if(this!==I&&m<v&&0<=t&&(v=m),v!==this._tTime||r||y){if(_!==this._time&&g&&(v+=this._time-_,t+=this._time-_),i=v,f=this._start,u=!(l=this._ts),y&&(g||(_=this._zTime),!t&&e||(this._zTime=t)),this._repeat){if(c=this._yoyo,o=g+this._rDelay,this._repeat<-1&&t<0)return this.totalTime(100*o+t,e,r);if(i=ja(v%o),v===m?(s=this._repeat,i=g):((s=~~(d=ja(v/o)))&&s===d&&(i=g,s--),g<i&&(i=g)),d=Tt(this._tTime,o),!_&&this._tTime&&d!==s&&this._tTime-d*o-this._dur<=0&&(d=s),c&&1&s&&(i=g-i,p=1),s!==d&&!this._lock){var T=c&&1&d,b=T===(c&&1&s);if(s<d&&(T=!T),_=T?0:v%g?g:v,this._lock=1,this.render(_||(p?0:ja(s*o)),e,!g)._lock=0,this._tTime=v,!e&&this.parent&&Pt(this,"onRepeat"),this.vars.repeatRefresh&&!p&&(this.invalidate()._lock=1),_&&_!==this._time||u!=!this._ts||this.vars.onRepeat&&!this.parent&&!this._act)return this;if(g=this._dur,m=this._tDur,b&&(this._lock=2,_=T?g:-1e-4,this.render(_,!0),this.vars.repeatRefresh&&!p&&this.invalidate()),this._lock=0,!this._ts&&!u)return this;Rb(this,p)}}if(this._hasPause&&!this._forcing&&this._lock<2&&(h=function _findNextPauseTween(t,e,r){var i;if(e<r)for(i=t._first;i&&i._start<=r;){if("isPause"===i.data&&i._start>e)return i;i=i._next}else for(i=t._last;i&&i._start>=r;){if("isPause"===i.data&&i._start<e)return i;i=i._prev}}(this,ja(_),ja(i)))&&(v-=i-(i=h._start)),this._tTime=v,this._time=i,this._act=!l,this._initted||(this._onUpdate=this.vars.onUpdate,this._initted=1,this._zTime=t,_=0),!_&&v&&!e&&!d&&(Pt(this,"onStart"),this._tTime!==v))return this;if(_<=i&&0<=t)for(n=this._first;n;){if(a=n._next,(n._act||i>=n._start)&&n._ts&&h!==n){if(n.parent!==this)return this.render(t,e,r);if(n.render(0<n._ts?(i-n._start)*n._ts:(n._dirty?n.totalDuration():n._tDur)+(i-n._start)*n._ts,e,r),i!==this._time||!this._ts&&!u){h=0,a&&(v+=this._zTime=-U);break}}n=a}else{n=this._last;for(var w=t<0?t:i;n;){if(a=n._prev,(n._act||w<=n._end)&&n._ts&&h!==n){if(n.parent!==this)return this.render(t,e,r);if(n.render(0<n._ts?(w-n._start)*n._ts:(n._dirty?n.totalDuration():n._tDur)+(w-n._start)*n._ts,e,r||L&&na(n)),i!==this._time||!this._ts&&!u){h=0,a&&(v+=this._zTime=w?-U:U);break}}n=a}}if(h&&!e&&(this.pause(),h.render(_<=i?0:-U)._zTime=_<=i?1:-1,this._ts))return this._start=f,Ia(this),this.render(t,e,r);this._onUpdate&&!e&&Pt(this,"onUpdate",!0),(v===m&&this._tTime>=this.totalDuration()||!v&&_)&&(f!==this._start&&Math.abs(l)===Math.abs(this._ts)||this._lock||(!t&&g||!(v===m&&0<this._ts||!v&&this._ts<0)||Aa(this,1),e||t<0&&!_||!v&&!_&&m||(Pt(this,v===m&&0<=t?"onComplete":"onReverseComplete",!0),!this._prom||v<m&&0<this.timeScale()||this._prom())))}return this},e.add=function add(e,i){var n=this;if(t(i)||(i=xt(this,i,e)),!(e instanceof Nt)){if($(e))return e.forEach(function(t){return n.add(t,i)}),this;if(r(e))return this.addLabel(e,i);if(!s(e))return this;e=Jt.delayedCall(0,e)}return this!==e?La(this,e,i):this},e.getChildren=function getChildren(t,e,r,i){void 0===t&&(t=!0),void 0===e&&(e=!0),void 0===r&&(r=!0),void 0===i&&(i=-N);for(var n=[],a=this._first;a;)a._start>=i&&(a instanceof Jt?e&&n.push(a):(r&&n.push(a),t&&n.push.apply(n,a.getChildren(!0,e,r)))),a=a._next;return n},e.getById=function getById(t){for(var e=this.getChildren(1,1,1),r=e.length;r--;)if(e[r].vars.id===t)return e[r]},e.remove=function remove(t){return r(t)?this.removeLabel(t):s(t)?this.killTweensOf(t):(t.parent===this&&za(this,t),t===this._recent&&(this._recent=this._last),Ba(this))},e.totalTime=function totalTime(t,e){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=ja(Rt.time-(0<this._ts?t/this._ts:(this.totalDuration()-t)/-this._ts))),i.prototype.totalTime.call(this,t,e),this._forcing=0,this):this._tTime},e.addLabel=function addLabel(t,e){return this.labels[t]=xt(this,e),this},e.removeLabel=function removeLabel(t){return delete this.labels[t],this},e.addPause=function addPause(t,e,r){var i=Jt.delayedCall(0,e||T,r);return i.data="isPause",this._hasPause=1,La(this,i,xt(this,t))},e.removePause=function removePause(t){var e=this._first;for(t=xt(this,t);e;)e._start===t&&"isPause"===e.data&&Aa(e),e=e._next},e.killTweensOf=function killTweensOf(t,e,r){for(var i=this.getTweensOf(t,r),n=i.length;n--;)Ut!==i[n]&&i[n].kill(t,e);return this},e.getTweensOf=function getTweensOf(e,r){for(var i,n=[],a=Ot(e),s=this._first,o=t(r);s;)s instanceof Jt?la(s._targets,a)&&(o?(!Ut||s._initted&&s._ts)&&s.globalTime(0)<=r&&s.globalTime(s.totalDuration())>r:!r||s.isActive())&&n.push(s):(i=s.getTweensOf(a,r)).length&&n.push.apply(n,i),s=s._next;return n},e.tweenTo=function tweenTo(t,e){e=e||{};var r,i=this,n=xt(i,t),a=e.startAt,s=e.onStart,o=e.onStartParams,u=e.immediateRender,h=Jt.to(i,ra({ease:e.ease||"none",lazy:!1,immediateRender:!1,time:n,overwrite:"auto",duration:e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale())||U,onStart:function onStart(){if(i.pause(),!r){var t=e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale());h._dur!==t&&Sa(h,t,0,1).render(h._time,!0,!0),r=1}s&&s.apply(h,o||[])}},e));return u?h.render(0):h},e.tweenFromTo=function tweenFromTo(t,e,r){return this.tweenTo(e,ra({startAt:{time:xt(this,t)}},r))},e.recent=function recent(){return this._recent},e.nextLabel=function nextLabel(t){return void 0===t&&(t=this._time),sb(this,xt(this,t))},e.previousLabel=function previousLabel(t){return void 0===t&&(t=this._time),sb(this,xt(this,t),1)},e.currentLabel=function currentLabel(t){return arguments.length?this.seek(t,!0):this.previousLabel(this._time+U)},e.shiftChildren=function shiftChildren(t,e,r){void 0===r&&(r=0);for(var i,n=this._first,a=this.labels;n;)n._start>=r&&(n._start+=t,n._end+=t),n=n._next;if(e)for(i in a)a[i]>=r&&(a[i]+=t);return Ba(this)},e.invalidate=function invalidate(t){var e=this._first;for(this._lock=0;e;)e.invalidate(t),e=e._next;return i.prototype.invalidate.call(this,t)},e.clear=function clear(t){void 0===t&&(t=!0);for(var e,r=this._first;r;)e=r._next,this.remove(r),r=e;return this._dp&&(this._time=this._tTime=this._pTime=0),t&&(this.labels={}),Ba(this)},e.totalDuration=function totalDuration(t){var e,r,i,n=0,a=this,s=a._last,o=N;if(arguments.length)return a.timeScale((a._repeat<0?a.duration():a.totalDuration())/(a.reversed()?-t:t));if(a._dirty){for(i=a.parent;s;)e=s._prev,s._dirty&&s.totalDuration(),o<(r=s._start)&&a._sort&&s._ts&&!a._lock?(a._lock=1,La(a,s,r-s._delay,1)._lock=0):o=r,r<0&&s._ts&&(n-=r,(!i&&!a._dp||i&&i.smoothChildTiming)&&(a._start+=r/a._ts,a._time-=r,a._tTime-=r),a.shiftChildren(-r,!1,-Infinity),o=0),s._end>n&&s._ts&&(n=s._end),s=e;Sa(a,a===I&&a._time>n?a._time:n,1,1),a._dirty=0}return a._tDur},Timeline.updateRoot=function updateRoot(t){if(I._ts&&(oa(I,Ha(t,I)),f=Rt.frame),Rt.frame>=mt){mt+=X.autoSleep||120;var e=I._first;if((!e||!e._ts)&&X.autoSleep&&Rt._listeners.length<2){for(;e&&!e._ts;)e=e._next;e||Rt.sleep()}}},Timeline}(Nt);ra(Qt.prototype,{_lock:0,_hasPause:0,_forcing:0});function bc(t,e,i,n,a,o){var u,h,l,f;if(pt[t]&&!1!==(u=new pt[t]).init(a,u.rawVars?e[t]:function _processVars(t,e,i,n,a){if(s(t)&&(t=Gt(t,a,e,i,n)),!v(t)||t.style&&t.nodeType||$(t)||J(t))return r(t)?Gt(t,a,e,i,n):t;var o,u={};for(o in t)u[o]=Gt(t[o],a,e,i,n);return u}(e[t],n,a,o,i),i,n,o)&&(i._pt=h=new ge(i._pt,a,t,0,1,u.render,u,0,u.priority),i!==d))for(l=i._ptLookup[i._targets.indexOf(a)],f=u._props.length;f--;)l[u._props[f]]=h;return u}function hc(t,r,e,i){var n,a,s=r.ease||i||"power1.inOut";if($(r))a=e[t]||(e[t]=[]),r.forEach(function(t,e){return a.push({t:e/(r.length-1)*100,v:t,e:s})});else for(n in r)a=e[n]||(e[n]=[]),"ease"===n||a.push({t:parseFloat(t),v:r[n],e:s})}var Ut,qt,Vt=function _addPropTween(t,e,i,n,a,o,u,h,l,f){s(n)&&(n=n(a||0,t,o));var d,c=t[e],p="get"!==i?i:s(c)?l?t[e.indexOf("set")||!s(t["get"+e.substr(3)])?e:"get"+e.substr(3)](l):t[e]():c,_=s(c)?l?re:te:$t;if(r(n)&&(~n.indexOf("random(")&&(n=pb(n)),"="===n.charAt(1)&&(!(d=ka(p,n)+(Za(p)||0))&&0!==d||(n=d))),!f||p!==n||qt)return isNaN(p*n)||""===n?(c||e in t||Q(e,n),function _addComplexStringPropTween(t,e,r,i,n,a,s){var o,u,h,l,f,d,c,p,_=new ge(this._pt,t,e,0,1,oe,null,n),m=0,g=0;for(_.b=r,_.e=i,r+="",(c=~(i+="").indexOf("random("))&&(i=pb(i)),a&&(a(p=[r,i],t,e),r=p[0],i=p[1]),u=r.match(it)||[];o=it.exec(i);)l=o[0],f=i.substring(m,o.index),h?h=(h+1)%5:"rgba("===f.substr(-5)&&(h=1),l!==u[g++]&&(d=parseFloat(u[g-1])||0,_._pt={_next:_._pt,p:f||1===g?f:",",s:d,c:"="===l.charAt(1)?ka(d,l)-d:parseFloat(l)-d,m:h&&h<4?Math.round:0},m=it.lastIndex);return _.c=m<i.length?i.substring(m,i.length):"",_.fp=s,(nt.test(i)||c)&&(_.e=0),this._pt=_}.call(this,t,e,p,n,_,h||X.stringFilter,l)):(d=new ge(this._pt,t,e,+p||0,n-(p||0),"boolean"==typeof c?se:ne,0,_),l&&(d.fp=l),u&&d.modifier(u,this,t),this._pt=d)},Wt=function _initTween(t,e,r){var i,n,a,s,o,u,h,l,f,d,c,p,_,m=t.vars,g=m.ease,v=m.startAt,y=m.immediateRender,T=m.lazy,b=m.onUpdate,x=m.runBackwards,M=m.yoyoEase,k=m.keyframes,O=m.autoRevert,A=t._dur,P=t._startAt,C=t._targets,S=t.parent,D=S&&"nested"===S.data?S.vars.targets:C,z="auto"===t._overwrite&&!F,E=t.timeline;if(!E||k&&g||(g="none"),t._ease=Yt(g,Z.ease),t._yEase=M?jt(Yt(!0===M?g:M,Z.ease)):0,M&&t._yoyo&&!t._repeat&&(M=t._yEase,t._yEase=t._ease,t._ease=M),t._from=!E&&!!m.runBackwards,!E||k&&!m.stagger){if(p=(l=C[0]?fa(C[0]).harness:0)&&m[l.prop],i=va(m,ft),P&&(P._zTime<0&&P.progress(1),e<0&&x&&y&&!O?P.render(-1,!0):P.revert(x&&A?ht:ut),P._lazy=0),v){if(Aa(t._startAt=Jt.set(C,ra({data:"isStart",overwrite:!1,parent:S,immediateRender:!0,lazy:!P&&w(T),startAt:null,delay:0,onUpdate:b&&function(){return Pt(t,"onUpdate")},stagger:0},v))),t._startAt._dp=0,t._startAt._sat=t,e<0&&(L||!y&&!O)&&t._startAt.revert(ht),y&&A&&e<=0&&r<=0)return void(e&&(t._zTime=e))}else if(x&&A&&!P)if(e&&(y=!1),a=ra({overwrite:!1,data:"isFromStart",lazy:y&&!P&&w(T),immediateRender:y,stagger:0,parent:S},i),p&&(a[l.prop]=p),Aa(t._startAt=Jt.set(C,a)),t._startAt._dp=0,t._startAt._sat=t,e<0&&(L?t._startAt.revert(ht):t._startAt.render(-1,!0)),t._zTime=e,y){if(!e)return}else _initTween(t._startAt,U,U);for(t._pt=t._ptCache=0,T=A&&w(T)||T&&!A,n=0;n<C.length;n++){if(h=(o=C[n])._gsap||ea(C)[n]._gsap,t._ptLookup[n]=d={},ct[h.id]&&dt.length&&ma(),c=D===C?n:D.indexOf(o),l&&!1!==(f=new l).init(o,p||i,t,c,D)&&(t._pt=s=new ge(t._pt,o,f.name,0,1,f.render,f,0,f.priority),f._props.forEach(function(t){d[t]=s}),f.priority&&(u=1)),!l||p)for(a in i)pt[a]&&(f=bc(a,i,t,c,o,D))?f.priority&&(u=1):d[a]=s=Vt.call(t,o,a,"get",i[a],c,D,0,m.stringFilter);t._op&&t._op[n]&&t.kill(o,t._op[n]),z&&t._pt&&(Ut=t,I.killTweensOf(o,d,t.globalTime(e)),_=!t.parent,Ut=0),t._pt&&T&&(ct[h.id]=1)}u&&_e(t),t._onInit&&t._onInit(t)}t._onUpdate=b,t._initted=(!t._op||t._pt)&&!_,k&&e<=0&&E.render(N,!0,!0)},Gt=function _parseFuncOrString(t,e,i,n,a){return s(t)?t.call(e,i,n,a):r(t)&&~t.indexOf("random(")?pb(t):t},Ht=vt+"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert",Kt={};ha(Ht+",id,stagger,delay,duration,paused,scrollTrigger",function(t){return Kt[t]=1});var Jt=function(E){function Tween(e,r,i,n){var a;"number"==typeof r&&(i.duration=r,r=i,i=null);var s,o,u,h,l,f,d,c,p=(a=E.call(this,n?r:wa(r))||this).vars,_=p.duration,m=p.delay,g=p.immediateRender,T=p.stagger,b=p.overwrite,x=p.keyframes,M=p.defaults,k=p.scrollTrigger,O=p.yoyoEase,A=r.parent||I,P=($(e)||J(e)?t(e[0]):"length"in r)?[e]:Ot(e);if(a._targets=P.length?ea(P):R("GSAP target "+e+" not found. https://gsap.com",!X.nullTargetWarn)||[],a._ptLookup=[],a._overwrite=b,x||T||y(_)||y(m)){if(r=a.vars,(s=a.timeline=new Qt({data:"nested",defaults:M||{},targets:A&&"nested"===A.data?A.vars.targets:P})).kill(),s.parent=s._dp=_assertThisInitialized(a),s._start=0,T||y(_)||y(m)){if(h=P.length,d=T&&fb(T),v(T))for(l in T)~Ht.indexOf(l)&&((c=c||{})[l]=T[l]);for(o=0;o<h;o++)(u=va(r,Kt)).stagger=0,O&&(u.yoyoEase=O),c&&yt(u,c),f=P[o],u.duration=+Gt(_,_assertThisInitialized(a),o,f,P),u.delay=(+Gt(m,_assertThisInitialized(a),o,f,P)||0)-a._delay,!T&&1===h&&u.delay&&(a._delay=m=u.delay,a._start+=m,u.delay=0),s.to(f,u,d?d(o,f,P):0),s._ease=Lt.none;s.duration()?_=m=0:a.timeline=0}else if(x){wa(ra(s.vars.defaults,{ease:"none"})),s._ease=Yt(x.ease||r.ease||"none");var C,S,D,z=0;if($(x))x.forEach(function(t){return s.to(P,t,">")}),s.duration();else{for(l in u={},x)"ease"===l||"easeEach"===l||hc(l,x[l],u,x.easeEach);for(l in u)for(C=u[l].sort(function(t,e){return t.t-e.t}),o=z=0;o<C.length;o++)(D={ease:(S=C[o]).e,duration:(S.t-(o?C[o-1].t:0))/100*_})[l]=S.v,s.to(P,D,z),z+=D.duration;s.duration()<_&&s.to({},{duration:_-s.duration()})}}_||a.duration(_=s.duration())}else a.timeline=0;return!0!==b||F||(Ut=_assertThisInitialized(a),I.killTweensOf(P),Ut=0),La(A,_assertThisInitialized(a),i),r.reversed&&a.reverse(),r.paused&&a.paused(!0),(g||!_&&!x&&a._start===ja(A._time)&&w(g)&&function _hasNoPausedAncestors(t){return!t||t._ts&&_hasNoPausedAncestors(t.parent)}(_assertThisInitialized(a))&&"nested"!==A.data)&&(a._tTime=-U,a.render(Math.max(0,-m)||0)),k&&Ma(_assertThisInitialized(a),k),a}_inheritsLoose(Tween,E);var e=Tween.prototype;return e.render=function render(t,e,r){var i,n,a,s,o,u,h,l,f,d=this._time,c=this._tDur,p=this._dur,_=t<0,m=c-U<t&&!_?c:t<U?0:t;if(p){if(m!==this._tTime||!t||r||!this._initted&&this._tTime||this._startAt&&this._zTime<0!=_||this._lazy){if(i=m,l=this.timeline,this._repeat){if(s=p+this._rDelay,this._repeat<-1&&_)return this.totalTime(100*s+t,e,r);if(i=ja(m%s),m===c?(a=this._repeat,i=p):(a=~~(o=ja(m/s)))&&a===o?(i=p,a--):p<i&&(i=p),(u=this._yoyo&&1&a)&&(f=this._yEase,i=p-i),o=Tt(this._tTime,s),i===d&&!r&&this._initted&&a===o)return this._tTime=m,this;a!==o&&(l&&this._yEase&&Rb(l,u),this.vars.repeatRefresh&&!u&&!this._lock&&i!==s&&this._initted&&(this._lock=r=1,this.render(ja(s*a),!0).invalidate()._lock=0))}if(!this._initted){if(Na(this,_?t:i,r,e,m))return this._tTime=0,this;if(!(d===this._time||r&&this.vars.repeatRefresh&&a!==o))return this;if(p!==this._dur)return this.render(t,e,r)}if(this._tTime=m,this._time=i,!this._act&&this._ts&&(this._act=1,this._lazy=0),this.ratio=h=(f||this._ease)(i/p),this._from&&(this.ratio=h=1-h),!d&&m&&!e&&!o&&(Pt(this,"onStart"),this._tTime!==m))return this;for(n=this._pt;n;)n.r(h,n.d),n=n._next;l&&l.render(t<0?t:l._dur*l._ease(i/this._dur),e,r)||this._startAt&&(this._zTime=t),this._onUpdate&&!e&&(_&&Da(this,t,0,r),Pt(this,"onUpdate")),this._repeat&&a!==o&&this.vars.onRepeat&&!e&&this.parent&&Pt(this,"onRepeat"),m!==this._tDur&&m||this._tTime!==m||(_&&!this._onUpdate&&Da(this,t,0,!0),!t&&p||!(m===this._tDur&&0<this._ts||!m&&this._ts<0)||Aa(this,1),e||_&&!d||!(m||d||u)||(Pt(this,m===c?"onComplete":"onReverseComplete",!0),!this._prom||m<c&&0<this.timeScale()||this._prom()))}}else!function _renderZeroDurationTween(t,e,r,i){var n,a,s,o=t.ratio,u=e<0||!e&&(!t._start&&function _parentPlayheadIsBeforeStart(t){var e=t.parent;return e&&e._ts&&e._initted&&!e._lock&&(e.rawTime()<0||_parentPlayheadIsBeforeStart(e))}(t)&&(t._initted||!bt(t))||(t._ts<0||t._dp._ts<0)&&!bt(t))?0:1,h=t._rDelay,l=0;if(h&&t._repeat&&(l=Mt(0,t._tDur,e),a=Tt(l,h),t._yoyo&&1&a&&(u=1-u),a!==Tt(t._tTime,h)&&(o=1-u,t.vars.repeatRefresh&&t._initted&&t.invalidate())),u!==o||L||i||t._zTime===U||!e&&t._zTime){if(!t._initted&&Na(t,e,i,r,l))return;for(s=t._zTime,t._zTime=e||(r?U:0),r=r||e&&!s,t.ratio=u,t._from&&(u=1-u),t._time=0,t._tTime=l,n=t._pt;n;)n.r(u,n.d),n=n._next;e<0&&Da(t,e,0,!0),t._onUpdate&&!r&&Pt(t,"onUpdate"),l&&t._repeat&&!r&&t.parent&&Pt(t,"onRepeat"),(e>=t._tDur||e<0)&&t.ratio===u&&(u&&Aa(t,1),r||L||(Pt(t,u?"onComplete":"onReverseComplete",!0),t._prom&&t._prom()))}else t._zTime||(t._zTime=e)}(this,t,e,r);return this},e.targets=function targets(){return this._targets},e.invalidate=function invalidate(t){return t&&this.vars.runBackwards||(this._startAt=0),this._pt=this._op=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(t),E.prototype.invalidate.call(this,t)},e.resetTo=function resetTo(t,e,r,i,n){c||Rt.wake(),this._ts||this.play();var a,s=Math.min(this._dur,(this._dp._time-this._start)*this._ts);return this._initted||Wt(this,s),a=this._ease(s/this._dur),function _updatePropTweens(t,e,r,i,n,a,s,o){var u,h,l,f,d=(t._pt&&t._ptCache||(t._ptCache={}))[e];if(!d)for(d=t._ptCache[e]=[],l=t._ptLookup,f=t._targets.length;f--;){if((u=l[f][e])&&u.d&&u.d._pt)for(u=u.d._pt;u&&u.p!==e&&u.fp!==e;)u=u._next;if(!u)return qt=1,t.vars[e]="+=0",Wt(t,s),qt=0,o?R(e+" not eligible for reset"):1;d.push(u)}for(f=d.length;f--;)(u=(h=d[f])._pt||h).s=!i&&0!==i||n?u.s+(i||0)+a*u.c:i,u.c=r-u.s,h.e&&(h.e=ia(r)+Za(h.e)),h.b&&(h.b=u.s+Za(h.b))}(this,t,e,r,i,a,s,n)?this.resetTo(t,e,r,i,1):(Ja(this,0),this.parent||ya(this._dp,this,"_first","_last",this._dp._sort?"_start":0),this.render(0))},e.kill=function kill(t,e){if(void 0===e&&(e="all"),!(t||e&&"all"!==e))return this._lazy=this._pt=0,this.parent?ub(this):this.scrollTrigger&&this.scrollTrigger.kill(!!L),this;if(this.timeline){var i=this.timeline.totalDuration();return this.timeline.killTweensOf(t,e,Ut&&!0!==Ut.vars.overwrite)._first||ub(this),this.parent&&i!==this.timeline.totalDuration()&&Sa(this,this._dur*this.timeline._tDur/i,0,1),this}var n,a,s,o,u,h,l,f=this._targets,d=t?Ot(t):f,c=this._ptLookup,p=this._pt;if((!e||"all"===e)&&function _arraysMatch(t,e){for(var r=t.length,i=r===e.length;i&&r--&&t[r]===e[r];);return r<0}(f,d))return"all"===e&&(this._pt=0),ub(this);for(n=this._op=this._op||[],"all"!==e&&(r(e)&&(u={},ha(e,function(t){return u[t]=1}),e=u),e=function _addAliasesToVars(t,e){var r,i,n,a,s=t[0]?fa(t[0]).harness:0,o=s&&s.aliases;if(!o)return e;for(i in r=yt({},e),o)if(i in r)for(n=(a=o[i].split(",")).length;n--;)r[a[n]]=r[i];return r}(f,e)),l=f.length;l--;)if(~d.indexOf(f[l]))for(u in a=c[l],"all"===e?(n[l]=e,o=a,s={}):(s=n[l]=n[l]||{},o=e),o)(h=a&&a[u])&&("kill"in h.d&&!0!==h.d.kill(u)||za(this,h,"_pt"),delete a[u]),"all"!==s&&(s[u]=1);return this._initted&&!this._pt&&p&&ub(this),this},Tween.to=function to(t,e,r){return new Tween(t,e,r)},Tween.from=function from(t,e){return Wa(1,arguments)},Tween.delayedCall=function delayedCall(t,e,r,i){return new Tween(e,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:t,onComplete:e,onReverseComplete:e,onCompleteParams:r,onReverseCompleteParams:r,callbackScope:i})},Tween.fromTo=function fromTo(t,e,r){return Wa(2,arguments)},Tween.set=function set(t,e){return e.duration=0,e.repeatDelay||(e.repeat=0),new Tween(t,e)},Tween.killTweensOf=function killTweensOf(t,e,r){return I.killTweensOf(t,e,r)},Tween}(Nt);ra(Jt.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),ha("staggerTo,staggerFrom,staggerFromTo",function(r){Jt[r]=function(){var t=new Qt,e=kt.call(arguments,0);return e.splice("staggerFromTo"===r?5:4,0,0),t[r].apply(t,e)}});function pc(t,e,r){return t.setAttribute(e,r)}function xc(t,e,r,i){i.mSet(t,e,i.m.call(i.tween,r,i.mt),i)}var $t=function _setterPlain(t,e,r){return t[e]=r},te=function _setterFunc(t,e,r){return t[e](r)},re=function _setterFuncWithParam(t,e,r,i){return t[e](i.fp,r)},ie=function _getSetter(t,e){return s(t[e])?te:u(t[e])&&t.setAttribute?pc:$t},ne=function _renderPlain(t,e){return e.set(e.t,e.p,Math.round(1e6*(e.s+e.c*t))/1e6,e)},se=function _renderBoolean(t,e){return e.set(e.t,e.p,!!(e.s+e.c*t),e)},oe=function _renderComplexString(t,e){var r=e._pt,i="";if(!t&&e.b)i=e.b;else if(1===t&&e.e)i=e.e;else{for(;r;)i=r.p+(r.m?r.m(r.s+r.c*t):Math.round(1e4*(r.s+r.c*t))/1e4)+i,r=r._next;i+=e.c}e.set(e.t,e.p,i,e)},ue=function _renderPropTweens(t,e){for(var r=e._pt;r;)r.r(t,r.d),r=r._next},he=function _addPluginModifier(t,e,r,i){for(var n,a=this._pt;a;)n=a._next,a.p===i&&a.modifier(t,e,r),a=n},de=function _killPropTweensOf(t){for(var e,r,i=this._pt;i;)r=i._next,i.p===t&&!i.op||i.op===t?za(this,i,"_pt"):i.dep||(e=1),i=r;return!e},_e=function _sortPropTweensByPriority(t){for(var e,r,i,n,a=t._pt;a;){for(e=a._next,r=i;r&&r.pr>a.pr;)r=r._next;(a._prev=r?r._prev:n)?a._prev._next=a:i=a,(a._next=r)?r._prev=a:n=a,a=e}t._pt=i},ge=(PropTween.prototype.modifier=function modifier(t,e,r){this.mSet=this.mSet||this.set,this.set=xc,this.m=t,this.mt=r,this.tween=e},PropTween);function PropTween(t,e,r,i,n,a,s,o,u){this.t=e,this.s=i,this.c=n,this.p=r,this.r=a||ne,this.d=s||this,this.set=o||$t,this.pr=u||0,(this._next=t)&&(t._prev=this)}ha(vt+"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(t){return ft[t]=1}),ot.TweenMax=ot.TweenLite=Jt,ot.TimelineLite=ot.TimelineMax=Qt,I=new Qt({sortChildren:!1,defaults:Z,autoRemoveChildren:!0,id:"root",smoothChildTiming:!0}),X.stringFilter=Gb;function Fc(t){return(be[t]||Me).map(function(t){return t()})}function Gc(){var t=Date.now(),o=[];2<t-Oe&&(Fc("matchMediaInit"),Te.forEach(function(t){var e,r,i,n,a=t.queries,s=t.conditions;for(r in a)(e=h.matchMedia(a[r]).matches)&&(i=1),e!==s[r]&&(s[r]=e,n=1);n&&(t.revert(),i&&o.push(t))}),Fc("matchMediaRevert"),o.forEach(function(e){return e.onMatch(e,function(t){return e.add(null,t)})}),Oe=t,Fc("matchMedia"))}var ve,Te=[],be={},Me=[],Oe=0,Ae=0,Pe=((ve=Context.prototype).add=function add(t,i,n){function Iw(){var t,e=l,r=a.selector;return e&&e!==a&&e.data.push(a),n&&(a.selector=db(n)),l=a,t=i.apply(a,arguments),s(t)&&a._r.push(t),l=e,a.selector=r,a.isReverted=!1,t}s(t)&&(n=i,i=t,t=s);var a=this;return a.last=Iw,t===s?Iw(a,function(t){return a.add(null,t)}):t?a[t]=Iw:Iw},ve.ignore=function ignore(t){var e=l;l=null,t(this),l=e},ve.getTweens=function getTweens(){var e=[];return this.data.forEach(function(t){return t instanceof Context?e.push.apply(e,t.getTweens()):t instanceof Jt&&!(t.parent&&"nested"===t.parent.data)&&e.push(t)}),e},ve.clear=function clear(){this._r.length=this.data.length=0},ve.kill=function kill(i,t){var n=this;if(i?function(){for(var t,e=n.getTweens(),r=n.data.length;r--;)"isFlip"===(t=n.data[r]).data&&(t.revert(),t.getChildren(!0,!0,!1).forEach(function(t){return e.splice(e.indexOf(t),1)}));for(e.map(function(t){return{g:t._dur||t._delay||t._sat&&!t._sat.vars.immediateRender?t.globalTime(0):-1/0,t:t}}).sort(function(t,e){return e.g-t.g||-1/0}).forEach(function(t){return t.t.revert(i)}),r=n.data.length;r--;)(t=n.data[r])instanceof Qt?"nested"!==t.data&&(t.scrollTrigger&&t.scrollTrigger.revert(),t.kill()):t instanceof Jt||!t.revert||t.revert(i);n._r.forEach(function(t){return t(i,n)}),n.isReverted=!0}():this.data.forEach(function(t){return t.kill&&t.kill()}),this.clear(),t)for(var e=Te.length;e--;)Te[e].id===this.id&&Te.splice(e,1)},ve.revert=function revert(t){this.kill(t||{})},Context);function Context(t,e){this.selector=e&&db(e),this.data=[],this._r=[],this.isReverted=!1,this.id=Ae++,t&&this.add(t)}var Ce,Se=((Ce=MatchMedia.prototype).add=function add(t,e,r){v(t)||(t={matches:t});var i,n,a,s=new Pe(0,r||this.scope),o=s.conditions={};for(n in l&&!s.selector&&(s.selector=l.selector),this.contexts.push(s),e=s.add("onMatch",e),s.queries=t)"all"===n?a=1:(i=h.matchMedia(t[n]))&&(Te.indexOf(s)<0&&Te.push(s),(o[n]=i.matches)&&(a=1),i.addListener?i.addListener(Gc):i.addEventListener("change",Gc));return a&&e(s,function(t){return s.add(null,t)}),this},Ce.revert=function revert(t){this.kill(t||{})},Ce.kill=function kill(e){this.contexts.forEach(function(t){return t.kill(e,!0)})},MatchMedia);function MatchMedia(t){this.contexts=[],this.scope=t,l&&l.data.push(this)}var De={registerPlugin:function registerPlugin(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];e.forEach(function(t){return xb(t)})},timeline:function timeline(t){return new Qt(t)},getTweensOf:function getTweensOf(t,e){return I.getTweensOf(t,e)},getProperty:function getProperty(i,t,e,n){r(i)&&(i=Ot(i)[0]);var a=fa(i||{}).get,s=e?qa:pa;return"native"===e&&(e=""),i?t?s((pt[t]&&pt[t].get||a)(i,t,e,n)):function(t,e,r){return s((pt[t]&&pt[t].get||a)(i,t,e,r))}:i},quickSetter:function quickSetter(r,e,i){if(1<(r=Ot(r)).length){var n=r.map(function(t){return ze.quickSetter(t,e,i)}),a=n.length;return function(t){for(var e=a;e--;)n[e](t)}}r=r[0]||{};var s=pt[e],o=fa(r),u=o.harness&&(o.harness.aliases||{})[e]||e,h=s?function(t){var e=new s;d._pt=0,e.init(r,i?t+i:t,d,0,[r]),e.render(1,e),d._pt&&ue(1,d)}:o.set(r,u);return s?h:function(t){return h(r,u,i?t+i:t,o,1)}},quickTo:function quickTo(t,i,e){function ay(t,e,r){return n.resetTo(i,t,e,r)}var r,n=ze.to(t,ra(((r={})[i]="+=0.1",r.paused=!0,r.stagger=0,r),e||{}));return ay.tween=n,ay},isTweening:function isTweening(t){return 0<I.getTweensOf(t,!0).length},defaults:function defaults(t){return t&&t.ease&&(t.ease=Yt(t.ease,Z.ease)),ua(Z,t||{})},config:function config(t){return ua(X,t||{})},registerEffect:function registerEffect(t){var i=t.name,n=t.effect,e=t.plugins,a=t.defaults,r=t.extendTimeline;(e||"").split(",").forEach(function(t){return t&&!pt[t]&&!ot[t]&&R(i+" effect requires "+t+" plugin.")}),_t[i]=function(t,e,r){return n(Ot(t),ra(e||{},a),r)},r&&(Qt.prototype[i]=function(t,e,r){return this.add(_t[i](t,v(e)?e:(r=e)&&{},this),r)})},registerEase:function registerEase(t,e){Lt[t]=Yt(e)},parseEase:function parseEase(t,e){return arguments.length?Yt(t,e):Lt},getById:function getById(t){return I.getById(t)},exportRoot:function exportRoot(t,e){void 0===t&&(t={});var r,i,n=new Qt(t);for(n.smoothChildTiming=w(t.smoothChildTiming),I.remove(n),n._dp=0,n._time=n._tTime=I._time,r=I._first;r;)i=r._next,!e&&!r._dur&&r instanceof Jt&&r.vars.onComplete===r._targets[0]||La(n,r,r._start-r._delay),r=i;return La(I,n,0),n},context:function context(t,e){return t?new Pe(t,e):l},matchMedia:function matchMedia(t){return new Se(t)},matchMediaRefresh:function matchMediaRefresh(){return Te.forEach(function(t){var e,r,i=t.conditions;for(r in i)i[r]&&(i[r]=!1,e=1);e&&t.revert()})||Gc()},addEventListener:function addEventListener(t,e){var r=be[t]||(be[t]=[]);~r.indexOf(e)||r.push(e)},removeEventListener:function removeEventListener(t,e){var r=be[t],i=r&&r.indexOf(e);0<=i&&r.splice(i,1)},utils:{wrap:function wrap(e,t,r){var i=t-e;return $(e)?mb(e,wrap(0,e.length),t):Xa(r,function(t){return(i+(t-e)%i)%i+e})},wrapYoyo:function wrapYoyo(e,t,r){var i=t-e,n=2*i;return $(e)?mb(e,wrapYoyo(0,e.length-1),t):Xa(r,function(t){return e+(i<(t=(n+(t-e)%n)%n||0)?n-t:t)})},distribute:fb,random:ib,snap:hb,normalize:function normalize(t,e,r){return At(t,e,0,1,r)},getUnit:Za,clamp:function clamp(e,r,t){return Xa(t,function(t){return Mt(e,r,t)})},splitColor:Bb,toArray:Ot,selector:db,mapRange:At,pipe:function pipe(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return function(t){return e.reduce(function(t,e){return e(t)},t)}},unitize:function unitize(e,r){return function(t){return e(parseFloat(t))+(r||Za(t))}},interpolate:function interpolate(e,i,t,n){var a=isNaN(e+i)?0:function(t){return(1-t)*e+t*i};if(!a){var s,o,u,h,l,f=r(e),d={};if(!0===t&&(n=1)&&(t=null),f)e={p:e},i={p:i};else if($(e)&&!$(i)){for(u=[],h=e.length,l=h-2,o=1;o<h;o++)u.push(interpolate(e[o-1],e[o]));h--,a=function func(t){t*=h;var e=Math.min(l,~~t);return u[e](t-e)},t=i}else n||(e=yt($(e)?[]:{},e));if(!u){for(s in i)Vt.call(d,e,s,"get",i[s]);a=function func(t){return ue(t,d)||(f?e.p:e)}}}return Xa(t,a)},shuffle:eb},install:P,effects:_t,ticker:Rt,updateRoot:Qt.updateRoot,plugins:pt,globalTimeline:I,core:{PropTween:ge,globals:S,Tween:Jt,Timeline:Qt,Animation:Nt,getCache:fa,_removeLinkedListItem:za,reverting:function reverting(){return L},context:function context(t){return t&&l&&(l.data.push(t),t._ctx=l),l},suppressOverwrites:function suppressOverwrites(t){return F=t}}};ha("to,from,fromTo,delayedCall,set,killTweensOf",function(t){return De[t]=Jt[t]}),Rt.add(Qt.updateRoot),d=De.to({},{duration:0});function Kc(t,e){for(var r=t._pt;r&&r.p!==e&&r.op!==e&&r.fp!==e;)r=r._next;return r}function Mc(t,a){return{name:t,headless:1,rawVars:1,init:function init(t,n,e){e._onInit=function(t){var e,i;if(r(n)&&(e={},ha(n,function(t){return e[t]=1}),n=e),a){for(i in e={},n)e[i]=a(n[i]);n=e}!function _addModifiers(t,e){var r,i,n,a=t._targets;for(r in e)for(i=a.length;i--;)(n=(n=t._ptLookup[i][r])&&n.d)&&(n._pt&&(n=Kc(n,r)),n&&n.modifier&&n.modifier(e[r],t,a[i],r))}(t,n)}}}}var ze=De.registerPlugin({name:"attr",init:function init(t,e,r,i,n){var a,s,o;for(a in this.tween=r,e)o=t.getAttribute(a)||"",(s=this.add(t,"setAttribute",(o||0)+"",e[a],i,n,0,0,a)).op=a,s.b=o,this._props.push(a)},render:function render(t,e){for(var r=e._pt;r;)L?r.set(r.t,r.p,r.b,r):r.r(t,r.d),r=r._next}},{name:"endArray",headless:1,init:function init(t,e){for(var r=e.length;r--;)this.add(t,r,t[r]||0,e[r],0,0,0,0,0,1)}},Mc("roundProps",gb),Mc("modifiers"),Mc("snap",hb))||De;Jt.version=Qt.version=ze.version="3.13.0",o=1,x()&&Ft();function wd(t,e){return e.set(e.t,e.p,Math.round(1e4*(e.s+e.c*t))/1e4+e.u,e)}function xd(t,e){return e.set(e.t,e.p,1===t?e.e:Math.round(1e4*(e.s+e.c*t))/1e4+e.u,e)}function yd(t,e){return e.set(e.t,e.p,t?Math.round(1e4*(e.s+e.c*t))/1e4+e.u:e.b,e)}function zd(t,e){var r=e.s+e.c*t;e.set(e.t,e.p,~~(r+(r<0?-.5:.5))+e.u,e)}function Ad(t,e){return e.set(e.t,e.p,t?e.e:e.b,e)}function Bd(t,e){return e.set(e.t,e.p,1!==t?e.b:e.e,e)}function Cd(t,e,r){return t.style[e]=r}function Dd(t,e,r){return t.style.setProperty(e,r)}function Ed(t,e,r){return t._gsap[e]=r}function Fd(t,e,r){return t._gsap.scaleX=t._gsap.scaleY=r}function Gd(t,e,r,i,n){var a=t._gsap;a.scaleX=a.scaleY=r,a.renderTransform(n,a)}function Hd(t,e,r,i,n){var a=t._gsap;a[e]=r,a.renderTransform(n,a)}function Kd(t,e){var r=this,i=this.target,n=i.style,a=i._gsap;if(t in sr&&n){if(this.tfm=this.tfm||{},"transform"===t)return cr.transform.split(",").forEach(function(t){return Kd.call(r,t,e)});if(~(t=cr[t]||t).indexOf(",")?t.split(",").forEach(function(t){return r.tfm[t]=Tr(i,t)}):this.tfm[t]=a.x?a[t]:Tr(i,t),t===_r&&(this.tfm.zOrigin=a.zOrigin),0<=this.props.indexOf(pr))return;a.svg&&(this.svgo=i.getAttribute("data-svg-origin"),this.props.push(_r,e,"")),t=pr}(n||e)&&this.props.push(t,e,n[t])}function Ld(t){t.translate&&(t.removeProperty("translate"),t.removeProperty("scale"),t.removeProperty("rotate"))}function Md(){var t,e,r=this.props,i=this.target,n=i.style,a=i._gsap;for(t=0;t<r.length;t+=3)r[t+1]?2===r[t+1]?i[r[t]](r[t+2]):i[r[t]]=r[t+2]:r[t+2]?n[r[t]]=r[t+2]:n.removeProperty("--"===r[t].substr(0,2)?r[t]:r[t].replace(lr,"-$1").toLowerCase());if(this.tfm){for(e in this.tfm)a[e]=this.tfm[e];a.svg&&(a.renderTransform(),i.setAttribute("data-svg-origin",this.svgo||"")),(t=Ye())&&t.isStart||n[pr]||(Ld(n),a.zOrigin&&n[_r]&&(n[_r]+=" "+a.zOrigin+"px",a.zOrigin=0,a.renderTransform()),a.uncache=1)}}function Nd(t,e){var r={target:t,props:[],revert:Md,save:Kd};return t._gsap||ze.core.getCache(t),e&&t.style&&t.nodeType&&e.split(",").forEach(function(t){return r.save(t)}),r}function Pd(t,e){var r=Re.createElementNS?Re.createElementNS((e||"http://www.w3.org/1999/xhtml").replace(/^https/,"http"),t):Re.createElement(t);return r&&r.style?r:Re.createElement(t)}function Qd(t,e,r){var i=getComputedStyle(t);return i[e]||i.getPropertyValue(e.replace(lr,"-$1").toLowerCase())||i.getPropertyValue(e)||!r&&Qd(t,gr(e)||e,1)||""}function Td(){(function _windowExists(){return"undefined"!=typeof window})()&&window.document&&(Ee=window,Re=Ee.document,Fe=Re.documentElement,Ie=Pd("div")||{style:{}},Pd("div"),pr=gr(pr),_r=pr+"Origin",Ie.style.cssText="border-width:0;line-height:0;position:absolute;padding:0",Xe=!!gr("perspective"),Ye=ze.core.reverting,Le=1)}function Ud(t){var e,r=t.ownerSVGElement,i=Pd("svg",r&&r.getAttribute("xmlns")||"http://www.w3.org/2000/svg"),n=t.cloneNode(!0);n.style.display="block",i.appendChild(n),Fe.appendChild(i);try{e=n.getBBox()}catch(t){}return i.removeChild(n),Fe.removeChild(i),e}function Vd(t,e){for(var r=e.length;r--;)if(t.hasAttribute(e[r]))return t.getAttribute(e[r])}function Wd(e){var r,i;try{r=e.getBBox()}catch(t){r=Ud(e),i=1}return r&&(r.width||r.height)||i||(r=Ud(e)),!r||r.width||r.x||r.y?r:{x:+Vd(e,["x","cx","x1"])||0,y:+Vd(e,["y","cy","y1"])||0,width:0,height:0}}function Xd(t){return!(!t.getCTM||t.parentNode&&!t.ownerSVGElement||!Wd(t))}function Yd(t,e){if(e){var r,i=t.style;e in sr&&e!==_r&&(e=pr),i.removeProperty?("ms"!==(r=e.substr(0,2))&&"webkit"!==e.substr(0,6)||(e="-"+e),i.removeProperty("--"===r?e:e.replace(lr,"-$1").toLowerCase())):i.removeAttribute(e)}}function Zd(t,e,r,i,n,a){var s=new ge(t._pt,e,r,0,1,a?Bd:Ad);return(t._pt=s).b=i,s.e=n,t._props.push(r),s}function ae(t,e,r,i){var n,a,s,o,u=parseFloat(r)||0,h=(r+"").trim().substr((u+"").length)||"px",l=Ie.style,f=fr.test(e),d="svg"===t.tagName.toLowerCase(),c=(d?"client":"offset")+(f?"Width":"Height"),p="px"===i,_="%"===i;if(i===h||!u||vr[i]||vr[h])return u;if("px"===h||p||(u=ae(t,e,r,"px")),o=t.getCTM&&Xd(t),(_||"%"===h)&&(sr[e]||~e.indexOf("adius")))return n=o?t.getBBox()[f?"width":"height"]:t[c],ia(_?u/n*100:u/100*n);if(l[f?"width":"height"]=100+(p?h:i),a="rem"!==i&&~e.indexOf("adius")||"em"===i&&t.appendChild&&!d?t:t.parentNode,o&&(a=(t.ownerSVGElement||{}).parentNode),a&&a!==Re&&a.appendChild||(a=Re.body),(s=a._gsap)&&_&&s.width&&f&&s.time===Rt.time&&!s.uncache)return ia(u/s.width*100);if(!_||"height"!==e&&"width"!==e)!_&&"%"!==h||yr[Qd(a,"display")]||(l.position=Qd(t,"position")),a===t&&(l.position="static"),a.appendChild(Ie),n=Ie[c],a.removeChild(Ie),l.position="absolute";else{var m=t.style[e];t.style[e]=100+i,n=t[c],m?t.style[e]=m:Yd(t,e)}return f&&_&&((s=fa(a)).time=Rt.time,s.width=a[c]),ia(p?n*u/100:n&&u?100/n*u:0)}function ce(t,e,r,i){if(!r||"none"===r){var n=gr(e,t,1),a=n&&Qd(t,n,1);a&&a!==r?(e=n,r=a):"borderColor"===e&&(r=Qd(t,"borderTopColor"))}var s,o,u,h,l,f,d,c,p,_,m,g=new ge(this._pt,t.style,e,0,1,oe),v=0,y=0;if(g.b=r,g.e=i,r+="","var(--"===(i+="").substring(0,6)&&(i=Qd(t,i.substring(4,i.indexOf(")")))),"auto"===i&&(f=t.style[e],t.style[e]=i,i=Qd(t,e)||i,f?t.style[e]=f:Yd(t,e)),Gb(s=[r,i]),i=s[1],u=(r=s[0]).match(rt)||[],(i.match(rt)||[]).length){for(;o=rt.exec(i);)d=o[0],p=i.substring(v,o.index),l?l=(l+1)%5:"rgba("!==p.substr(-5)&&"hsla("!==p.substr(-5)||(l=1),d!==(f=u[y++]||"")&&(h=parseFloat(f)||0,m=f.substr((h+"").length),"="===d.charAt(1)&&(d=ka(h,d)+m),c=parseFloat(d),_=d.substr((c+"").length),v=rt.lastIndex-_.length,_||(_=_||X.units[e]||m,v===i.length&&(i+=_,g.e+=_)),m!==_&&(h=ae(t,e,f,_)||0),g._pt={_next:g._pt,p:p||1===y?p:",",s:h,c:c-h,m:l&&l<4||"zIndex"===e?Math.round:0});g.c=v<i.length?i.substring(v,i.length):""}else g.r="display"===e&&"none"===i?Bd:Ad;return nt.test(i)&&(g.e=0),this._pt=g}function ee(t){var e=t.split(" "),r=e[0],i=e[1]||"50%";return"top"!==r&&"bottom"!==r&&"left"!==i&&"right"!==i||(t=r,r=i,i=t),e[0]=br[r]||r,e[1]=br[i]||i,e.join(" ")}function fe(t,e){if(e.tween&&e.tween._time===e.tween._dur){var r,i,n,a=e.t,s=a.style,o=e.u,u=a._gsap;if("all"===o||!0===o)s.cssText="",i=1;else for(n=(o=o.split(",")).length;-1<--n;)r=o[n],sr[r]&&(i=1,r="transformOrigin"===r?_r:pr),Yd(a,r);i&&(Yd(a,pr),u&&(u.svg&&a.removeAttribute("transform"),s.scale=s.rotate=s.translate="none",kr(a,1),u.uncache=1,Ld(s)))}}function je(t){return"matrix(1, 0, 0, 1, 0, 0)"===t||"none"===t||!t}function ke(t){var e=Qd(t,pr);return je(e)?xr:e.substr(7).match(et).map(ia)}function le(t,e){var r,i,n,a,s=t._gsap||fa(t),o=t.style,u=ke(t);return s.svg&&t.getAttribute("transform")?"1,0,0,1,0,0"===(u=[(n=t.transform.baseVal.consolidate().matrix).a,n.b,n.c,n.d,n.e,n.f]).join(",")?xr:u:(u!==xr||t.offsetParent||t===Fe||s.svg||(n=o.display,o.display="block",(r=t.parentNode)&&(t.offsetParent||t.getBoundingClientRect().width)||(a=1,i=t.nextElementSibling,Fe.appendChild(t)),u=ke(t),n?o.display=n:Yd(t,"display"),a&&(i?r.insertBefore(t,i):r?r.appendChild(t):Fe.removeChild(t))),e&&6<u.length?[u[0],u[1],u[4],u[5],u[12],u[13]]:u)}function me(t,e,r,i,n,a){var s,o,u,h=t._gsap,l=n||le(t,!0),f=h.xOrigin||0,d=h.yOrigin||0,c=h.xOffset||0,p=h.yOffset||0,_=l[0],m=l[1],g=l[2],v=l[3],y=l[4],T=l[5],b=e.split(" "),w=parseFloat(b[0])||0,x=parseFloat(b[1])||0;r?l!==xr&&(o=_*v-m*g)&&(u=w*(-m/o)+x*(_/o)-(_*T-m*y)/o,w=w*(v/o)+x*(-g/o)+(g*T-v*y)/o,x=u):(w=(s=Wd(t)).x+(~b[0].indexOf("%")?w/100*s.width:w),x=s.y+(~(b[1]||b[0]).indexOf("%")?x/100*s.height:x)),i||!1!==i&&h.smooth?(y=w-f,T=x-d,h.xOffset=c+(y*_+T*g)-y,h.yOffset=p+(y*m+T*v)-T):h.xOffset=h.yOffset=0,h.xOrigin=w,h.yOrigin=x,h.smooth=!!i,h.origin=e,h.originIsAbsolute=!!r,t.style[_r]="0px 0px",a&&(Zd(a,h,"xOrigin",f,w),Zd(a,h,"yOrigin",d,x),Zd(a,h,"xOffset",c,h.xOffset),Zd(a,h,"yOffset",p,h.yOffset)),t.setAttribute("data-svg-origin",w+" "+x)}function pe(t,e,r){var i=Za(e);return ia(parseFloat(e)+parseFloat(ae(t,"x",r+"px",i)))+i}function we(t,e,i,n,a){var s,o,u=360,h=r(a),l=parseFloat(a)*(h&&~a.indexOf("rad")?or:1)-n,f=n+l+"deg";return h&&("short"===(s=a.split("_")[1])&&(l%=u)!==l%180&&(l+=l<0?u:-u),"cw"===s&&l<0?l=(l+36e9)%u-~~(l/u)*u:"ccw"===s&&0<l&&(l=(l-36e9)%u-~~(l/u)*u)),t._pt=o=new ge(t._pt,e,i,n,l,xd),o.e=f,o.u="deg",t._props.push(i),o}function xe(t,e){for(var r in e)t[r]=e[r];return t}function ye(t,e,r){var i,n,a,s,o,u,h,l=xe({},r._gsap),f=r.style;for(n in l.svg?(a=r.getAttribute("transform"),r.setAttribute("transform",""),f[pr]=e,i=kr(r,1),Yd(r,pr),r.setAttribute("transform",a)):(a=getComputedStyle(r)[pr],f[pr]=e,i=kr(r,1),f[pr]=a),sr)(a=l[n])!==(s=i[n])&&"perspective,force3D,transformOrigin,svgOrigin".indexOf(n)<0&&(o=Za(a)!==(h=Za(s))?ae(r,n,a,h):parseFloat(a),u=parseFloat(s),t._pt=new ge(t._pt,i,n,o,u-o,wd),t._pt.u=h||0,t._props.push(n));xe(i,l)}var Ee,Re,Fe,Le,Ie,Be,Ye,Xe,Ze=Lt.Power0,Ne=Lt.Power1,Qe=Lt.Power2,Ue=Lt.Power3,qe=Lt.Power4,Ve=Lt.Linear,We=Lt.Quad,Ge=Lt.Cubic,He=Lt.Quart,Ke=Lt.Quint,Je=Lt.Strong,$e=Lt.Elastic,tr=Lt.Back,er=Lt.SteppedEase,rr=Lt.Bounce,ir=Lt.Sine,nr=Lt.Expo,ar=Lt.Circ,sr={},or=180/Math.PI,ur=Math.PI/180,hr=Math.atan2,lr=/([A-Z])/g,fr=/(left|right|width|margin|padding|x)/i,dr=/[\s,\(]\S/,cr={autoAlpha:"opacity,visibility",scale:"scaleX,scaleY",alpha:"opacity"},pr="transform",_r=pr+"Origin",mr="O,Moz,ms,Ms,Webkit".split(","),gr=function _checkPropPrefix(t,e,r){var i=(e||Ie).style,n=5;if(t in i&&!r)return t;for(t=t.charAt(0).toUpperCase()+t.substr(1);n--&&!(mr[n]+t in i););return n<0?null:(3===n?"ms":0<=n?mr[n]:"")+t},vr={deg:1,rad:1,turn:1},yr={grid:1,flex:1},Tr=function _get(t,e,r,i){var n;return Le||Td(),e in cr&&"transform"!==e&&~(e=cr[e]).indexOf(",")&&(e=e.split(",")[0]),sr[e]&&"transform"!==e?(n=kr(t,i),n="transformOrigin"!==e?n[e]:n.svg?n.origin:Or(Qd(t,_r))+" "+n.zOrigin+"px"):(n=t.style[e])&&"auto"!==n&&!i&&!~(n+"").indexOf("calc(")||(n=wr[e]&&wr[e](t,e,r)||Qd(t,e)||ga(t,e)||("opacity"===e?1:0)),r&&!~(n+"").trim().indexOf(" ")?ae(t,e,n,r)+r:n},br={top:"0%",bottom:"100%",left:"0%",right:"100%",center:"50%"},wr={clearProps:function clearProps(t,e,r,i,n){if("isFromStart"!==n.data){var a=t._pt=new ge(t._pt,e,r,0,0,fe);return a.u=i,a.pr=-10,a.tween=n,t._props.push(r),1}}},xr=[1,0,0,1,0,0],Mr={},kr=function _parseTransform(t,e){var r=t._gsap||new Zt(t);if("x"in r&&!e&&!r.uncache)return r;var i,n,a,s,o,u,h,l,f,d,c,p,_,m,g,v,y,T,b,w,x,M,k,O,A,P,C,S,D,z,E,R,F=t.style,L=r.scaleX<0,I="deg",B=getComputedStyle(t),j=Qd(t,_r)||"0";return i=n=a=u=h=l=f=d=c=0,s=o=1,r.svg=!(!t.getCTM||!Xd(t)),B.translate&&("none"===B.translate&&"none"===B.scale&&"none"===B.rotate||(F[pr]=("none"!==B.translate?"translate3d("+(B.translate+" 0 0").split(" ").slice(0,3).join(", ")+") ":"")+("none"!==B.rotate?"rotate("+B.rotate+") ":"")+("none"!==B.scale?"scale("+B.scale.split(" ").join(",")+") ":"")+("none"!==B[pr]?B[pr]:"")),F.scale=F.rotate=F.translate="none"),m=le(t,r.svg),r.svg&&(O=r.uncache?(A=t.getBBox(),j=r.xOrigin-A.x+"px "+(r.yOrigin-A.y)+"px",""):!e&&t.getAttribute("data-svg-origin"),me(t,O||j,!!O||r.originIsAbsolute,!1!==r.smooth,m)),p=r.xOrigin||0,_=r.yOrigin||0,m!==xr&&(T=m[0],b=m[1],w=m[2],x=m[3],i=M=m[4],n=k=m[5],6===m.length?(s=Math.sqrt(T*T+b*b),o=Math.sqrt(x*x+w*w),u=T||b?hr(b,T)*or:0,(f=w||x?hr(w,x)*or+u:0)&&(o*=Math.abs(Math.cos(f*ur))),r.svg&&(i-=p-(p*T+_*w),n-=_-(p*b+_*x))):(R=m[6],z=m[7],C=m[8],S=m[9],D=m[10],E=m[11],i=m[12],n=m[13],a=m[14],h=(g=hr(R,D))*or,g&&(O=M*(v=Math.cos(-g))+C*(y=Math.sin(-g)),A=k*v+S*y,P=R*v+D*y,C=M*-y+C*v,S=k*-y+S*v,D=R*-y+D*v,E=z*-y+E*v,M=O,k=A,R=P),l=(g=hr(-w,D))*or,g&&(v=Math.cos(-g),E=x*(y=Math.sin(-g))+E*v,T=O=T*v-C*y,b=A=b*v-S*y,w=P=w*v-D*y),u=(g=hr(b,T))*or,g&&(O=T*(v=Math.cos(g))+b*(y=Math.sin(g)),A=M*v+k*y,b=b*v-T*y,k=k*v-M*y,T=O,M=A),h&&359.9<Math.abs(h)+Math.abs(u)&&(h=u=0,l=180-l),s=ia(Math.sqrt(T*T+b*b+w*w)),o=ia(Math.sqrt(k*k+R*R)),g=hr(M,k),f=2e-4<Math.abs(g)?g*or:0,c=E?1/(E<0?-E:E):0),r.svg&&(O=t.getAttribute("transform"),r.forceCSS=t.setAttribute("transform","")||!je(Qd(t,pr)),O&&t.setAttribute("transform",O))),90<Math.abs(f)&&Math.abs(f)<270&&(L?(s*=-1,f+=u<=0?180:-180,u+=u<=0?180:-180):(o*=-1,f+=f<=0?180:-180)),e=e||r.uncache,r.x=i-((r.xPercent=i&&(!e&&r.xPercent||(Math.round(t.offsetWidth/2)===Math.round(-i)?-50:0)))?t.offsetWidth*r.xPercent/100:0)+"px",r.y=n-((r.yPercent=n&&(!e&&r.yPercent||(Math.round(t.offsetHeight/2)===Math.round(-n)?-50:0)))?t.offsetHeight*r.yPercent/100:0)+"px",r.z=a+"px",r.scaleX=ia(s),r.scaleY=ia(o),r.rotation=ia(u)+I,r.rotationX=ia(h)+I,r.rotationY=ia(l)+I,r.skewX=f+I,r.skewY=d+I,r.transformPerspective=c+"px",(r.zOrigin=parseFloat(j.split(" ")[2])||!e&&r.zOrigin||0)&&(F[_r]=Or(j)),r.xOffset=r.yOffset=0,r.force3D=X.force3D,r.renderTransform=r.svg?zr:Xe?Dr:Ar,r.uncache=0,r},Or=function _firstTwoOnly(t){return(t=t.split(" "))[0]+" "+t[1]},Ar=function _renderNon3DTransforms(t,e){e.z="0px",e.rotationY=e.rotationX="0deg",e.force3D=0,Dr(t,e)},Pr="0deg",Cr="0px",Sr=") ",Dr=function _renderCSSTransforms(t,e){var r=e||this,i=r.xPercent,n=r.yPercent,a=r.x,s=r.y,o=r.z,u=r.rotation,h=r.rotationY,l=r.rotationX,f=r.skewX,d=r.skewY,c=r.scaleX,p=r.scaleY,_=r.transformPerspective,m=r.force3D,g=r.target,v=r.zOrigin,y="",T="auto"===m&&t&&1!==t||!0===m;if(v&&(l!==Pr||h!==Pr)){var b,w=parseFloat(h)*ur,x=Math.sin(w),M=Math.cos(w);w=parseFloat(l)*ur,b=Math.cos(w),a=pe(g,a,x*b*-v),s=pe(g,s,-Math.sin(w)*-v),o=pe(g,o,M*b*-v+v)}_!==Cr&&(y+="perspective("+_+Sr),(i||n)&&(y+="translate("+i+"%, "+n+"%) "),!T&&a===Cr&&s===Cr&&o===Cr||(y+=o!==Cr||T?"translate3d("+a+", "+s+", "+o+") ":"translate("+a+", "+s+Sr),u!==Pr&&(y+="rotate("+u+Sr),h!==Pr&&(y+="rotateY("+h+Sr),l!==Pr&&(y+="rotateX("+l+Sr),f===Pr&&d===Pr||(y+="skew("+f+", "+d+Sr),1===c&&1===p||(y+="scale("+c+", "+p+Sr),g.style[pr]=y||"translate(0, 0)"},zr=function _renderSVGTransforms(t,e){var r,i,n,a,s,o=e||this,u=o.xPercent,h=o.yPercent,l=o.x,f=o.y,d=o.rotation,c=o.skewX,p=o.skewY,_=o.scaleX,m=o.scaleY,g=o.target,v=o.xOrigin,y=o.yOrigin,T=o.xOffset,b=o.yOffset,w=o.forceCSS,x=parseFloat(l),M=parseFloat(f);d=parseFloat(d),c=parseFloat(c),(p=parseFloat(p))&&(c+=p=parseFloat(p),d+=p),d||c?(d*=ur,c*=ur,r=Math.cos(d)*_,i=Math.sin(d)*_,n=Math.sin(d-c)*-m,a=Math.cos(d-c)*m,c&&(p*=ur,s=Math.tan(c-p),n*=s=Math.sqrt(1+s*s),a*=s,p&&(s=Math.tan(p),r*=s=Math.sqrt(1+s*s),i*=s)),r=ia(r),i=ia(i),n=ia(n),a=ia(a)):(r=_,a=m,i=n=0),(x&&!~(l+"").indexOf("px")||M&&!~(f+"").indexOf("px"))&&(x=ae(g,"x",l,"px"),M=ae(g,"y",f,"px")),(v||y||T||b)&&(x=ia(x+v-(v*r+y*n)+T),M=ia(M+y-(v*i+y*a)+b)),(u||h)&&(s=g.getBBox(),x=ia(x+u/100*s.width),M=ia(M+h/100*s.height)),s="matrix("+r+","+i+","+n+","+a+","+x+","+M+")",g.setAttribute("transform",s),w&&(g.style[pr]=s)};ha("padding,margin,Width,Radius",function(e,r){var t="Right",i="Bottom",n="Left",o=(r<3?["Top",t,i,n]:["Top"+n,"Top"+t,i+t,i+n]).map(function(t){return r<2?e+t:"border"+t+e});wr[1<r?"border"+e:e]=function(e,t,r,i,n){var a,s;if(arguments.length<4)return a=o.map(function(t){return Tr(e,t,r)}),5===(s=a.join(" ")).split(a[0]).length?a[0]:s;a=(i+"").split(" "),s={},o.forEach(function(t,e){return s[t]=a[e]=a[e]||a[(e-1)/2|0]}),e.init(t,s,n)}});var Er,Rr,Fr,Lr={name:"css",register:Td,targetTest:function targetTest(t){return t.style&&t.nodeType},init:function init(t,e,i,n,a){var s,o,u,h,l,f,d,c,p,_,m,g,v,y,T,b,w=this._props,x=t.style,M=i.vars.startAt;for(d in Le||Td(),this.styles=this.styles||Nd(t),b=this.styles.props,this.tween=i,e)if("autoRound"!==d&&(o=e[d],!pt[d]||!bc(d,e,i,n,t,a)))if(l=typeof o,f=wr[d],"function"===l&&(l=typeof(o=o.call(i,n,t,a))),"string"===l&&~o.indexOf("random(")&&(o=pb(o)),f)f(this,t,d,o,i)&&(T=1);else if("--"===d.substr(0,2))s=(getComputedStyle(t).getPropertyValue(d)+"").trim(),o+="",zt.lastIndex=0,zt.test(s)||(c=Za(s),p=Za(o)),p?c!==p&&(s=ae(t,d,s,p)+p):c&&(o+=c),this.add(x,"setProperty",s,o,n,a,0,0,d),w.push(d),b.push(d,0,x[d]);else if("undefined"!==l){if(M&&d in M?(s="function"==typeof M[d]?M[d].call(i,n,t,a):M[d],r(s)&&~s.indexOf("random(")&&(s=pb(s)),Za(s+"")||"auto"===s||(s+=X.units[d]||Za(Tr(t,d))||""),"="===(s+"").charAt(1)&&(s=Tr(t,d))):s=Tr(t,d),h=parseFloat(s),(_="string"===l&&"="===o.charAt(1)&&o.substr(0,2))&&(o=o.substr(2)),u=parseFloat(o),d in cr&&("autoAlpha"===d&&(1===h&&"hidden"===Tr(t,"visibility")&&u&&(h=0),b.push("visibility",0,x.visibility),Zd(this,x,"visibility",h?"inherit":"hidden",u?"inherit":"hidden",!u)),"scale"!==d&&"transform"!==d&&~(d=cr[d]).indexOf(",")&&(d=d.split(",")[0])),m=d in sr)if(this.styles.save(d),"string"===l&&"var(--"===o.substring(0,6)&&(o=Qd(t,o.substring(4,o.indexOf(")"))),u=parseFloat(o)),g||((v=t._gsap).renderTransform&&!e.parseTransform||kr(t,e.parseTransform),y=!1!==e.smoothOrigin&&v.smooth,(g=this._pt=new ge(this._pt,x,pr,0,1,v.renderTransform,v,0,-1)).dep=1),"scale"===d)this._pt=new ge(this._pt,v,"scaleY",v.scaleY,(_?ka(v.scaleY,_+u):u)-v.scaleY||0,wd),this._pt.u=0,w.push("scaleY",d),d+="X";else{if("transformOrigin"===d){b.push(_r,0,x[_r]),o=ee(o),v.svg?me(t,o,0,y,0,this):((p=parseFloat(o.split(" ")[2])||0)!==v.zOrigin&&Zd(this,v,"zOrigin",v.zOrigin,p),Zd(this,x,d,Or(s),Or(o)));continue}if("svgOrigin"===d){me(t,o,1,y,0,this);continue}if(d in Mr){we(this,v,d,h,_?ka(h,_+o):o);continue}if("smoothOrigin"===d){Zd(this,v,"smooth",v.smooth,o);continue}if("force3D"===d){v[d]=o;continue}if("transform"===d){ye(this,o,t);continue}}else d in x||(d=gr(d)||d);if(m||(u||0===u)&&(h||0===h)&&!dr.test(o)&&d in x)u=u||0,(c=(s+"").substr((h+"").length))!==(p=Za(o)||(d in X.units?X.units[d]:c))&&(h=ae(t,d,s,p)),this._pt=new ge(this._pt,m?v:x,d,h,(_?ka(h,_+u):u)-h,m||"px"!==p&&"zIndex"!==d||!1===e.autoRound?wd:zd),this._pt.u=p||0,c!==p&&"%"!==p&&(this._pt.b=s,this._pt.r=yd);else if(d in x)ce.call(this,t,d,s,_?_+o:o);else if(d in t)this.add(t,d,s||t[d],_?_+o:o,n,a);else if("parseTransform"!==d){Q(d,o);continue}m||(d in x?b.push(d,0,x[d]):"function"==typeof t[d]?b.push(d,2,t[d]()):b.push(d,1,s||t[d])),w.push(d)}T&&_e(this)},render:function render(t,e){if(e.tween._time||!Ye())for(var r=e._pt;r;)r.r(t,r.d),r=r._next;else e.styles.revert()},get:Tr,aliases:cr,getSetter:function getSetter(t,e,r){var i=cr[e];return i&&i.indexOf(",")<0&&(e=i),e in sr&&e!==_r&&(t._gsap.x||Tr(t,"x"))?r&&Be===r?"scale"===e?Fd:Ed:(Be=r||{})&&("scale"===e?Gd:Hd):t.style&&!u(t.style[e])?Cd:~e.indexOf("-")?Dd:ie(t,e)},core:{_removeProperty:Yd,_getMatrix:le}};ze.utils.checkPrefix=gr,ze.core.getStyleSaver=Nd,Fr=ha((Er="x,y,z,scale,scaleX,scaleY,xPercent,yPercent")+","+(Rr="rotation,rotationX,rotationY,skewX,skewY")+",transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective",function(t){sr[t]=1}),ha(Rr,function(t){X.units[t]="deg",Mr[t]=1}),cr[Fr[13]]=Er+","+Rr,ha("0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY",function(t){var e=t.split(":");cr[e[1]]=Fr[e[0]]}),ha("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective",function(t){X.units[t]="px"}),ze.registerPlugin(Lr);var Ir=ze.registerPlugin(Lr)||ze,Br=Ir.core.Tween;e.Back=tr,e.Bounce=rr,e.CSSPlugin=Lr,e.Circ=ar,e.Cubic=Ge,e.Elastic=$e,e.Expo=nr,e.Linear=Ve,e.Power0=Ze,e.Power1=Ne,e.Power2=Qe,e.Power3=Ue,e.Power4=qe,e.Quad=We,e.Quart=He,e.Quint=Ke,e.Sine=ir,e.SteppedEase=er,e.Strong=Je,e.TimelineLite=Qt,e.TimelineMax=Qt,e.TweenLite=Jt,e.TweenMax=Br,e.default=Ir,e.gsap=Ir;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esModule",{value:!0})} else {delete e.default}});
```
## `js/vendor/ScrollTrigger.min.js`
```js
/*!
* ScrollTrigger 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,
[email protected]
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,function(e){"use strict";function _defineProperties(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function r(){return Se||"undefined"!=typeof window&&(Se=window.gsap)&&Se.registerPlugin&&Se}function z(e,t){return~Ye.indexOf(e)&&Ye[Ye.indexOf(e)+1][t]}function A(e){return!!~t.indexOf(e)}function B(e,t,r,n,i){return e.addEventListener(t,r,{passive:!1!==n,capture:!!i})}function C(e,t,r,n){return e.removeEventListener(t,r,!!n)}function F(){return Re&&Re.isPressed||ze.cache++}function G(r,n){function ed(e){if(e||0===e){i&&(Te.history.scrollRestoration="manual");var t=Re&&Re.isPressed;e=ed.v=Math.round(e)||(Re&&Re.iOS?1:0),r(e),ed.cacheID=ze.cache,t&&o("ss",e)}else(n||ze.cache!==ed.cacheID||o("ref"))&&(ed.cacheID=ze.cache,ed.v=r());return ed.v+ed.offset}return ed.offset=0,r&&ed}function J(e,t){return(t&&t._ctx&&t._ctx.selector||Se.utils.toArray)(e)[0]||("string"==typeof e&&!1!==Se.config().nullTargetWarn?console.warn("Element not found:",e):null)}function L(t,e){var r=e.s,n=e.sc;A(t)&&(t=Ce.scrollingElement||Me);var i=ze.indexOf(t),o=n===qe.sc?1:2;~i||(i=ze.push(t)-1),ze[i+o]||B(t,"scroll",F);var a=ze[i+o],s=a||(ze[i+o]=G(z(t,r),!0)||(A(t)?n:G(function(e){return arguments.length?t[r]=e:t[r]})));return s.target=t,a||(s.smooth="smooth"===Se.getProperty(t,"scrollBehavior")),s}function M(e,t,i){function Gd(e,t){var r=Le();t||n<r-s?(a=o,o=e,l=s,s=r):i?o+=e:o=a+(e-a)/(r-l)*(s-l)}var o=e,a=e,s=Le(),l=s,n=t||50,c=Math.max(500,3*n);return{update:Gd,reset:function reset(){a=o=i?0:o,l=s=0},getVelocity:function getVelocity(e){var t=l,r=a,n=Le();return!e&&0!==e||e===o||Gd(e),s===l||c<n-l?0:(o+(i?r:-r))/((i?n:s)-t)*1e3}}}function N(e,t){return t&&!e._gsapAllow&&e.preventDefault(),e.changedTouches?e.changedTouches[0]:e}function O(e){var t=Math.max.apply(Math,e),r=Math.min.apply(Math,e);return Math.abs(t)>=Math.abs(r)?t:r}function P(){(Ae=Se.core.globals().ScrollTrigger)&&Ae.core&&function _integrate(){var e=Ae.core,r=e.bridge||{},t=e._scrollers,n=e._proxies;t.push.apply(t,ze),n.push.apply(n,Ye),ze=t,Ye=n,o=function _bridge(e,t){return r[e](t)}}()}function Q(e){return Se=e||r(),!ke&&Se&&"undefined"!=typeof document&&document.body&&(Te=window,Me=(Ce=document).documentElement,Ee=Ce.body,t=[Te,Ce,Me,Ee],Se.utils.clamp,Be=Se.core.context||function(){},Oe="onpointerenter"in Ee?"pointer":"mouse",Pe=E.isTouch=Te.matchMedia&&Te.matchMedia("(hover: none), (pointer: coarse)").matches?1:"ontouchstart"in Te||0<navigator.maxTouchPoints||0<navigator.msMaxTouchPoints?2:0,De=E.eventTypes=("ontouchstart"in Me?"touchstart,touchmove,touchcancel,touchend":"onpointerdown"in Me?"pointerdown,pointermove,pointercancel,pointerup":"mousedown,mousemove,mouseup,mouseup").split(","),setTimeout(function(){return i=0},500),P(),ke=1),ke}var Se,ke,Te,Ce,Me,Ee,Pe,Oe,Ae,t,Re,De,Be,i=1,Ie=[],ze=[],Ye=[],Le=Date.now,o=function _bridge(e,t){return t},n="scrollLeft",a="scrollTop",He={s:n,p:"left",p2:"Left",os:"right",os2:"Right",d:"width",d2:"Width",a:"x",sc:G(function(e){return arguments.length?Te.scrollTo(e,qe.sc()):Te.pageXOffset||Ce[n]||Me[n]||Ee[n]||0})},qe={s:a,p:"top",p2:"Top",os:"bottom",os2:"Bottom",d:"height",d2:"Height",a:"y",op:He,sc:G(function(e){return arguments.length?Te.scrollTo(He.sc(),e):Te.pageYOffset||Ce[a]||Me[a]||Ee[a]||0})};He.op=qe,ze.cache=0;var E=(Observer.prototype.init=function init(e){ke||Q(Se)||console.warn("Please gsap.registerPlugin(Observer)"),Ae||P();var i=e.tolerance,a=e.dragMinimum,t=e.type,o=e.target,r=e.lineHeight,n=e.debounce,s=e.preventDefault,l=e.onStop,c=e.onStopDelay,u=e.ignore,f=e.wheelSpeed,d=e.event,p=e.onDragStart,g=e.onDragEnd,h=e.onDrag,v=e.onPress,b=e.onRelease,m=e.onRight,y=e.onLeft,x=e.onUp,_=e.onDown,w=e.onChangeX,S=e.onChangeY,k=e.onChange,T=e.onToggleX,E=e.onToggleY,R=e.onHover,D=e.onHoverEnd,I=e.onMove,z=e.ignoreCheck,Y=e.isNormalizer,H=e.onGestureStart,q=e.onGestureEnd,X=e.onWheel,U=e.onEnable,W=e.onDisable,G=e.onClick,V=e.scrollSpeed,K=e.capture,j=e.allowClicks,Z=e.lockAxis,$=e.onLockAxis;function gf(){return xe=Le()}function hf(e,t){return(se.event=e)&&u&&function _isWithin(e,t){for(var r=t.length;r--;)if(t[r]===e||t[r].contains(e))return!0;return!1}(e.target,u)||t&&he&&"touch"!==e.pointerType||z&&z(e,t)}function kf(){var e=se.deltaX=O(me),t=se.deltaY=O(ye),r=Math.abs(e)>=i,n=Math.abs(t)>=i;k&&(r||n)&&k(se,e,t,me,ye),r&&(m&&0<se.deltaX&&m(se),y&&se.deltaX<0&&y(se),w&&w(se),T&&se.deltaX<0!=le<0&&T(se),le=se.deltaX,me[0]=me[1]=me[2]=0),n&&(_&&0<se.deltaY&&_(se),x&&se.deltaY<0&&x(se),S&&S(se),E&&se.deltaY<0!=ce<0&&E(se),ce=se.deltaY,ye[0]=ye[1]=ye[2]=0),(ne||re)&&(I&&I(se),re&&(p&&1===re&&p(se),h&&h(se),re=0),ne=!1),oe&&!(oe=!1)&&$&&$(se),ie&&(X(se),ie=!1),ee=0}function lf(e,t,r){me[r]+=e,ye[r]+=t,se._vx.update(e),se._vy.update(t),n?ee=ee||requestAnimationFrame(kf):kf()}function mf(e,t){Z&&!ae&&(se.axis=ae=Math.abs(e)>Math.abs(t)?"x":"y",oe=!0),"y"!==ae&&(me[2]+=e,se._vx.update(e,!0)),"x"!==ae&&(ye[2]+=t,se._vy.update(t,!0)),n?ee=ee||requestAnimationFrame(kf):kf()}function nf(e){if(!hf(e,1)){var t=(e=N(e,s)).clientX,r=e.clientY,n=t-se.x,i=r-se.y,o=se.isDragging;se.x=t,se.y=r,(o||(n||i)&&(Math.abs(se.startX-t)>=a||Math.abs(se.startY-r)>=a))&&(re=o?2:1,o||(se.isDragging=!0),mf(n,i))}}function qf(e){return e.touches&&1<e.touches.length&&(se.isGesturing=!0)&&H(e,se.isDragging)}function rf(){return(se.isGesturing=!1)||q(se)}function sf(e){if(!hf(e)){var t=fe(),r=de();lf((t-pe)*V,(r-ge)*V,1),pe=t,ge=r,l&&te.restart(!0)}}function tf(e){if(!hf(e)){e=N(e,s),X&&(ie=!0);var t=(1===e.deltaMode?r:2===e.deltaMode?Te.innerHeight:1)*f;lf(e.deltaX*t,e.deltaY*t,0),l&&!Y&&te.restart(!0)}}function uf(e){if(!hf(e)){var t=e.clientX,r=e.clientY,n=t-se.x,i=r-se.y;se.x=t,se.y=r,ne=!0,l&&te.restart(!0),(n||i)&&mf(n,i)}}function vf(e){se.event=e,R(se)}function wf(e){se.event=e,D(se)}function xf(e){return hf(e)||N(e,s)&&G(se)}this.target=o=J(o)||Me,this.vars=e,u=u&&Se.utils.toArray(u),i=i||1e-9,a=a||0,f=f||1,V=V||1,t=t||"wheel,touch,pointer",n=!1!==n,r=r||parseFloat(Te.getComputedStyle(Ee).lineHeight)||22;var ee,te,re,ne,ie,oe,ae,se=this,le=0,ce=0,ue=e.passive||!s&&!1!==e.passive,fe=L(o,He),de=L(o,qe),pe=fe(),ge=de(),he=~t.indexOf("touch")&&!~t.indexOf("pointer")&&"pointerdown"===De[0],ve=A(o),be=o.ownerDocument||Ce,me=[0,0,0],ye=[0,0,0],xe=0,_e=se.onPress=function(e){hf(e,1)||e&&e.button||(se.axis=ae=null,te.pause(),se.isPressed=!0,e=N(e),le=ce=0,se.startX=se.x=e.clientX,se.startY=se.y=e.clientY,se._vx.reset(),se._vy.reset(),B(Y?o:be,De[1],nf,ue,!0),se.deltaX=se.deltaY=0,v&&v(se))},we=se.onRelease=function(t){if(!hf(t,1)){C(Y?o:be,De[1],nf,!0);var e=!isNaN(se.y-se.startY),r=se.isDragging,n=r&&(3<Math.abs(se.x-se.startX)||3<Math.abs(se.y-se.startY)),i=N(t);!n&&e&&(se._vx.reset(),se._vy.reset(),s&&j&&Se.delayedCall(.08,function(){if(300<Le()-xe&&!t.defaultPrevented)if(t.target.click)t.target.click();else if(be.createEvent){var e=be.createEvent("MouseEvents");e.initMouseEvent("click",!0,!0,Te,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),t.target.dispatchEvent(e)}})),se.isDragging=se.isGesturing=se.isPressed=!1,l&&r&&!Y&&te.restart(!0),re&&kf(),g&&r&&g(se),b&&b(se,n)}};te=se._dc=Se.delayedCall(c||.25,function onStopFunc(){se._vx.reset(),se._vy.reset(),te.pause(),l&&l(se)}).pause(),se.deltaX=se.deltaY=0,se._vx=M(0,50,!0),se._vy=M(0,50,!0),se.scrollX=fe,se.scrollY=de,se.isDragging=se.isGesturing=se.isPressed=!1,Be(this),se.enable=function(e){return se.isEnabled||(B(ve?be:o,"scroll",F),0<=t.indexOf("scroll")&&B(ve?be:o,"scroll",sf,ue,K),0<=t.indexOf("wheel")&&B(o,"wheel",tf,ue,K),(0<=t.indexOf("touch")&&Pe||0<=t.indexOf("pointer"))&&(B(o,De[0],_e,ue,K),B(be,De[2],we),B(be,De[3],we),j&&B(o,"click",gf,!0,!0),G&&B(o,"click",xf),H&&B(be,"gesturestart",qf),q&&B(be,"gestureend",rf),R&&B(o,Oe+"enter",vf),D&&B(o,Oe+"leave",wf),I&&B(o,Oe+"move",uf)),se.isEnabled=!0,se.isDragging=se.isGesturing=se.isPressed=ne=re=!1,se._vx.reset(),se._vy.reset(),pe=fe(),ge=de(),e&&e.type&&_e(e),U&&U(se)),se},se.disable=function(){se.isEnabled&&(Ie.filter(function(e){return e!==se&&A(e.target)}).length||C(ve?be:o,"scroll",F),se.isPressed&&(se._vx.reset(),se._vy.reset(),C(Y?o:be,De[1],nf,!0)),C(ve?be:o,"scroll",sf,K),C(o,"wheel",tf,K),C(o,De[0],_e,K),C(be,De[2],we),C(be,De[3],we),C(o,"click",gf,!0),C(o,"click",xf),C(be,"gesturestart",qf),C(be,"gestureend",rf),C(o,Oe+"enter",vf),C(o,Oe+"leave",wf),C(o,Oe+"move",uf),se.isEnabled=se.isPressed=se.isDragging=!1,W&&W(se))},se.kill=se.revert=function(){se.disable();var e=Ie.indexOf(se);0<=e&&Ie.splice(e,1),Re===se&&(Re=0)},Ie.push(se),Y&&A(o)&&(Re=se),se.enable(d)},function _createClass(e,t,r){return t&&_defineProperties(e.prototype,t),r&&_defineProperties(e,r),e}(Observer,[{key:"velocityX",get:function get(){return this._vx.getVelocity()}},{key:"velocityY",get:function get(){return this._vy.getVelocity()}}]),Observer);function Observer(e){this.init(e)}E.version="3.13.0",E.create=function(e){return new E(e)},E.register=Q,E.getAll=function(){return Ie.slice()},E.getById=function(t){return Ie.filter(function(e){return e.vars.id===t})[0]},r()&&Se.registerPlugin(E);function Da(e,t,r){var n=ct(e)&&("clamp("===e.substr(0,6)||-1<e.indexOf("max"));return(r["_"+t+"Clamp"]=n)?e.substr(6,e.length-7):e}function Ea(e,t){return!t||ct(e)&&"clamp("===e.substr(0,6)?e:"clamp("+e+")"}function Ga(){return Qe=1}function Ha(){return Qe=0}function Ia(e){return e}function Ja(e){return Math.round(1e5*e)/1e5||0}function Ka(){return"undefined"!=typeof window}function La(){return Ne||Ka()&&(Ne=window.gsap)&&Ne.registerPlugin&&Ne}function Ma(e){return!!~l.indexOf(e)}function Na(e){return("Height"===e?S:Xe["inner"+e])||Ue["client"+e]||We["client"+e]}function Oa(e){return z(e,"getBoundingClientRect")||(Ma(e)?function(){return Ot.width=Xe.innerWidth,Ot.height=S,Ot}:function(){return _t(e)})}function Ra(e,t){var r=t.s,n=t.d2,i=t.d,o=t.a;return Math.max(0,(r="scroll"+n)&&(o=z(e,r))?o()-Oa(e)()[i]:Ma(e)?(Ue[r]||We[r])-Na(n):e[r]-e["offset"+n])}function Sa(e,t){for(var r=0;r<g.length;r+=3)t&&!~t.indexOf(g[r+1])||e(g[r],g[r+1],g[r+2])}function Ua(e){return"function"==typeof e}function Va(e){return"number"==typeof e}function Wa(e){return"object"==typeof e}function Xa(e,t,r){return e&&e.progress(t?0:1)&&r&&e.pause()}function Ya(e,t){if(e.enabled){var r=e._ctx?e._ctx.add(function(){return t(e)}):t(e);r&&r.totalTime&&(e.callbackAnimation=r)}}function nb(e){return Xe.getComputedStyle(e)}function pb(e,t){for(var r in t)r in e||(e[r]=t[r]);return e}function rb(e,t){var r=t.d2;return e["offset"+r]||e["client"+r]||0}function sb(e){var t,r=[],n=e.labels,i=e.duration();for(t in n)r.push(n[t]/i);return r}function ub(i){var o=Ne.utils.snap(i),a=Array.isArray(i)&&i.slice(0).sort(function(e,t){return e-t});return a?function(e,t,r){var n;if(void 0===r&&(r=.001),!t)return o(e);if(0<t){for(e-=r,n=0;n<a.length;n++)if(a[n]>=e)return a[n];return a[n-1]}for(n=a.length,e+=r;n--;)if(a[n]<=e)return a[n];return a[0]}:function(e,t,r){void 0===r&&(r=.001);var n=o(e);return!t||Math.abs(n-e)<r||n-e<0==t<0?n:o(t<0?e-i:e+i)}}function wb(t,r,e,n){return e.split(",").forEach(function(e){return t(r,e,n)})}function xb(e,t,r,n,i){return e.addEventListener(t,r,{passive:!n,capture:!!i})}function yb(e,t,r,n){return e.removeEventListener(t,r,!!n)}function zb(e,t,r){(r=r&&r.wheelHandler)&&(e(t,"wheel",r),e(t,"touchmove",r))}function Db(e,t){if(ct(e)){var r=e.indexOf("="),n=~r?(e.charAt(r-1)+1)*parseFloat(e.substr(r+1)):0;~r&&(e.indexOf("%")>r&&(n*=t/100),e=e.substr(0,r-1)),e=n+(e in q?q[e]*t:~e.indexOf("%")?parseFloat(e)*t/100:parseFloat(e)||0)}return e}function Eb(e,t,r,n,i,o,a,s){var l=i.startColor,c=i.endColor,u=i.fontSize,f=i.indent,d=i.fontWeight,p=Fe.createElement("div"),g=Ma(r)||"fixed"===z(r,"pinType"),h=-1!==e.indexOf("scroller"),v=g?We:r,b=-1!==e.indexOf("start"),m=b?l:c,y="border-color:"+m+";font-size:"+u+";color:"+m+";font-weight:"+d+";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;";return y+="position:"+((h||s)&&g?"fixed;":"absolute;"),!h&&!s&&g||(y+=(n===qe?I:Y)+":"+(o+parseFloat(f))+"px;"),a&&(y+="box-sizing:border-box;text-align:left;width:"+a.offsetWidth+"px;"),p._isStart=b,p.setAttribute("class","gsap-marker-"+e+(t?" marker-"+t:"")),p.style.cssText=y,p.innerText=t||0===t?e+"-"+t:e,v.children[0]?v.insertBefore(p,v.children[0]):v.appendChild(p),p._offset=p["offset"+n.op.d2],X(p,0,n,b),p}function Jb(){return 34<at()-st&&(T=T||requestAnimationFrame(Z))}function Kb(){v&&v.isPressed&&!(v.startX>We.clientWidth)||(ze.cache++,v?T=T||requestAnimationFrame(Z):Z(),st||V("scrollStart"),st=at())}function Lb(){y=Xe.innerWidth,m=Xe.innerHeight}function Mb(e){ze.cache++,!0!==e&&(Ke||h||Fe.fullscreenElement||Fe.webkitFullscreenElement||b&&y===Xe.innerWidth&&!(Math.abs(Xe.innerHeight-m)>.25*Xe.innerHeight))||c.restart(!0)}function Pb(){return yb(ne,"scrollEnd",Pb)||Mt(!0)}function Sb(e){for(var t=0;t<K.length;t+=5)(!e||K[t+4]&&K[t+4].query===e)&&(K[t].style.cssText=K[t+1],K[t].getBBox&&K[t].setAttribute("transform",K[t+2]||""),K[t+3].uncache=1)}function Tb(e,t){var r;for(je=0;je<kt.length;je++)!(r=kt[je])||t&&r._ctx!==t||(e?r.kill(1):r.revert(!0,!0));k=!0,t&&Sb(t),t||V("revert")}function Ub(e,t){ze.cache++,!t&&rt||ze.forEach(function(e){return Ua(e)&&e.cacheID++&&(e.rec=0)}),ct(e)&&(Xe.history.scrollRestoration=_=e)}function Zb(){We.appendChild(w),S=!v&&w.offsetHeight||Xe.innerHeight,We.removeChild(w)}function $b(t){return Je(".gsap-marker-start, .gsap-marker-end, .gsap-marker-scroller-start, .gsap-marker-scroller-end").forEach(function(e){return e.style.display=t?"none":"block"})}function hc(e,t,r,n){if(!e._gsap.swappedIn){for(var i,o=$.length,a=t.style,s=e.style;o--;)a[i=$[o]]=r[i];a.position="absolute"===r.position?"absolute":"relative","inline"===r.display&&(a.display="inline-block"),s[Y]=s[I]="auto",a.flexBasis=r.flexBasis||"auto",a.overflow="visible",a.boxSizing="border-box",a[ft]=rb(e,He)+xt,a[dt]=rb(e,qe)+xt,a[bt]=s[mt]=s.top=s.left="0",Pt(n),s[ft]=s.maxWidth=r[ft],s[dt]=s.maxHeight=r[dt],s[bt]=r[bt],e.parentNode!==t&&(e.parentNode.insertBefore(t,e),t.appendChild(e)),e._gsap.swappedIn=!0}}function kc(e){for(var t=ee.length,r=e.style,n=[],i=0;i<t;i++)n.push(ee[i],r[ee[i]]);return n.t=e,n}function nc(e,t,r,n,i,o,a,s,l,c,u,f,d,p){Ua(e)&&(e=e(s)),ct(e)&&"max"===e.substr(0,3)&&(e=f+("="===e.charAt(4)?Db("0"+e.substr(3),r):0));var g,h,v,b=d?d.time():0;if(d&&d.seek(0),isNaN(e)||(e=+e),Va(e))d&&(e=Ne.utils.mapRange(d.scrollTrigger.start,d.scrollTrigger.end,0,f,e)),a&&X(a,r,n,!0);else{Ua(t)&&(t=t(s));var m,y,x,_,w=(e||"0").split(" ");v=J(t,s)||We,(m=_t(v)||{})&&(m.left||m.top)||"none"!==nb(v).display||(_=v.style.display,v.style.display="block",m=_t(v),_?v.style.display=_:v.style.removeProperty("display")),y=Db(w[0],m[n.d]),x=Db(w[1]||"0",r),e=m[n.p]-l[n.p]-c+y+i-x,a&&X(a,x,n,r-x<20||a._isStart&&20<x),r-=r-x}if(p&&(s[p]=e||-.001,e<0&&(e=0)),o){var S=e+r,k=o._isStart;g="scroll"+n.d2,X(o,S,n,k&&20<S||!k&&(u?Math.max(We[g],Ue[g]):o.parentNode[g])<=S+1),u&&(l=_t(a),u&&(o.style[n.op.p]=l[n.op.p]-n.op.m-o._offset+xt))}return d&&v&&(g=_t(v),d.seek(f),h=_t(v),d._caScrollDist=g[n.p]-h[n.p],e=e/d._caScrollDist*f),d&&d.seek(b),d?e:Math.round(e)}function pc(e,t,r,n){if(e.parentNode!==t){var i,o,a=e.style;if(t===We){for(i in e._stOrig=a.cssText,o=nb(e))+i||re.test(i)||!o[i]||"string"!=typeof a[i]||"0"===i||(a[i]=o[i]);a.top=r,a.left=n}else a.cssText=e._stOrig;Ne.core.getCache(e).uncache=1,t.appendChild(e)}}function qc(r,e,n){var i=e,o=i;return function(e){var t=Math.round(r());return t!==i&&t!==o&&3<Math.abs(t-i)&&3<Math.abs(t-o)&&(e=t,n&&n()),o=i,i=Math.round(e)}}function rc(e,t,r){var n={};n[t.p]="+="+r,Ne.set(e,n)}function sc(c,e){function Hk(e,t,r,n,i){var o=Hk.tween,a=t.onComplete,s={};r=r||u();var l=qc(u,r,function(){o.kill(),Hk.tween=0});return i=n&&i||0,n=n||e-r,o&&o.kill(),t[f]=e,t.inherit=!1,(t.modifiers=s)[f]=function(){return l(r+n*o.ratio+i*o.ratio*o.ratio)},t.onUpdate=function(){ze.cache++,Hk.tween&&Z()},t.onComplete=function(){Hk.tween=0,a&&a.call(o)},o=Hk.tween=Ne.to(c,t)}var u=L(c,e),f="_scroll"+e.p2;return(c[f]=u).wheelHandler=function(){return Hk.tween&&Hk.tween.kill()&&(Hk.tween=0)},xb(c,"wheel",u.wheelHandler),ne.isTouch&&xb(c,"touchmove",u.wheelHandler),Hk}var Ne,s,Xe,Fe,Ue,We,l,c,Je,Ge,Ve,u,Ke,Qe,f,je,d,p,g,Ze,$e,h,v,b,m,y,R,x,_,w,S,k,et,tt,T,rt,nt,it,ot=1,at=Date.now,D=at(),st=0,lt=0,ct=function _isString(e){return"string"==typeof e},ut=Math.abs,I="right",Y="bottom",ft="width",dt="height",pt="Right",gt="Left",ht="Top",vt="Bottom",bt="padding",mt="margin",yt="Width",H="Height",xt="px",_t=function _getBounds(e,t){var r=t&&"matrix(1, 0, 0, 1, 0, 0)"!==nb(e)[f]&&Ne.to(e,{x:0,y:0,xPercent:0,yPercent:0,rotation:0,rotationX:0,rotationY:0,scale:1,skewX:0,skewY:0}).progress(1),n=e.getBoundingClientRect();return r&&r.progress(0).kill(),n},wt={startColor:"green",endColor:"red",indent:0,fontSize:"16px",fontWeight:"normal"},St={toggleActions:"play",anticipatePin:0},q={top:0,left:0,center:.5,bottom:1,right:1},X=function _positionMarker(e,t,r,n){var i={display:"block"},o=r[n?"os2":"p2"],a=r[n?"p2":"os2"];e._isFlipped=n,i[r.a+"Percent"]=n?-100:0,i[r.a]=n?"1px":0,i["border"+o+yt]=1,i["border"+a+yt]=0,i[r.p]=t+"px",Ne.set(e,i)},kt=[],Tt={},U={},W=[],V=function _dispatch(e){return U[e]&&U[e].map(function(e){return e()})||W},K=[],Ct=0,Mt=function _refreshAll(e,t){if(Ue=Fe.documentElement,We=Fe.body,l=[Xe,Fe,Ue,We],!st||e||k){Zb(),rt=ne.isRefreshing=!0,ze.forEach(function(e){return Ua(e)&&++e.cacheID&&(e.rec=e())});var r=V("refreshInit");Ze&&ne.sort(),t||Tb(),ze.forEach(function(e){Ua(e)&&(e.smooth&&(e.target.style.scrollBehavior="auto"),e(0))}),kt.slice(0).forEach(function(e){return e.refresh()}),k=!1,kt.forEach(function(e){if(e._subPinOffset&&e.pin){var t=e.vars.horizontal?"offsetWidth":"offsetHeight",r=e.pin[t];e.revert(!0,1),e.adjustPinSpacing(e.pin[t]-r),e.refresh()}}),et=1,$b(!0),kt.forEach(function(e){var t=Ra(e.scroller,e._dir),r="max"===e.vars.end||e._endClamp&&e.end>t,n=e._startClamp&&e.start>=t;(r||n)&&e.setPositions(n?t-1:e.start,r?Math.max(n?t:e.start+1,t):e.end,!0)}),$b(!1),et=0,r.forEach(function(e){return e&&e.render&&e.render(-1)}),ze.forEach(function(e){Ua(e)&&(e.smooth&&requestAnimationFrame(function(){return e.target.style.scrollBehavior="smooth"}),e.rec&&e(e.rec))}),Ub(_,1),c.pause(),Ct++,Z(rt=2),kt.forEach(function(e){return Ua(e.vars.onRefresh)&&e.vars.onRefresh(e)}),rt=ne.isRefreshing=!1,V("refresh")}else xb(ne,"scrollEnd",Pb)},j=0,Et=1,Z=function _updateAll(e){if(2===e||!rt&&!k){ne.isUpdating=!0,it&&it.update(0);var t=kt.length,r=at(),n=50<=r-D,i=t&&kt[0].scroll();if(Et=i<j?-1:1,rt||(j=i),n&&(st&&!Qe&&200<r-st&&(st=0,V("scrollEnd")),Ve=D,D=r),Et<0){for(je=t;0<je--;)kt[je]&&kt[je].update(0,n);Et=1}else for(je=0;je<t;je++)kt[je]&&kt[je].update(0,n);ne.isUpdating=!1}T=0},$=["left","top",Y,I,mt+vt,mt+pt,mt+ht,mt+gt,"display","flexShrink","float","zIndex","gridColumnStart","gridColumnEnd","gridRowStart","gridRowEnd","gridArea","justifySelf","alignSelf","placeSelf","order"],ee=$.concat([ft,dt,"boxSizing","max"+yt,"max"+H,"position",mt,bt,bt+ht,bt+pt,bt+vt,bt+gt]),te=/([A-Z])/g,Pt=function _setState(e){if(e){var t,r,n=e.t.style,i=e.length,o=0;for((e.t._gsap||Ne.core.getCache(e.t)).uncache=1;o<i;o+=2)r=e[o+1],t=e[o],r?n[t]=r:n[t]&&n.removeProperty(t.replace(te,"-$1").toLowerCase())}},Ot={left:0,top:0},re=/(webkit|moz|length|cssText|inset)/i,ne=(ScrollTrigger.prototype.init=function init(P,O){if(this.progress=this.start=0,this.vars&&this.kill(!0,!0),lt){var A,n,p,R,D,B,I,Y,H,q,N,e,X,F,U,W,G,V,t,K,b,Q,j,m,Z,y,$,x,r,_,w,ee,i,g,te,re,ne,S,o,k=(P=pb(ct(P)||Va(P)||P.nodeType?{trigger:P}:P,St)).onUpdate,T=P.toggleClass,a=P.id,C=P.onToggle,ie=P.onRefresh,M=P.scrub,oe=P.trigger,ae=P.pin,se=P.pinSpacing,le=P.invalidateOnRefresh,E=P.anticipatePin,s=P.onScrubComplete,h=P.onSnapComplete,ce=P.once,ue=P.snap,fe=P.pinReparent,l=P.pinSpacer,de=P.containerAnimation,pe=P.fastScrollEnd,ge=P.preventOverlaps,he=P.horizontal||P.containerAnimation&&!1!==P.horizontal?He:qe,ve=!M&&0!==M,be=J(P.scroller||Xe),c=Ne.core.getCache(be),me=Ma(be),ye="fixed"===("pinType"in P?P.pinType:z(be,"pinType")||me&&"fixed"),xe=[P.onEnter,P.onLeave,P.onEnterBack,P.onLeaveBack],_e=ve&&P.toggleActions.split(" "),we="markers"in P?P.markers:St.markers,Se=me?0:parseFloat(nb(be)["border"+he.p2+yt])||0,ke=this,Te=P.onRefreshInit&&function(){return P.onRefreshInit(ke)},Ce=function _getSizeFunc(e,t,r){var n=r.d,i=r.d2,o=r.a;return(o=z(e,"getBoundingClientRect"))?function(){return o()[n]}:function(){return(t?Na(i):e["client"+i])||0}}(be,me,he),Me=function _getOffsetsFunc(e,t){return!t||~Ye.indexOf(e)?Oa(e):function(){return Ot}}(be,me),Ee=0,Pe=0,Oe=0,Ae=L(be,he);if(ke._startClamp=ke._endClamp=!1,ke._dir=he,E*=45,ke.scroller=be,ke.scroll=de?de.time.bind(de):Ae,R=Ae(),ke.vars=P,O=O||P.animation,"refreshPriority"in P&&(Ze=1,-9999===P.refreshPriority&&(it=ke)),c.tweenScroll=c.tweenScroll||{top:sc(be,qe),left:sc(be,He)},ke.tweenTo=A=c.tweenScroll[he.p],ke.scrubDuration=function(e){(i=Va(e)&&e)?ee?ee.duration(e):ee=Ne.to(O,{ease:"expo",totalProgress:"+=0",inherit:!1,duration:i,paused:!0,onComplete:function onComplete(){return s&&s(ke)}}):(ee&&ee.progress(1).kill(),ee=0)},O&&(O.vars.lazy=!1,O._initted&&!ke.isReverted||!1!==O.vars.immediateRender&&!1!==P.immediateRender&&O.duration()&&O.render(0,!0,!0),ke.animation=O.pause(),(O.scrollTrigger=ke).scrubDuration(M),_=0,a=a||O.vars.id),ue&&(Wa(ue)&&!ue.push||(ue={snapTo:ue}),"scrollBehavior"in We.style&&Ne.set(me?[We,Ue]:be,{scrollBehavior:"auto"}),ze.forEach(function(e){return Ua(e)&&e.target===(me?Fe.scrollingElement||Ue:be)&&(e.smooth=!1)}),p=Ua(ue.snapTo)?ue.snapTo:"labels"===ue.snapTo?function _getClosestLabel(t){return function(e){return Ne.utils.snap(sb(t),e)}}(O):"labelsDirectional"===ue.snapTo?function _getLabelAtDirection(r){return function(e,t){return ub(sb(r))(e,t.direction)}}(O):!1!==ue.directional?function(e,t){return ub(ue.snapTo)(e,at()-Pe<500?0:t.direction)}:Ne.utils.snap(ue.snapTo),g=ue.duration||{min:.1,max:2},g=Wa(g)?Ge(g.min,g.max):Ge(g,g),te=Ne.delayedCall(ue.delay||i/2||.1,function(){var e=Ae(),t=at()-Pe<500,r=A.tween;if(!(t||Math.abs(ke.getVelocity())<10)||r||Qe||Ee===e)ke.isActive&&Ee!==e&&te.restart(!0);else{var n,i,o=(e-B)/F,a=O&&!ve?O.totalProgress():o,s=t?0:(a-w)/(at()-Ve)*1e3||0,l=Ne.utils.clamp(-o,1-o,ut(s/2)*s/.185),c=o+(!1===ue.inertia?0:l),u=ue.onStart,f=ue.onInterrupt,d=ue.onComplete;if(n=p(c,ke),Va(n)||(n=c),i=Math.max(0,Math.round(B+n*F)),e<=I&&B<=e&&i!==e){if(r&&!r._initted&&r.data<=ut(i-e))return;!1===ue.inertia&&(l=n-o),A(i,{duration:g(ut(.185*Math.max(ut(c-a),ut(n-a))/s/.05||0)),ease:ue.ease||"power3",data:ut(i-e),onInterrupt:function onInterrupt(){return te.restart(!0)&&f&&f(ke)},onComplete:function onComplete(){ke.update(),Ee=Ae(),O&&!ve&&(ee?ee.resetTo("totalProgress",n,O._tTime/O._tDur):O.progress(n)),_=w=O&&!ve?O.totalProgress():ke.progress,h&&h(ke),d&&d(ke)}},e,l*F,i-e-l*F),u&&u(ke,A.tween)}}}).pause()),a&&(Tt[a]=ke),o=(o=(oe=ke.trigger=J(oe||!0!==ae&&ae))&&oe._gsap&&oe._gsap.stRevert)&&o(ke),ae=!0===ae?oe:J(ae),ct(T)&&(T={targets:oe,className:T}),ae&&(!1===se||se===mt||(se=!(!se&&ae.parentNode&&ae.parentNode.style&&"flex"===nb(ae.parentNode).display)&&bt),ke.pin=ae,(n=Ne.core.getCache(ae)).spacer?U=n.pinState:(l&&((l=J(l))&&!l.nodeType&&(l=l.current||l.nativeElement),n.spacerIsNative=!!l,l&&(n.spacerState=kc(l))),n.spacer=V=l||Fe.createElement("div"),V.classList.add("pin-spacer"),a&&V.classList.add("pin-spacer-"+a),n.pinState=U=kc(ae)),!1!==P.force3D&&Ne.set(ae,{force3D:!0}),ke.spacer=V=n.spacer,r=nb(ae),m=r[se+he.os2],K=Ne.getProperty(ae),b=Ne.quickSetter(ae,he.a,xt),hc(ae,V,r),G=kc(ae)),we){e=Wa(we)?pb(we,wt):wt,q=Eb("scroller-start",a,be,he,e,0),N=Eb("scroller-end",a,be,he,e,0,q),t=q["offset"+he.op.d2];var u=J(z(be,"content")||be);Y=this.markerStart=Eb("start",a,u,he,e,t,0,de),H=this.markerEnd=Eb("end",a,u,he,e,t,0,de),de&&(S=Ne.quickSetter([Y,H],he.a,xt)),ye||Ye.length&&!0===z(be,"fixedMarkers")||(function _makePositionable(e){var t=nb(e).position;e.style.position="absolute"===t||"fixed"===t?t:"relative"}(me?We:be),Ne.set([q,N],{force3D:!0}),y=Ne.quickSetter(q,he.a,xt),x=Ne.quickSetter(N,he.a,xt))}if(de){var f=de.vars.onUpdate,d=de.vars.onUpdateParams;de.eventCallback("onUpdate",function(){ke.update(0,0,1),f&&f.apply(de,d||[])})}if(ke.previous=function(){return kt[kt.indexOf(ke)-1]},ke.next=function(){return kt[kt.indexOf(ke)+1]},ke.revert=function(e,t){if(!t)return ke.kill(!0);var r=!1!==e||!ke.enabled,n=Ke;r!==ke.isReverted&&(r&&(re=Math.max(Ae(),ke.scroll.rec||0),Oe=ke.progress,ne=O&&O.progress()),Y&&[Y,H,q,N].forEach(function(e){return e.style.display=r?"none":"block"}),r&&(Ke=ke).update(r),!ae||fe&&ke.isActive||(r?function _swapPinOut(e,t,r){Pt(r);var n=e._gsap;if(n.spacerIsNative)Pt(n.spacerState);else if(e._gsap.swappedIn){var i=t.parentNode;i&&(i.insertBefore(e,t),i.removeChild(t))}e._gsap.swappedIn=!1}(ae,V,U):hc(ae,V,nb(ae),Z)),r||ke.update(r),Ke=n,ke.isReverted=r)},ke.refresh=function(e,t,r,n){if(!Ke&&ke.enabled||t)if(ae&&e&&st)xb(ScrollTrigger,"scrollEnd",Pb);else{!rt&&Te&&Te(ke),Ke=ke,A.tween&&!r&&(A.tween.kill(),A.tween=0),ee&&ee.pause(),le&&O&&(O.revert({kill:!1}).invalidate(),O.getChildren&&O.getChildren(!0,!0,!1).forEach(function(e){return e.vars.immediateRender&&e.render(0,!0,!0)})),ke.isReverted||ke.revert(!0,!0),ke._subPinOffset=!1;var i,o,a,s,l,c,u,f,d,p,g,h,v,b=Ce(),m=Me(),y=de?de.duration():Ra(be,he),x=F<=.01||!F,_=0,w=n||0,S=Wa(r)?r.end:P.end,k=P.endTrigger||oe,T=Wa(r)?r.start:P.start||(0!==P.start&&oe?ae?"0 0":"0 100%":0),C=ke.pinnedContainer=P.pinnedContainer&&J(P.pinnedContainer,ke),M=oe&&Math.max(0,kt.indexOf(ke))||0,E=M;for(we&&Wa(r)&&(h=Ne.getProperty(q,he.p),v=Ne.getProperty(N,he.p));0<E--;)(c=kt[E]).end||c.refresh(0,1)||(Ke=ke),!(u=c.pin)||u!==oe&&u!==ae&&u!==C||c.isReverted||((p=p||[]).unshift(c),c.revert(!0,!0)),c!==kt[E]&&(M--,E--);for(Ua(T)&&(T=T(ke)),T=Da(T,"start",ke),B=nc(T,oe,b,he,Ae(),Y,q,ke,m,Se,ye,y,de,ke._startClamp&&"_startClamp")||(ae?-.001:0),Ua(S)&&(S=S(ke)),ct(S)&&!S.indexOf("+=")&&(~S.indexOf(" ")?S=(ct(T)?T.split(" ")[0]:"")+S:(_=Db(S.substr(2),b),S=ct(T)?T:(de?Ne.utils.mapRange(0,de.duration(),de.scrollTrigger.start,de.scrollTrigger.end,B):B)+_,k=oe)),S=Da(S,"end",ke),I=Math.max(B,nc(S||(k?"100% 0":y),k,b,he,Ae()+_,H,N,ke,m,Se,ye,y,de,ke._endClamp&&"_endClamp"))||-.001,_=0,E=M;E--;)(u=(c=kt[E]).pin)&&c.start-c._pinPush<=B&&!de&&0<c.end&&(i=c.end-(ke._startClamp?Math.max(0,c.start):c.start),(u===oe&&c.start-c._pinPush<B||u===C)&&isNaN(T)&&(_+=i*(1-c.progress)),u===ae&&(w+=i));if(B+=_,I+=_,ke._startClamp&&(ke._startClamp+=_),ke._endClamp&&!rt&&(ke._endClamp=I||-.001,I=Math.min(I,Ra(be,he))),F=I-B||(B-=.01)&&.001,x&&(Oe=Ne.utils.clamp(0,1,Ne.utils.normalize(B,I,re))),ke._pinPush=w,Y&&_&&((i={})[he.a]="+="+_,C&&(i[he.p]="-="+Ae()),Ne.set([Y,H],i)),!ae||et&&ke.end>=Ra(be,he)){if(oe&&Ae()&&!de)for(o=oe.parentNode;o&&o!==We;)o._pinOffset&&(B-=o._pinOffset,I-=o._pinOffset),o=o.parentNode}else i=nb(ae),s=he===qe,a=Ae(),Q=parseFloat(K(he.a))+w,!y&&1<I&&(g={style:g=(me?Fe.scrollingElement||Ue:be).style,value:g["overflow"+he.a.toUpperCase()]},me&&"scroll"!==nb(We)["overflow"+he.a.toUpperCase()]&&(g.style["overflow"+he.a.toUpperCase()]="scroll")),hc(ae,V,i),G=kc(ae),o=_t(ae,!0),f=ye&&L(be,s?He:qe)(),se?((Z=[se+he.os2,F+w+xt]).t=V,(E=se===bt?rb(ae,he)+F+w:0)&&(Z.push(he.d,E+xt),"auto"!==V.style.flexBasis&&(V.style.flexBasis=E+xt)),Pt(Z),C&&kt.forEach(function(e){e.pin===C&&!1!==e.vars.pinSpacing&&(e._subPinOffset=!0)}),ye&&Ae(re)):(E=rb(ae,he))&&"auto"!==V.style.flexBasis&&(V.style.flexBasis=E+xt),ye&&((l={top:o.top+(s?a-B:f)+xt,left:o.left+(s?f:a-B)+xt,boxSizing:"border-box",position:"fixed"})[ft]=l.maxWidth=Math.ceil(o.width)+xt,l[dt]=l.maxHeight=Math.ceil(o.height)+xt,l[mt]=l[mt+ht]=l[mt+pt]=l[mt+vt]=l[mt+gt]="0",l[bt]=i[bt],l[bt+ht]=i[bt+ht],l[bt+pt]=i[bt+pt],l[bt+vt]=i[bt+vt],l[bt+gt]=i[bt+gt],W=function _copyState(e,t,r){for(var n,i=[],o=e.length,a=r?8:0;a<o;a+=2)n=e[a],i.push(n,n in t?t[n]:e[a+1]);return i.t=e.t,i}(U,l,fe),rt&&Ae(0)),O?(d=O._initted,$e(1),O.render(O.duration(),!0,!0),j=K(he.a)-Q+F+w,$=1<Math.abs(F-j),ye&&$&&W.splice(W.length-2,2),O.render(0,!0,!0),d||O.invalidate(!0),O.parent||O.totalTime(O.totalTime()),$e(0)):j=F,g&&(g.value?g.style["overflow"+he.a.toUpperCase()]=g.value:g.style.removeProperty("overflow-"+he.a));p&&p.forEach(function(e){return e.revert(!1,!0)}),ke.start=B,ke.end=I,R=D=rt?re:Ae(),de||rt||(R<re&&Ae(re),ke.scroll.rec=0),ke.revert(!1,!0),Pe=at(),te&&(Ee=-1,te.restart(!0)),Ke=0,O&&ve&&(O._initted||ne)&&O.progress()!==ne&&O.progress(ne||0,!0).render(O.time(),!0,!0),(x||Oe!==ke.progress||de||le||O&&!O._initted)&&(O&&!ve&&(O._initted||Oe||!1!==O.vars.immediateRender)&&O.totalProgress(de&&B<-.001&&!Oe?Ne.utils.normalize(B,I,0):Oe,!0),ke.progress=x||(R-B)/F===Oe?0:Oe),ae&&se&&(V._pinOffset=Math.round(ke.progress*j)),ee&&ee.invalidate(),isNaN(h)||(h-=Ne.getProperty(q,he.p),v-=Ne.getProperty(N,he.p),rc(q,he,h),rc(Y,he,h-(n||0)),rc(N,he,v),rc(H,he,v-(n||0))),x&&!rt&&ke.update(),!ie||rt||X||(X=!0,ie(ke),X=!1)}},ke.getVelocity=function(){return(Ae()-D)/(at()-Ve)*1e3||0},ke.endAnimation=function(){Xa(ke.callbackAnimation),O&&(ee?ee.progress(1):O.paused()?ve||Xa(O,ke.direction<0,1):Xa(O,O.reversed()))},ke.labelToScroll=function(e){return O&&O.labels&&(B||ke.refresh()||B)+O.labels[e]/O.duration()*F||0},ke.getTrailing=function(t){var e=kt.indexOf(ke),r=0<ke.direction?kt.slice(0,e).reverse():kt.slice(e+1);return(ct(t)?r.filter(function(e){return e.vars.preventOverlaps===t}):r).filter(function(e){return 0<ke.direction?e.end<=B:e.start>=I})},ke.update=function(e,t,r){if(!de||r||e){var n,i,o,a,s,l,c,u=!0===rt?re:ke.scroll(),f=e?0:(u-B)/F,d=f<0?0:1<f?1:f||0,p=ke.progress;if(t&&(D=R,R=de?Ae():u,ue&&(w=_,_=O&&!ve?O.totalProgress():d)),E&&ae&&!Ke&&!ot&&st&&(!d&&B<u+(u-D)/(at()-Ve)*E?d=1e-4:1===d&&I>u+(u-D)/(at()-Ve)*E&&(d=.9999)),d!==p&&ke.enabled){if(a=(s=(n=ke.isActive=!!d&&d<1)!=(!!p&&p<1))||!!d!=!!p,ke.direction=p<d?1:-1,ke.progress=d,a&&!Ke&&(i=d&&!p?0:1===d?1:1===p?2:3,ve&&(o=!s&&"none"!==_e[i+1]&&_e[i+1]||_e[i],c=O&&("complete"===o||"reset"===o||o in O))),ge&&(s||c)&&(c||M||!O)&&(Ua(ge)?ge(ke):ke.getTrailing(ge).forEach(function(e){return e.endAnimation()})),ve||(!ee||Ke||ot?O&&O.totalProgress(d,!(!Ke||!Pe&&!e)):(ee._dp._time-ee._start!==ee._time&&ee.render(ee._dp._time-ee._start),ee.resetTo?ee.resetTo("totalProgress",d,O._tTime/O._tDur):(ee.vars.totalProgress=d,ee.invalidate().restart()))),ae)if(e&&se&&(V.style[se+he.os2]=m),ye){if(a){if(l=!e&&p<d&&u<I+1&&u+1>=Ra(be,he),fe)if(e||!n&&!l)pc(ae,V);else{var g=_t(ae,!0),h=u-B;pc(ae,We,g.top+(he===qe?h:0)+xt,g.left+(he===qe?0:h)+xt)}Pt(n||l?W:G),$&&d<1&&n||b(Q+(1!==d||l?0:j))}}else b(Ja(Q+j*d));!ue||A.tween||Ke||ot||te.restart(!0),T&&(s||ce&&d&&(d<1||!tt))&&Je(T.targets).forEach(function(e){return e.classList[n||ce?"add":"remove"](T.className)}),!k||ve||e||k(ke),a&&!Ke?(ve&&(c&&("complete"===o?O.pause().totalProgress(1):"reset"===o?O.restart(!0).pause():"restart"===o?O.restart(!0):O[o]()),k&&k(ke)),!s&&tt||(C&&s&&Ya(ke,C),xe[i]&&Ya(ke,xe[i]),ce&&(1===d?ke.kill(!1,1):xe[i]=0),s||xe[i=1===d?1:3]&&Ya(ke,xe[i])),pe&&!n&&Math.abs(ke.getVelocity())>(Va(pe)?pe:2500)&&(Xa(ke.callbackAnimation),ee?ee.progress(1):Xa(O,"reverse"===o?1:!d,1))):ve&&k&&!Ke&&k(ke)}if(x){var v=de?u/de.duration()*(de._caScrollDist||0):u;y(v+(q._isFlipped?1:0)),x(v)}S&&S(-u/de.duration()*(de._caScrollDist||0))}},ke.enable=function(e,t){ke.enabled||(ke.enabled=!0,xb(be,"resize",Mb),me||xb(be,"scroll",Kb),Te&&xb(ScrollTrigger,"refreshInit",Te),!1!==e&&(ke.progress=Oe=0,R=D=Ee=Ae()),!1!==t&&ke.refresh())},ke.getTween=function(e){return e&&A?A.tween:ee},ke.setPositions=function(e,t,r,n){if(de){var i=de.scrollTrigger,o=de.duration(),a=i.end-i.start;e=i.start+a*e/o,t=i.start+a*t/o}ke.refresh(!1,!1,{start:Ea(e,r&&!!ke._startClamp),end:Ea(t,r&&!!ke._endClamp)},n),ke.update()},ke.adjustPinSpacing=function(e){if(Z&&e){var t=Z.indexOf(he.d)+1;Z[t]=parseFloat(Z[t])+e+xt,Z[1]=parseFloat(Z[1])+e+xt,Pt(Z)}},ke.disable=function(e,t){if(ke.enabled&&(!1!==e&&ke.revert(!0,!0),ke.enabled=ke.isActive=!1,t||ee&&ee.pause(),re=0,n&&(n.uncache=1),Te&&yb(ScrollTrigger,"refreshInit",Te),te&&(te.pause(),A.tween&&A.tween.kill()&&(A.tween=0)),!me)){for(var r=kt.length;r--;)if(kt[r].scroller===be&&kt[r]!==ke)return;yb(be,"resize",Mb),me||yb(be,"scroll",Kb)}},ke.kill=function(e,t){ke.disable(e,t),ee&&!t&&ee.kill(),a&&delete Tt[a];var r=kt.indexOf(ke);0<=r&&kt.splice(r,1),r===je&&0<Et&&je--,r=0,kt.forEach(function(e){return e.scroller===ke.scroller&&(r=1)}),r||rt||(ke.scroll.rec=0),O&&(O.scrollTrigger=null,e&&O.revert({kill:!1}),t||O.kill()),Y&&[Y,H,q,N].forEach(function(e){return e.parentNode&&e.parentNode.removeChild(e)}),it===ke&&(it=0),ae&&(n&&(n.uncache=1),r=0,kt.forEach(function(e){return e.pin===ae&&r++}),r||(n.spacer=0)),P.onKill&&P.onKill(ke)},kt.push(ke),ke.enable(!1,!1),o&&o(ke),O&&O.add&&!F){var v=ke.update;ke.update=function(){ke.update=v,ze.cache++,B||I||ke.refresh()},Ne.delayedCall(.01,ke.update),F=.01,B=I=0}else ke.refresh();ae&&function _queueRefreshAll(){if(nt!==Ct){var e=nt=Ct;requestAnimationFrame(function(){return e===Ct&&Mt(!0)})}}()}else this.update=this.refresh=this.kill=Ia},ScrollTrigger.register=function register(e){return s||(Ne=e||La(),Ka()&&window.document&&ScrollTrigger.enable(),s=lt),s},ScrollTrigger.defaults=function defaults(e){if(e)for(var t in e)St[t]=e[t];return St},ScrollTrigger.disable=function disable(t,r){lt=0,kt.forEach(function(e){return e[r?"kill":"disable"](t)}),yb(Xe,"wheel",Kb),yb(Fe,"scroll",Kb),clearInterval(u),yb(Fe,"touchcancel",Ia),yb(We,"touchstart",Ia),wb(yb,Fe,"pointerdown,touchstart,mousedown",Ga),wb(yb,Fe,"pointerup,touchend,mouseup",Ha),c.kill(),Sa(yb);for(var e=0;e<ze.length;e+=3)zb(yb,ze[e],ze[e+1]),zb(yb,ze[e],ze[e+2])},ScrollTrigger.enable=function enable(){if(Xe=window,Fe=document,Ue=Fe.documentElement,We=Fe.body,Ne&&(Je=Ne.utils.toArray,Ge=Ne.utils.clamp,x=Ne.core.context||Ia,$e=Ne.core.suppressOverwrites||Ia,_=Xe.history.scrollRestoration||"auto",j=Xe.pageYOffset||0,Ne.core.globals("ScrollTrigger",ScrollTrigger),We)){lt=1,(w=document.createElement("div")).style.height="100vh",w.style.position="absolute",Zb(),function _rafBugFix(){return lt&&requestAnimationFrame(_rafBugFix)}(),E.register(Ne),ScrollTrigger.isTouch=E.isTouch,R=E.isTouch&&/(iPad|iPhone|iPod|Mac)/g.test(navigator.userAgent),b=1===E.isTouch,xb(Xe,"wheel",Kb),l=[Xe,Fe,Ue,We],Ne.matchMedia?(ScrollTrigger.matchMedia=function(e){var t,r=Ne.matchMedia();for(t in e)r.add(t,e[t]);return r},Ne.addEventListener("matchMediaInit",function(){return Tb()}),Ne.addEventListener("matchMediaRevert",function(){return Sb()}),Ne.addEventListener("matchMedia",function(){Mt(0,1),V("matchMedia")}),Ne.matchMedia().add("(orientation: portrait)",function(){return Lb(),Lb})):console.warn("Requires GSAP 3.11.0 or later"),Lb(),xb(Fe,"scroll",Kb);var e,t,r=We.hasAttribute("style"),n=We.style,i=n.borderTopStyle,o=Ne.core.Animation.prototype;for(o.revert||Object.defineProperty(o,"revert",{value:function value(){return this.time(-.01,!0)}}),n.borderTopStyle="solid",e=_t(We),qe.m=Math.round(e.top+qe.sc())||0,He.m=Math.round(e.left+He.sc())||0,i?n.borderTopStyle=i:n.removeProperty("border-top-style"),r||(We.setAttribute("style",""),We.removeAttribute("style")),u=setInterval(Jb,250),Ne.delayedCall(.5,function(){return ot=0}),xb(Fe,"touchcancel",Ia),xb(We,"touchstart",Ia),wb(xb,Fe,"pointerdown,touchstart,mousedown",Ga),wb(xb,Fe,"pointerup,touchend,mouseup",Ha),f=Ne.utils.checkPrefix("transform"),ee.push(f),s=at(),c=Ne.delayedCall(.2,Mt).pause(),g=[Fe,"visibilitychange",function(){var e=Xe.innerWidth,t=Xe.innerHeight;Fe.hidden?(d=e,p=t):d===e&&p===t||Mb()},Fe,"DOMContentLoaded",Mt,Xe,"load",Mt,Xe,"resize",Mb],Sa(xb),kt.forEach(function(e){return e.enable(0,1)}),t=0;t<ze.length;t+=3)zb(yb,ze[t],ze[t+1]),zb(yb,ze[t],ze[t+2])}},ScrollTrigger.config=function config(e){"limitCallbacks"in e&&(tt=!!e.limitCallbacks);var t=e.syncInterval;t&&clearInterval(u)||(u=t)&&setInterval(Jb,t),"ignoreMobileResize"in e&&(b=1===ScrollTrigger.isTouch&&e.ignoreMobileResize),"autoRefreshEvents"in e&&(Sa(yb)||Sa(xb,e.autoRefreshEvents||"none"),h=-1===(e.autoRefreshEvents+"").indexOf("resize"))},ScrollTrigger.scrollerProxy=function scrollerProxy(e,t){var r=J(e),n=ze.indexOf(r),i=Ma(r);~n&&ze.splice(n,i?6:2),t&&(i?Ye.unshift(Xe,t,We,t,Ue,t):Ye.unshift(r,t))},ScrollTrigger.clearMatchMedia=function clearMatchMedia(t){kt.forEach(function(e){return e._ctx&&e._ctx.query===t&&e._ctx.kill(!0,!0)})},ScrollTrigger.isInViewport=function isInViewport(e,t,r){var n=(ct(e)?J(e):e).getBoundingClientRect(),i=n[r?ft:dt]*t||0;return r?0<n.right-i&&n.left+i<Xe.innerWidth:0<n.bottom-i&&n.top+i<Xe.innerHeight},ScrollTrigger.positionInViewport=function positionInViewport(e,t,r){ct(e)&&(e=J(e));var n=e.getBoundingClientRect(),i=n[r?ft:dt],o=null==t?i/2:t in q?q[t]*i:~t.indexOf("%")?parseFloat(t)*i/100:parseFloat(t)||0;return r?(n.left+o)/Xe.innerWidth:(n.top+o)/Xe.innerHeight},ScrollTrigger.killAll=function killAll(e){if(kt.slice(0).forEach(function(e){return"ScrollSmoother"!==e.vars.id&&e.kill()}),!0!==e){var t=U.killAll||[];U={},t.forEach(function(e){return e()})}},ScrollTrigger);function ScrollTrigger(e,t){s||ScrollTrigger.register(Ne)||console.warn("Please gsap.registerPlugin(ScrollTrigger)"),x(this),this.init(e,t)}ne.version="3.13.0",ne.saveStyles=function(e){return e?Je(e).forEach(function(e){if(e&&e.style){var t=K.indexOf(e);0<=t&&K.splice(t,5),K.push(e,e.style.cssText,e.getBBox&&e.getAttribute("transform"),Ne.core.getCache(e),x())}}):K},ne.revert=function(e,t){return Tb(!e,t)},ne.create=function(e,t){return new ne(e,t)},ne.refresh=function(e){return e?Mb(!0):(s||ne.register())&&Mt(!0)},ne.update=function(e){return++ze.cache&&Z(!0===e?2:0)},ne.clearScrollMemory=Ub,ne.maxScroll=function(e,t){return Ra(e,t?He:qe)},ne.getScrollFunc=function(e,t){return L(J(e),t?He:qe)},ne.getById=function(e){return Tt[e]},ne.getAll=function(){return kt.filter(function(e){return"ScrollSmoother"!==e.vars.id})},ne.isScrolling=function(){return!!st},ne.snapDirectional=ub,ne.addEventListener=function(e,t){var r=U[e]||(U[e]=[]);~r.indexOf(t)||r.push(t)},ne.removeEventListener=function(e,t){var r=U[e],n=r&&r.indexOf(t);0<=n&&r.splice(n,1)},ne.batch=function(e,t){function Jp(e,t){var r=[],n=[],i=Ne.delayedCall(o,function(){t(r,n),r=[],n=[]}).pause();return function(e){r.length||i.restart(!0),r.push(e.trigger),n.push(e),a<=r.length&&i.progress(1)}}var r,n=[],i={},o=t.interval||.016,a=t.batchMax||1e9;for(r in t)i[r]="on"===r.substr(0,2)&&Ua(t[r])&&"onRefreshInit"!==r?Jp(0,t[r]):t[r];return Ua(a)&&(a=a(),xb(ne,"refresh",function(){return a=t.batchMax()})),Je(e).forEach(function(e){var t={};for(r in i)t[r]=i[r];t.trigger=e,n.push(ne.create(t))}),n};function uc(e,t,r,n){return n<t?e(n):t<0&&e(0),n<r?(n-t)/(r-t):r<0?t/(t-r):1}function vc(e,t){!0===t?e.style.removeProperty("touch-action"):e.style.touchAction=!0===t?"auto":t?"pan-"+t+(E.isTouch?" pinch-zoom":""):"none",e===Ue&&vc(We,t)}function xc(e){var t,r=e.event,n=e.target,i=e.axis,o=(r.changedTouches?r.changedTouches[0]:r).target,a=o._gsap||Ne.core.getCache(o),s=at();if(!a._isScrollT||2e3<s-a._isScrollT){for(;o&&o!==We&&(o.scrollHeight<=o.clientHeight&&o.scrollWidth<=o.clientWidth||!oe[(t=nb(o)).overflowY]&&!oe[t.overflowX]);)o=o.parentNode;a._isScroll=o&&o!==n&&!Ma(o)&&(oe[(t=nb(o)).overflowY]||oe[t.overflowX]),a._isScrollT=s}!a._isScroll&&"x"!==i||(r.stopPropagation(),r._gsapAllow=!0)}function yc(e,t,r,n){return E.create({target:e,capture:!0,debounce:!1,lockAxis:!0,type:t,onWheel:n=n&&xc,onPress:n,onDrag:n,onScroll:n,onEnable:function onEnable(){return r&&xb(Fe,E.eventTypes[0],se,!1,!0)},onDisable:function onDisable(){return yb(Fe,E.eventTypes[0],se,!0)}})}function Cc(e){function Gq(){return i=!1}function Jq(){o=Ra(p,qe),T=Ge(R?1:0,o),f&&(k=Ge(0,Ra(p,He))),l=Ct}function Kq(){v._gsap.y=Ja(parseFloat(v._gsap.y)+b.offset)+"px",v.style.transform="matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, "+parseFloat(v._gsap.y)+", 0, 1)",b.offset=b.cacheID=0}function Qq(){Jq(),a.isActive()&&a.vars.scrollY>o&&(b()>o?a.progress(1)&&b(o):a.resetTo("scrollY",o))}Wa(e)||(e={}),e.preventDefault=e.isNormalizer=e.allowClicks=!0,e.type||(e.type="wheel,touch"),e.debounce=!!e.debounce,e.id=e.id||"normalizer";var n,o,l,i,a,c,u,s,f=e.normalizeScrollX,t=e.momentum,r=e.allowNestedScroll,d=e.onRelease,p=J(e.target)||Ue,g=Ne.core.globals().ScrollSmoother,h=g&&g.get(),v=R&&(e.content&&J(e.content)||h&&!1!==e.content&&!h.smooth()&&h.content()),b=L(p,qe),m=L(p,He),y=1,x=(E.isTouch&&Xe.visualViewport?Xe.visualViewport.scale*Xe.visualViewport.width:Xe.outerWidth)/Xe.innerWidth,_=0,w=Ua(t)?function(){return t(n)}:function(){return t||2.8},S=yc(p,e.type,!0,r),k=Ia,T=Ia;return v&&Ne.set(v,{y:"+=0"}),e.ignoreCheck=function(e){return R&&"touchmove"===e.type&&function ignoreDrag(){if(i){requestAnimationFrame(Gq);var e=Ja(n.deltaY/2),t=T(b.v-e);if(v&&t!==b.v+b.offset){b.offset=t-b.v;var r=Ja((parseFloat(v&&v._gsap.y)||0)-b.offset);v.style.transform="matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, "+r+", 0, 1)",v._gsap.y=r+"px",b.cacheID=ze.cache,Z()}return!0}b.offset&&Kq(),i=!0}()||1.05<y&&"touchstart"!==e.type||n.isGesturing||e.touches&&1<e.touches.length},e.onPress=function(){i=!1;var e=y;y=Ja((Xe.visualViewport&&Xe.visualViewport.scale||1)/x),a.pause(),e!==y&&vc(p,1.01<y||!f&&"x"),c=m(),u=b(),Jq(),l=Ct},e.onRelease=e.onGestureStart=function(e,t){if(b.offset&&Kq(),t){ze.cache++;var r,n,i=w();f&&(n=(r=m())+.05*i*-e.velocityX/.227,i*=uc(m,r,n,Ra(p,He)),a.vars.scrollX=k(n)),n=(r=b())+.05*i*-e.velocityY/.227,i*=uc(b,r,n,Ra(p,qe)),a.vars.scrollY=T(n),a.invalidate().duration(i).play(.01),(R&&a.vars.scrollY>=o||o-1<=r)&&Ne.to({},{onUpdate:Qq,duration:i})}else s.restart(!0);d&&d(e)},e.onWheel=function(){a._ts&&a.pause(),1e3<at()-_&&(l=0,_=at())},e.onChange=function(e,t,r,n,i){if(Ct!==l&&Jq(),t&&f&&m(k(n[2]===t?c+(e.startX-e.x):m()+t-n[1])),r){b.offset&&Kq();var o=i[2]===r,a=o?u+e.startY-e.y:b()+r-i[1],s=T(a);o&&a!==s&&(u+=s-a),b(s)}(r||t)&&Z()},e.onEnable=function(){vc(p,!f&&"x"),ne.addEventListener("refresh",Qq),xb(Xe,"resize",Qq),b.smooth&&(b.target.style.scrollBehavior="auto",b.smooth=m.smooth=!1),S.enable()},e.onDisable=function(){vc(p,!0),yb(Xe,"resize",Qq),ne.removeEventListener("refresh",Qq),S.kill()},e.lockAxis=!1!==e.lockAxis,((n=new E(e)).iOS=R)&&!b()&&b(1),R&&Ne.ticker.add(Ia),s=n._dc,a=Ne.to(n,{ease:"power4",paused:!0,inherit:!1,scrollX:f?"+=0.1":"+=0",scrollY:"+=0.1",modifiers:{scrollY:qc(b,b(),function(){return a.pause()})},onUpdate:Z,onComplete:s.vars.onComplete}),n}var ie,oe={auto:1,scroll:1},ae=/(input|label|select|textarea)/i,se=function _captureInputs(e){var t=ae.test(e.target.tagName);(t||ie)&&(e._gsapAllow=!0,ie=t)};ne.sort=function(e){if(Ua(e))return kt.sort(e);var t=Xe.pageYOffset||0;return ne.getAll().forEach(function(e){return e._sortY=e.trigger?t+e.trigger.getBoundingClientRect().top:e.start+Xe.innerHeight}),kt.sort(e||function(e,t){return-1e6*(e.vars.refreshPriority||0)+(e.vars.containerAnimation?1e6:e._sortY)-((t.vars.containerAnimation?1e6:t._sortY)+-1e6*(t.vars.refreshPriority||0))})},ne.observe=function(e){return new E(e)},ne.normalizeScroll=function(e){if(void 0===e)return v;if(!0===e&&v)return v.enable();if(!1===e)return v&&v.kill(),void(v=e);var t=e instanceof E?e:Cc(e);return v&&v.target===t.target&&v.kill(),Ma(t.target)&&(v=t),t},ne.core={_getVelocityProp:M,_inputObserver:yc,_scrollers:ze,_proxies:Ye,bridge:{ss:function ss(){st||V("scrollStart"),st=at()},ref:function ref(){return Ke}}},La()&&Ne.registerPlugin(ne),e.ScrollTrigger=ne,e.default=ne;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esModule",{value:!0})} else {delete e.default}});
```
## `js/vendor/CustomEase.min.js`
```js
/*!
* CustomEase 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,
[email protected]
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,function(e){"use strict";function m(e){return Math.round(1e5*e)/1e5||0}var b=/[achlmqstvz]|(-?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/gi,w=/[\+\-]?\d*\.?\d+e[\+\-]?\d+/gi,Y=Math.PI/180,k=Math.sin,B=Math.cos,F=Math.abs,J=Math.sqrt;function arcToSegment(e,t,n,s,a,r,i,o,h){if(e!==o||t!==h){n=F(n),s=F(s);var u=a%360*Y,c=B(u),f=k(u),l=Math.PI,g=2*l,x=(e-o)/2,d=(t-h)/2,m=c*x+f*d,p=-f*x+c*d,y=m*m,M=p*p,v=y/(n*n)+M/(s*s);1<v&&(n=J(v)*n,s=J(v)*s);var C=n*n,E=s*s,b=(C*E-C*M-E*y)/(C*M+E*y);b<0&&(b=0);var w=(r===i?-1:1)*J(b),P=n*p/s*w,S=-s*m/n*w,N=c*P-f*S+(e+o)/2,D=f*P+c*S+(t+h)/2,T=(m-P)/n,V=(p-S)/s,_=(-m-P)/n,q=(-p-S)/s,A=T*T+V*V,R=(V<0?-1:1)*Math.acos(T/J(A)),G=(T*q-V*_<0?-1:1)*Math.acos((T*_+V*q)/J(A*(_*_+q*q)));isNaN(G)&&(G=l),!i&&0<G?G-=g:i&&G<0&&(G+=g),R%=g,G%=g;var L,O=Math.ceil(F(G)/(g/4)),j=[],z=G/O,I=4/3*k(z/2)/(1+B(z/2)),H=c*n,Q=f*n,Z=f*-s,U=c*s;for(L=0;L<O;L++)m=B(a=R+L*z),p=k(a),T=B(a+=z),V=k(a),j.push(m-I*p,p+I*m,T+I*V,V-I*T,T,V);for(L=0;L<j.length;L+=2)m=j[L],p=j[L+1],j[L]=m*H+p*Z+N,j[L+1]=m*Q+p*U+D;return j[L-2]=o,j[L-1]=h,j}}function stringToRawPath(e){function db(e,t,n,s){c=(n-e)/3,f=(s-t)/3,o.push(e+c,t+f,n-c,s-f,n,s)}var t,n,s,a,r,i,o,h,u,c,f,l,g,x,d,m=(e+"").replace(w,function(e){var t=+e;return t<1e-4&&-1e-4<t?0:t}).match(b)||[],p=[],y=0,M=0,v=m.length,C=0,E="ERROR: malformed path: "+e;if(!e||!isNaN(m[0])||isNaN(m[1]))return console.log(E),p;for(t=0;t<v;t++)if(g=r,isNaN(m[t])?i=(r=m[t].toUpperCase())!==m[t]:t--,s=+m[t+1],a=+m[t+2],i&&(s+=y,a+=M),t||(h=s,u=a),"M"===r)o&&(o.length<8?--p.length:C+=o.length),y=h=s,M=u=a,o=[s,a],p.push(o),t+=2,r="L";else if("C"===r)i||(y=M=0),(o=o||[0,0]).push(s,a,y+1*m[t+3],M+1*m[t+4],y+=1*m[t+5],M+=1*m[t+6]),t+=6;else if("S"===r)c=y,f=M,"C"!==g&&"S"!==g||(c+=y-o[o.length-4],f+=M-o[o.length-3]),i||(y=M=0),o.push(c,f,s,a,y+=1*m[t+3],M+=1*m[t+4]),t+=4;else if("Q"===r)c=y+2/3*(s-y),f=M+2/3*(a-M),i||(y=M=0),y+=1*m[t+3],M+=1*m[t+4],o.push(c,f,y+2/3*(s-y),M+2/3*(a-M),y,M),t+=4;else if("T"===r)c=y-o[o.length-4],f=M-o[o.length-3],o.push(y+c,M+f,s+2/3*(y+1.5*c-s),a+2/3*(M+1.5*f-a),y=s,M=a),t+=2;else if("H"===r)db(y,M,y=s,M),t+=1;else if("V"===r)db(y,M,y,M=s+(i?M-y:0)),t+=1;else if("L"===r||"Z"===r)"Z"===r&&(s=h,a=u,o.closed=!0),("L"===r||.5<F(y-s)||.5<F(M-a))&&(db(y,M,s,a),"L"===r&&(t+=2)),y=s,M=a;else if("A"===r){if(x=m[t+4],d=m[t+5],c=m[t+6],f=m[t+7],n=7,1<x.length&&(x.length<3?(f=c,c=d,n--):(f=d,c=x.substr(2),n-=2),d=x.charAt(1),x=x.charAt(0)),l=arcToSegment(y,M,+m[t+1],+m[t+2],+m[t+3],+x,+d,(i?y:0)+1*c,(i?M:0)+1*f),t+=n,l)for(n=0;n<l.length;n++)o.push(l[n]);y=o[o.length-2],M=o[o.length-1]}else console.log(E);return(t=o.length)<6?(p.pop(),t=0):o[0]===o[t-2]&&o[1]===o[t-1]&&(o.closed=!0),p.totalPoints=C+t,p}function p(){return M||"undefined"!=typeof window&&(M=window.gsap)&&M.registerPlugin&&M}function q(){(M=p())?(M.registerEase("_CE",n.create),a=1):console.warn("Please gsap.registerPlugin(CustomEase)")}function s(e){return~~(1e3*e+(e<0?-.5:.5))/1e3}function x(e,t,n,s,a,r,i,o,h,u,c){var f,l=(e+n)/2,g=(t+s)/2,d=(n+a)/2,m=(s+r)/2,p=(a+i)/2,y=(r+o)/2,M=(l+d)/2,v=(g+m)/2,C=(d+p)/2,E=(m+y)/2,b=(M+C)/2,w=(v+E)/2,P=i-e,S=o-t,N=Math.abs((n-i)*S-(s-o)*P),D=Math.abs((a-i)*S-(r-o)*P);return u||(u=[{x:e,y:t},{x:i,y:o}],c=1),u.splice(c||u.length-1,0,{x:b,y:w}),h*(P*P+S*S)<(N+D)*(N+D)&&(f=u.length,x(e,t,l,g,M,v,b,w,h,u,c),x(b,w,C,E,p,y,i,o,h,u,c+1+(u.length-f))),u}var M,a,t,y=/[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/gi,v=/[cLlsSaAhHvVtTqQ]/g,n=((t=CustomEase.prototype).setData=function setData(e,t){t=t||{};var n,s,a,r,i,o,h,u,c,f=(e=e||"0,0,1,1").match(y),l=1,g=[],d=[],m=t.precision||1,p=m<=1;if(this.data=e,(v.test(e)||~e.indexOf("M")&&e.indexOf("C")<0)&&(f=stringToRawPath(e)[0]),4===(n=f.length))f.unshift(0,0),f.push(1,1),n=8;else if((n-2)%6)throw"Invalid CustomEase";for(0==+f[0]&&1==+f[n-2]||function _normalize(e,t,n){n||0===n||(n=Math.max(+e[e.length-1],+e[1]));var s,a=-1*e[0],r=-n,i=e.length,o=1/(+e[i-2]+a),h=-t||(Math.abs(e[i-1]-e[1])<.01*(e[i-2]-e[0])?function _findMinimum(e){var t,n=e.length,s=1e20;for(t=1;t<n;t+=6)+e[t]<s&&(s=+e[t]);return s}(e)+r:+e[i-1]+r);for(h=h?1/h:-o,s=0;s<i;s+=2)e[s]=(+e[s]+a)*o,e[s+1]=(+e[s+1]+r)*h}(f,t.height,t.originY),this.segment=f,r=2;r<n;r+=6)s={x:+f[r-2],y:+f[r-1]},a={x:+f[r+4],y:+f[r+5]},g.push(s,a),x(s.x,s.y,+f[r],+f[r+1],+f[r+2],+f[r+3],a.x,a.y,1/(2e5*m),g,g.length-1);for(n=g.length,r=0;r<n;r++)h=g[r],u=g[r-1]||h,(h.x>u.x||u.y!==h.y&&u.x===h.x||h===u)&&h.x<=1?(u.cx=h.x-u.x,u.cy=h.y-u.y,u.n=h,u.nx=h.x,p&&1<r&&2<Math.abs(u.cy/u.cx-g[r-2].cy/g[r-2].cx)&&(p=0),u.cx<l&&(u.cx?l=u.cx:(u.cx=.001,r===n-1&&(u.x-=.001,l=Math.min(l,.001),p=0)))):(g.splice(r--,1),n--);if(i=1/(n=1/l+1|0),h=g[o=0],p){for(r=0;r<n;r++)c=r*i,h.nx<c&&(h=g[++o]),s=h.y+(c-h.x)/h.cx*h.cy,d[r]={x:c,cx:i,y:s,cy:0,nx:9},r&&(d[r-1].cy=s-d[r-1].y);o=g[g.length-1],d[n-1].cy=o.y-s,d[n-1].cx=o.x-d[d.length-1].x}else{for(r=0;r<n;r++)h.nx<r*i&&(h=g[++o]),d[r]=h;o<g.length-1&&(d[r-1]=g[g.length-2])}return this.ease=function(e){var t=d[e*n|0]||d[n-1];return t.nx<e&&(t=t.n),t.y+(e-t.x)/t.cx*t.cy},(this.ease.custom=this).id&&M&&M.registerEase(this.id,this.ease),this},t.getSVGData=function getSVGData(e){return CustomEase.getSVGData(this,e)},CustomEase.create=function create(e,t,n){return new CustomEase(e,t,n).ease},CustomEase.register=function register(e){M=e,q()},CustomEase.get=function get(e){return M.parseEase(e)},CustomEase.getSVGData=function getSVGData(e,t){var n,a,r,i,o,h,u,c,f,l,g=(t=t||{}).width||100,x=t.height||100,d=t.x||0,p=(t.y||0)+x,y=M.utils.toArray(t.path)[0];if(t.invert&&(x=-x,p=0),"string"==typeof e&&(e=M.parseEase(e)),e.custom&&(e=e.custom),e instanceof CustomEase)n=function rawPathToString(e){!function _isNumber(e){return"number"==typeof e}(e[0])||(e=[e]);var t,n,s,a,r="",i=e.length;for(n=0;n<i;n++){for(a=e[n],r+="M"+m(a[0])+","+m(a[1])+" C",t=a.length,s=2;s<t;s++)r+=m(a[s++])+","+m(a[s++])+" "+m(a[s++])+","+m(a[s++])+" "+m(a[s++])+","+m(a[s])+" ";a.closed&&(r+="z")}return r}(function transformRawPath(e,t,n,s,a,r,i){for(var o,h,u,c,f,l=e.length;-1<--l;)for(h=(o=e[l]).length,u=0;u<h;u+=2)c=o[u],f=o[u+1],o[u]=c*t+f*s+r,o[u+1]=c*n+f*a+i;return e._dirty=1,e}([e.segment],g,0,0,-x,d,p));else{for(n=[d,p],i=1/(u=Math.max(5,200*(t.precision||1))),c=5/(u+=2),f=s(d+i*g),a=((l=s(p+e(i)*-x))-p)/(f-d),r=2;r<u;r++)o=s(d+r*i*g),h=s(p+e(r*i)*-x),(Math.abs((h-l)/(o-f)-a)>c||r===u-1)&&(n.push(f,l),a=(h-l)/(o-f)),f=o,l=h;n="M"+n.join(",")}return y&&y.setAttribute("d",n),n},CustomEase);function CustomEase(e,t,n){a||q(),this.id=e,this.setData(t,n)}n.version="3.13.0",n.headless=!0,p()&&M.registerPlugin(n),e.CustomEase=n,e.default=n;if (typeof(window)==="undefined"||window!==e){Object.defineProperty(e,"__esModule",{value:!0})} else {delete e.default}});
```
## `js/vendor/lenis.min.js`
```js
function t(t,e,i){return Math.max(t,Math.min(e,i))}var e=class{isRunning=!1;value=0;from=0;to=0;currentTime=0;lerp;duration;easing;onUpdate;advance(e){if(!this.isRunning)return;let i=!1;if(this.duration&&this.easing){this.currentTime+=e;const s=t(0,this.currentTime/this.duration,1);i=s>=1;const o=i?1:this.easing(s);this.value=this.from+(this.to-this.from)*o}else this.lerp?(this.value=function(t,e,i,s){return function(t,e,i){return(1-i)*t+i*e}(t,e,1-Math.exp(-i*s))}(this.value,this.to,60*this.lerp,e),Math.round(this.value)===this.to&&(this.value=this.to,i=!0)):(this.value=this.to,i=!0);i&&this.stop(),this.onUpdate?.(this.value,i)}stop(){this.isRunning=!1}fromTo(t,e,{lerp:i,duration:s,easing:o,onStart:n,onUpdate:r}){this.from=this.value=t,this.to=e,this.lerp=i,this.duration=s,this.easing=o,this.currentTime=0,this.isRunning=!0,n?.(),this.onUpdate=r}};var i=class{constructor(t,e,{autoResize:i=!0,debounce:s=250}={}){this.wrapper=t,this.content=e,i&&(this.debouncedResize=function(t,e){let i;return function(...s){let o=this;clearTimeout(i),i=setTimeout((()=>{i=void 0,t.apply(o,s)}),e)}}(this.resize,s),this.wrapper instanceof Window?window.addEventListener("resize",this.debouncedResize,!1):(this.wrapperResizeObserver=new ResizeObserver(this.debouncedResize),this.wrapperResizeObserver.observe(this.wrapper)),this.contentResizeObserver=new ResizeObserver(this.debouncedResize),this.contentResizeObserver.observe(this.content)),this.resize()}width=0;height=0;scrollHeight=0;scrollWidth=0;debouncedResize;wrapperResizeObserver;contentResizeObserver;destroy(){this.wrapperResizeObserver?.disconnect(),this.contentResizeObserver?.disconnect(),this.wrapper===window&&this.debouncedResize&&window.removeEventListener("resize",this.debouncedResize,!1)}resize=()=>{this.onWrapperResize(),this.onContentResize()};onWrapperResize=()=>{this.wrapper instanceof Window?(this.width=window.innerWidth,this.height=window.innerHeight):(this.width=this.wrapper.clientWidth,this.height=this.wrapper.clientHeight)};onContentResize=()=>{this.wrapper instanceof Window?(this.scrollHeight=this.content.scrollHeight,this.scrollWidth=this.content.scrollWidth):(this.scrollHeight=this.wrapper.scrollHeight,this.scrollWidth=this.wrapper.scrollWidth)};get limit(){return{x:this.scrollWidth-this.width,y:this.scrollHeight-this.height}}},s=class{events={};emit(t,...e){let i=this.events[t]||[];for(let t=0,s=i.length;t<s;t++)i[t]?.(...e)}on(t,e){return this.events[t]?.push(e)||(this.events[t]=[e]),()=>{this.events[t]=this.events[t]?.filter((t=>e!==t))}}off(t,e){this.events[t]=this.events[t]?.filter((t=>e!==t))}destroy(){this.events={}}},o=100/6,n={passive:!1},r=class{constructor(t,e={wheelMultiplier:1,touchMultiplier:1}){this.element=t,this.options=e,window.addEventListener("resize",this.onWindowResize,!1),this.onWindowResize(),this.element.addEventListener("wheel",this.onWheel,n),this.element.addEventListener("touchstart",this.onTouchStart,n),this.element.addEventListener("touchmove",this.onTouchMove,n),this.element.addEventListener("touchend",this.onTouchEnd,n)}touchStart={x:0,y:0};lastDelta={x:0,y:0};window={width:0,height:0};emitter=new s;on(t,e){return this.emitter.on(t,e)}destroy(){this.emitter.destroy(),window.removeEventListener("resize",this.onWindowResize,!1),this.element.removeEventListener("wheel",this.onWheel,n),this.element.removeEventListener("touchstart",this.onTouchStart,n),this.element.removeEventListener("touchmove",this.onTouchMove,n),this.element.removeEventListener("touchend",this.onTouchEnd,n)}onTouchStart=t=>{const{clientX:e,clientY:i}=t.targetTouches?t.targetTouches[0]:t;this.touchStart.x=e,this.touchStart.y=i,this.lastDelta={x:0,y:0},this.emitter.emit("scroll",{deltaX:0,deltaY:0,event:t})};onTouchMove=t=>{const{clientX:e,clientY:i}=t.targetTouches?t.targetTouches[0]:t,s=-(e-this.touchStart.x)*this.options.touchMultiplier,o=-(i-this.touchStart.y)*this.options.touchMultiplier;this.touchStart.x=e,this.touchStart.y=i,this.lastDelta={x:s,y:o},this.emitter.emit("scroll",{deltaX:s,deltaY:o,event:t})};onTouchEnd=t=>{this.emitter.emit("scroll",{deltaX:this.lastDelta.x,deltaY:this.lastDelta.y,event:t})};onWheel=t=>{let{deltaX:e,deltaY:i,deltaMode:s}=t;e*=1===s?o:2===s?this.window.width:1,i*=1===s?o:2===s?this.window.height:1,e*=this.options.wheelMultiplier,i*=this.options.wheelMultiplier,this.emitter.emit("scroll",{deltaX:e,deltaY:i,event:t})};onWindowResize=()=>{this.window={width:window.innerWidth,height:window.innerHeight}}},l=t=>Math.min(1,1.001-Math.pow(2,-10*t)),Lenis=class{_isScrolling=!1;_isStopped=!1;_isLocked=!1;_preventNextNativeScrollEvent=!1;_resetVelocityTimeout=null;__rafID=null;isTouching;time=0;userData={};lastVelocity=0;velocity=0;direction=0;options;targetScroll;animatedScroll;animate=new e;emitter=new s;dimensions;virtualScroll;constructor({wrapper:t=window,content:e=document.documentElement,eventsTarget:s=t,smoothWheel:o=!0,syncTouch:n=!1,syncTouchLerp:h=.075,touchInertiaMultiplier:a=35,duration:c,easing:p,lerp:d=.1,infinite:u=!1,orientation:m="vertical",gestureOrientation:v="vertical",touchMultiplier:g=1,wheelMultiplier:w=1,autoResize:S=!0,prevent:f,virtualScroll:y,overscroll:E=!0,autoRaf:T=!1,anchors:z=!1,autoToggle:b=!1,allowNestedScroll:_=!1,__experimental__naiveDimensions:L=!1}={}){window.lenisVersion="1.3.4",t&&t!==document.documentElement||(t=window),"number"==typeof c&&"function"!=typeof p?p=l:"function"==typeof p&&"number"!=typeof c&&(c=1),this.options={wrapper:t,content:e,eventsTarget:s,smoothWheel:o,syncTouch:n,syncTouchLerp:h,touchInertiaMultiplier:a,duration:c,easing:p,lerp:d,infinite:u,gestureOrientation:v,orientation:m,touchMultiplier:g,wheelMultiplier:w,autoResize:S,prevent:f,virtualScroll:y,overscroll:E,autoRaf:T,anchors:z,autoToggle:b,allowNestedScroll:_,__experimental__naiveDimensions:L},this.dimensions=new i(t,e,{autoResize:S}),this.updateClassName(),this.targetScroll=this.animatedScroll=this.actualScroll,this.options.wrapper.addEventListener("scroll",this.onNativeScroll,!1),this.options.wrapper.addEventListener("scrollend",this.onScrollEnd,{capture:!0}),this.options.anchors&&this.options.wrapper===window&&this.options.wrapper.addEventListener("click",this.onClick,!1),this.options.wrapper.addEventListener("pointerdown",this.onPointerDown,!1),this.virtualScroll=new r(s,{touchMultiplier:g,wheelMultiplier:w}),this.virtualScroll.on("scroll",this.onVirtualScroll),this.options.autoToggle&&this.rootElement.addEventListener("transitionend",this.onTransitionEnd,{passive:!0}),this.options.autoRaf&&(this.__rafID=requestAnimationFrame(this.raf))}destroy(){this.emitter.destroy(),this.options.wrapper.removeEventListener("scroll",this.onNativeScroll,!1),this.options.wrapper.removeEventListener("scrollend",this.onScrollEnd,{capture:!0}),this.options.wrapper.removeEventListener("pointerdown",this.onPointerDown,!1),this.options.anchors&&this.options.wrapper===window&&this.options.wrapper.removeEventListener("click",this.onClick,!1),this.virtualScroll.destroy(),this.dimensions.destroy(),this.cleanUpClassName(),this.__rafID&&cancelAnimationFrame(this.__rafID)}on(t,e){return this.emitter.on(t,e)}off(t,e){return this.emitter.off(t,e)}onScrollEnd=t=>{t instanceof CustomEvent||"smooth"!==this.isScrolling&&!1!==this.isScrolling||t.stopPropagation()};dispatchScrollendEvent=()=>{this.options.wrapper.dispatchEvent(new CustomEvent("scrollend",{bubbles:this.options.wrapper===window,detail:{lenisScrollEnd:!0}}))};onTransitionEnd=t=>{if(t.propertyName.includes("overflow")){const t=this.isHorizontal?"overflow-x":"overflow-y",e=getComputedStyle(this.rootElement)[t];["hidden","clip"].includes(e)?this.stop():this.start()}};setScroll(t){this.isHorizontal?this.options.wrapper.scrollTo({left:t,behavior:"instant"}):this.options.wrapper.scrollTo({top:t,behavior:"instant"})}onClick=t=>{const e=t.composedPath().find((t=>t instanceof HTMLAnchorElement&&(t.getAttribute("href")?.startsWith("#")||t.getAttribute("href")?.startsWith("/#")||t.getAttribute("href")?.startsWith("./#"))));if(e){const t=e.getAttribute("href");if(t){const e="object"==typeof this.options.anchors&&this.options.anchors?this.options.anchors:void 0;let i=`#${t.split("#")[1]}`;["#","/#","./#","#top","/#top","./#top"].includes(t)&&(i=0),this.scrollTo(i,e)}}};onPointerDown=t=>{1===t.button&&this.reset()};onVirtualScroll=t=>{if("function"==typeof this.options.virtualScroll&&!1===this.options.virtualScroll(t))return;const{deltaX:e,deltaY:i,event:s}=t;if(this.emitter.emit("virtual-scroll",{deltaX:e,deltaY:i,event:s}),s.ctrlKey)return;if(s.lenisStopPropagation)return;const o=s.type.includes("touch"),n=s.type.includes("wheel");this.isTouching="touchstart"===s.type||"touchmove"===s.type;const r=0===e&&0===i;if(this.options.syncTouch&&o&&"touchstart"===s.type&&r&&!this.isStopped&&!this.isLocked)return void this.reset();const l="vertical"===this.options.gestureOrientation&&0===i||"horizontal"===this.options.gestureOrientation&&0===e;if(r||l)return;let h=s.composedPath();h=h.slice(0,h.indexOf(this.rootElement));const a=this.options.prevent;if(h.find((t=>t instanceof HTMLElement&&("function"==typeof a&&a?.(t)||t.hasAttribute?.("data-lenis-prevent")||o&&t.hasAttribute?.("data-lenis-prevent-touch")||n&&t.hasAttribute?.("data-lenis-prevent-wheel")||this.options.allowNestedScroll&&this.checkNestedScroll(t,{deltaX:e,deltaY:i})))))return;if(this.isStopped||this.isLocked)return void s.preventDefault();if(!(this.options.syncTouch&&o||this.options.smoothWheel&&n))return this.isScrolling="native",this.animate.stop(),void(s.lenisStopPropagation=!0);let c=i;"both"===this.options.gestureOrientation?c=Math.abs(i)>Math.abs(e)?i:e:"horizontal"===this.options.gestureOrientation&&(c=e),(!this.options.overscroll||this.options.infinite||this.options.wrapper!==window&&(this.animatedScroll>0&&this.animatedScroll<this.limit||0===this.animatedScroll&&i>0||this.animatedScroll===this.limit&&i<0))&&(s.lenisStopPropagation=!0),s.preventDefault();const p=o&&this.options.syncTouch,d=o&&"touchend"===s.type&&Math.abs(c)>5;d&&(c=this.velocity*this.options.touchInertiaMultiplier),this.scrollTo(this.targetScroll+c,{programmatic:!1,...p?{lerp:d?this.options.syncTouchLerp:1}:{lerp:this.options.lerp,duration:this.options.duration,easing:this.options.easing}})};resize(){this.dimensions.resize(),this.animatedScroll=this.targetScroll=this.actualScroll,this.emit()}emit(){this.emitter.emit("scroll",this)}onNativeScroll=()=>{if(null!==this._resetVelocityTimeout&&(clearTimeout(this._resetVelocityTimeout),this._resetVelocityTimeout=null),this._preventNextNativeScrollEvent)this._preventNextNativeScrollEvent=!1;else if(!1===this.isScrolling||"native"===this.isScrolling){const t=this.animatedScroll;this.animatedScroll=this.targetScroll=this.actualScroll,this.lastVelocity=this.velocity,this.velocity=this.animatedScroll-t,this.direction=Math.sign(this.animatedScroll-t),this.isStopped||(this.isScrolling="native"),this.emit(),0!==this.velocity&&(this._resetVelocityTimeout=setTimeout((()=>{this.lastVelocity=this.velocity,this.velocity=0,this.isScrolling=!1,this.emit()}),400))}};reset(){this.isLocked=!1,this.isScrolling=!1,this.animatedScroll=this.targetScroll=this.actualScroll,this.lastVelocity=this.velocity=0,this.animate.stop()}start(){this.isStopped&&(this.reset(),this.isStopped=!1,this.emit())}stop(){this.isStopped||(this.reset(),this.isStopped=!0,this.emit())}raf=t=>{const e=t-(this.time||t);this.time=t,this.animate.advance(.001*e),this.options.autoRaf&&(this.__rafID=requestAnimationFrame(this.raf))};scrollTo(e,{offset:i=0,immediate:s=!1,lock:o=!1,duration:n=this.options.duration,easing:r=this.options.easing,lerp:h=this.options.lerp,onStart:a,onComplete:c,force:p=!1,programmatic:d=!0,userData:u}={}){if(!this.isStopped&&!this.isLocked||p){if("string"==typeof e&&["top","left","start"].includes(e))e=0;else if("string"==typeof e&&["bottom","right","end"].includes(e))e=this.limit;else{let t;if("string"==typeof e?t=document.querySelector(e):e instanceof HTMLElement&&e?.nodeType&&(t=e),t){if(this.options.wrapper!==window){const t=this.rootElement.getBoundingClientRect();i-=this.isHorizontal?t.left:t.top}const s=t.getBoundingClientRect();e=(this.isHorizontal?s.left:s.top)+this.animatedScroll}}if("number"==typeof e){if(e+=i,e=Math.round(e),this.options.infinite){if(d){this.targetScroll=this.animatedScroll=this.scroll;const t=e-this.animatedScroll;t>this.limit/2?e-=this.limit:t<-this.limit/2&&(e+=this.limit)}}else e=t(0,e,this.limit);if(e===this.targetScroll)return a?.(this),void c?.(this);if(this.userData=u??{},s)return this.animatedScroll=this.targetScroll=e,this.setScroll(this.scroll),this.reset(),this.preventNextNativeScrollEvent(),this.emit(),c?.(this),this.userData={},void requestAnimationFrame((()=>{this.dispatchScrollendEvent()}));d||(this.targetScroll=e),"number"==typeof n&&"function"!=typeof r?r=l:"function"==typeof r&&"number"!=typeof n&&(n=1),this.animate.fromTo(this.animatedScroll,e,{duration:n,easing:r,lerp:h,onStart:()=>{o&&(this.isLocked=!0),this.isScrolling="smooth",a?.(this)},onUpdate:(t,e)=>{this.isScrolling="smooth",this.lastVelocity=this.velocity,this.velocity=t-this.animatedScroll,this.direction=Math.sign(this.velocity),this.animatedScroll=t,this.setScroll(this.scroll),d&&(this.targetScroll=t),e||this.emit(),e&&(this.reset(),this.emit(),c?.(this),this.userData={},requestAnimationFrame((()=>{this.dispatchScrollendEvent()})),this.preventNextNativeScrollEvent())}})}}}preventNextNativeScrollEvent(){this._preventNextNativeScrollEvent=!0,requestAnimationFrame((()=>{this._preventNextNativeScrollEvent=!1}))}checkNestedScroll(t,{deltaX:e,deltaY:i}){const s=Date.now(),o=t._lenis??={};let n,r,l,h,a,c,p,d;const u=this.options.gestureOrientation;if(s-(o.time??0)>2e3){o.time=Date.now();const e=window.getComputedStyle(t);o.computedStyle=e;const i=e.overflowX,s=e.overflowY;if(n=["auto","overlay","scroll"].includes(i),r=["auto","overlay","scroll"].includes(s),o.hasOverflowX=n,o.hasOverflowY=r,!n&&!r)return!1;if("vertical"===u&&!r)return!1;if("horizontal"===u&&!n)return!1;a=t.scrollWidth,c=t.scrollHeight,p=t.clientWidth,d=t.clientHeight,l=a>p,h=c>d,o.isScrollableX=l,o.isScrollableY=h,o.scrollWidth=a,o.scrollHeight=c,o.clientWidth=p,o.clientHeight=d}else l=o.isScrollableX,h=o.isScrollableY,n=o.hasOverflowX,r=o.hasOverflowY,a=o.scrollWidth,c=o.scrollHeight,p=o.clientWidth,d=o.clientHeight;if(!n&&!r||!l&&!h)return!1;if(!("vertical"!==u||r&&h))return!1;if(!("horizontal"!==u||n&&l))return!1;let m,v,g,w,S,f;if("horizontal"===u)m="x";else if("vertical"===u)m="y";else{0!==e&&n&&l&&(m="x"),0!==i&&r&&h&&(m="y")}if(!m)return!1;if("x"===m)v=t.scrollLeft,g=a-p,w=e,S=n,f=l;else{if("y"!==m)return!1;v=t.scrollTop,g=c-d,w=i,S=r,f=h}return(w>0?v<g:v>0)&&S&&f}get rootElement(){return this.options.wrapper===window?document.documentElement:this.options.wrapper}get limit(){return this.options.__experimental__naiveDimensions?this.isHorizontal?this.rootElement.scrollWidth-this.rootElement.clientWidth:this.rootElement.scrollHeight-this.rootElement.clientHeight:this.dimensions.limit[this.isHorizontal?"x":"y"]}get isHorizontal(){return"horizontal"===this.options.orientation}get actualScroll(){const t=this.options.wrapper;return this.isHorizontal?t.scrollX??t.scrollLeft:t.scrollY??t.scrollTop}get scroll(){return this.options.infinite?(t=this.animatedScroll,e=this.limit,(t%e+e)%e):this.animatedScroll;var t,e}get progress(){return 0===this.limit?1:this.scroll/this.limit}get isScrolling(){return this._isScrolling}set isScrolling(t){this._isScrolling!==t&&(this._isScrolling=t,this.updateClassName())}get isStopped(){return this._isStopped}set isStopped(t){this._isStopped!==t&&(this._isStopped=t,this.updateClassName())}get isLocked(){return this._isLocked}set isLocked(t){this._isLocked!==t&&(this._isLocked=t,this.updateClassName())}get isSmooth(){return"smooth"===this.isScrolling}get className(){let t="lenis";return this.options.autoToggle&&(t+=" lenis-autoToggle"),this.isStopped&&(t+=" lenis-stopped"),this.isLocked&&(t+=" lenis-locked"),this.isScrolling&&(t+=" lenis-scrolling"),"smooth"===this.isScrolling&&(t+=" lenis-smooth"),t}updateClassName(){this.cleanUpClassName(),this.rootElement.className=`${this.rootElement.className} ${this.className}`.trim()}cleanUpClassName(){this.rootElement.className=this.rootElement.className.replace(/lenis(-\w+)?/g,"").trim()}};globalThis.Lenis=Lenis,globalThis.Lenis.prototype=Lenis.prototype;//# sourceMappingURL=lenis.min.js.map
```
---
## ▶ ASSET MANIFEST — source URL → local file
| Downloaded from (WP Media, `demo.uichemy.com`) | Saved as |
|---|---|
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-cta-shelf.jpg` | `images/cta-shelf.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-hero-macro.jpg` | `images/hero-macro.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-hero-serum.png` | `images/hero-serum.png` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-betaglucan.jpg` | `images/ing-betaglucan.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-ceramides.jpg` | `images/ing-ceramides.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-niacinamide.jpg` | `images/ing-niacinamide.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-panthenol.jpg` | `images/ing-panthenol.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-squalane.jpg` | `images/ing-squalane.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ing-zinc.jpg` | `images/ing-zinc.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-balm.png` | `images/prod-balm.png` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-cleanser.png` | `images/prod-cleanser.png` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-drops.png` | `images/prod-drops.png` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-gelcream.png` | `images/prod-gelcream.png` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-serum.png` | `images/prod-serum.png` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-spf.png` | `images/prod-spf.png` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-prod-squalane.png` | `images/prod-squalane.png` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ritual-cleanse.jpg` | `images/ritual-cleanse.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ritual-protect.jpg` | `images/ritual-protect.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ritual-treat.jpg` | `images/ritual-treat.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-ritual-wide.jpg` | `images/ritual-wide.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__images-smear-backdrop.jpg` | `images/smear-backdrop.jpg` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__fonts-host-grotesk-latin.woff2` | `fonts/host-grotesk-latin.woff2` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__fonts-rethink-sans-latin.woff2` | `fonts/rethink-sans-latin.woff2` |
| `https://demo.uichemy.com/wp-content/uploads/2026/09/dewpoint__fonts-sometype-mono-latin.woff2` | `fonts/sometype-mono-latin.woff2` |