/* =============================================================================
   ZWF Utilities
   A deliberately small set of single-purpose helpers. Reach for a component
   or a token before adding to this list. Depends on tokens.css.
   ============================================================================= */

/* Visibility ------------------------------------------------------------------- */
.zwf-hidden { display: none !important; }
@media (min-width: 48em) { .zwf-hidden\@md { display: none !important; } }
@media (max-width: 47.999em) { .zwf-show\@md { display: none !important; } }

/* Text ------------------------------------------------------------------------- */
.zwf-text-center { text-align: center; }
.zwf-text-start { text-align: start; }
.zwf-text-muted { color: var(--zwf-color-ink-muted); }
.zwf-text-sm { font-size: var(--zwf-text-sm); }
.zwf-text-lg { font-size: var(--zwf-text-lg); }
.zwf-eyebrow {
  display: inline-block;
  font-size: var(--zwf-text-xs);
  font-weight: var(--zwf-weight-semibold);
  text-transform: uppercase;
  letter-spacing: var(--zwf-tracking-wide);
  color: var(--zwf-color-primary);
}

/* Flow / spacing ------------------------------------------------------------- */
.zwf-flow > * + * { margin-top: var(--zwf-space-md); }
.zwf-mt-0 { margin-top: 0 !important; }
.zwf-mt-sm { margin-top: var(--zwf-space-sm); }
.zwf-mt-md { margin-top: var(--zwf-space-md); }
.zwf-mt-lg { margin-top: var(--zwf-space-lg); }
.zwf-mb-0 { margin-bottom: 0 !important; }

/* Layout helpers ------------------------------------------------------------- */
.zwf-full-bleed {
  width: 100vw;
  margin-inline: calc(50% - 50vw);
}
.zwf-aspect-video { aspect-ratio: 16 / 9; }
.zwf-aspect-square { aspect-ratio: 1; }
.zwf-rounded { border-radius: var(--zwf-radius-md); overflow: clip; }
.zwf-rounded-lg { border-radius: var(--zwf-radius-lg); overflow: clip; }

/* Media ---------------------------------------------------------------------- */
.zwf-img-cover { inline-size: 100%; block-size: 100%; object-fit: cover; }

/* Decorative images: never announced, never a broken-alt gap ---------------- */
img[alt=""], img:not([alt]) { }
