Trama: blanco, negro y un punto por medida

Un sistema de tokens CSS y pocos componentes. Todo se lee en los dos temas: el botón de la cabecera cambia entre claro y oscuro para comprobarlo.

  1. Principios
  2. Lo aprendido
  3. Marca
  4. Color
  5. Trama
  6. Contraste
  7. Tipografía
  8. Espacio, bordes y capas
  9. Componentes
  10. Dónde está cada cosa

Cómo se decide

Lo aprendido

Reglas que salen de errores reales de la web. Cada una dice qué hacer y por qué.

Marca

El nombre se escribe en Big Shoulders Display 900. La letra O es un punto macizo del color de la tinta.

Electosfera
Electosfera

Color

Cada muestra usa el token real: cambia con el tema. Debajo, el valor en claro y en oscuro.

Blanco y negro (el tema oscuro los invierte)

  • --color-paper#ffffff en claro, #000000 en oscuro
  • --color-ink#000000 en claro, #ffffff en oscuro
  • --color-ink-muted#3a3a3a en claro, #c8c8c8 en oscuro

El acento de la marca: amarillo con texto negro en los dos temas

  • --color-highlight#ffd23f
  • --color-on-highlight#000000

Acento (amarillo; una página de partido lo cambia por el color del partido)

  • --color-accent#ffd23f
  • --color-on-accent#000000

Marca (botón principal, esfera de la portada)

  • --color-brand#000000 en claro, #ffffff en oscuro
  • --color-on-brand#ffffff en claro, #000000 en oscuro

Fijos (iguales en los dos temas)

  • --color-fixed-light#ffffff
  • --color-fixed-dark#000000

Respuestas del juego «Sin siglas»

  • --color-answer-yes#1baf7a en claro, #199e70 en oscuro
  • --color-answer-no#eb6834 en claro, #d95926 en oscuro
  • --color-on-answer#000000

Los colores de partido no son tokens: llegan con los datos.

Trama

Puntos de la tinta en una celda de 7 px, en tres densidades. Se usan como fondo de barras, de casillas y de bloques. Los tokens son --trama-light, --trama-medium, --trama-dense y --trama-size.

Trama clara
Trama media
Trama densa

Contraste

Razón de contraste WCAG calculada con los tokens. Mínimo 4,5:1 en texto pequeño y 3:1 en texto grande en negrita.

UsoMínimoClaroOscuro
Texto principalink sobre paper4.50:121.00:1 ✓21.00:1 ✓
Texto secundario (se usa poco)ink-muted sobre paper4.50:111.37:1 ✓12.55:1 ✓
Texto invertido (etiqueta de categoría, botón principal)paper sobre ink4.50:121.00:1 ✓21.00:1 ✓
Texto del tooltip (fijo en los dos temas)fixed-light sobre fixed-dark4.50:121.00:1 ✓21.00:1 ✓
Texto sobre amarillo (banda, provincia elegida, hover)on-highlight sobre highlight4.50:114.54:1 ✓14.54:1 ✓
Texto sobre el acento por defectoon-accent sobre accent4.50:114.54:1 ✓14.54:1 ✓
Texto sobre la marcaon-brand sobre brand4.50:121.00:1 ✓21.00:1 ✓
Respuesta «Sí» del juegoon-answer sobre answer-yes4.50:17.46:1 ✓6.17:1 ✓
Respuesta «No» del juegoon-answer sobre answer-no4.50:16.56:1 ✓5.41:1 ✓

Cada superficie de partido calcula su color de texto (negro o blanco) con readableTextColor() ensrc/lib/color.ts, y el mapa de presencia oscurece o aclara el color hasta 3:1 conshiftForContrast().

Tipografía

Display

--font-display, Big Shoulders Display 900

Punto por punto

Titulares, siglas y cifras grandes. En mayúsculas, interlineado entre 0,88 y 0,9.

Texto

--font-body, Archivo 400, 600 y 700

Cada programa, descompuesto en sus medidas.

Cuerpo de texto, etiquetas y botones. Sin etiquetas pequeñas en mayúsculas.

Espacio, bordes y capas

Espacio

Rejilla de 4 px.

  • --space-1
  • --space-2
  • --space-3
  • --space-4
  • --space-5
  • --space-6
  • --space-7
  • --space-8

Bordes

Continuos y de esquinas cuadradas. Sin sombras.

--border-thick 3 px: cajas y controles
--border-fine 1,5 px: filas de listas y etiquetas de palanca

Capas: --z-raised, --z-sticky, --z-header, --z-dropdown, --z-tooltip, --z-skip-link.

Movimiento: --duration-fast, --duration-base, --duration-slow y --easing-out. Se desactiva con prefers-reduced-motion.

Componentes

Button

src/components/ui/Button.astro, variant: default | ink, size: md | sm

Enlace

El principal es de tinta con texto de papel. El secundario tiene un borde de 3 px. Con href es un enlace; sin él, un <button>. Con as="span" se dibuja igual dentro de otro enlace.

Tag

src/components/ui/Tag.astro, variant: default | ink | bold | highlight | party, size: sm | md | lg

Administración y gastoPlazo: 100 díasGasto e inversiónOficialEnlace pequeñoPP

La categoría va en tinta, el plazo con borde grueso y negrita, y las palancas y los colectivos con borde fino.

BlockChip

src/components/ui/BlockChip.astro, muestra de trama y texto, siempre juntos

0102 Economía030405 (repite el ciclo)

Panel y SectionHeading

src/components/ui/Panel.astro y src/components/ui/SectionHeading.astro

Este recuadro es un Panel con título y línea de apoyo. Los títulos de sección de esta página son SectionHeading.

BarList

src/components/charts/BarList.astro, una serie en trama; pasa el ratón por una barra

  1. VIVVivienda24
  2. SANSanidad y cuidados17
  3. EDUEducación9

Icon

src/components/ui/Icon.astro, rejilla de 20 × 20, trazo de 2,2 y puntas cuadradas

El icono toma el color del texto, así que sigue el hover del botón. Los puntos y bloques macizos usan la clase icon__dot. Un icono va siempre con su texto.

CategoryBars

src/components/charts/CategoryBars.astro, las categorías en una lista de barras

  1. Pensiones y cohesión social
  2. Vivienda
  3. Defensa

La barra es la parte de la categoría más grande; el número es la parte real del total. Cada fila es un enlace de 44 px o más.

Botones de opción

Grupos de botones con aria-pressed: orden, cámara, encuestadora, porcentaje o escaños

Botones pegados, con un solo borde entre ellos. El activo va en tinta con texto de papel; el hover, en amarillo.

Siglas con el color del partido

Menús, tarjetas de la portada y posturas de «Temas que dividen»

PPVOXERCBNG

Tooltip

src/components/ui/Tooltip.astro, cualquier elemento con data-tooltip

Pasa el ratón o enfoca este enlace

Se construye con tooltip(titulo, ...lineas) de src/lib/tooltip.ts. El globo usa colores fijos (--color-fixed-light sobre --color-fixed-dark), iguales en los dos temas, y el título es negro sobre amarillo. Si un texto se corta con puntos suspensivos, el tooltip muestra el texto completo sin data-tooltip.

Superficies de objeto

src/styles/objects.css, .box, .box--interactive, .trama, .grid, .container, .headline

Dónde está cada cosa