/* No attribute means ordinary visible content, including no-JS/fallbacks.
   Individual translate composes with existing transforms on these groups. */
@media (prefers-reduced-motion: no-preference) {
  [data-scroll-reveal='pending'] {
    opacity: 0;
    translate: 0 16px;
  }
  [data-scroll-reveal='visible'] {
    opacity: 1;
    translate: 0 0;
    transition:
      opacity 800ms linear,
      translate 850ms var(--ease-out);
  }
  [data-scroll-reveal]:focus-within {
    opacity: 1;
    translate: none;
    transition: none;
  }
  /* A delayed media-query callback must never overlap the pinned director. */
  .schedule[data-programme-mode='scroll']
    :is(.schedule-heading, .schedule-card)[data-scroll-reveal] {
    opacity: 1;
    translate: none;
    transition: none;
  }
}
/* The three-column feature row arrives left to right; stacked cards follow
   their own viewport entry without adding a delay on phone or tablet. */
@media (min-width: 901px) and (prefers-reduced-motion: no-preference) {
  .local-features .exp-feature:nth-child(2)[data-scroll-reveal='visible'] {
    transition-delay: 60ms;
  }
  .local-features .exp-feature:nth-child(3)[data-scroll-reveal='visible'] {
    transition-delay: 120ms;
  }
}
@media print {
  [data-scroll-reveal] {
    opacity: 1;
    translate: none;
    transition: none;
  }
}
