/* ============================================================================
   TIPOGRAFÍA DE AREA 51 — SERVIDA DESDE ACÁ, NO DESDE GOOGLE
   ----------------------------------------------------------------------------
   Hasta el 2026-08-22 las seis páginas pedían Outfit a fonts.googleapis.com en
   cada visita. Eso traía tres problemas:

     1. LA APP SIN SEÑAL SE VEÍA ROTA. Un service worker puede cachear lo que se
        sirve desde nuestro propio dominio; lo de un tercero, no de forma confiable.
        Sin la fuente, la app instalada se abría con la tipografía del sistema y
        parecía otra web. Era el segundo punto de las "tres cosas que hay que
        ordenar antes" de la propuesta que se le pasó a Kevin.
     2. DOS SERVIDORES MÁS EN EL CAMINO CRÍTICO. Cada visita hacía DNS + TLS +
        request contra fonts.googleapis.com (el CSS) y después otro tanto contra
        fonts.gstatic.com (el archivo). Los `preconnect` tapaban parte del costo,
        pero no lo sacaban.
     3. NO SE PODÍA PRECARGAR. Con la URL de Google, el navegador se entera de que
        necesita la fuente recién cuando termina de bajar y parsear el CSS remoto.

   OUTFIT ES UNA FUENTE VARIABLE, Y ESO CAMBIA LA CUENTA
   ----------------------------------------------------------------------------
   El sitio usa tres pesos: 300, 500 y 800. Parece que hicieran falta tres
   archivos, pero no: los tres salen del MISMO archivo. Google servía exactamente
   estos dos —uno por subset— repetidos en seis bloques @font-face.

   Por eso acá hay un solo @font-face por subset, con `font-weight: 100 900`: le
   dice al navegador que puede interpolar cualquier peso del archivo. Menos código,
   el mismo resultado, y si algún día se quiere usar un 600 no hay que bajar nada.

   POR QUÉ SIGUEN SIENDO DOS ARCHIVOS Y NO UNO
   ----------------------------------------------------------------------------
   `unicode-range` hace que el navegador baje un archivo SOLO si la página tiene
   algún carácter de ese rango. En la práctica el español entero entra en `latin`
   (á é í ó ú ñ ü ¿ ¡ están todos en U+0000-00FF), así que latin-ext casi nunca se
   pide: son 14 kB que están ahí por si un título de juego trae una "ō" o una "ł".

   Sacar latin-ext ahorraría esos 14 kB del repo, pero no ahorraría NADA de
   descarga —porque hoy tampoco se baja— y el día que aparezca un título raro se
   vería con la tipografía del sistema en el medio del catálogo.

   LICENCIA
   ----------------------------------------------------------------------------
   Outfit está bajo SIL Open Font License 1.1, que permite self-hosting. El texto
   completo está al lado, en OFL.txt. No se borra.

   SI HAY QUE ACTUALIZAR LA FUENTE
   ----------------------------------------------------------------------------
   Pedirle el CSS a Google con un user-agent moderno y bajar las URLs que devuelva:

     curl -A "Mozilla/5.0 ... Chrome/120" \
       "https://fonts.googleapis.com/css2?family=Outfit:wght@300;500;800&display=swap"

   Ojo: Google devuelve URLs distintas según el user-agent (woff2 para los
   modernos, ttf para los viejos). Con un UA viejo se bajan archivos que pesan el
   triple.
   ============================================================================ */

/* latin — cubre el español completo. Es el que se baja siempre. */
@font-face {
    font-family: 'Outfit';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url('outfit-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;
}

/* latin-ext — solo se baja si la página tiene un carácter de este rango. */
@font-face {
    font-family: 'Outfit';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url('outfit-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;
}

/* ============================================================================
   LA PILA MONOSPACE — DEL SISTEMA, SIN DESCARGA
   ----------------------------------------------------------------------------
   El sitio usa monospace en todos lados para el aire de terminal: códigos PSN,
   CBU, contadores, paneles de datos. Casi siempre con `monospace` a secas.

   'Roboto Mono' aparecía en DOS lugares y solo admin51.html la cargaba de Google:

     - admin51.html  .msg-feedback
     - main.js       el contador de "OFERTAS TERMINAN EN"

   El de main.js corre en index, catálogo, producto y búnker, que NUNCA cargaron
   Roboto Mono: ese contador ya venía cayendo al monospace del sistema desde
   siempre. O sea que la inconsistencia ya existía; traer la fuente entera del
   servidor de Google para un solo selector del panel la habría dejado igual de
   inconsistente, pero pagando la descarga.

   Se reemplaza por la pila del sistema, que arranca por la monospace de interfaz
   de cada plataforma: se ve mejor que Roboto Mono en pantalla, es instantánea, y
   saca el último pedido a Google que quedaba en el proyecto.
   ============================================================================ */
:root {
    --mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas,
            'Liberation Mono', monospace;
}
