AKRIBIS GroupBrand
Sistema digital
3.1

Tokens

Propuesto

¿Qué valores define el sistema, y cómo los recibe cada sitio?

Ya decidido

  • Los tokens de color existen y este sitio los consume: base.css (neutros, semánticos, firmas), un CSS por marca con su escala y sus funciones en claro y oscuro, all.css con todas las marcas bajo data-brand, y tokens.json en formato DTCG (ADR-0015).
  • Los tokens de tipografía existen y este sitio los consume: type.css con las fuentes, la escala, los interlineados, el tracking, la medida y las funciones (--type-…), y los grupos font y typography de tokens.json (ADR-0020, propuesta).
  • Los tokens de forma existen y este sitio se construye solo con ellos: shape.css con espaciado, radios, marcos, movimiento, foco y elevación, y los grupos space, radius, layout, motion, focus y elevation de tokens.json (ADR-0021, propuesta).

Especificación

  1. El contrato son propiedades CSS personalizadas: un sitio enlaza /tokens/base.css, /tokens/type.css, /tokens/shape.css y después /tokens/<marca>.css, y estiliza solo con las funciones (--color-page, --color-text, --color-accent…; font: var(--type-body)…), nunca con pasos crudos de la escala ni con tamaños propios.
  2. Un componente que muestra otra marca se envuelve en data-brand="<marca>" con all.css: las funciones se resuelven a esa marca dentro del elemento.
  3. Claro y oscuro: el CSS de cada marca trae ambos; todo sitio se muestra claro y el oscuro se activa solo a pedido, con data-theme="dark" en el elemento raíz, que pone el selector de tema y recuerda la cookie akribis-theme; nunca por la preferencia del sistema (ADR-0037, propuesta).
  4. tokens.json (DTCG) es la misma fuente para herramientas que no leen CSS.
  5. Forma (ADR-0021): el espaciado es un múltiplo de 0,25 rem (4 px), --space-1 a --space-24 (0,25 a 6 rem): 1–2 dentro de un control y entre una etiqueta y su valor; 3–4 dentro de un componente; 6–8 entre componentes; 12–20 entre secciones. Nada entre medio.
  6. Radios: 0 en superficies, tarjetas, tablas e imágenes (las esquinas ajustadas se leen precisas); 2 px en etiquetas y chips; 4 px en controles; 8 px en diálogos, menús y avisos; píldora en estados; redondo en avatares y puntos.
  7. Marcos: contenedor 80 rem, contenido 64 rem, columna de lectura 46 rem; margen lateral 1 rem, 2 rem desde md; 12 columnas con 1,5 rem de separación; puntos de quiebre sm 36, md 48, lg 64, xl 80 rem, siempre de móvil hacia arriba (solo min-width); objetivos interactivos de al menos 1,5 rem (24 px), controles de 2,75 rem (44 px) de alto; la barra primaria de un sitio, 3,25 rem (52 px).
  8. Movimiento: 120 ms para un cambio de estado (hover, foco), 200 ms para revelar (menús, tooltips, acordeones), 320 ms para mover (diálogos, paneles); curvas estándar cubic-bezier(0.2, 0, 0, 1) y salida cubic-bezier(0.4, 0, 1, 1). Con prefers-reduced-motion toda duración es 0.
  9. Foco: un anillo de 2 px en el acento, 2 px por fuera del elemento, en todo elemento interactivo; sobre un control relleno de acento, el anillo es on-accent y va por dentro del borde.
  10. Elevación: la estructura se dibuja con filetes de 1 px en --color-line y con bandas; la única sombra es para superposiciones (menús, diálogos, avisos) y nunca para tarjetas; capas raised 1, sticky 10, overlay 100, toast 1000.
  11. Este sitio se estiliza solo con estos tokens: el build falla ante un espaciado, radio, sombra, duración o punto de quiebre propio.

Para volver a razonar

  • Si alguna vez hace falta una segunda elevación con sombra, o sombras distintas en modo oscuro más allá de la opacidad.
  • Tailwind como capa opcional sobre las propiedades CSS.

Evidencia para auditar

  • brand/shape.yaml · brand/src/shape.ts · brand/test/shape.test.ts (the ladder, the files and the lint of this site's own CSS)
  • Draft 0.2 brandbook artifact (2 Oct 2026), section 08 Shape & motion: 4 px base, radii 2/4/6/8, hairlines and bands, one shadow for overlays, 2 px focus, 120/200/320 ms
  • This site's CSS before the tokens: 19 distinct gaps and paddings, four breakpoints (36, 40, 48, 56 rem), max-width queries
  • WCAG 2.2: 1.4.11 non-text contrast, 2.4.13 focus appearance, 2.5.8 target size, 2.3.3 animation from interactions
  • AKRIBIS-Group/design@main · brand/tokens/, packages/theme/
  • Token files of akribis_info, akribis_one, akiot_es, akleia_info, solfarma_com

Entrega

  • tokens.json
  • base.css
  • type.css
  • shape.css y un archivo CSS por marca.

Decisión

Figuras

Los tokens, publicados en cada build: base.css (neutros, semánticos, firmas), un CSS por marca con escala y funciones en claro y oscuro, all.css con todas las marcas bajo data-brand, y tokens.json en formato DTCG.

Espaciado múltiplos de 0,25 rem (4 px); nada entre medio

  • --space-1 · 0.25 rem · 4 px
  • --space-2 · 0.5 rem · 8 px
  • --space-3 · 0.75 rem · 12 px
  • --space-4 · 1 rem · 16 px
  • --space-5 · 1.25 rem · 20 px
  • --space-6 · 1.5 rem · 24 px
  • --space-8 · 2 rem · 32 px
  • --space-10 · 2.5 rem · 40 px
  • --space-12 · 3 rem · 48 px
  • --space-16 · 4 rem · 64 px
  • --space-20 · 5 rem · 80 px
  • --space-24 · 6 rem · 96 px

Radios

  • --radius-none · 0px
  • --radius-tag · 2px
  • --radius-control · 4px
  • --radius-dialog · 8px
  • --radius-pill · 999px
  • --radius-round · 50%

Marcos y retícula

Contenedor
80rem
Contenido
64rem
Columna de lectura
46rem
Margen lateral
--space-4 · md --space-8
Columnas
12 · separación --space-6
Puntos de quiebre (solo min-width)
sm 36rem · md 48rem · lg 64rem · xl 80rem
Objetivo mínimo
1.5rem · control 2.75rem

Movimiento pasá el cursor por una fila: el punto se mueve en su duración; con movimiento reducido, salta

  • --duration-state · 120 ms · estado: hover, foco
  • --duration-reveal · 200 ms · revelar: menús, tooltips, acordeones
  • --duration-move · 320 ms · mover: diálogos, paneles

--ease-standard: cubic-bezier(0.2, 0, 0, 1) · --ease-exit: cubic-bezier(0.4, 0, 1, 1) · con prefers-reduced-motion, 0 ms

Foco

BotónBotón · sobre acento, el anillo por dentro--focus-ring · 2px · offset 2px

Elevación

Superficie con filete--hairline 1px
Banda--color-band
Superposición: la única sombra--shadow-overlay · --radius-dialog

Capas (z-index): raised 1 · sticky 10 · overlay 100 · toast 1000

Los tokens de forma (ADR-0021): espaciado en múltiplos de 0,25 rem, radios ajustados, los marcos y los puntos de quiebre, tres duraciones que se anulan con movimiento reducido, el anillo de foco y las elevaciones: filetes y bandas dibujan la estructura; la única sombra es para superposiciones. Esta página se construye solo con ellos: el build falla ante un valor propio.