@keyframes hero-rise {
  from { opacity: 0; transform: translateY(32px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes modal-in {
  from { opacity: 0; transform: translateY(18px) scale(.985); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

@keyframes signal-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(217,255,67,.25); }
  50% { box-shadow: 0 0 0 12px rgba(217,255,67,0); }
}

.js .reveal {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity var(--transition-reveal), transform var(--transition-reveal);
}

.js .reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.hero .reveal:nth-child(2) { transition-delay: 80ms; }
.hero .reveal:nth-child(3) { transition-delay: 140ms; }
.status-dot { animation: signal-pulse 2.2s ease-in-out infinite; }
.modal.is-opening .modal__panel { animation: modal-in 420ms cubic-bezier(.16,1,.3,1) both; }
.voice-card { transition: transform 500ms cubic-bezier(.16,1,.3,1), border-color 300ms ease; }
.voice-card:hover { transform: translateY(-6px); border-color: var(--color-accent); }
.voice-card--two:hover { transform: translateY(-6px) rotate(.5deg); }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
  .js .reveal { opacity: 1; transform: none; }
}
