/* =========================================================================
   fonts.css — self-hosted webfonts

   ⛔ DO NOT replace this with a fonts.googleapis.com <link>.

   fonts.googleapis.com and fonts.gstatic.com are blocked in mainland China.
   The Google stylesheet is render-blocking, so on a blocked origin the browser
   waits on it before painting — and SinoUnited Health's own team, who review
   and approve this site, are in Shanghai. `display=swap` does not help: it
   governs the font FILES, not the stylesheet request.

   Self-hosting also removes a third-party transfer of every visitor's IP to
   Google, which privacy.html does not disclose (it discloses Analytics, at
   :240, but never the fonts).

   Subsets: latin + latin-ext only. Vietnamese, Greek and Cyrillic are
   deliberately not shipped — add them here if a patient story ever needs them.

   Generated from the Google Fonts CSS payload; regenerate rather than
   hand-editing. All three families are SIL OFL, which permits self-hosting.
   ========================================================================= */

/* =========================================================================
   METRIC-MATCHED FALLBACKS  `[12 Aug 2026]`

   font-display:swap below means text paints in a fallback first and re-lays
   out when the woff2 arrives. If the fallback has different metrics the line
   count changes and the page jumps: mobile CLS on /journey was 0.236, a fail,
   and 12 of the 15 points it had lost on PageSpeed. The hero standfirst
   measured 28px taller in fallback than in Source Sans 3 — everything below
   it moved.

   These faces are the same fallback fonts with their metrics overridden to
   match the real face, so the swap is invisible. `local()` only, so nothing
   is downloaded.

   🔴 ONE FACE PER WEIGHT AND STYLE, AND THAT IS THE WHOLE POINT.
   Arial ships a single upright weight; Source Sans 3 ships 300/400/500/600
   and each one advances differently. A single size-adjust calibrated at 400
   left the others wrong, and it was wrong in the direction that still moves
   text. Measured on /contact at 375px with one shared 88.71% face:

       weight 300   fallback ran 7.8% narrow
       weight 400   exact
       weight 500   fallback ran 1.5% narrow
       weight 600   fallback ran 3.0% narrow

   That still flipped two paragraphs on /contact by a line (-27px, -26px).
   ⛔ Do not collapse these back into one face.

   🔴 CALIBRATED ON PROSE, NOT ON AN ALPHABET. The first cut of this block
   measured average advance over [a-zA-Z .,!?], which weights every letter
   equally. Real copy is mostly e/t/a/o/n and spaces, and Arial's space is
   proportionally wider than Source Sans 3's — so the alphabet sample gave
   88.71% where the site's own prose gives 93.29%, a 5% error on the single
   most important number here. The corpus is ~3,900 characters of live page
   text.

   Method, 12 Aug 2026 — canvas measureText at 1000px, real font against
   real fallback, per weight and style:

     size-adjust      = advance(real, corpus) / advance(fallback, corpus)
     ascent-override  = fontBoundingBoxAscent(real) / (1000 × size-adjust)
     descent-override = fontBoundingBoxDescent(real) / (1000 × size-adjust)

   ⛔ Do not hand-tune these to "look right". Regenerate them the same way if
   a family, weight or style is ever added, or the fallback stops matching
   and the shift comes back silently.

   Arial and Times New Roman rather than system-ui because they are the only
   two that resolve predictably across Windows, macOS and the Liberation
   metric clones on Linux — including the headless Chrome that Lighthouse
   runs. Where neither resolves the face simply does not apply and the
   generic chain in base.css takes over, exactly as it did before.

   Atkinson Hyperlegible deliberately has no fallback face: it is used only
   by forms and the consent banner, and the banner is position:fixed, so
   neither can shift the document.
   ========================================================================= */

/* ---------- Source Sans 3 fallback — one per shipped weight ---------- */
@font-face {
  font-family: 'Source Sans 3 Fallback';
  font-weight: 300;
  src: local('Arial'), local('Helvetica'), local('Liberation Sans');
  size-adjust: 90.08%;
  ascent-override: 113.67%;
  descent-override: 44.40%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Source Sans 3 Fallback';
  font-weight: 400;
  src: local('Arial'), local('Helvetica'), local('Liberation Sans');
  size-adjust: 93.29%;
  ascent-override: 109.76%;
  descent-override: 42.88%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Source Sans 3 Fallback';
  font-weight: 500;
  src: local('Arial'), local('Helvetica'), local('Liberation Sans');
  size-adjust: 94.67%;
  ascent-override: 108.16%;
  descent-override: 42.25%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Source Sans 3 Fallback';
  font-weight: 600;
  src: local('Arial'), local('Helvetica'), local('Liberation Sans');
  size-adjust: 96.09%;
  ascent-override: 106.57%;
  descent-override: 41.63%;
  line-gap-override: 0%;
}

/* ---------- Cormorant Garamond fallback — upright and italic ----------
   Italic is not a rounding difference on this family: Cormorant's italic is
   a genuinely narrower drawing, so it calibrates to 88.22% against Times
   italic where the upright wants 97.10%. Every display heading on the site
   carries an <em>, so both are load-bearing. */
@font-face {
  font-family: 'Cormorant Garamond Fallback';
  font-style: normal;
  font-weight: 500;
  src: local('Times New Roman'), local('Times'), local('Liberation Serif');
  size-adjust: 97.10%;
  ascent-override: 95.16%;
  descent-override: 29.56%;
  line-gap-override: 0%;
}
@font-face {
  font-family: 'Cormorant Garamond Fallback';
  font-style: italic;
  font-weight: 500;
  src: local('Times New Roman'), local('Times'), local('Liberation Serif');
  size-adjust: 88.22%;
  ascent-override: 104.74%;
  descent-override: 32.53%;
  line-gap-override: 0%;
}

/* ---------- Atkinson Hyperlegible ---------- */
@font-face {
  font-family: 'Atkinson Hyperlegible';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('assets/fonts/atkinson-hyperlegible-400-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: 'Atkinson Hyperlegible';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('assets/fonts/atkinson-hyperlegible-400-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: 'Atkinson Hyperlegible';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('assets/fonts/atkinson-hyperlegible-700-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: 'Atkinson Hyperlegible';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('assets/fonts/atkinson-hyperlegible-700-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;
}

/* ---------- Cormorant Garamond ---------- */
@font-face {
  font-family: 'Cormorant Garamond';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url('assets/fonts/cormorant-garamond-500i-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: 'Cormorant Garamond';
  font-style: italic;
  font-weight: 500;
  font-display: swap;
  src: url('assets/fonts/cormorant-garamond-500i-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: 'Cormorant Garamond';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('assets/fonts/cormorant-garamond-500-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: 'Cormorant Garamond';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('assets/fonts/cormorant-garamond-500-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;
}

/* ---------- Source Sans 3 ---------- */
@font-face {
  font-family: 'Source Sans 3';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('assets/fonts/source-sans-3-300-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: 'Source Sans 3';
  font-style: normal;
  font-weight: 300;
  font-display: swap;
  src: url('assets/fonts/source-sans-3-300-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: 'Source Sans 3';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('assets/fonts/source-sans-3-400-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: 'Source Sans 3';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('assets/fonts/source-sans-3-400-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: 'Source Sans 3';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('assets/fonts/source-sans-3-500-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: 'Source Sans 3';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('assets/fonts/source-sans-3-500-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: 'Source Sans 3';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('assets/fonts/source-sans-3-600-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: 'Source Sans 3';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('assets/fonts/source-sans-3-600-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;
}
