@layer utilities {

  /* Scroll-reveal, driven by js/reveal.js. Selectively applied to hero
     teaser items, section headings, gallery items and cards only —
     never body copy. */
  [data-reveal] {
    opacity: 0;
    transform: translateY(16px);
    transition:
      opacity var(--duration-reveal) var(--ease-editorial),
      transform var(--duration-reveal) var(--ease-editorial);
    transition-delay: calc(var(--i, 0) * 70ms);
  }
  [data-reveal].is-revealed {
    opacity: 1;
    transform: translateY(0);
  }
  @media (prefers-reduced-motion: reduce) {
    [data-reveal] {
      opacity: 1;
      transform: none;
      transition: none;
    }
  }

  .text-center { text-align: center; }
  .mx-auto { margin-inline: auto; }
  .text-accent { color: var(--color-accent); font-weight: 600; }
}
