/* ==========================================================================
   ENAF Theme — 6. Utilities & motion
   ========================================================================== */
.text-primary { color: var(--color-primary); }
.text-muted { color: var(--color-text-muted); }
.text-secondary { color: var(--color-text-secondary); }
.text-center { text-align: center; }
.mt-0 { margin-top: 0 !important; }
.mt-4 { margin-top: var(--space-4); }
.mt-5 { margin-top: var(--space-5); }
.mt-6 { margin-top: var(--space-6); }
.mt-8 { margin-top: var(--space-8); }
.mt-9 { margin-top: var(--space-9); }
.mb-4 { margin-bottom: var(--space-4); }
.mb-6 { margin-bottom: var(--space-6); }
.mb-8 { margin-bottom: var(--space-8); }
.measure { max-width: var(--measure); }
.measure-narrow { max-width: var(--measure-narrow); }
.visually-hidden { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.hide-mobile { display: none; }
@media (min-width: 64em) { .hide-mobile { display: block; } .hide-desktop { display: none; } }

/* Scroll reveal — content is visible by default; JS adds .js-reveal and
   removes .is-visible only when motion is allowed. */
.js-motion .reveal { opacity: 0; transform: translateY(18px); transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out); }
.js-motion .reveal.is-visible { opacity: 1; transform: none; }
.js-motion .reveal[data-delay="1"] { transition-delay: 90ms; }
.js-motion .reveal[data-delay="2"] { transition-delay: 180ms; }
.js-motion .reveal[data-delay="3"] { transition-delay: 270ms; }
@media (prefers-reduced-motion: reduce) {
  .js-motion .reveal { opacity: 1; transform: none; transition: none; }
}
