/* Shared scroll motion system. Hidden states exist ONLY when html has .mo-js (set by motion.js), so no JS = fully visible. */
.mo-progress{position:fixed;top:0;left:0;right:0;height:3px;z-index:10000;pointer-events:none;transform-origin:0 50%;transform:scaleX(0);background:linear-gradient(90deg,#25f4ee,#0a8a9c 55%,#fe2c55);box-shadow:0 0 12px rgba(37,244,238,.6)}
html.mo-js body{overflow-x:clip}
html.mo-js .reveal{opacity:1;transform:none;transition:none}
html.mo-js [data-motion],html.mo-js [data-mo-kid]{--mo-ease:cubic-bezier(.16,1,.3,1);transition:opacity .9s var(--mo-ease) var(--mo-d,0s),transform 1s var(--mo-ease) var(--mo-d,0s),filter .9s var(--mo-ease) var(--mo-d,0s),clip-path 1.1s var(--mo-ease) var(--mo-d,0s)}
html.mo-js [data-motion="slide-left"]:not(.mo-in){opacity:0;transform:translate3d(-56px,0,0)}
html.mo-js [data-motion="slide-right"]:not(.mo-in){opacity:0;transform:translate3d(56px,0,0)}
html.mo-js [data-motion="rise"]:not(.mo-in){opacity:0;transform:translate3d(0,44px,0)}
html.mo-js [data-motion="zoom"]:not(.mo-in){opacity:0;transform:scale(.92)}
html.mo-js [data-motion="parallax"]:not(.mo-in){opacity:0;transform:scale(1.05) translate3d(0,24px,0)}
html.mo-js [data-motion="blur-in"]:not(.mo-in){opacity:0;filter:blur(14px);transform:scale(1.03)}
html.mo-js [data-motion="clip-up"]:not(.mo-in){opacity:.001;clip-path:inset(100% 0 0 0);transform:translate3d(0,24px,0)}
html.mo-js [data-motion="flip"]:not(.mo-in){opacity:0;transform:perspective(900px) rotateX(-16deg) translate3d(0,30px,0);transform-origin:50% 0}
html.mo-js [data-motion].mo-in{opacity:1;transform:none;filter:none;clip-path:inset(-120px)}
html.mo-js [data-mo-kid="stagger"]:not(.mo-in){opacity:0;transform:translate3d(0,34px,0);transition-delay:calc(var(--i,0) * 70ms)}
html.mo-js [data-mo-kid="fan"]:not(.mo-in){opacity:0;transform:translate3d(0,56px,0) rotate(calc((var(--i,0) - 2) * 2.5deg)) scale(.92);transform-origin:50% 100%}
html.mo-js [data-mo-kid="flip"]:not(.mo-in){opacity:0;transform:perspective(800px) rotateY(-24deg) translate3d(0,24px,0);transform-origin:0 50%}
html.mo-js [data-mo-kid="zoom"]:not(.mo-in){opacity:0;transform:scale(.88)}
html.mo-js [data-mo-kid].mo-in{opacity:1;transform:none;transition-delay:calc(var(--i,0) * 70ms)}
.mo-br{position:absolute;left:0;right:0;top:0;pointer-events:none;background:linear-gradient(180deg,var(--mo-from),transparent)}
section.mo-bridge{position:relative}
/* pinned hero overtaken by the next section */
html.mo-pin [data-pin]{position:sticky;top:var(--pin-top,0)}
html.mo-pin [data-pin] .hero-grid{will-change:transform;transform:translate3d(0,calc(var(--pp,0) * -46px),0) scale(calc(1 - var(--pp,0) * .08));transform-origin:50% 40%}
html.mo-pin [data-pin]::after{content:"";position:absolute;inset:0;z-index:3;pointer-events:none;background:#04161c;opacity:calc(var(--pp,0) * .6)}
html.mo-pin [data-pin].mo-pin-done{visibility:hidden}
html.mo-pin [data-pin-over]{z-index:4;border-radius:36px 36px 0 0;box-shadow:0 -26px 70px -12px rgba(4,22,28,.45)}
/* fixed scene background: stacked layers, only opacity changes */
.mo-bg{position:fixed;inset:0;z-index:-1;pointer-events:none;contain:strict}
.mo-bg i{position:absolute;inset:0;will-change:opacity}
.mo-bg .l0,.mo-bg .l4{background:#f1fafb}
.mo-bg .l1{opacity:0;background:radial-gradient(900px 600px at 18% 8%,#4b2fb0 0,transparent 60%),radial-gradient(800px 600px at 92% 92%,#0f3a8a 0,transparent 60%),#0d0b2e}
.mo-bg .l2{opacity:0;background:radial-gradient(900px 600px at 82% 12%,#b0237a 0,transparent 60%),radial-gradient(800px 600px at 8% 90%,#4b2fb0 0,transparent 60%),#1b0a2e}
.mo-bg .l3{opacity:0;background:radial-gradient(900px 500px at 15% 0%,#0d6f7d 0,transparent 60%),radial-gradient(800px 500px at 100% 100%,#243b9a 0,transparent 60%),#06222b}
.mo-bg .l4{opacity:0}
/* drifting particles */
.mo-fx{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0}
.mo-fx s{position:absolute;bottom:-40px;display:block;width:var(--sz,22px);height:var(--sz,22px);opacity:0;color:#fff;text-decoration:none;animation:mo-pt var(--du,14s) linear var(--de,0s) infinite;will-change:transform,opacity}
.mo-fx s svg{width:100%;height:100%;fill:currentColor;display:block}
.mo-fx.paused s{animation-play-state:paused}
@keyframes mo-pt{0%{opacity:0;transform:translate3d(0,0,0) rotate(0)}12%{opacity:.5}85%{opacity:.35}100%{opacity:0;transform:translate3d(var(--dx,30px),-760px,0) rotate(var(--rt,40deg))}}
html.mo-js [data-particles]>.wrap{position:relative;z-index:1}
@media (prefers-reduced-motion:reduce){
  .mo-fx{display:none}
  .mo-progress{display:none}
  [data-motion],[data-mo-kid]{opacity:1!important;transform:none!important;filter:none!important;clip-path:none!important;transition:none!important}
}

/* never let a transformed decoration widen the page */
html,body{overflow-x:clip}
