/* Scroll motion styles (pairs with motion.js). Nothing here applies until motion.js adds .motion-on. */
html.lenis, html.lenis body { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-smooth [data-lenis-prevent] { overscroll-behavior: contain; }
.lenis.lenis-stopped { overflow: hidden; }

.motion-on main > * { will-change: transform; }

.motion-on .fx { transition: opacity .9s cubic-bezier(.2,.7,.2,1) var(--d,0ms), transform 1s cubic-bezier(.2,.7,.2,1) var(--d,0ms), filter .9s cubic-bezier(.2,.7,.2,1) var(--d,0ms); }
.motion-on .fx-focus:not(.in) { opacity: 0; filter: blur(12px); transform: translateY(18px); }
.motion-on .fx-rise:not(.in) { opacity: 0; transform: translateY(30px); }
.motion-on .fx-unveil { transition-duration: 1.4s, 1.6s; }
.motion-on .fx-unveil:not(.in) { opacity: 0; transform: scale(1.08) translateY(20px); }

/* Footer curtain */
footer.curtain { position: sticky; bottom: 0; z-index: 0; }
[data-mark] { display: block; white-space: nowrap; line-height: 1; overflow: hidden; padding: .02em 0 .2em; }
[data-mark] span { display: inline-block; }
.motion-on footer.curtain [data-mark] span {
  transform: translateY(calc((1 - clamp(0, var(--rev, 1) * 1.5 - var(--i) * .045, 1)) * 105%));
  will-change: transform;
}
