Design de UI

Boas Práticas para Paletas de Cores em Modo Escuro

Pela Equipa do colorPaletteFinder9 min de leitura

O primeiro tema escuro que publiquei foi, vendo agora, um desastre. Agarrei na nossa UI clara, passei todas as cores por um filtro de "inversão", ajustei alguns valores à mão e dei o dia por encerrado. Parecia ótimo no Figma. Depois chegaram os pedidos de apoio: texto que "zumbia", botões de marca que brilhavam como rebuçados radioativos, cartões que se fundiam todos numa única folha plana de escuridão. A lição ficou. Uma boa paleta de cores em modo escuro não é uma paleta clara virada do avesso. É um problema de design por direito próprio, com regras próprias, e a maioria dessas regras contraria os seus instintos.

É isto que eu gostava que alguém me tivesse dito antes daquela primeira tentativa.

O modo escuro não é uma inversão

Quando inverte um tema claro, todas as relações que o faziam funcionar ficam baralhadas. Texto branco sobre um botão azul-marinho pode ser perfeito, a 8:1 de contraste, no modo claro; inverta-o e pode acabar num botão pálido com texto cinzento que falha por completo a acessibilidade. As sombras, que carregam grande parte da profundidade nas UIs claras, basicamente desaparecem num fundo escuro — uma sombra de preto a 10% sobre uma superfície quase preta é invisível. Cores saturadas que parecem confiantes e simpáticas no branco tornam-se agressivas e vibrantes no preto.

Por isso, o modelo mental que uso é este: um tema escuro é um conjunto separado de decisões de design que, por acaso, partilha o mesmo layout e a mesma marca. Está a voltar a resolver contraste, hierarquia, profundidade e cor de acento a partir do zero, sobre uma tela escura. Se as suas ferramentas lhe permitem manter dois conjuntos de cores (os tokens semânticos são a forma limpa de o fazer — mais sobre isso no nosso artigo sobre tokens de cor para design systems), é neste momento que isso compensa.

Use cinzento escuro, não preto puro

Este é o erro mais comum de todos, e vale a pena perceber porque é que o preto puro falha, em vez de simplesmente lhe dizerem para o evitar.

O preto puro (#000000) combinado com texto branco puro (#FFFFFF) pontua tecnicamente 21:1 — o rácio de contraste máximo possível. Pensaria que o contraste máximo é o objetivo. Não é. Essa diferença extrema de luminância provoca halação: num fundo escuro, a pupila dilata-se para deixar entrar mais luz, e o texto claro espalha-se e esborrata-se nas margens. Para pessoas com astigmatismo — uma fatia grande da população — o efeito transforma parágrafos numa papa luminosa e cansativa. Sessões longas de leitura tornam-se genuinamente desconfortáveis.

Há um segundo problema, mais prático. Se a sua camada base for #000000, não tem para onde ir para baixo. Não consegue tornar uma superfície mais escura do que o preto, por isso qualquer sensação de profundidade recuada desaparece, e as sombras não têm onde cair.

A solução é começar a partir de um cinzento muito escuro. O Material Design da Google recomenda #121212 como superfície escura de base e, depois de anos a construir estas coisas, acho que está perto da perfeição. É escuro o suficiente para ser lido como "modo escuro", mas deixa margem em ambas as direções. Para o texto, troque o branco puro por um branco-sujo na faixa #E0E0E0 a #F2F2F2. Branco sobre #121212 a esse nível continua a ultrapassar a WCAG com folga, ao mesmo tempo que mata o brilho da halação.

Uma paleta neutra de partida a que recorro com frequência:

Um truque subtil: dê aos seus cinzentos escuros uma ligeiríssima tonalidade na direção da matiz da sua marca, em vez de usar cinzentos puramente neutros. Uma base de #131316 com um toque de azul, ou #14110F com um pouco de calor, parece intencional e com marca, em vez de um tema por omissão. Mantenha-o subtil — alguns pontos de saturação, no máximo.

Transmita elevação com superfícies mais claras, não com sombras

No modo claro, um cartão flutua acima da página por causa da sua sombra. No modo escuro, as sombras quase não se notam, por isso invertemos a lógica: quanto mais elevada estiver uma superfície, mais clara fica. Um modal é mais claro do que o cartão que cobre, que é mais claro do que a página atrás dele.

O Material formaliza isto como uma sobreposição de elevação — uma camada branca semitransparente aplicada por cima da superfície base, ficando mais opaca à medida que a elevação aumenta (cerca de 0% na base até por volta de 16% no nível mais alto). Não tem de implementar literalmente a matemática da sobreposição; pode simplesmente cozer os resultados em tokens discretos. Uma escala que já publiquei e em que confio:

Cada passo é apenas uns quantos pontos mais claro, e essa contenção importa — os saltos devem ser sentidos, não anunciados. Usado de forma consistente, isto dá à sua interface profundidade real sem uma única sombra, e resolve a queixa do "está tudo a fundir-se" que assolou a minha primeira tentativa. Pode ainda sobrepor uma sombra ténue para uma separação extra, mas é a mudança de luminosidade que faz o trabalho pesado.

Dessature as suas cores de acento

Agarre na cor-estrela da sua marca — digamos, um azul vibrante de SaaS como #2563EB — e largue-o sobre um fundo #121212. Vibra. Cores muito saturadas contra um campo escuro produzem um zumbido ótico, e muitas vezes falham no contraste para texto ou ícones, ainda que pareçam estridentes.

A solução é contraintuitiva: puxe a saturação para baixo e a luminosidade para cima. A orientação do Material é usar tons mais claros (pense na faixa 200–50 de uma escala de cor) e dessaturá-los até passarem os 4.5:1 contra a superfície escura. Na prática, dessaturo as cores de marca em cerca de 20–40% para o modo escuro e clareio-as, e depois verifico o número.

Concretamente, esse #2563EB pode tornar-se algo como #7AA2F7 no modo escuro — mais suave, mais claro e muito mais legível contra a superfície escura. O seu acento do modo claro e o seu acento do modo escuro são irmãos, não o mesmo valor. É exatamente este tipo de exploração emparelhada claro/escuro para que o gerador de paletas de cores foi feito: escolha a sua matiz e depois ajuste a saturação e a luminosidade enquanto vê o número de contraste atualizar-se ao vivo.

Algumas ressalvas honestas:

Mantenha o contraste WCAG — em ambas as direções

Os objetivos de acessibilidade não mudam no escuro. A WCAG 2.1 exige 4.5:1 para texto corrido normal e 3:1 para texto grande (e para componentes de UI e ícones relevantes). O que muda é que as falhas são mais traiçoeiras.

A armadilha que vejo com mais frequência é o texto cinzento de tom médio — algo como #888888 sobre #121212 — que parece elegante e falha em silêncio para texto secundário. Calcule sempre os números reais. A referência oficial é a orientação de contraste da WCAG do W3C, e qualquer verificador de contraste (incluindo o que está integrado no nosso gerador de paletas de cores) dá-lhe o rácio em segundos.

Duas coisas a saber enquanto testa. Primeira, "mais contraste é sempre melhor" é falso no modo escuro — o branco puro maximiza o número mas desencadeia a halação que descrevi, por isso está a otimizar para uma legibilidade confortável, não para o rácio mais alto possível. Segunda, a próxima geração da norma, a WCAG 3.0, substitui o rácio simples pelo APCA (o Advanced Perceptual Contrast Algorithm), que modela como o olho realmente perceciona texto claro e escuro e lida muito melhor com a polaridade. Ainda está em rascunho, por isso publique hoje em conformidade com a WCAG 2.1, mas se quiser preparar-se para o futuro, passe a sua paleta escura por um verificador APCA como teste de sanidade — é notavelmente mais honesto em relação a fundos escuros.

Teste-o onde as pessoas o usam de verdade

Uma paleta escura pode passar todas as verificações no Figma e ainda assim falhar no mundo real. A variável que mais subestimei no início foi o próprio ecrã: os painéis OLED apresentam #000000 com píxeis verdadeiramente desligados e um contraste brutal contra o texto iluminado, enquanto os LCD mais baratos clareiam os pretos e esbatem os seus passos de elevação cuidadosamente afinados. A paleta que parece estratificada no seu monitor pode parecer plana no portátil económico de outra pessoa.

A minha lista de verificação de testes, aprendida da maneira difícil:

A versão curta

Se tivesse de comprimir tudo num punhado de movimentos: comece a partir de #121212, nunca de #000000. Use texto branco-sujo, não branco puro. Mostre profundidade clareando as superfícies elevadas, já que as sombras quase não existem aqui. Dessature e clareie os seus acentos até deixarem de zumbir e começarem a passar no contraste. Mantenha a linha nos 4.5:1 para texto corrido, mas resista à tentação de perseguir o máximo. E teste num ecrã OLED real, numa sala escura, porque esse é o único ambiente que os seus mockups nunca conseguirão simular.

Feito como deve ser, um tema escuro não é apenas uma opção simpática para os notívagos — é uma versão mais calma e focada do seu produto. Só exige que o trate como o problema de design distinto que é de facto.

Perguntas Frequentes

Porque é que não devo usar preto puro (#000000) para os fundos do modo escuro?

O preto puro combinado com texto branco atinge um contraste de 21:1, mas essa diferença extrema provoca halação — o texto claro espalha-se e cria um brilho difuso nas margens, algo especialmente cansativo para pessoas com astigmatismo. O preto puro também não lhe deixa margem para mostrar profundidade recuada, já que nada pode ser mais escuro do que o preto. Comece antes por um cinzento muito escuro como #121212, que é lido como 'escuro' mas deixa espaço para elevação e um contraste de texto confortável.

Como se mostra elevação ou profundidade numa interface em modo escuro?

As sombras quase não se notam em fundos escuros, por isso a convenção inverte-se: quanto mais elevada estiver uma superfície, mais clara fica. A página pode ser #121212, os cartões #1E1E1E, os menus #242424 e as caixas de diálogo #2C2C2C. Cada passo é apenas alguns pontos mais claro. Esta abordagem de 'sobreposição de elevação' (uma camada branca semitransparente que cresce com a altura) dá profundidade real sem depender de sombras.

Quanto devo dessaturar as cores da marca para o modo escuro?

Cerca de 20–40%, ao mesmo tempo que as torna mais claras. Um azul de marca saturado como #2563EB vibra contra uma superfície escura e pode falhar no contraste; suavizado e clareado para algo como #7AA2F7, mantém-se legível e tranquilo. Use tons mais claros (a faixa 50–200 de uma escala de cor) e confirme que cada acento ultrapassa os 4.5:1 contra a sua superfície escura. Mantenha reconhecíveis as cores semânticas, como o vermelho de erro — suaviza a saturação, não a matiz.

Que rácio de contraste precisa o texto em modo escuro?

Os objetivos da WCAG 2.1 não mudam: 4.5:1 para texto corrido normal e 3:1 para texto grande e componentes de UI relevantes. O senão é que um elegante texto cinzento médio (como #888888 sobre #121212) muitas vezes falha em silêncio, por isso verifique sempre o número real. Repare que 'mais contraste é melhor' é falso aqui — o branco puro maximiza o rácio mas desencadeia halação, por isso procure uma legibilidade confortável em vez do valor absoluto mais alto.

Porque é que o meu tema escuro fica diferente em telemóveis diferentes?

A tecnologia do ecrã importa mais do que se costuma pensar. Os painéis OLED apresentam #000000 com os píxeis totalmente desligados e um contraste agressivo, enquanto os LCD mais baratos clareiam os pretos e esbatem os passos subtis de elevação. Uma paleta que parece bem estratificada no seu monitor pode parecer plana num ecrã económico. Teste sempre num telemóvel OLED real, com brilho baixo, numa sala escura, e também num LCD barato, antes de publicar.

Quer experimentar com cores?

Experimente o nosso gerador de paletas de cores gratuito para encontrar a harmonia perfeita — com um verificador de contraste WCAG integrado.

Abrir o Gerador