/* The Annotated Notebook — self-hosted type. Two canonical voices:
   IBM Plex Sans = the UI/body voice; Vollkorn = the examiner's voice. */

/* ── IBM Plex Sans ─────────────────────────────────────────────────────── */

@font-face {
  font-family: "IBM Plex Sans";
  src: url("../fonts/ibm-plex-sans-1.1.0-complete-regular.5aaadb685d3c.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("../fonts/ibm-plex-sans-1.1.0-complete-italic.2cf7d9cd7a9e.woff2") format("woff2");
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("../fonts/ibm-plex-sans-1.1.0-complete-500.02ec16345450.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("../fonts/ibm-plex-sans-1.1.0-complete-600.51d76d33ef85.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("../fonts/ibm-plex-sans-1.1.0-complete-700.ea5f696de389.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* ── Sora — the desk's display voice ──────────────────────────────────
   One variable file (wght 400 to 800), latin subset, self-hosted under the
   OFL (fonts/OFL-Sora.txt). Used on the desk's two surfaces only, the
   dashboard and the profile (2026-09-23): headings and the big figures.
   Body and UI stay IBM Plex Sans. */
@font-face {
  font-family: "Sora";
  src: url("../fonts/sora-v17-latin-variable.fc575ebf6f7c.woff2") format("woff2");
  font-weight: 400 800;
  font-style: normal;
  font-display: swap;
}
/* ── Hanken Grotesk — Temporary migration debt ──────────────────────────
   Retained until the final computed-style census proves that no migrated
   website surface resolves to Hanken. It is not a third canonical voice. */

@font-face {
  font-family: "Hanken Grotesk";
  src: url("../fonts/hanken-grotesk-v12-latin-regular.78c2be80e151.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Hanken Grotesk";
  src: url("../fonts/hanken-grotesk-v12-latin-italic.bc9d3fc068b1.woff2") format("woff2");
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: "Hanken Grotesk";
  src: url("../fonts/hanken-grotesk-v12-latin-500.8d6eb9d4c9c2.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Hanken Grotesk";
  src: url("../fonts/hanken-grotesk-v12-latin-600.0c156079a0be.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Hanken Grotesk";
  src: url("../fonts/hanken-grotesk-v12-latin-700.f3223a1e6b4c.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* ── Vollkorn ────────────────────────────────────────────────────── */

@font-face {
  font-family: "Vollkorn";
  src: url("../fonts/vollkorn-v30-latin-regular.d72e26b62d8a.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Vollkorn";
  src: url("../fonts/vollkorn-v30-latin-italic.4cac3902dff2.woff2") format("woff2");
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: "Vollkorn";
  src: url("../fonts/vollkorn-v30-latin-600.a72af60e6978.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Vollkorn";
  src: url("../fonts/vollkorn-v30-latin-600italic.21f8b5333e5c.woff2") format("woff2");
  font-weight: 600;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: "Vollkorn";
  src: url("../fonts/vollkorn-v30-latin-700.3a2e47d76568.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
