/* ============================================================
   Scroll-reveal animations (enqueued globally).
   Blocks opt in by adding utime-fade-up (whole section) or
   utime-fade-up-stagger + utime-fade-up-item (sequenced children).
   Never combine both on the same wrapper/children pair.
   ============================================================ */

.utime-fade-up,
.utime-fade-up-item {
  opacity: 0;
  transform: translateY(26px);
  will-change: opacity, transform;
  transition: opacity .7s var(--utime-ease), transform .7s var(--utime-ease);
}

.utime-fade-up.is-visible,
.utime-fade-up-item.is-visible,
.utime-fade-up-stagger.is-visible .utime-fade-up-item {
  opacity: 1;
  transform: none;
}

/* Stagger children in sequence once the parent is in view. */
.utime-fade-up-stagger .utime-fade-up-item { transition-delay: 0ms; }
.utime-fade-up-stagger.is-visible .utime-fade-up-item:nth-child(1) { transition-delay: 0ms; }
.utime-fade-up-stagger.is-visible .utime-fade-up-item:nth-child(2) { transition-delay: 90ms; }
.utime-fade-up-stagger.is-visible .utime-fade-up-item:nth-child(3) { transition-delay: 180ms; }
.utime-fade-up-stagger.is-visible .utime-fade-up-item:nth-child(4) { transition-delay: 270ms; }
.utime-fade-up-stagger.is-visible .utime-fade-up-item:nth-child(5) { transition-delay: 360ms; }
.utime-fade-up-stagger.is-visible .utime-fade-up-item:nth-child(6) { transition-delay: 450ms; }
.utime-fade-up-stagger.is-visible .utime-fade-up-item:nth-child(7) { transition-delay: 540ms; }
.utime-fade-up-stagger.is-visible .utime-fade-up-item:nth-child(8) { transition-delay: 630ms; }

/* Respect reduced-motion — show everything, no transitions/parallax. */
@media (prefers-reduced-motion: reduce) {
  .utime-fade-up,
  .utime-fade-up-item {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  * { scroll-behavior: auto !important; }
}
