/* Motion is intentionally restrained so the story and operational details stay clear. */
.motion-ready [data-reveal] {
  opacity: 0;
  transform: translateY(18px);
  transition:
    opacity 520ms ease,
    transform 520ms cubic-bezier(0.2, 0.75, 0.2, 1);
  transition-delay: calc(var(--reveal-delay, 0) * 80ms);
}

.motion-ready [data-reveal].is-visible {
  opacity: 1;
  transform: none;
}

@media (prefers-reduced-motion: reduce) {
  .motion-ready [data-reveal],
  .motion-ready [data-reveal].is-visible {
    opacity: 1;
    transform: none;
    transition: none;
  }
}
