/* =====================================================================
   assets/css/fonts.css (B5.5, D31/D32/D33)
   @font-face de las fuentes alojadas (Oswald v57 variable, IBM Plex Sans
   Condensed 2.0.0) y sus fallbacks con métricas ajustadas. Las url() son
   relativas a esta hoja: resuelven a BASE_PATH/assets/fonts/… en cualquier
   entorno (C1) y coinciden exactamente con el preload de includes/head.php
   (C8: mismo href, sin asset() y sin ?v=).
   Orden de carga (includes/head.php): tokens.css → fonts.css → app.css.
   ===================================================================== */
@font-face {
  font-family: "Oswald";
  src: url("../fonts/oswald/oswald-v57-latin-wght.woff2") format("woff2");
  font-weight: 200 700;
  font-style: normal;
  font-display: swap;
  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: "IBM Plex Sans Condensed";
  src: url("../fonts/ibm-plex-sans-condensed/IBMPlexSansCondensed-Regular-Latin1-v2.0.0.woff2") format("woff2");
  font-weight: 400; font-style: normal; font-display: swap;
  unicode-range: U+0000, U+000D, U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
}
@font-face {
  font-family: "IBM Plex Sans Condensed";
  src: url("../fonts/ibm-plex-sans-condensed/IBMPlexSansCondensed-Italic-Latin1-v2.0.0.woff2") format("woff2");
  font-weight: 400; font-style: italic; font-display: swap;
  unicode-range: U+0000, U+000D, U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
}
@font-face {
  font-family: "IBM Plex Sans Condensed";
  src: url("../fonts/ibm-plex-sans-condensed/IBMPlexSansCondensed-Thin-Latin1-v2.0.0.woff2") format("woff2");
  font-weight: 100; font-style: normal; font-display: swap;
  unicode-range: U+0000, U+000D, U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
}
/* D32 = sí */
@font-face {
  font-family: "IBM Plex Sans Condensed";
  src: url("../fonts/ibm-plex-sans-condensed/IBMPlexSansCondensed-SemiBold-Latin1-v2.0.0.woff2") format("woff2");
  font-weight: 600; font-style: normal; font-display: swap;
  unicode-range: U+0000, U+000D, U+0020-007E, U+00A0-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2013-2014, U+2018-201A, U+201C-201E, U+2020-2022, U+2026, U+2030, U+2039-203A, U+2044, U+20AC, U+2122, U+2212, U+FB01-FB02;
}

/* Fallbacks métricos (reducen el salto de maquetación del swap). Medidos con
   Canvas 2D measureText (fontBoundingBoxAscent/Descent, ancho de una cadena
   de referencia con acentos, mayúsculas y dígitos) contra los woff2 ya
   alojados arriba, no contra la primera pasada de PLAN.md 3.4.2: verificado
   que con estos valores el ancho, el ascent y el descent de "Arial
   Bold"/"Arial" reescalado coinciden con los de Oswald/Plex con una
   diferencia menor al 0,01 % (objetivo del plan: ±0,5 %).
   ascent-override/descent-override están pre-divididos por size-adjust,
   porque el override se aplica sobre la fuente ya reescalada. */
@font-face { font-family: "Titulos Fallback"; src: local("Arial Bold"), local("Arial-BoldMT"); font-weight: 700;
             size-adjust: 82.01%; ascent-override: 145.5%; descent-override: 35.36%; line-gap-override: 0%; }
@font-face { font-family: "Titulos Fallback"; src: local("Arial"), local("ArialMT"); font-weight: 400 600;
             size-adjust: 81.19%; ascent-override: 146.98%; descent-override: 35.72%; line-gap-override: 0%; }
@font-face { font-family: "Cuerpo Fallback"; src: local("Arial"), local("ArialMT");
             size-adjust: 88.05%; ascent-override: 116.62%; descent-override: 31.42%; line-gap-override: 0%; }
/* En Android no hay Arial: se usa sans-serif. Donde no se soporten los overrides se ignoran sin romper nada. */
