/* Söhne — sans (7 faces). 700 italic intentionally absent; with
   font-synthesis: none the browser will not synthesize a slant, so
   <strong><em> renders upright 700. See font-spec.md §1, §3, §7. */
@font-face {
  font-family: "Sohne";
  src: url("/static/fonts/soehne-buch.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Sohne";
  src: url("/static/fonts/soehne-buch-kursiv.woff2") format("woff2");
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Sohne";
  src: url("/static/fonts/soehne-kraftig.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Sohne";
  src: url("/static/fonts/soehne-kraftig-kursiv.woff2") format("woff2");
  font-weight: 500;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Sohne";
  src: url("/static/fonts/soehne-halbfett.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Sohne";
  src: url("/static/fonts/soehne-halbfett-kursiv.woff2") format("woff2");
  font-weight: 600;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Sohne";
  src: url("/static/fonts/soehne-dreiviertelfett.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* Söhne Mono — 3 faces */
@font-face {
  font-family: "Sohne Mono";
  src: url("/static/fonts/soehne-mono-buch.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Sohne Mono";
  src: url("/static/fonts/soehne-mono-buch-kursiv.woff2") format("woff2");
  font-weight: 400;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Sohne Mono";
  src: url("/static/fonts/soehne-mono-halbfett.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

/* CLS-mitigation: synthetic fallback face with metrics overridden to
   match Söhne Buch (400). While the real face is still loading, the
   browser uses one of the local() candidates stretched to match Söhne's
   line-box footprint — minimizing layout shift on swap.
   local() list broadened from spec recommendation (§7.2) for Linux
   and macOS-without-Arial coverage. */
@font-face {
  font-family: "Sohne Fallback";
  src: local("Arial"), local("Helvetica"), local("Arimo"),
       local("Liberation Sans");
  size-adjust:       102%;
  ascent-override:    92%;
  descent-override:   24%;
  line-gap-override:   0%;
}

/* Anti-faux-style guard. Combined with the missing 700 italic this
   means <strong><em> renders as upright 700 rather than a synthesized
   slanted bold. */
html {
  font-synthesis: none;
  font-optical-sizing: auto;
}

:root {
  --sans: "Sohne", "Sohne Fallback",
          system-ui, -apple-system, "Segoe UI", Roboto,
          "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif;

  --mono: "Sohne Mono", ui-monospace, SFMono-Regular, Menlo, Consolas,
          "Liberation Mono", "DejaVu Sans Mono", monospace;
}
