/* ==========================================================================
   Animations — lightweight, GPU-friendly, reduced-motion aware
   ========================================================================== */

@keyframes pulseDot {
  0% { box-shadow: 0 0 0 0 rgba(47,230,160,0.55); }
  70% { box-shadow: 0 0 0 8px rgba(47,230,160,0); }
  100% { box-shadow: 0 0 0 0 rgba(47,230,160,0); }
}

@keyframes floatSlow {
  0%, 100% { transform: translate(0, 0); }
  50% { transform: translate(18px, -22px); }
}
.glow-blob { animation: floatSlow 14s ease-in-out infinite; }
.glow-blob.blue { animation-duration: 18s; animation-delay: -4s; }

@keyframes dashFlow {
  to { stroke-dashoffset: -240; }
}
.energy-trace {
  position: absolute;
  pointer-events: none;
  z-index: 0;
}
.energy-trace path {
  fill: none;
  stroke: url(#traceGradient);
  stroke-width: 1.5;
  stroke-dasharray: 6 14;
  animation: dashFlow 6s linear infinite;
  opacity: 0.55;
}

/* Scroll reveal */
.reveal {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity .7s cubic-bezier(.16,.84,.44,1), transform .7s cubic-bezier(.16,.84,.44,1);
}
.reveal.in-view { opacity: 1; transform: translateY(0); }
.reveal-stagger > * { transition-delay: calc(var(--stagger-i, 0) * 80ms); }

/* Hero entrance */
@keyframes heroRise {
  from { opacity: 0; transform: translateY(22px); }
  to { opacity: 1; transform: translateY(0); }
}
.hero .eyebrow { animation: heroRise .7s cubic-bezier(.16,.84,.44,1) both; }
.hero h1 { animation: heroRise .8s .08s cubic-bezier(.16,.84,.44,1) both; }
.hero .hero-sub { animation: heroRise .8s .16s cubic-bezier(.16,.84,.44,1) both; }
.hero-cta-row { animation: heroRise .8s .24s cubic-bezier(.16,.84,.44,1) both; }
.hero-trust { animation: heroRise .8s .32s cubic-bezier(.16,.84,.44,1) both; }

/* Light streak sweep, used sparingly behind key sections */
@keyframes streakSweep {
  0% { transform: translateX(-30%) rotate(-8deg); opacity: 0; }
  50% { opacity: 0.25; }
  100% { transform: translateX(130%) rotate(-8deg); opacity: 0; }
}
.light-streak {
  position: absolute;
  top: 0; left: 0;
  width: 40%; height: 200%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.06), transparent);
  animation: streakSweep 9s ease-in-out infinite;
  pointer-events: none;
  z-index: 0;
}

/* Marquee for trust strip (optional use) */
@keyframes marquee {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
.marquee-track { display: flex; width: max-content; animation: marquee 26s linear infinite; }

@media (prefers-reduced-motion: reduce) {
  .hero .eyebrow, .hero h1, .hero .hero-sub, .hero-cta-row, .hero-trust,
  .glow-blob, .light-streak, .marquee-track, .energy-trace path {
    animation: none !important;
  }
  .reveal { opacity: 1; transform: none; }
}
