Sistema de diseño

Sistema de diseño de los tableros

Los colores, la tipografía y los botones que usan todos los tableros. Está construido con los mismos archivos que un tablero real (css/tokens.css, css/componentes.css), así que lo que ves acá es exactamente lo que vas a obtener. Incluye también los componentes (filtros, avisos, pestañas), los gráficos y los mapas; para verlos todos juntos en un tablero, abrí muestra.html.

Modo claro / oscuro

Todos los tableros tienen los dos temas ya resueltos: siguen el modo del sistema operativo del visitante automáticamente, y además tienen el botón ◐ del header (arriba a la derecha) para elegirlo a mano — la elección queda guardada en ese navegador. Probalo ahora mismo con el botón de esta página. No hay que declarar nada por tablero: viene resuelto en css/tokens.css y js/tema.js.

Colores

Se definen en css/tokens.css. Para cambiar la estética, cambiá ahí los valores: se propagan a todo (modo oscuro incluido). Ya pasaron una auditoría de contraste (WCAG AA) — antes de tocar un color, leé ACCESIBILIDAD.md.

Marca y superficies

Colores complementarios

Reservados para cuando se sumen gráficos u otras categorías/etiquetas. Usalos siempre en orden: --serie-1, después --serie-2, etc.

Estados

Tipografía

Google Sans, la tipografía de la Dirección de Estadística. Un solo archivo variable, guardado en el repo (css/fuentes.css), cubre los pesos 400 a 700 — no se carga de internet. Si no llegara a cargar, el navegador sigue con la del sistema. Clases de tamaño en css/componentes.css.

Título XL.titulo-xl · 2rem / 700
Título L.titulo-l · 1.5rem / 700
Título M.titulo-m · 1.1rem / 600
Título S.titulo-s · 1.05rem / 600
Texto de párrafo normal. La base de lectura del tablero..texto · 1rem
Texto suave, para notas y aclaraciones..texto-suave
Texto chico, para pies y referencias..texto-chico
1.234.567.texto-numero · números alineados (tabular)

Botones

En un tablero se usan poco (filtros, "descargar datos"). Clase base .boton + una variante.

Para tableros con mapa: .boton--mapa (color de acento, para distinguirlo de la acción principal). Y para vaciar los filtros, un type="reset" con .boton--secundario.

Etiquetas de estado

En regla Con demora Vencido Sin datos

Barra de filtros

Contenedor .filtros con un .filtro por campo (<label for> + <select> o <input>) y los botones al final. Todos los controles miden lo mismo (--alto-control) y quedan alineados abajo. Nunca uses solo placeholder como etiqueta. "Limpiar filtros" es un type="reset"; si tus filtros se aplican por JS, escuchá el evento reset del formulario.

Avisos

Mensaje destacado dentro de la página: .aviso + --info, --ok, --alerta o --grave. El color va en el borde y el fondo; el texto queda en el neutro del tema y cada variante lleva su ícono, así no se depende solo del color. Con role="alert" los lectores de pantalla lo anuncian al instante (usalo en alerta y grave); con role="status" o role="note", sin interrumpir.

InformaciónLos datos se actualizan una vez por mes.

Todo en ordenLa carga de septiembre se completó sin observaciones.

AtenciónHay 3 áreas con datos incompletos; los totales pueden cambiar.

ErrorNo se pudo cargar la serie histórica.

Pestañas

Patrón ARIA de tabs: .pestanas[role="tablist"] con botones .pestana[role="tab"] y un .panel-pestana[role="tabpanel"] por cada uno. La activa lleva aria-selected="true" y se distingue por el subrayado y el peso de la letra, no solo por el color. Con el teclado: ←/→ cambian de pestaña (el JS lo resuelve cada tablero; ver js/muestra.js).

Contenido de la primera pestaña.

Estado vacío

Cuando una sección no tiene nada que mostrar (por ejemplo, un filtro sin resultados): .vacio con ícono decorativo, título, una línea que explique por qué y una acción sugerida. Para ocultarlo con hidden no hace falta nada más.

No hay datos para mostrar

No encontramos resultados con los filtros elegidos.

Saltar al contenido

Primer elemento del <body>: <a class="saltar-contenido" href="#contenido">Saltar al contenido</a>, y el <main id="contenido"> como destino. Está fuera de pantalla hasta que recibe el foco con Tab: probalo apretando Tab al cargar muestra.html. Permite a quien navega con teclado o lector de pantalla no recorrer el header en cada página.

Tarjetas de indicador

Para mostrar un número (mientras no haya gráficos, o junto a ellos más adelante). Clase .kpi, dentro de un contenedor .indicadores.

Trámites iniciados

1.840

en el semestre

Resueltos

1.512

82% del total

Gráficos

Se dibujan con Apache ECharts (guardado en js/vendor/, no se carga de internet) a través de js/graficos.js, que ya aplica la paleta --serie-1…8, la tipografía y el modo claro/oscuro. No se llama a echarts.init() directo: se usa Grafico.crear('#id', config). Estos son los tipos estándar de gráficos (el mapa va aparte, abajo); si hace falta otro, se suma a graficos.js para que todos los tableros lo tengan. El contenedor es un .grafico con role="img" y un aria-label que diga qué muestra. Acompañá cada gráfico con su dato en tabla o texto cuando importen los valores exactos.

Barras

tipo: 'barras' — comparar categorías

Barras horizontales

horizontal: true — nombres largos o rankings

Barras apiladas

apiladas: true — composición por categoría

Líneas

tipo: 'lineas' (+ area: true) — series en el tiempo

Dona

tipo: 'dona' — composición de un total, con pocas categorías

Mapas

Se dibujan con Leaflet (guardado en js/vendor/leaflet/) a través de js/mapa.js: Mapa.crear('#id', { geojson, propiedad, datos, unidad }). Es un mapa coroplético: cada polígono del GeoJSON se pinta según su valor, con la rampa de --serie-1, su nombre escrito encima, leyenda y tooltip, con un botón para ampliar el mapa a pantalla completa (Esc para volver) y un selector de capas para ocultar el mapa base, los sectores o los nombres (con detalle se suma una segunda línea de texto, por ejemplo las vecinales del sector). El mapa base es Argenmap (Instituto Geográfico Nacional), guardado en assets/mapa/: solo cubre la zona urbana de Río Cuarto (zoom 10 a 17) y no se pide a internet (Regla 3). El contenedor es un .mapa con role="region" y un aria-label; acompañalo con una tabla con los mismos datos, porque los polígonos no se recorren con el teclado.

Mapa coroplético

Los 8 sectores de la ciudad, con valores inventados, sobre Argenmap

Íconos

Material Symbols de Google, autoalojados (css/iconos.css) — no se cargan de internet. Buscá el que necesites en fonts.google.com/icons y usá su nombre tal cual, como texto: <span class="icono">home</span>.

home
search
download
filter_alt
info
calendar_month

Accesibilidad: el ícono solo (sin texto al lado) no dice nada por sí mismo. Siempre aria-hidden="true" en el ícono, y si va solo dentro de un botón o link, aria-label="lo que hace" en el elemento que lo contiene — ver css/iconos.css.

Objetivos de Desarrollo Sostenible (ODS)

Íconos oficiales de la ONU, guardados en assets/img/ods/ — no se cargan de internet. Usalos si tu tablero muestra el avance de un programa vinculado a algún objetivo. No se pueden recolorear ni deformar — ver assets/img/ods/LEEME.md antes de usarlos.

ODS 1: Fin de la pobreza1. Fin de la pobreza
ODS 2: Hambre cero2. Hambre cero
ODS 3: Salud y bienestar3. Salud y bienestar
ODS 4: Educación de calidad4. Educación de calidad
ODS 5: Igualdad de género5. Igualdad de género
ODS 6: Agua limpia y saneamiento6. Agua limpia y saneamiento
ODS 7: Energía asequible y no contaminante7. Energía asequible y no contaminante
ODS 8: Trabajo decente y crecimiento económico8. Trabajo decente y crecimiento económico
ODS 9: Industria, innovación e infraestructura9. Industria, innovación e infraestructura
ODS 10: Reducción de las desigualdades10. Reducción de las desigualdades
ODS 11: Ciudades y comunidades sostenibles11. Ciudades y comunidades sostenibles
ODS 12: Producción y consumo responsables12. Producción y consumo responsables
ODS 13: Acción por el clima13. Acción por el clima
ODS 14: Vida submarina14. Vida submarina
ODS 15: Vida de ecosistemas terrestres15. Vida de ecosistemas terrestres
ODS 16: Paz, justicia e instituciones sólidas16. Paz, justicia e instituciones sólidas
ODS 17: Alianzas para lograr los objetivos17. Alianzas para lograr los objetivos