/* Kova Media — self-hosted webfonts.

   The site loaded Fraunces, Jost and Caveat from fonts.googleapis.com on all 21
   pages: two extra DNS+TLS handshakes and a render-blocking stylesheet on the
   critical path of every page, plus a third party seeing every visitor's IP.
   That also sat oddly beside a Content-Security-Policy this strict.

   These are the LATIN subsets only (English-language site) of the VARIABLE
   fonts, so one file covers a whole weight range rather than one file per
   weight. 85KB total across three files, down from 172KB.

   SUBSET to the 95 printable-ASCII characters plus the 12 typographic marks
   the site actually renders (measured across every page, not guessed). The
   accented Latin-1 range this site never types was half the payload.

   The ITALIC face additionally has its optical-size axis PINNED at opsz 96,
   which alone took it from 80KB to 26KB. That is safe because Fraunces italic
   is only ever used above 30px here: the curved marquee (46-104px), the
   .script-accent display word (46-86px), and <em> inside h2/h3. Body copy is
   Jost, so an <em> in a <p> is a synthesised oblique and never touches this
   file. DO NOT restore the axis without re-checking that -- if italic is ever
   used at body size it will want the small-optical cut back.

   unicode-range is narrowed to match the files exactly, so the browser skips
   the download entirely for a character these subsets cannot serve, and the
   fallback stack renders it instead.

   font-display:swap keeps text readable while the face loads — never `block`,
   which would hide copy behind a font request and break the fail-open rule.

   size-adjust on the fallbacks makes the substitute metrically closer to the
   real face, so the swap does not shove the layout (CLS). */


@font-face{
  font-family:'Fraunces';
  font-style:italic;
  font-weight:300 700;
  font-display:swap;
  src:url('/assets/fonts/fraunces-italic-300_700.woff2') format('woff2');
  unicode-range:U+0020-007E, U+00A0, U+00A9, U+00B0, U+00B7, U+00D7, U+00F7, U+2013-2014, U+2018-201A, U+201C-201D, U+2026, U+2122;
}
@font-face{
  font-family:'Fraunces';
  font-style:normal;
  font-weight:300 900;
  font-display:swap;
  src:url('/assets/fonts/fraunces-normal-300_900.woff2') format('woff2');
  unicode-range:U+0020-007E, U+00A0, U+00A9, U+00B0, U+00B7, U+00D7, U+00F7, U+2013-2014, U+2018-201A, U+201C-201D, U+2026, U+2122;
}
@font-face{
  font-family:'Jost';
  font-style:normal;
  font-weight:300 700;
  font-display:swap;
  src:url('/assets/fonts/jost-normal-300_700.woff2') format('woff2');
  unicode-range:U+0020-007E, U+00A0, U+00A9, U+00B0, U+00B7, U+00D7, U+00F7, U+2013-2014, U+2018-201A, U+201C-201D, U+2026, U+2122;
}

/* Metric-matched fallbacks, shown for the moment before the real face lands.
   Without size-adjust the swap changes text width and shifts everything below
   it — which is precisely what CLS measures. */
@font-face{
  font-family:'Fraunces-fallback';
  src:local('Georgia'),local('Times New Roman');
  size-adjust:105%;
  ascent-override:95%;
  descent-override:25%;
}
@font-face{
  font-family:'Jost-fallback';
  src:local('Helvetica Neue'),local('Arial');
  size-adjust:98%;
  ascent-override:92%;
  descent-override:22%;
}
