/* ═══════════════════════════════════════════════════════════════════════════
   Campus — LA LETRA DEL INTERIOR, servida desde este dominio (30-sep-2026).
   Sólo @font-face: ni tokens, ni clases, ni un color. La enlazan, con
   APP_URL . '/' . asset_url('assets/fuentes.css'), includes/header.php (todo
   el interior y la app Android, que carga el servidor) y las cinco páginas
   legales: terms, trust, sla, security y status.

   ☠️ POR QUÉ EXISTE. Esas páginas pedían Inter a fonts.googleapis.com, y cada
      carga le entregaba a Google la IP del visitante —alumnos menores,
      familias, docentes— sin que privacy.php lo declare (Ley 29733). Los
      .woff2 de aquí son el MISMO build que servía Google, Inter v20
      «Version 4.001;git-66647c0bb» con el eje wght 100-900 (lo lee fontTools
      en los cuatro): el cambio es de ORIGEN, no de letra. Guarda:
      tests/Unit/FuentesDeTercerosEnLoServibleTest.php.

   ☠️☠️ `font-weight: 400 800` Y NO `100 900`, AUNQUE EL FICHERO LLEGUE A 900.
      Google servía una cara por peso PEDIDO (400;500;600;700;800), así que un
      `font-weight: 900` del interior —cientos en el repo; los lista
      `git grep -nE 'font-weight[[:space:]]*:[[:space:]]*900'`, sin una cifra
      que envejezca— se pinta HOY como 800 (ExtraBold), y lo mismo un 300
      como 400. Con el rango 400-800 el navegador hace exactamente eso; con
      100-900 esos 900 pasarían a Black y se vería. Medido en Chrome, píxel a
      píxel, EN REPOSO. En movimiento no es idéntico: donde una transición
      anima el peso (`.tab{transition:all .2s}`, 600→700 en .tab.active) las
      caras de Google SALTABAN a 700 y el rango interpola los pesos intermedios
      durante 200 ms. Aceptado: dura lo que la transición. Ampliar el rango es
      una decisión de DISEÑO aparte, no una limpieza:
      tests/Unit/HojaDeFuentesInterfazTest.php lo fija.

   📣 EL GRIEGO (Σ en las notas MYP/CP, Δ en comparativos y en el laboratorio)
      vive en sus propios subconjuntos, como en Google, y SÓLO se descargan en
      una página que tenga un carácter de su unicode-range: quien no escribe
      griego no paga ni un byte. Nombre con la versión (inter-v20-…): /assets
      se sirve `immutable` un año, y un fichero que cambie de contenido tiene
      que cambiar de nombre. Cirílico y vietnamita NO se traen (decisión del
      dueño, 30-sep): caen a la letra del sistema, carácter a carácter. Ojo:
      el vietnamita de Google traía también las marcas combinantes U+0300,
      U+0301, U+0303, U+0309 y U+0323, y el cirílico U+0301 y el №. Esas
      marcas están en el cmap del latin pero no en su unicode-range (el №, ni
      en el cmap): el español en NFD se pinta igual (se compone al precompuesto;
      medido), y un № o un nombre cirílico que llegue de la BD, con la letra
      del sistema.

   ⚠️ ORDEN = el de Google (griego-ext, griego, latin-ext, latin): ante dos
      caras con el mismo carácter gana la ÚLTIMA declarada, y así latin gana a
      latin-ext en U+0304/0308/0329, como hoy.

   ⚠️ `url('fonts/…')` RELATIVA a esta hoja, nunca `/edu/assets/…`: staging se
      sirve SIN /edu y la ruta absoluta cae a la letra del sistema con HTTP 200
      y cero líneas de log (el fallo que describe assets/campus-brand.css).

   ⚖️ LICENCIA: SIL Open Font License 1.1, en assets/fonts/LICENSE.txt (la OFL
      exige que viaje con los ficheros).
   ═══════════════════════════════════════════════════════════════════════════ */

/* greek-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('fonts/inter-v20-greek-ext.woff2') format('woff2');
  unicode-range: U+1F00-1FFF;
}
/* greek */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('fonts/inter-v20-greek.woff2') format('woff2');
  unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
}
/* latin-ext */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('fonts/inter-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;
}
/* latin */
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('fonts/inter-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;
}
