Saltar al contenido

Color semántico

Beta

Los 105 roles que conectan las primitivas con los componentes — qué color usar, dónde y por qué.

Las primitivas responden qué colores existen. Los roles semánticos responden qué color va dónde. Un componente nunca dice Grey/6: dice border/default. Eso da tres cosas gratis:

  • Dark mode sin trabajo — el rol apunta a la misma primitiva en ambos temas y la primitiva cambia de valor. Cero condicionales.
  • Decisiones consistentes — todos los bordes de input son el mismo borde.
  • Cambios baratos — si mañana el hover tonal pasa de 4 a 5, se cambia en un lugar.

En Figma es la colección Semantic de 🌻 FDS Design Tokens. Cada variable tiene su descripción y su nombre de CSS en Dev Mode. En código, el mismo nombre es una variable CSS (--primary-subtle) y una utilidad de Tailwind (bg-primary-subtle).

Anatomía de un nombre

primary / subtle-hover
└─ rol ─┘ └── uso + estado ──┘

Hay dos familias de roles:

  1. Neutros por propiedad — bg/*, border/*, text/*, icon/*, focus/ring. Son el 90% de cualquier pantalla.
  2. Roles de color — primary, neutral, success, warning, danger, info. Los seis comparten exactamente los mismos 14 usos, así que un componente con prop color cambia de rol sin tocar su estructura.

Los 14 usos de un rol de color

UsoPasoPara qué
solid → solid-hover → solid-active9 → 10 → 11Fondo de máximo énfasis y sus estados.
on-solid—Texto e iconos sobre solid.
accent → accent-hover → accent-active9 → 10 → 11El color del rol en primer plano: label y borde de botones outline y text, links, iconos de acento. Garantiza 3:1 (UI y texto grande), no 4.5:1.
faint2Tinte mínimo: hover de outline, fila destacada.
subtle → subtle-hover → subtle-active3 → 4 → 5Fondo tonal y sus estados.
border6Borde sobre fondos faint / subtle.
border-strong8Borde que tiene que verse solo: outline, input inválido.
text11Texto e iconos de color sobre fondos claros.

Tres excepciones deliberadas: warning/accent usa Yellow 11 → 11 → 12 (el amarillo 9 no se lee como texto), neutral/solid usa Grey 12 → 11 → 10 (un sólido neutro tiene que ser casi negro, no gris medio), y warning/on-solid es Yellow/12, no blanco — el amarillo de marca es demasiado luminoso para texto blanco.

Pares seguros

Estas combinaciones cumplen contraste AA por construcción. Salirte de ellas significa pasar por el verificador.

FondoTexto / icono
bg/default, bg/subtle, bg/surface, bg/elevatedtext/default, text/muted, {rol}/text
{rol}/solid{rol}/on-solid
{rol}/faint, {rol}/subtle{rol}/text, text/default
bg/inversetext/inverse, icon/inverse

text/subtle y text/disabled no garantizan AA: son para placeholders y estados deshabilitados, nunca para contenido que alguien necesite leer.

Todos los roles

Fondos

FigmaCSSPrimitivaUso
bg/default--bggrey-1Fondo de página. El lienzo sobre el que vive todo.
bg/subtle--bg-subtlegrey-2Fondo alterno: sidebars, zebra de tablas, bloques de código.
bg/surface--surfacegrey-3Superficie de componentes neutros en reposo.
bg/surface-hover--surface-hovergrey-4Hover de superficies neutras.
bg/surface-active--surface-activegrey-5Pressed / seleccionado de superficies neutras.
bg/elevated--bg-elevatedbase-backgroundSuperficies que flotan: cards, modales, menús, popovers.
bg/inverse--bg-inversegrey-12Superficie invertida: tooltips, toasts oscuros.

Bordes

FigmaCSSPrimitivaUso
border/subtle--border-subtlegrey-4Divisores suaves dentro de una superficie.
border/default--bordergrey-6Borde estándar de cards, inputs y contenedores.
border/hover--border-hovergrey-7Borde de controles en hover.
border/strong--border-stronggrey-8Borde de alto contraste (3:1 contra el fondo).

Texto

FigmaCSSPrimitivaUso
text/default--fggrey-12Texto principal: títulos y cuerpo.
text/muted--fg-mutedgrey-11Texto secundario: descripciones, hints, metadata.
text/subtle--fg-subtlegrey-10Texto terciario y placeholders. No usar para contenido esencial.
text/disabled--fg-disabledgrey-8Texto deshabilitado. Exento de contraste WCAG.
text/inverse--fg-inversegrey-1Texto sobre bg/inverse.

Iconos

FigmaCSSPrimitivaUso
icon/default--icongrey-12Iconos con el peso del texto principal.
icon/muted--icon-mutedgrey-11Iconos de apoyo: prefijos de input, chevrons, metadata.
icon/subtle--icon-subtlegrey-9Iconos decorativos o de placeholder.
icon/inverse--icon-inversegrey-1Iconos sobre bg/inverse.

Foco

FigmaCSSPrimitivaUso
focus/ring--focus-ringprimary-8Anillo de foco por teclado. 2px, en todo componente interactivo.

Primary — marca

FigmaCSSPrimitivaUso
primary/solid--primaryprimary-9Fondo sólido de marca / acción principal. Máximo énfasis.
primary/solid-hover--primary-hoverprimary-10Hover del fondo sólido.
primary/solid-active--primary-activeprimary-11Pressed del fondo sólido.
primary/on-solid--primary-fgbase-whiteTexto e iconos sobre el fondo sólido.
primary/accent--primary-accentprimary-9Color del rol en primer plano: label y borde de botones outline/text, links. Garantiza 3:1, no 4.5:1.
primary/accent-hover--primary-accent-hoverprimary-10Hover del primer plano de acento.
primary/accent-active--primary-accent-activeprimary-11Pressed del primer plano de acento.
primary/faint--primary-faintprimary-2Tinte mínimo: hover de variantes outline, filas destacadas.
primary/subtle--primary-subtleprimary-3Fondo tonal de marca / acción principal: alerts, badges, botones tonal.
primary/subtle-hover--primary-subtle-hoverprimary-4Hover del fondo tonal.
primary/subtle-active--primary-subtle-activeprimary-5Pressed del fondo tonal.
primary/border--primary-borderprimary-6Borde sobre fondos tonal/faint.
primary/border-strong--primary-border-strongprimary-8Borde de alto contraste (outline, input con error).
primary/text--primary-textprimary-11Texto e iconos de color sobre bg, faint o subtle.

Neutral

FigmaCSSPrimitivaUso
neutral/solid--neutralgrey-12Fondo sólido de neutro. Máximo énfasis.
neutral/solid-hover--neutral-hovergrey-11Hover del fondo sólido.
neutral/solid-active--neutral-activegrey-10Pressed del fondo sólido.
neutral/on-solid--neutral-fggrey-1Texto e iconos sobre el fondo sólido.
neutral/accent--neutral-accentgrey-12Color del rol en primer plano: label y borde de botones outline/text, links. Garantiza 3:1, no 4.5:1.
neutral/accent-hover--neutral-accent-hovergrey-11Hover del primer plano de acento.
neutral/accent-active--neutral-accent-activegrey-10Pressed del primer plano de acento.
neutral/faint--neutral-faintgrey-2Tinte mínimo: hover de variantes outline, filas destacadas.
neutral/subtle--neutral-subtlegrey-3Fondo tonal de neutro: alerts, badges, botones tonal.
neutral/subtle-hover--neutral-subtle-hovergrey-4Hover del fondo tonal.
neutral/subtle-active--neutral-subtle-activegrey-5Pressed del fondo tonal.
neutral/border--neutral-bordergrey-6Borde sobre fondos tonal/faint.
neutral/border-strong--neutral-border-stronggrey-8Borde de alto contraste (outline, input con error).
neutral/text--neutral-textgrey-11Texto e iconos de color sobre bg, faint o subtle.

Success

FigmaCSSPrimitivaUso
success/solid--successsuccess-9Fondo sólido de éxito / confirmación. Máximo énfasis.
success/solid-hover--success-hoversuccess-10Hover del fondo sólido.
success/solid-active--success-activesuccess-11Pressed del fondo sólido.
success/on-solid--success-fgbase-whiteTexto e iconos sobre el fondo sólido.
success/accent--success-accentsuccess-9Color del rol en primer plano: label y borde de botones outline/text, links. Garantiza 3:1, no 4.5:1.
success/accent-hover--success-accent-hoversuccess-10Hover del primer plano de acento.
success/accent-active--success-accent-activesuccess-11Pressed del primer plano de acento.
success/faint--success-faintsuccess-2Tinte mínimo: hover de variantes outline, filas destacadas.
success/subtle--success-subtlesuccess-3Fondo tonal de éxito / confirmación: alerts, badges, botones tonal.
success/subtle-hover--success-subtle-hoversuccess-4Hover del fondo tonal.
success/subtle-active--success-subtle-activesuccess-5Pressed del fondo tonal.
success/border--success-bordersuccess-6Borde sobre fondos tonal/faint.
success/border-strong--success-border-strongsuccess-8Borde de alto contraste (outline, input con error).
success/text--success-textsuccess-11Texto e iconos de color sobre bg, faint o subtle.

Warning

FigmaCSSPrimitivaUso
warning/solid--warningyellow-9Fondo sólido de advertencia. Máximo énfasis.
warning/solid-hover--warning-hoveryellow-10Hover del fondo sólido.
warning/solid-active--warning-activeyellow-11Pressed del fondo sólido.
warning/on-solid--warning-fgyellow-12Texto e iconos sobre el fondo sólido.
warning/accent--warning-accentyellow-11Color del rol en primer plano: label y borde de botones outline/text, links. Garantiza 3:1, no 4.5:1.
warning/accent-hover--warning-accent-hoveryellow-11Hover del primer plano de acento.
warning/accent-active--warning-accent-activeyellow-12Pressed del primer plano de acento.
warning/faint--warning-faintyellow-2Tinte mínimo: hover de variantes outline, filas destacadas.
warning/subtle--warning-subtleyellow-3Fondo tonal de advertencia: alerts, badges, botones tonal.
warning/subtle-hover--warning-subtle-hoveryellow-4Hover del fondo tonal.
warning/subtle-active--warning-subtle-activeyellow-5Pressed del fondo tonal.
warning/border--warning-borderyellow-6Borde sobre fondos tonal/faint.
warning/border-strong--warning-border-strongyellow-8Borde de alto contraste (outline, input con error).
warning/text--warning-textyellow-11Texto e iconos de color sobre bg, faint o subtle.

Danger

FigmaCSSPrimitivaUso
danger/solid--dangerdanger-9Fondo sólido de error / acción destructiva. Máximo énfasis.
danger/solid-hover--danger-hoverdanger-10Hover del fondo sólido.
danger/solid-active--danger-activedanger-11Pressed del fondo sólido.
danger/on-solid--danger-fgbase-whiteTexto e iconos sobre el fondo sólido.
danger/accent--danger-accentdanger-9Color del rol en primer plano: label y borde de botones outline/text, links. Garantiza 3:1, no 4.5:1.
danger/accent-hover--danger-accent-hoverdanger-10Hover del primer plano de acento.
danger/accent-active--danger-accent-activedanger-11Pressed del primer plano de acento.
danger/faint--danger-faintdanger-2Tinte mínimo: hover de variantes outline, filas destacadas.
danger/subtle--danger-subtledanger-3Fondo tonal de error / acción destructiva: alerts, badges, botones tonal.
danger/subtle-hover--danger-subtle-hoverdanger-4Hover del fondo tonal.
danger/subtle-active--danger-subtle-activedanger-5Pressed del fondo tonal.
danger/border--danger-borderdanger-6Borde sobre fondos tonal/faint.
danger/border-strong--danger-border-strongdanger-8Borde de alto contraste (outline, input con error).
danger/text--danger-textdanger-11Texto e iconos de color sobre bg, faint o subtle.

Info

FigmaCSSPrimitivaUso
info/solid--infoblue-9Fondo sólido de información. Máximo énfasis.
info/solid-hover--info-hoverblue-10Hover del fondo sólido.
info/solid-active--info-activeblue-11Pressed del fondo sólido.
info/on-solid--info-fgbase-whiteTexto e iconos sobre el fondo sólido.
info/accent--info-accentblue-9Color del rol en primer plano: label y borde de botones outline/text, links. Garantiza 3:1, no 4.5:1.
info/accent-hover--info-accent-hoverblue-10Hover del primer plano de acento.
info/accent-active--info-accent-activeblue-11Pressed del primer plano de acento.
info/faint--info-faintblue-2Tinte mínimo: hover de variantes outline, filas destacadas.
info/subtle--info-subtleblue-3Fondo tonal de información: alerts, badges, botones tonal.
info/subtle-hover--info-subtle-hoverblue-4Hover del fondo tonal.
info/subtle-active--info-subtle-activeblue-5Pressed del fondo tonal.
info/border--info-borderblue-6Borde sobre fondos tonal/faint.
info/border-strong--info-border-strongblue-8Borde de alto contraste (outline, input con error).
info/text--info-textblue-11Texto e iconos de color sobre bg, faint o subtle.

Reglas

  • Elegí por significado, no por apariencia. danger es para errores y destrucción aunque el rojo "quede bien" en otro lado.
  • Un solo solid por zona. El sólido es el grito; el tonal es la voz normal.
  • El color nunca va solo. Todo estado comunicado por color lleva también icono o texto (1 de cada 12 hombres no distingue rojo de verde).
  • Si falta un rol, pedilo. Usar una primitiva directo rompe dark mode y la trazabilidad con Figma.

En código

<div className="border border-danger-border bg-danger-subtle text-danger-text">
  No pudimos guardar los cambios.
</div>
.alert {
  background: var(--danger-subtle);
  border: 1px solid var(--danger-border);
  color: var(--danger-text);
}

Migración desde las colecciones viejas

Colors Mode, Buttons y _Primitive quedan deprecadas: apuntan a la paleta anterior (escala 50–950) y no tienen dark real. No las uses en trabajo nuevo.

AntesAhora
Text/text-primary · secondary · tertiarytext/default · text/muted · text/subtle
Text/text-disabled · text-placeholdertext/disabled · text/subtle
Text/text-errordanger/text
Backgrounds/bg-primary · bg-disabledbg/default · bg/surface
Border/border-primary · border-disabledborder/default · border/subtle
Border/border-errordanger/border-strong
Button/Base · Hoverprimary/solid · primary/solid-hover
Button/Base Tonal · Hover Tonal · Border Tonal · Text Tonalprimary/subtle · subtle-hover · border · text
Badge/bg-badge-* · border-badge-* · text-badge-*{rol}/subtle · {rol}/border · {rol}/text