/*
 * Em Escala brand fonts, self-hosted (ARQ-1342).
 *
 * Follows the #197 decision (LGPD: no third-party network call from public
 * pages), which first self-hosted the previous Inter face. The fontsource
 * WebJars for these three families do not exist on Maven Central (checked
 * 2026-08-26), so the woff2 files are vendored under /static/fonts/ instead.
 *
 * Provenance (review finding #26 — no unpinned third-party blobs):
 *   Source:  @fontsource npm packages, version 5.3.0 (all three families),
 *            fetched 2026-08-26 via cdn.jsdelivr.net/fontsource/fonts/
 *            <family>@5.3.0/<subset>-<weight>-normal.woff2
 *   License: SIL Open Font License 1.1
 *   SHA-256 of the vendored files:
 *     35f8aec56cfd5cbfdb03cc68733a54a0b05bb3617ffcd5fd332badc0b045ca55  space-grotesk-latin-700-normal.woff2
 *     7ce350b706d79c955ebf91314295f39fa82999f980b7e9beee743c2f3580a15e  space-grotesk-latin-ext-700-normal.woff2
 *     3b646991d30055a93a4ecc499713d4347953a74a947ecab435ab72070cbdab0e  ibm-plex-sans-latin-400-normal.woff2
 *     c93d2a12aaa280f68b9ab7b726ff8dfedda67c99ef9abed047c1847a1cc6d583  ibm-plex-sans-latin-ext-400-normal.woff2
 *     8960851d691c054ed38e259bdcf1a6190d157b4203ed5bb32c632a863fb8ec2f  ibm-plex-sans-latin-600-normal.woff2
 *     b25dfd4f979e442ae1e25cd0894463434cf01ba21ac1a35d39f4a82bd4cc060e  ibm-plex-sans-latin-ext-600-normal.woff2
 *     08949f728dc52d528e69b1667d15c89a5686a4ee9a296ff90983985f99c380f7  ibm-plex-mono-latin-400-normal.woff2
 *     6bc0f226a5b7884a8170e3f62c63d7675609d4631bdc5931b5cdab81821f00eb  ibm-plex-mono-latin-ext-400-normal.woff2
 *     01d285447409c8a588692162439a038b8cbd7871309ee20267b0d2d91c6e8e22  ibm-plex-mono-latin-500-normal.woff2
 *     6bb06407c97584b0867a959e05e8874693bfeb8c317de190811c51598f2d99ea  ibm-plex-mono-latin-ext-500-normal.woff2
 *   To upgrade: re-fetch from the pinned path with the new version and
 *   refresh this list (the files are not covered by the CI trivy gate).
 *
 * Only latin and latin-ext subsets, only the weights the landing uses:
 * Space Grotesk 700 (display), IBM Plex Sans 400/600 (body),
 * IBM Plex Mono 400/500 (labels). woff2 only — universally supported since
 * 2016; older browsers fall back to the system stacks declared in
 * landing.css.
 *
 * Body copy has no 500 weight on purpose (ARQ-1343): with 400 and 600
 * declared, a rule asking for 500 renders 400, so landing.css asks for 400
 * where it wants the regular face. Two more woff2 for three small labels do
 * not pay for their bytes.
 *
 * Fallback metrics (ARQ-1343). With font-display: swap the page first paints
 * in a local face and reflows when the web face arrives; the hero lockup
 * stretches its cota to the wordmark's width, so the reflow moves the largest
 * element on screen. Each "<family> Fallback" face below is a local font
 * rescaled to the web face's average width and vertical metrics, so the swap
 * changes glyph shapes but not the line box. The stacks in landing.css list
 * each one right after its web face.
 *
 *   Inputs, read with fontTools 4.60 from the vendored latin woff2 files and
 *   from the macOS Supplemental fonts; vertical metrics are OS/2 typo (every
 *   web face sets USE_TYPO_METRICS), unitsPerEm = 1000 for all web faces:
 *     face                 ascent  descent  gap  avgWidth | local face   avgWidth
 *     Space Grotesk 700      984     -292    0   0.5073  | Arial Bold   0.5006
 *     IBM Plex Sans 400     1025     -275    0   0.4682  | Arial        0.4667
 *     IBM Plex Sans 600     1025     -275    0   0.4830  | Arial Bold   0.5006
 *     IBM Plex Mono 400/500 1025     -275    0   0.6000  | Courier New  0.6001
 *   avgWidth = advance width per em, averaged over a-z weighted by Portuguese
 *   letter frequency plus the space at 18% (the landing copy is pt-BR).
 *   size-adjust     = avgWidth(web) / avgWidth(local)
 *   ascent-override = ascent / unitsPerEm / size-adjust (same for descent, gap)
 *   Liberation Sans/Mono share Arial's and Courier New's metrics, so the same
 *   numbers hold on Linux and Android. If no listed local face exists the
 *   fallback face is skipped and the stack behaves as it did before.
 */

/* ========== Space Grotesk — display / headings ========== */
@font-face {
  font-family: 'Space Grotesk';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url('/fonts/space-grotesk-latin-ext-700-normal-a3fe6f980acc6ce3304e31cd22e91e55.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: 'Space Grotesk';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url('/fonts/space-grotesk-latin-700-normal-f9e147a59a9381b7db65941ceac88e52.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;
}

/* ========== IBM Plex Sans — body / UI ========== */
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('/fonts/ibm-plex-sans-latin-ext-400-normal-1bc0d8e41d21907cd701092bff9301c0.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: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('/fonts/ibm-plex-sans-latin-400-normal-77bc026706571f32f04889dae5e7e5b2.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: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url('/fonts/ibm-plex-sans-latin-ext-600-normal-8fccbdf5bf67eb16ddccb196a87e6d2f.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: 'IBM Plex Sans';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url('/fonts/ibm-plex-sans-latin-600-normal-196e3cbc5fee6ac2587c6bb72eac7f6b.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;
}

/* ========== IBM Plex Mono — labels / numbers ========== */
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('/fonts/ibm-plex-mono-latin-ext-400-normal-8450d5944de23c9274ea801ad60fe5d8.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: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url('/fonts/ibm-plex-mono-latin-400-normal-79936b18df9f734fb6b0a256b20d36b4.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: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url('/fonts/ibm-plex-mono-latin-ext-500-normal-fa8d8838b94a5b1388a12c5d6cad6500.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: 'IBM Plex Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url('/fonts/ibm-plex-mono-latin-500-normal-b1c8a895f5fd3fe6cbf5b4cf95c58d87.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;
}

/* ========== Metric-matched fallbacks (ARQ-1343) — see the header ========== */
@font-face {
  font-family: 'Space Grotesk Fallback';
  font-style: normal;
  font-weight: 700;
  src: local('Arial Bold'), local('Arial-BoldMT'), local('Liberation Sans Bold'), local('LiberationSans-Bold');
  size-adjust: 101.35%;
  ascent-override: 97.09%;
  descent-override: 28.81%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'IBM Plex Sans Fallback';
  font-style: normal;
  font-weight: 400;
  src: local('Arial'), local('ArialMT'), local('Liberation Sans'), local('LiberationSans');
  size-adjust: 100.33%;
  ascent-override: 102.17%;
  descent-override: 27.41%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'IBM Plex Sans Fallback';
  font-style: normal;
  font-weight: 600;
  src: local('Arial Bold'), local('Arial-BoldMT'), local('Liberation Sans Bold'), local('LiberationSans-Bold');
  size-adjust: 96.49%;
  ascent-override: 106.22%;
  descent-override: 28.50%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'IBM Plex Mono Fallback';
  font-style: normal;
  font-weight: 400 500;
  src: local('Courier New'), local('CourierNewPSMT'), local('Liberation Mono'), local('LiberationMono');
  size-adjust: 99.98%;
  ascent-override: 102.52%;
  descent-override: 27.50%;
  line-gap-override: 0%;
}
