Matriz de contraste de cores
Com #fff, #000, #777777 e #2563eb você vê todos os cruzamentos em uma tabela: branco sobre preto chega ao máximo de 21, e cada célula pode ser comparada com 4.5 para texto normal ou 3 para texto grande. Revise a paleta inteira de uma vez. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Cores
- #fff, #000, #777777, #2563eb
- Quantidade
- 4
Uma paleta pode parecer coerente e ainda conter combinações que dificultam ou impedem a leitura. Esta matriz calcula a luminância relativa WCAG 2 de cada cor hexadecimal informada, compara todas as cores entre si e devolve os resultados em uma matriz quadrada estável. Designers, desenvolvedores e profissionais de acessibilidade podem examinar de uma só vez toda a paleta de um sistema de design, sem verificar pares individualmente. As entradas são validadas, as cores são normalizadas e o resultado determinístico serve para auditorias automatizadas e relatórios versionados.
Leia a matriz sem perder a referência das cores
Envie uma lista com duas a cem cores hexadecimais. Formatos de três e seis dígitos são aceitos, com ou sem cerquilha inicial, e cada valor válido é normalizado como um código de seis dígitos em letras minúsculas. A resposta apresenta as cores normalizadas na mesma ordem e atribui um índice a cada uma.
As linhas e colunas seguem exatamente essa ordem; portanto, o valor na linha dois e coluna cinco descreve o contraste entre as cores de índices dois e cinco. A diagonal sempre vale 1, pois uma cor não contrasta consigo mesma, e a matriz é simétrica porque inverter primeiro plano e fundo não altera a relação WCAG. Cada relação exibida é arredondada para duas casas decimais, enquanto as luminâncias usam seis.
Cores duplicadas permanecem como posições distintas, o que ajuda a auditar tokens com o mesmo valor e funções semânticas diferentes. Esse modelo posicional facilita exibir a resposta em tabela, arquivá-la como evidência ou comparar versões.
Entenda o cálculo e os limites WCAG
O cálculo segue o método de luminância relativa da WCAG 2 para cores sRGB. Cada canal vermelho, verde e azul passa do valor sRGB codificado para luz linear e depois é combinado com os coeficientes padronizados. Para qualquer par, a luminância mais clara somada a 0.05 é dividida pela mais escura somada a 0.05, gerando uma relação de 1 a 21.
A resposta inclui os limites conhecidos: 4.5 para texto normal AA, 7 para texto normal AAA, 3 para texto grande AA e 4.5 para texto grande AAA. Compare cada célula com o limite adequado ao conteúdo e à tipografia reais. Uma relação isolada não declara uma interface inteira acessível, pois tamanho e peso da fonte, estados de interação, elementos não textuais e contexto também importam.
A ferramenta fornece evidências numéricas, não um veredito geral, permitindo que a auditoria aplique a regra correta a cada combinação pretendida sem transformar um valor arredondado em garantia ampla.
Use resultados determinísticos em auditorias de design
Uma matriz completa é mais útil quando a verificação da paleta pode ser repetida. Mantenha as cores em uma ordem documentada, como neutras, marca, estado e destaque, e salve a matriz junto da versão do sistema de design. Uma verificação de integração contínua pode comparar células escolhidas com limites obrigatórios, enquanto uma pessoa revisora examina a tabela inteira em busca de combinações fracas inesperadas.
Listas inválidas, paletas fora do tamanho permitido e valores hexadecimais malformados são rejeitados com um índice claro. O teto de cem cores limita a matriz quadrática a dez mil células. Resolva transparência e composição antes da chamada: cores alfa são rejeitadas porque dependem do fundo.
Converta nomes, HSL, valores de gama ampla ou objetos de ferramentas de design para hex sRGB opaco, garantindo uma base explícita e reproduzível.
Casos de uso
Auditar tokens de design
Gere uma matriz indexada para tokens de marca, superfície, texto, borda e estado antes de publicar uma versão do sistema de design.
Verificar migrações de tema
Compare as matrizes das paletas antiga e nova para encontrar combinações cujo contraste piorou durante o redesenho.
Automatizar a revisão de acessibilidade
Envie relações estáveis a regras de integração contínua que apliquem o limite WCAG correto aos pares de tokens aprovados.
Perguntas frequentes
Quais formatos de cor são aceitos?
São aceitas cores hexadecimais sRGB opacas de três ou seis dígitos, com ou sem cerquilha inicial. Formatos alfa, nomes, HSL e gama ampla são rejeitados.
Como linhas e colunas correspondem às cores?
Os dois eixos seguem a ordem original da entrada. Cada cor devolvida inclui seu índice, e matrix[row][column] contém a relação das duas cores indexadas.
Por que todos os valores diagonais são 1?
Uma cor comparada consigo mesma tem luminância idêntica; por isso, a fórmula de contraste WCAG sempre produz uma relação de 1.
Uma relação prova que um design é acessível?
Não. Ela fornece a evidência de contraste usada nas verificações WCAG, mas a acessibilidade também depende da tipografia, dos estados, do conteúdo e do uso correto de cada par.
Qual contraste o texto precisa ter?
No nível AA, texto normal precisa de pelo menos 4.5 e texto grande de pelo menos 3. No AAA, texto normal pede 7 e texto grande 4.5. Compare cada célula com a regra que combina com o uso do par.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"colors": [
"#ffffff",
"#111827",
"#2563eb",
"#facc15"
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.palette_contrast_matrix",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_items | 100 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Use resultados determinísticos em auditorias de design
Como o algoritmo não usa rede, aleatoriedade, hora atual, estilos do navegador nem estimativas de perfil de cor, entradas JSON idênticas geram saídas JSON idênticas.
Perguntas técnicas
Quanto custa uma solicitação?
O preço-base da API é US$ 0,002 por solicitação.