/* GENERATED by packages/brand/sync.mjs from packages/brand/type.css — DO NOT EDIT.
   Edit the canonical file and run `pnpm brand:sync`. */
/*
 * WayFinder typography — Brand Guidelines v2.0, §06.
 * CANONICAL SOURCE. See tokens.css for the edit-here / sync rules.
 *
 *   Space Grotesk   display, headings, the wordmark, numerals
 *   Inter           body, UI, labels, buttons
 *   JetBrains Mono  data readouts — "4 min · 268 m · 06:12 PM"
 *   Noto Sans       global scripts, loaded per-language at runtime (see below)
 *
 * Inter and Space Grotesk are VARIABLE fonts: one file per subset spans the whole
 * weight axis, so `font-weight: 100 900` here costs nothing extra and every weight
 * in the scale is available. All three are OFL — see LICENSES.md.
 */

/* ── Space Grotesk ─────────────────────────────────────────────────────────── */
@font-face {
  font-family: "Space Grotesk";
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url("./fonts/space-grotesk-latin.woff2") format("woff2");
  unicode-range:
    U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304,
    U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Space Grotesk";
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url("./fonts/space-grotesk-latin-ext.woff2") format("woff2");
  unicode-range:
    U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308,
    U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113,
    U+2C60-2C7F, U+A720-A7FF;
}

/* ── Inter ─────────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("./fonts/inter-latin.woff2") format("woff2");
  unicode-range:
    U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304,
    U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url("./fonts/inter-latin-ext.woff2") format("woff2");
  unicode-range:
    U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308,
    U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113,
    U+2C60-2C7F, U+A720-A7FF;
}

/* ── JetBrains Mono ────────────────────────────────────────────────────────── */
@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("./fonts/jetbrains-mono-latin.woff2") format("woff2");
  unicode-range:
    U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304,
    U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "JetBrains Mono";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("./fonts/jetbrains-mono-latin-ext.woff2") format("woff2");
  unicode-range:
    U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308,
    U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113,
    U+2C60-2C7F, U+A720-A7FF;
}

:root {
  /*
   * --wf-font-script is empty by default and set at runtime by
   * apps/nav/js/i18n.js loadFont() to the Noto face for the active language.
   * Putting it ahead of the generic "Noto Sans" means Indic/Arabic/CJK glyphs land
   * on the right Noto face rather than whatever last-resort the browser picks.
   * Latin-script languages never fetch anything — Inter already covers them.
   *
   * NOTE the missing comma after var() below, and the trailing comma the runtime
   * value must carry (i18n.js writes `"Noto Sans Tamil",`). An empty custom property
   * substitutes to nothing, so writing `'Inter', var(--x), 'Noto Sans'` would collapse
   * to `'Inter', , 'Noto Sans'` — an invalid font-family list that the browser drops
   * entirely, silently reverting the whole app to the default serif. Carrying the
   * comma inside the value is what keeps both states valid.
   */
  --wf-font-script: ;
  --wf-font-display: "Space Grotesk", var(--wf-font-script) "Noto Sans", system-ui, sans-serif;
  --wf-font-body: "Inter", var(--wf-font-script) "Noto Sans", system-ui, sans-serif;
  --wf-font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;

  /* Type scale — Brand Guidelines §06. `font` shorthand: weight size/leading family. */
  --wf-display: 700 clamp(40px, 6vw, 72px) / 1.02 var(--wf-font-display);
  --wf-display-tracking: -0.03em;
  --wf-h1: 500 40px / 1.15 var(--wf-font-display);
  --wf-h2: 500 28px / 1.2 var(--wf-font-display);
  --wf-h3: 600 20px / 1.3 var(--wf-font-body);
  --wf-body: 400 16px / 1.6 var(--wf-font-body);
  --wf-overline: 600 12px / 1.2 var(--wf-font-body);
  --wf-overline-tracking: 0.14em;
  --wf-button: 600 15px / 1 var(--wf-font-body);
  --wf-data: 400 14px / 1.4 var(--wf-font-mono);
}

/* Overline is always uppercase and tracked out — bundle that with the token so it
   cannot be applied half-way. */
.wf-overline {
  font: var(--wf-overline);
  letter-spacing: var(--wf-overline-tracking);
  text-transform: uppercase;
}
