/* Self-hosted: Source Serif 4 (display) + Source Sans 3 (text). One WOFF2 per face, covering
   latin and latin-ext together: Slovak needs both halves (á é í ó ú ý ô ä are latin, č ď ĺ ľ ň ŕ š ť ž
   are latin-ext), so the split Google Fonts serves would only ever mean two requests for one face.
   Five faces: serif 600, serif 500 italic, sans 400, sans 400 italic, sans 600. Both families sit
   within a few percent of Georgia and Arial in width and x-height, so the page does not jump when
   they arrive; the "Fallback" faces below scale the local Georgia / Noto Serif / Arial / Roboto to the
   same average advance width and vertical metrics, and `font-display: fallback` gives a short
   invisible window instead of a flash of the wrong shapes. Metrics measured on 2026-09-15
   (see tmp/plans/2026-09-15-typography-simplification.md).

   The rules between the @generated markers are written by tools/build-fonts.sh from the TTFs in
   assets/fonts/ttf/ — change that script, not the rules, and commit what it produces. The same run
   writes _app/templates/layout/_font-preload.html.twig, so a file name is never repeated by hand.

   The WOFF2 themselves are not part of this release: they sit at /fonts/ on the document root,
   shared by every release and installed once, so a deploy no longer changes their URLs and the
   year-long cache in .htaccess survives one. Each name is a content digest, which is what makes
   that safe and what lets this file — which cannot be templated — name them absolutely.
   See tmp/plans/2026-09-16-font-subset-merge.md and 2026-09-16-stable-font-path.md. */

/* @generated:fonts:start */
@font-face {
  font-family: 'Source Serif 4';
  font-style: normal;
  font-weight: 600;
  font-display: fallback;
  src: url(/fonts/source-serif-4-600-normal.06435234.woff2) format('woff2');
  unicode-range: U+0000-02CC, U+02CE-02D7, U+02DA, U+02DC-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2000-206F, U+20A0-20C0, U+2113, U+2122, U+2191, U+2193, U+2212, U+2215, U+2C60-2C7F, U+A720-A7FF, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Source Serif 4';
  font-style: italic;
  font-weight: 500;
  font-display: fallback;
  src: url(/fonts/source-serif-4-500-italic.9de0f7d6.woff2) format('woff2');
  unicode-range: U+0000-02CC, U+02CE-02D7, U+02DA, U+02DC-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2000-206F, U+20A0-20C0, U+2113, U+2122, U+2191, U+2193, U+2212, U+2215, U+2C60-2C7F, U+A720-A7FF, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Source Sans 3';
  font-style: normal;
  font-weight: 400;
  font-display: fallback;
  src: url(/fonts/source-sans-3-400-normal.3339fd46.woff2) format('woff2');
  unicode-range: U+0000-02CC, U+02CE-02D7, U+02DA, U+02DC-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2000-206F, U+20A0-20C0, U+2113, U+2122, U+2191, U+2193, U+2212, U+2215, U+2C60-2C7F, U+A720-A7FF, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Source Sans 3';
  font-style: italic;
  font-weight: 400;
  font-display: fallback;
  src: url(/fonts/source-sans-3-400-italic.ff2c8bb5.woff2) format('woff2');
  unicode-range: U+0000-02CC, U+02CE-02D7, U+02DA, U+02DC-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2000-206F, U+20A0-20C0, U+2113, U+2122, U+2191, U+2193, U+2212, U+2215, U+2C60-2C7F, U+A720-A7FF, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Source Sans 3';
  font-style: normal;
  font-weight: 600;
  font-display: fallback;
  src: url(/fonts/source-sans-3-600-normal.e11a577a.woff2) format('woff2');
  unicode-range: U+0000-02CC, U+02CE-02D7, U+02DA, U+02DC-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2000-206F, U+20A0-20C0, U+2113, U+2122, U+2191, U+2193, U+2212, U+2215, U+2C60-2C7F, U+A720-A7FF, U+FEFF, U+FFFD;
}
/* @generated:fonts:end */

/* ---- Metric-matched local fallbacks (used only until the web fonts are available) ----
   One fallback family per platform font, one face per style/weight the site uses, each calibrated
   separately: size-adjust = web-font average advance / fallback average advance over Slovak sample text;
   ascent/descent overrides = the web font's hhea ascent and descent (serif 1.036 / 0.335, sans 1.024 / 0.400)
   divided by that size-adjust. Georgia and Arial are measured through their metric twins Gelasio and
   Liberation Sans. Average width matches the line boxes and the typical line length; individual line breaks
   can still differ. Re-derive with tools/font-metrics.py whenever a font file changes. */
@font-face { font-family: 'Source Serif 4 Fallback'; font-style: normal; font-weight: 600;
  src: local('Georgia Bold'), local('Georgia-Bold');
  size-adjust: 93.9%; ascent-override: 110.3%; descent-override: 35.7%; line-gap-override: 0%; }
@font-face { font-family: 'Source Serif 4 Fallback Noto'; font-style: normal; font-weight: 600;
  src: local('Noto Serif Bold'), local('NotoSerif-Bold'), local('Droid Serif Bold'), local('DroidSerif-Bold');
  size-adjust: 95.3%; ascent-override: 108.7%; descent-override: 35.1%; line-gap-override: 0%; }
/* 500 italic: Georgia has no medium, so the regular italic stands in, scaled to the same width */
@font-face { font-family: 'Source Serif 4 Fallback'; font-style: italic; font-weight: 500;
  src: local('Georgia Italic'), local('Georgia-Italic');
  size-adjust: 98.9%; ascent-override: 104.7%; descent-override: 33.9%; line-gap-override: 0%; }
@font-face { font-family: 'Source Serif 4 Fallback Noto'; font-style: italic; font-weight: 500;
  src: local('Noto Serif Italic'), local('NotoSerif-Italic'), local('Droid Serif Italic'), local('DroidSerif-Italic');
  size-adjust: 95.8%; ascent-override: 108.1%; descent-override: 35.0%; line-gap-override: 0%; }

@font-face { font-family: 'Source Sans 3 Fallback'; font-style: normal; font-weight: 400;
  src: local('Arial'), local('ArialMT'), local('Helvetica'), local('Liberation Sans'), local('LiberationSans');
  size-adjust: 92.6%; ascent-override: 110.6%; descent-override: 43.2%; line-gap-override: 0%; }
@font-face { font-family: 'Source Sans 3 Fallback'; font-style: italic; font-weight: 400;
  src: local('Arial Italic'), local('Arial-ItalicMT'), local('Helvetica Oblique'), local('Liberation Sans Italic'), local('LiberationSans-Italic');
  size-adjust: 89.9%; ascent-override: 113.9%; descent-override: 44.5%; line-gap-override: 0%; }
@font-face { font-family: 'Source Sans 3 Fallback'; font-style: normal; font-weight: 600;
  src: local('Arial Bold'), local('Arial-BoldMT'), local('Helvetica Bold'), local('Liberation Sans Bold'), local('LiberationSans-Bold');
  size-adjust: 89.1%; ascent-override: 114.9%; descent-override: 44.9%; line-gap-override: 0%; }
@font-face { font-family: 'Source Sans 3 Fallback Roboto'; font-style: normal; font-weight: 400;
  src: local('Roboto'), local('Roboto-Regular');
  size-adjust: 93.5%; ascent-override: 109.6%; descent-override: 42.8%; line-gap-override: 0%; }
@font-face { font-family: 'Source Sans 3 Fallback Roboto'; font-style: italic; font-weight: 400;
  src: local('Roboto Italic'), local('Roboto-Italic');
  size-adjust: 93.4%; ascent-override: 109.7%; descent-override: 42.8%; line-gap-override: 0%; }
@font-face { font-family: 'Source Sans 3 Fallback Roboto'; font-style: normal; font-weight: 600;
  src: local('Roboto Bold'), local('Roboto-Bold');
  size-adjust: 94.7%; ascent-override: 108.1%; descent-override: 42.2%; line-gap-override: 0%; }
