/* Databus motion layer — from NewPages hero-animation spec.
   One easing curve, plays once then holds; ambient float/ring only.
   Everything gates on html.mo (set by motion.js) so no-JS pages stay static. */
:root{--mo-ease:cubic-bezier(.2,0,0,1)}

@keyframes moBadge{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}
@keyframes moWord{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}
@keyframes moSub{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes moCta{from{opacity:0;transform:translateY(12px) scale(.94)}to{opacity:1;transform:none}}
@keyframes moTrust{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes moShot{from{opacity:0;transform:translateY(32px) scale(.965)}to{opacity:1;transform:none}}
@keyframes moChip{0%{opacity:0;transform:translateY(16px) scale(.8)}100%{opacity:1;transform:none}}
@keyframes moFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes moRing{0%,100%{box-shadow:0 0 0 1px rgba(38,99,235,.14),0 26px 80px -28px rgba(38,99,235,.30)}50%{box-shadow:0 0 0 1px rgba(34,211,238,.20),0 30px 90px -26px rgba(38,99,235,.42)}}

html.mo .mo-badge{animation:moBadge .5s var(--mo-ease) .12s both}
html.mo .mo-w{display:inline-block;animation:moWord .55s var(--mo-ease) both;animation-delay:calc(.30s + var(--wi)*.06s)}
html.mo .mo-sub{animation:moSub .55s var(--mo-ease) .70s both}
html.mo .mo-cta{animation:moCta .55s var(--mo-ease) .86s both}
html.mo .mo-trust{animation:moTrust .55s var(--mo-ease) 1.0s both}
html.mo .mo-glow{animation:moShot .7s var(--mo-ease) .40s both,moRing 6s ease-in-out 1.8s infinite}
html.mo .mo-chip{animation:moChip .6s var(--mo-ease) calc(1.15s + var(--ci)*.14s) both,moFloat 5.5s ease-in-out calc(2.2s + var(--ci)*.6s) infinite}

/* Scroll reveals — sections rise once as they enter; grid children cascade. */
html.mo [data-mo-r]{opacity:0;transform:translateY(24px)}
html.mo [data-mo-r].mo-in{opacity:1;transform:none;transition:opacity .6s var(--mo-ease),transform .6s var(--mo-ease)}
html.mo [data-mo-r] [class*="grid"]>*{opacity:0;transform:translateY(18px);transition:opacity .55s var(--mo-ease),transform .55s var(--mo-ease)}
html.mo [data-mo-r].mo-in [class*="grid"]>*{opacity:1;transform:none}
html.mo [data-mo-r].mo-in [class*="grid"]>:nth-child(2){transition-delay:.07s}
html.mo [data-mo-r].mo-in [class*="grid"]>:nth-child(3){transition-delay:.14s}
html.mo [data-mo-r].mo-in [class*="grid"]>:nth-child(4){transition-delay:.21s}
html.mo [data-mo-r].mo-in [class*="grid"]>:nth-child(5){transition-delay:.28s}
html.mo [data-mo-r].mo-in [class*="grid"]>:nth-child(n+6){transition-delay:.34s}

/* Hero ambient blob (only where markup opts in) */
@keyframes moBlobDrift{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(22px,18px) scale(1.09)}}
html.mo .mo-blob{position:absolute;pointer-events:none;filter:blur(70px);opacity:.55;border-radius:9999px;animation:moBlobDrift 14s ease-in-out infinite}

.mo-chip{will-change:transform}
@media (max-width:639px){.mo-chip{display:none}}
@media (prefers-reduced-motion:reduce){
  html.mo .mo-badge,html.mo .mo-w,html.mo .mo-sub,html.mo .mo-cta,html.mo .mo-trust,
  html.mo .mo-glow,html.mo .mo-chip,html.mo .mo-blob{animation:none}
  html.mo [data-mo-r]{opacity:1;transform:none}
  html.mo [data-mo-r] [class*="grid"]>*{opacity:1;transform:none}
}
