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.
24 lines
692 B
TypeScript
24 lines
692 B
TypeScript
import type { Config } from '@/types.ts';
|
||
import packageJson from './package.json';
|
||
|
||
const config: Config = {
|
||
defaultLanguage: 'en',
|
||
enabledLanguages: ['ca', 'da', 'en', 'es', 'eu', 'fi', 'fr', 'gl', 'nb', 'sv', 'sl'],
|
||
baseUrl: import.meta.env.PUBLIC_BASE_URL || '/',
|
||
apiBaseUrl: import.meta.env.PUBLIC_API_URL || '/api',
|
||
pollingInterval: import.meta.env.PUBLIC_POLLING_INTERVAL || 5000,
|
||
clientInfo: {
|
||
version: packageJson.version,
|
||
id: 'Zonemaster-GUI',
|
||
},
|
||
siteInfo: {
|
||
email: 'contact@zonemaster.net',
|
||
siteName: '',
|
||
},
|
||
setTitle(title: string) {
|
||
return `${title} – Zonemaster`;
|
||
}
|
||
};
|
||
|
||
export default config;
|