Design tokens: decisiones con nombre

Es fácil reducir los design tokens a un detalle técnico: variables que guardan colores y tamaños. Pero esa lectura se pierde lo esencial. Un token es una decisión de diseño con un nombre estable.

La diferencia está en el nombre. #1a1a1a es un dato. color-text-primary es una decisión: este es el color con el que hablamos con el usuario en primer plano. El valor puede cambiar; la decisión permanece.

Tres capas, tres responsabilidades

Un sistema de tokens sano suele organizarse en capas, y cada una responde a una pregunta distinta:

  1. Primitivos¿qué valores existen? Una paleta cruda: gray-900, blue-500, space-4. No tienen significado por sí solos.
  2. Semánticos¿qué significan? color-text-primary, color-surface, space-inset. Aquí vive la intención.
  3. De componente¿cómo se aplican aquí? button-background, card-padding. Atan la intención a un contexto concreto.

La regla que mantiene todo en orden es simple: una capa solo puede referirse a la anterior. Los componentes nunca apuntan a un primitivo directamente.

El beneficio real: el modo oscuro que no diseñaste dos veces

Cuando los componentes consumen tokens semánticos, el modo oscuro deja de ser un rediseño y se convierte en un remapeo:

:root {
  --color-surface: #ffffff;
  --color-text-primary: #1a1a1a;
}

@media (prefers-color-scheme: dark) {
  :root {
    --color-surface: #101010;
    --color-text-primary: #e9e9e7;
  }
}

Ningún componente cambió. Cambió lo que significan sus decisiones en un contexto distinto. Eso es un token haciendo su trabajo: absorber el cambio para que el resto no tenga que enterarse.