Files
granja-infra 5cc7935b54 feat(zonemaster.es): modo oscuro de tres estados y arreglo real de "Ultimos analisis"
Modo oscuro
-----------
Selector de tres estados (automatico -> claro -> oscuro), no un interruptor
de dos: "automatico" es el estado de partida y sigue al sistema operativo
mientras no se toque. La eleccion explicita se guarda en localStorage y gana
sobre el sistema en ambos sentidos. Un script `is:inline` en el <head> aplica
`data-theme` antes del primer pintado, asi que no hay destello blanco.

Hubo que redefinir las RAMPAS de la paleta, no solo la capa semantica: casi
todos los componentes (cabecera, tarjeta del formulario, menu, pie, botones,
chips) leen `--color-palette-*` directamente, y tocando solo
`--color-background`/`--color-text` la cabecera y la tarjeta se quedaban en
lavanda claro sobre fondo oscuro. Las rampas de severidad son la excepcion
deliberada: de esas solo se invierten el tinte de fondo (-10) y el texto que
va encima (-90), porque los rellenos -30/-50/-70 son la senal de gravedad y
moverlos rompe el contraste del distintivo y el orden error < critico.

Cuatro excepciones se escriben como reglas de componente porque un mismo
token hace dos trabajos opuestos: texto sobre relleno amarillo, el chip de
filtro (que fijaba `background: white` a pelo), el selector de idioma (idem,
mas su flecha SVG incrustada con trazo oscuro) y el logotipo, que es un mapa
de bits en base64 dentro de un .svg y por tanto no tiene ningun `fill` que
redefinir -- se le da la vuelta con invert + hue-rotate, que conserva el tono
del corazon rosa y de la marca de afnic.

Verificado con un barrido automatico de contraste sobre 7 paginas x 2 temas:
0 elementos por debajo de 3:1. El tema claro queda byte a byte como estaba.

"Ultimos analisis"
------------------
Llevaba vacio desde siempre por una causa distinta de la que se creia. El
bloque lleva `define:vars`, lo que obliga a Astro a emitirlo como script
CLASICO en vez de como modulo; el `import.meta.env.BASE_URL` que tenia dentro
es entonces un error de sintaxis que aborta el fichero entero antes de la
primera linea, asi que el fetch nunca llegaba a ejecutarse.

El parche del 2026-09-15 (repartir copias del JSON a cada carpeta de idioma
desde el cron) atacaba un sintoma que no existia: el 404 de
/es/recent-scans.json era real, pero lo provocaba la comprobacion manual, no
la pagina. Quitadas las dos apariciones de `import.meta` del bloque, la lista
se pinta en los 11 idiomas leyendo la ruta absoluta /recent-scans.json, y el
reparto por idioma ya no hace falta.
2026-09-21 21:52:45 +02:00
..