/*
 * Rubik, self-hosted — one real file per weight.
 *
 * THIS FILE IS THE FIX FOR THE "BLURRY HEADER" REPORTS OF 2026-09-23, and the
 * reason it must not be replaced by a Google Fonts <link> again.
 *
 * `fonts.googleapis.com/css2?family=Rubik:wght@300;400;500;600;700` answers a
 * modern browser with FIVE @font-face rules that all point at the SAME file —
 * `iJWKBXyIfDnIV7nDrXyw023e1Ik.woff2`, the Rubik VARIABLE font — each rule
 * declaring one discrete `font-weight`. A single-value descriptor on a
 * variable face gives Safari no weight range to instance the `wght` axis
 * over, so every request above the font's default 400 instance is served the
 * 400 outlines and then SYNTHETICALLY emboldened: the glyph is stroked wider
 * and smeared, which is what "blurry" describes.
 *
 * It is measurable, and it was measured on the reporter's screenshot. In the
 * app header, on the same element, at device pixel ratio 3:
 *   - `text-[11px] font-normal`  — peak 165 (the exact CSS colour), a ONE
 *     pixel background-to-glyph transition. A real 400 face.
 *   - `text-base font-bold`      — peak 210 against an expected 251, and a
 *     FIVE pixel transition, isotropic. Synthetic bold.
 * The header's own 1px bottom border rendered as three crisp device pixels in
 * the same screenshot, so nothing was scaled or composited badly: only the
 * glyphs were soft, and only the bold ones. iOS renders the app's normal-
 * weight body text correctly, which is why the two areas that are ENTIRELY
 * bold — the header and the bottom bar — were the two the user reported.
 *
 * Safari's behaviour here is documented, not a guess: a variable face whose
 * @font-face carries no usable weight range gets faux-bolded, and the fix is
 * a descriptor that matches the file. Rather than declare a range over a
 * variable font and depend on every browser instancing the axis the same way,
 * these are the STATIC per-weight instances — the same ones Google serves to
 * a browser without variable-font support, four genuinely different files per
 * subset. A descriptor that matches its file exactly leaves synthesis with
 * nothing to do, in any engine.
 *
 * Self-hosting is the other half. An installed PWA that cannot reach
 * fonts.gstatic.com has no face at all and falls back to the platform font,
 * which is a second, indistinguishable way for the app to look wrong on a
 * phone and right on a desktop. These files ship with the build, so there is
 * no third party in the render path — and `font-src`/`style-src` in the CSP
 * are back to 'self' because of it.
 *
 * Files come from Google Fonts (SIL Open Font License 1.1, OFL.txt beside
 * them). `unicode-range` is theirs unchanged, so a Hebrew screen still
 * downloads only the ~5 kB Hebrew subset per weight. Weight 300 is not here:
 * nothing in the app asks for it.
 *
 * Linked by index.html, form.html, install.html and diag.html — every page
 * this project serves, bundled or static, reads its faces from this one file.
 */

/* ---- 400 ---- */
@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/rubik-hebrew-400.woff2") format("woff2");
  unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
}
@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/rubik-latin-400.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: "Rubik";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/fonts/rubik-latin-ext-400.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;
}

/* ---- 500 ---- */
@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("/fonts/rubik-hebrew-500.woff2") format("woff2");
  unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
}
@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("/fonts/rubik-latin-500.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: "Rubik";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("/fonts/rubik-latin-ext-500.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;
}

/* ---- 600 ---- */
@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/fonts/rubik-hebrew-600.woff2") format("woff2");
  unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
}
@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/fonts/rubik-latin-600.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: "Rubik";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/fonts/rubik-latin-ext-600.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;
}

/* ---- 700 ---- */
@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/rubik-hebrew-700.woff2") format("woff2");
  unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
}
@font-face {
  font-family: "Rubik";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/rubik-latin-700.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: "Rubik";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/fonts/rubik-latin-ext-700.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;
}
