Tokens

Gerado de estilo/00-tokens.css por ds/gera.py. Editar esta página à mão não serve: o próximo gera.py sobrescreve.

← voltar
Estes tokens são a mesma cópia que o protótipo usa. O protótipo carrega estilo/00-tokens.css por link, não tem cópia própria. Trocar um valor aqui muda o produto em todos os lugares que o usam, sem procurar e substituir.
Duas camadas, no mesmo arquivo. Primitivo é nomeado pelo valor — --acao, --t2 — e quem cria componente escolhe um. Papel é nomeado pela função — --sup, --borda, --forte-neutro — e é o que a Regra 3 do AGENTS.md exige usar dentro de componente: pedir um papel, nunca escolher um primitivo direto. Quando o valor abaixo é só var(--outro-nome) (marcado alias), é sinal de papel apontando pro primitivo que o sustenta.

Superfície · 19

--decorcopiar
#B0B0BA
--papelcopiar
#FFFFFF
--shellcopiar
rgba(255,255,255,.94)
--mundocopiarO FUNDO DA JANELA — a "prancheta" atrás de tudo. Existir como token é correção de defeito, não adição (25/ago/2026): o valor vivia como `background:#F2F2F6` literal na regra do body, logo abaixo, e portanto era o único papel de superfície do sistema que não tinha nome. O sintoma: comentários em estilo/11-v2-fila.css e na vitrine JÁ citavam "--mundo" pra explicar contraste ("--t3 dá 4,31:1 sobre --mundo"), como se o token existisse — e ninguém podia consultá-lo. Depois, a página de documentação escreveu `var(--mundo, #f2f2f6)`, que caía SEMPRE no fallback: um literal disfarçado de token, exatamente o que a Regra 3 proíbe. Não é igual a --sup nem a --papel de propósito: os dois são branco, e o card branco precisa flutuar contra algo.
#F2F2F6
--linhacopiar
rgba(20,20,34,.10)
--linha-2copiar
rgba(20,20,34,.055)
--linha-3copiar
rgba(20,20,34,.20)
--veu-modalcopiarescurece o que fica atrás de uma camada modal centrada (o véu da busca Ctrl/Cmd+K). Não muda por tema de propósito, igual --sombreia: o papel dele é escurecer, não servir de hairline visível contra o canvas, então não precisa inverter no escuro. Achado no gate (26/ago/2026): estava rgba(20,20,34,.32) literal direto em Layout.css, violação da Regra 3.
rgba(20,20,34,.32)
--supcopiar
#FFFFFF
--sup-tintacopiarsuperfície base
var(--tinta) alias
--sup-2copiar
rgba(20,20,34,.05)
--sup-2-tintacopiarsuperfície suave
var(--t2) alias
--sup-3copiarhover de item
rgba(20,20,34,.08)
--flutuacopiar
rgba(255,255,255,.98)
--flutua-tintacopiarpopover/menu
var(--ink) alias
--caladacopiartexto secundário
var(--t3) alias
--bordacopiarborda de contorno
var(--linha) alias
--borda-fortecopiarborda em hover
var(--linha-3) alias
--sombreiacopiaro agente de ESCURECIMENTO: o que se mistura a um preenchimento cheio pra produzir o hover dele. Preto puro de propósito, e não --tinta: --tinta é papel de texto e tem viés azul (#16161C), então escurecer o verde e o vermelho com ela deslocaria o matiz em vez de só baixar o brilho.
#000

Texto · 10

--tintacopiargrafite — o dado mora aqui. t2 8,9:1 · t3 4,8:1 — passam AA para texto pequeno, mas só contra --papel (branco); nenhum dos dois foi medido contra composição translúcida real. O tom mais claro virou --decor e NÃO carrega texto: só régua, ponto e traço. Hierarquia de rótulo se faz por peso, caixa e tracking, não por clarear até sumir. --t4 CORRIGIDO na fonte (31/ago/2026): o valor antigo (#73737F, quase idêntico a --t3) tinha reprovado 4,5:1 SEIS vezes em sessões anteriores (`.rotcorte small`/`.escala` a 4,19:1, `.morta-tx` a 4,31:1 — ver `contratos/ruler.md`), e cada vez foi remendado só no seletor que reprovou (trocado pra --t2 em `12-v3-terreno.css`/`11-v2-fila.css`), sem nunca corrigir o token. A sétima ocorrência apareceu na Fila (`.pos.num`/`.mapa-pe`, medido ao vivo com getComputedStyle + composição real de fundo translúcido, não a string do CSS): 4,19–4,41:1. Valor novo medido pra passar com folga contra o pior caso real (~rgb(245,245,246), o `--shell` translúcido composto sobre `--mundo`): 4,97–5,11:1. Fica mais escuro que --t3 de propósito — --t3 segue documentado como "só sobre --papel", --t4 precisa segurar composição translúcida, então não são mais o mesmo degrau. Os dois remendos antigos em --t2 continuam válidos (mais contraste que o necessário não é defeito) e não foram revertidos.
#16161C
--inkcopiar
#2A2A34
--ink-2copiar
#4A4A57
--t2copiar
#494954
--t3copiar
#71717D
--t4copiar
#666670
--offcopiar
#54545F
--off-tcopiar
#F1F1F3
--forte-neutrocopiar
var(--tinta) alias
--cheio-tintacopiartinta sobre preenchimento CHEIO de qualquer tom semântico: badge sólido de ok, atenção, risco, calado. São dois papéis e não um: --marca-tinta é o par da marca e muda se a marca mudar; este acompanha verde, âmbar e vermelho, que são outra família e outra decisão.
#fff

Marca e ação · 7

--acaocopiarROXO OFICIAL DE MARCA (Indigo Velvet #3D2177, do manual em brandfetch). Antes era #6106D2, amostrado de print do GeoImóvel. O manual manda, e o tom oficial ainda é MAIS sóbrio: 12,5:1 no branco contra 8,5:1 do anterior.
#3D2177
--acao-2copiar
#2C1758
--acao-fracocopiar
rgba(61,33,119,.06)
--acao-bordacopiar
rgba(61,33,119,.28)
--marca-ourocopiardourado de marca: só a marca usa. Âmbar nesta interface já significa "atenção", então dourado em qualquer outro lugar colidiria de sentido.
#FCB830
--marcacopiar
var(--acao) alias
--marca-tintacopiar
#fff

Semântico · 13

--okcopiaraprovado em produção — landbank.html v282 (15/set/2026), #1C7548→#007A55
#007A55
--ok-txcopiargreen-800 · texto, 7,13:1 no branco — NÃO reavaliado contra o --ok novo, ver nota acima
oklch(0.448 0.119 151.328)
--ok-fcopiarverde de PREENCHIMENTO (check, ponto), não de texto. Ainda no tom antigo (#16A34A) no protótipo — veio de landbank.html v353 (25/set/2026), fora do escopo daquela rodada.
#16A34A
--atcopiaraprovado em produção — landbank.html v282 (15/set/2026), #846014→#BB4D00
#BB4D00
--at-txcopiarorange-700 · texto, 5,22:1 no branco — NÃO reavaliado contra o --at novo, ver nota acima
oklch(0.553 0.195 38.402)
--nocopiaraprovado em produção — landbank.html v282 (15/set/2026), #B0322A→#C10007
#C10007
--no-txcopiarred-700 · texto, 6,42:1 no branco — NÃO reavaliado contra o --no novo, ver nota acima
oklch(0.505 0.213 27.518)
--infocopiaraprovado em produção — nunca mudou desde antes de 25/ago, nos dois repositórios
#1B5FB8
--info-txcopiarblue-700 · texto, 6,83:1 no branco — NÃO reavaliado contra o --info novo, ver nota acima
oklch(0.488 0.243 264.376)
--ok-tcopiarTingimentos de fundo — recalculados junto com o veredito em landbank.html v282 (mesma entrega, "pra manter contraste, os badges usam a tinta como texto sobre o próprio -t"). Copiados de lá, não recalculados aqui: --info-t não mudou, o mesmo valor já estava certo nos dois lados.
#F2F8F6
--at-tcopiar
#FCF8F5
--no-tcopiar
#FCF2F3
--info-tcopiar
#E5EEFB

Dado · 5

--c1copiarcategórica das camadas: um conjunto harmônico, não cinco cores soltas
#5B63A8
--c2copiar
#B08430
--c3copiar
#AB5252
--c4copiar
#3F8069
--c5copiar
#6E7480

Espaçamento · 14

--folga-anelcopiarfolga pra não cortar o anel de foco de um filho de largura inteira dentro de contêiner com overflow:hidden (passos animados do login). Veio de landbank.html v353 (25/set/2026).
4px
--h-controlecopiaraltura padrão de controle: campo e botão usam a mesma, então batem sempre. Nasceu com o campo de texto do login (landbank.html v353 (25/set/2026)).
38px
--railcopiar
162px
--gutcopiar
16px
--space-1copiar
4px
--space-2copiar
8px
--space-3copiar
12px
--space-4copiar
16px
--space-6copiar
24px
--space-8copiar
32px
--space-12copiar
48px
--space-16copiar
64px
--l1copiarfecha com Esc e com clique fora — Radix Dialog já faz os dois por padrão, sem código extra, contanto que ninguém sobrescreva onEscapeKeyDown/onPointerDownOutside sem motivo (Regra 5).
20px
--gcolcopiar
22px minmax(0,1fr) 96px 296px 28px

Ícone · 5

--icon-xscopiarponto, indicador mínimo
8px
--icon-smcopiardentro de badge/tag — já é o que `.bdg{--is:12px}` usa
12px
--icon-mdcopiarcheckbox, radio
14px
--icon-lgcopiarbotão, item de menu — padrão de uso mais comum
16px
--icon-xlcopiarNOVO, sem uso ainda — navegação solta, destaque, cabeçalho
20px

Sombra · 4

--sh-1copiarprofundidade: uma estratégia só, sombra em camadas. CONFERIDO contra mercado (usuário, `tokens-icone-sombra-motion-mercado.md`, 01/set/2026): a régua sugerida copia o shadcn puro, sombra em preto puro (`rgb(0 0 0 / ...)`), com o ponto em aberto "vale tingir a sombra com grafite/indigo em vez de preto puro, como Stripe/Linear/Attio fazem". Já fazemos isso — as três sombras abaixo usam `rgba(20,20,34, ...)`/`rgba(18,18,32,...)`, um grafite bem escuro, não preto puro (`rgb(0,0,0)`). Não são --shadow-xs/sm/md/lg novos: criar esse segundo conjunto duplicaria o mesmo papel que --sh-1/2/3 já cobre (a Regra 2 do AGENTS.md existe pra evitar exatamente isso), e pior, um --shadow-xs copiado literal do shadcn ENTRARIA em preto puro — regressão de um ponto que já estamos na frente do baseline comparado. Decisão de cor da sombra já tomada, então; falta só decidir se o tom exato (20,20,34) fica como está ou migra pro grafite/indigo específico que o documento sugere — ajuste fino, não decisão nova.
0 0 0 1px rgba(20,20,34,.055), 0 1px 2px -1px rgba(18,18,32,.06), 0 2px 4px rgba(18,18,32,.04)
--sh-2copiar
0 0 0 1px rgba(20,20,34,.055), 0 1px 2px rgba(18,18,32,.05), 0 8px 20px -6px rgba(18,18,32,.10), 0 24px 56px -16px rgba(18,18,32,.16)
--sh-3copiar
0 0 0 1px rgba(20,20,34,.06), 0 2px 4px rgba(18,18,32,.05), 0 14px 32px -8px rgba(18,18,32,.13), 0 40px 80px -20px rgba(18,18,32,.20)
--sh-acaocopiarrealce da AÇÃO PRIMÁRIA: a única sombra colorida do sistema, e só o botão de peso marca a usa. As --sh-1/2/3 acima são profundidade neutra; esta é ênfase, então é papel diferente e não um quarto degrau da mesma escala. Derivada de --acao por color-mix, não fixada: trocar o roxo troca o realce junto. Estava como rgba(61,33,119,.24) literal dentro da regra do botão, que é violação da Regra 3 e reprovava a entrega da Fase 1.
0 2px 8px color-mix(in srgb, var(--acao) 24%, transparent)

Foco · 2

--anelcopiarFOCO É CINZA NEUTRO, NUNCA A MARCA — decidido em PADRAO-VISUAL-DATALAND.md §2: "o roxo chama muita atenção pro campo enquanto digita, um cinza escuro é mais discreto e foca no conteúdo". Não é estética, é a marca competindo com o dado que a pessoa está digitando ou lendo. Reusa --t2 (não inventa hex novo) via color-mix, pra manter o halo translúcido que já existia — mas o valor ANTIGO (roxo a 32%) nunca chegou no 3:1 que WCAG 1.4.11 pede pra indicador de foco: media 1,9:1 contra branco. Não era so a cor errada, era o contraste errado, e ninguem tinha medido isso porque o outline SEMI-TRANSPARENTE muda o numero final — testar so a string do CSS não pega esse defeito. 65% de --t2 foi escolhido medindo o efeito de mistura real (RGBA sobre o fundo), não estimado: 3,47:1 sobre --papel, 3,32:1 sobre --mundo. Os dois passam o 3:1, com folga pequena de propósito — halo mais forte que isso passa a competir com o conteúdo, o mesmo problema que motivou a troca.
color-mix(in srgb,var(--t2) 65%,transparent)
--focus-ring-widthcopiarCONFERIDO contra mercado (usuário, `tokens-mercado-avancado-dataland.md`, 01/set/2026, rodada 6): a LARGURA de 3px converge de verdade — shadcn, Landbank (aqui) e os dois componentes medidos ao vivo da Attio batem nela. A COR não converge (Linear usa marca nos dois componentes, Attio é neutro no input mas azulado no botão, Stripe não tem anel visível) — fica com --anel como já era, não é decisão de mercado, é decisão nossa que o mercado não contradiz com força. Só a largura vira token — era `3px` literal solto nas duas regras que usam essa largura (`:focus-visible` global e `.inp-lei:focus-visible`), violação da Regra 3 anterior a esta medição.
3px

Motion · 1

--easecopiar
cubic-bezier(.23,1,.32,1)

Raio · 6

--rcopiarEXCEÇÃO REGISTRADA À REGRA 10 (usuário, Alessandro, 01/set/2026) — não é reversão da pesquisa de mercado, é a exceção por escrito que a própria Regra 10 exige quando alguém escolhe fugir do padrão de propósito. Migrou pra 10px (base do shadcn puro) mais cedo neste mesmo dia, depois de medir contra 5 sistemas reais. Revertido pra 6px (a base original do Landbank) depois de VER renderizado ao vivo — Botão e o card "Cenário A" liam como mais arredondado do que o produto quer parecer. Motivo coerente com uma decisão já tomada antes, não isolado: `landbank- design-system.md` já registra que o Badge em pílula total foi rejeitado três vezes por ser "público premium, não consumer" — o raio menor no botão/card segue a MESMA lógica de identidade visual, não é gosto solto. --card-radius (14px) e --card-compacto-radius (8px) — nunca chegaram a ser aplicados a `.shell` — ficam como registro de que o shadcn puro foi considerado e conscientemente não escolhido, não como pendência. Fórmula preservada (--r-m/--r-s numa relação de .67 do zero de --r, --r-xs em .5) — só o número da base voltou.
6px
--r-gcopiar
var(--r) alias
--r-mcopiar
calc(var(--r) * .67)
--r-scopiar
calc(var(--r) * .67)
--r-xscopiar
calc(var(--r) * .5)
--r-cheiocopiar
999px

Tipografia · 20

--fs-campo-toquecopiarsó pra campo em tela de toque (evita o zoom do iOS abaixo de 16px). Não é um degrau novo da escala tipográfica.
Aa
16px
--fs-exibicaocopiardisplay · numero-hero do resultado, raríssimo
Aa
40px
--fs-titulo-1copiarh1 · titulo de tela
Aa
32px
--fs-titulo-2copiarh2 · titulo de secao
Aa
24px
--fs-titulo-3copiarh3 · titulo de bloco/cartao
Aa
19px
--fs-destaquecopiarcorpo enfatizado, texto de intro
Aa
15px
--fs-corpocopiarcorpo padrao — o que body{} ja usava
Aa
14px
--fs-pequenocopiarlegenda, nota, texto secundario
Aa
13px
--fs-monocopiarnumero tabular, codigo, dado monoespacado
Aa
12.5px
--fs-rotulocopiarrotulo em caixa alta, gutter, texto minimo. CORRIGIDO (31/ago/2026): era 11px, subiu pra 12px. As quatro referencias que o paragrafo acima cita foram medidas ponto a ponto (Stripe, Linear, Carbon, Radix Themes, GitHub Primer, Material Design 3): 3 das 4 que este arquivo ja citava como referencia (Carbon, Radix, Primer) usam 12px como piso, so a Material Design 3 bate com 11px. O sistema estava um degrau abaixo da companhia que ele mesmo escolheu como espelho. Resto da escala (13/14/15px) ja batia ponto a ponto com Stripe/Carbon, sem necessidade de mudar.
Aa
12px
--fw-normalcopiarDois pesos no sistema. 500 e reservado pra tecla (kbd), nunca pra texto corrido: um terceiro peso no meio de 400 e 600 fica ambiguo de longe.
Aa
400
--fw-fortecopiar
Aa
600
--fw-teclacopiar
Aa
500
--fontecopiar
'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif
--fonte-monocopiarCódigo, nome de token, dado tabular. Uma fonte carregada e não a do sistema porque a do sistema muda por máquina, e aí a mesma tabela de token tem largura diferente pra cada pessoa do time.
'Geist Mono',ui-monospace,'SF Mono',Menlo,Consolas,monospace
--tr-displaycopiar32-40px · título de tela e display
-.03em
--tr-titulocopiar19-24px · título de seção e de bloco
-.015em
--tr-corpocopiarcorpo: zero. Inter já é desenhada pra ser lida assim. `0em` e não `0`: em CSS os dois são idênticos, mas o exportador de DESIGN.md publica isto como Dimension, e o validador do formato reprova número sem unidade. Custou nada e evita um erro no lint.
0em
--tr-rotulocopiarrótulo em CAIXA ALTA pequeno — precisa de ar, não de aperto
.06em
--tr-guttercopiarrótulo de gutter, o menor de todos: mais ar ainda
.12em

Outros · 12

--delta-sobecopiardelta: verde 5,02:1 e bordô 6,63:1 sobre branco, medidos no canvas pelo protótipo (landbank.html v353 (25/set/2026)). As cores do Typefully (#22c55e/#e5484d) e o green-600 do shadcn (#16a34a, 3,30:1) reprovam AA em texto, e aqui o delta é conteúdo: diz se o terreno está acima do que a empresa pagaria.
#15803d
--delta-caicopiar
#b61441
--douradocopiar
#846014
--disabled-opacitycopiar.45, o valor do landbank.html v353 (produção aprovada, Regra 2). Era .5 aqui, e o porte tinha escrito .45 direto no .btn e no .chip: dois "desabilitado" diferentes na mesma tela (auditoria de 25/set/2026).
.45
--mapa-terracopiaros dois cinzas do mapa, os mesmos que o pintor de mapa do protótipo usa (CINZA.base e CINZA.quadra), agora com nome pro CSS. Terra clara, água um degrau mais escura.
#F8F8FB
--mapa-aguacopiar
#E7E7EF
--card-paddingcopiar
24px
--card-radiuscopiarxl do shadcn — considerado e rejeitado, ver acima
14px
--card-gap-gradecopiar16px em grade mais densa (>4 cards visíveis)
24px
--card-compacto-paddingcopiar12px se precisar de mais densidade ainda
16px
--card-compacto-radiuscopiarshadcn md — considerado e rejeitado, ver acima
8px
--dialog-cmdk-radiuscopiar
12px