Bhinish Dhiman· Actualizado 5 de octubre de 2026

Cómo crear una paleta accesible a partir de un solo color de marca

Traducido del original en inglés. Leer el original

Mantén fijo el tono, avanza la luminosidad en pasos iguales en OKLCH y reduce el croma en ambos extremos. Así obtienes una escala completa a partir de un solo color. Después asigna los roles según el contraste que exige cada uno, no a ojo, y genera aparte una variante más clara para el modo oscuro.

La mayoría de los manuales de marca te entregan un código hex y un logo. Convertir eso en algo con lo que puedas construir una interfaz es un trabajo sistemático, y hacerlo a ojo es justo el momento en que los problemas de accesibilidad quedan incrustados.

Paso 1: encuentra el tono

Convierte el color de marca a OKLCH y anota el ángulo de tono. Ese número es la marca. Todo lo demás se puede ajustar.

#2563eb  →  oklch(54.6% 0.215 262.9)

El tono 262.9 queda fijo para toda la escala. La luminosidad y el croma son las variables.

Paso 2: construye la escala

Diez pasos, repartidos de forma uniforme en luminosidad, con el croma en su punto más alto en el centro y bajando hacia ambos extremos. Los colores muy claros y muy oscuros no pueden sostener un croma alto sin salirse del rango que la pantalla es capaz de mostrar.

--brand-50:  oklch(97% 0.015 263);
--brand-100: oklch(93% 0.035 263);
--brand-200: oklch(87% 0.070 263);
--brand-300: oklch(79% 0.120 263);
--brand-400: oklch(67% 0.180 263);
--brand-500: oklch(55% 0.215 263);  /* the original */
--brand-600: oklch(48% 0.200 263);
--brand-700: oklch(40% 0.165 263);
--brand-800: oklch(31% 0.120 263);
--brand-900: oklch(22% 0.075 263);

Como la luminosidad de OKLCH es perceptualmente uniforme, estos pasos se ven parejos. El mismo ejercicio en HSL produce una escala que se amontona en el centro y da saltos en los extremos.

Paso 3: asigna roles midiendo, no a ojo

Este es el paso que decide si el sistema es accesible, y es el que con más frecuencia se resuelve por intuición.

No elijas “el que se ve bonito” para el texto. Parte del requisito de contraste y trabaja hacia atrás:

Rol Requisito Paso habitual
Texto de cuerpo sobre blanco 4.5:1 600–700
Texto grande sobre blanco 3:1 500–600
Fondo de botón con etiqueta blanca 4.5:1 para la etiqueta 600
Bordes y divisores 3:1 si transmiten significado 400 (300 mide 1.95:1 sobre blanco, así que solo sirve como decoración)
Fondos sutiles ninguno 50–100

La idea útil: tu color de marca normalmente no es tu color de texto. Un 500 intenso está pensado para verse en tamaño grande, en un logo. Úsalo como texto de cuerpo a 16px y casi siempre se quedará por debajo de 4.5:1. El paso 600 o el 700 es lo que necesita el texto de cuerpo, y sigue siendo claramente tu azul.

Paso 4: genera las variantes para modo oscuro

No des por hecho que la escala se invierte. No lo hace, por dos razones.

La fórmula de WCAG 2 suma una constante fija de destello (flare) que domina en el extremo oscuro, así que los pares oscuros pueden dar ratios aprobatorios y aun así verse apagados. Además, los colores muy saturados vibran sobre fondos oscuros de una manera en que no lo hacen sobre blanco.

Por eso cada rol semántico necesita un segundo valor, más claro y normalmente menos saturado:

:root {
  --text-brand: var(--brand-700);
  --surface-brand: var(--brand-50);
  --border-brand: var(--brand-400);
}

:root[data-theme='dark'] {
  --text-brand: var(--brand-300);
  --surface-brand: var(--brand-900);
  --border-brand: var(--brand-700);
}

La misma escala, pasos distintos. Por eso conviene construir primero la escala: el modo oscuro se vuelve una reasignación y no un segundo ejercicio de diseño.

Paso 5: nombra por rol, no por valor

--brand-600 es un valor. --text-brand es un rol. Los componentes deben hacer referencia a roles.

La razón es práctica: cuando el color de marca cambie, y va a cambiar, regeneras la escala y los roles siguen apuntando a los pasos correctos. Si los componentes hacen referencia directa a --brand-600, tienes que revisarlos uno por uno.

Además, es lo único que hace posible tener temas. Un rol puede apuntar a pasos distintos en temas distintos. Un valor fijo no.

Paso 6: revisa los pares, no solo la escala

Una escala que pasa el contraste todavía puede fallar en el uso real. Hay dos cosas que verificar:

Cada combinación de texto sobre superficie que de verdad publicas. No todos los pares posibles, solo los que aparecen en la interfaz. Cuerpo sobre el fondo de la página, cuerpo sobre una tarjeta, enlace sobre una tarjeta, etiqueta del botón sobre el botón.

Si dos colores se confunden para las personas con daltonismo. Si tu sistema incluye un segundo acento, por ejemplo un verde de éxito junto al azul de marca, revisa ese par en concreto. La verificación de contraste compara el primer plano con el fondo y nunca un primer plano con otro, así que esta falla pasa cualquier auditoría de ratios.

La versión más corta

Fija el tono. Escalona la luminosidad. Reduce el croma en los extremos. Asigna roles midiendo y no a ojo. Genera variantes oscuras en lugar de invertir. Nombra por rol.

Seis pasos y un solo color de marca te dan un sistema que aprueba en ambos temas, sin que nadie tenga que negociar con el manual de marca.

Nuestro verificador de contraste se encarga de la parte de medir: dale un par y te muestra el ratio, la cifra APCA a tu tamaño y peso reales, y el color más cercano que aprueba si no llega.