/* The hero is the only place on the site with choreographed motion — every
   other section stays still and simply shows its content, no scroll-reveal,
   no stagger, no progress bar. */
.reveal-on-scroll {
  opacity: 1;
}

/* Hero entrance — plays once on load. The title is stroke-only until a
   "battery charging" fill sweeps left to right to color it in, then the
   eyebrow and lede slide in from opposite sides. */
@keyframes hero-load-fill {
  from { width: 0%; }
  to { width: 100%; }
}

@keyframes hero-slide-in-right {
  from { opacity: 0; transform: translateX(56px); }
  to { opacity: 1; transform: translateX(0); }
}

@keyframes hero-slide-in-left {
  from { opacity: 0; transform: translateX(-56px); }
  to { opacity: 1; transform: translateX(0); }
}

.hero__title-fill {
  animation: hero-load-fill 1800ms cubic-bezier(0.65, 0, 0.35, 1) 300ms forwards;
}

.hero__eyebrow {
  opacity: 0;
  animation: hero-slide-in-right 650ms ease-out 2200ms both;
}

.hero__lede {
  opacity: 0;
  animation: hero-slide-in-left 650ms ease-out 2300ms both;
}

@media (prefers-reduced-motion: reduce) {
  .hero__title-fill {
    animation: none;
    width: 100%;
  }

  .hero__charge-bar {
    display: none;
  }

  .hero__eyebrow,
  .hero__lede {
    animation: none;
    opacity: 1;
    transform: none;
  }

  .hero__scroll-cue {
    transition: none;
  }

  * {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}
