/* ===========================================================================
   Plenio — webfonts, self-hosted. Single source of truth for every @font-face.
   ===========================================================================

   Nothing here is loaded from a third party, by policy. app.css already stated
   the rule — "loading from fonts.googleapis.com would exfiltrate user IP to
   Google" — and security-and-compliance.md §4 / §10.6 makes it a requirement
   (Schrems II, no IP exfiltration). Until 2026-09 the console and all four
   marketing documents nonetheless loaded stylesheets from fonts.googleapis.com
   with a preconnect to fonts.gstatic.com, which disclosed every visitor's IP
   address to Google on every page load, before any consent was sought. On the
   website of a company selling EU compliance that is the first thing a
   privacy-literate prospect checks, and it took fifteen seconds to find.

   This file replaces those links. It is referenced by App.razor (the console),
   the four marketing documents, and exposure-calculator.html, so a family added
   here is available everywhere and a family removed here is gone everywhere.

   ---------------------------------------------------------------------------
   Why the Latin families are split into two files each
   ---------------------------------------------------------------------------
   Plus Jakarta Sans and Inter are served in Google's own subset split, latin and
   latin-ext, with the unicode-range declarations preserved verbatim. That is
   what keeps the split worth having: a browser fetches latin-ext only when the
   page actually contains a character in that range, so ordinary English copy
   costs one file, while a European name or an unusual currency symbol still
   renders rather than falling back mid-word.

   Cyrillic, Greek and Vietnamese subsets were deliberately not taken. They would
   be dead weight on every page, and no surface in this product is translated.

   The four families that were already self-hosted (Google Sans Flex, Spinnaker,
   DM Mono, Instrument Serif) moved here unchanged from app.css.

   All six families are SIL Open Font License 1.1 — see LICENSE-fonts.txt.
   =========================================================================== */


/* ---------------------------------------------------------------------------
   Plus Jakarta Sans — the marketing site's display and body face.
   Variable, weight 200–800, roman and italic.
   --------------------------------------------------------------------------- */

@font-face {
    font-family: 'Plus Jakarta Sans';
    font-style: normal;
    font-weight: 200 800;
    font-display: swap;
    src: url('/fonts/PlusJakartaSans-Variable-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: 'Plus Jakarta Sans';
    font-style: normal;
    font-weight: 200 800;
    font-display: swap;
    src: url('/fonts/PlusJakartaSans-Variable-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;
}

@font-face {
    font-family: 'Plus Jakarta Sans';
    font-style: italic;
    font-weight: 200 800;
    font-display: swap;
    src: url('/fonts/PlusJakartaSans-Italic-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: 'Plus Jakarta Sans';
    font-style: italic;
    font-weight: 200 800;
    font-display: swap;
    src: url('/fonts/PlusJakartaSans-Italic-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 — UI text in the console and parts of the marketing site.
   Variable, weight 100–900. Roman only: nothing requests Inter italic.
   --------------------------------------------------------------------------- */

@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url('/fonts/Inter-Variable-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-Variable-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;
}


/* ---------------------------------------------------------------------------
   Already self-hosted before this change — moved here verbatim from app.css so
   that every face lives in one file. local() first: if the reader happens to
   have the font installed, no download happens at all.
   --------------------------------------------------------------------------- */

@font-face {
    font-family: 'Google Sans Flex';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: local('Google Sans Flex'),
         url('/fonts/GoogleSansFlex-Variable.woff2') format('woff2-variations'),
         url('/fonts/GoogleSansFlex-Variable.woff2') format('woff2');
}

@font-face {
    font-family: 'Spinnaker';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: local('Spinnaker'),
         url('/fonts/Spinnaker-Regular.woff2') format('woff2');
}

@font-face {
    font-family: 'DM Mono';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: local('DM Mono'),
         url('/fonts/DMMono-Regular.woff2') format('woff2');
}

@font-face {
    font-family: 'DM Mono';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: local('DM Mono Medium'),
         url('/fonts/DMMono-Medium.woff2') format('woff2');
}

/* Italic only, by design — ux-standards.md §2 reserves Instrument Serif for the
   editorial "rationale" voice and never for upright display. */
@font-face {
    font-family: 'Instrument Serif';
    font-style: italic;
    font-weight: 400;
    font-display: swap;
    src: local('Instrument Serif Italic'),
         url('/fonts/InstrumentSerif-Italic.woff2') format('woff2');
}
