.reveal {
  --reveal-distance: 24px;
  --reveal-duration: 700ms;
  --reveal-delay: 0ms;
  --reveal-ease: ease;
  --reveal-scale: 0.98;

  opacity: 0;
  transform: translate3d(0, var(--reveal-distance), 0);
  transition:
    opacity var(--reveal-duration) var(--reveal-ease),
    transform var(--reveal-duration) var(--reveal-ease);
  transition-delay: var(--reveal-delay);
  will-change: opacity, transform;
}

.reveal-up {
  transform: translate3d(0, var(--reveal-distance), 0);
}

.reveal-down {
  transform: translate3d(0, calc(var(--reveal-distance) * -1), 0);
}

.reveal-left {
  transform: translate3d(calc(var(--reveal-distance) * -1), 0, 0);
}

.reveal-right {
  transform: translate3d(var(--reveal-distance), 0, 0);
}

.reveal-fade {
  transform: none;
}

.reveal-zoom {
  transform: scale(var(--reveal-scale));
}

.reveal-delay-1 {
  --reveal-delay: 90ms;
}

.reveal-delay-2 {
  --reveal-delay: 180ms;
}

.reveal-delay-3 {
  --reveal-delay: 270ms;
}

.reveal-delay-4 {
  --reveal-delay: 360ms;
}

.reveal-delay-5 {
  --reveal-delay: 450ms;
}

.reveal.is-visible {
  opacity: 1;
  transform: translate3d(0, 0, 0) scale(1);
}

@media (prefers-reduced-motion: reduce) {
  .reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }
}
