Cor

A paleta tokenizada do DS Razac: cores nomeadas por intenção (primary, ink, border, canal, semantic) que carregam significado, garantem contraste e mantêm as 5 telas do Portal 2.0 coerentes. Use tokens, nunca hex solto.

import { P2ChipDI, P2Tag } from '@/components/portal2/kit'Figma
De-para · hoje → ideal
Antes

Hex espalhado direto na marcação (ex.: bg-[#4F46E5], text-[#16A34A]), cada tela escolhendo seu tom de verde/vermelho — sem fonte da verdade e sem garantia de contraste.

Agora

Escalas nomeadas no tailwind.config (primary, ink, border, canal, success/warning/danger/info) consumidas por classe semântica (bg-primary, text-ink-muted, bg-canal-verde). O hex que sobra é cor intencional de portal, não conversão pendente.

Por quê: Cor por intenção, não por valor: trocar a marca na V2 vira mudar o token, não caçar hex tela a tela. Os pares fg/bg semantic e os ajustes de canal (verde escuro #15803D em texto) já passam em WCAG AA.

Primary (indigo)

Uma escala nomeada por intenção, não por valor: bg-primary é a ação, 50/100 são fundos suaves de chip/hover/selecionado, 700 é o hover do botão. Trocar a marca na V2 vira mudar o token — não caçar #4F46E5 tela a tela.

primary-50#EEF2FF
primary-100#E0E7FF
primary-200#C7D2FE
primary-500#6366F1
primary#4F46E5
primary-700#4338CA
primary-900#312E81
Aplicado: bg-primary no "Salvar análise"; primary-50/700 no chip de etapa ativa e na linha selecionada da tabela de processos.

Ink (texto)

Hierarquia de texto por token, nunca por opacidade: ink no título, ink-muted no secundário, ink-subtle no terciário/ícone, ink-inverse sobre fundo escuro. ink-muted sobre bg-surface foi calibrado para passar em WCAG AA (4,5:1) — opacidade aleatória não garante isso.

Aa título

text-ink#1E293B

Aa secundário

text-ink-muted#64748B

Aa terciário

text-ink-subtle#94A3B8

Aa inverso

text-ink-inverse#F8FAFC
Aplicado: ink no nº do processo XXX0000-SCDI; ink-muted no nome do cliente; ink-subtle no rótulo "FOB"; ink-inverse nos itens da sidebar.

Superfícies

Quatro fundos com papéis fixos: bg é o canvas, bg-surface é o cartão que "levanta" do canvas, bg-subtle é a zona suave (cabeçalho de tabela, hover), bg-sidebar é a casca escura. A diferença sutil entre bg e bg-surface é o que cria profundidade sem sombra pesada.

Canvas
bg#F1F5F9
Cartão
bg-surface#FFFFFF
Zona suave
bg-subtle#F8FAFC
Sidebar
bg-sidebar#0F172A
Aplicado: bg no fundo do workspace; bg-surface nos cards de KPI da DI; bg-subtle no cabeçalho da tabela de invoices; bg-sidebar no menu lateral do portal.

Bordas

Três pesos de divisória: border padrão para contornos de card, border-strong para inputs/checkbox (precisam de mais presença para o alvo de clique ser óbvio) e border-subtle para linhas internas de tabela, que devem separar sem competir com o conteúdo.

border#E2E8F0

Contorno de card

border-strong#CBD5E1

Inputs e checkbox

border-subtle#F1F5F9

Linhas de tabela

Aplicado: border no card do processo; border-strong na borda do P2Input de busca de NCM; border-subtle entre as linhas da tabela de produtos vinculados.

Canal DI

O vocabulário visual mais carregado de significado do produto: cada cor é um canal de parametrização da DI, não decoração. Por isso a cor nunca anda só — vem sempre com label e dot (P2ChipDI), porque ~8% dos homens têm daltonismo e canal errado custa caro. Clique para copiar o token.

Aplicado: P2ChipDI na coluna "Canal" da listagem de DIs; accent do P2KanbanCard na triagem; tom do P2Progress de desembaraço.

Semânticas (status)

Cada status vem como PAR fg+bg já calibrado: success-fg sobre success-bg fecha contraste AA sem você adivinhar tons. Usar o par é o que impede o erro clássico de texto verde-vivo sobre verde-claro (ilegível). danger é destrutivo/erro; warning é atenção; info é neutro-informativo.

Desembaraçado
success-bg · #DCFCE7success-fg · #14532D
Aguardando ICMS
warning-bg · #FFEDD5warning-fg · #7C2D12
NCM inválida
danger-bg · #FEE2E2danger-fg · #7F1D1D
DI registrada
info-bg · #DBEAFEinfo-fg · #1E3A8A
Aplicado: success no status "Desembaraçado"; warning em "Aguardando ICMS"; danger no erro de NCM inválida; info na nota "DI registrada".

Cor aplicada (P2Tag)

O teste final de uma escala de cor é vê-la num componente: os mesmos pares semantic viram tons de P2Tag prontos. A vantagem do token sobre o hex aparece aqui — o componente consome a intenção (tone="success") e a cor certa segue junto, com contraste garantido.

FechamentoEm análiseDesembaraçoPendênciaII em abertoPré-Embarque
Aplicado: P2Tag em etapas e tributos: "Desembaraço" (success), "Pendência" (warning), "II em aberto" (danger), "Pré-Embarque" (info).

Texto sobre cor

Pares testados em WCAG AA, com a armadilha explícita: canal-verde puro reprova em texto pequeno (~3,3:1) — por isso o delta verde do KPI usa #15803D, não o verde do chip. Branco fecha sobre primary/danger; #422006 (quase-preto âmbar) é o texto certo sobre o amarelo, porque branco sobre amarelo reprova.

Branco / primarytext-white · AA ✓
Branco / vermelhotext-white · AA ✓
#422006 / amareloamber-950 (não branco) · AA ✓
+12% verde escuro#15803D em texto (não canal-verde)
Aplicado: Texto branco no botão danger "Excluir processo" e no chip vermelho; #422006 no rótulo do botão warning "Reabrir período"; verde escuro no delta "+12%" do KPI de desembaraços.

DS brand (grape)

O namespace ds (grape #7C3AED) é a marca da FERRAMENTA de Design System, não do produto — é o que separa "a casca do Storybook" das cores que pintam o portal. Mantê-lo isolado é o que permite a V2 trocar as cores do produto sem tocar na identidade do DS, e vice-versa.

ds-50#F5F3FF
ds-200#DDD6FE
ds-400#A78BFA
ds#7C3AED
ds-700#6D28D9
ds-900#4C1D95
Aplicado: Só na casca: selo P2DsBadge "Design System 2.0", realces do /storybook e /ds-final. Nunca dentro das 5 telas do Portal 2.0.

De-para (hoje → ideal)

Dois marcadores de anotação, não cores de UI: ds-legacy (âmbar = como é hoje) e ds-accent (ciano = como deve ser). Eles existem só para o manifesto/de-para narrar a migração visualmente, sem se confundir com warning (âmbar de status) nem com info (azul de status) do produto.

Hoje (legacy)
bg-[#4F46E5]ds-legacy · #F59E0B
Ideal (accent)
bg-primaryds-accent · #22D3EE
Aplicado: No /diagnostico e no de-para do /ds-final: âmbar marca o "antes" (hex solto), ciano marca o "depois" (token). Linguagem do DS, não do portal.