Foundations · Density

Densidade

Default = comfortable. Compact e spacious ficam disponíveis como preferência do usuário em Settings → Personal. Não é tweak de produto · é affordance de operador.

Decisão

Densidade é preferência pessoal do operador, persistida por usuário · não configuração do workspace ou do produto.

Comfortable é o default porque é a aposta segura para uso prolongado · operador de plantão de 8h não aguenta compact, e novo membro precisa ler o produto sem zoom. Compact existe para quem tem monitor pequeno ou quer ver mais casos por viewport. Spacious para quem tem tela 4K ou usa o produto poucas vezes por dia.

Comparativo · mesmo dashboard, 3 densidades

Mesmo conteúdo · mesma estrutura · diferentes valores de spacing/typography. O delta de altura entre compact e spacious é ≈ 1.8×.

01 · compact
Compact
Casos abertos 3 · ahora
MENÇÕES 24H
1.247
CRÍTICOS
03
PLS-012Vazamento — APPcritical4m
PLS-014Operação Águahigh22m
PLS-018Regulação CVMattn1h
PLS-019Setor saúdeattn3h
PLS-020Mercado financeirohigh6h
Quando: monitor pequeno · operadores que querem 12+ casos por viewport · plantão técnico.
03 · spacious
Spacious
Casos abertos 3 · agora
MENÇÕES 24H
1.247
CRÍTICOS
03
PLS-012Vazamento — APPcritical4m
PLS-014Operação Águahigh22m
Quando: tela 4K · uso esporádico · gestor que entra "olhar dashboard" · acessibilidade (presbiopia, baixa visão).

Toggle no topo de qualquer página deste DS aplica densidade ao vivo — mesmo as preview tables. É o mesmo contrato CSS do produto.

Tokens · valores por densidade

Mesma variável CSS · valores diferentes por [data-density] no <html>. Componente nunca lê a densidade · usa o token.

Tokencompactcomfortable · defaultspaciousOnde
--density-pad-page24px36px48pxPadding interno do main
--density-pad-card12px18px22pxPadding interno de Card
--density-pad-row6px 10px10px 14px14px 18pxPadding em row de Table/List
--density-gap8px12px16pxGap em grid de cards
--density-h-control28px32px36pxAltura default de Button/Input
--density-h-topbar48px56px64pxAltura da topbar

Tipografia fica. Densidade altera spacing/heights, não font-size · evita "compact" virar zoom-out e perder hierarquia.

Configuração · Settings → Personal

Densidade da interface
Spacing e altura dos componentes. Não afeta tamanho do texto. Aplicado em todo o produto, sincronizado entre dispositivos.
Tabelas operacionais usam compact
Em listas longas (audit log, busca, mention feed), mantém compact mesmo se sua preferência global é comfortable ou spacious. Recomendado.
Aplicar a todos os meus workspaces
Sua preferência sincroniza entre todos os workspaces que você participa. Off = manter individual por workspace.

Override local · tabelas operacionais

Operador escolhe spacious globalmente · mas Audit Log e Search são tabelas de scan. Override local mantém densidade compact dentro dessas tabelas, sem mudar a preferência global.

Override local

Tabelas operacionais ignoram a preferência global por padrão

Audit Log · Search results · Mention feed · qualquer lista de scan denso. Operador pode desligar override em Settings · mas em 95% dos casos, compact em listas é o caminho certo independente da preferência global. Densidade não é dogma.

Como aplicar

<div data-density="compact">
  <AuditLogTable />
</div>

Persistência

OndeQuandoSync
localStorageImediato · em qualquer ação no toggleNão · só local · usado offline
Perfil do usuário (backend)Em background · debounce 500msSim · sincroniza entre dispositivos · entre workspaces se "Aplicar a todos" estiver on
Default para novo usuárioSempre comfortable · sem detecção automática (não tentamos adivinhar)
Default para novo workspaceHerda do usuário se já tem preferência · senão comfortable

A11y e motion

Mudança de densidade não é animada · evita flicker e mantém o foco do operador. Componentes leem o token; o re-render é instantâneo.

Hit target

Em compact, controle cai para 28×28px · ainda satisfaz contrato desktop denso. Para mobile ou hit targets primários, override força ≥ 44×44 mesmo em compact (ver 1.3).

Screen readers

Densidade é invisível para SR · não há semântica trocada. Operador com leitor de tela tem mesma experiência em qualquer modo.

Regras

Faça
  • Default comfortable em todo lugar. Compact e spacious só por escolha explícita.
  • Use tokens --density-* para padding/altura. Nunca hardcoded.
  • Em tabelas operacionais (audit, search, feed), aplique data-density="compact" local.
  • Mantenha font-size constante entre densidades. Densidade altera spacing · não tipo.
  • Persiste por usuário · sincroniza entre dispositivos.
Evite
  • Não exponha densidade como Tweak do produto. É affordance pessoal, não opção de produto.
  • Não detecte automático (tipo de dispositivo, resolução). Default sane > suposição.
  • Não anime a transição entre densidades. Re-render instantâneo é preferível.
  • Não use compact em CTAs primárias (44×44 mantém). Hit target ganha.
  • Não permita densidade por workspace forçada. Workspace pode sugerir, usuário escolhe.

Status da iniciativa · 4.5

DeliverableStatus
Default comfortable em todo o produto✓ entregue
Toggle em Settings → Personal · 3 opções✓ entregue
Persistência localStorage + sync com perfil✓ entregue
Tabelas operacionais com data-density="compact" local✓ entregue
Comparativo de Dashboard nas 3 densidades✓ entregue
Página Foundations · Density✓ entregue