Bhinish Dhiman· Atualizado 5 de outubro de 2026

Como criar uma paleta acessível a partir de uma única cor da marca

Traduzido do original em inglês. Ler o original

Fixe o matiz, avance a luminosidade em passos iguais no OKLCH e reduza o croma nas duas pontas. Assim você tira uma escala inteira de uma só cor. Depois, atribua os papéis pela exigência de contraste, e não a olho, e gere uma variante separada, mais clara, para o modo escuro.

A maioria dos manuais de marca entrega um código hex e um logo. Transformar isso em algo com que dê para construir uma interface é um trabalho sistemático, e é justamente quando ele é feito a olho que os problemas de acessibilidade entram no sistema e ficam por lá.

Passo 1: encontre o matiz

Converta a cor da marca para OKLCH e anote o ângulo do matiz. Esse número é a marca. Todo o resto pode ser ajustado.

#2563eb  →  oklch(54.6% 0.215 262.9)

O matiz 262.9 agora fica fixo para a escala inteira. Luminosidade e croma são as variáveis.

Passo 2: monte a escala

Dez passos, com a luminosidade em intervalos iguais e o croma no máximo no meio, diminuindo nas duas pontas. Cores muito claras e muito escuras não sustentam croma alto sem sair da faixa que a tela consegue exibir.

--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 a luminosidade do OKLCH é perceptualmente uniforme, esses passos parecem regulares. O mesmo exercício em HSL produz uma escala que se amontoa no meio e dá saltos nas pontas.

Passo 3: atribua papéis por medição, não a olho

É este passo que decide se o sistema é acessível, e é ele que costuma ser feito na intuição.

Não escolha “a mais bonita” para o texto. Parta da exigência de contraste e trabalhe de trás para a frente:

Papel Requisito Passo típico
Texto do corpo sobre branco 4.5:1 600–700
Texto grande sobre branco 3:1 500–600
Fundo de botão com rótulo branco 4.5:1 para o rótulo 600
Bordas e divisores 3:1 se tiverem significado 400 (o 300 mede 1.95:1 sobre branco, então serve só para decoração)
Fundos sutis nenhum 50–100

A conclusão que importa: a cor da sua marca normalmente não é a cor do seu texto. Um 500 vibrante foi feito para ser visto em tamanho grande, num logo. Use-o como texto de corpo a 16px e ele quase sempre fica abaixo de 4.5:1. O passo 600 ou 700 é o que o texto de corpo pede, e continua sendo reconhecivelmente o seu azul.

Passo 4: gere as variantes do modo escuro

Não suponha que a escala simplesmente se inverte. Ela não se inverte, por dois motivos.

A fórmula do WCAG 2 soma uma constante fixa de reflexo que domina no lado escuro, então pares escuros podem mostrar razões aprovadas e ainda assim parecer apagados. Além disso, cores muito saturadas vibram sobre fundos escuros de um jeito que não acontece sobre o branco.

Por isso cada papel semântico precisa de um segundo valor, mais claro e 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);
}

A mesma escala, passos diferentes. É por isso que montar a escala primeiro compensa: o modo escuro vira um remapeamento, e não um segundo projeto de design.

Passo 5: nomeie pelo papel, não pelo valor

--brand-600 é um valor. --text-brand é um papel. Os componentes devem referenciar papéis.

O motivo é prático: quando a cor da marca mudar (e ela vai mudar), você gera a escala de novo e os papéis continuam apontando para os passos certos. Se os componentes referenciam --brand-600 diretamente, cada um deles precisa ser revisto.

É também o que torna os temas possíveis. Um papel pode apontar para passos diferentes em temas diferentes. Um valor bruto não pode.

Passo 6: verifique os pares, não só a escala

Uma escala aprovada no contraste ainda pode falhar no uso. Há duas coisas a verificar:

Cada combinação de texto sobre superfície que você realmente publica. Não todos os pares possíveis, só os que aparecem na interface. Corpo sobre o fundo da página, corpo sobre o card, link sobre o card, rótulo do botão sobre o botão.

Se duas cores quaisquer se confundem para pessoas daltônicas. Se o seu sistema tem um segundo destaque, como um verde de sucesso ao lado do azul da marca, verifique esse par especificamente. A checagem de contraste compara primeiro plano com fundo, nunca primeiro plano com primeiro plano, então essa falha passa em qualquer auditoria de razão de contraste.

A versão mais curta

Fixe o matiz. Avance a luminosidade em passos. Reduza o croma nas pontas. Atribua papéis por medição, e não a olho. Gere variantes escuras em vez de inverter. Nomeie pelo papel.

Seis passos e uma única cor da marca dão a você um sistema aprovado nos dois temas, sem ninguém precisar negociar com o manual da marca.

O nosso verificador de contraste faz a parte da medição: dê a ele um par e ele mostra a razão, o valor APCA no seu tamanho e peso reais e a cor aprovada mais próxima, caso o par não passe.