.fade-in,
.fade-up,
.fade-down,
.fade-left,
.fade-right {
  --fade-delay: 0ms;
  --fade-duration: 850ms;
  --fade-distance: 34px;

  opacity: 0;
  transition:
    opacity var(--fade-duration) cubic-bezier(.22,.61,.36,1) var(--fade-delay),
    transform var(--fade-duration) cubic-bezier(.22,.61,.36,1) var(--fade-delay);
  will-change: opacity, transform;
}

.fade-in {
  transform: none;
}

.fade-up {
  transform: translate3d(0, var(--fade-distance), 0);
}

.fade-down {
  transform: translate3d(0, calc(var(--fade-distance) * -1), 0);
}

.fade-left {
  transform: translate3d(var(--fade-distance), 0, 0);
}

.fade-right {
  transform: translate3d(calc(var(--fade-distance) * -1), 0, 0);
}

.fade-in.is-visible,
.fade-up.is-visible,
.fade-down.is-visible,
.fade-left.is-visible,
.fade-right.is-visible {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}

@media (prefers-reduced-motion: reduce) {
  .fade-in,
  .fade-up,
  .fade-down,
  .fade-left,
  .fade-right {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}