Calculadora de contraste APCA
Descubra quão legível é uma cor de texto sobre o fundo: o quase preto #111827 sobre branco marca Lc 104.5, e inverter as cores troca o sinal. Um único número com sinal que suas revisões de design podem citar. 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
- Texto
- #111827
- Fundo
- #ffffff
- Lc
- 104,5
- Lc absoluto
- 104,5
- Polaridade
- BoW
- Legibilidade
- body_fluent
Esta calculadora de contraste APCA recebe uma cor de texto e uma cor de fundo em códigos hex e devolve o Lc com sinal (contraste de luminosidade) produzido pelo Accessible Perceptual Contrast Algorithm, usado no trabalho de legibilidade do rascunho do WCAG 3. Diferente da razão de contraste WCAG 2.x mais antiga, o APCA é sensível à polaridade: texto escuro sobre superfície clara gera um Lc positivo, enquanto texto claro sobre superfície escura gera um Lc negativo de magnitude semelhante. Designers, desenvolvedores e especialistas em acessibilidade usam esse único número—junto com tabelas de tamanho e peso de fonte—para decidir se o corpo tipográfico, rótulos de interface e traços não textuais permanecem legíveis em telas autoiluminadas. O motor implementa as constantes públicas 0.0.98G-4g: linearização com potência 2.4, coeficientes Y de sRGB, soft-clamp do preto e escalonamento SAPC BoW/WoB. Os resultados são totalmente determinísticos, sem chamadas de rede, amostragem ou atalhos dependentes de data.
O que o Lc do APCA mede e como difere da razão WCAG 2
O APCA prevê o contraste perceptual de texto e conteúdo não textual em telas autoiluminadas modelando o gama do monitor, pretos suaves e a forma assimétrica com que a visão humana trata pares escuro-sobre-claro versus claro-sobre-escuro. A saída é um Lc com sinal que cobre aproximadamente mais ou menos cento e dez: por exemplo, texto de corpo quase preto sobre branco puro costuma ficar perto de Lc noventa ou mais, enquanto as mesmas cores invertidas produzem um Lc negativo grande.
O WCAG 2.x, em vez disso, informa uma única razão de contraste positiva a partir da luminância relativa com cortes fixos AA e AAA como 4.5 para 1 e 7 para 1; essa razão ignora a polaridade e tende a superestimar ou subestimar certos pares de tons médios que as pessoas realmente têm dificuldade de ler.
Esta calculadora sempre devolve o Lc com sinal, a magnitude absoluta, a etiqueta de polaridade BoW (black on white / texto escuro sobre claro) ou WoB (white on black / texto claro sobre escuro), o Y linearizado de cada cor e uma faixa grosseira de legibilidade derivada do Lc absoluto para triagem rápida.
Não há rastreamento de página, parsing de CSS, mistura de opacidade nem amostragem de degradês: você fornece duas cores hex explícitas e recebe um objeto reproduzível adequado a portões de tokens de design, tickets de acessibilidade e revisões automatizadas de paleta que precisam citar um Lc numérico em vez de uma opinião subjetiva sobre uma captura de tela.
Como as entradas hex são lidas e por que o caminho 0.0.98G-4g é determinístico
Ambos os valores devem ser hex: cerquilha inicial opcional, três dígitos que se expandem para seis ou seis dígitos completos, sem distinção de maiúsculas. Sufixos alfa, funções rgb(), funções hsl(), cores CSS nomeadas e inteiros soltos são rejeitados com uma mensagem que nomeia o campo e mostra o que foi recebido, para que um token ruim nunca se torne um fail-open silencioso. Cada cor tem limite de trinta e dois caracteres para manter a validação barata e bloquear colagens acidentais.
Após o parse, cada canal é elevado à potência 2.4 depois de dividir por duzentos e cinquenta e cinco, e combinado com os coeficientes sRGB do APCA 0.2126729, 0.7151522 e 0.0721750 para formar Y. Valores Y quase pretos em ou abaixo de 0.022 recebem o soft-clamp para não penalizar demais o preto puro.
Quando o Y do fundo é maior que o do texto, o ramo BoW aplica expoentes 0.56 e 0.57 com escala 1.14 e deslocamento 0.027; caso contrário o ramo WoB usa 0.65 e 0.62 e devolve um Lc negativo. Deltas de luminância extremamente pequenas são cortadas para zero.
Onde checagens APCA se encaixam em design systems, modo escuro e WCAG 3
Equipes de produto recorrem ao APCA quando uma paleta de marca que passou no WCAG 2 AA ainda parece turva no modo escuro, quando texto cinza médio em superfícies suaves falha testes humanos de legibilidade, ou quando partes interessadas pedem números Lc alinhados às discussões do rascunho do WCAG 3 em vez apenas da razão antiga.
Engenheiros conectam o mesmo contrato a checagens de pull request que bloqueiam uma mudança de token se o Lc absoluto das cores de corpo primárias cair abaixo de um limiar da equipe como sessenta, ou registram valores WoB para títulos hero do tema escuro que ficam de propósito mais perto da superfície. QA e especialistas em acessibilidade anexam Lc com sinal e polaridade a relatórios de bug para que os desenvolvedores corrijam o par exato em vez de adivinhar a partir de uma captura.
Equipes de conteúdo e marketing verificam se os códigos hex de campanha ainda superam as faixas mínimas de corpo quando colocados em fundos claros ou escuros do site. Combine com o verificador de razão WCAG 2 quando ainda precisar de documentação AA/AAA, e com ferramentas de conversão de cor quando precisar de intermediários RGB ou HSL antes de calcular o Lc.
Casos de uso
Revisão de tokens de design e modo escuro
Verifique cada par texto/fundo em temas claros e escuros para Lc com sinal e polaridade antes de travar os tokens da marca.
Relatórios de acessibilidade com polaridade
Anexe Lc com sinal, polaridade BoW/WoB e a faixa de legibilidade para que engenheiros corrijam o par hex exato, não uma captura vaga.
Perguntas frequentes
O que é Lc e por que pode ser negativo?
Lc é o contraste de luminosidade APCA. Valores positivos significam texto escuro sobre fundo claro (BoW); valores negativos, texto claro sobre fundo escuro (WoB). Mantenha o sinal em relatórios sensíveis à polaridade; use o valor absoluto apenas ao comparar limiares de magnitude.
Como isso difere do verificador de razão de contraste WCAG?
O WCAG 2.x devolve uma única razão positiva e flags AA/AAA. O APCA devolve um Lc com sinal e polaridade, matemática diferente (Y com potência 2.4, soft-clamp do preto, expoentes BoW/WoB) e visa o trabalho de legibilidade do rascunho WCAG 3, não as portas 4.5:1 / 7:1.
Esta ferramenta analisa o meu site em busca de problemas de contraste?
Não. Ela só compara duas cores hex que você fornece.
Quais formatos de cor a calculadora APCA aceita?
Apenas cores hexadecimais de três ou seis dígitos, com ou sem a cerquilha inicial, em maiúsculas ou minúsculas. Nomes de cores, notação RGB ou HSL e transparência são recusados, então um valor errado nunca passa.
Qual Lc tem um texto quase preto sobre fundo branco?
O texto #111827 sobre #ffffff chega a Lc 104.5, com polaridade de texto escuro sobre fundo claro, na faixa indicada para texto corrido. Com as cores trocadas, o valor fica negativo.
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/apca-contrast \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"#111827","background":"#ffffff"}'const res = await fetch("https://api.kit.forhosting.com/color/apca-contrast", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "#111827",
"background": "#ffffff"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/apca-contrast",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "#111827",
"background": "#ffffff"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/apca-contrast", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"#111827","background":"#ffffff"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"#111827","background":"#ffffff"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/apca-contrast", 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
{
"text": "#111827",
"background": "#ffffff"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.apca_contrast",
"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_color_chars | 32 |
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
Explore pares de graça no navegador, ou chame a API a US$ 0,002 por solicitação bem-sucedida quando o CI do design system, backends do Figma ou pipelines de tokens precisarem da mesma matriz Lc sempre.
O que o Lc do APCA mede e como difere da razão WCAG 2
O campo method fica fixo em apca_0.0.98G-4g para que os logs de CI documentem exatamente qual conjunto de constantes produziu o número. Hex inválidos, campos ausentes, valores que não são string e strings longas demais são rejeitados com invalid_input e nunca são cobrados.
Como as entradas hex são lidas e por que o caminho 0.0.98G-4g é determinístico
Os campos preferidos são text para a cor de tinta ou ícone em primeiro plano e background para a superfície atrás. Os aliases foreground, fg, color1 e hex1 mapeiam para text; bg, color2 e hex2 para background, para que planilhas, query strings e formulários reutilizem o mesmo contrato sem renomear colunas.
Onde checagens APCA se encaixam em design systems, modo escuro e WCAG 3
Designers colam pares hex do Figma ou de um JSON de tokens e leem polaridade mais uma faixa como body_preferred ou large_text antes de travar uma escala. Nesta página o trabalho roda inteiramente no seu navegador; pela API cada consulta bem-sucedida custa US$ 0,002, validação falha não é cobrada e nada é armazenado após a resposta. Essa divisão—exploração interativa gratuita e uma API cobrada idêntica—combina com o restante do catálogo KIT tier-A e permite ir de um workshop de paleta a um pipeline automatizado sem mudar o resultado matemático.
Casos de integração
Portões de CI para prontidão do rascunho WCAG 3
Chame a API a partir de pull requests para falhar builds quando o Lc absoluto de cores de corpo cair abaixo do limiar da sua equipe.
Perguntas técnicas
Quanto custa a calculadora de contraste APCA?
É grátis no seu navegador nesta página. Pela API uma solicitação bem-sucedida custa US$ 0,002; entradas inválidas não são cobradas.
Quais formatos de cor são aceitos?
Apenas hex: #RGB ou #RRGGBB, com ou sem cerquilha inicial, sem distinção de maiúsculas. rgb(), hsl(), cores nomeadas e hex com alfa são rejeitados com invalid_input.