/* Noor Studio Agency — self-hosted webfonts, and the fallback metrics
   that stop the swap from moving the page.

   WHY THIS FILE EXISTS
   --------------------
   The five families used to arrive from fonts.googleapis.com, which meant
   the browser had to fetch a stylesheet from one third-party origin before
   it could even discover the font files on a second (fonts.gstatic.com).
   That chain was the last render-blocking third party on the page, and the
   moment it resolved the text reflowed — Lighthouse attributed the one
   remaining layout shift on the homepage to `.nav-right`, which is nav
   links and a language button, i.e. text changing width under a new font.

   WHAT IS HERE
   ------------
   1. The real faces, self-hosted from /assets/fonts/. They are Google's
      own VARIABLE builds: asking for `wght@300..900` instead of
      `wght@300;400;500;600;700;800;900` returns one file per subset
      instead of seven, which is how five families fit in twelve files.
      The unicode-range lines are Google's, unchanged — they are what stops
      a French visitor ever downloading the latin-ext file.
      Only latin and latin-ext are shipped. Google also serves cyrillic,
      greek, vietnamese, math and symbol subsets for these families; this
      site is French and English.

   2. A metric-matched fallback face per family. `font-display:swap` shows
      the fallback first, and without this the swap resizes every line.
      size-adjust is MEASURED, not guessed: canvas measureText() on a
      sample of this site's own text, webfont against the generic family,
      in the same headless Chrome that Lighthouse drives. ascent/descent
      come from each font's OS/2 typo metrics (all six set
      USE_TYPO_METRICS), divided by that size-adjust.

      The honest caveat: the ratio is calibrated against whichever concrete
      font Chrome resolves `serif`/`sans-serif`/`monospace` to on the test
      platform. A visitor on Windows or macOS falls back to a different
      face, so the correction there is close rather than exact. It is still
      much better than no correction, and it is exact for the score.

   REGENERATING
   ------------
   scripts/build-fonts.mjs re-downloads the files and rewrites this file.
   It needs network access to fonts.googleapis.com and fonts.gstatic.com.
*/


/* ─── The real faces ─────────────────────────────────────────────── */

@font-face{
  font-family:'Bodoni Moda';
  font-style:italic;
  font-weight:400 500;
  font-display:swap;
  src:url('/assets/fonts/bodoni-moda-latin-italic.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:'Bodoni Moda';
  font-style:italic;
  font-weight:400 500;
  font-display:swap;
  src:url('/assets/fonts/bodoni-moda-latin-ext-italic.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:'Bodoni Moda';
  font-style:normal;
  font-weight:400 500;
  font-display:swap;
  src:url('/assets/fonts/bodoni-moda-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:'Bodoni Moda';
  font-style:normal;
  font-weight:400 500;
  font-display:swap;
  src:url('/assets/fonts/bodoni-moda-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:300;
  font-display:swap;
  src:url('/assets/fonts/cormorant-garamond-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:300;
  font-display:swap;
  src:url('/assets/fonts/cormorant-garamond-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:'Instrument Serif';
  font-style:italic;
  font-weight:400;
  font-display:swap;
  src:url('/assets/fonts/instrument-serif-latin-italic.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:'Instrument Serif';
  font-style:italic;
  font-weight:400;
  font-display:swap;
  src:url('/assets/fonts/instrument-serif-latin-ext-italic.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:'Inter Tight';
  font-style:normal;
  font-weight:300 900;
  font-display:swap;
  src:url('/assets/fonts/inter-tight-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 Tight';
  font-style:normal;
  font-weight:300 900;
  font-display:swap;
  src:url('/assets/fonts/inter-tight-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:'JetBrains Mono';
  font-style:normal;
  font-weight:400 500;
  font-display:swap;
  src:url('/assets/fonts/jetbrains-mono-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:'JetBrains Mono';
  font-style:normal;
  font-weight:400 500;
  font-display:swap;
  src:url('/assets/fonts/jetbrains-mono-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;
}

/* ─── Metric-matched fallbacks ───────────────────────────────────── */

@font-face{
  font-family:'Bodoni Moda Fallback';
  font-style:italic;
  src:local('Times New Roman'), local('Times'), local('Liberation Serif'), local('DejaVu Serif'), local('Georgia');
  size-adjust:105.06%;
  ascent-override:107.08%;
  descent-override:38.07%;
  line-gap-override:0.00%;
}
@font-face{
  font-family:'Bodoni Moda Fallback';
  font-style:normal;
  src:local('Times New Roman'), local('Times'), local('Liberation Serif'), local('DejaVu Serif'), local('Georgia');
  size-adjust:107.68%;
  ascent-override:104.47%;
  descent-override:37.15%;
  line-gap-override:0.00%;
}
@font-face{
  font-family:'Cormorant Garamond Fallback';
  font-style:normal;
  src:local('Times New Roman'), local('Times'), local('Liberation Serif'), local('DejaVu Serif'), local('Georgia');
  size-adjust:94.54%;
  ascent-override:97.73%;
  descent-override:30.36%;
  line-gap-override:0.00%;
}
@font-face{
  font-family:'Instrument Serif Fallback';
  font-style:italic;
  src:local('Times New Roman'), local('Times'), local('Liberation Serif'), local('DejaVu Serif'), local('Georgia');
  size-adjust:82.51%;
  ascent-override:119.99%;
  descent-override:37.57%;
  line-gap-override:0.00%;
}
@font-face{
  font-family:'Inter Tight Fallback';
  font-style:normal;
  src:local('Arial'), local('Helvetica Neue'), local('Helvetica'), local('Liberation Sans'), local('Roboto');
  size-adjust:95.45%;
  ascent-override:101.49%;
  descent-override:25.27%;
  line-gap-override:0.00%;
}
@font-face{
  font-family:'JetBrains Mono Fallback';
  font-style:normal;
  src:local('Courier New'), local('Liberation Mono'), local('DejaVu Sans Mono'), local('Menlo');
  size-adjust:99.98%;
  ascent-override:102.02%;
  descent-override:30.00%;
  line-gap-override:0.00%;
}
