.reveal {
  opacity: 0;
  transform: translateY(28px);
  transition:
    opacity var(--transition-reveal),
    transform var(--transition-reveal);
}

.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.capability-row.reveal:nth-child(2),
.difference__list article.reveal:nth-child(2) { transition-delay: 90ms; }
.capability-row.reveal:nth-child(3),
.difference__list article.reveal:nth-child(3) { transition-delay: 160ms; }
.difference__list article.reveal:nth-child(4) { transition-delay: 230ms; }

@keyframes pulse-core {
  0%, 100% { transform: scale(.9); opacity: .75; }
  50% { transform: scale(1.12); opacity: 1; }
}

@keyframes radar-ring {
  0% { transform: scale(.8); opacity: 0; }
  30% { opacity: .65; }
  100% { transform: scale(1.3); opacity: 0; }
}

@keyframes map-drift {
  0% { background-position: 0 0, 0 0; }
  100% { background-position: 0 34px, 34px 0; }
}

@keyframes modal-enter {
  from { opacity: 0; transform: translateY(24px) scale(.98); }
  to { opacity: 1; transform: none; }
}

.signal-core span { animation: pulse-core 3.2s ease-in-out infinite; }
.signal-core i:nth-of-type(1) { animation: radar-ring 4s ease-out infinite; }
.signal-core i:nth-of-type(2) { animation: radar-ring 4s 1.2s ease-out infinite; }
.signal-core i:nth-of-type(3) { animation: radar-ring 4s 2.4s ease-out infinite; }
.solution-panel__visual::before { animation: map-drift 9s linear infinite; }
.architecture-map { animation: pulse-core 7s ease-in-out infinite; }
.modal:not([hidden]) .modal__panel { animation: modal-enter 420ms cubic-bezier(.16,1,.3,1) both; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
  .reveal { opacity: 1; transform: none; }
}
