hi dom — logo oficial
design system v2.2 · 2026-08-16 · "o bilhete ao meio-dia" · doutrina: DOM_BRANDBOOK_V2.html · parecer de design + revisão do fundador

Referência de implementação do dom (app RN/Expo, web, peças digitais). A doutrina vive no brandbook v2; aqui está o que ela vira em tela. Em conflito, o brandbook vence. Lei-mestra: "a tela é o bilhete: papel claro, tinta escura — e cor, só no que desce na mão." E a régua desta versão: o dom nunca parece parado e nunca parece genérico — tudo que ele faz aparece como o passo real, animado no mesmo batimento.

01Logo e símbolo

A marca é UMA: "hi dom" nunca digitado em fonte — só o logo completo com o d-jabuticaba (P-003). Arquivos em brand/logo/; matriz CorelDRAW.

logo — palco claro
logo — palco escuro
símbolo — palco claro
64px
32px
16px
símbolo — palco escuro
64px
32px
16px

Favicon — inclusive no Chrome escuro

O favicon.svg embute os DOIS vetores oficiais intactos e alterna por @media (prefers-color-scheme: dark) — nested <svg> com o viewBox original de cada arquivo, nenhum path alterado (empacotamento de exportações oficiais, não reconstrução; prefixar as classes internas .l-/.d- porque .fil0 colide entre os dois). A media query lê o tema do SO — a aba do navegador é palco alheio, zero conflito com a L2. Safari ignora SVG favicon e cai no favicon.ico light (aceitável). Comentário obrigatório no arquivo: <!-- P-003: paths oficiais; nunca otimizar (SVGO)/redesenhar -->.

Arquivos e tamanhos de exportação

UsoArquivo / tamanho
Favicon webfavicon.svg (dual light/dark acima) + favicon.ico 16/32/48 + apple-touch-icon 180×180 + icon-192/512 (PWA)
Ícone do app (Expo)matriz 1024×1024; adaptive-icon Android com símbolo em ~66% do quadro; splash centrado no branco-de-meio-dia
Avatar de chato símbolo puro a 28px, sem círculo, sem borda, sem fundo — o d-jabuticaba é o próprio contorno; 48px em tela de perfil
Social400×400 e 800×800, símbolo com ~12% de respiro
Uso geralSVG sempre que possível; PNG 512/1024/2048 exportados do vetor — nunca redimensionar PNG
usar os arquivos de brand/logo/, exportados do vetor por tamanho
sufixo -light/-dark = palco de DESTINO
escrever "hi dom" em fonte numa peça; recriar o símbolo em CSS/SVG; versão "neutra" sem sufixo
symbol-light sobre fundo escuro (e vice-versa)

02Cor — 13 tokens

Papel claro, tinta escura, croma só no que desce na mão. O amarelo é a lata (CTA, um por tela); o sol só sobre jabuticaba.

O palco

branco-de-meio-dia#FBF7F0 · fundo padrão
papel-sombra#F4EDE2 · superfícies rebaixadas
traço-de-lápis#E4DACA · bordas, divisores
papel-ao-entardecer#EFE5D3 · fallback noturno

As tintas

terra-preta#2B2521 · texto padrão
terra-arada#6F6558 · texto secundário
escuro-jabuticaba#2E1528 · marca, links, painel

A lata e o sol

amarelo-de-lata#F0A800 · CTA (um por tela)
lata-fundida#C88C00 · gráficos no claro
sol
amarelo-de-sol#FFFF00 · SÓ sobre jabuticaba

Os funcionais

verde-de-colheita#1A6E3F · dinheiro que entrou (+)
ferrugem#964917 · atenção (!)
pimenta#B52718 · saída / erro (−)
Lei do sol. #FFFF00 nunca sobre papel, nunca em texto corrido, máx 1 elemento por painel escuro.
Lei do reforço não-cromático. Cor nunca é o único sinal: verde com +/, pimenta com , ferrugem com ! ou peso 600. Ferrugem × pimenta são indistinguíveis em daltonismo — o sinal salva.
Vetos eternos (L7). Azulado/frio, laranja/roxo de banco, folhinha, textura de material, mesh gradient, glassmorphism, neon; metáfora decorativa de dinheiro (porquinho, cofrinho, cifrão solto, saco de dinheiro). Exceções declaradas: diagrama que EXPLICA é tinta; ícone FUNCIONAL de categoria (seção 07) é diagrama em miniatura.

03Estados interativos — mobile-first

Touch-first: pressed é o estado rei. Hover é cortesia web e nunca carrega informação.

repouso
pressed · #D89700 · o rei
hover web only
foco (teclado)
disabled · #A99E8F
secundário (tinta)
destrutivo — borda+texto, nunca fill
ver o extrato completolink — jabuticaba + sublinhado
EstadoToken / regra
pressed (CTA)lata-pressionada #D89700 + scale .97 — feedback imediato
hover (CTA)lata-fundida #C88C00 — web only
disabledtinta-apagada #A99E8F sobre papel-sombra
focoanel 2px #2E1528 + offset 3px (claro); #FFFF00 (escuro)
seleção#F8DFA8
carregandoskeleton traço-de-lápis ⇄ papel-sombra (nunca spinner de tela cheia)
modalvéu rgba(43,37,33,.45); máx 2 níveis de elevação
alvo de toquemínimo 44×44px

04Movimento — um batimento só

A casa inteira pulsa no mesmo ritmo: 1.4s. Respiração do símbolo, ponto da timeline, caret do streaming, skeleton e badge usam o mesmo período — três ritmos diferentes na mesma tela é bagunça; um só é identidade. Entradas em 200ms ease-out; trocas em 150ms.

TokenValorUsa
--dom-t-pulso1400msrespiração do símbolo, ponto da timeline, caret, skeleton, ponto do badge
--dom-t-entrada200msfade + slide-up 8px de bolhas, cards, badge
--dom-t-troca150mscrossfade único prosa→bloco estruturado
--dom-ease-entradacubic-bezier(0,0,.2,1)toda entrada
--dom-ease-pulsocubic-bezier(.4,0,.6,1)todo ciclo

"dom pensando" — a respiração do símbolo

o símbolo INTEIRO respira: scale 1→1.06 + opacity .55→1, ciclo 1.4s, alternado. Entra só se a resposta demora >300ms (fade-in 150ms); para no primeiro token do streaming e assenta em 120ms — o d que respirava é o mesmo que assina a resposta.
Guarda-corpos da respiração. (1) Animar só por transform/opacity sobre o vetor oficial — nunca girar (spinner de banco), nunca animar a cunha separada (P-003). (2) Exclusiva do estado "pensando": símbolo respirando em splash, header ou botão vira mascote. (3) Reduced-motion: símbolo estático a opacity .55 + texto "pensando…" em apoio — a informação nunca depende do movimento.

05O delay pedido→resposta — percepção de agilidade

Velocidade percebida é critério de primeira classe. O comportamento nunca é genérico: sempre o passo real do momento, animado. Orçamento de latência em camadas:

JanelaO que aparece
0–100mspressed do controle + eco otimista: a mensagem do usuário entra na thread na hora, sem esperar rede
100–300msnada (evitar flash em resposta instantânea)
300ms–2savatar + símbolo respirando (seção 04)
>2s ou ≥2 toolsa respiração vira timeline: o primeiro passo real entra
primeiro tokentimeline colapsa pra 1 linha acima da bolha que nasce; streaming começa
O passo aparece quando a tool COMEÇA, não quando termina. "conferindo sua fatura do cartão…" entra no instante do tool call — é a diferença entre parecer rápido e parecer travado com o mesmo tempo total.
O rótulo nasce na camada de tools, não no modelo. Cada tool MCP declara seu recado em primeira pessoa (label_pt: "conferindo sua fatura do cartão…"). O "Processando…" genérico fica estruturalmente impossível — cerca, não instrução.
Skeleton × timeline. Skeleton = a FORMA do que vem é conhecida e o trabalho é opaco (card de extrato, tabela). Timeline = o trabalho tem PASSOS nomeáveis. Nunca os dois no mesmo bloco. Chat usa timeline; superfícies de dado usam skeleton.

Timeline de tracking — o dom nunca age em silêncio (B1)

conferi as suas 3 contas08:10
achei uma cobrança de R$ 29,90 que não bate08:11
comparando com os meses anteriores…
te trago o resumo
cada passo é recado curto em primeira pessoa; ✓ verde no feito; ponto pulsando no atual
"Processando request…", código, jargão; timeline pra tarefa de 1 passo (cerimônia — tecnologia se exibindo)
eco otimista que falha em silêncio: se não enviou, a bolha ganha "não enviei — tocar pra tentar de novo" com ! ferrugem (B2)

Badge de trabalho — ancorada no prompt

Quando o trabalho continua e a timeline saiu de vista (scroll, troca de assunto, volta ao app), o badge aparece acima do campo de texto — referência Runaki adotada, com o passo real e o tempo decorrido:

conferindo sua fatura… · 3s deixa comigo — trabalhando nisso · 12s ✓ feito.
AspectoRegra
Textoo passo real ("conferindo sua fatura…"); sem passo nomeável: "deixa comigo — trabalhando nisso". Nunca "Trabalhando para você" — frase de crachá, reprova em voz alta
Temposegundos decorridos em mono ("· 3s") — honestidade de relógio aumenta confiança e percepção de agilidade
Anatomiapill papel-sombra, borda traço-de-lápis, símbolo 16px, ponto 6px pulsando, Figtree 600 · 13; altura 32px. Sem amarelo (croma é entrega, não expediente)
Ondesticky acima do input; entra fade+slide 200ms; toque rola até a timeline viva (nunca abre tela própria)
Quando aparecetrabalho >8s E timeline fora do viewport — raro é o que o mantém significativo
Quando someao terminar vira "✓ feito." verde, segura 2s, fade-out 300ms

06Componentes de conversa

Interface leve, simples, clara e esclarecedora. Chat-first: texto curto + chips; dado estruturado em tabela; ação proposta antes de executada.

A lei da convivência — botão é atalho do dizível

Todo componente acionável declara {ação, frase}. O botão "Pode cancelar" carrega a frase "pode cancelar"; tocar o botão insere a frase como bolha do usuário e segue o fluxo normal — idêntico a ter digitado. O toque ensina a pessoa que ela podia ter falado. Eco só em ação com consequência (aprovar, cancelar, registrar); navegação pura (expandir card, ver detalhe) não gera bolha. QA mecânico: toda ação disparável por texto — componente sem frase equivalente reprova. O input nunca é desabilitado nem coberto — proposta pendente + pessoa muda de assunto = a proposta vira card "aguardando" no histórico e a conversa segue.

Bolhas (L6 — o dom escreve, o usuário fala)

dom, como fechou meu mês?
Fechou no azul: sobraram R$ 312,40. A conta de luz veio R$ 48 acima do normal — quer que eu fique de olho?
saldo + R$ 312,40 luz ▲ R$ 48 vence 22 ago
feito.
avatar do DOM sempre: o símbolo puro a 28px, sem círculo — o d-jabuticaba é o próprio contorno, moldura em volta o apequena (decisão do fundador, 2026-08-16). Ele fica; a posição do Lindão era contra o avatar do USUÁRIO, não o do dom
bolha do usuário: preenchida terra-preta, alinhada à direita, sem avatar — como WhatsApp/iMessage, você não vê seu próprio rosto na conversa; e foto ao lado da dívida devolve a vergonha que a arquitetura tira
bolha colorida; cor entra no número conforme o semáforo

Streaming — o dom escreve ao vivo (3 regras, de olhar)

1 · a prosa nasce na velocidade real do stream — caret de tinta piscando no fim
Conferi as três contas. A fatura do cartão fecha na sexta e

sem delay artificial por caractere; caret 2px × altura da linha, pisca a 1.4s; render com throttle de 30fps

2 · número NUNCA aparece pela metade (INV-1)
Fechou no azul: sobraram
enquanto o valor não fecha no stream: o espaço fica reservado (skeleton inline)…
Fechou no azul: sobraram R$ 312,40. A conta de luz
…e o número entra inteiro, de uma vez, já em mono
"sobraram R$ 3" → "sobraram R$ 31" → "sobraram R$ 312,40" — número errado na tela a cada frame
valor entregue nunca é apagado ou alterado depois — se errou, o dom diz "errei" em mensagem NOVA
3 · apaga-e-reescreve SÓ quando a prosa vira bloco — um crossfade de 150ms, uma única vez
entrou R$ 4.850, saiu R$ 4.537, sobraram R$ 312…
↓ vira tabela — crossfade 150ms, a única substituição permitida na mensagem
Entrou+ R$ 4.850,00
Saiu− R$ 4.537,60
SobrouR$ 312,40
revisão contínua (escreve-apaga-escreve o tempo todo) — lê como o dom inseguro do que diz

Reduced-motion: sem caret; substituições instantâneas.

Quebra de mensagens — por sentido, nunca por caracteres

Regra (a primeira que se aplica, vence)
1. Uma ideia por bolha: fato → impacto → opção, cada um na sua
2. Pergunta sempre sozinha e sempre por último — é o hand-off do turno
3. Bloco estruturado (chips/tabela/card) fecha a bolha de prosa e vive como mensagem própria
4. "feito." sempre sozinho — é assinatura, não frase
5. Nunca quebrar: no meio de frase; entre número e sua explicação; entre o "!" e o fato
6. Régua de segurança: bolha >4 linhas (~280 chars a 16px/360pt) = a regra 1 falhou; edita o conteúdo, nunca trunca
7. Cadência: no stream a quebra é ao vivo; mensagem pronta (histórico/push) entra em bolhas sucessivas a 350ms, fade+slide 8px
8. Teto: 3 bolhas de prosa por turno — mais que isso infantiliza (metralhadora); conteúdo longo vira card

Propose-then-approve — nada acontece sem aprovação

Posso cancelar a assinatura esquecida do streaming (R$ 29,90/mês)? Você economiza R$ 358,80 por ano.

Executado, vira registro com ✓ feito. — badge verde só em sucesso (L5). Pendente = sem badge; falha = "!" ferrugem no fato falho.

Card de registro (referência Morphic) + tabela chave-valor

Agosto até agora 16 ago · 08:12
Entrou+ R$ 4.850,00
Saiu− R$ 4.537,60
SobrouR$ 312,40
maior gasto Mercadofatura fecha sexta
card branco #fff sobre papel #FBF7F0 — a borda delimita, não a diferença de fundo; sem sombra; expande inline 200ms, nunca navega pra fora
"corrigir" o fundo pra #fff pra ficar igual à referência — o papel morre
nas listas de transações: saídas em terra-preta com −; pimenta SÓ na anomalia apontada (dedo, não cor de categoria)

Atenção — a lata avisa antes de furar

!
Atenção: a fatura do cartão fecha amanhã e ainda tem R$ 312,44 pendentes.

SVG explicativo — a lei do diagrama

Diagrama que explica é tinta; ilustração que enfeita é proibida. Responde "o que está acontecendo com o seu dinheiro" em traço fino, papel e tinta, cor só no dado que importa. Se impresso em P&B na porta ainda faz sentido, fica.

07Ícones de categoria

O público é gente simples: o ícone de categoria faz bater o olho na transação. A L7 não precisa de emenda — ela veta a metáfora decorativa do dinheiro (porquinho, cofrinho, cifrão); ícone de categoria aponta pro objeto da vida (o mercado, a luz, o ônibus) — é diagrama que explica em miniatura.

mercado
energia
streaming
transporte
casa
saúde
guardado
Guardado/poupança = A LATA DE TAMPA ABERTA, não o porquinho. Guardar dinheiro na lata, no pote, é gesto real do povo — e a lata é o objeto-mãe da marca ("a lata na ponta do bambu"). A tampa aberta é o que a torna legível E significativa: lata pronta pra receber, guardar é entrada, não cofre trancado. O porquinho é o símbolo genérico de toda fintech; a lata é só do dom. Decisão do fundador, 2026-08-16 (testadas e descartadas: lata fechada — não lia como lata; cama/colchão — leu como hotel).
AspectoRegra
Grid24×24px, área viva 20×20, stroke 2px round cap/join, sem preenchimento
Corsempre tinta: terra-arada junto a texto secundário, terra-preta quando protagonista. Nunca cor funcional (carrinho verde = "mercado é dinheiro bom", mentira semântica)
Tamanhos16px em chip, 20px em linha de transação, 24px máx. Nunca herói de tela ou empty state (L4)
SetLucide (ISC) curado ~16 categorias; redesenhar só o que conflitar. Mapeamentos: mercado=carrinho; energia=raio/plugue, NUNCA lâmpada (ideia-mãe morta da v1); streaming=play; transporte=ônibus; guardado=lata com a tampa aberta (o objeto-mãe da marca, pronta pra receber)

Quando e onde — o mapa declarado

O ícone existe pra um trabalho só: identificar uma CATEGORIA ao lado de um dado do ledger. Se no lugar não há categoria com dado, não há ícone. Esse critério decide qualquer caso novo sem precisar emendar esta lista.
Onde ENTRAComo
Chip de categoria16px, antes da palavra
Linha de transação / extrato20px, à esquerda, alinhado à primeira linha do texto
Cabeçalho de card de categoria20px, junto ao título
Gráfico de composição (lista com barra proporcional)16px antes do rótulo de cada linha — cada linha É uma categoria, o ícone faz bater o olho sem ler
Gráfico de barras quando o eixo é CATEGORIA16px junto ao rótulo embaixo da barra
Título/rótulo de gráfico sobre UMA categoria16px antes da palavra — a lata na linha de guardado, o carrinho num gráfico só de mercado. O sujeito do gráfico É a categoria. No rótulo, nunca dentro do desenho (lata flutuando perto da curva é decoração, L7). Multi-categoria não ganha ícone no título — não há "a" categoria; os ícones já estão nas linhas/barras
Onde NÃO entraPor quê
Gráfico de barras/linha quando o eixo é TEMPOmar, abr, mai não são categorias — não há o que identificar
Navegação, botões, abasação se identifica por palavra (L4); ícone ali é decoração de app de banco
Bolhas de conversa (prosa do dom)a prosa é bilhete: papel e tinta, sem pictograma no meio da frase
Tela vazia / empty state / heróiícone gigante ilustrando o vazio é o anti-padrão de fintech (L4)
Alertas e estados (erro, sucesso, atenção)reforço não-cromático já é tipográfico (+ − ! ▲); ícone de alerta é alarme de banco

Sempre com a palavra junto — o ícone acelera o olho, não substitui (a11y: ícone aria-hidden, o texto lê).

porquinho, cofrinho, cifrão solto, saco de dinheiro, gráfico decorativo — dentro e fora do set
ícone solto em navegação, botão ou tela vazia — categoria existe SÓ ao lado de dado do ledger

08Gráficos — sob pedido, e quando explicam melhor

Pra quem tem familiaridade: barra e linha, na doutrina (cor só no que importa). Servidos quando a pessoa pede ou quando o dom julga que o desenho explica melhor que a prosa — e aí entra como bilhete ("desenhei pra você ver: …"), nunca como dashboard fixo.

O dom ensina — todo gráfico desce com uma leitura. Gráfico sem leitura é dashboard, e dashboard é o wizard do banco em outra roupa. Todo gráfico chega acompanhado de um bilhete do dom logo abaixo: o que o desenho mostra (fato), o que isso significa (impacto) e o que dá pra fazer (opção). O gráfico mostra; o dom ensina. (Registrada no brandbook como Lei do ensino, cap. 07.)
barra — comparação · valores no TOPO das barras · a barra-resposta em lata-fundida
712mai
840jun
781jul
987ago
agosto foi teu mês mais caro de mercado: R$ 987 — uns R$ 210 acima da tua média. Quer que eu te avise quando passar dela?
composição — "pra onde foi o dinheiro" (o lugar do donut é este: lista com barra proporcional · ícone 16px no rótulo — cada linha é uma categoria)
mercado
R$ 987
casa
R$ 690
transporte
R$ 384
saúde
R$ 231
outros
R$ 282
quase 4 de cada 10 reais foram pro mercado. Se quiser baixar isso, o caminho mais fácil é a lista do que se repete toda semana — quer que eu monte?
guardado — linha · evolução no tempo · o sujeito é UMA categoria, o ícone entra no rótulo
mar abr mai jun jul R$ 612
o que você guarda vem subindo há dois meses — + R$ 612 em julho, teu melhor mês do ano. Segurando esse ritmo, dá pra fechar dezembro com uns R$ 3.000 na lata.
TipoRegra
Barra (default)comparação entre meses/categorias; máx 6 barras; raio 2px no topo; a barra-resposta em lata-fundida, as demais em traço-de-lápis com valor em terra-arada
Linhaevolução no tempo; stroke 2px terra-preta; UM ponto de destaque 6px lata-fundida; grade horizontal 1px, sem vertical; sem preenchimento sob a curva (gradiente = fintech, L7)
Íconesseguem o mapa da seção 07: entram quando o eixo/linha é categoria (composição, barras por categoria), 16px junto ao rótulo, e no título de gráfico mono-categoria (a lata na linha de guardado); nunca quando o eixo é tempo (mar, abr, mai não são categorias) e nunca dentro do desenho
Donut/pizza: foraanel de gasto é assinatura de app de banco, ilegível além de 3 fatias, morre em P&B. Composição = barra horizontal empilhada ou lista com barra proporcional
Texto e númeroseixos/legendas Figtree 400 · 13 terra-arada; todo valor em JetBrains Mono (mesma tool da prosa — um número, uma fonte; INV-1)
Tamanhoaltura 180–220px, largura da bolha; reveal máx 300ms ease-out (reduced-motion: estático)
Descobertaprosa comparando ≥3 períodos/categorias oferece o chip "ver em gráfico" — atalho do dizível
Execuçãoreact-native-svg à mão — simples demais pra lib de charts
3D, sombra, gradiente, animação elaborada, verde/pimenta em barra que não É entrada/saída

09Pimenta — os casos canônicos

Pra este público, a cor do erro é a cor da vergonha — e a fundação tira a vergonha da pessoa. Por isso: pimenta é dedo apontando, não cor de categoria. Os três usos, e nenhum outro:

1 — Saída de dinheiro (só nos glifos do valor, com −, em mono)

Saíram − R$ 4.537,60 esse mês — R$ 320 a mais que em julho.

o valor em pimenta mono 600; o resto da frase em tinta — "R$ 320 a mais" é contexto, não saída

2 — Erro: a cor toca só o fato falho (B2)

não consegui ler a fatura do cartão agora — o banco não respondeu. Sigo com a foto de ontem e tento de novo em 1h.

bilhete calmo; pimenta marca APENAS o trecho que falhou — nunca a bolha, o fundo, ou um ícone de alerta

3 — Destrutivo: borda + texto, nunca preenchido

secundário pimenta; o CTA amarelo nunca é destrutivo (a lata entrega, não tira)

Em lista de transações, pimenta NÃO é a cor das saídas. Saídas ficam em terra-preta com −; pimenta só no agregado que pede atenção ou na linha anômala que o dom está apontando. Uma tela que pinta de vermelho cada gasto devolve a vergonha pra pessoa, linha a linha, todo dia.

10O bilhete — notificação e erro

SituaçãoPadrão
B1 — trabalho em andamento"conferindo a fatura…" — timeline/badge visíveis, nunca silêncio
B2 — falha / ausência"não consegui atualizar agora — sigo com a foto de ontem." Recado calmo, nunca modal de pânico, nunca "Ops!"
B3 — aprendizado autônomo"anotei que sua fatura fecha dia 3."
Pushum bilhete de uma frase com o fato — nunca clickbait
Tela vazia"ainda não tenho nada seu pra cuidar. me conta uma coisa e eu já começo." — sem ilustração
Erro do domprimeira pessoa, "errei"; pimenta só no fato falho

11Painel escuro e entardecer

Não existe modo escuro (L2). Jabuticaba = exceção utilitária de UM número. Fallback noturno = papel-ao-entardecer (papel rebaixa, tinta continua). Inverter é proibido.

O entardecer nunca é automático. Não existe gatilho de horário nem prefers-color-scheme que troque o palco — o app não segue o tema escuro do celular (isso seria modo escuro disfarçado, e a L2 diz que ele não existe). papel-ao-entardecer é token de emergência, usado só onde uma regra de produto explícita mandar rebaixar o papel de um trecho específico — nunca um estado de tela inteiro que liga sozinho. A porta fica fechada: sem gatilho ambiente, o palco é sempre o meio-dia. (O favicon do §01 lê o tema do SO porque a aba do navegador é palco alheio — dentro do app, não.)
painel escuro — exceção utilitária
sobrou esse mês
R$ 1.284,60
o sol UMA vez; foco aqui é #FFFF00
papel-ao-entardecer — fallback noturno

O dia fechou no azul: sobraram R$ 87,20 do teu limite de hoje. A tinta continua terra-preta — só o papel desce a luz.

12Espaço e ritmo

TokenValorUso
--dom-s14pxrespiro interno mínimo (chip)
--dom-s28pxentre irmãos (chips, ícone+texto)
--dom-s316pxpadding de card e bolha; entre mensagens
--dom-s424pxentre blocos
--dom-s540pxentre seções; margem de tela
--dom-r-card14pxcards, propostas, alertas
--dom-r-bolha18px (origem 4px)bolhas
--dom-r-pill999pxbotões, chips, badges
Leve é lei. Um assunto por vez; nenhuma mancha escura maior que um componente (L1); máx 2 níveis de elevação. Se precisa de scroll pra achar o que importa, o bilhete está comprido demais.

13Acessibilidade — os números

ParContrasteVeredito
terra-preta / branco-de-meio-dia13,9:1AAA — texto padrão
terra-arada / branco-de-meio-dia5,0:1AA — secundário; piso duro 10px (§13 regra 5)
escuro-jabuticaba / branco-de-meio-dia14,9:1AAA — títulos, links
verde-de-colheita / branco-de-meio-dia5,9:1AA — número de entrada
pimenta / branco-de-meio-dia6,2:1AA — número de saída
ferrugem / branco-de-meio-dia6,0:1AA — atenção
terra-preta / amarelo-de-lata8,4:1AAA — texto do CTA
borda-cta / branco-de-meio-dia3,77:1WCAG 1.4.11 — contorno do CTA
amarelo-de-sol / escuro-jabuticaba15,59:1AAA — o número-herói
Não-negociáveis. (1) Reforço não-cromático sempre. (2) Alvo ≥44×44px. (3) Foco visível. (4) prefers-reduced-motion desliga respiração, caret, pulsos e skeleton — a informação nunca depende do movimento. (5) Piso duro 10px — rótulos, timestamps de timeline e valores-anotação colados a gráfico ficam nesse mínimo (é onde vive o texto de apoio em terra-arada; abaixo disso nada desce). Texto de leitura corrida ≥13px. O número-entrega — o que o dom te dá na bolha (.num, num-sol) — é sagrado e nunca baixa de 14px; o valor-anotação de gráfico (.val, rótulo colado à barra) é UI de apoio, não é o número protagonista da INV-1, e por isso pode cair ao piso. Dívida declarada: 10px é o mínimo assumido para um público de vista cansada — a régua honra o layout, não o esconde. Subir esses apoios é candidato do próximo ciclo. (6) Ícone de categoria aria-hidden; a palavra lê.

14Voz — resumo operacional

"Deixa comigo." ao receber; "feito." (minúsculo, com ponto) ao entregar — sempre sozinho na bolha
fato → impacto → opção; % vira R$; primeira pessoa; "dom" sempre minúsculo
passo de trabalho em primeira pessoa nascido da tool ("conferindo sua fatura…")
"Ops!", "Eita!", emoji decorativo, jargão bancário sem tradução, "Trabalhando para você" (crachá)
tom de propaganda — margarina morre; o que envergonha em voz alta na frente da família morre

15Tokens — copiar e colar

:root{
  /* palco */
  --dom-branco-de-meio-dia:#FBF7F0;
  --dom-papel-sombra:#F4EDE2;
  --dom-traco-de-lapis:#E4DACA;
  --dom-papel-ao-entardecer:#EFE5D3;
  /* tintas */
  --dom-terra-preta:#2B2521;
  --dom-terra-arada:#6F6558;
  --dom-escuro-jabuticaba:#2E1528;
  /* lata */
  --dom-amarelo-de-lata:#F0A800;
  --dom-lata-fundida:#C88C00;
  --dom-borda-cta:#A87500;
  /* funcionais */
  --dom-verde-de-colheita:#1A6E3F;
  --dom-ferrugem:#964917;
  --dom-pimenta:#B52718;
  /* sol — só sobre jabuticaba */
  --dom-amarelo-de-sol:#FFFF00;
  /* estados */
  --dom-lata-pressionada:#D89700;
  --dom-tinta-apagada:#A99E8F;
  --dom-selecao-de-texto:#F8DFA8;
  --dom-veu:rgba(43,37,33,.45);
  /* raios e espaço */
  --dom-r-card:14px; --dom-r-bolha:18px; --dom-r-chip:999px; --dom-r-pill:999px;
  --dom-s1:4px; --dom-s2:8px; --dom-s3:16px; --dom-s4:24px; --dom-s5:40px;
  /* movimento — um batimento só */
  --dom-t-pulso:1400ms;
  --dom-t-entrada:200ms;
  --dom-t-troca:150ms;
  --dom-ease-entrada:cubic-bezier(0,0,.2,1);
  --dom-ease-pulso:cubic-bezier(.4,0,.6,1);
}

/* fontes (Google Fonts / expo-google-fonts) */
--dom-font-marca:  "Outfit"          (700 contexto de marca, 600 títulos)
--dom-font-ui:     "Figtree"         (400/500/600)
--dom-font-numero: "JetBrains Mono"  (600; herói 700)

dom — design system v2.2 · derivado do DOM_BRANDBOOK_V2.html (vigente) + parecer de design + revisão do fundador 2026-08-16 · substitui v2.1, v2.0 e v1.0 quando aprovado. Todo mundo devia ter um dom.