Design System
Freelaw
Um manual visual completo para a Freelaw: todas as cores, fontes, botões e regras de interface em um só lugar. Inspirado nas melhores empresas do Vale do Silício (Linear, Stripe, Vercel). O objetivo é que qualquer pessoa — seja desenvolvedor, designer, gestor ou investidor — saiba exatamente como a Freelaw deve parecer e se comportar em tela.
Visão & Princípios
Filosofia e princípios que orientam cada decisão do DS Freelaw. Inspirado no Linear Design System: poucas opções muito bem pensadas, consistência acima de tudo.
O Linear (ferramenta de gestão de projetos do Vale do Silício) é referência mundial em design de produto. Sua abordagem: poucas opções muito bem pensadas, priorizar consistência sobre customização, e gerar temas visuais inteiros a partir de apenas 3 escolhas (cor base, cor de destaque, nível de contraste). A Freelaw vai seguir essa mesma filosofia.
Princípios do DS Freelaw
Menos opções, melhor resultado. Cada variável, cor e componente deve ter uma única razão de existir. Se não resolve um problema real, não entra no DS.
Componentes opinados que produzem resultado consistente. Não oferecer 10 variantes quando 3 resolvem. Customização é exceção, não regra.
Tokens vivem no código (@freelaw/ui). Figma e documentação são derivados. Se divergirem, o código vence.
Documentação que um PM entende, um designer navega e um dev copia. Sem jargão desnecessário, com exemplos visuais em tudo.
Cada decisão de design considera o público: advogados conservadores que valorizam controle, previsibilidade e reputação. Nada flashy.
Arquitetura de Variáveis Visuais
Assim como grandes empresas (Salesforce, IBM, Adobe), organizamos as regras visuais em 3 camadas. Cada camada referencia a anterior, facilitando manutenção e garantindo que tudo mude junto quando precisar.
Como funciona cada camada
| Nível | Nomeado por | Exemplo | Muda com tema? |
|---|---|---|---|
| Global (BrandBook) | O que É | --roxo-institucional |
Não |
| Por Intenção | O que FAZ | --cor-fundo-primario |
Sim (muda no modo claro/escuro) |
| De Componente | ONDE é usado | --botao-fundo-padrao |
Sim (via intenção) |
Cores
A paleta oficial da Freelaw (BrandBook Dez/2025). Todas as cores permitidas no produto, com regras de quando e como usar cada uma.
Cores Principais
As 3 cores que formam a identidade. Usadas em 90% da interface.
Cores de Apoio
Dão profundidade e contraste em momentos específicos.
Combinações Aprovadas
As únicas combinações fundo + texto permitidas.
Cores na Prática
Como a paleta se aplica nos componentes reais do produto.
Ativo: Lilás 20% + Off-White
Inativo: Off-White 60%
| Escritório | Plano | MRR | Status |
|---|---|---|---|
| Resende & Associados | Premium | R$ 2.400 | Ativo |
| Silva Advocacia | Essencial | R$ 890 | Em risco |
Regras de Uso
As 6 cores do BrandBook são as únicas cores padrão do produto. Variações (tints, shades, transparências) existem no sistema de tokens, mas são reservadas para casos muito específicos e bem definidos — estados de interação, sobreposições, disabled — e nunca devem ser usadas como cores de conteúdo ou identidade.
Variações ad-hoc criam inconsistência visual, dificultam temas (dark mode, alto contraste) e tornam o DS imprevisível. Se uma variação é necessária, ela deve ser formalizada como token antes de ser usada.
Cores Semânticas
Derivadas da paleta base, usadas para comunicar estado e intenção. Não estão no BrandBook, mas são obrigatórias no produto. Use-as apenas para estado real (erro, aviso, sucesso) — nunca para decoração sem significado. Novas cores semânticas devem ser formalizadas como token antes de usar.
Tipografia
Fraunces para títulos, Public Sans para corpo. Duas fontes, regras claras, zero improvisação.
Nossas Fontes
Hierarquia Tipográfica
Cada nível tem fonte, peso e tamanho definidos.
Painel de Gestão
Visão geral das métricas de março.
Métricas Principais
Atividade Recente
3 novos escritórios hoje. Premium teve 2 upgrades no período.
Confirmar exclusão
Tem certeza que deseja excluir Resende & Associados? Esta ação não pode ser desfeita.
Nenhum relatório
Ainda não há relatórios para este período. Crie o primeiro.
Nunca fazer
Hierarquia de Informação na Tela
Para advogados que valorizam controle e previsibilidade, a ordem das informações na tela não é aleatória. Siga sempre esta prioridade.
Espaçamento
A escala de distâncias que mantém tudo alinhado e proporcional. Base de 4px — todo espaçamento é múltiplo de 4.
Por que 4px?
A base 4 é o padrão da indústria (Google Material, Apple HIG, Linear). Funciona bem em qualquer tela porque 4 é divisível por 2 (retina) e cria uma grade visual natural e previsível.
Escala Visual
Cada bloco roxo representa o tamanho do espaçamento. Use esta referência para escolher a distância certa.
Guia Rápido
Se você não sabe qual espaçamento usar, consulte esta tabela.
| Preciso de... | Tamanho | Variável | Exemplo |
|---|---|---|---|
| Gap ícone ↔ texto | 4px | --espaco-1 | Dentro de um botão, badge |
| Padding de badge/tag | 8px | --espaco-2 | Padding vertical de badges |
| Gap entre campos | 12px | --espaco-3 | Entre label e input |
| Padding de card | 16px | --espaco-4 | Dentro de cards, modais |
| Gap entre cards | 24px | --espaco-6 | Grade de indicadores, lista de cartões |
| Padding da página | 32px | --espaco-8 | Margem lateral do conteúdo |
| Entre seções | 48px | --espaco-12 | Entre "Métricas" e "Tabela" |
| Entre blocos independentes | 64-96px | --espaco-16/24 | Topo da página, áreas principais |
Receita Mensal
Acompanhe a evolução do MRR.
Métricas Principais
Atividade Recente
3 novos escritórios cadastrados hoje.
Regras de Uso
var(--espaco-4)margin: 17pxSombras & Cantos
Profundidade e arredondamento. As sombras criam hierarquia visual (o que está "acima" do quê). O radius define a personalidade dos cantos.
Níveis de Elevação
Cada nível representa uma camada visual. Quanto mais elevado, mais destaque e mais sombra. Usamos apenas 5 níveis — nunca invente sombras.
Valores Técnicos
| Nível | Valor CSS | Quando usar |
|---|---|---|
| 0 — Plano | none | Fundo de página, áreas sem destaque |
| 1 — Sutil | 0 1px 3px rgba(44,44,52,0.06), 0 1px 2px rgba(44,44,52,0.04) |
Cards em repouso, inputs, linhas de tabela |
| 2 — Elevado | 0 4px 12px rgba(44,44,52,0.08), 0 2px 4px rgba(44,44,52,0.04) |
Cartão ao passar o mouse, listas suspensas, dicas, popovers |
| 3 — Flutuante | 0 10px 30px rgba(44,44,52,0.10), 0 4px 8px rgba(44,44,52,0.05) |
Modais, painéis laterais (sheets), menus |
| 4 — Destaque | 0 20px 60px rgba(44,44,52,0.15), 0 8px 16px rgba(44,44,52,0.06) |
Diálogos de confirmação, onboarding |
Arredondamento de Cantos
Os produtos Freelaw usam arredondamento sutil (preset Lyra: base 8px em cards e componentes). Isso transmite seriedade e profissionalismo — adequado para o contexto jurídico.
Guia Rápido
| Componente | Arredondamento | Sombra |
|---|---|---|
| Etiqueta, tag | 4px (sm) | Nível 0 |
| Botão | 8px (md) | Nível 0 |
| Campo, seletor | 8px (md) | Nível 0-1 |
| Cartão de Indicador | 8px (md) | Nível 1 |
| Cartão de conteúdo | 12px (lg) | Nível 1 |
| Lista suspensa, popover | 8px (md) | Nível 2 |
| Notificação rápida | 8px (md) | Nível 2 |
| Modal, dialog | 12-16px (lg-xl) | Nível 3-4 |
| Painel lateral (sheet) | 16px (xl) | Nível 3 |
| Avatar, status dot | Full (círculo) | Nível 0 |
Confirmar ação
Deseja prosseguir com esta operação?
Regras de Uso
Movimento
Animações e transições. Usadas com moderação para dar feedback ao usuário, nunca para decoração. Nosso público (advogados) valoriza eficiência — tudo que se mexe deve ter razão de existir.
Princípio
Animações na Freelaw são funcionais, não decorativas. Elas existem para três fins: confirmar uma ação, guiar o olhar ou suavizar uma mudança de estado. Se remover a animação e nada se perde em clareza, ela não deveria existir.
Durações
Quanto tempo cada tipo de animação deve durar. A regra geral: quanto menor o elemento, mais rápida a transição.
Curvas de Aceleração
Como o movimento se comporta do início ao fim. A curva certa faz a animação parecer natural.
Guia Rápido
Se não sabe qual animação usar, consulte esta tabela.
| Ação | Duração | Curva | Tipo de movimento |
|---|---|---|---|
| Passar o mouse em botão/link | 150ms | Ease-in-out | Mudança de cor/sombra |
| Passar o mouse em cartão (elevação) | 200ms | Ease-out | translateY(-2px) + sombra |
| Abrir tooltip/popover | 200ms | Ease-out | Fade in + scale de 95%→100% |
| Abrir dropdown | 200ms | Ease-out | Fade in + slide down |
| Notificação aparecendo | 300ms | Ease-out | Slide in from right |
| Abrir modal | 300ms | Ease-out | Fade in + scale de 95%→100% |
| Fechar modal | 200ms | Ease-in | Fade out + scale de 100%→95% |
| Painel lateral abrindo | 300ms | Ease-out | Slide in from right |
| Interruptor liga/desliga | 150ms | Ease-in-out | Slide + cor |
| Carregamento com blocos | 1500ms | Linear | Shimmer (loop infinito) |
| Barra de progresso | Variável | Linear | Preenchimento contínuo |
Acessibilidade
Nem todo mundo quer ou pode ver animações. Respeitar a preferência do usuário é obrigatório.
@media (prefers-reduced-motion: reduce).
Regras de Uso
Formatos de Dados
Como exibir datas, valores, CPF/CNPJ, telefone e outros dados formatados. Consistência obrigatória.
| Tipo | Formato correto | Nunca |
|---|---|---|
| Data | 15/03/2025 | Mar 15, 2025 / 2025-03-15 |
| Data e hora | 15/03/2025 às 14:30 | 15/03/2025 14:30:00 |
| Valor | R$ 1.500,00 | R500 / 1500.00 |
| CPF | 123.456.789-00 | 12345678900 |
| CNPJ | 12.345.678/0001-90 | 12345678000190 |
| Telefone | (11) 99999-9999 | 11999999999 / +5511999999999 |
| Valor abreviado (KPI) | R$ 2k / R$ 1,2M | R$ 2000 / R$2K / R$ 2.000k |
| Faixa de valores | R$ 2k – R$ 8k (en dash) | R$ 2k - R$ 8k (hífen) |
Logotipo
Regras de uso do logotipo da Freelaw, extraídas diretamente do BrandBook (Dezembro 2025).
O símbolo remete à inteligência modular e sistemas interligados. O lettering usa tipografia contemporânea e precisa. O conjunto transmite profissionalismo, maturidade e confiança.
Assinaturas da Marca
3 configurações: Horizontal (preferencial), Vertical e Ícone. O ícone pode ser usado isolado, mas o logotipo tipográfico nunca deve ser usado sem o ícone.
Variação no Fundo Roxo
Quando aplicada sobre o Roxo Institucional, a marca deve ser alterada para a versão em Off-White (#F6F5F3).
Uso em Fundos Coloridos
Sobre fundos que não sejam Off-White ou Roxo Institucional, usar versões monocromáticas para garantir contraste e legibilidade.
Área de Proteção
Manter espaço ao redor da marca, livre de outros elementos. A margem de segurança é obtida pela altura do ícone.
Tamanho Mínimo
Digital: mínimo 150px de largura. Impresso: mínimo 2,5cm de largura. Nunca reduzir abaixo disso.
Como NÃO Usar a Marca
Nunca rotacionar, distorcer, alterar tipografia, alterar cor ou adicionar sombra ao logotipo.
Iconografia
Os ícones da Freelaw seguem o princípio das ilustrações: síntese, clareza e intenção. Traço fino, formas simples, ritmo e equilíbrio — funcionam como extensões do sistema visual com consistência.
Ícones no Produto
Nos produtos Freelaw, usamos a biblioteca Lucide — outline, stroke-width 1.5, formas geométricas simples. Use sempre a cor semântica correspondente ao contexto via currentColor ou variável CSS.
16px inline (texto corrido)20px em botões24px standalone32px+ destaque / herocurrentColor CSS ou variável semântica como var(--color-primary).Nunca hardcode hex (
#330066) diretamente no SVG.aria-hidden="true" + texto visível adjacente.Ícone funcional (sem texto):
aria-label="Descrição" no elemento pai.Top 58 Componentes
Os 58 componentes dos produtos Freelaw. Para cada um: o que é, quando usar, quando NÃO usar, variantes disponíveis e exemplo visual.
@freelaw/ui · Button
✓ Ação secundária: Contorno/Fantasma
✓ Excluir/cancelar: Destrutivo
✓ Aprovar/confirmar: Sucesso
✗ Botão sem texto (exceto só ícone)
✗ Dourado para ações comuns
@freelaw/ui · Table
| Nome | Plano | MRR | Status | |
|---|---|---|---|---|
| Resende & Associados | Premium | R$ 2.400 | Ativo | ⋮ |
| Costa Jurídico | Essencial | R$ 1.200 | Em risco | ⋮ |
✓ Menu de ações por linha (⋮)
✓ Sempre com paginação
✗ Mais de 8 colunas visíveis
✗ Tabela sem estado vazio
@freelaw/ui · Card
✓ Sobe ao passar o mouse (elevação)
✗ Cartão sem título ou contexto
@freelaw/ui · StatsCard
✓ Tendência com cor semântica (sucesso/erro)
✗ Valores sem unidade
@freelaw/ui · Input
✓ Texto-exemplo como dica, não instrução
✓ Erro com mensagem clara e humana
✗ Texto-exemplo como substituto do rótulo
✗ Mensagem de erro técnica ("campo obrigatório")
@freelaw/ui · Select
✓ Mais de 7 → Seletor com Busca
✓ Sempre com rótulo
✗ Texto padrão "Selecione..." sem sentido
✗ Múltiplas escolhas (use Caixa de Marcação)
@freelaw/ui · Badge · StatusBadge
✓ Texto curto (1-2 palavras)
✓ Etiqueta de Status para status, Etiqueta genérica para categorias
✗ Etiqueta como botão (use Botão)
✗ Inventar cores fora da paleta
@freelaw/ui · Dialog
✓ Formulários de até 5 campos
✓ Sempre com título e descrição
✗ Janela dentro de janela
✗ Informação que não exige ação
@freelaw/ui/patterns/feedback · EmptyState
✓ Ícone + título + descrição + botão
✗ NUNCA: mensagem genérica "Sem dados"
@freelaw/ui · LoadingState
✓ Bolinha girando para ações (salvar, enviar)
✗ Carregamento sem fim (máximo 10s)
@freelaw/ui · Tabs
✓ Nomes curtos (1-2 palavras)
✗ Conteúdo que exige tela própria
@freelaw/ui · DropdownMenu
✓ Ação de exclusão sempre por último, em vermelho
✗ Menu dentro de menu
@freelaw/ui · Sheet
✓ Edição rápida
✓ Filtros avançados
✗ Painel dentro de painel
@freelaw/ui/patterns/layout · PageHeaderPattern
✓ Título + descrição + breadcrumb + ações
✗ Título sem breadcrumb
@freelaw/ui · SmartCombobox
✓ Buscar em listas grandes
✗ Seleção múltipla
@freelaw/ui · Tooltip
✓ Mostrar texto completo que foi cortado
✗ Texto longo (mais de 1 frase)
@freelaw/ui · Switch
✓ Ativar/desativar funcionalidades
✗ Mais de 2 estados (use grupo de opções)
@freelaw/ui · Breadcrumb
✓ Último item é texto (sem link)
✗ Trilha sem Cabeçalho de Página
@freelaw/ui · useToast
✓ Tom: claro e direto, sem exagero
✗ Mensagens técnicas (códigos de erro)
@freelaw/ui · DashboardLayout · SidebarNav
Texto: Off-White
Texto: Roxo Institucional
Texto: Roxo Institucional
| Produto | Fundo do Menu | Texto / Ícones | Item Ativo | Significado |
|---|---|---|---|---|
| Contratante | Roxo #330066 | Off-White #F6F5F3 | Lilás 20% + Off-White | Sabedoria, autoridade |
| Prestador | Cinza #CCCCCC | Roxo #330066 | Roxo 15% + Roxo | Sobriedade, precisão |
| Backstage | Off-White #F6F5F3 | Roxo #330066 | Roxo 8% + Roxo | Clareza, equilíbrio |
✓ Máximo 2 níveis de profundidade
✓ Ícone + texto em cada item
✗ Mais de 10 itens no nível raiz
✗ Itens sem ícone
@freelaw/ui · ButtonGroup
✓ Ações fortemente relacionadas (ex.: exportar)
✓ Máximo 4–5 itens
✗ Misturar com botões soltos na mesma linha
✗ Mais de 6 itens (use tabs ou select)
@freelaw/ui · InputGroup
✓ Protocolo de URL
✓ Domínio de e-mail fixo
✗ Addon com mais de 6 caracteres
✗ Substituir o rótulo pelo addon
@freelaw/ui · NativeSelect
NativeSelect — filtros simples, até 10 opções, mobile first
Select (Radix) — opções estilizadas, ícones, grupos
SmartCombobox — busca, multi-seleção, 10+ opções
✓ Mobile: picker nativo do SO
✓ Máxima acessibilidade (screen readers)
✗ Multi-seleção
✗ Mais de 20 opções (use SmartCombobox)
@freelaw/ui · Kbd
✓ Command palette (tooltips e hints)
✓ Tutoriais e onboarding
✗ Em textos longos sem contexto
✗ Como substituto de botão
@freelaw/ui · NavigationMenu
✓ Apps com seções distintas no topo
✓ Dropdown para subcategorias
✗ Mais de 6 itens no nível raiz
✗ Mobile sem fallback para hamburger
@freelaw/ui · AspectRatio
aspect-ratio nativo (sem JavaScript).✓ Embeds de vídeo responsive
✓ Avatares em grids uniformes
✗ Formulários ou listas
✗ Quando o conteúdo define a altura
@freelaw/ui · Chart · ChartGrid · ChartTooltip
CHART_SERIES_ORDER[i] para ciclar automaticamente.
ChartGrid + ChartTooltip✓ Múltiplas séries: use
CHART_SERIES_ORDER✓ Inclua
ChartLegend em 2+ séries✗ Cores fora da paleta DS
✗ Mais de 6 séries simultâneas
@freelaw/ui · DatePicker · DateRangePicker
Calendar + Popover do DS. Locale pt-BR por padrão. Também disponível em versão range (de → até).DatePicker — data única |
DateRangePicker — intervalo (de/até, 2 meses visíveis)
✓ Filtros de período em dashboards
✓ Locale pt-BR automático (dd/MM/yyyy)
✗ Input type="date" nativo (sem estilo DS)
✗ Mais de 3 DatePickers na mesma tela
@freelaw/ui · Menubar · MenubarMenu…
MenubarShortcut), checkboxes, radio groups e submenus.
✓ IDEs e ferramentas avançadas
✓ Storybook e ambientes de design
✗ Dashboards simples (use DropdownMenu)
✗ Substituir a Sidebar principal
@freelaw/ui · Accordion✓ Seções longas de configuração
✓ Detalhes opcionais de um registro
✗ Mais de 8 itens (preferir busca)
✗ Aninhar acordeões
@freelaw/ui · Alert✓ Avisos permanentes visíveis na página
✓ Resumo de erros de formulário
✗ Substituir estado vazio
✗ Pilhas de alertas (max 2 por página)
@freelaw/ui · AlertDialog✓ Ações destrutivas com consequências
✓ Confirmação de encerramento de contrato
✗ Confirmações simples (use Dialog)
✗ Formulários (use Dialog ou Sheet)
@freelaw/ui · Avatar✓ Grupos de colaboradores
✓ Perfil em cabeçalhos e tabelas
✗ Imagens sem alt text
✗ Tamanhos menores que 24px
@freelaw/ui · Carousel✓ Passos de onboarding
✓ Cards de destaque em tela cheia
✗ Mais de 8 itens sem paginação
✗ Conteúdo crítico (usuários ignoram)
@freelaw/ui · Checkbox✓ Termos e consentimentos
✓ Filtros de tabela multi-seleção
✗ Ação imediata ao clicar (use Switch)
✗ Sem label associada
@freelaw/ui · Collapsible✓ Detalhes opcionais em formulários
✓ Logs e histórico expandível
✗ Substituir Accordion (sem múltiplos itens)
✗ Conteúdo que o usuário sempre precisa
@freelaw/ui · Command✓ Navegação rápida entre entidades
✓ Ações frequentes sem contexto de página
✗ Substituir navegação lateral
✗ Resultados sem loading state
@freelaw/ui · ContextMenu✓ Power users que conhecem o atalho
✓ Alternativa compacta ao dropdown
✗ Ação única (use botão direto)
✗ Mobile (sem botão direito)
@freelaw/ui · DataTable✓ Seleção em massa + bulk actions
✓ Paginação server-side integrada
✗ Menos de 5 linhas
✗ Sem tipos de coluna definidos com TanStack
@freelaw/ui · Drawer✓ Formulários em telas pequenas
✓ Confirmações de ação em mobile
✗ Conteúdo muito longo (precisa scrollar)
✗ Fluxos com múltiplos passos
@freelaw/ui · FieldWrapper✓ Label + input + mensagem de erro juntos
✓ Campos obrigatórios marcados com *
✗ Label genérica "Campo 1"
✗ Esconder o estado de erro
@freelaw/ui · HoverCard✓ Informação extra sem abrir nova página
✓ Metadados de @menções
✗ Conteúdo muito longo
✗ Mobile (sem hover)
@freelaw/ui · InputOTP✓ Códigos de convite e ativação
✓ PIN de confirmação de operação
✗ Códigos alfanuméricos maiores que 8
✗ Campos editáveis sem auto-avançar
@freelaw/ui · Label✓ Usar htmlFor correspondendo ao id
✓ Texto claro e descritivo
✗ Input sem label associada
✗ Labels genéricas como "Campo"
@freelaw/ui · Pagination✓ Paginação server-side
✓ Mostrar total de registros junto
✗ Infinito scroll em contextos legais
✗ Sem indicar a página atual
@freelaw/ui · Popover✓ Formulários pequenos ancorados
✓ Seleção de cor ou data inline
✗ Ações destrutivas (use AlertDialog)
✗ Mais de 3 campos no formulário
@freelaw/ui · Progress✓ Upload e processamento de arquivos
✓ Conclusão de perfil
✗ Sem label do que está progredindo
✗ Sem valor percentual associado
@freelaw/ui · RadioGroup✓ Opções mutuamente exclusivas
✓ Quando as opções precisam ser visíveis
✗ Múltipla seleção (use Checkbox)
✗ Ligado/desligado (use Switch)
@freelaw/ui · Resizable✓ Painéis de código/preview
✓ Usuários avançados com workspaces
✗ Mobile (use Sheet ou tabs)
✗ Proporções fixas que nunca mudam
@freelaw/ui · ScrollArea✓ Logs e histórico de atividades
✓ Scrollbar customizada e consistente
✗ Tabelas (use overflow diretamente)
✗ Quando o scroll nativo resolve
@freelaw/ui · Separator✓ Divisórias verticais em sidebars
✓ Separador "ou" em login
✗ Substituir espaçamento (use margin/gap)
✗ Múltiplos separadores seguidos
@freelaw/ui · Skeleton✓ Replicar a forma real do conteúdo
✓ Listas e cards com estrutura conhecida
✗ Skeleton de formato diferente do conteúdo
✗ Manter skeleton após erro (mostre ErrorState)
@freelaw/ui · Slider✓ Volume, zoom, intensidade
✓ Quando o valor exato é menos importante que a faixa
✗ Opções discretas (use RadioGroup)
✗ Mais de 2 handles
@freelaw/ui · Spinner✓ Botão em estado de loading
✓ Operações rápidas (<3s)
✗ Operações longas sem progresso (use Progress)
✗ Sobreposto sem fundo escurecido
@freelaw/ui · Textarea✓ Notas, descrições, comentários
✓ Permitir resize vertical
✗ Conteúdo rico com formatação (use editor)
✗ Desabilitar resize sem motivo
@freelaw/ui · Toggle✓ Modo ativo/inativo de uma opção
✓ Filtros visuais simples
✗ Mais de 5 toggles soltos (use ToggleGroup)
✗ Ação destrutiva
@freelaw/ui · ToggleGroup✓ Filtros com seleção única visível
✓ Alinhamento e formatação agrupados
✗ Misturar com Toggle solto
✗ Opções longas (use RadioGroup)
@freelaw/ui · Typographycomponente.tsx:42
✓ Fraunces para headings, Public Sans para corpo
✓ Hierarquia clara com no máximo 3 tamanhos por página
✗ Mais de 2 famílias tipográficas
✗ Body text menor que 12px
Blocos Prontos
Padrões compostos pré-construídos que combinam múltiplos componentes DS num UI realista. Copie, adapte os tokens e use — sem partir do zero.
Blocos Prontos são composições pré-montadas dos componentes Top 58. Use-os como ponto de partida — extraia componentes individuais conforme necessário ou adapte o bloco completo aos tokens do DS.
lint:colors para garantir conformidade.Estendendo o DS Guia
Quando o componente que você precisa não existe em @freelaw/ui, siga esta ordem antes de criar do zero.
npx shadcn@latest addpackages/ui com o novo componente. Ele deve usar tokens DS e ter Storybook.class-variance-authority — o ecossistema foi pensado junto. Não é uma coleção de peças soltas.--color-primary, --radius, --font-sans) antes de entrar em produção. O hook de lint lint:colors bloqueia cores hardcoded no commit.
Modelos de Tela
Os 4 modelos de página que cobrem 95% das telas dos produtos Freelaw. Toda nova tela deve partir de um destes templates — nunca comece do zero.
1. Painel de Gestão
Tela com indicadores no topo, gráficos no meio e tabela de detalhes embaixo. Usada em: Financeiro, Vendas, Suporte, RH.
| Escritório | Plano | MRR | Status |
|---|---|---|---|
| Resende & Assoc. | Premium | R$ 2.400 | Ativo |
| Costa Jurídico | Essencial | R$ 1.200 | Em risco |
✓ Gráfico ocupa largura total
✓ Tabela com ordenação e paginação
✓ Botão de exportar no cabeçalho
✗ Gráfico sem título
✗ Tabela sem estado vazio
✗ Misturar estilos de gráfico na mesma tela
2. Listagem
Tela de lista com busca, filtros e tabela. A mais comum nos produtos Freelaw. Usada em: Escritórios, Clientes, Prestadores, Chamados, Negócios.
| Nome | Plano | MRR | Status | |
|---|---|---|---|---|
| Resende & Associados | Premium | R$ 2.400 | Ativo | ⋮ |
| Silva Advocacia | Essencial | R$ 890 | Em risco | ⋮ |
| Mendes & Peixoto | Starter | R$ 390 | Ativo | ⋮ |
✓ Filtros como chips ao lado da busca
✓ Contagem total no subtítulo
✓ Ações por linha nos três pontinhos (⋮)
✗ Lista sem busca
✗ Lista sem paginação (não carregar tudo)
✗ Botão "Novo" longe do título
2.1 Padrão de Filtros
Como filtros funcionam em qualquer listagem dos produtos Freelaw. O fluxo completo: busca + filtros rápidos + filtros avançados + chips aplicados + limpar tudo.
✓ Botão "Filtros" com ícone de funil
✓ Contador no botão quando filtros estão ativos
✓ Chips abaixo da busca mostrando filtros aplicados
✓ Cada chip tem ✕ para remover individualmente
✓ "Limpar tudo" sempre disponível
✓ Resultado vazio orienta a limpar filtros
✗ Aplicar filtro sem feedback visual
✗ Filtro aplicado sem chip visível
✗ Sem opção de limpar filtros
✗ Resultado vazio genérico ("Sem dados")
✗ Busca e filtros misturados sem separação
✗ Mais de 5 filtros no painel (use filtros avançados no painel lateral)
3. Formulário
Tela para criar ou editar um item. Campos agrupados por assunto, com ações (salvar/cancelar) fixas no rodapé. Usada em: cadastro de escritório, edição de cliente, configurações.
✓ Máximo 2 campos por linha
✓ Botão principal à direita ("Salvar")
✓ Cancelar sempre ao lado do salvar
✗ Botões de ação no topo
✗ Formulário sem validação ao vivo
✗ Campo "obrigatório" sem asterisco
4. Configurações
Tela com menu lateral de seções e conteúdo à direita. Cada seção é um grupo de opções. Usada em: configurações do sistema, perfil, permissões.
✓ Interruptores para efeito imediato
✓ "Zona de perigo" sempre por último, em destaque
✗ Misturar interruptores e botão salvar
✗ Ação destrutiva sem confirmação
Estados Obrigatórios
Toda tela dos produtos Freelaw deve tratar 3 estados além do normal. Se algum estiver faltando, a tela não está pronta.
Regras de Escrita
Como escrever cada texto que aparece na interface. Do BrandBook: a Freelaw fala de forma Clara, Direta, Segura, Profissional e Humana. Aqui traduzimos isso para cada elemento da tela.
Tom de Voz na Interface
A Freelaw fala com advogados experientes que valorizam controle e reputação. O tom é firme, respeitoso e objetivo — sem exageros, sem promessas vazias, sem informalidade excessiva.
Como escrever cada elemento
✓ "Escritórios"
✓ "Configurações"
✗ "Seus escritórios incríveis"
✗ "Configurações do sistema v2.3"
✓ "387 escritórios cadastrados"
✗ "Página para gerenciar escritórios do sistema"
✓ "Exportar relatório"
✓ "Confirmar exclusão"
✓ "Cancelar"
✗ "OK"
✗ "Enviar" (enviar o quê?)
✗ "Sim" / "Não" (sem contexto)
✓ "E-mail do responsável"
✓ "Data de adesão"
✗ "Insira o nome" (é instrução, não rótulo)
✗ "name" (em inglês)
✓ "00.000.000/0000-00"
✓ "Buscar escritório..."
✗ "Nome" (repete o rótulo)
✗ "Enter name here"
✓ "E-mail inválido — verifique o formato"
✓ "Campo obrigatório"
✗ "Validation failed: field required"
✗ "Erro 422"
✗ "Preencha corretamente" (correto como?)
✓ Curto: 1 palavra quando possível
✗ "Status do Cliente no Sistema"
✓ "Crie o primeiro para acompanhar os resultados."
✗ "Não há registros no banco de dados"
✗ "Empty"
Mensagens Padrão
Modelos prontos para cada tipo de notificação. Copie e adapte — não invente do zero.
Estrutura: "[Coisa] [ação] com segurança/sucesso"
Estrutura: "Não foi possível [ação]. [Orientação]"
Estrutura: "[Situação] — [o que fazer]"
Estrutura: "Tem certeza que deseja [ação]? [Consequência]"
Templates de Mensagem Rápida
Copie e adapte — não invente do zero. Textos prontos para os casos mais frequentes.
Regras Gerais de Escrita
Glossário de Termos
Como chamar cada coisa no produto. Se a palavra não está aqui, não use — pergunte antes.
| Usamos | Nunca usamos | Contexto |
|---|---|---|
| Escritório | Firma, banca, organização | O cliente da Freelaw |
| Prestador | Freelancer, correspondente, terceiro | Advogado da rede Freelaw |
| Demanda | Serviço, tarefa, job, ticket | Trabalho delegado ao prestador |
| Processo | Case, caso, ação | Processo judicial acompanhado |
| Petição | Documento, peça, arquivo | Documento jurídico produzido |
| Prazo | Deadline, SLA, due date | Data limite para ação |
| Publicação | Intimação, notificação do diário | Publicação no Diário de Justiça |
| Responsável | Owner, assignee, dono | Pessoa encarregada de algo |
| Painel de gestão | Painel de gestão, tela inicial | Tela com indicadores e métricas |
| Cadastrar | Registrar, criar, add, inputar | Adicionar novo item ao sistema |
| Salvar | Gravar, enviar | Guardar alterações feitas |
| Excluir | Deletar, apagar, remover, delete | Remover permanentemente |
| Buscar | Pesquisar, search, procurar | Encontrar item por texto |
Acessibilidade
Diretrizes WCAG 2.1 aplicadas ao Backstage. Todo componente deve atingir nível AA mínimo.
Princípios obrigatórios
- Contraste mínimo 4.5:1 para texto normal, 3:1 para texto grande
- Todos os elementos interativos acessíveis via teclado (Tab, Enter, Space, Esc)
- Labels explícitos em todos os inputs — nunca apenas placeholder
- aria-label em ícones sem texto visível
- Focus ring visível — nunca
outline: nonesem substituto - Mensagens de erro anunciadas por screen reader (role="alert" ou aria-live)
- Imagens decorativas com alt="" vazio; imagens informativas com alt descritivo
Checklist de Acessibilidade
12 itens que todo PR com UI deve verificar. Estado salvo automaticamente.
Tabela de Contraste
Pares de cor do DS com ratio calculado e badge de conformidade WCAG.
| Par | Fundo | Texto | Ratio | WCAG |
|---|---|---|---|---|
| Aa | #330066 | #F6F5F3 | 13.8:1 | AAA |
| Aa | #F6F5F3 | #330066 | 13.8:1 | AAA |
| Aa | #2C2C34 | #F6F5F3 | 13.1:1 | AAA |
| Aa | #330066 | #A994E6 | 5.1:1 | AA |
| Aa | #F6F5F3 | #2C2C34 | 13.1:1 | AAA |
| Aa | #F6F5F3 | #CCCCCC (placeholder) | 1.6:1 | FAIL só decorativo |
Padrões de Teclado
Comportamento esperado por componente para cada tecla.
| Tecla | Modal / Dialog | Dropdown / Select | Accordion |
|---|---|---|---|
| Tab | Navega entre ações internas (foco preso) | Move para próximo item se aberto | Move para próximo acordeão |
| Shift+Tab | Navega para trás (foco preso) | Move para item anterior | Move para acordeão anterior |
| Enter | Confirma ação focada | Abre / seleciona item focado | Expande / colapsa |
| Space | Confirma botão focado | Abre dropdown fechado | Expande / colapsa |
| Esc | Fecha e devolve foco ao trigger | Fecha sem selecionar | Colapsa se expandido |
| ↑ ↓ | Move foco entre ações do modal | Navega opções sem fechar | Navega entre itens |
Responsividade
O Backstage é primariamente desktop. Mobile é suporte secundário com breakpoints definidos.
Breakpoints
| Nome | Valor | Uso |
|---|---|---|
| sm | 640px | Mobile landscape |
| md | 768px | Tablet |
| lg | 1024px | Desktop base |
| xl | 1280px+ | Desktop wide |
Regras por Contexto
Como cada elemento do layout se transforma em diferentes tamanhos de tela.
- < 768px: oculta, abre com botão hamburger
- 768–1023px: colapsa para ícones (56px)
- ≥ 1024px: expande completa (240px)
- Overlay escuro ao abrir em mobile
- < 640px: viram cards empilhados
- Cada linha vira um card com label + valor
- Ações ficam no rodapé do card
- Colunas menos prioritárias são ocultadas primeiro
- < 640px: full-screen (100vw × 100dvh)
- Sem border-radius em mobile
- Bottom sheet para confirmações simples
- Header fixo com botão fechar sempre visível
- Colunas lado-a-lado → coluna única em mobile
- Touch target mínimo: 44px de altura
- Botões: full-width em mobile
- Teclado virtual não deve cobrir o campo ativo
Checklist de Responsividade
8 itens que todo PR com UI deve verificar antes do merge.
Gráficos & Dados
Regras para visualização de dados no Backstage. Consistência visual antes de criatividade — sempre usar chart-colors.ts, nunca inventar cores.
Paleta oficial de gráficos
5 papéis semânticos derivados diretamente do BrandBook. Cada cor carrega um significado fixo — não trocá-los entre si.
Use apenas para indicar resultado positivo.
Use apenas para indicar resultado negativo.
Exemplo — Gráfico de barras
Série única usa apenas a cor Principal. Múltiplas séries seguem a ordem: Principal → Secundário → Terciário.
Regras de uso
| Cor | Usar quando | Evitar quando |
|---|---|---|
| Principal var(--roxo) |
Série primária, métrica principal, dado mais importante do gráfico | Combinado com Secundário sem distinguir hierarquia |
| Secundário var(--lilas) |
Segunda série em gráfico comparativo, período anterior, categoria de apoio | Único dado no gráfico (usar Principal) |
| Terciário var(--dourado) |
Terceira série, meta definida, linha de referência, benchmark | Dado negativo ou de alerta (confunde com Alerta semântico) |
| Positivo var(--sucesso) Semântica — não é cor do BrandBook |
Resultado positivo, crescimento, aprovação, meta atingida | Dado neutro ou ambíguo — verde sempre comunica "bom" |
| Negativo var(--erro) Semântica — não é cor do BrandBook |
Queda, rejeição, dado crítico, falha, churn | Dado neutro ou abaixo de meta sem ser crítico (usar Terciário) |
Correto e Errado
chart-colors.ts semprevar(--sucesso) para crescimentovar(--erro) para queda/falhavar(--roxo)#16A34A, #DC2626)#7C3AED ou #A78BFA — não estão no BrandBookCatálogo de Gráficos — shadcn/ui
Componentes prontos via npx shadcn add chart (base) + variante. Todos usam Recharts internamente e aceitam nossos tokens DS via CSS variables.
npx shadcn add chart — depois adicione cada variante. Substitua as cores geradas por chart-colors.ts antes de usar em produção.npx shadcn add chart-areaCopiado!npx shadcn add chart-barCopiado!npx shadcn add chart-lineCopiado!npx shadcn add chart-pieCopiado!npx shadcn add chart-radarCopiado!npx shadcn add chart-radialCopiado!Freelaw v1.0
Identidade Visual, Fundações, Componentes, Padrões de Página, Conteúdo & Voz, Guia para Desenvolvedores e BrandBook — tudo documentado em um único lugar.
Plano Design System Freelaw v1.0
Inspirado em: Linear, Polaris, Carbon, Spectrum, Geist
A tecnologia que entende o Direito.