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.
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.


| Uso | Arquivo / tamanho |
|---|---|
| Favicon web | favicon.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 chat | o símbolo puro a 28px, sem círculo, sem borda, sem fundo — o d-jabuticaba é o próprio contorno; 48px em tela de perfil |
| Social | 400×400 e 800×800, símbolo com ~12% de respiro |
| Uso geral | SVG sempre que possível; PNG 512/1024/2048 exportados do vetor — nunca redimensionar PNG |
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.
Touch-first: pressed é o estado rei. Hover é cortesia web e nunca carrega informação.
| Estado | Token / regra |
|---|---|
| pressed (CTA) | lata-pressionada #D89700 + scale .97 — feedback imediato |
| hover (CTA) | lata-fundida #C88C00 — web only |
| disabled | tinta-apagada #A99E8F sobre papel-sombra |
| foco | anel 2px #2E1528 + offset 3px (claro); #FFFF00 (escuro) |
| seleção | #F8DFA8 |
| carregando | skeleton traço-de-lápis ⇄ papel-sombra (nunca spinner de tela cheia) |
| modal | véu rgba(43,37,33,.45); máx 2 níveis de elevação |
| alvo de toque | mínimo 44×44px |
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.
| Token | Valor | Usa |
|---|---|---|
| --dom-t-pulso | 1400ms | respiração do símbolo, ponto da timeline, caret, skeleton, ponto do badge |
| --dom-t-entrada | 200ms | fade + slide-up 8px de bolhas, cards, badge |
| --dom-t-troca | 150ms | crossfade único prosa→bloco estruturado |
| --dom-ease-entrada | cubic-bezier(0,0,.2,1) | toda entrada |
| --dom-ease-pulso | cubic-bezier(.4,0,.6,1) | todo ciclo |
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:
| Janela | O que aparece |
|---|---|
| 0–100ms | pressed do controle + eco otimista: a mensagem do usuário entra na thread na hora, sem esperar rede |
| 100–300ms | nada (evitar flash em resposta instantânea) |
| 300ms–2s | avatar + símbolo respirando (seção 04) |
| >2s ou ≥2 tools | a respiração vira timeline: o primeiro passo real entra |
| primeiro token | timeline colapsa pra 1 linha acima da bolha que nasce; streaming começa |
| O que roda por baixo (nunca aparece) | O que o dom diz |
|---|---|
| OAuth / login no banco | "Entrando aí com cuidado…" |
| fetch de lançamentos | "Catando os lançamentos…" |
| parse de fatura/extrato | "Lendo sua fatura de ponta a ponta…" |
| categorização | "Separando o que é o quê…" |
| soma / agregação | "Somando tudo aqui…" |
| comparação com histórico | "Olhando como foram os outros meses…" |
| consulta à memória | "Lembrando do que você já me contou…" |
| juntar N contas | "Botando suas contas todas numa mesa só…" |
| retry / banco lento | "Seu banco tá devagar hoje — eu fico esperando por você…" |
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:
| Aspecto | Regra |
|---|---|
| Texto | o passo real ("conferindo sua fatura…"); sem passo nomeável: "deixa comigo — trabalhando nisso". Nunca "Trabalhando para você" — frase de crachá, reprova em voz alta |
| Tempo | segundos decorridos em mono ("· 3s") — honestidade de relógio aumenta confiança e percepção de agilidade |
| Anatomia | pill 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) |
| Onde | sticky acima do input; entra fade+slide 200ms; toque rola até a timeline viva (nunca abre tela própria) |
| Quando aparece | trabalho >8s E timeline fora do viewport — raro é o que o mantém significativo |
| Quando some | ao terminar vira "✓ feito." verde, segura 2s, fade-out 300ms |
Interface leve, simples, clara e esclarecedora. Chat-first: texto curto + chips; dado estruturado em tabela; ação proposta antes de executada.
sem delay artificial por caractere; caret 2px × altura da linha, pisca a 1.4s; render com throttle de 30fps
| Entrou | + R$ 4.850,00 |
| Saiu | − R$ 4.537,60 |
| Sobrou | R$ 312,40 |
Reduced-motion: sem caret; substituições instantâneas.
| 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 |
Executado, vira registro com ✓ feito. — badge verde só em sucesso (L5). Pendente = sem badge; falha = "!" ferrugem no fato falho.
| Entrou | + R$ 4.850,00 |
| Saiu | − R$ 4.537,60 |
| Sobrou | R$ 312,40 |
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.
| Aspecto | Regra |
|---|---|
| Grid | 24×24px, área viva 20×20, stroke 2px round cap/join, sem preenchimento |
| Cor | sempre tinta: terra-arada junto a texto secundário, terra-preta quando protagonista. Nunca cor funcional (carrinho verde = "mercado é dinheiro bom", mentira semântica) |
| Tamanhos | 16px em chip, 20px em linha de transação, 24px máx. Nunca herói de tela ou empty state (L4) |
| Set | Lucide (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) |
| Onde ENTRA | Como |
|---|---|
| Chip de categoria | 16px, antes da palavra |
| Linha de transação / extrato | 20px, à esquerda, alinhado à primeira linha do texto |
| Cabeçalho de card de categoria | 20px, 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 é CATEGORIA | 16px junto ao rótulo embaixo da barra |
| Título/rótulo de gráfico sobre UMA categoria | 16px 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 entra | Por quê |
|---|---|
| Gráfico de barras/linha quando o eixo é TEMPO | mar, abr, mai não são categorias — não há o que identificar |
| Navegação, botões, abas | açã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ê).
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.
| Tipo | Regra |
|---|---|
| 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 |
| Linha | evoluçã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) |
| Ícones | seguem 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: fora | anel 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úmeros | eixos/legendas Figtree 400 · 13 terra-arada; todo valor em JetBrains Mono (mesma tool da prosa — um número, uma fonte; INV-1) |
| Tamanho | altura 180–220px, largura da bolha; reveal máx 300ms ease-out (reduced-motion: estático) |
| Descoberta | prosa comparando ≥3 períodos/categorias oferece o chip "ver em gráfico" — atalho do dizível |
| Execução | react-native-svg à mão — simples demais pra lib de charts |
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:
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
bilhete calmo; pimenta marca APENAS o trecho que falhou — nunca a bolha, o fundo, ou um ícone de alerta
secundário pimenta; o CTA amarelo nunca é destrutivo (a lata entrega, não tira)
| Situação | Padrã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." |
| Push | um 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 dom | primeira pessoa, "errei"; pimenta só no fato falho |
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 dia fechou no azul: sobraram R$ 87,20 do teu limite de hoje. A tinta continua terra-preta — só o papel desce a luz.
| Token | Valor | Uso |
|---|---|---|
| --dom-s1 | 4px | respiro interno mínimo (chip) |
| --dom-s2 | 8px | entre irmãos (chips, ícone+texto) |
| --dom-s3 | 16px | padding de card e bolha; entre mensagens |
| --dom-s4 | 24px | entre blocos |
| --dom-s5 | 40px | entre seções; margem de tela |
| --dom-r-card | 14px | cards, propostas, alertas |
| --dom-r-bolha | 18px (origem 4px) | bolhas |
| --dom-r-pill | 999px | botões, chips, badges |
| Par | Contraste | Veredito |
|---|---|---|
| terra-preta / branco-de-meio-dia | 13,9:1 | AAA — texto padrão |
| terra-arada / branco-de-meio-dia | 5,0:1 | AA — secundário; piso duro 10px (§13 regra 5) |
| escuro-jabuticaba / branco-de-meio-dia | 14,9:1 | AAA — títulos, links |
| verde-de-colheita / branco-de-meio-dia | 5,9:1 | AA — número de entrada |
| pimenta / branco-de-meio-dia | 6,2:1 | AA — número de saída |
| ferrugem / branco-de-meio-dia | 6,0:1 | AA — atenção |
| terra-preta / amarelo-de-lata | 8,4:1 | AAA — texto do CTA |
| borda-cta / branco-de-meio-dia | 3,77:1 | WCAG 1.4.11 — contorno do CTA |
| amarelo-de-sol / escuro-jabuticaba | 15,59:1 | AAA — o número-herói |
Fonte de autoridade: a voz completa (as 6 leis, o preâmbulo do médico, o Teste da Margarina) e o posicionamento desafiante (duas vozes, inimigo, linhas de ataque) vivem no DOM_BRANDBOOK_V2.html caps. 08 e 09. Em conflito, o brandbook vence este resumo.
| Dom fala | Não fala |
|---|---|
| dinheiro | recursos |
| guardar | aportar (exceto ao traduzir termo do banco — aí vem entre aspas, como parte da tradução) |
| sobrar | superávit |
| Cena | Fórmula | Exemplo |
|---|---|---|
| Cumprimento | nunca "como posso ajudar" (SAC); contextual, útil na 1ª frase | "Ei. Sua fatura fechou ontem — quer ver como veio antes de eu te contar o resto?" |
| Aviso | fato → impacto → opção | "Sua fatura veio R$ 210 acima do normal. O grosso foi farmácia, dia 9. Tá certo isso ou quer que eu olhe de perto?" |
| Traduzindo o banquês | o que ele disse → o que significa → o que muda pra você | "'Limite especial liberado automaticamente' = você entrou no cheque especial sem pedir. É 8% ao mês." |
| Dizendo não | o limite é função, não burocracia | "Onde investir eu não digo — isso é conversa pra quem é registrado pra isso. Eu te mostro quanto cada opção custa e rende hoje." |
| Momento sensível | zero julgamento/humor/exclamação; acolhe, oferece passo pequeno | "Esse mês fechou no vermelho: R$ 340. Acontece com muita gente. Se quiser, te mostro as duas coisas que mais pesaram." |
"O dom traduz o banquês" — a ação de tradução do jargão bancário, nomeada. Pode virar botão de produto ("traduzir esta cláusula"), formato de conteúdo e linha de campanha (brandbook cap. 09).
: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.