/* DM Sans — variable font, weights 300–700 */
@font-face {
  font-family: 'DM Sans';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url('/fonts/dm-sans-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: 'DM Sans';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url('/fonts/dm-sans-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;
}

/* Syne — variable font, weights 400–800 */
@font-face {
  font-family: 'Syne';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('/fonts/syne-greek.woff2') format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
@font-face {
  font-family: 'Syne';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('/fonts/syne-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: 'Syne';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('/fonts/syne-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;
}

/* 'Syne G' -- one glyph, the g (RDDW-134, redrawn RDDW-142). Syne's
   lowercase g ends in a cut stub at the heavy weights; on a phone it reads
   as half a letter ("Satisfying", "games", "Drag"). Syne has no alternate
   g (no ss/cv/salt feature changes it), so every Syne stack names 'Syne G'
   first: it covers U+0067 only, and every other character falls through
   to 'Syne'.
   RDDW-134 took the g from DM Sans (<=700) and Rubik (800). Both are drawn
   at normal width, so beside Syne's extended letters the g looked narrow
   and foreign (Daniel's iPhone, 26 Sep 2026: "weird, doesn't match").
   Since RDDW-142 it is the g of Anybody (Etcetera Type Co., SIL OFL 1.1)
   at width 125%: an extended grotesque whose g is as wide and as heavy as
   Syne's a/e/s and ends in a full round hook. The file is the Google Fonts
   one-glyph subset (Anybody v13, text=g, wdth 125, wght 400-800), 1.6 KB,
   loaded only where a Syne g is on screen. */
/* The size follows Syne's weight (measured 26 Sep 2026 at 100 px): Syne's
   x-height is 51 at every weight, Anybody's g stands 60 tall. Under 750 --
   the 700 headings ("Danger zone", "Satisfying Physics") -- Syne's letters
   are ~64 wide and the g was 75: size-adjust 85% makes it 51 tall, 64 wide,
   with a 20-unit descender like Syne's p and q. At 800 Syne widens to ~100
   and the g keeps its full size (the home hero). One file, two faces. */
@font-face {
  font-family: 'Syne G';
  font-style: normal;
  font-weight: 400 749;
  font-stretch: 125%;
  font-display: swap;
  size-adjust: 85%;
  src: url('/fonts/syne-g-anybody.woff2') format('woff2');
  unicode-range: U+0067;
}
@font-face {
  font-family: 'Syne G';
  font-style: normal;
  font-weight: 750 800;
  font-stretch: 125%;
  font-display: swap;
  src: url('/fonts/syne-g-anybody.woff2') format('woff2');
  unicode-range: U+0067;
}

/* ==========================================================================
   Hebrew faces (RDDW-43).

   Syne and DM Sans carry no Hebrew glyphs at all, so every Hebrew string
   fell back to whatever face the visitor's device shipped, and a mixed line
   ("RDD-Labs הוא סטודיו") set the Latin in DM Sans beside Hebrew in a
   system face. Rubik (display) and Heebo (body) were both drawn with Hebrew
   as a first-class script and ship a matched Latin, so under dir="rtl" the
   whole page -- Latin runs included -- switches to them and no line shows a
   seam. The brand wordmarks stay in Syne on purpose (see controls.css).

   Both are variable and SIL OFL, self-hosted like the faces above, and split
   by unicode-range: an English visitor downloads none of these, a Hebrew
   visitor downloads the two Hebrew subsets plus the Latin ones actually
   used on the page. Files are the Google Fonts static subsets
   (Rubik v31, Heebo v28).
   ========================================================================== */

/* Rubik — variable, weights 300–900 */
@font-face {
  font-family: 'Rubik';
  font-style: normal;
  font-weight: 300 900;
  font-display: swap;
  src: url('/fonts/rubik-hebrew.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: 300 900;
  font-display: swap;
  src: url('/fonts/rubik-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;
}

/* Heebo — variable, weights 100–900 */
@font-face {
  font-family: 'Heebo';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/fonts/heebo-hebrew.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: 'Heebo';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('/fonts/heebo-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;
}

/* Lilita One -- the game's own display face (Assets/Resources/Fonts/LilitaOne.ttf in the game
   project), SIL Open Font License. Used by the v2 design for headings and buttons. Latin only;
   its Hebrew comes from the Fredoka SemiBold face declared below under the same family name. */
@font-face {
  font-family: 'Lilita One';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/lilita-one-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: 'Lilita One';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/lilita-one-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;
}

/* Hebrew inside 'Lilita One': Fredoka fixed at SemiBold (600), a static instance of the file below
   (fontTools varLib.instancer, wght=600). Lilita One has no Hebrew, so without this every Lilita
   heading and button fell back to whatever came next in its stack, at weight 400 -- thin, and on
   the pages that load controls.css it was Rubik. With it, any text set in Lilita One draws its
   Hebrew in round SemiBold Fredoka and its Latin in Lilita One, whatever the page direction.
   (fonts-5.css plus this face; /fonts is immutable, so the file is renamed on every change.) */
@font-face {
  font-family: 'Lilita One';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/fredoka-hebrew-600.woff2') format('woff2');
  unicode-range: U+0590-05FF, U+20AA, U+FB1D-FB4F;
}

/* Fredoka (variable, weights 300-700), SIL OFL -- the Hebrew display face of the v2 design: round and
   friendly like Lilita One, which has no Hebrew. Hebrew subset only; Latin text stays in Lilita One. */
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 300 700;
  font-display: swap;
  src: url('/fonts/fredoka-hebrew.woff2') format('woff2');
  unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
}
