Preto e Branco: Um Design System Construído para o Foco
Por que construímos cada produto sobre um design system minimalista em preto e branco: rampas de cinza fechadas, hierarquia por escala tipográfica e acessibilidade por padrão.
Por Vitor Lima
Construímos todo produto da OLUWA em preto e branco estrito. Sem azul de marca, sem verde-água de destaque, sem "verde de sucesso" se infiltrando em uma notificação. Um design system minimalista em preto e branco não é nostalgia do terminal e não é um moodboard pelo qual nos apaixonamos. É uma restrição de trabalho que torna nossas decisões mais rápidas, nossas interfaces mais legíveis e nossa base de acessibilidade mais alta por padrão. Este texto é sobre por que escolhemos o monocromático, o que abrimos mão, e os tokens e regras que você poderia adotar amanhã.
Por que removemos a cor de propósito
Cor é a variável mais abusada no design de interfaces. É barata de adicionar e cara de governar. No momento em que você tem uma paleta, todo elemento compete por um dos seus tons, e "de que cor isso deveria ser" vira uma pergunta que você responde centenas de vezes por semana, quase sempre de forma inconsistente.
Um botão destrutivo é vermelho. Mas também é um estado de erro, e um marcador de campo obrigatório, e o selo de notificação, e a série do gráfico para usuários que abandonaram. Vermelho agora significa cinco coisas, ou seja, não significa nada.
Remover a cor remove essa classe inteira de decisão. Quando você não pode recorrer a um tom para sinalizar importância, você a sinaliza com as ferramentas que de fato carregam significado: posição, tamanho, peso e espaço em branco. Essas ferramentas são mais honestas. Um título se lê como importante porque é grande e fica no topo com espaço ao redor, não porque alguém o pintou de roxo.
A conclusão: se você está usando cor para consertar um problema de hierarquia, você tem um problema de hierarquia, não um problema de cor. O monocromático se recusa a deixar você encobri-lo.
Hierarquia sem cor: três alavancas
Com o tom fora de questão, três alavancas fazem todo o trabalho.
Escala tipográfica. Rodamos uma escala modular com saltos claros, não um gradiente contínuo de tamanhos. Passos que ficam próximos demais se leem como ruído; o olho precisa de hierarquia inequívoca. Nossa escala de trabalho é aproximadamente 12 / 14 / 16 / 20 / 28 / 40 / 64px. O texto de corpo fica em 16, metadados secundários em 14, e tudo acima de 20 é estrutural. Se duas coisas precisam parecer diferentes em importância, elas recebem passos diferentes, nunca o mesmo passo em duas tonalidades de cinza.
Peso e caixa. Com uma única fonte e sem cor, o peso vira um sinal primário. Usamos no máximo três pesos: regular, medium e um único bold reservado para ênfase genuína. Caixa alta com espaçamento entre letras aberto faz o trabalho de uma "cor de rótulo", marcando uma sequência como categoria ou sobretítulo sem uma tintura.
Espaço. O espaço em branco é a parede estrutural de um layout monocromático. A proximidade agrupa coisas relacionadas; a distância as separa. No MadaiOps, nosso app de ordens de cripto, o formulário de ordem depende disso inteiramente: preço, tamanho e lado ficam agrupados de forma apertada, enquanto a ação de confirmar é empurrada para longe com espaço deliberado, de modo que nunca possa ser clicada por engano ao lado de um campo. Nenhum estilo "de perigo" em vermelho é necessário. O espaçamento faz a guarda.
Contraste é um sistema, não um clima
A armadilha com o preto e branco é achar que você só tem dois valores. Você tem uma rampa completa de tons de cinza, e a disciplina está em contê-la. Definimos um conjunto pequeno e fixo de passos e proibimos cinzas fora da rampa. Aqui está a rampa que de fato entregamos:
--ink-000: #000000 /* primary text, headings */
--ink-700: #3d3d3d /* body on light, secondary headings */
--ink-500: #6b6b6b /* metadata, captions, disabled-adjacent */
--ink-300: #b0b0b0 /* borders, dividers, placeholder */
--ink-100: #e6e6e6 /* subtle fills, hover backgrounds */
--paper: #ffffff /* base surface */
Seis valores. Esse é o sistema inteiro, mais o seu inverso para o modo escuro. A regra que fazemos valer na revisão: nenhum cinza pode existir que não esteja na rampa. No instante em que alguém pega um #8a8a8a com o conta-gotas porque "a borda pareceu um tiquinho pesada", o sistema começa a apodrecer. Um conjunto fechado de valores é o que impede uma interface monocromática de derivar para uma monotonia turva.
Texto passa de 4.5:1, estrutura passa de 3:1
Todo par de texto-sobre-superfície é checado contra as razões de contraste da WCAG antes de ir para produção. --ink-500 sobre --paper aterrissa em torno de 5.7:1, confortavelmente acima do limite de 4.5:1 para texto de corpo. --ink-300 falha como texto e, portanto, é permitido apenas para bordas e divisores, onde se aplica o limite de 3:1 para elementos que não são texto. Codificar a regra nos usos permitidos do token, e não apenas no seu valor, é o que faz ela grudar.
O dividendo da acessibilidade
É aqui que o monocromático vence em silêncio. Cerca de um em cada doze homens tem alguma forma de deficiência na visão de cores, e qualquer interface que se apoie em vermelho-contra-verde para carregar significado é ilegível para uma fatia relevante de usuários. Nunca batemos nessa parede, porque nunca codificamos significado em tom desde o começo. Nossos estados são distinguidos por forma, rótulo, peso e posição.
Essa disciplina força um padrão mais saudável em toda parte: nunca deixe um único canal carregar significado sozinho. Um botão desabilitado no nosso sistema não é apenas mais claro. Ele perde a borda e seu rótulo cai para --ink-300, de modo que o estado sobrevive em uma tela em tons de cinza, sob sol forte e para um usuário daltônico de forma idêntica. O Youp, nosso app de diário, marca entradas de humor com iconografia e texto de rótulo em vez do habitual gradiente de sentimento de vermelho-a-verde, de modo que o histórico emocional se lê sem depender de um espectro que muitas pessoas não conseguem enxergar.
Você também ganha suporte a alto contraste e a cores forçadas quase de graça, porque nunca brigou com as próprias sobreposições de acessibilidade do navegador usando uma paleta de marca delicada.
Como a restrição acelera decisões
O benefício subestimado é a velocidade. Uma paleta é uma explosão combinatória: cada novo componente se multiplica contra cada tom e cada estado. O monocromático colapsa isso. Sem decisão de cor a tomar, o design de um componente se reduz a passo de tipo, peso, espaçamento e qual token de tom de cinza para a borda. Essa é uma decisão que você toma em segundos e defende na revisão com uma regra em vez de um argumento de gosto.
E isso se acumula. Como o conjunto de tokens é minúsculo e fechado, os componentes se compõem de forma previsível: um card, uma linha de tabela e um modal se servem dos mesmos seis cinzas e dos mesmos sete passos de tipo, de modo que parecem aparentados sem nenhuma coordenação. Novas superfícies herdam consistência em vez de negociar por ela. Para um estúdio pequeno lançando vários produtos, esse substrato compartilhado é a diferença entre quatro apps que parecem uma família e quatro apps que parecem quatro fornecedores.
O trade-off é real e merece ser nomeado. O monocromático tem menos alcance expressivo bruto, e algumas categorias genuinamente precisam de cor: visualização de dados com muitas séries, qualquer coisa que mapeie para uma cor física, momentos de marca que negociam com calor. Não fingimos o contrário. Nossa postura é que a cor deveria ser merecida e rara, introduzida deliberadamente para um trabalho específico, nunca como a alavanca padrão para hierarquia. Quando de fato recorremos a ela, ela impacta forte justamente porque tudo ao redor é silencioso.
Regras que você pode adotar amanhã
Se você quer experimentar isso sem reconstruir tudo:
- Feche a sua rampa de cinzas. Escolha cinco ou seis valores, dê nomes a eles, e proíba tudo fora da rampa na revisão de código. Essa única regra faz a maior parte do trabalho.
- Faça uma escala tipográfica e use apenas os seus passos. Sem tamanhos de fonte arbitrários. Se você continua precisando de um novo tamanho, a escala está errada; conserte a escala, não adicione um caso avulso.
- Codifique os usos permitidos nos tokens.
--ink-300é "apenas bordas", não só um valor hexadecimal. Documente isso onde os engenheiros vão ler. - Audite todo sinal portador de significado em busca de um segundo canal. Se remover a cor deixaria um estado ambíguo, adicione forma, rótulo ou posição até que não deixe.
- Trate o espaço em branco como um componente. Dê ao espaçamento tokens nomeados e defenda-os na revisão do jeito que você defende cores em outros lugares.
Pensamento de encerramento
Trabalhar em preto e branco não é uma limitação que toleramos; é uma lente que esclarece. Retire a variável mais fácil e as estruturais — ritmo, proporção, contraste, espaço — não têm onde se esconder. A interface ou tem uma hierarquia de verdade ou não tem, e você descobre imediatamente. Essa honestidade vale mais para nós do que qualquer paleta.