Matriz de contraste de colores
Una paleta puede parecer coherente y aun así contener combinaciones que dificultan o impiden leer el texto.
Ejecutar — gratis
Esta matriz calcula la luminancia relativa WCAG 2 de cada color hexadecimal proporcionado, compara todos los colores entre sí y devuelve los resultados en una matriz cuadrada estable. Diseñadores, desarrolladores y especialistas en accesibilidad pueden revisar de una vez toda la paleta de un sistema de diseño, sin comprobar cada par por separado. Las entradas se validan, los colores se normalizan y el resultado determinista sirve para auditorías automatizadas e informes versionados.
Interprete la matriz sin perder de vista los colores
Envíe una matriz de entre dos y cien colores hexadecimales. Se aceptan formatos de tres y seis dígitos, con almohadilla inicial o sin ella, y cada valor válido se normaliza como un código de seis dígitos en minúsculas. La respuesta enumera esos colores normalizados en el mismo orden y asigna un índice a cada uno. Las filas y columnas conservan exactamente ese orden; por ello, el valor de la fila dos y la columna cinco representa el contraste entre los colores con índices dos y cinco. La diagonal siempre vale 1, pues un color no contrasta consigo mismo, y la matriz es simétrica porque invertir primer plano y fondo no altera la relación WCAG. Cada relación se redondea a dos decimales para ofrecer una salida legible y estable, mientras que las luminancias se redondean a seis. Los colores duplicados se conservan como posiciones independientes, algo útil al auditar tokens con igual valor y distintas funciones semánticas. Así, la respuesta puede representarse en una tabla, archivarse o compararse entre versiones con facilidad.
Comprenda el cálculo y los umbrales WCAG
El cálculo aplica el método de luminancia relativa de WCAG 2 para colores sRGB. Cada canal rojo, verde y azul se convierte de su valor sRGB codificado a luz lineal y después se combina mediante los coeficientes estándar. Para cualquier par, se divide la luminancia más clara más 0.05 entre la más oscura más 0.05, lo que produce una relación de 1 a 21. La respuesta incluye los umbrales WCAG habituales: 4.5 para texto normal AA, 7 para texto normal AAA, 3 para texto grande AA y 4.5 para texto grande AAA. Compare cada celda con el umbral adecuado al contenido y a la tipografía reales. Una relación aislada no certifica toda una interfaz, pues también importan el tamaño y peso de la fuente, los estados interactivos, los elementos no textuales y el contexto de uso. La herramienta devuelve pruebas numéricas en vez de un veredicto general, para que cada auditoría aplique la regla correcta a cada combinación prevista sin confundir un valor redondeado con una garantía global.
Use resultados deterministas en auditorías de diseño
Una matriz completa resulta especialmente útil cuando la revisión de la paleta es repetible. Mantenga los colores en un orden documentado, por ejemplo neutros, marca, estados y acentos, y guarde la matriz con la versión del sistema de diseño. Una prueba de integración continua puede contrastar celdas seleccionadas con los umbrales exigidos, mientras una persona revisora examina la tabla completa para detectar combinaciones débiles inesperadas. Como el algoritmo no utiliza red, azar, hora actual, estilos del navegador ni estimaciones de perfiles de color, una entrada JSON idéntica genera una salida JSON idéntica. Se rechazan con un índice claro las matrices inválidas, las paletas fuera del tamaño admitido y los valores hexadecimales incorrectos. El límite de cien colores acota la matriz cuadrática a diez mil celdas. Resuelva la transparencia y la composición antes de usar esta capacidad: los colores alfa se rechazan porque su apariencia depende del fondo. Convierta también nombres, HSL, valores de gama amplia u objetos de herramientas de diseño a hex sRGB opaco para que la auditoría tenga una base explícita y reproducible.
Qué puede hacer con ella
Auditar tokens de diseño
Genere una matriz indexada para tokens de marca, superficie, texto, borde y estado antes de publicar una versión del sistema de diseño.
Comprobar migraciones de temas
Compare las matrices de las paletas anterior y nueva para localizar combinaciones cuyo contraste haya empeorado durante el rediseño.
Automatizar la revisión de accesibilidad
Incorpore relaciones estables a reglas de integración continua que exijan el umbral WCAG apropiado para los pares de tokens aprobados.
Preguntas frecuentes
¿Cuánto cuesta una solicitud?
El precio base de la API es $0.002 por solicitud.
¿Qué formatos de color se aceptan?
Se aceptan colores hexadecimales sRGB opacos de tres o seis dígitos, con almohadilla inicial o sin ella. Se rechazan alfa, nombres, HSL y formatos de gama amplia.
¿Cómo se corresponden filas, columnas y colores?
Ambos ejes siguen el orden de entrada original. Cada color devuelto incluye su índice y matrix[row][column] contiene la relación de esos dos colores indexados.
¿Por qué todos los valores diagonales son 1?
Un color comparado consigo mismo tiene la misma luminancia, por lo que la fórmula de contraste WCAG siempre produce una relación de 1.
¿Una relación demuestra que un diseño es accesible?
No. Aporta la evidencia de contraste usada en las comprobaciones WCAG, pero la accesibilidad también depende de la tipografía, los estados, el contenido y el uso correcto de cada par.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/color/palette-contrast-matrix \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"colors":["#ffffff","#111827","#2563eb","#facc15"]}'const res = await fetch("https://api.kit.forhosting.com/color/palette-contrast-matrix", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"colors": [
"#ffffff",
"#111827",
"#2563eb",
"#facc15"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/palette-contrast-matrix",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"colors": [
"#ffffff",
"#111827",
"#2563eb",
"#facc15"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/palette-contrast-matrix", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"colors":["#ffffff","#111827","#2563eb","#facc15"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"colors":["#ffffff","#111827","#2563eb","#facc15"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/palette-contrast-matrix", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"colors": [
"#ffffff",
"#111827",
"#2563eb",
"#facc15"
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.palette_contrast_matrix",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_items | 100 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |