/* TimeMatch — scroll reveal, count-up tabular-nums, parallax helper, reduced motion. */

.tm-reveal {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity 360ms var(--tm-ease-out), transform 360ms var(--tm-ease-out);
  transition-delay: var(--tm-reveal-delay, 0ms);
  will-change: opacity, transform;
}
.tm-reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.tm-countup { font-variant-numeric: tabular-nums; }

.tm-parallax-host {
  --tm-scroll-y: 0px;
}
.tm-parallax-host > .tm-grid-pattern-bg {
  transform: translate3d(0, calc(var(--tm-scroll-y) * 0.3), 0);
}

/* The schedule "matched" flash is owned by the React island via inline style. */

@media (prefers-reduced-motion: reduce) {
  .tm-reveal { opacity: 1; transform: none; transition: none; }
  .tm-parallax-host > .tm-grid-pattern-bg { transform: none !important; }
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
}
