/* ============================================================
   PT MUSTIKA MEDIA JAYA — ANIMATION STYLESHEET
   Keyframes for hero signal, blobs, loader, fiber line, misc
   ============================================================ */

@media (prefers-reduced-motion: no-preference) {

  @keyframes blobFloat {
    0%, 100% { transform: translate(0, 0) scale(1); }
    33% { transform: translate(30px, -30px) scale(1.08); }
    66% { transform: translate(-20px, 20px) scale(0.95); }
  }

  @keyframes ringPulse {
    0% { transform: scale(0.85); opacity: 0; }
    15% { opacity: 1; }
    100% { transform: scale(1.15); opacity: 0; }
  }

  @keyframes signalBlink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.25; }
  }

  @keyframes scrollLine {
    0% { transform: scaleY(0); transform-origin: top; opacity: 0; }
    40% { transform: scaleY(1); transform-origin: top; opacity: 1; }
    60% { transform: scaleY(1); transform-origin: bottom; opacity: 1; }
    100% { transform: scaleY(0); transform-origin: bottom; opacity: 0; }
  }

  @keyframes fiberTravel {
    0% { left: 0%; opacity: 0; }
    5% { opacity: 1; }
    95% { opacity: 1; }
    100% { left: 100%; opacity: 0; }
  }

  @keyframes loaderPulse {
    0% { width: 20px; height: 20px; opacity: 0.9; }
    100% { width: 64px; height: 64px; opacity: 0; }
  }

  @keyframes waPulse {
    0%, 100% { box-shadow: 0 10px 30px rgba(37, 211, 102, 0.4), 0 0 0 0 rgba(37, 211, 102, 0.5); }
    50% { box-shadow: 0 10px 30px rgba(37, 211, 102, 0.4), 0 0 0 10px rgba(37, 211, 102, 0); }
  }

  @keyframes fadeInUp {
    from { opacity: 0; transform: translateY(24px); }
    to { opacity: 1; transform: translateY(0); }
  }

  .hero__node {
    animation: nodeFloat 6s ease-in-out infinite;
  }

  .hero__node--1 { animation-duration: 5.5s; }
  .hero__node--2 { animation-duration: 7s; animation-delay: 0.4s; }
  .hero__node--3 { animation-duration: 6.2s; animation-delay: 0.8s; }
  .hero__node--4 { animation-duration: 6.8s; animation-delay: 1.2s; }

  @keyframes nodeFloat {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-10px); }
  }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}

/* Counter animation trigger class (used by reveal.js) */
.stat-card__number.is-counting {
  animation: fadeInUp 0.4s ease;
}
