/* Ace Registration Services — motion layer.
   Everything here is additive: the page's resting design is untouched. All of
   it is gated behind classes that JS adds, so with JS off (or with
   prefers-reduced-motion) the site renders exactly as designed. */

/* ══ ticker marquee ═════════════════════════════════════════════════════
   The track holds six identical groups; sliding it left by exactly one
   group (1/6) and looping makes the run continuous — whatever leaves on the
   left is already re-entering on the right. */
.ticker__track { animation: ticker-run 24s linear infinite; }
@keyframes ticker-run {
  from { transform: translateX(0); }
  to   { transform: translateX(-16.6667%); }
}
.ticker:hover .ticker__track { animation-play-state: paused; }

/* ══ scroll: reveal on entry ═════════════════════════════════════════════ */

/* `js-motion` is only present when the observer is running, so content is
   never left invisible if the script doesn't reach it. */
.js-motion .reveal {
  opacity: 0; transform: translateY(18px);
  transition: opacity 620ms cubic-bezier(0.2, 0.6, 0.2, 1),
              transform 620ms cubic-bezier(0.2, 0.6, 0.2, 1);
  transition-delay: var(--reveal-delay, 0ms);
}
.js-motion .reveal.is-in { opacity: 1; transform: none; }

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