/* =========================================================================
   EP3 Affiliates directory (/affiliates.html) — page composition.
   Per-page CSS analog to webshield-home.css pattern.
   All tokens from webshield-navy.css. Card styles in ep3-aff-card.css.
   ========================================================================= */

html { scroll-behavior: smooth; }

/* Reuse the directory-hero family from ep3-initiatives.css if both are
   loaded together (they aren't here — affiliates only loads this file).
   Keeping the rules local so the per-page CSS is self-contained. */

.ep3-dir-hero {
  background: var(--ws-page);
  border-bottom: 1px solid var(--ws-rule);
}
.ep3-dir-hero__wrap {
  max-width: 1100px; margin: 0 auto;
  padding: 64px 48px 56px;
  text-align: center;
}
.ep3-dir-hero__eyebrow {
  font-family: var(--ws-font-mono);
  /* A·01 — coral-on-bone fails WCAG body-text contrast at 11px/400; bump
     to 12px/500 (large-text 3:1 threshold) without changing the token.
     Same spec as /initiatives, /people, /home. */
  font-size: 12px; font-weight: 500;
  letter-spacing: var(--ws-tracking-mono);
  text-transform: uppercase;
  color: var(--ws-accent);
  margin: 0 0 22px;
}
.ep3-dir-hero__title {
  font-family: var(--ws-font-display);
  font-size: clamp(36px, 4.6vw, 48px); font-weight: 500;
  line-height: 1.15; letter-spacing: -0.02em;
  color: var(--ws-ink);
  margin: 0 0 18px;
}
.ep3-dir-hero__lede {
  font-family: var(--ws-font-display);
  font-size: 18px; font-weight: 400;
  line-height: var(--ws-lh-lede);
  color: var(--ws-ink-muted);
  max-width: 680px;
  margin: 0 auto 36px;
  text-wrap: pretty;
}

/* F·04 — Chip row spacing inside the hero. Sits between the search
   input and the (often-hidden) results line. */
.ep3-dir-hero__chips {
  margin-top: 16px;
}

/* ep3-search promoted to per-component file (ep3-search.css). */

/* ── Grid + no-results ─────────────────────────────────────── */
.ep3-dir-grid-wrap {
  background: var(--ws-surface);
  border-top: 1px solid var(--ws-rule);
}
.ep3-dir-grid__inner {
  max-width: 1200px; margin: 0 auto;
  padding: 56px 48px 88px;
}
.ep3-aff-grid {
  display: grid;
  /* minmax(0, 1fr) forces equal columns even when a child has a wide
     min-content (mono URL strings can be 60+ chars and don't wrap by
     default). Without this, one card's URL was blowing out 2-up on
     mobile. The wrap on the URL itself lives in ep3-aff-card.css. */
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 20px;
}
.ep3-aff-noresults {
  padding: 48px 0;
  text-align: center;
  font-family: var(--ws-font-display);
  font-size: 18px; font-style: italic;
  color: var(--ws-ink-muted);
}
.ep3-aff-noresults[hidden] { display: none; }

/* ── Responsive ────────────────────────────────────────────── */
@media (max-width: 1100px) {
  .ep3-aff-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 820px) {
  .ep3-aff-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 720px) {
  .ep3-dir-hero__wrap { padding: 48px 24px 40px; }
  .ep3-dir-grid__inner { padding: 40px 24px 64px; }
  .ep3-aff-grid { gap: 14px; }
}
