


@property --fx-y { syntax: "<length>"; inherits: false; initial-value: 0px; }
@property --fx-mx { syntax: "<length>"; inherits: false; initial-value: 0px; }
@property --fx-my { syntax: "<length>"; inherits: false; initial-value: 0px; }
@property --fx-py { syntax: "<length>"; inherits: false; initial-value: 0px; }
@property --fx-s { syntax: "<number>"; inherits: false; initial-value: 1; }


.lenis.lenis-smooth iframe { pointer-events: none; }
html.has-motion.lenis { scroll-behavior: auto; }



html.has-motion [data-reveal]:not(.fx-done) { opacity: 0; }
html.has-motion :is([data-reveal=""], [data-reveal="fade"], [data-reveal="up"]):not(.fx-done) { translate: 0 20px; }


html.has-motion [data-decode]:not(.fx-done) { opacity: 0; }
html.has-motion [data-trace]:not(.fx-done) { opacity: 0; }


html.has-motion .fx-mag { --fx-mx: 0px; --fx-my: 0px; translate: var(--fx-mx) var(--fx-my); }
html.has-motion [data-parallax] { --fx-py: 0px; translate: 0 var(--fx-py); }
html.has-motion .fx-run { --fx-y: 0px; --fx-s: 1; translate: var(--fx-mx, 0px) calc(var(--fx-y) + var(--fx-my, 0px)); scale: var(--fx-s); transition: none !important; }
html.has-motion [data-parallax].fx-run { translate: 0 calc(var(--fx-y) + var(--fx-py)); }


.fx-w { display: inline-block; }
.fx-wi { display: inline-block; will-change: transform, opacity; }



.curtain { position: fixed; inset: 0; z-index: 100; background: var(--black, #000); pointer-events: none;
  visibility: hidden; opacity: 0; contain: strict; }
html.motion-ok .curtain { display: block; }             
.curtain__line { display: none; }
.curtain.is-on { visibility: visible; pointer-events: auto; }
html.motion-ok.is-entering .curtain { visibility: visible; opacity: 1; pointer-events: auto;
  animation: fx-curtain-lift .6s var(--e-soft, cubic-bezier(.33, 0, .2, 1)) 2.5s forwards; }
@keyframes fx-curtain-lift { to { opacity: 0; visibility: hidden; pointer-events: none; } }



.fx-cur { position: fixed; left: 0; top: 0; z-index: 90; width: 0; height: 0; pointer-events: none; opacity: 0;
  transition: opacity .25s var(--e-soft, ease); }
.fx-cur.is-on { opacity: 1; }
.fx-cur.is-off { opacity: 0; }
.fx-cur__ring { position: absolute; left: 0; top: 0; width: 22px; height: 22px; translate: -50% -50%; border-radius: 50%;
  border: 1px solid rgba(241, 239, 234, .7); background: rgba(0, 0, 0, 0);
  transition: width .45s var(--e-out, ease), height .45s var(--e-out, ease), background-color .3s var(--e-soft, ease), border-color .3s; }
.fx-cur.is-link .fx-cur__ring { width: 8px; height: 8px; background: var(--ice, #F1EFEA); }
.fx-cur.is-label .fx-cur__ring { width: 68px; height: 68px; background: rgba(0, 0, 0, .55); }
.fx-cur.is-down .fx-cur__ring { width: 16px; height: 16px; }
.fx-cur.is-label.is-down .fx-cur__ring { width: 60px; height: 60px; }
.fx-cur--quiet:not(.is-label) { opacity: 0; }
.fx-cur--quiet .fx-cur__ring { width: 8px; height: 8px; }
.fx-cur--quiet.is-label .fx-cur__ring { width: 76px; height: 76px; background: rgba(0, 0, 0, .5);
  -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.fx-cur--quiet.is-label.is-down .fx-cur__ring { width: 68px; height: 68px; }
.fx-cur__lbl { position: absolute; left: 0; top: 0; translate: -50% -50%; white-space: nowrap; opacity: 0;
  font: 600 var(--t-label, 11px)/1 var(--sans, "Geist", system-ui, sans-serif); letter-spacing: var(--track-label, .14em); text-transform: uppercase; color: var(--ice, #F1EFEA);
  transition: opacity .2s; }
.fx-cur.is-label .fx-cur__lbl { opacity: 1; transition-delay: .08s; }
@media (hover: none), (pointer: coarse) { .fx-cur { display: none !important; } }


.fx-dc, .fx-edge { display: none !important; }
.fx-decoding { -webkit-text-fill-color: currentColor !important; }



@media (prefers-reduced-motion: reduce) {
  .curtain, .fx-cur { display: none !important; }
  html.has-motion :is([data-reveal], [data-decode], [data-trace], [data-parallax]) { opacity: 1 !important; translate: none !important; clip-path: none !important; }
  .fx-wi { transform: none !important; opacity: 1 !important; }
}
@media print {
  .curtain, .fx-cur { display: none !important; }
  html.has-motion :is([data-reveal], [data-decode], [data-trace], [data-parallax]) { opacity: 1 !important; translate: none !important; clip-path: none !important; }
  .fx-wi { transform: none !important; opacity: 1 !important; }
}
