/* ============================================================
   MUDBOXX RESEARCH — Animations
   ============================================================ */

@keyframes marquee { to { transform: translateX(-50%); } }
@keyframes fadeUp { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: none; } }
@keyframes floatY { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-14px); } }
@keyframes pulseRing {
  0% { transform: scale(.6); opacity: .7; }
  80%,100% { transform: scale(2.6); opacity: 0; }
}
@keyframes dash { to { stroke-dashoffset: 0; } }
@keyframes spinSlow { to { transform: rotate(360deg); } }

/* floating hero tags */
.floating-tag { animation: floatY 6s ease-in-out infinite; }
.floating-tag:nth-child(2) { animation-delay: -1.2s; }
.floating-tag:nth-child(3) { animation-delay: -2.4s; }
.floating-tag:nth-child(4) { animation-delay: -3.6s; }
.floating-tag:nth-child(5) { animation-delay: -4.8s; }
.floating-tag:nth-child(6) { animation-delay: -2s; }

/* map pulse */
.map-dot .ring { transform-box: fill-box; transform-origin: center; animation: pulseRing 2.6s ease-out infinite; }
.map-dot .ring2 { animation-delay: 1.3s; }
.map-dot .core { animation: floatY 4s ease-in-out infinite; }

/* connecting lines draw */
.map-line { stroke-dasharray: 6 6; animation: dash 20s linear infinite; }

/* hero network svg */
.net-node { animation: floatY 5s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
.net-node:nth-child(2n) { animation-delay: -1.5s; }
.net-node:nth-child(3n) { animation-delay: -2.8s; }
.net-orbit { animation: spinSlow 40s linear infinite; transform-origin: center; }

/* Reveal system (IntersectionObserver adds .in) */
.reveal { transition: opacity .9s var(--ease), transform .9s var(--ease); }
.reveal.in { opacity: 1 !important; transform: none !important; }
.reveal-line > span { transition: transform 1s var(--ease); }
.reveal-line.in > span { transform: none; }
[data-stagger] > * { opacity: 0; transform: translateY(34px); transition: opacity .8s var(--ease), transform .8s var(--ease); }
[data-stagger] > *.in { opacity: 1; transform: none; }
[data-hero-in] { opacity: 0; transform: translateY(20px); transition: opacity 1s var(--ease), transform 1s var(--ease); }
[data-hero-in].in { opacity: 1; transform: none; }

/* animated data particles along map connection lines */
@keyframes flow { to { offset-distance: 100%; } }

/* JS-disabled fallback */
.no-js .reveal, .no-js .reveal-line > span, .no-js [data-stagger] > *, .no-js [data-hero-in] { opacity: 1 !important; transform: none !important; }

/* reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; scroll-behavior: auto !important; }
  .reveal, .reveal-line > span { opacity: 1 !important; transform: none !important; }
  .marquee-track { animation: none !important; }
}
