Bhinish Dhiman

As cores de status do Bootstrap e do Tailwind falham para pessoas daltônicas

Traduzido do original em inglês. Ler o original

O vermelho danger e o verde success do Bootstrap ficam a uma distância perceptual de cerca de 74 na visão típica. Com deuteranopia, ela cai para 4. O red-500 e o green-500 do Tailwind caem de 76 para 8. Cada cor dos dois pares passa no contraste sozinha, então nenhuma auditoria de contraste pega o problema.

Quase todo design system traz um vermelho para erros e um verde para sucesso. É uma convenção tão estabelecida que ninguém a audita. Medimos o que acontece com esses padrões sob deficiência de visão de cores simulada, e os números são piores do que a convenção leva a crer.

O que medimos

Pegamos as cores de status padrão de dois sistemas muito usados e calculamos a distância perceptual CIEDE2000 entre cada par de vermelho e verde, primeiro para a visão típica e depois para cada deficiência simulada, usando o modelo de Machado et al. (2009).

Em linhas gerais, uma distância abaixo de uns 10 significa que duas cores são difíceis de distinguir lado a lado. Abaixo de 5, elas são lidas como a mesma cor.

Par Típica Deuteranopia Protanopia Acromatopsia
Bootstrap danger / success 74.1 4.0 25.4 10.0
Tailwind red-500 / green-500 76.1 7.8 25.9 12.9
Vermelho / verde genéricos 70.6 6.0 23.0 10.1
Azul / laranja 62.4 74.2 66.1 28.7

A coluna da deuteranopia é a que mais importa, porque a deuteranomalia, sua forma mais leve, afeta cerca de 5% dos homens. Para esses usuários, os estados de erro e de sucesso do Bootstrap estão separados por uma distância perceptual de quatro. Isso não é uma perda sutil. É a mesma cor.

A última linha é o controle. Azul contra laranja não apenas sobrevive; com deuteranopia, as duas cores ficam mais separadas do que na visão típica.

Por que nenhuma auditoria de contraste pega isso

Esta é a parte que vale a pena absorver, porque explica como o problema sobrevive em sistemas que, no resto, foram construídos com cuidado.

Um verificador de contraste faz uma única pergunta: este primeiro plano se distingue deste fundo? O #dc3545 do Bootstrap sobre branco dá 4.53:1. O #28a745 sobre branco dá 3.01:1. Os dois estão na faixa do aceitável, e os dois são aprovados.

Só que o verificador nunca compara o vermelho com o verde, porque eles nunca ficam um sobre o outro. Aparecem em lugares diferentes, um no aviso de erro e outro no aviso de sucesso, e a ferramenta não tem nenhuma noção de relação entre os dois.

As falhas de daltonismo moram exatamente nesse ponto cego. São falhas entre pares de cores de primeiro plano, e o conjunto de ferramentas padrão só testa primeiro plano contra fundo.

A protanopia é diferente, e isso importa

Repare que a protanopia se sai muito melhor na tabela: por volta de 25, em vez de 4. Não é porque pessoas com protanopia achem essas cores fáceis.

A protanopia envolve uma sensibilidade menor à luz vermelha como um todo, então os vermelhos parecem mais escuros, além de mudarem de matiz. É essa diferença de luminosidade que faz a distância subir de novo: as duas cores passam a ser distinguíveis, mas pelo brilho, e não pelo matiz.

O que dá uma boa pista sobre a solução.

O que funciona de verdade

Separe pela luminosidade. A percepção de luminosidade não é afetada por nenhuma deficiência vermelho-verde. Se as suas cores de erro e de sucesso diferem por um degrau claro de luminosidade, além do matiz, elas continuam distinguíveis, não importa o que os cones estejam fazendo. Essa mudança sozinha resolve a maioria das paletas.

Use o eixo azul-laranja para codificações de dois valores. Gráficos, toggles, comparações de antes e depois. Azul contra laranja é a combinação de duas cores mais robusta que existe, e a medição acima mostra por quê.

Pare de deixar a cor carregar o significado sozinha. É esta solução que de fato atende ao WCAG, e é a que não depende de acertar a matemática. O Critério de Sucesso 1.4.1 exige que a cor nunca seja o único meio de transmitir uma informação. Na prática:

  • Um ícone no alerta, não só uma borda colorida
  • Rótulos diretos nas séries do gráfico, não só uma legenda de cores
  • Linhas contínuas versus tracejadas
  • A palavra “Erro” na mensagem de erro

Quando existe uma segunda pista, a paleta deixa de carregar o significado sozinha, e uma confusão entre cores passa a ser estética, e não funcional.

Uma observação sobre os padrões dos frameworks

Nada disso quer dizer que o Bootstrap ou o Tailwind sejam mal construídos. Os dois dão a você as ferramentas para sobrescrever esses valores, e os dois documentam o requisito de acessibilidade.

Mas são os padrões que vão para produção. Um padrão invisível para 5% dos homens merece ser trocado na sua própria camada de tema, em vez de herdado. Custa uma linha num arquivo de configuração, e a alternativa é uma classe de bug que nenhuma auditoria automatizada do seu pipeline vai revelar.

Verifique a sua própria paleta

As medições deste post vieram do nosso simulador de daltonismo, que testa cada par de uma paleta contra oito tipos de visão simulados e aponta os que se confundem. Ele roda inteiramente no seu navegador: cole as cores da sua marca e veja quais pares a sua auditoria de contraste vinha aprovando sem alarde.