Design system

Tokens, primitives e patterns. Tudo light-first, white-label-friendly e baseado em shadcn/ui. Mude o tema no canto direito pra ver a contraparte dark.

Cores

Surfaces, brand, status, charts. Todas variáveis CSS — tenants white label sobrescrevem brand-primary por organização.

Superfícies
Background
--background
Foreground
--foreground
Card
--card
Muted
--muted
Border
--border
Brand
Primary
--primary
Brand
--brand-primary
Brand secondary
--brand-secondary
Ring
--ring
Status
Success
--success
Warning
--warning
Info
--info
Destructive
--destructive
Charts
Chart 1
--chart-1
Chart 2
--chart-2
Chart 3
--chart-3
Chart 4
--chart-4
Chart 5
--chart-5

Tipografia

Geist como sans, Geist Mono pra código. Hierarquia: Display, H1, H2, H3, Body, Small, Caption.

Display 5xl — Gateway fiscal

H1 3xl — Painel de controle

H2 xl — Companies cadastradas

H3 base medium — NF-e nº 1234

Body base — texto padrão de parágrafo.

Small — labels secundárias, descrições.

Caption — metadata, timestamps, footer.

POST /v2/companies/{id}/consumerinvoices

Buttons

6 variantes × 4 sizes. Use 'default' pra ação primária da tela e 'outline'/'ghost' pra secundárias.

Variants
Sizes
With icons + states

Form fields

Inputs sempre acompanhados de label. Use aria-invalid pra estados de erro (anel destructive automático).

CNPJ inválido — verifique e tente novamente.

Badges

Status pills compactos. Pra status fiscais use 'success' (Issued), 'warning' (WaitingSend), 'destructive' (Error), 'secondary' (Cancelled).

DefaultCanceladoAutorizadoAguardando envioRejeitadoOutline

Cards

Surface principal pra agrupar conteúdo. Usa Header + Content + Footer.

Empresa principal
CNPJ 12.345.678/0001-99

312 notas emitidas em maio. SLA SEFAZ-SP 99.7%.

Certificado A1
Vence em 47 dias
Renove antes da expiração pra não interromper emissão.

Tables

Listas tabulares. Header sticky e row hover habilitados por padrão.

NúmeroTipoStatusValor
#12345NFCeAutorizadoR$ 89,90
#12344NFeAguardandoR$ 2.450,00
#12343NFCeRejeitadoR$ 12,00
#12342NFSeCanceladoR$ 1.200,00

Empty state

Placeholder pra coleções vazias. Sempre com um CTA pra próxima ação.

Nenhuma nota emitida ainda

Cadastre a primeira empresa e suba o certificado A1 pra começar a emitir NFCe.

Loading states

Skeletons pra placeholders de conteúdo enquanto carrega.