/* ============================================================
   NEXUS — Motion System  ·  animations.css
   Keyframes · scroll reveals · ambient motion
============================================================ */

/* ---------- Keyframes ---------- */
@keyframes auroraA{0%{transform:translate(0,0) scale(1)}50%{transform:translate(9vw,7vh) scale(1.18)}100%{transform:translate(-5vw,10vh) scale(.94)}}
@keyframes auroraB{0%{transform:translate(0,0) scale(1)}50%{transform:translate(-8vw,-6vh) scale(1.12)}100%{transform:translate(6vw,-10vh) scale(.9)}}
@keyframes gridPan{0%{background-position:0 0,0 0}100%{background-position:58px 58px,58px 58px}}
@keyframes raySweep{0%{left:-45%}100%{left:115%}}
@keyframes spinSlow{to{transform:rotate(360deg)}}
@keyframes orbPulse{0%,100%{box-shadow:0 0 70px rgba(61,168,255,.5),inset 0 0 46px rgba(255,255,255,.28),inset -14px -18px 40px rgba(2,10,24,.85)}50%{box-shadow:0 0 120px rgba(61,168,255,.85),inset 0 0 60px rgba(255,255,255,.4),inset -14px -18px 40px rgba(2,10,24,.85)}}
@keyframes orbWave{0%{transform:scale(.72);opacity:.9}100%{transform:scale(1.45);opacity:0}}
@keyframes scanMove{0%,100%{top:-40%}50%{top:105%}}
@keyframes floatY{0%,100%{transform:translateY(0)}50%{transform:translateY(-14px)}}
@keyframes pulseDot{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.78)}}
@keyframes caretBlink{0%,100%{opacity:1}50%{opacity:0}}
@keyframes mouseWheel{0%{transform:translateY(0);opacity:1}70%{transform:translateY(10px);opacity:0}100%{opacity:0}}
@keyframes marqueeMove{to{transform:translateX(-50%)}}
@keyframes rippleAnim{to{transform:scale(3.2);opacity:0}}
@keyframes preFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}
@keyframes preSlide{0%{transform:translateX(-110%)}100%{transform:translateX(320%)}}
@keyframes preLetter{to{opacity:1}}
@keyframes hexDraw{to{stroke-dashoffset:0}}
@keyframes statusIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes pinBounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
@keyframes tiltFloat{0%,100%{transform:translateY(0) rotate(var(--r,0deg))}50%{transform:translateY(-10px) rotate(var(--r,0deg))}}

/* Preloader letter stagger */
.pre-word span:nth-child(1){animation-delay:.05s}
.pre-word span:nth-child(2){animation-delay:.13s}
.pre-word span:nth-child(3){animation-delay:.21s}
.pre-word span:nth-child(4){animation-delay:.29s}
.pre-word span:nth-child(5){animation-delay:.37s}

/* ---------- Scroll reveal system ---------- */
[data-reveal]{opacity:0;transform:translateY(38px);transition:opacity .95s var(--ease),transform .95s var(--ease);transition-delay:var(--d,0s);will-change:opacity,transform}
[data-reveal="left"]{transform:translateX(-46px)}
[data-reveal="right"]{transform:translateX(46px)}
[data-reveal="zoom"]{transform:scale(.9)}
[data-reveal="fade"]{transform:none}
[data-reveal].revealed{opacity:1;transform:none}

/* Staggered groups — children inherit incremental delay via JS */
[data-reveal-group] > *{opacity:0;transform:translateY(32px);transition:opacity .9s var(--ease),transform .9s var(--ease);transition-delay:var(--d,0s)}
[data-reveal-group].revealed > *{opacity:1;transform:none}

/* Section title line-mask reveal */
[data-lines] .t-line{display:block;overflow:hidden;padding-bottom:.1em}
[data-lines] .t-line > span{display:inline-block;transform:translateY(115%);transition:transform 1.05s var(--ease)}
[data-lines].lines-in .t-line > span{transform:none}
[data-lines] .t-line:nth-child(2) > span{transition-delay:.12s}
[data-lines] .t-line:nth-child(3) > span{transition-delay:.24s}

/* Timeline activation */
.tl-card{opacity:0;transform:translateY(26px);transition:opacity .8s var(--ease),transform .8s var(--ease)}
.tl-item.active .tl-card{opacity:1;transform:none}
.tl-item:nth-child(odd).active .tl-card{animation:none}

/* Counter glow tick */
.stat-num.counting{color:var(--blue-soft);text-shadow:0 0 26px rgba(61,168,255,.55)}

/* Image zoom containers */
[data-zoom]{overflow:hidden}
[data-zoom] img{transition:transform 1.3s var(--ease)}
[data-zoom]:hover img{transform:scale(1.07)}

/* Shimmer accent line */
.shimmer-line{height:2px;border-radius:2px;background:linear-gradient(90deg,transparent,rgba(61,168,255,.9),rgba(217,232,255,.9),rgba(61,168,255,.9),transparent);background-size:200% 100%;animation:shimmer 3.4s linear infinite}

/* Live badge pulse ring */
.live-ring{position:relative}
.live-ring::before{content:"";position:absolute;inset:-4px;border-radius:inherit;border:1px solid rgba(61,168,255,.5);animation:orbWave 2.4s ease-out infinite}

/* Gradient border rotation for featured panels */
@keyframes borderFlow{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}
.border-flow{background:linear-gradient(var(--bg-3),var(--bg-3)) padding-box,linear-gradient(120deg,rgba(61,168,255,.8),rgba(217,232,255,.15),rgba(61,168,255,.2),rgba(61,168,255,.8)) border-box;background-size:auto,300% 300%;animation:borderFlow 7s ease infinite}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  html{scroll-behavior:auto}
  [data-reveal],[data-reveal-group] > *,.hero-title .line-inner,.hero-para,.hero-actions,.hero-trust,.hero-visual,.tl-card{opacity:1!important;transform:none!important}
  .marquee-track{animation:none}
}
