/* ---------------------------------------------------------------------------
 * Self-hosted web fonts — replaces the former Google Fonts CDN dependency.
 *
 * Goal: zero faux-synthesis, no exceptions. Every (font-family, font-weight,
 * font-style) the site's CSS actually requests (directly or by inheriting a
 * DMSans-*/--cyki-font-body* family) resolves to a real shipped woff2 — a
 * strictly more complete matrix than the former Google Fonts CDN load, which
 * only covered:
 *   - Playfair+Display:ital,wght@0,400..900;1,400..900 (full variable range,
 *     both styles)
 *   - DM+Sans:wght@400;500;700 (normal style only — no italic axis, no 800)
 * DM Sans italic and DM Sans 800 were already synthesized in production
 * under that load; this self-host closes both gaps with real faces instead
 * of carrying the synthesis forward.
 *
 * Provenance:
 * - DM Sans 400/500/700 normal and Playfair Display 400/700 roman + 700
 *   italic are sourced from the canonical TTFs at cyki-design/assets/fonts/
 *   and converted to woff2 with fonttools.
 * - DM Sans 400 italic + 800 normal, and Playfair Display 400 italic, 800
 *   (roman + italic), and 900 "Black" (roman + italic) are NOT yet vendored
 *   by cyki-design (a follow-up task adds them there). They are sourced
 *   directly from the OFL-1.1 upstream — the google/fonts repo's variable
 *   TTFs (ofl/dmsans/DMSans[opsz,wght].ttf,
 *   ofl/dmsans/DMSans-Italic[opsz,wght].ttf,
 *   ofl/playfairdisplay/PlayfairDisplay[wght].ttf, and
 *   ofl/playfairdisplay/PlayfairDisplay-Italic[wght].ttf), instantiated to
 *   static instances at the needed weight (DM Sans pinned to opsz=14, the
 *   optical size Google's own named Regular/Medium/Bold/etc. instances use)
 *   with fontTools' varLib.instancer, and converted to woff2 the same way.
 *
 * Deployable copies are committed at cyki-web/public/fonts/ per
 * cyki-web/AGENTS.md rule #10 (cyki-design-owned assets must ship as
 * vendored copies here, since Cloudflare Builds cannot read sibling repos).
 *
 * font-family names below match the font stacks declared in
 * public/styles/tokens.css exactly — do not rename one without the other.
 *
 * ---------------------------------------------------------------------------
 * Requested-matrix contract (see tests/fonts.spec.ts for the enforced list):
 *
 * DM Sans — 'DMSans-Regular' / 'DMSans-Medium' / 'DMSans-Bold' are three
 * distinct CSS font-family names. All three are registered at the three real
 * roman weights (400/500/700) so a rule can declare any of the three names
 * and pair it with any of 400/500/700 as font-weight and still resolve to
 * the correct real face — instead of the single-weight-per-family setup that
 * forced the browser to synthesize bold whenever a rule paired (e.g.)
 * 'DMSans-Regular' with font-weight: 700. 'DMSans-Regular' additionally gets
 * two more faces because it is the only one of the three names any rule
 * pairs with italic or weight 800 (every DM-Sans italic/800 usage in src/
 * inherits the 'DMSans-Regular' family from `body`, e.g. `.about-quote p`,
 * `.coach-tagline`, blog-post `<em>` disclaimer text, and
 * `.nav-link[aria-current='page']`):
 *   - weight 400 italic
 *   - weight 800 normal
 *   - weight 600 (e.g. `.support-link`, `.legal-section h3`) has no exact
 *     face; the browser's standard nearest-available-weight matching (not
 *     synthesis) resolves it to the real 700 face once 400/500/700 are all
 *     registered — same behavior Google's DM Sans load produced before.
 *
 * Playfair Display — one family name, eight faces covering every
 * (weight, style) pair actually requested in src/:
 *   400 normal / 400 italic (landing "What is Cyki" quote card) /
 *   700 normal / 700 italic (h1/h2 hero-italic accents at weight 700) /
 *   800 normal / 800 italic (About FAQ heading — "Questions"/"download" and
 *   the ES equivalents are wrapped in .hero-italic inside a weight:800 h2) /
 *   900 normal / 900 italic (h1 hero-italic accents at weight 900, the
 *   primary heading treatment sitewide).
 * ---------------------------------------------------------------------------*/

@font-face {
  font-family: 'DMSans-Regular';
  src: url('/fonts/DMSans-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'DMSans-Regular';
  src: url('/fonts/DMSans-Medium.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'DMSans-Regular';
  src: url('/fonts/DMSans-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'DMSans-Regular';
  src: url('/fonts/DMSans-Italic.woff2') format('woff2');
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: 'DMSans-Regular';
  src: url('/fonts/DMSans-ExtraBold.woff2') format('woff2');
  font-weight: 800;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'DMSans-Medium';
  src: url('/fonts/DMSans-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'DMSans-Medium';
  src: url('/fonts/DMSans-Medium.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'DMSans-Medium';
  src: url('/fonts/DMSans-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'DMSans-Bold';
  src: url('/fonts/DMSans-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'DMSans-Bold';
  src: url('/fonts/DMSans-Medium.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'DMSans-Bold';
  src: url('/fonts/DMSans-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'Playfair Display';
  src: url('/fonts/PlayfairDisplay-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'Playfair Display';
  src: url('/fonts/PlayfairDisplay-Italic.woff2') format('woff2');
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: 'Playfair Display';
  src: url('/fonts/PlayfairDisplay-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'Playfair Display';
  src: url('/fonts/PlayfairDisplay-BoldItalic.woff2') format('woff2');
  font-weight: 700;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: 'Playfair Display';
  src: url('/fonts/PlayfairDisplay-ExtraBold.woff2') format('woff2');
  font-weight: 800;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'Playfair Display';
  src: url('/fonts/PlayfairDisplay-ExtraBoldItalic.woff2') format('woff2');
  font-weight: 800;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: 'Playfair Display';
  src: url('/fonts/PlayfairDisplay-Black.woff2') format('woff2');
  font-weight: 900;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: 'Playfair Display';
  src: url('/fonts/PlayfairDisplay-BlackItalic.woff2') format('woff2');
  font-weight: 900;
  font-style: italic;
  font-display: swap;
}
