/* Scroll reveal + subtle transitions */

.reveal {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94),
              transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

@media (prefers-reduced-motion: reduce) {
  .reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }
  .reveal.is-visible {
    opacity: 1;
    transform: none;
  }
}

/* Timeline: active marker pulse */
@keyframes timeline-marker-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(58, 117, 196, 0.35); transform: scale(1.08); }
  50% { box-shadow: 0 0 0 10px rgba(58, 117, 196, 0); transform: scale(1.12); }
}

/* Timeline: subtle background gradient shift */
@keyframes timeline-bg-shift {
  0%, 100% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
}
