/* Shared motion: in-view pause, scroll reveal. Transform and opacity only. */
.is-off, .is-off *, .is-off *::before, .is-off *::after, .is-off::before, .is-off::after,
.is-tab-hidden [data-inview], .is-tab-hidden [data-inview] *, .is-tab-hidden [data-inview] *::before, .is-tab-hidden [data-inview] *::after,
.is-tab-hidden [data-inview]::before, .is-tab-hidden [data-inview]::after {
  animation-play-state: paused !important;
}
.js-motion .rv {
  transition: opacity 600ms var(--ease-soft), transform var(--dur-reveal) var(--ease-out);
  transition-delay: calc(var(--rv-i, 0) * 60ms);
}
.js-motion .rv-pre { opacity: 0; transform: translate3d(0, 14px, 0); }
.js-motion [data-reveal-group] > .rv-pre { transform: translate3d(0, 16px, 0) scale(.97); }
.js-motion .rv-snap { transition: none !important; }
@media print {
  .rv-pre { opacity: 1 !important; transform: none !important; }
}
@media (prefers-reduced-motion: reduce) {
  .rv-pre { opacity: 1 !important; transform: none !important; }
}
