Apostila completa de Cor: paleta, contraste e sistemas
Cor é a decisão de design com maior impacto emocional e o maior potencial de excluir gente. Esta apostila cobre como a percepção funciona, os modelos e espaços de cor (RGB, HSL, OKLCH, CMYK, gamutes), teoria e harmonias, como construir uma paleta de verdade com escalas perceptualmente uniformes, acessibilidade e daltonismo, cor em CSS e em tokens, e três aprofundamentos por meio — produto digital, jogos e tempo real, animação e filme.
O que é cor e como a enxergamos
Objetivo: entender que cor é percepção (não uma propriedade fixa do objeto), separar cor de luz de cor de pigmento, e conhecer as três dimensões com que toda cor é descrita.
1.1 Cor é percepção
Um objeto "vermelho" apenas reflete certos comprimentos de onda e absorve o resto; a luz que o ilumina, o ambiente ao redor e o sistema visual de quem observa completam a equação. A mesma tinta parece uma cor ao meio-dia e outra sob lâmpada quente. O mesmo cinza parece mais claro sobre preto e mais escuro sobre branco (contraste simultâneo). Isso não é curiosidade acadêmica: significa que você nunca controla a cor final — controla probabilidades, e projeta com margem.
Projete a cor pela relação, não pelo valor isolado. "Este azul" importa menos do que "este azul contra aquele fundo, ao lado daquele texto, para aquela pessoa, naquela tela". Contraste, hierarquia e acessibilidade são relações; é nelas que a cor acerta ou erra.
1.2 Cor aditiva × subtrativa
| Aditiva (luz) | Subtrativa (pigmento) | |
|---|---|---|
| Primárias | Vermelho, Verde, Azul (RGB) | Ciano, Magenta, Amarelo (CMY) + Preto (K) |
| Somar tudo dá | Branco | Preto (na teoria; marrom-lama na prática) |
| Onde vive | Telas, projetores, LEDs | Impressão, tinta, pintura |
| Implicação | O que você desenha na tela é luz emitida — mais luz = mais claro | Mais tinta = mais escuro; o papel é o "branco" |
Quase todo trabalho desta apostila é aditivo (telas). CMYK aparece no Módulo 2 para quando o projeto também vai para papel.
ADITIVA (RGB) — ecrãs. Parte-se do preto e somam-se luzes. As três juntas dão branco.
SUBTRATIVA (CMY) — tinta. Parte-se do branco e cada tinta subtrai luz. As três juntas escurecem até quase preto.
Repare nas zonas de sobreposição: à esquerda, vermelho + verde dá amarelo — o que é contraintuitivo para quem só misturou tinta. À direita, ciano + magenta dá azul. São os mesmos pares, em sentidos opostos: os primários de um sistema são os secundários do outro. E é por isso que as três tintas juntas não dão preto puro na prática — daí o K do CMYK.
1.3 As três dimensões de qualquer cor
- Matiz (hue): "que cor é" — a posição na roda (vermelho, laranja, ciano…). Medida em graus (0–360).
- Saturação / croma (chroma): quão pura ou "cinzenta" — de vívida a acinzentada.
- Luminosidade (lightness / value): quão clara ou escura — de preto a branco.
Esses três eixos são a base de HSL, HSB, Lab/LCh e OKLCH (Módulo 2). Dominar "vou baixar a saturação e subir a luminosidade" em vez de caçar um hexadecimal é o pulo do gato.
1 · MATIZ — a volta completa dos 360°, repetida em cinco combinações de saturação e luminosidade. Cada faixa vai de 0° a 330°, de 30 em 30.
Compare as linhas de cima para baixo. O matiz é o mesmo em todas — o que muda é quanto dele se consegue ver. Na última linha (luminosidade 30) os matizes aproximam-se uns dos outros; na quarta (luminosidade 75) também. Só na zona média de luminosidade é que os 12 matizes se distinguem bem, e é por isso que uma paleta com muitos tons claros ou muitos tons escuros parece ter menos cores do que tem.
2 · SATURAÇÃO — cinco matizes, cada um do puro (100) ao cinzento (0), com luminosidade fixa em 50.
Repare que os cinco chegam ao mesmo cinzento à direita: com saturação zero, o matiz deixa de existir. E repare na diferença de percurso — o amarelo perde identidade muito mais depressa que o azul, porque a saturação em HSL não é perceptualmente uniforme (é o problema que o OKLCH resolve, secção 2.4).
3 · LUMINOSIDADE — os mesmos cinco matizes, do quase branco ao quase preto, com saturação fixa em 70.
O achado mais útil está na coluna do meio: as cinco cores têm a mesma «luminosidade» declarada (50) e não parecem ter o mesmo brilho. O amarelo salta, o azul recua. HSL trata os cinco matizes como iguais e o olho não os vê assim — a mesma razão pela qual não se pode escolher a cor do texto pela luminosidade em HSL, e é preciso medir contraste a sério (secção 5.1).
A conclusão prática das três: dominar «vou baixar a saturação e subir a luminosidade» em vez de caçar um hexadecimal é o passo que separa quem tenta cores de quem as controla — mas só funciona se souber que estes três eixos não são independentes na percepção, mesmo sendo independentes na fórmula.
1.4 Onde a cor decide um projeto
- Marca: a cor é frequentemente o ativo distintivo nº 1 (ver a apostila Branding).
- Interface: hierarquia, estados, feedback, acessibilidade — a maior superfície de risco.
- Visualização de dados: a cor é a informação; erro de paleta = leitura errada (ver DataVis Avançada).
- Jogos: legibilidade de gameplay, mood, fluxo de luz linear (Módulo 8).
- Animação e filme: a jornada emocional é escrita em cor — o "color script" (Módulo 9).
Perguntas de abertura: "Por que a mesma cor parece diferente em contextos diferentes?" (contraste simultâneo; luz; adaptação do olho), "Diferença entre cor aditiva e subtrativa?", "Quais são as três dimensões de uma cor?" (matiz, saturação/croma, luminosidade). Falar em relação e percepção, não em "gosto de azul", já sinaliza maturidade.
✏️ Exercício 1 — Descreva em três eixos
Pegue quatro cores de um site ou app que você usa e descreva cada uma só em palavras: matiz aproximado, saturação (baixa/média/alta), luminosidade (escura/média/clara). Depois diga qual é a cor de ação (botão principal) e por que ela "salta" — em termos dos três eixos e do fundo.
Gabarito (modelo): "Fundo: matiz neutro levemente azulado, saturação baixíssima, luminosidade muito clara. Texto: neutro, saturação ~0, luminosidade escura. Ação: matiz ~230° (azul), saturação alta, luminosidade média. A ação salta porque é a única com saturação alta e porque sua luminosidade contrasta fortemente com o fundo claro — é a relação (saturação isolada + contraste de luminosidade), não o tom em si."
Modelos e espaços de cor
Objetivo: saber o que cada modelo representa, por que HSL engana, por que OKLCH é o padrão moderno para UI, e o que é gamut (sRGB, P3, Rec.2020).
2.1 RGB e HEX
- Três canais (R, G, B), normalmente 8 bits cada (0–255), escritos em hexadecimal:
#1E90FF. - Os valores não são lineares com a luz: há uma curva gamma (~sRGB) entre o número e a intensidade física — feita para dar mais precisão nos tons escuros, onde o olho é mais sensível. Isso importa em blending e em jogos (Módulo 8).
- RGB é ótimo para máquina, péssimo para raciocinar: "quero um pouco mais claro" não tem operação óbvia.
2.2 HSL e HSB/HSV
Reorganizam o RGB nos três eixos intuitivos (matiz, saturação, luminosidade/brilho). Ótimos para ajustar uma cor. O problema: não são perceptualmente uniformes — hsl(60 100% 50%) (amarelo) e hsl(240 100% 50%) (azul) têm a mesma "lightness" no modelo mas o amarelo parece muito mais claro. Fazer uma escala de tons variando só o L de HSL produz degraus irregulares e matizes que "derivam".
2.3 Lab e LCh
CIELAB foi desenhado para que distâncias iguais no espaço correspondam a diferenças percebidas iguais. LCh é a versão em coordenadas polares (Lightness, Chroma, hue) — os mesmos três eixos intuitivos, mas perceptualmente honestos. Base do ΔE (delta E), a métrica de "quão diferentes são duas cores".
2.4 OKLab / OKLCH — o modelo moderno para UI
- Correção do Lab com melhor uniformidade, sobretudo em azuis e na previsibilidade do matiz ao mudar a luminosidade.
oklch(L C H): L 0–1 (ou %), C 0–~0.37, H 0–360.- Por que adotar: variar só o L dá uma escala de tons com degraus visualmente iguais; manter L e C fixos entre matizes diferentes dá cores que "pesam" igual; interpolação de gradiente sem passar por cinza-lama. É nativo em CSS moderno.
/* mesma luminosidade e croma percebidos — três matizes que "combinam" de peso */ --blue: oklch(62% 0.17 254); --green: oklch(62% 0.17 150); --red: oklch(62% 0.17 27); /* uma escala de tons: só o L muda, em passos regulares */ --gray-100: oklch(97% 0.005 260); --gray-300: oklch(88% 0.010 260); --gray-500: oklch(64% 0.015 260); --gray-700: oklch(45% 0.015 260); --gray-900: oklch(22% 0.012 260);
2.5 CMYK, cor de processo e spot
- CMYK (subtrativa): para impressão. Gamut menor que o de tela — cores vívidas de tela "somem" no papel.
- Cor de processo: reproduzida misturando C, M, Y, K.
- Cor spot (ex.: Pantone): uma tinta pré-misturada específica — consistência exata entre lotes/materiais, usada em identidade de marca. Definida por biblioteca, não por valores livres.
- Se o projeto vai para tela e papel, defina a cor de marca com equivalentes: HEX/sRGB, CMYK, Pantone — e aceite que não serão idênticas.
2.6 Gamut: sRGB, Display P3, Rec.709/2020
| Gamut | Cobre | Onde |
|---|---|---|
| sRGB | o "mínimo comum" da web há 25 anos | maioria dos monitores; assuma-o como base |
| Display P3 | ~25% mais cores que sRGB (verdes/vermelhos mais vívidos) | telas Apple recentes, muitos celulares e monitores novos |
| Rec.709 | ~sRGB | vídeo HD / broadcast (Módulo 9) |
| Rec.2020 | bem maior, base do HDR | vídeo UHD/HDR; poucos monitores cobrem 100% |
| Adobe RGB | maior que sRGB nos ciano-verdes | fotografia, pré-impressão |
Fora do gamut (out of gamut): uma cor que o dispositivo não consegue mostrar — ela é "recortada" (clipping) para a mais próxima que cabe. Em CSS, oklch() pode descrever cores fora do sRGB; use @media (color-gamut: p3) para servir a versão vívida só a quem a exibe, com fallback em sRGB.
Raciocine e gere paletas em OKLCH. Entregue tokens em oklch() (com fallback hex/rgb para navegadores antigos). Use HSL só para tweaks rápidos, sabendo que ele mente sobre luminosidade. Guarde CMYK/Pantone só se houver impressão. Trabalhe o documento em sRGB por padrão e trate P3 como aprimoramento progressivo.
Perguntas: "Por que uma escala de tons feita variando o L de HSL fica irregular?" (HSL não é perceptualmente uniforme), "O que OKLCH resolve?", "O que é gamut e o que acontece com uma cor fora dele?" (clipping), "Diferença entre cor de processo e cor spot?". Citar oklch() e @media (color-gamut) mostra que você acompanha o CSS atual.
✏️ Exercício 2 — Traduza e compare
(a) Explique, para um colega, por que hsl(55 100% 50%) e hsl(250 100% 50%) não parecem ter o mesmo brilho apesar do "50%". (b) Escreva três cores em oklch() — um azul, um verde, um laranja — que tenham o mesmo peso visual. (c) Diga o que fazer para que um vermelho vívido de P3 não apareça "lavado" em quem só tem sRGB.
Gabarito: (a) o "L" do HSL é uma média dos canais RGB, não a luminosidade percebida; o olho é muito mais sensível ao verde/amarelo, então o amarelo em "50%" parece claro e o azul parece escuro. (b) ex.: oklch(65% 0.16 250), oklch(65% 0.16 150), oklch(65% 0.16 60) — mesmo L e C, só o H muda. (c) definir a cor com oklch() e um fallback sRGB antes, ou usar @media (color-gamut: p3) / @supports para só entregar a versão P3 a quem a exibe; o fallback sRGB será a cor "recortada" mais próxima, propositalmente escolhida.
Teoria da cor e harmonias
Objetivo: usar a roda cromática e os esquemas clássicos como ponto de partida, entender os tipos de contraste, e a proporção 60-30-10 — sem tratar "regras" como lei.
3.1 A roda cromática
A roda tradicional de artista usa primárias RYB (vermelho, amarelo, azul) — é um modelo histórico, não físico, mas continua útil para pensar relações (o que é oposto, o que é vizinho). Ferramentas digitais geralmente usam a roda HSL/HSB (matiz em 360°). Para gerar paletas, prefira raciocinar em graus de matiz num espaço uniforme (OKLCH).
Esta é a roda em matiz: os 360 graus do círculo, com saturação e luminosidade constantes. O vermelho está a 0°, o verde a 120°, o azul a 240°.
A distância angular entre duas cores é o que define uma harmonia. Todos os esquemas do capítulo seguinte são apenas formas diferentes de escolher ângulos — e é por isso que se desenham sobre a roda.
Atenção a uma armadilha: esta roda é RGB, feita para ecrã. A roda que se aprende em pintura tem primários vermelho, amarelo e azul, e por isso o complementar do vermelho lá é o verde, aqui é o ciano. Nenhuma das duas é a certa — são modelos diferentes para meios diferentes.
3.2 Esquemas de harmonia
Em cada bloco, o ponto marcado na roda é exactamente a cor que está nessa posição (matiz puro, saturação 100, luminosidade 50). A amostra grande mostra a versão utilizável do mesmo matiz — saturação 72, luminosidade 52 — porque cores a 100% de saturação raramente servem para interface. A legenda dá os dois valores, com pré-visualização de cada um.
MONOCROMÁTICO — um só matiz
em uso hsl(210 72% 52%) #2C85DD
Não há decisão de matiz nenhuma: toda a variação vem de saturação e luminosidade. É o esquema mais fácil de acertar e o mais difícil de tornar interessante — se ficar chato, o erro está quase sempre em não afastar suficientemente as luminosidades.
ANÁLOGA — vizinhas, 30° entre si
em uso hsl(180 72% 52%) #2CDDDD
em uso hsl(210 72% 52%) #2C85DD
em uso hsl(240 72% 52%) #2C2CDD
Serena e coesa, porque não há conflito de matiz. O risco é ficar monótona — resolve-se variando bastante a luminosidade, não acrescentando matizes.
COMPLEMENTAR — 180° de distância
em uso hsl(210 72% 52%) #2C85DD
em uso hsl(30 72% 52%) #DD852C
Máximo contraste de matiz. Vibrante e difícil de equilibrar: use uma como dominante e a outra só como acento, nunca em partes iguais. É o par azul/laranja que a pintura usa há séculos e que aparece na figura logo a seguir.
COMPLEMENTAR DIVIDIDA — a oposta, e as duas ao lado dela
em uso hsl(210 72% 52%) #2C85DD
em uso hsl(15 72% 52%) #DD592C
em uso hsl(45 72% 52%) #DDB12C
Quase todo o contraste da complementar, com bastante menos tensão. É a mais segura das quatro e a que costuma resolver quando a complementar pura fica agressiva.
TRÍADE — 120° entre si
em uso hsl(0 72% 52%) #DD2C2C
em uso hsl(120 72% 52%) #2CDD2C
em uso hsl(240 72% 52%) #2C2CDD
Equilibrada e viva. Três cores fortes competem entre si: a regra 60-30-10 é praticamente obrigatória aqui (secção 3.5).
TETRÁDICA — dois pares complementares
em uso hsl(210 72% 52%) #2C85DD
em uso hsl(30 72% 52%) #DD852C
em uso hsl(120 72% 52%) #2CDD2C
em uso hsl(300 72% 52%) #DD2CDD
A mais rica e a mais fácil de estragar: quatro matizes fortes não cabem todos em primeiro plano. Na prática usa-se com um dominante claro e os outros três reduzidos a acentos — ou baixando muito a saturação de dois deles.
| Esquema | Como | Sensação / uso |
|---|---|---|
| Monocromático | um matiz, variando saturação e luminosidade | coeso, calmo, sofisticado; fácil de acertar |
| Análogo | 2–4 matizes vizinhos (ex.: azul, azul-esverdeado, verde) | harmônico, natural; escolha um dominante |
| Complementar | dois matizes opostos (ex.: azul + laranja) | alto contraste, vibrante; um domina, o outro é acento |
| Complementar dividido | um matiz + os dois vizinhos do seu oposto | contraste com menos tensão que o complementar puro |
| Tríade | três matizes equidistantes (120°) | equilibrado e animado; difícil sem um dominante claro |
| Tetrádica / retângulo | dois pares complementares | rico, mas fácil de virar bagunça — muito cuidado com proporção |
Duas aplicações da harmonia análoga, com a mesma escolha de matizes e decisões opostas quanto à luminosidade — que é o que decide se o resultado tem hierarquia ou não:
3.3 Os contrastes (Itten)
- De matiz: cores puras diferentes lado a lado (primárias) — enérgico, "infantil" se exagerado.
- Claro-escuro: diferença de luminosidade — o mais importante para legibilidade.
- Quente-frio: avanço/recuo, profundidade.
- Complementar: opostos que se intensificam.
- Simultâneo: o fundo empurra a cor para o complementar dele (um cinza sobre laranja "puxa" azulado).
- De saturação: pura vs acinzentada — ótimo para hierarquia sutil.
- De extensão (proporção): uma área pequena de cor intensa equilibra uma área grande de cor calma.
3.4 "Regras" são ponto de partida
Esquemas de harmonia ajudam a não travar diante da roda, mas os melhores sistemas de cor reais quebram esquemas o tempo todo: um análogo com um acento complementar, um "quase-monocromático" com um neutro temperado. Use os nomes para comunicar e para começar; julgue pelo resultado no contexto.
3.5 A proporção 60-30-10
Um ponto de partida para distribuir: 60% cor dominante (geralmente um neutro/superfície), 30% secundária, 10% acento (a cor de ação, o destaque). Impede o erro clássico de dar peso igual a tudo — o que apaga a hierarquia. Em UI, "60%" quase sempre é branco/cinza.
A regra é fácil de enunciar e difícil de acreditar até se ver. Os três quadros seguintes são de domínio público e estão aqui por serem, cada um, uma demonstração diferente da mesma ideia — a tira por baixo de cada imagem mostra as cores nas proporções aproximadas em que aparecem na tela.
As três barras usam exactamente as mesmas três cores. Só muda quanto espaço cada uma ocupa.
60 · 30 · 10 — hierarquia clara
33 · 33 · 33 — o erro clássico
45 · 45 · 10 — dois dominantes a competir
Na primeira, o laranja
#E8873A é claramente o destaque. Na segunda
deixa de ser destaque de coisa nenhuma — é apenas a terceira cor. Na terceira, azul
#1F4E9C e o neutro
#EDF0F2 disputam a dominância e o ecrã fica sem
centro. O acento não é definido pela cor: é definido pela escassez.
- 60% — fundo, superfícies de cartão, espaço vazio. Quase sempre
#FFFFFFou um cinza muito claro como#F4F6F8. - 30% — texto, bordas, ícones, barras de navegação. Os neutros médios e escuros, mais a cor de
marca em áreas grandes:
#44555F,#15222C. - 10% — botões primários, ligações, estados activos, indicadores. É aqui que a cor de acento
vive:
#0E7C6B.
O teste: tire uma captura do ecrã, desfoque-a até não conseguir ler nada, e veja onde o olho pousa. Se pousar em três sítios diferentes, a proporção está errada.
Perguntas: "Como você criaria uma paleta a partir de uma cor de marca?" (monocromático/análogo para o sistema + um acento; Módulo 4), "Qual contraste importa para legibilidade?" (claro-escuro / luminosidade), "O que é a regra 60-30-10?", "Por que um cinza parece colorido sobre um fundo saturado?" (contraste simultâneo).
✏️ Exercício 3 — Do matiz ao esquema
Sua cor de marca é um verde-azulado (~175°). Proponha: (a) um esquema para o sistema de UI e por quê; (b) a cor de acento para ações e alertas; (c) como você aplicaria 60-30-10 numa tela de dashboard.
Gabarito (uma boa resposta): (a) quase-monocromático/análogo: neutros temperados com um leve viés do matiz da marca + o verde-azulado como cor de identidade — coeso e deixa espaço para semânticas. (b) para ação, um azul mais puro (não a cor de marca, para a ação não competir com a identidade) ou o próprio matiz da marca em L/C bem definidos; para alerta/erro, um vermelho-alaranjado (~25°), quente e oposto o suficiente para saltar; sucesso num verde mais amarelado (~145°) distinto do matiz da marca. (c) 60% superfícies (branco/cinza-100/200), 30% componentes e bordas (cinza-300/500 + a cor de marca em áreas de navegação), 10% ações e destaques (o acento + as semânticas), sempre checando contraste.
Construir uma paleta
Objetivo: um método repetível — âncora, suporte, neutros, semânticas — e escalas de tom perceptualmente uniformes, nomeadas para escalar.
Em partes iguais — três cores a disputar o mesmo palco
60-30-10 — uma domina, uma apoia, uma acentua
A diferença não é de gosto: é de hierarquia. Na primeira barra nada se destaca porque tudo se destaca. Na segunda, os 10% de vermelho tornam-se o ponto de atenção precisamente por serem pouco — e é assim que se constrói um botão de ação que se vê sem gritar. Repare também que a dominante está muito dessaturada: numa interface, os 60% quase nunca são cor a sério.
4.1 O método
- Âncora: a cor de identidade (da marca) ou a cor de ação. Uma só.
- Suporte: 0–2 matizes que acompanham a âncora (análogos, ou um complementar de acento).
- Neutros: a escada de cinzas — o esqueleto de qualquer UI (4.2).
- Semânticas: sucesso, aviso, erro, informação — matizes com significado convencional, distintos entre si e do resto.
- Escalas de tom: cada cor vira uma rampa de ~10 degraus (4.3).
Tudo o que se segue sai de uma decisão só —
o azul oklch(62% 0.17 254). Repare que os passos 2 a 5 nunca
escolhem uma cor nova: derivam-na, mexendo num eixo de cada vez.
PASSO 1 · A âncora — uma decisão, e só uma
oklch(62% 0.17 254)
#2D87E9
É a cor da marca ou a cor de ação. Escolhe-se em OKLCH e não em hexadecimal, porque é a partir do L e do C que tudo o resto vai ser derivado — com um hexadecimal ficaria a adivinhar.
PASSO 2 · Suporte — mexer só no matiz
oklch(62% 0.17 254)
#2D87E9
oklch(62% 0.17 224)
#0098D1
oklch(62% 0.17 284)
#7C73E7
oklch(70% 0.15 74)
#D58E00
Os dois análogos estão a ±30° da âncora, com L e C exactamente iguais — por isso pesam o mesmo e não competem. O acento é o oposto (254 − 180 = 74°), com o L subido para 70: a 62% ficava escuro de mais para ser um destaque. Um acento tem de saltar, e saltar é uma questão de luminosidade tanto como de matiz.
PASSO 3 · Neutros — o matiz da âncora, com croma quase zero
H 254
Nove degraus, do L 97 ao L 21, com croma entre 0.006 e 0.014 no mesmo matiz 254. Não são cinzas puros: são cinzas com um vestígio de azul, e é isso que os faz parecer da mesma família da âncora em vez de emprestados (secção 4.2). O croma sobe ligeiramente no meio porque é aí que a cor «aguenta» mais sem sujar.
PASSO 4 · Semânticas — matizes convencionais, pesos iguais
oklch(62% 0.15 150)
#2E9E52
oklch(75% 0.15 80)
#DFA11A
oklch(58% 0.19 25)
#D33A3C
oklch(62% 0.17 254)
#2D87E9
Três notas que decidem se isto funciona. Uma: a informação é a própria âncora — não se inventa uma quinta cor para dizer o que a cor de ação já diz. Duas: o aviso está a L 75 e não a 62, porque o amarelo a 62% de luminosidade fica castanho. Três: sucesso a 150° e erro a 25° são o par mais distinguível para quem tem deficiência de visão de cores — mas ainda assim não podem ser a única indicação (secção 5.2).
PASSO 5 · Escalas — cada cor vira onze degraus
50 → 950
A rampa da âncora, do 50 ao 950. O L desce em passos regulares e o C faz um arco — sobe até ao 500 e volta a descer, porque nas pontas a cor não aguenta croma sem parecer suja. Faça isto para a âncora, para o acento e para as quatro semânticas e a paleta está completa: seis rampas, todas derivadas de uma única decisão inicial.
- Escolher os matizes de suporte a olho, em hexadecimal. Ficam com L e C diferentes sem que se note, e depois há sempre uma cor que «salta» sem se perceber porquê.
- Usar cinzas neutros a sério ao lado de uma âncora saturada. Parecem sujos por contraste simultâneo — o cinza puro parece ganhar a cor oposta à que está ao lado.
- Aplicar a mesma luminosidade a todos os matizes. Amarelo e azul ao mesmo L não têm o mesmo contraste sobre branco. A rampa dá-lhe degraus regulares; o contraste ainda tem de ser medido (secção 5.1).
4.2 Neutros: cinzas temperados e a escada
- Cinza puro (C = 0) é frio e "morto" em muitos contextos. Um neutro temperado — croma baixíssimo (0.005–0.02) no matiz da marca ou levemente azulado/quente — dá coesão sem parecer colorido.
- A escada de neutros (100 → 900): fundos, superfícies elevadas, bordas, divisores, texto desabilitado, texto secundário, texto primário. Uma UI inteira pode ser construída só com ela + a cor de ação.
- No modo escuro, os neutros não são o inverso: a rampa é recomprimida e levemente dessaturada (Módulo 7).
4.3 Escalas de tom (50–950)
Gere cada rampa em OKLCH, variando principalmente o L em passos perceptualmente regulares, com o croma subindo em direção ao meio da rampa (onde a cor "aguenta" mais saturação) e caindo nas pontas. Mantenha o H quase constante — pequenas correções de matiz podem compensar o Bezold–Brücke (o matiz parece deslocar com a luminosidade).
/* rampa "brand blue" — L desce, C faz um arco, H ~constante */ --blue-50: oklch(97% 0.02 250); --blue-100: oklch(93% 0.05 250); --blue-200: oklch(87% 0.09 250); --blue-300: oklch(80% 0.13 250); --blue-400: oklch(72% 0.16 252); --blue-500: oklch(64% 0.17 254); /* o "tom base" */ --blue-600: oklch(56% 0.16 255); --blue-700: oklch(47% 0.13 256); --blue-800: oklch(39% 0.10 257); --blue-900: oklch(30% 0.07 258); --blue-950: oklch(22% 0.05 260);
Um alvo prático: cada degrau deve ter contraste suficiente com o vizinho para ser distinguível, e a rampa deve conter pelo menos um tom que passe 4.5:1 sobre branco (para texto) e um que passe sobre preto.
OKLCH — o L desce em passos regulares
HSL — os mesmos onze degraus, o mesmo matiz
Olhe para as duas faixas com os olhos semicerrados. Na de OKLCH os degraus parecem igualmente espaçados; na de HSL a zona clara (50–300) muda pouco e a zona escura (700–950) muda de repente. É o mesmo matiz e o mesmo número de degraus — o que difere é que o L do OKLCH corresponde a luminosidade percebida e o L do HSL não.
É por isso que a secção acima insiste em gerar rampas em OKLCH: não é purismo, é a diferença entre um degrau 400 que se distingue do 300 e um que não se distingue.
E o que cada degrau autoriza a fazer
| Degrau | Valor | Hex | vs. branco | vs. preto | |
|---|---|---|---|---|---|
blue-50 | oklch(97% 0.02 254) | #ECF6FF | 1.09:1 | 19.19:1 | fundo com texto preto por cima |
blue-100 | oklch(93% 0.05 254) | #D2EAFF | 1.24:1 | 16.95:1 | fundo com texto preto por cima |
blue-200 | oklch(87% 0.09 254) | #ABD8FF | 1.50:1 | 14.00:1 | fundo com texto preto por cima |
blue-300 | oklch(80% 0.13 254) | #81C1FF | 1.91:1 | 11.01:1 | fundo com texto preto por cima |
blue-400 | oklch(72% 0.16 254) | #56A7FF | 2.51:1 | 8.37:1 | fundo com texto preto por cima |
blue-500 | oklch(62% 0.17 254) | #2D87E9 | 3.65:1 | 5.75:1 | fundo com texto preto por cima |
blue-600 | oklch(54% 0.16 254) | #176EC8 | 5.12:1 | 4.10:1 | serve como texto sobre branco |
blue-700 | oklch(45% 0.13 254) | #13559B | 7.50:1 | 2.80:1 | serve como texto sobre branco |
blue-800 | oklch(37% 0.1 254) | #124073 | 10.47:1 | 2.01:1 | serve como texto sobre branco |
blue-900 | oklch(29% 0.07 254) | #0F2C4D | 14.12:1 | 1.49:1 | serve como texto sobre branco |
blue-950 | oklch(21% 0.05 254) | #06192F | 17.68:1 | 1.19:1 | serve como texto sobre branco |
Os contrastes estão calculados pela fórmula das WCAG (secção 5.1). Repare no que a tabela revela: nenhum degrau do 50 ao 500 serve como texto sobre branco — só a partir do 600 é que passa. E o 500, o «tom base», aquele que quase toda a gente usa no botão primário, tem 3,65:1 contra branco e 5,75:1 contra preto: aguenta texto preto por cima, não aguenta texto branco. Como a expectativa habitual é botão azul com letras brancas, este é precisamente o degrau que costuma reprovar numa auditoria — e a correção é usar o 600 no botão, não clarear as letras. É a verificação que fecha a construção da paleta: uma rampa bonita que não tem um degrau acima de 4.5:1 sobre branco não está terminada.
4.4 Quantas cores
A paleta mínima viável: 1 neutro (rampa) + 1 ação + 3–4 semânticas. Muitos produtos maduros vivem nisso. Cada matiz novo é mais um eixo para manter consistente, testar em dark mode e validar em contraste — adicione só com motivo.
4.5 Nomear: papel × valor
/* PRIMITIVO — por valor/escala, sem significado de uso */ --blue-500: oklch(64% 0.17 254); --gray-700: oklch(45% 0.015 260); /* SEMÂNTICO — por papel; aponta para um primitivo e troca no dark mode */ --color-action: var(--blue-500); --color-text: var(--gray-900); --color-text-muted: var(--gray-600); --color-surface: white; --color-border: var(--gray-200); --color-danger: var(--red-600);
Componentes consomem só os semânticos. Trocar o tema = trocar a camada semântica, não caçar hexadecimais pelo código.
4.6 Ferramentas e validação
- Gerar: Leonardo (Adobe), Huetone, Radix Colors, a paleta do Tailwind, Coolors, ColorBox (Lyft).
- Validar: checar contraste de cada degrau sobre branco e preto; ver a rampa em escala de cinza (a luminosidade sobe monotônica?); simular daltonismo (Módulo 5); testar em dark mode.
- Documentar: uma página de specimen com cada token, seu valor, seus usos e os contrastes.
Tire a saturação da sua paleta inteira. Se em preto-e-branco você ainda distingue os degraus da rampa e a hierarquia da tela continua legível, a base está sólida — a cor está somando, não carregando. Se some tudo, você está dependendo de matiz para comunicar o que deveria vir de luminosidade.
4.7 Cinco paletas prontas, e a razão de cada decisão
Tudo o que está neste módulo junto, em cinco paletas que se podem copiar e usar. Não são sugestões estéticas: cada valor foi escolhido por uma regra concreta das secções anteriores, e todos os contrastes da coluna da direita foram calculados — não estimados. A percentagem indica a área aproximada que cada cor deve ocupar (secção 3.5); os tokens sem percentagem são de apoio e aparecem em áreas pequenas.
É o contraste de cada cor contra a superfície principal da própria paleta, pela fórmula das WCAG (secção 5.1). Tudo o que é texto está acima de 4.5:1; os contornos de campo estão acima de 3:1 (exigência 1.4.11); as divisórias decorativas ficam abaixo de propósito — uma divisória com contraste de texto vira uma linha que grita. É a distinção que quase todas as paletas partilhadas na internet ignoram.
1 · Produto digital / painel de controlo
Quando usar: Aplicações, painéis, ferramentas internas, SaaS. Ecrãs que se olham oito horas por dia.
| Token | Hex | OKLCH | % | Papel | vs. fundo |
|---|---|---|---|---|---|
--superficie | #FFFFFF | — | 62% | Fundo da página | 1.0:1 |
--superficie-2 | #F6F9FC | oklch(98% 0.006 254) | — | Cartões e zonas agrupadas | 1.1:1 |
--divisoria | #DCE5EC | oklch(91% 0.012 254) | — | Separadores decorativos | 1.3:1 |
--contorno | #8A939F | oklch(66% 0.020 254) | — | Bordas de inputs — precisa de 3:1 | 3.1:1 |
--tinta | #12212C | oklch(24% 0.020 254) | 26% | Texto principal | 16.4:1 |
--tinta-suave | #485A67 | oklch(45% 0.025 254) | — | Texto secundário, rótulos | 7.2:1 |
--acao | #005CB4 | oklch(48% 0.160 254) | 12% | Botão primário, ligações | 6.6:1 |
--acao-forte | #004595 | oklch(40% 0.150 254) | — | Estado hover e activo | 9.2:1 |
--sucesso | #006A29 | oklch(45% 0.140 152) | — | Confirmações | 6.8:1 |
--aviso | #935B00 | oklch(52% 0.130 75) | — | Atenção | 5.6:1 |
--erro | #B00C15 | oklch(48% 0.190 27) | — | Destrutivo e falhas | 7.2:1 |
Relatório mensal
Actualizado há 4 minutos
GerarCancelarA mesma paleta aplicada. Repare em quanto do ecrã é superfície.
Porque é que esta paleta respeita as regras
- É quase monocromática: superfícies, neutros e ação partilham o matiz 254. O que separa cada token não é a cor, é a luminosidade — a lição do capítulo 4.1.
- Os neutros não são cinzas puros: têm croma 0.006 a 0.025 no matiz da ação. É o que os impede de parecerem sujos ao lado do azul (secção 4.2).
- As semânticas estão todas em L 45–52, portanto pesam o mesmo. E o aviso está a 52 e não a 45, porque amarelo escuro vira castanho.
- A ação a L 48 e não a 62 é a decisão que faz esta paleta passar: um azul a 62 não aguenta texto branco por cima (é o problema do
blue-500da secção 4.3).
2 · Editorial / leitura longa
Quando usar: Blogues, documentação, revistas, relatórios. Ecrãs onde se lê texto corrido durante minutos.
| Token | Hex | OKLCH | % | Papel | vs. fundo |
|---|---|---|---|---|---|
--papel | #FAF6EF | oklch(97% 0.012 80) | 66% | Fundo — não branco puro | 1.0:1 |
--papel-2 | #F2ECE0 | oklch(93% 0.020 80) | — | Citações, blocos destacados | 1.1:1 |
--divisoria | #DED5C6 | oklch(86% 0.025 80) | — | Filetes e separadores | 1.4:1 |
--contorno | #9B8B86 | oklch(65% 0.020 40) | — | Bordas de campos | 3.0:1 |
--tinta | #1E1912 | oklch(23% 0.015 70) | 24% | Texto — não preto puro | 16.2:1 |
--tinta-suave | #5A5044 | oklch(45% 0.020 70) | — | Legendas, notas de rodapé | 7.3:1 |
--acento | #932E14 | oklch(45% 0.140 35) | 10% | Ligações e destaques | 7.4:1 |
--acento-forte | #781D03 | oklch(38% 0.130 35) | — | Ligação já visitada | 9.9:1 |
Relatório mensal
Actualizado há 4 minutos
GerarCancelarA mesma paleta aplicada. Repare em quanto do ecrã é superfície.
Porque é que esta paleta respeita as regras
- Nem branco puro nem preto puro. Papel a L 97 e tinta a L 23 dão 16:1 — muito acima do mínimo — e evitam o brilho do #FFFFFF sobre #000000, que cansa em leitura longa.
- Papel e tinta partilham um matiz quente (70–80°) com croma baixíssimo. A página tem temperatura sem ter cor, e é isso que a faz parecer papel e não ecrã.
- O acento é uma terracota a 35°, quase complementar do papel: contrasta sem gritar. Passa 7,4:1 sobre o papel, portanto serve como texto de ligação sem precisar de sublinhado para contraste — embora deva ter sublinhado por outra razão (secção 5.2: não depender só da cor).
- Só três cores no total. Numa página de leitura, cada cor a mais é uma interrupção.
3 · Comércio / loja
Quando usar: Lojas, marketplaces, reservas. Ecrãs onde há uma ação que vale dinheiro e várias que não valem.
| Token | Hex | OKLCH | % | Papel | vs. fundo |
|---|---|---|---|---|---|
--superficie | #FFFFFF | — | 60% | Fundo e fichas de produto | 1.0:1 |
--superficie-2 | #F4F7FA | oklch(97% 0.006 232) | — | Zonas agrupadas | 1.1:1 |
--divisoria | #D9E2EA | oklch(90% 0.012 232) | — | Separadores | 1.3:1 |
--contorno | #87959D | oklch(66% 0.020 232) | — | Bordas de campos | 3.1:1 |
--tinta | #0F1C26 | oklch(22% 0.020 232) | 30% | Texto e preços | 17.3:1 |
--tinta-suave | #465866 | oklch(45% 0.025 232) | — | Descrições, secundário | 7.4:1 |
--confianca | #00629C | oklch(46% 0.150 232) | — | Navegação, ligações, selos | 6.5:1 |
--comprar | #BD2900 | oklch(52% 0.190 35) | 10% | Só o botão de compra | 6.0:1 |
Ténis de corrida
Envio em 24h
89,90 €
ComprarDetalhesA mesma paleta aplicada. Repare em quanto do ecrã é superfície.
Porque é que esta paleta respeita as regras
- Duas cores com papéis separados por decreto: o azul é para navegar e para confiar; o laranja-vermelho é exclusivamente para a ação que gera receita. Nada mais no ecrã pode usar o segundo.
- São quase complementares (232° e 35°). É a harmonia mais forte da secção 3.2, e por isso mesmo é a que obriga à proporção: se o laranja aparecer em mais de 10% da área, deixa de ser o destaque.
- O laranja está a L 52 — mais claro que a ação da paleta 1 — e ainda assim passa 6:1 com texto branco. Foi escolhido no limite: mais claro e reprovava.
- O erro que esta paleta previne: pôr o botão «adicionar ao carrinho» e o botão «ver detalhes» na mesma cor. Quando tudo é destaque, nada é.
4 · Modo escuro (não é a paleta clara invertida)
Quando usar: Editores, ferramentas de longa sessão, media. E como par obrigatório de qualquer paleta clara.
| Token | Hex | OKLCH | % | Papel | vs. fundo |
|---|---|---|---|---|---|
--fundo | #0E141B | oklch(19% 0.015 254) | 58% | Base — não preto | 1.0:1 |
--superficie | #161E27 | oklch(24% 0.015 254) | — | Cartões (elevação 1) | 1.1:1 |
--superficie-2 | #1E2833 | oklch(29% 0.018 254) | — | Modais (elevação 2) | 1.2:1 |
--divisoria | #2C3946 | oklch(36% 0.020 254) | — | Separadores | 1.6:1 |
--tinta | #E7EEF5 | oklch(94% 0.010 254) | 30% | Texto — não branco | 15.8:1 |
--tinta-suave | #9AAAB8 | oklch(72% 0.020 254) | — | Secundário | 7.8:1 |
--acao | #62A7FA | oklch(72% 0.140 254) | 12% | Botões e ligações | 7.4:1 |
--sucesso | #56BD78 | oklch(72% 0.140 152) | — | Confirmações | 7.9:1 |
--erro | #ED756E | oklch(70% 0.150 25) | — | Falhas | 6.5:1 |
Relatório mensal
Actualizado há 4 minutos
GerarCancelarA mesma paleta aplicada. Repare em quanto do ecrã é superfície.
Porque é que esta paleta respeita as regras
- A elevação faz-se com luminosidade, não com sombra. Fundo L 19, cartão L 24, modal L 29 — no escuro as sombras não se veem, portanto o que está «mais acima» é o que está mais claro (secção 7.4).
- A ação subiu de L 48 (paleta 1) para L 72. Não é a mesma cor mais clara por gosto: um azul a L 48 sobre fundo escuro daria 2:1 e seria ilegível. É por isto que inverter a paleta clara não funciona.
- Fundo a L 19 e texto a L 94, e não 0 e 100. Branco puro sobre preto puro produz halo e cansaço — e deixa sem espaço para representar elevação.
- As três cores de estado estão todas a L 70–72: pesam o mesmo, e todas passam 6,5:1 ou mais sobre o fundo.
5 · Campanha / marca com atitude
Quando usar: Páginas de campanha, apresentações, cartazes, redes. Peças curtas onde chamar a atenção é o objetivo.
| Token | Hex | OKLCH | % | Papel | vs. fundo |
|---|---|---|---|---|---|
--superficie | #FFFFFF | — | 55% | Respiro — a cor mais importante | 1.0:1 |
--base | #4F2980 | oklch(38% 0.140 300) | 30% | Blocos grandes, cabeçalho | 10.7:1 |
--tinta | #141414 | oklch(20% 0 0) | — | Texto sobre branco | 18.4:1 |
--acento | #E19200 | oklch(72% 0.190 80) | 15% | Só o que tem de saltar | 2.5:1 |
Um título que ocupa espaço
O branco é 55% e é o que faz isto respirar.
Quero saber maisA mesma paleta aplicada. Repare em quanto do ecrã é superfície.
Porque é que esta paleta respeita as regras
- Roxo (300°) e âmbar (80°) estão a 140° na roda — quase complementares. É o par mais agressivo destas cinco paletas, e funciona só por causa da proporção.
- O branco é 55% e é a cor mais importante da paleta. Sem esse espaço, roxo e âmbar entram em guerra. É o erro clássico das paletas «vibrantes»: esquecer que o vazio também é uma cor.
- O âmbar leva texto preto, não branco: a L 72 dá 7,3:1 com preto e apenas 2,5:1 com branco. Escurecê-lo para aceitar texto branco tirava-lhe o brilho — por isso muda-se o texto, não a cor.
- Não use esta paleta numa aplicação. Ela existe para peças que se veem durante segundos. Numa ferramenta de trabalho, oito horas de roxo a 30% é insuportável.
- Uma âncora, tudo derivado. Em nenhuma delas há uma cor escolhida a olho: os neutros têm o matiz da ação, as semânticas têm a luminosidade umas das outras.
- Nunca #FFFFFF sobre #000000. Nem a mais neutra usa os extremos — precisam-se deles como margem de manobra.
- O acento é escasso por definição. Entre 10% e 15% em todas. Aumentar essa fatia não torna a paleta mais viva: torna-a sem centro.
- A cor de ação foi escolhida pelo contraste, não pela beleza. É a decisão que mais reprova paletas na prática, e a que menos vezes é feita a sério.
- Três a quatro cores chegam. A paleta 2 tem três. Nenhuma tem mais de quatro contando semânticas à parte.
Para adaptar qualquer uma à sua marca: mude o matiz da âncora e regenere tudo a partir dele mantendo os L e os C. Depois volte a medir os contrastes — mudar o matiz mantendo o L não mantém o contraste, porque a luminosidade percebida varia com o matiz (é o achado da secção 1.3).
Perguntas: "Como você constrói a paleta de um produto do zero?" (âncora → suporte → neutros → semânticas → rampas), "Como gerar uma escala de tons consistente?" (OKLCH, L regular, C em arco, H quase fixo), "Por que usar cinza temperado em vez de cinza puro?", "Semântico ou por escala ao nomear?" (as duas camadas). Ter uma paleta com rampas OKLCH e contrastes documentados no portfólio é forte.
✏️ Exercício 4 — Gere a paleta
Para um app de finanças pessoais, especifique: (a) a cor âncora e se ela é de marca ou de ação; (b) a escada de neutros (matiz e croma que você usaria); (c) as 4 semânticas; (d) para a rampa da âncora, os valores OKLCH aproximados de 3 degraus (claro, base, escuro) e qual passa 4.5:1 sobre branco.
Gabarito (uma boa resposta): (a) um azul-esverdeado de confiança como marca, e um azul mais puro separado para ação (para número negativo/positivo não brigar com a marca). (b) neutros temperados: H ≈ 250, C ≈ 0.008–0.015, rampa 50→950 com L de ~98% a ~20%. (c) sucesso/entrada de dinheiro oklch(~60% 0.15 150); erro/gasto acima do orçamento oklch(~55% 0.18 25); aviso oklch(~75% 0.15 80); info = a cor de ação. (d) âncora: claro oklch(93% 0.05 200), base oklch(64% 0.13 200), escuro oklch(42% 0.10 205) — o degrau escuro (~42% L) passa 4.5:1 sobre branco; o base costuma passar 3:1 (texto grande) mas não 4.5:1, então texto pequeno usa o escuro.
Cor acessível
Objetivo: garantir contraste suficiente, nunca depender só da cor, e projetar para os ~300 milhões de pessoas com alguma deficiência de visão de cores.
5.1 Contraste de texto (WCAG)
| Situação | AA | AAA |
|---|---|---|
| Texto normal (< 24px, ou < 18.66px bold) | 4.5:1 | 7:1 |
| Texto grande (≥ 24px, ou ≥ 18.66px bold) | 3:1 | 4.5:1 |
| Componentes de UI e gráficos essenciais (borda de input, ícone que carrega sentido) | 3:1 (1.4.11) | — |
- O ratio atual (1.4.3) é baseado em luminância relativa; tem falhas conhecidas (supervaloriza contraste em tons escuros). O rascunho da WCAG 3 / APCA propõe um modelo perceptual melhor — conheça, mas o que se audita hoje é o ratio. Os números podem mudar entre versões: confira a vigente.
- Vale para o texto secundário em cinza, para placeholders, para links, para o texto dentro de botões coloridos.
O terceiro é o erro mais comum de todos: cinzento claro para o que é "menos importante". Fica bonito no ecrã do designer, com luz controlada e visão jovem, e desaparece ao sol ou para quem tem visão reduzida. Menos importante resolve-se com tamanho, peso e posição — não baixando o contraste até ao ilegível.
5.2 Não depender só da cor (1.4.1)
Nenhuma informação pode ser transmitida apenas por cor. "Campos em vermelho são obrigatórios", "linha verde subiu, vermelha caiu", "status pela cor da bolinha" — todos falham para quem não distingue os matizes. Acrescente ícone, texto, forma, padrão ou posição. A cor reforça; não carrega sozinha.
5.3 Deficiências de visão de cores
| Tipo | O que muda | Prevalência (aprox.) |
|---|---|---|
| Deuteranomalia / -nopia | verde reduzido/ausente — confunde vermelho↔verde↔marrom | a mais comum; ~6% dos homens |
| Protanomalia / -nopia | vermelho reduzido/ausente; vermelhos parecem escuros | ~2% dos homens |
| Tritanomalia / -nopia | azul-amarelo afetado | rara |
| Acromatopsia | pouca ou nenhuma percepção de matiz | muito rara |
No total, cerca de 1 em 12 homens e 1 em 200 mulheres. O par vermelho/verde é o campo minado — evite usá-lo como única distinção (semáforos de status, gráficos).
Verde e vermelho são o par mais usado em interfaces e o pior possível — a deficiência de visão de cores mais comum afeta exatamente essa distinção, em cerca de 1 em cada 12 homens. E repare que nenhuma das duas cores é "má": o problema é usá-las como única diferença.
A correção não é trocar de cores: é acrescentar uma segunda dimensão — um ícone, um texto, uma diferença clara de luminosidade. O teste mais rápido de todos: converta a interface para escala de cinzentos. Se a informação sobrevive, sobrevive a qualquer deficiência de visão de cores.
5.4 Como testar
- Simuladores de daltonismo (extensões de browser, Figma plugins, Stark, o "Vision" do DevTools).
- Converter para escala de cinza: se duas cores que precisam se distinguir viram o mesmo cinza, elas só diferem em matiz — perigoso.
- Verificar que categorias adjacentes numa paleta de dados diferem em luminosidade, não só em matiz.
- Ferramentas de contraste no fluxo (Figma, DevTools, CI).
5.5 Modo escuro, alto contraste e preferências
@media (prefers-color-scheme: dark)— troque a camada semântica (Módulo 7).@media (prefers-contrast: more)— ofereça uma variante com contraste reforçado.@media (forced-colors: active)— o modo de alto contraste do SO substitui suas cores por uma paleta do sistema; não lute contra, teste e useforced-color-adjustsó onde necessário.
5.6 Cor, cultura e significado
Associações de cor (vermelho = perigo ou sorte? branco = pureza ou luto?) variam entre culturas e contextos. Convenções de UI são mais estáveis (vermelho = erro/destrutivo, verde = sucesso), mas não universais — não presuma. Em produto global, apoie o significado com texto e ícone (volta ao 5.2). A secção seguinte trata do que se sabe — e do que se inventa — sobre o efeito emocional da cor.
5.7 O aspecto emocional da cor — o que se sabe e o que se inventa
Esta é a parte da cor sobre a qual mais se escreve e menos se comprova. Vale separar com clareza três níveis de evidência, porque tratá-los como um só é a origem de quase toda a asneira que se diz sobre psicologia da cor.
| Nível | O que é | Quão sólido |
|---|---|---|
| 1 · Efeitos fisiológicos | Cores muito saturadas cansam mais depressa; azuis intensos à noite interferem com o sono; contraste extremo provoca fadiga visual. | Sólido. É óptica e biologia. |
| 2 · Convenções aprendidas | Vermelho = parar, erro, destrutivo. Verde = seguir, sucesso. Amarelo = aviso. Azul = ligação clicável. | Sólido dentro de um contexto — mas é aprendido, não inato, e varia por cultura e por domínio. |
| 3 · "Psicologia das cores" | "Azul transmite confiança", "laranja gera impulso de compra", "verde acalma". | Fraco. Os estudos são pequenos, mal replicados e muito dependentes de contexto. |
Aquelas infografias que atribuem uma emoção a cada cor são, na melhor das hipóteses, uma generalização ocidental e contemporânea. O mesmo vermelho é perigo num painel, sorte num casamento chinês e luto na África do Sul. O branco é pureza num contexto e luto noutro. Não existe significado inerente à cor — existe significado atribuído por cultura, categoria e repetição.
O que funciona de facto: a coerência de categoria
Se as marcas de banca são maioritariamente azuis, o azul não "transmite confiança" por si — ele transmite “banco”, porque é isso que a pessoa viu mil vezes. Isso dá duas jogadas opostas, ambas legítimas e conscientes:
- Alinhar com a categoria — ganha reconhecimento imediato, perde distinção. Sensato quando a confiança é o obstáculo principal.
- Contrariar a categoria — ganha distinção, e obriga a trabalhar mais para ser compreendido. É de onde vêm quase todas as marcas visualmente memoráveis de setores conservadores.
A pergunta útil nunca é "que emoção esta cor provoca?". É "o que é que esta cor faz lembrar, neste setor, a esta pessoa?" — e essa responde-se olhando para os concorrentes, não para uma tabela de significados.
O que a saturação e a luminosidade fazem, e que é mais fiável que o matiz
Curiosamente, os dois eixos menos discutidos são os que produzem efeito mais consistente:
- Saturação alta lê-se como energia, urgência, infantil, barato ou desportivo, conforme o contexto — e cansa em superfícies grandes.
- Saturação baixa lê-se como sóbrio, caro, profissional, e às vezes como apagado.
- Luminosidade alta lê-se como leve, limpo, arejado.
- Luminosidade baixa lê-se como sério, denso, premium ou pesado.
Trocar o matiz mantendo saturação e luminosidade muda muito menos a sensação do que o contrário. É um teste fácil de fazer e quase sempre surpreende quem espera que o matiz mande.
5.8 Cor em logótipos
A cor de um logótipo obedece a restrições que a cor de uma interface não tem, e ignorá-las produz identidades que só funcionam no ecrã de quem as desenhou.
Um logótipo tem de funcionar a uma cor sólida — preto sobre branco e branco sobre preto — antes de ter cor nenhuma. Se só se distingue por causa da cor, não é um logótipo: é uma ilustração colorida. Fatura, fax, gravação, bordado, carimbo e serigrafia a uma tinta continuam a existir. Ver Logótipos & Lettering, cap. 8.
As restrições próprias da identidade
- Reprodução em suportes que não controla: tinta em papel poroso, vinil de corte, bordado com número limitado de linhas, gravação a laser sem cor nenhuma. Um gradiente subtil não sobrevive a nada disto.
- Equivalências entre sistemas: a cor tem de ser especificada em RGB/HEX, CMYK e cor especial, e as três nunca são exatamente iguais. Escolher a cor primeiro na cor especial e derivar as outras dá resultados melhores que o inverso.
- Poucas cores. Duas costumam chegar; três já é muito. Cada cor extra multiplica o custo de impressão e a probabilidade de erro.
- Fundos alheios: o logótipo vai aparecer sobre fotografias, sobre a cor de outra marca, num patrocínio. Precisa de versão a uma cor e de regra de uso sobre fundo.
- Contraste na aplicação real — um logótipo claro sobre fundo claro é ilegível, e a norma de contraste aplica-se quando ele funciona como texto ou como controlo.
Cor como marca registada
Uma cor pode, em circunstâncias restritas, ser protegida como marca — mas o critério é exigente: exige demonstrar que o público associa aquela cor específica, naquele setor, àquela empresa, o que normalmente implica anos de uso consistente e prova documentada. Não é algo que se conquiste escolhendo um tom invulgar, e não é aconselhamento jurídico — ver Branding, cap. 08, e confirmar com um jurista.
A diferença entre cor de marca e cor de interface
São coisas diferentes e confundi-las estraga as duas. A cor de marca é escolhida para ser memorável e distinta; a cor de interface é escolhida para ser funcional e acessível. Uma marca com um vermelho vibrante não deve usar esse vermelho no botão principal, porque vermelho em interface significa destrutivo — e a convenção aprendida (nível 2 de 5.6) vence a identidade. Ver a secção 7.3.
Cinco casos de cor em identidade
Todos verificáveis por si — abra as páginas de identidade das marcas em causa e compare com o que se segue. As cores estão indicadas com pré-visualização e valor.
Caso 1 · Uma cor pode ser propriedade — e ter um custo de manutenção
Porque isto está aqui: é o caso mais antigo e mais puro do que este caso descreve. A cor não ganhou significado por ser bonita nem por ter sido bem escolhida — ganhou-o por ter sido aplicada consistentemente ao mesmo referente durante séculos, e por ser cara o suficiente para que ninguém pudesse imitá-la. É exactamente o que um registo de marca de cor exige provar hoje, em escala de anos em vez de séculos.Domínio público · Museu do Prado, via Wikimedia Commons
Há marcas que registaram uma cor concreta para uma categoria concreta: o roxo
#7D2248 da Cadbury para chocolate em tablete, o azul
#0085CA da Tiffany, o vermelho da sola dos sapatos de
Christian Louboutin. Nenhum destes registos foi fácil nem é total: o registo cobre uma categoria,
não a cor, e vários foram parcialmente anulados em tribunal.
A lição de trabalho, que é a que interessa: um registo destes exige provar que o público associa aquela cor àquela marca — o que só se consegue com uso consistente durante anos. Uma marca que muda de tom a cada campanha nunca chega lá. A consistência não é uma preferência estética: é a condição de existir o activo.
Caso 2 · A cor de marca que não serve para a interface
À esquerda, o vermelho de marca
#C8102E foi usado como cor de botão porque
«é a nossa cor». O resultado é que guardar e apagar ficam indistinguíveis. À direita a marca
continua presente — no cabeçalho, onde é identidade — e os botões usam as cores do seu significado.
Nada se perdeu de identidade e ganhou-se a capacidade de distinguir o que é destrutivo.
O vermelho #E50914 da Netflix é a identidade. Repare no que
ele não faz na aplicação: não é o botão de «reproduzir», que é branco; e o botão vermelho aparece
sobretudo em «subscrever». A razão é a do parágrafo acima — vermelho em interface significa destrutivo
ou urgente, e essa convenção vence a identidade.
O padrão que daqui se tira e se aplica a qualquer projeto: a cor de marca é para o que é da marca — logótipo, cabeçalho, o momento de compra. A cor de ação é escolhida à parte, por critérios funcionais. Confundir as duas é o erro mais comum em produtos de empresas com identidade forte.
Caso 3 · Quando a categoria já tem dono, mude de eixo
Cinco azuis de cinco produtos que toda a gente conhece. Estão todos entre os 198° e os 214° da roda — dezasseis graus de amplitude, num círculo de 360. Não é falta de imaginação de cinco equipas independentes: o azul comunica confiança e segurança, e em categorias onde essa associação é o argumento — redes, bancos, saúde, pagamentos — quase todos chegam ao mesmo sítio. O resultado é uma categoria onde a cor deixou de distinguir seja o que for.
matiz 214°! 4.23:1
matiz 210°✓ 5.69:1
matiz 203°✗ 2.83:1
matiz 199°! 3.02:1
matiz 198°! 3.08:1
Tape os nomes e as iniciais. É impossível dizer qual é qual — e note-se que estes são cinco dos produtos mais usados do mundo, com orçamentos de identidade ilimitados. O problema não se resolve com mais dinheiro: resolve-se escolhendo outro eixo.
matiz 264°✓ 4.64:1
matiz 20°! 3.21:1
matiz 141°✓ 8.12:1
matiz 59°✗ 1.10:1
matiz 358°! 3.05:1
Cinco marcas que foram deliberadamente para outro sítio da roda — do amarelo aos 59° ao roxo aos 264°, cobrindo praticamente o círculo inteiro. Distinguem-se à primeira, mesmo sem nomes. E cada uma pagou por isso o preço de não comunicar «instituição de confiança» — o que para uma rede de criadores, um serviço de música ou um alojamento entre particulares não é uma perda.
É uma troca, não uma melhoria. A decisão não é «azul é mau»: é perceber que o azul lhe dá uma associação de graça e lhe tira a distinção, e decidir de qual das duas precisa mais.
Cada inicial acima está na cor que a própria marca usa — nove em branco, e o Spotify em preto, porque as ondas do seu ícone são pretas sobre o verde. Não escolhi a cor que dá mais contraste: escolhi a que a identidade aplica de facto. O número por baixo de cada ícone é o contraste medido.
Sete das dez ficam abaixo de 4.5:1. Facebook, Twitter, Telegram, PayPal, SoundCloud, Snapchat, Airbnb. E duas ficam abaixo de 3:1 — o
pássaro branco do Twitter sobre #1DA1F2 dá
2,83:1, e o fantasma branco do Snapchat sobre
#FFFC00 dá 1,10:1, que é praticamente
invisível se medido como texto.
E isto não é um erro destas marcas. A WCAG 1.4.3 isenta explicitamente os logótipos: texto que faz parte de um logótipo ou nome de marca não tem requisito de contraste. Um símbolo de marca é reconhecido pela forma, não lido letra a letra — e por isso pode viver com contrastes que seriam inaceitáveis num parágrafo.
A consequência prática, e é a lição do caso 2 com números: se usar o amarelo do Snapchat como fundo de um bloco de texto branco, ou o azul-claro do Twitter num botão com letras brancas, está a reprovar numa auditoria de acessibilidade — mesmo estando a respeitar a identidade à letra. É por isto que praticamente toda a identidade séria tem, além da cor de marca, uma variante escurecida para uso em interface. A cor do logótipo e a cor do botão são dois problemas diferentes.
A decisão real que isto coloca: ou se aceita o azul e a distinção passa a vir da forma, da tipografia e do tom de voz — ou se vai para outro sítio da roda e se constrói a confiança por outros meios. As duas são estratégias legítimas; o que não é estratégia é escolher azul sem reparar que toda a gente já escolheu.
Sobre estes valores: são os hexadecimais publicamente documentados por cada marca
à data desta apostila, e vários já mudaram pelo menos uma vez — o azul do Facebook foi
#3B5998 antes de ser
#1877F2. Isso não enfraquece o argumento:
reforça-o, porque as revisões continuaram todas dentro da mesma faixa de matiz. E é um lembrete do
caso 1 — uma cor só se torna um activo com anos de aplicação consistente, e cada mudança de tom
recomeça parte dessa contagem.
Caso 4 · A cor tem de sobreviver ao pior meio, não ao melhor
filter:grayscale(1)É o teste inteiro, numa imagem. Se a sua identidade depender de distinguir dois elementos que ficam no mesmo cinzento, ela não sobrevive a uma fotocópia, a uma gravação, nem a um utilizador com deficiência de visão de cores (secção 5.3).
Um verde escolhido no ecrã calibrado do estúdio vai depois ser: bordado numa camisola, impresso a uma
cor num saco de papel, gravado a laser, reduzido a 16 px num favicon e — o teste mais duro —
fotocopiado a preto e branco. Um verde #009639 e um
vermelho #C8102E podem ter luminosidade quase idêntica: em
escala de cinzentos tornam-se o mesmo cinzento.
A verificação, que leva um minuto: converta a identidade para escala de cinzentos antes de a aprovar. Se os elementos deixarem de se distinguir, o problema não é da fotocopiadora — é de a identidade depender só do matiz, e matiz é a dimensão que mais facilmente se perde.
Caso 5 · O caso raro em que a cor é a marca
O contraste com o caso 3 é o ponto: um azul num ícone de 44 px distingue zero; este vermelho aplicado a um objeto de dois metros e meio, repetido por todo o país, distingue a um quarteirão. O poder de uma cor de marca depende muito mais da área e da repetição do que do valor escolhido. Christoph Braun · CC0 · via Wikimedia Commons
Há marcas cujo activo visual mais forte não é o símbolo nem o nome: é a cor aplicada a uma superfície grande — o laranja de uma loja de bricolage, o castanho de uma transportadora, o amarelo de um correio nacional. Funcionam porque cumprem três condições em simultâneo: a cor cobre área grande, é fisicamente consistente (tinta, veículo, fardamento) e é rara na categoria.
O contraste com o caso 3 é o ponto: um azul num logótipo pequeno de uma rede social distingue zero; um laranja numa fachada inteira distingue a dois quarteirões de distância. O poder de uma cor de marca depende muito mais da área e da repetição do que do valor escolhido.
Nenhum é sobre qual cor escolher. Todos são sobre consistência (caso 1), separar identidade de função (caso 2), contexto competitivo (caso 3), robustez no pior meio (caso 4) e área de aplicação (caso 5). É a resposta à pergunta de entrevista mais comum desta secção — «que cor escolherias para esta marca?» — cuja boa resposta começa sempre por «depende de onde vai ser aplicada e de quem já está na categoria».
5.9 Quatro casos
O que aconteceu: um produto usava cinzento claro para tudo o que era "secundário" — legendas, marcadores de posição, texto de ajuda. Aprovado por todos, bonito no ecrã do estúdio. Reprovou em auditoria de acessibilidade e gerou queixas de utilizadores mais velhos.
A causa: confundir hierarquia com contraste. Menos importante não significa menos legível.
A correção: a hierarquia passou a ser feita com tamanho, peso e espaço, mantendo todo o texto acima de 4.5:1. Nenhuma informação foi perdida e o desenho não piorou.
O que aconteceu: uma marca com vermelho forte na identidade usou-o no botão de ação principal. A taxa de conclusão caiu e o apoio recebeu perguntas do tipo "isto apaga alguma coisa?".
A causa: a convenção aprendida (vermelho = destrutivo) venceu a identidade — exatamente o mecanismo do nível 2 da secção 5.7.
A correção: o vermelho ficou reservado à marca e às ações destrutivas; a ação principal passou a usar uma cor da paleta de interface. Cor de marca e cor de interface são sistemas distintos.
O que aconteceu: identidade aprovada com um gradiente de três cores. Funcionou no site e falhou em tudo o resto: no bordado das fardas, na gravação, no carimbo e na fatura a preto e branco.
A causa: a cor foi decidida antes de a forma ser testada a uma cor.
A correção: criou-se uma versão a uma cor que funciona sozinha, e o gradiente passou a ser a versão preferencial em digital — não a única. A forma primeiro, a cor depois (secção 5.8).
O que aconteceu: um painel usava seis matizes com saturação e luminosidade parecidas. Ninguém conseguia ler a legenda de relance, e em impressão a preto e branco o gráfico ficava inútil.
A causa: variar apenas o matiz. Matiz sozinho é o eixo mais fraco dos três — e é o primeiro a desaparecer em escala de cinzentos e em deficiência de visão de cores.
A correção: reduziu-se a cinco categorias mais "outros", variou-se também a luminosidade, e acrescentaram-se rótulos diretos junto às séries em vez de legenda separada.
Texto cinza-claro (placeholder, legenda, "menos importante") abaixo de 4.5:1. Link distinguido do texto só pela cor, sem sublinhado. Erro de formulário só pela borda vermelha. Gráfico com 6 categorias em matizes de saturação e luminosidade parecidas. Estado (online/ocupado/ausente) só pela cor da bolinha. Botão colorido com texto branco que não alcança 4.5:1. Desativar o modo de alto contraste do sistema com !important.
Perguntas: "Quais são os limites de contraste da WCAG?" (4.5:1 normal, 3:1 grande e componentes), "O que significa 'não usar só a cor'?", "Como você testa uma paleta para daltonismo?" (simular + escala de cinza + luminosidade entre categorias), "Ratio vs APCA?". Mostrar um gráfico ou um sistema de status que funciona em deuteranopia é um diferencial concreto.
✏️ Exercício 5 — Conserte o componente
Um app mostra transações: valor em verde para entradas, vermelho para saídas; o único indicador é a cor. Legendas em #B0B0B0 sobre branco. Um selo "Pendente" em amarelo-claro com texto branco. Aponte os problemas e as correções.
Gabarito: (1) verde/vermelho como única distinção → falha 1.4.1 e é o par pior para daltonismo; adicione sinal +/−, o rótulo "Entrada/Saída", ou posição/ícone; garanta que os dois tons diferem em luminosidade. (2) #B0B0B0 em branco ≈ 1.9:1 → muito abaixo de 4.5:1; escureça para ~#595959. (3) selo amarelo-claro + texto branco → contraste ínfimo; use texto escuro sobre o amarelo (e cheque 4.5:1) ou um amarelo mais escuro com texto branco; acrescente um ícone de relógio para não depender da cor.
Cor em código (CSS e tokens)
Objetivo: dominar as sintaxes de cor do CSS moderno (oklch(), color-mix(), relative color), estruturar tokens, e lidar com transparência e gradientes sem sujeira.
6.1 Sintaxes de cor
color: #1E90FF; color: rgb(30 144 255 / 0.8); /* sintaxe moderna, sem vírgulas, alpha com / */ color: hsl(210 100% 56%); color: oklch(64% 0.17 254); /* perceptual — prefira para tokens */ color: oklch(64% 0.17 254 / 0.15); /* com alpha */ color: color(display-p3 0.2 0.56 1); /* cor fora do sRGB */ /* relative color syntax: derivar de outra cor */ --brand: oklch(64% 0.17 254); --brand-hover: oklch(from var(--brand) calc(l - 0.08) c h); --brand-tint: oklch(from var(--brand) 0.97 0.03 h); /* color-mix: misturar duas cores num espaço escolhido */ --brand-muted: color-mix(in oklch, var(--brand) 30%, white); --overlay: color-mix(in srgb, black 60%, transparent);
6.2 Palavras-chave úteis
currentColor: herda acolordo elemento — ótimo para ícones e bordas que devem "acompanhar" o texto.color-scheme: light dark: diz ao navegador que o elemento suporta os dois; ajusta scrollbars, inputs e oCanvas/CanvasTextdo sistema.- Cores de sistema (
Canvas,CanvasText,LinkText,AccentColor): respeitam o tema e o modo de alto contraste do SO.
6.3 Tokens de cor: as três camadas
/* 1. PRIMITIVOS — a paleta crua */ :root{ --blue-500: oklch(64% 0.17 254); --gray-50: oklch(98% 0.005 260); --gray-900: oklch(22% 0.012 260); --red-600: oklch(55% 0.18 25); } /* 2. SEMÂNTICOS — papéis; a única camada que os componentes usam */ :root{ --color-surface: var(--gray-50); --color-text: var(--gray-900); --color-action: var(--blue-500); --color-danger: var(--red-600); --color-border: color-mix(in oklch, var(--color-text) 12%, transparent); } /* 3. DARK MODE — redefine só os semânticos */ @media (prefers-color-scheme: dark){ :root{ --color-surface: oklch(20% 0.01 260); --color-text: oklch(95% 0.005 260); --color-action: oklch(72% 0.15 254); /* mais claro e menos saturado no escuro */ } }
6.4 Transparência e camadas
- Alpha é ótimo para bordas, sombras, overlays e estados (hover a 8%, selecionado a 12%) — se adapta a qualquer fundo.
- Empilhar transparências multiplica: três camadas a 20% não dão 60%. Para uma cor "sólida" previsível, "asse" com
color-mixcontra o fundo real. - Blend modes (
mix-blend-mode,background-blend-mode): efeitos ricos (multiply para sombras coloridas, screen para brilhos), mas imprevisíveis sobre conteúdo variável e caros — use pontualmente.
6.5 Gradientes
background: linear-gradient(in oklch, var(--blue-500), var(--teal-500));
/* interpolar em oklch/oklab evita o "cinza morto" no meio de dois matizes */
background: conic-gradient(from 90deg, ...);
background: radial-gradient(circle at 30% 20%, ...);
- Interpole em oklch/oklab (ou
hslcomlonger hue/shorter hueescolhido) para transições limpas. - Banding (faixas visíveis) aparece em gradientes suaves de tela: mitigue com um dithering sutil (ruído SVG/PNG sobreposto a baixa opacidade) ou gradiente com mais paradas.
- Cuidado com contraste: texto sobre gradiente precisa passar 4.5:1 no pior ponto.
6.6 P3 como aprimoramento progressivo
.cta{ background: #0A66FF; } /* fallback sRGB */
@supports (color: oklch(0% 0 0)){
.cta{ background: oklch(60% 0.20 258); } /* pode "vazar" para P3 onde houver */
}
@media (color-gamut: p3){
.cta{ background: color(display-p3 0.13 0.4 1); }
}
Guarde poucos primitivos e derive o resto com oklch(from …) e color-mix(): hover = base −8% de L; borda = texto a 12% de alpha; disabled = texto a 38%. Menos tokens crus para manter, e as relações ficam explícitas no código em vez de escondidas em dezenas de hexadecimais.
Perguntas de front-end: "Como você estrutura tokens de cor?" (primitivos → semânticos → componentes só usam semânticos; dark mode troca a camada semântica), "O que color-mix() e a relative color syntax resolvem?", "Por que interpolar gradiente em oklch?", "Como servir cores P3 sem quebrar sRGB?" (@supports / @media (color-gamut) + fallback).
✏️ Exercício 6 — Escreva o núcleo de tokens
Escreva o CSS de: 4 primitivos (ação, neutro claro, neutro escuro, perigo em oklch()); 6 semânticos (surface, text, text-muted, action, action-hover derivado, border derivada); e o bloco de dark mode redefinindo só os semânticos necessários. Explique como um componente de botão consumiria isso.
Gabarito (uma boa resposta): primitivos --blue-500, --gray-50, --gray-900, --red-600 em oklch(). Semânticos: --color-surface: var(--gray-50); --color-text: var(--gray-900); --color-text-muted: color-mix(in oklch, var(--color-text) 62%, var(--color-surface)); --color-action: var(--blue-500); --color-action-hover: oklch(from var(--color-action) calc(l - 0.08) c h); --color-border: color-mix(in oklch, var(--color-text) 12%, transparent). Dark: redefinir --color-surface, --color-text e --color-action (mais claro, C menor); os derivados se recalculam sozinhos. O botão usa background: var(--color-action), :hover → var(--color-action-hover), texto branco só se passar 4.5:1 (senão usar --color-text).
Cor para produto digital e web
Objetivo: o sistema de cor de uma aplicação — superfícies, elevação, estados, foco — cor de marca vs cor de UI, dados dentro do produto, modo escuro de verdade e theming.
7.1 O sistema de cor de um produto
| Papel | Notas |
|---|---|
| Superfícies (background, card, popover) | a base neutra; a elevação se dá por diferença sutil de luminosidade e por sombra |
| Texto (primário, secundário, desabilitado, sobre cor) | cada nível com contraste alvo; "sobre cor" tem par próprio validado |
| Bordas e divisores | geralmente texto a baixo alpha; ≥ 3:1 quando delimitam um controle |
| Ação (primária, secundária, destrutiva, link) | a cor de mais peso; destrutiva sempre com confirmação textual também |
| Estados (hover, active, focus, selected, disabled) | derivados por regra (±L, alpha), não cores novas à mão |
| Foco | anel visível, ≥ 3:1 com o fundo adjacente, não removível; use :focus-visible |
| Semânticas (success/warning/danger/info) | cada uma com rampa própria: fundo suave, borda, texto, ícone |
7.2 Cor em visualização de dados dentro do produto
- Categórica: matizes distintos, ~6–8 no máximo; distinguíveis em daltonismo e em cinza; ordem estável entre telas.
- Sequencial: uma rampa de luminosidade para quantidade (claro → escuro).
- Divergente: duas rampas a partir de um centro neutro (para "acima/abaixo de uma referência").
- Não reaproveite a cor de ação/marca como cor de série de dados — confunde "interativo" com "dado".
- Aprofundamento na apostila DataVis Avançada com Python & Web Design.
7.3 Cor de marca × cor de UI
A cor da marca nem sempre pode ser a cor de ação: se a marca é um vermelho, ele colide com "erro/destrutivo"; se é um amarelo, não alcança contraste como fundo de botão com texto branco. Solução comum: a marca vive na navegação, no logo, em áreas de identidade; a ação é uma cor derivada ou vizinha, escolhida por contraste e por não colidir com as semânticas.
7.4 Modo escuro de verdade
- Não inverta. Inverter luminosidade estoura as cores saturadas e destrói as sombras.
- Superfícies: não use preto puro (
#000) — cansa e "vibra" com texto branco; use um cinza muito escuro levemente temperado. A elevação fica mais clara (mais luz), não mais escura. - Cores de destaque: suba o L e baixe o croma — cores muito saturadas sobre fundo escuro "brilham" e cansam (efeito de irradiação).
- Sombras: quase não funcionam no escuro; comunique profundidade por luminosidade da superfície e por borda.
- Texto: branco puro sobre fundo escuro parece forte demais; use ~90–95% de L. Reavalie todos os contrastes — eles não se transferem do claro.
7.5 Theming e white-label
Um produto que precisa vestir a marca de cada cliente: exponha uma cor de marca como entrada e derive a paleta inteira (rampa via OKLCH, semânticas, estados) por função — em vez de pedir 40 valores ao cliente. Fixe as semânticas de status (não deixe o cliente tornar o "erro" verde). Valide contraste automaticamente para qualquer cor de entrada e ajuste (ex.: forçar o texto sobre a cor de marca a preto ou branco conforme o L dela).
7.6 Governança
- Lint: proibir cor literal (
#hex,rgb()) no código de componente — só tokens. - Contraste no CI: testar os pares texto/superfície e ação/texto-sobre-cor a cada build.
- Specimen vivo: todos os tokens, em claro e escuro, com valor, uso e contraste; do's & don'ts.
- Regra de quem adiciona um matiz novo (quase ninguém, quase nunca).
Perguntas de product/design systems: "Como você faz um modo escuro que não é só inverter?" (superfícies escuras temperadas, elevação por luz, destaque com +L −C, revalidar contraste), "A cor de marca pode ser a cor de ação?" (nem sempre — colisão com semânticas e contraste), "Como suportar white-label sem caos?" (uma entrada → paleta derivada + semânticas fixas + validação de contraste), "Como cor de dados difere de cor de UI?".
✏️ Exercício 7 — Do claro para o escuro
Você tem no claro: surface branco, texto gray-900, ação oklch(60% 0.19 258) com texto branco (passa 4.5:1), borda gray-200. Descreva as mudanças para o modo escuro, item a item, e o que você reverificaria.
Gabarito (uma boa resposta): surface → oklch(~20% 0.01 260) (não #000); superfícies elevadas → ~24–28% L. Texto → oklch(~95% 0.005 260), não branco puro; texto secundário mais claro que no claro, revalidado. Ação → subir L para ~72% e baixar C para ~0.14 (oklch(72% 0.14 258)); reverificar se o texto sobre ela deve virar escuro em vez de branco. Borda → texto a ~14–18% de alpha (mais visível que no claro). Sombras → trocar por borda/again por luminosidade de superfície. Reverificar: todos os pares texto/superfície, texto-sobre-ação, anel de foco, e a paleta de dados (que também muda no escuro).
Cor para jogos e tempo real
Objetivo: entender o fluxo de cor linear, valores de albedo plausíveis para PBR, HDR e tonemapping, color grading no engine, e a legibilidade de cor no gameplay.
8.1 O fluxo linear (linear vs sRGB)
- Texturas de cor (albedo) são guardadas com a curva sRGB; o engine as converte para linear antes de iluminar, porque somar e multiplicar luz só é fisicamente correto em espaço linear.
- Texturas de dados (normal map, roughness, metallic, AO) não são sRGB — marque-as como "linear"/"non-color" na importação, senão a iluminação sai errada.
- No fim do frame, o resultado linear passa por tonemapping e volta a sRGB (ou a um espaço HDR) para exibição.
- Sintoma clássico de erro: bordas de transparência escuras, luzes que "estouram" cedo demais, cores que ficam lavadas — quase sempre um espaço de cor trocado.
8.2 PBR e valores de albedo
- Base color / albedo em PBR é a cor difusa pura, sem sombra nem realce embutidos.
- Materiais reais raramente vão além dos extremos: dielétricos escuros não descem de ~30–50 sRGB; os mais claros (neve, gesso) não passam de ~230–240. Preto puro (0) e branco puro (255) em albedo "quebram" a resposta de luz.
- Metais têm albedo difuso ~0 e a "cor" vem do specular/reflectância; siga charts de referência (por metal).
- Não pinte oclusão nem highlight na textura de cor — isso é trabalho da luz.
8.3 HDR, exposição e tonemapping
- A cena é renderizada em HDR (valores de luz podem passar de 1.0). É preciso mapear esse intervalo para o display — o tonemapping.
- Operadores comuns: Reinhard (suave, "lava" realces), ACES (padrão de fato por anos; contrastado, satura realces), AgX (mais recente; desatura os realces de forma mais natural, evita "cores neon" no estouro).
- Exposição (manual ou auto/eye adaptation) define quanto da faixa HDR entra no mapeável — como a exposição de uma câmera.
- Escolha do operador é uma decisão estética e afeta toda a paleta percebida do jogo.
8.4 Color grading no engine
- Post-process: volumes/efeitos de câmera aplicam contraste, saturação, temperatura, curvas, vignette, bloom.
- LUTs (lookup tables): uma "receita" de cor pré-computada aplicada ao frame final — dá um look consistente e barato. Gere a LUT a partir de um still corrigido no software de cor.
- No Unity: URP/HDRP Volume com Color Adjustments, Tonemapping, Lift/Gamma/Gain, Color Curves, Split Toning. No Unreal: Post Process Volume + curvas ACES/console variables. Ver as apostilas Unity e Computação Gráfica & Three.js.
- Grade por área/estado (bioma, interior/exterior, "modo furtivo") com blends suaves entre volumes.
8.5 Legibilidade de gameplay
- Reserve cor para o que é jogável: use uma faixa de matiz/saturação para inimigos, outra para itens/loot, outra para perigo — e mantenha o ambiente mais dessaturado para elas saltarem.
- Silhueta + cor: cor sozinha não deve ser a única pista (Módulo 5 vale aqui); forma, contorno, ícone, animação reforçam.
- Modos para daltônicos não são só filtros: troque as cores de time/afiliação por pares seguros e permita ao jogador escolher; teste em deuteranopia (a mais comum).
- Contraste com o fundo: elementos de HUD e marcadores precisam funcionar sobre céu claro e caverna escura — outline, drop shadow, painel semitransparente.
- Feedback de dano/cura raramente deve ser só um flash vermelho/verde — vinheta + som + número.
8.6 Paleta e mood
- Defina key colors por fase/bioma e um "limite" de matizes — coerência lê como intenção; arco-íris lê como ruído.
- Use luz (temperatura, cor da key light e da fill), fog colorido e o grading para criar mood sem repintar assets.
- Concept art e um color key por nível guiam a equipe — o mesmo princípio do color script de animação (Módulo 9).
Normal/roughness maps importados como sRGB (iluminação errada). Albedo com preto/branco puro ou com sombra pintada. Comparar o look com tonemapping desligado. Grading tão forte que o gameplay-critical some (loot que vira parte do cenário). Time vermelho vs time verde sem opção acessível. HUD testado só numa cena clara. "Ficou lindo no meu monitor" sem checar em SDR/HDR e em telas baratas.
Perguntas (technical artist / game): "Por que iluminar em espaço linear?", "Que texturas não são sRGB?" (normal, roughness, metallic, AO), "O que o tonemapping faz e qual operador você usaria?" (ACES/AgX e por quê), "Como garantir que o loot é sempre visível?" (reservar cor + silhueta + grading que preserva o gameplay-critical), "Como fazer um modo daltônico de verdade?".
✏️ Exercício 8 — Diagnóstico e plano de cor
(a) Um objeto metálico no jogo aparece "chapado" e escuro sob qualquer luz. Cite duas causas de cor prováveis. (b) Playtesters daltônicos não distinguem aliados de inimigos (marcados por contorno vermelho/verde). Proponha a correção. (c) O jogo tem um bioma de deserto e um de floresta que parecem iguais de humor. O que você ajusta sem tocar nos assets?
Gabarito: (a) o normal/roughness map pode estar como sRGB (iluminação errada), ou o material está tratando o metal como dielétrico — metal precisa de metallic alto e a cor vindo do specular/reflectância, não do albedo difuso; albedo difuso de metal é ~0. (b) não usar vermelho/verde como única pista: pares seguros configuráveis (ex.: azul/laranja), ícones/formas diferentes por afiliação, e opção de daltonismo nas configurações; testar em deuteranopia. (c) temperatura e cor da luz (key quente e fill fria no deserto; verde-frio filtrado pela copa na floresta), fog colorido, e volumes de grading distintos (saturação, split toning, curvas) com key colors próprias — mais concept/color key para a equipe.
Cor para animação, motion e filme
Objetivo: escrever a jornada emocional em cor (color script), manter continuidade entre planos, trabalhar paleta limitada, e entender grading, espaços de vídeo e entrega.
9.1 Color script
Um color script é uma sequência de pequenos quadros (miniaturas pintadas) que mapeia a temperatura emocional da história ao longo do tempo — antes de animar. Usado em longas de animação para garantir que a cor "conta a história": o momento de esperança é quente e claro, o fundo do poço é dessaturado e frio, o clímax volta a saturar. É uma partitura de cor da narrativa inteira, vista de uma vez.
9.2 Paleta por sequência e continuidade
- Cada sequência tem uma paleta-chave (dominante + acentos + faixa de neutros) coerente com seu beat emocional.
- Continuidade entre planos: dentro de uma cena, a luz e a paleta não podem "pular" de plano para plano sem motivo — a hora do dia, a fonte de luz e o mood têm de bater. Frames de referência ("color keys") por cena guiam pintores e o lighting.
- Transições de mood são graduais, ao longo de vários planos — a cor "vira" junto com a história.
9.3 Paleta limitada em 2D
- Animação 2D tradicional usa paletas limitadas por personagem (cor base + 1–2 sombras + 1 luz) para ser pintável quadro a quadro com consistência.
- As cores de sombra costumam ter um viés de matiz (sombra puxando para o azul/violeta, ou para o complementar da luz) — não é só "a base mais escura".
- "Color models" por cena definem as variações do personagem em cada iluminação (dia, noite, interior, pôr do sol).
9.4 Grading, espaços de vídeo e scopes
| Espaço | Uso |
|---|---|
| Rec.709 / sRGB (gamma ~2.4) | entrega HD, web, broadcast SDR — o alvo padrão |
| Rec.2020 + PQ/HLG | HDR (UHD, streaming HDR) — muito mais brilho e gamut |
| ACES | pipeline de cor cena-referida para produção; entra tudo, converte, entrega em vários alvos de forma consistente |
- Primárias (lift/gamma/gain ou offset/contrast/pivot) para equilíbrio geral; secundárias (qualificação por cor/luminância, power windows) para ajustes locais.
- Scopes são a verdade objetiva (o monitor mente): waveform (luminância / exposição e clipping), parade RGB (balance de branco), vectorscope (matiz e saturação; a linha "skin tone").
- Monitorar em um display calibrado no espaço de entrega; o preview do editor/engine não é referência.
9.5 Motion graphics e web
- Paleta de marca em movimento: a cor precisa manter contraste e legibilidade durante transições, não só nos keyframes.
- Flash: nada deve piscar mais de 3 vezes por segundo em área significativa (WCAG 2.3.1) — risco de convulsão.
- Respeite
prefers-reduced-motion: ofereça uma versão com transições de cor suaves ou estáticas. - Para SVG/CSS animado, ver a apostila CSS Avançado: Animações & SVG; para vídeo com IA, Criação e Edição de Vídeos com IA.
9.6 Entrega: "por que ficou diferente no player"
- Arquivo sem tag de espaço de cor / primaries / transfer → o player adivinha e erra (o clássico "ficou lavado" ou "escuro demais").
- Mismatch de range (full 0–255 vs limited 16–235) → pretos acinzentados ou esmagados.
- Exportar do espaço de trabalho para o de entrega com a transform correta (ODT no ACES; conversão para Rec.709 fora dele).
- Testar o master no destino real (o site, o app, a TV) antes de fechar.
Color script (animação), color key por nível (jogo) e a paleta semântica de um produto (web) são a mesma ideia: decidir antes, em relação, o que cada cor significa ao longo da experiência — e depois manter a coerência. A ferramenta muda (miniaturas pintadas, volumes de post-process, tokens em OKLCH), a disciplina não.
Perguntas: "O que é um color script e para que serve?", "Como manter continuidade de cor entre planos?", "Por que as sombras numa paleta 2D não são só a base escurecida?", "Rec.709, Rec.2020, ACES — o que é o quê?", "Por que confiar em scopes e não no monitor?", "Como um vídeo 'fica diferente' de um player para outro?" (tags de espaço de cor e range).
✏️ Exercício 9 — Color script curto
Um curta de 3 atos: (1) rotina confortável, (2) perda e isolamento, (3) reconstrução. Descreva a paleta-chave de cada ato (dominante, acento, neutros, saturação, temperatura) e como você faria a transição entre eles. Depois cite um cuidado de acessibilidade se esse curta virar peça de motion para a web.
Gabarito (uma boa resposta): Ato 1: dominante quente-clara (âmbar/creme), acento verde suave, neutros mornos, saturação média-alta, temperatura quente. Ato 2: dominante fria e dessaturada (azul-acinzentado), acento mínimo, neutros frios, saturação baixa, luminosidade geral mais baixa — a cor "esvazia". Ato 3: a saturação e o calor voltam gradualmente, mas com uma paleta um pouco diferente da do Ato 1 (não é "voltar ao começo", é um novo equilíbrio) — talvez um acento novo. Transições: graduais ao longo de vários planos, acompanhando os beats; um plano-ponte com iluminação ambígua entre atos. Acessibilidade na web: nenhuma piscada > 3×/s, honrar prefers-reduced-motion com uma versão de transições suaves, e garantir que qualquer texto sobreposto mantém 4.5:1 durante toda a animação, não só nos extremos.
Mercado de trabalho: roadmap, entrevistas e portfólio
Objetivo: converter o conteúdo dos módulos anteriores em contratação — onde cor pesa, um plano de estudo, um banco de perguntas com respostas e projetos que geram entrevista.
10.1 Onde cor pesa
- Product / UI designer: a paleta do produto, estados, dark mode, contraste — avaliado em todo teste de portfólio.
- Design systems: tokens de cor, rampas, theming/white-label, governança, specimen.
- Brand designer: a cor de identidade e seus equivalentes (sRGB/P3/CMYK/Pantone). Ver Branding.
- Data / DataViz: paletas categóricas, sequenciais, divergentes acessíveis. Ver DataVis Avançada.
- Technical artist / game: fluxo linear, PBR, tonemapping, grading, legibilidade. Ver Unity, Blender 3D.
- Colorista / motion: grading, color script, entrega em Rec.709/HDR.
10.2 Roadmap de estudo (6–8 semanas)
| Semanas | Foco | Prática |
|---|---|---|
| 1 | Percepção, modelos, gamut (Módulos 1–2) | Recriar 5 paletas de apps que você admira em oklch(); ver cada uma em cinza |
| 2 | Teoria e harmonias (Módulo 3) | Gerar 4 paletas com esquemas diferentes a partir da mesma âncora; aplicar 60-30-10 |
| 3 | Construir paleta: rampas e tokens (Módulo 4) | Criar uma paleta de produto: neutros temperados + ação + 4 semânticas, rampas 50–950 em OKLCH |
| 4 | Acessibilidade (Módulo 5) | Auditar a paleta: contraste de cada par, simulação de daltonismo, teste da escala de cinza |
| 5 | Cor em CSS e tokens (Módulo 6) | Implementar os tokens (primitivos → semânticos), color-mix/relative color para derivados, dark mode |
| 6 | Produto: sistema, dark mode, theming (Módulo 7) | Fazer o dark mode "de verdade" da UI da semana 3; montar um white-label a partir de 1 cor |
| 7 | Um aprofundamento à escolha: jogos (Módulo 8) ou animação (Módulo 9) | Jogo: um color key + grading de bioma no Unity. Animação: um color script de 12 quadros |
| 8 | Portfólio | Escrever os estudos de caso com o raciocínio e os números de contraste; publicar |
10.3 Banco de perguntas de entrevista (com a resposta que aprova)
Júnior/pleno — "Quais são as três dimensões de uma cor?"
Matiz (hue — que cor é), saturação/croma (quão pura ou acinzentada) e luminosidade (lightness/value — quão clara ou escura). São os eixos de HSL, LCh e OKLCH. Raciocinar nesses eixos ("baixar croma, subir L") é mais produtivo que caçar hexadecimais.
Pleno — "Por que não fazer uma escala de tons variando o L de HSL?"
Porque HSL não é perceptualmente uniforme: o mesmo "L" parece mais claro no amarelo que no azul, e o matiz "deriva" ao mudar a luminosidade. Os degraus saem irregulares. Em OKLCH, variar o L dá passos visualmente regulares e o matiz se mantém.
Pleno — "Como você constrói a paleta de um produto?"
Âncora (marca ou ação) → 0–2 cores de suporte → escada de neutros (temperados, não cinza puro) → semânticas (success/warning/danger/info) → cada cor vira uma rampa 50–950 gerada em OKLCH (L regular, croma em arco, matiz quase fixo). Nomear em duas camadas: primitivos por escala, semânticos por papel; componentes usam só os semânticos. Validar contraste e daltonismo, documentar em specimen.
Pleno — "Quais os limites de contraste da WCAG e onde eles se aplicam?"
Texto normal 4.5:1 (AA) / 7:1 (AAA); texto grande (≥ 24px ou ≥ 18.66px bold) 3:1 / 4.5:1; componentes de UI e gráficos essenciais 3:1. Aplica-se também a texto secundário em cinza, placeholders, links, e texto dentro de botões coloridos. O ratio atual tem limitações; APCA (WCAG 3, rascunho) é o sucessor perceptual.
Pleno/sénior — "Como fazer um modo escuro que não seja só inverter?"
Superfícies em cinza muito escuro temperado (não #000); elevação por mais luz, não menos; cores de destaque com L maior e croma menor (senão "brilham"); texto a ~90–95% de L, não branco puro; sombras substituídas por diferença de luminosidade e borda; e revalidar todos os contrastes — eles não se transferem do tema claro. Na prática: redefinir só a camada de tokens semânticos.
Sénior — "A cor da marca pode ser a cor de ação da UI?"
Nem sempre. Se a marca é vermelha, colide com "erro/destrutivo"; se é amarela, não alcança contraste como fundo de botão com texto branco. Solução comum: a marca vive no logo/navegação/áreas de identidade e a cor de ação é uma vizinha derivada, escolhida por contraste e por não colidir com as semânticas de status.
Sénior / technical artist — "Por que iluminar em espaço linear e que texturas não são sRGB?"
Somar e multiplicar luz só é fisicamente correto em linear; por isso o engine converte o albedo (que é sRGB) para linear antes de iluminar e reaplica a curva no fim, após o tonemapping. Não são sRGB: normal map, roughness, metallic, ambient occlusion, height — são dados, e devem ser importados como "linear/non-color", senão a iluminação sai errada.
Armadilha — "Escolhi cores bonitas, tá pronto"
Cor é relação e sistema: sem rampas consistentes, contraste validado, comportamento em dark mode, teste de daltonismo e tokens, "cores bonitas" viram dívida. E "bonito no meu monitor" ignora gamut, calibração e o modo de alto contraste do usuário.
10.4 Projetos de portfólio que geram entrevista
- Sistema de cor de produto (âncora): paleta completa com rampas OKLCH, tokens em 3 camadas, dark mode real, specimen com todos os contrastes, e um texto explicando cada decisão.
- Redesign de acessibilidade: pegue um produto real com problemas de contraste/daltonismo e refaça a cor; mostre antes/depois com números e simulações.
- White-label a partir de uma cor: um gerador que recebe uma cor de marca e deriva a paleta inteira + semânticas, com validação de contraste automática.
- Paleta de dados acessível: conjuntos categórico, sequencial e divergente que funcionam em deuteranopia e em cinza, aplicados a gráficos reais.
- Um aprofundamento: um color script de um curta (12–20 quadros com o raciocínio emocional) ou um color key + grading de dois biomas de um jogo, com antes/depois.
10.5 Fontes para continuar
- Livros: Interaction of Color (Josef Albers); The Art of Color / The Elements of Color (Johannes Itten); The Secret Lives of Color (Kassia St Clair); Color and Light (James Gurney, para pintura/animação).
- Web / produto: a seção de cor do Refactoring UI; Radix Colors e sua documentação; Leonardo (Adobe) e Huetone; os artigos de OKLCH/CSS Color 4 no web.dev e MDN.
- Acessibilidade: WCAG (SC 1.4.1, 1.4.3, 1.4.11); APCA / Contrast.tools; Who Can Use.
- Jogos: a documentação de color management do Unity (URP/HDRP) e do Unreal; artigos sobre ACES/AgX; guias de PBR (Substance, "PBR Guide" da Allegorithmic).
- Filme / motion: ACEScentral; Poynton sobre gamma e vídeo; a documentação de color do DaVinci Resolve; estudos de color script de longas de animação.
- Nesta trilha: Tipografia, Layout, Grade & Espaçamento, Design Systems & Design Tokens, Logótipos & Lettering; e CSS, CSS Avançado: Animações & SVG, Acessibilidade Digital & WCAG, DataVis Avançada, Branding.
Cinco ideias sustentam a cor: (1) é percepção e relação — projete o par, não o valor isolado; (2) raciocine em OKLCH — luminosidade honesta, rampas regulares, matizes que combinam de peso; (3) acessibilidade não é opcional — contraste, nunca só a cor, e teste de daltonismo; (4) tokens em camadas transformam a paleta num sistema que o dark mode e o theming só reconfiguram; (5) em qualquer meio — web, jogo ou filme — a disciplina é a mesma: decidir antes, em relação, o que cada cor significa, e manter a coerência.