@andespindola/crow-skills 0.40.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD-PARTY-NOTICES.md +28 -2
- package/catalog.json +4 -2
- package/crow_skills/__init__.py +1 -1
- package/crow_skills/broadcast.py +5 -2
- package/crow_skills/cli.py +1 -1
- package/package.json +1 -1
- package/release.json +164 -14
- package/skills/crow-design/NOTICE.md +26 -0
- package/skills/crow-design/SKILL.md +38 -9
- package/skills/crow-design/licenses/Apache-2.0.txt +191 -0
- package/skills/crow-design/licenses/Impeccable-NOTICE.md +11 -0
- package/skills/crow-design/licenses/design-system-MIT.txt +26 -0
- package/skills/crow-design/licenses/platform-design-MIT.txt +21 -0
- package/skills/crow-design/licenses/taste-skill-MIT.txt +21 -0
- package/skills/crow-design/references/aceite-e-pre-voo.md +267 -0
- package/skills/crow-design/references/adaptacao.md +152 -0
- package/skills/crow-design/references/anti-padroes.md +187 -0
- package/skills/crow-design/references/componentes-e-estados.md +312 -0
- package/skills/crow-design/references/contrato.md +2 -1
- package/skills/crow-design/references/cor.md +151 -0
- package/skills/crow-design/references/dados-e-densidade.md +194 -0
- package/skills/crow-design/references/direcao-estetica.md +209 -0
- package/skills/crow-design/references/documento-do-sistema.md +175 -0
- package/skills/crow-design/references/layout-e-espaco.md +134 -0
- package/skills/crow-design/references/leitura-do-brief.md +158 -0
- package/skills/crow-design/references/movimento.md +144 -0
- package/skills/crow-design/references/redesign-e-sistemas-existentes.md +91 -0
- package/skills/crow-design/references/registro-premium.md +154 -0
- package/skills/crow-design/references/sistema-de-tokens.md +264 -0
- package/skills/crow-design/references/superficie-e-profundidade.md +153 -0
- package/skills/crow-design/references/texto-e-conteudo.md +149 -0
- package/skills/crow-design/references/tipografia.md +139 -0
- package/skills/crow-design/scripts/validar_tokens.py +654 -0
- package/skills/crow-design/templates/tokens.exemplo.json +197 -0
- package/skills/crow-mcp-maker/SKILL.md +6 -6
- package/skills/crow-mcp-maker/references/full-runtime.md +88 -0
- package/skills/crow-mcp-maker/references/security-and-cost.md +1 -1
- package/skills/crow-mcp-maker/scripts/engines.py +732 -0
- package/skills/crow-skill-maker/SKILL.md +6 -5
- package/skills/crow-skill-maker/references/full-runtime.md +108 -0
- package/skills/crow-skill-maker/references/security-and-cost.md +2 -2
- package/skills/crow-skill-maker/scripts/creator.py +839 -0
- package/skills/crow-skill-maker/scripts/engines.py +732 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
<!-- Derivado de Impeccable (Apache-2.0, Paul Bakaus), design-taste-frontend e high-end-visual-design (MIT, Leonxlnx), design-system (MIT, claudekit) e platform-design-skills (MIT, ehmo); reescrito e modificado pelo Crow em 2026-11-13. Ver ../NOTICE.md. -->
|
|
2
|
+
# Adaptação: dispositivos, entradas, idiomas e plataformas
|
|
3
|
+
|
|
4
|
+
Leia quando o contrato for dizer o que acontece com cada superfície em outra largura, outro tipo de entrada, outro idioma, impressão, e-mail ou app nativo. Adaptar não é escalar pixels: é repensar a experiência para o novo contexto.
|
|
5
|
+
|
|
6
|
+
## Antes de adaptar: o que muda de contexto
|
|
7
|
+
|
|
8
|
+
Para cada superfície, o contrato registra a origem e o alvo:
|
|
9
|
+
|
|
10
|
+
- **Origem:** para que foi desenhada (desktop web? app de celular? um site sendo portado?) e que suposições fez (tela grande, mouse, rede rápida, um idioma, retrato).
|
|
11
|
+
- **Alvo:** classe de dispositivo (celular, tablet, desktop, dobrável, impressão, e-mail; TV e relógio quando estiverem no escopo), entrada (toque, mouse, teclado, caneta, voz), orientação, rede (rápida, lenta, offline), postura de uso (em pé com uma mão, sentado com as duas, olhada rápida, leitura focada) e expectativa da plataforma.
|
|
12
|
+
- **O que quebra:** o que não cabe (conteúdo, navegação, recursos), o que não funciona (hover em toque, alvo pequeno, atalho sem teclado físico) e o que fica impróprio (padrão de desktop no celular e vice-versa).
|
|
13
|
+
|
|
14
|
+
Cinco coisas nunca são aceitáveis em nenhuma adaptação: esconder funcionalidade central numa classe de dispositivo (se importa, faça funcionar); mudar a arquitetura de informação entre contextos; supor que desktop é máquina potente; esquecer a paisagem no celular e no tablet; ignorar toque no desktop, porque muitos notebooks têm tela sensível.
|
|
15
|
+
|
|
16
|
+
## Estratégias por contexto
|
|
17
|
+
|
|
18
|
+
**Celular.**
|
|
19
|
+
- Layout: uma coluna, empilhamento vertical, componentes em largura total, navegação inferior em vez de superior ou lateral quando o produto é app.
|
|
20
|
+
- Interação: alvos de 44×44 sem depender de hover; sheets inferiores no lugar de dropdowns longos; controles na zona do polegar (a metade de baixo); gestos de deslizar onde a convenção existe (listas, carrosséis), sempre com alternativa visível.
|
|
21
|
+
- Conteúdo: revelação progressiva; o principal primeiro e o secundário em abas ou acordeões; texto mais conciso; corpo com no mínimo 16px e campos de formulário com 16px (abaixo disso o iOS Safari dá zoom no campo focado e quebra o layout).
|
|
22
|
+
- Navegação: drawer ou navegação inferior, menos níveis, cabeçalho fixo que mantém o contexto, voltar dentro do fluxo.
|
|
23
|
+
|
|
24
|
+
**Tablet.**
|
|
25
|
+
- Duas colunas, painel lateral para o secundário, mestre-detalhe (lista e detalhe lado a lado), estrutura que muda com a orientação.
|
|
26
|
+
- Toque e ponteiro ao mesmo tempo: alvos de 44, mas densidade maior que no celular; drawer lateral de navegação; formulários em mais de uma coluna quando os campos são curtos e relacionados.
|
|
27
|
+
|
|
28
|
+
**Desktop.**
|
|
29
|
+
- Várias colunas, navegação lateral sempre visível quando a arquitetura pede, vários painéis de informação ao mesmo tempo, tabelas com muitas colunas, visualizações mais ricas, menos revelação progressiva.
|
|
30
|
+
- Interação: hover para informação adicional (nunca para função), atalhos de teclado, menu de contexto com o botão direito, arrastar e soltar onde ajuda, seleção múltipla com Shift e Ctrl/Cmd.
|
|
31
|
+
- Largura: telas de app e produto ocupam a largura disponível, sem coluna centralizada com largura máxima (default do pacote para telas de app e produto, recusável pelo brief ou pelo dono com motivo registrado); a medida de leitura limita a prosa, não a página. Em marketing, contêiner só quando a composição pede, nunca herdado por acidente. Ver [espaço e layout](layout-e-espaco.md).
|
|
32
|
+
|
|
33
|
+
**Impressão.**
|
|
34
|
+
- Quebras de página em pontos lógicos (`break-before`, `break-inside: avoid` em blocos que não podem partir); navegação, rodapé de site e elementos interativos removidos; preto e branco ou cor limitada, sem depender de cor para significado; margens adequadas.
|
|
35
|
+
- Conteúdo expandido: URLs completas depois dos links, seções recolhidas abertas, número de página, título e data de impressão; gráficos em versão legível em tons de cinza.
|
|
36
|
+
|
|
37
|
+
**E-mail.**
|
|
38
|
+
- Largura máxima de 600px, coluna única, CSS inline (clientes de e-mail ignoram folhas externas), layout em tabelas para compatibilidade.
|
|
39
|
+
- CTA grande e óbvio (botão, não link de texto), nenhum estado de hover (não é confiável), interação complexa levada por link profundo para o app.
|
|
40
|
+
- Modo escuro dos clientes de e-mail inverte cores sem pedir: logo e imagens com fundo transparente testados nos dois.
|
|
41
|
+
|
|
42
|
+
## Breakpoints e contêiner
|
|
43
|
+
|
|
44
|
+
Mobile primeiro: o estilo base é o do celular e consultas `min-width` acrescentam complexidade. Os breakpoints vêm do conteúdo: comece estreito, estique até a composição quebrar, e ali entra o breakpoint. Valores como 640, 768, 1024, 1280 e 1536px são só exemplos marcados como tal, nunca a fonte da decisão. Componentes reagem ao contêiner em que estão (container queries), não à janela, porque o mesmo card vive numa sidebar estreita e numa área principal larga.
|
|
45
|
+
|
|
46
|
+
Teste os extremos declarados no contrato: tela muito pequena (320 CSS px de largura), tela muito grande (4K), paisagem no celular e janela estreita no desktop (multitarefa e tela dividida também são tamanhos).
|
|
47
|
+
|
|
48
|
+
## Colapso mobile declarado por seção
|
|
49
|
+
|
|
50
|
+
O contrato diz, para cada seção, como ela colapsa abaixo do breakpoint de conteúdo: o que empilha, em que ordem, o que vira carrossel ou rolagem horizontal, o que vira acordeão, o que some com caminho alternativo. "Fica responsivo" não é especificação.
|
|
51
|
+
|
|
52
|
+
**Override mobile das faixas de variância.** A composição assimétrica que o botão de VARIÂNCIA autoriza no desktop (faixas 4–10: sobreposições, proporções mistas, alvenaria, recuo largo de um lado) cai para coluna única no celular, com padding lateral do token de densidade. Rotações, margens negativas e cartas sobrepostas saem no toque: elas criam conflito de alvo e escondem conteúdo. Pan horizontal e scrollytelling ganham caminho nativo (rolagem com snap ou empilhamento) que mantém todo o conteúdo alcançável.
|
|
53
|
+
|
|
54
|
+
**Altura cheia** usa `dvh` ou `svh` descontando o cromo fixo (barras do navegador móvel, cabeçalho persistente); `100vh` salta no iOS Safari quando a barra recolhe.
|
|
55
|
+
|
|
56
|
+
## Entrada: ponteiro e hover, não tamanho de tela
|
|
57
|
+
|
|
58
|
+
Tamanho de tela não diz qual é a entrada: há notebook com toque e tablet com teclado. Use consultas de capacidade:
|
|
59
|
+
|
|
60
|
+
- `@media (pointer: coarse)` aumenta alvos e espaçamento (alvo de 44, densidade de linha confortável); `@media (pointer: fine)` permite controles menores e mais densos.
|
|
61
|
+
- `@media (hover: hover)` habilita informação extra no hover; `@media (hover: none)` garante que nada dependa dele. Hover nunca é o único caminho para uma função.
|
|
62
|
+
- Feedback de toque existe (estado pressionado visível) porque em toque não há hover para anunciar que algo é tocável.
|
|
63
|
+
|
|
64
|
+
## Áreas seguras
|
|
65
|
+
|
|
66
|
+
Em celulares com entalhe, ilha dinâmica, cantos arredondados e indicador de início, o conteúdo e os controles ficam dentro das áreas seguras: `padding` com `env(safe-area-inset-top|right|bottom|left)`, combinado com um mínimo (`max(1rem, env(safe-area-inset-bottom))`) e com a meta `viewport-fit=cover` para que o navegador exponha os valores. Barra inferior fixa e botão flutuante são os que mais esquecem disso. Teclado virtual aberto também reduz a área útil: campo focado não fica embaixo dele.
|
|
67
|
+
|
|
68
|
+
## Imagens responsivas
|
|
69
|
+
|
|
70
|
+
- `srcset` com descritores de largura (`400w, 800w, 1200w`) e `sizes` que diz quanto a imagem ocupa em cada contexto: o navegador escolhe o arquivo pela largura e pela densidade de pixels.
|
|
71
|
+
- `<picture>` quando o recorte muda (direção de arte: horizontal no desktop, vertical no celular), não só a resolução.
|
|
72
|
+
- Dimensões declaradas (`width`/`height` ou `aspect-ratio`) para não deslocar o layout; carregamento preguiçoso fora da primeira tela; a imagem principal da primeira tela com prioridade.
|
|
73
|
+
- `display: none` esconde mas ainda baixa: conteúdo que não serve no celular não deveria ser carregado nele.
|
|
74
|
+
|
|
75
|
+
## Padrões de colapso
|
|
76
|
+
|
|
77
|
+
- **Navegação em três estágios:** drawer com botão rotulado no celular, horizontal compacta no tablet, completa com rótulos no desktop. O botão do drawer tem nome acessível, `aria-expanded` e Esc fecha; um menu em tela cheia é um diálogo (ver [componentes e estados](componentes-e-estados.md)).
|
|
78
|
+
- **Tabela que vira cartão:** cada linha vira um cartão em que cada valor carrega o rótulo da sua coluna (o rótulo não some); ou a tabela mantém rolagem horizontal com a primeira coluna fixa. A escolha é por tabela (ver [dados e densidade](dados-e-densidade.md)).
|
|
79
|
+
- **Revelação com `<details>`/`<summary>`** para conteúdo que pode recolher no celular, com semântica e teclado nativos.
|
|
80
|
+
|
|
81
|
+
## Gestos e controles customizados
|
|
82
|
+
|
|
83
|
+
Controle customizado (slider, comparador antes/depois, superfície de arrastar, faixa de controles rolável) passa em toda checagem de largura e ainda assim pode se recusar a arrastar no iOS. O contrato especifica e a verificação exercita:
|
|
84
|
+
|
|
85
|
+
- **Gesto principal:** tocar responde como desenhado; arrastar com a entrada alvo completa o movimento, não só começa.
|
|
86
|
+
- **Rolagem atravessando o controle:** deslizar no eixo de rolagem da página por cima do controle rola a página sem acioná-lo; arrastar a partir do controle, no eixo dele, move o controle e não a página. Nenhuma das duas falhas gera erro, então as duas precisam ser tentadas.
|
|
87
|
+
- **Interrupção:** `pointercancel`, `lostpointercapture` e perda de foco da janela devolvem o controle a um estado coerente; nada fica preso no meio do arraste.
|
|
88
|
+
- **Alternativa:** todo gesto tem equivalente por teclado e por um único toque (arrastar tem alternativa sem arrastar, WCAG 2.5.7); gesto de vários dedos ou de trajetória tem alternativa simples (2.5.1).
|
|
89
|
+
- **Evidência declarada:** diga o que produziu a evidência (viewport emulado, toque sintetizado por ferramenta de navegador, qual motor rodou, aparelho físico). Captura de tela e janela redimensionada provam layout, nunca gesto. O que ficou sem teste é registrado como lacuna; hardware inalcançável não bloqueia, mas também não vira "testado".
|
|
90
|
+
|
|
91
|
+
## Zoom, texto ampliado e reflow
|
|
92
|
+
|
|
93
|
+
- Zoom de 200% sem perda de conteúdo ou função, e reflow sem rolagem em duas direções numa largura equivalente a 320 CSS px (exceto tabelas, mapas e gráficos que precisam de duas dimensões).
|
|
94
|
+
- Espaçamento de texto ampliado pela pessoa (altura de linha, espaço entre letras, palavras e parágrafos) não corta nem sobrepõe texto: contêineres crescem com o conteúdo, sem altura fixa em caixa de texto.
|
|
95
|
+
- Texto em unidades relativas (`rem`), para seguir a preferência de tamanho do navegador. No nativo, Dynamic Type no iOS e `sp` no Android, testados num tamanho grande (é onde o corte aparece).
|
|
96
|
+
|
|
97
|
+
## Ordem
|
|
98
|
+
|
|
99
|
+
A ordem do DOM e a ordem de foco acompanham a ordem visual em cada breakpoint. Reordenar só com CSS (`order`, `grid-area`, `flex-direction: row-reverse`) cria um caminho de teclado e de leitor de tela que não corresponde ao que se vê; quando a ordem visual muda por breakpoint, o contrato diz qual ordem de leitura vale e como o DOM a sustenta.
|
|
100
|
+
|
|
101
|
+
## Idiomas, RTL e scripts
|
|
102
|
+
|
|
103
|
+
Quando a superfície é ou será traduzida, isso entra no contrato desde o começo, não como ajuste:
|
|
104
|
+
|
|
105
|
+
- **Propriedades lógicas** em tudo que tem lado: `margin-inline-start` em vez de `margin-left`, `padding-inline`, `border-inline-end`, `inset-inline-start`, `text-align: start`. O layout espelha sozinho com `dir="rtl"`.
|
|
106
|
+
- **Espelhamento de ícones direcionais:** setas de avançar e voltar, chevrons, ícone de "responder", barras de progresso horizontais e indicadores de lista espelham em RTL. Não espelham: logos, ícones de mídia (play aponta para a direita em qualquer idioma), relógio, marcas de verificação, gráficos com eixo de tempo convencionado, texto embutido em imagem. Decida ícone por ícone; `transform: scaleX(-1)` em tudo é errado.
|
|
107
|
+
- **Expansão:** reserve de 30 a 40% a mais de espaço para traduções (alemão e finlandês costumam ser os mais longos; português também cresce em relação ao inglês). Nada de largura fixa em contêiner de texto, botão ou aba; limites de tamanho por medida visual (linhas e largura), não por contagem de palavras em inglês.
|
|
108
|
+
- **Altura de linha e tracking por script.** Scripts CJK e árabe precisam de altura de linha diferente da latina; tracking negativo nunca se aplica a CJK nem a árabe; caixa alta com espaçamento é recurso do latim, não existe em scripts sem caixa. Declare tokens tipográficos por script quando houver mais de um (ver [tipografia](tipografia.md)).
|
|
109
|
+
- **Fontes:** fallback com cobertura para cada script em uso; `unicode-range` nunca corta o Latin-1, porque é onde estão os acentos do português.
|
|
110
|
+
- **Formatos:** data, hora, número, moeda, plural e ordem de nome e sobrenome vêm do locale (APIs de internacionalização da plataforma), nunca montados à mão.
|
|
111
|
+
- **Pseudo-localização como verificação:** antes de ter traduções reais, rode as strings por uma pseudo-localização que alonga o texto em cerca de 30 a 40%, adiciona acentos e delimitadores e, numa segunda passada, força RTL. O que corta, sobrepõe, desalinha ou não espelha aparece ali. É gate do contrato sempre que houver i18n.
|
|
112
|
+
|
|
113
|
+
## Nativo
|
|
114
|
+
|
|
115
|
+
Quando a superfície é app nativo (iOS, iPadOS, Android, ou multiplataforma entregando para esses aparelhos), as convenções da plataforma governam estrutura, navegação e interação em qualquer modo; a marca se expressa pela camada que a plataforma deixa aberta: tint ou papéis de cor, tipografia, forma, movimento, conteúdo.
|
|
116
|
+
|
|
117
|
+
**Estrutura por tamanho, não por aparelho.** Size classes no iOS e window size classes no Android decidem a estrutura; nunca checagem de modelo de aparelho. Multitarefa entrega uma janela de largura de celular num tablet, e o layout dirigido por classe de tamanho resolve os dois casos.
|
|
118
|
+
|
|
119
|
+
**Celular para tablet: reestruturar, não esticar.** Interface de celular ampliada no tablet é a falha típica.
|
|
120
|
+
- A navegação muda de forma: a tab bar continua ou vira sidebar no iPad; a barra de navegação do Android vira rail ou drawer na largura expandida. Barra inferior de celular intocada num tablet não entra.
|
|
121
|
+
- A largura é usada: split view ou mestre-detalhe, grades de várias colunas, popover onde o celular usava sheet.
|
|
122
|
+
|
|
123
|
+
**Orientação e dobráveis.** Paisagem reestrutura (painéis lado a lado, controles reposicionados), sem cortar nem colocar tarjas. Travar orientação só quando a tarefa exige de fato, nunca para fugir de um defeito de layout. Dobráveis reagem à postura e à dobradiça pelas window size classes e são testados dobrado, aberto e em modo mesa.
|
|
124
|
+
|
|
125
|
+
**Web para nativo: reconformar, não refluir.** Navegação web vira o modelo da plataforma; controles com cara de HTML viram controles da plataforma; affordances de hover viram affordances de toque; tipo em px vira Dynamic Type ou `sp`. Depois, a superfície passa pelo teste de conformidade da plataforma como qualquer outra.
|
|
126
|
+
|
|
127
|
+
**Convenções iOS × Android.** Traduza idiomas, nunca transplante:
|
|
128
|
+
|
|
129
|
+
| Aspecto | iOS | Android |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| Navegação de topo | tab bar com 2 a 5 seções (seções, nunca ações), pilha de navegação para hierarquia, sheet para tarefa autocontida | barra de navegação inferior com 3 a 5 destinos no compacto; rail ou drawer no expandido; top app bar com o contexto da tela |
|
|
132
|
+
| Voltar | gesto de borda esquerda sempre vivo, chevron de voltar | gesto Voltar preditivo e botão Voltar do sistema sempre funcionam; nunca prender nem sequestrar |
|
|
133
|
+
| Controles | switch, segmented control, stepper, pickers do sistema, action sheet, alerta, menu de contexto, ações de deslizar | botões cheio, tonal, contornado e de texto; um FAB para uma ação primária; switch, chips e pickers do Material |
|
|
134
|
+
| Sobreposições | sheet para subtarefa dispensável, cobertura em tela cheia para imersão, Cancelar e Concluído claros, deslizar para fechar respeitado salvo risco de perda de dados | bottom sheet, diálogo do Material só para decisão que precisa interromper |
|
|
135
|
+
| Feedback transitório | alerta ou banner do sistema conforme a gravidade | snackbar (com ação quando útil), nunca toast para isso |
|
|
136
|
+
| Ícones e tipo | SF Symbols alinhados à linha de base; SF Pro e SF Compact na interface, fonte da marca em momentos de display; Dynamic Type (piso de 11pt, corpo de 17pt, estilos do sistema em vez de pontos fixos) | Material Symbols; Roboto ou a fonte da marca encaixada na escala tipográfica do Material (Display, Headline, Title, Body, Label, cada um em três tamanhos); sempre `sp` |
|
|
137
|
+
| Cor e superfícies | cores semânticas do sistema (label, secondaryLabel, systemBackground, separator, tint), um tint para o interativo, materiais do sistema para desfoque | papéis de cor do Material (primary, on-primary, surface, surface-variant, secondary-container, outline, error), Dynamic Color no Android 12+ com fallback estático, elevação tonal |
|
|
138
|
+
| Listas de ajustes | listas agrupadas ou inset | listas do Material |
|
|
139
|
+
| Movimento | transições do sistema (push desliza, sheet sobe, fechar reverte a entrada); com Reduzir Movimento, crossfade no lugar de paralaxe e deslizes grandes | container transform, shared axis, fade through com easing e durações padrão; com "Remover animações", crossfade ou corte |
|
|
140
|
+
| Alvo | 44×44pt com folga entre vizinhos | 48×48dp com pelo menos 8dp entre alvos |
|
|
141
|
+
| Bordas do sistema | área segura (entalhe, ilha dinâmica, indicador de início, cantos) | edge-to-edge com insets de barra de status, barra de navegação, recorte de tela e teclado |
|
|
142
|
+
| Modo escuro | aparência de primeira classe, desenhada e testada | tema escuro de primeira classe, nunca inversão rápida |
|
|
143
|
+
|
|
144
|
+
**Os dois vícios de plataforma:**
|
|
145
|
+
- **"Portado de site" no iOS:** barra de navegação ou voltar customizados, gesto de borda desligado ou coberto, botões com cara de web, affordances que dependem de hover, glassmorphism feito à mão no lugar dos materiais, pilhas de cards em telas de ajustes, conjunto de ícones da web misturado com SF Symbols, hex cru que quebra no modo escuro e no aumento de contraste.
|
|
146
|
+
- **"Pele de iOS" no Android:** só barra inferior copiada do iPhone, voltar que ignora o gesto do sistema, switches e diálogos com forma Cupertino, FABs empilhados ou FAB gasto em ação secundária, toast no lugar de snackbar, barra de celular intocada no tablet.
|
|
147
|
+
|
|
148
|
+
App que usa Material em todo lugar e também roda no iPhone ainda deve ao iOS as garantias do sistema naquele aparelho: área segura, Reduzir Movimento e gesto de borda para voltar.
|
|
149
|
+
|
|
150
|
+
**Evidência nativa.** Simulador e emulador dão amplitude (classes de dispositivo, modo escuro, tamanho de fonte grande); postura, gestos, taxa de atualização e desempenho precisam de aparelho real. A verificação diz qual dos dois produziu cada evidência e cobre pelo menos um celular e, quando houver tablet no alvo, um tablet, nas duas orientações.
|
|
151
|
+
|
|
152
|
+
**Handoff.** A crow-design decide a estrutura, a navegação, os tokens e a tradução de idiomas entre plataformas. Implementação de app nativo, mapeamento dos tokens para SwiftUI, Compose ou o framework multiplataforma, e a verificação em simulador ou aparelho são da `crow-native-mobile`, que recebe o contrato com: classes de tamanho e o que muda em cada uma, tabela de navegação por plataforma, tokens com os modos claro, escuro e de contraste aumentado, regras de movimento com o comportamento sob Reduzir Movimento, e a lista do que ficou sem verificação em hardware.
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
<!-- Derivado de Impeccable (Apache-2.0, Paul Bakaus), design-taste-frontend e high-end-visual-design (MIT, Leonxlnx), design-system (MIT, claudekit) e platform-design-skills (MIT, ehmo); reescrito e modificado pelo Crow em 2026-11-13. Ver ../NOTICE.md. -->
|
|
2
|
+
# Anti-padrões
|
|
3
|
+
|
|
4
|
+
Leia antes de fixar a direção e antes de fechar o contrato: é o catálogo dos vícios recorrentes de interface gerada e de sistema mal governado, cada um com o motivo, quando o brief ou a marca o liberam e como checar.
|
|
5
|
+
|
|
6
|
+
## Como usar este catálogo
|
|
7
|
+
|
|
8
|
+
Quase tudo aqui é **default recusável**, não proibição. O vício não é o padrão em si; é chegar nele quando o eixo estava livre, porque aí ninguém decidiu nada. O brief, a marca ou a autoridade visual existente (documento do sistema, tokens, componentes, código) liberam qualquer item recusável, e a exceção é registrada com o motivo no documento do sistema. A ordem de precedência é: pedido atual do dono, brief, marca e sistema existentes, decisões do contrato, defaults desta skill.
|
|
9
|
+
|
|
10
|
+
Três classes de item **não se liberam** por brief nem por marca, porque não são questão de gosto; só itens delas trazem "*Libera:* nunca":
|
|
11
|
+
- **acessibilidade:** contraste abaixo do piso, foco invisível, alvo abaixo de 24×24, movimento sem alternativa reduzida, flash acima do limite, significado só por cor, conteúdo inacessível por teclado, estado que a tecnologia assistiva não recebe;
|
|
12
|
+
- **verdade do conteúdo:** conteúdo, pessoa, métrica, logo, depoimento, interface ou progresso fabricados com cara de reais, e contrato que declara o que não será entregue;
|
|
13
|
+
- **integridade do sistema de tokens e do contrato:** valor cru no lugar de token, referência quebrada, camadas achatadas ou misturadas, governança ausente em sistema compartilhado, e a ausência das decisões que os gates exigem (estados, largura).
|
|
14
|
+
|
|
15
|
+
Todo o resto é gosto: *Libera* diz quando o brief ou a marca pedem o padrão, e a exceção é registrada.
|
|
16
|
+
|
|
17
|
+
Cada item traz: **o que é**; *Vício*, por que é problema; *Libera*, quando deixa de ser; *Checa*, como verificar. "Gate" bloqueia o contrato; "heurística" orienta, e quem decide manter registra o motivo (ver [aceite e pré-voo](aceite-e-pre-voo.md)).
|
|
18
|
+
|
|
19
|
+
## Os dois testes que valem para tudo
|
|
20
|
+
|
|
21
|
+
**A mesma direção sairia de um brief sobre outro assunto?** Se dá para adivinhar a estética pela categoria (fintech → azul-marinho e cards; ferramenta de IA → roxo e brilho; livraria → creme e serifa), ou pela categoria mais o que ela costuma evitar, a direção é o default vestido com a roupa do assunto. Decida de novo a partir do que o assunto tem de específico: a matéria, o vocabulário, o público, a cena real de uso, o mecanismo único do produto. Restrição negativa do brief ("nada de neon") não proíbe exuberância, e um mundo fixado pelo brief não autoriza a versão mais mansa dele.
|
|
22
|
+
|
|
23
|
+
**O inverso também é vício: variar por obrigação.** Exigir aparência nova a cada entrega, proibir repetir um layout entre seções, fazer rodízio de paleta ou de fonte "entre projetos" (não há memória confiável disso), ou banir uma família, uma cor ou um componente que a marca já usa, é trocar a decisão do dono pela preferência da ferramenta. Consistência entre telas do mesmo produto é virtude. Variação só existe contra defaults genéricos, nunca contra a marca ou o sistema existentes. Trocar um valor existente é decisão explícita, com motivo e caminho de volta.
|
|
24
|
+
|
|
25
|
+
## Composição
|
|
26
|
+
|
|
27
|
+
- **Cards iguais como estrutura da página.** Fileira de cards do mesmo tamanho, cada um com ícone, título e texto, servindo de esqueleto para tudo; três cards idênticos lado a lado como "features". *Vício:* o card é o contêiner preguiçoso; tudo pesa igual e nada é hierarquia. *Libera:* coleção real de itens equivalentes (planos comparáveis, produtos de um catálogo), onde a igualdade é a informação. *Checa:* heurística; remova as bordas mentalmente: se a seção continua funcionando com espaço e tipografia, o card era decoração. Em densidade alta (botão DENSIDADE acima de 7, ver [direção estética](direcao-estetica.md)), card genérico não entra; linhas de 1px e espaço fazem o trabalho.
|
|
28
|
+
- **Card dentro de card.** *Vício:* duas fronteiras disputando a mesma hierarquia; quase sempre é estrutura que não foi pensada. *Libera:* o interno é um objeto distinto com fronteira própria (uma prévia de anexo dentro de uma mensagem) e o externo é região sem sombra. *Checa:* heurística.
|
|
29
|
+
- **Template de número herói.** Número enorme, rótulo pequeno, três estatísticas de apoio e um acento. *Vício:* composição de marketing aplicada a qualquer coisa, inclusive a painel; quase sempre com número sem fonte. *Libera:* o número é real, tem fonte e é de fato a mensagem principal. *Checa:* heurística de composição; gate de honestidade para o número.
|
|
30
|
+
- **Kicker ou eyebrow.** Rótulo pequeno, geralmente em caixa alta espaçada (às vezes em pílula ou mono), imediatamente acima de um título de seção. *Vício:* o título deveria carregar o próprio peso; repetido em toda seção, vira cromo de template e ruído; em 10–11px, ilegível para muita gente. **Não é banido de forma absoluta.** *Libera:* o brief ou a marca pedem; o rótulo carrega informação que o título não carrega (categoria real, data, autor numa publicação). Mesmo liberado: raro (como orientação, no máximo um a cada três seções, contando o hero, e as duas seguintes sem), com texto de pelo menos 12px e contraste AA. *Checa:* pela semântica, não pela classe CSS: conte rótulos de texto curto posicionados imediatamente acima de um título de seção (`h2`/`h3` ou equivalente), seja qual for a técnica (caixa alta, small caps, `font-variant`, pílula). Caixa alta espaçada em botão, navegação ou badge não conta; small caps acima de título conta. Heurística, registrada.
|
|
31
|
+
- **Numeração de seção sem sequência.** "01 / 02 / 03" nas seções, eyebrow numerado ("00 / Índice", "001 · Capacidades"), paginação "01 / 4" em imagens ou tiles. *Vício:* simula ordem onde não há; é decoração disfarçada de informação. *Libera:* a sequência é real e a pessoa precisa dela (passos de um processo, capítulos). *Checa:* heurística: a ordem muda o significado?
|
|
32
|
+
- **Hero centralizado sobre fundo escuro com malha de gradiente.** *Vício:* é o rosto mais reconhecível de página gerada. *Libera:* editorial, manifesto, anúncio de lançamento, ou variância baixa declarada (botão de VARIÂNCIA até 4). Com variância acima de 4, prefira divisão assimétrica, texto de um lado e visual do outro, espaço assimétrico ou seção fixada na rolagem. *Checa:* heurística.
|
|
33
|
+
- **Cabeçalho dividido.** Título grande à esquerda (sete ou oito colunas) e parágrafo pequeno à direita (quatro ou cinco). *Vício:* virou assinatura de template; separa o título do texto que o explica. *Libera:* a marca usa; o parágrafo é de fato lateral (nota, legenda). *Checa:* heurística; o default é empilhar com o corpo na medida de leitura.
|
|
34
|
+
- **Zigue-zague longo.** Mais de duas seções seguidas alternando imagem e texto de lados. *Vício:* ritmo previsível que o leitor para de ler na terceira. *Libera:* conteúdo que é de fato uma sequência paralela (passo a passo com imagem por passo), com variação de escala. *Checa:* heurística: a terceira alternância seguida pede outra forma.
|
|
35
|
+
- **Monotonia de layout sem motivo.** A mesma família de layout repetida em seções que dizem coisas diferentes. *Vício:* tudo parece igualmente (des)importante. *Libera:* repetição deliberada (coleções, componentes do sistema, páginas de documentação, listagens) é consistência e não vício. *Checa:* heurística, só em marketing: oito seções costumam pedir várias famílias, mas não há cota. O vício inverso (proibir repetir) está no teste acima.
|
|
36
|
+
- **Bento sem ritmo.** Grade de células com tamanhos que não seguem o conteúdo, célula vazia sobrando, todas as células com o mesmo fundo. *Vício:* bento escolhido pela forma, não pelo conteúdo. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção (célula vazia como respiro declarado); o resto, pela composição. *Checa:* N itens, N células; duas ou três células com fundo diferente (imagem, cor da marca, padrão, tint) quando a grade é grande; heurística.
|
|
37
|
+
- **Lista longa em fileira simples em marketing.** Mais de cinco itens empilhados iguais, despejo de dados numa página de marketing, ficha técnica com borda inferior em toda linha, borda em cima e embaixo de cada linha de lista. *Vício:* parede de opções; o leitor não acha o que importa. *Libera:* página de referência, documentação, tabela de especificação que é a própria tarefa. *Checa:* heurística; alternativas: as três a cinco principais e "ver lista completa", duas colunas agrupadas, abas, acordeão, chips roláveis, grupos com um divisor só.
|
|
38
|
+
- **Hero que estoura.** Título de quatro linhas, mais de quatro elementos de texto no hero (rótulo ou faixa de marca, título, subtítulo, CTAs), CTAs abaixo da dobra, logo wall, fileira de avatares, teaser de preço e bullets de feature dentro do hero, padding superior exagerado. *Vício:* a primeira tela tenta dizer tudo e não diz nada. *Libera:* o mundo da direção é tipográfico e o título é a peça. *Checa:* heurística: título até duas linhas no desktop, subtítulo até três ou quatro linhas, uma ação primária e no máximo uma secundária visíveis sem rolar.
|
|
39
|
+
- **Hero sem visual.** Texto e uma mancha de gradiente no lugar de um visual real; página "minimalista" que é só texto quando o assunto pede imagem. *Vício:* ausência de decisão apresentada como estilo. *Libera:* modo Ler, direção tipográfica deliberada. *Checa:* heurística.
|
|
40
|
+
- **Decoração de canto.** Subtexto flutuando no canto superior direito do cabeçalho da seção, faixa decorativa de palavras no pé do hero, chamada para rolar, texto vertical rotacionado, linhas de grade ou miras como enfeite. *Vício:* cromo que finge densidade editorial. *Libera:* texto vertical e grade quando o mundo é de fato editorial ou técnico e eles carregam informação (régua real, mapa, planta). *Checa:* heurística.
|
|
41
|
+
- **Listras e grades sem chão.** `repeating-linear-gradient` em listras, grade em dois eixos sobreposta ao fundo. *Vício:* textura que não vem do mundo do assunto. *Libera:* há um canvas, mapa, planta ou instrumento de medida real por baixo. *Checa:* heurística.
|
|
42
|
+
- **Coluna centralizada herdada em app.** Tela de produto estreitada num contêiner `max-w` centralizado; hero que devia sangrar cortado pelo contêiner do layout raiz. *Vício:* desperdiça a tela de quem trabalha e quebra a composição. *Libera:* prosa (a medida de leitura manda); marketing quando a composição pede contêiner. *Checa:* **gate**: a largura de cada superfície está decidida e escrita no contrato.
|
|
43
|
+
- **Sidebar à esquerda por reflexo.** Dashboard que nasce com navegação lateral porque todo dashboard tem. *Vício:* a arquitetura de informação não foi consultada. *Libera:* a arquitetura pede (muitas seções, troca frequente). *Checa:* heurística. O vício inverso: proibir navegação lateral ou barra fixa de ponta a ponta por estética, sendo padrões acessíveis e comuns.
|
|
44
|
+
- **Navegação que estoura.** Barra em pílula flutuante com largura do conteúdo que não cabe com muitos itens ou com tradução; navegação que quebra em duas linhas no desktop; barra mais alta que 80px. *Vício:* a forma veio antes do conteúdo. *Libera:* poucos itens fixos e testados na língua mais longa. *Checa:* heurística (altura de 64 a 72px é a faixa comum); gate de pseudo-localização quando há i18n.
|
|
45
|
+
- **Sobreposição e rotação no toque.** Cartas sobrepostas com rotação de −2° e 3°, margens negativas, no celular. *Vício:* conflito de alvo e conteúdo escondido. *Libera:* nunca abaixo do breakpoint de toque. *Checa:* gate de alvos; colapso mobile declarado.
|
|
46
|
+
- **Modal sem necessidade.** Modal para tarefa que não precisa de interrupção nem de foco protegido. *Vício:* tira o contexto, pesa a navegação por teclado. *Libera:* interrupção real ou foco protegido. *Checa:* árvore de decisão em [componentes e estados](componentes-e-estados.md).
|
|
47
|
+
|
|
48
|
+
## Tipografia
|
|
49
|
+
|
|
50
|
+
- **Fonte de reflexo.** Escolher por hábito uma destas, que aparecem em qualquer assunto: Fraunces, Playfair Display, Cormorant, Lora, Crimson, Newsreader, Instrument Serif, Syne, Space Grotesk, Space Mono, IBM Plex, Inter como display, DM Sans, DM Serif, Outfit, Plus Jakarta Sans, Instrument Sans; e, como corpo, Inter, Roboto, Arial, Open Sans ou Helvetica sem pensar. *Vício:* a fonte não diz nada do assunto. *Libera:* a marca usa (a marca zera a lista para os próprios ativos); Inter e fontes de sistema são escolhas válidas em Operar e Ler e em setor público ou acessibilidade crítica; razão que só aquela fonte atende, registrada. *Checa:* heurística; a fonte é justificada pelo mundo da direção, não pela categoria. Ver [tipografia](tipografia.md).
|
|
51
|
+
- **Fonte por associação de assunto.** Livro → serifa; tecnologia → mono; luxo → serifa de alto contraste; creme com serifa para tema de livro ("o default vestindo a roupa do assunto"). *Vício:* é o teste de categoria falhando. *Libera:* o brief nomeia a serifa, ou a família é genuinamente editorial, de publicação, manuscrita, de herança. *Checa:* heurística. Serifa em dashboard não entra como default.
|
|
52
|
+
- **Supor fonte comercial disponível.** Especificar uma fonte paga como se estivesse à mão. *Vício:* o build quebra ou a licença é violada. *Libera:* licença declarada pelo dono. *Checa:* **gate** de honestidade de assets: cada fonte com licença e fallback livre equivalente.
|
|
53
|
+
- **Palavra serifada injetada.** Uma palavra em serifa (ou itálico de outra família) no meio de um título sans. *Vício:* truque de template. *Libera:* a marca tem essa assinatura. *Checa:* heurística; ênfase vem de itálico ou peso da mesma família.
|
|
54
|
+
- **Fonte de sistema como voz display.** Impact, Arial Black ou a sans da plataforma como voz de display numa página com mundo próprio. *Vício:* a fonte mais próxima instalada no lugar da que o mundo pede. *Libera:* modo Operar e Ler, onde fonte de sistema é virtude. *Checa:* heurística.
|
|
55
|
+
- **Mono como fantasia.** Monoespaçada para parecer "técnico", ou mono em todos os números de uma interface densa. *Vício:* custa largura e legibilidade; o alinhamento de números vem de `tabular-nums`. *Libera:* código, IDs, hashes, medidas, terminal. *Checa:* heurística; numerais `tabular-nums` em colunas.
|
|
56
|
+
- **Tracking extremo.** Abaixo de −0.04em no display; tracking negativo em CJK ou árabe; caixa alta espaçada em script sem caixa. *Vício:* letras colidem; em outros scripts, quebra a escrita. *Libera:* nunca o tracking negativo em CJK ou árabe nem a caixa alta em script sem caixa, que quebram a escrita (acessibilidade); o piso de −0.04em no display latino é valor, recusável quando a marca pede, registrando a exceção e conferindo a legibilidade (entre −0.02 e −0.03em costuma ler melhor). *Checa:* gate de valor de token; RTL e scripts na pseudo-localização.
|
|
57
|
+
- **Escala sem degraus ou estourada.** Título de display acima de 6rem sem motivo; H1 exagerado; degraus de tamanho e peso que não se distinguem; hierarquia só por tamanho. *Vício:* ou grita, ou não hierarquiza. *Libera:* o mundo da direção pede display maior (registrado). *Checa:* heurística.
|
|
58
|
+
- **Tipografia fluida em produto.** `clamp()` em títulos de painel e app. *Vício:* título que encolhe numa sidebar; produto é visto em densidade constante. *Libera:* display de Persuadir e Experienciar. *Checa:* heurística; escala em rem fixo, razão 1.125–1.2, em Operar e Ler.
|
|
59
|
+
- **Título quebrado com itálico.** Quebra forçada com `<br>` e a última palavra em itálico ("por trinta<br>*anos.*"). *Vício:* assinatura de template; quebra ruim em outra largura ou idioma. *Libera:* a marca usa. *Checa:* heurística.
|
|
60
|
+
- **Texto em gradiente.** *Vício:* ênfase vem de peso ou tamanho; gradiente prejudica contraste e legibilidade. *Libera:* logo ou marca que já é assim. *Checa:* heurística; contraste do pior ponto do gradiente é gate.
|
|
61
|
+
- **Rótulo minúsculo em caixa alta.** 10–11px, caixa alta, tracking largo. *Vício:* ilegível para muita gente. *Libera:* não abaixo de 12px. *Checa:* gate de tamanho mínimo e contraste.
|
|
62
|
+
- **Itálico cortado.** Itálico ou fonte de display com descendentes (g, j, p, q, y) cortados por altura de linha apertada. *Vício:* defeito de acabamento. *Libera:* o valor de folga é recusável pela fonte e pela marca, registrando a exceção; glifo cortado a ponto de prejudicar a leitura é acessibilidade e não se libera. *Checa:* heurística; altura de linha de pelo menos 1.1 e folga inferior quando há descendentes.
|
|
63
|
+
- **`unicode-range` só latim básico.** Subconjunto que corta o Latin-1. *Vício:* acentos do português caem para a fonte de fallback. *Libera:* conteúdo que comprovadamente não usa caracteres fora do subconjunto, com o idioma registrado. *Checa:* gate 9 de [aceite e pré-voo](aceite-e-pre-voo.md) quando há i18n.
|
|
64
|
+
- **Fonte de display em rótulo, botão ou dado** em superfície de produto. *Vício:* estranheza sem propósito. *Libera:* marca que tem essa voz e foi testada em tamanho pequeno. *Checa:* heurística.
|
|
65
|
+
|
|
66
|
+
## Cor
|
|
67
|
+
|
|
68
|
+
- **Cluster creme, serifa e terracota.** Fundo creme quente, serifa de display de alto contraste, acento terracota ou vermelho-sinal. *Vício:* o default "sofisticado" mais reconhecível. *Libera:* marca ou brief que pedem, executado com intenção. *Checa:* teste de categoria.
|
|
69
|
+
- **Cluster quase preto e neon.** Fundo quase preto, um acento neon, bordas brilhando. *Vício:* o default "tech". *Libera:* idem. *Checa:* teste de categoria.
|
|
70
|
+
- **Cluster jornal.** Linhas finas de jornal, serifa de display itálica e rótulos mono pequenos e espaçados. *Vício:* o default "editorial". *Libera:* publicação que é de fato jornal. *Checa:* teste de categoria.
|
|
71
|
+
- **Roxo e azul "de IA".** Gradiente violeta-azul como identidade, orbs roxos, brilho automático. *Vício:* virou sinônimo de página gerada. *Libera:* a marca é roxa (marca roxa continua roxa), executada com intenção. *Checa:* teste de categoria.
|
|
72
|
+
- **Paleta "consumidor premium".** Fundos bege-creme (como `#f5f1ea`, `#f7f5f1`, `#fbf8f1`, `#efeae0`, `#ece6db`, `#faf7f1`, `#e8dfcb`), acentos latão, ferrugem e vinho (`#b08947`, `#b6553a`, `#9a2436`, `#9c6e2a`, `#bc7c3a`, `#7d5621`), texto marrom-preto (`#1a1714`, `#1a1814`, `#1b1814`). *Vício:* o mesmo luxo em qualquer marca. *Libera:* a marca nomeia essas cores ou é genuinamente artesanal ou de época. *Checa:* teste de categoria. Sem rodízio obrigatório entre projetos.
|
|
73
|
+
- **Fundo puxado pelo default.** Creme quente no claro, ardósia azul-preta no escuro, sem que a cena peça. *Vício:* o fundo que sai quando ninguém escolhe. *Libera:* a cena física pede. *Checa:* heurística.
|
|
74
|
+
- **Claro ou escuro pela categoria.** Escuro porque "é tech", claro porque "é saúde". *Vício:* a cena de uso não foi considerada. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção; a categoria sozinha não é motivo: decida por uma frase de cena (quem, onde, sob que luz). *Checa:* heurística registrada.
|
|
75
|
+
- **Brilho e halo.** Glow neon, sombra colorida sem deslocamento em volta de botões e cards. *Vício:* decoração que imita luz. *Libera:* mundo que é de fato luminoso (interface de palco, jogo), com propósito. *Checa:* heurística.
|
|
76
|
+
- **Acento demais.** Acento saturado além da saturação contida (ver [cor](cor.md)), mais de um acento sem função, acento em estado inativo, cor salpicada em acentos espalhados em vez de ocupar regiões. *Vício:* tudo chama atenção. *Libera:* estratégia de cor comprometida, completa ou encharcada declarada. *Checa:* heurística; contraste é gate.
|
|
77
|
+
- **Paleta incoerente.** Cinzas quentes e frios alternando entre seções; CTA azul numa página de cinza quente; badge turquesa num site rosa. *Vício:* falta de lock de cor. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção (estratégia de cor completa ou encharcada, sistema existente). *Checa:* acentos e famílias de neutros declarados pela estratégia de cor escolhida, em tokens (ver [cor](cor.md)).
|
|
78
|
+
- **Preto e branco puros.** `#000` e `#fff` como default de fundo e texto. *Vício:* contraste duro e sem profundidade. *Libera:* marca, modo de alto contraste. *Checa:* heurística; neutros tokenizados.
|
|
79
|
+
- **Cinza sobre cor.** Texto secundário cinza genérico sobre superfície colorida. *Vício:* fica sujo e frequentemente reprova contraste. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção; o default é derivar do matiz da superfície ou do primeiro plano. *Checa:* heurística; o contraste continua gate.
|
|
80
|
+
- **Seção invertida.** Seção escura no meio de página clara (ou o contrário). *Vício:* quebra o lock de tema. *Libera:* uma única faixa de cor deliberada por página; tints da mesma família lado a lado. *Checa:* heurística.
|
|
81
|
+
- **Escuro invertido.** Modo escuro feito por inversão mecânica, ou um dos dois modos esquecido, ou modo escuro só no fundo com primário, foco e estados sem ajuste. *Vício:* contraste e hierarquia não verificados. *Libera:* nunca, quando o contrato decidiu ter dois modos. *Checa:* **gate**: contraste por par e por modo.
|
|
82
|
+
- **Alfa sem verificação.** Texto, borda, hover (primário a 90%) ou seleção (primário a 10%) feitos com transparência. *Vício:* o contraste muda conforme o fundo real. *Libera:* contraste verificado sobre o fundo real em cada modo. *Checa:* gate; prefira tokens opacos.
|
|
83
|
+
- **Só cor.** Estado, categoria ou prioridade comunicados apenas por cor. *Vício:* falha para daltonismo, impressão, leitor de tela. *Libera:* nunca. *Checa:* **gate**.
|
|
84
|
+
- **Ponto de status decorativo.** Bolinha colorida "ao vivo" sem estado real. *Vício:* finge atividade. *Libera:* estado semântico real, um por seção. *Checa:* heurística.
|
|
85
|
+
- **Rampa com croma constante.** Mesma saturação do claríssimo ao escuríssimo. *Vício:* sai do gamut e fica berrante nas pontas. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção (rampa da marca fornecida); o contraste continua gate. *Checa:* rampa OKLCH com croma caindo perto do branco e do preto e recorte de gamut (ver [cor](cor.md)).
|
|
86
|
+
|
|
87
|
+
## Superfície e profundidade
|
|
88
|
+
|
|
89
|
+
- **Glass decorativo.** Vidro e desfoque como estilo geral, em cards de conteúdo, em área grande que rola, em dashboard ou B2B sóbrio. *Vício:* custo de desempenho, contraste instável, cara de template. *Libera:* camada fixa ou sobreposta (barra, sheet, overlay de mídia) em registro que pede (consumidor premium, adjacente à Apple, luxo), com fallback para `prefers-reduced-transparency` por modo (no escuro, o fallback é superfície escura opaca, não branca) e contraste nos quatro cenários. *Checa:* gate de contraste; heurística de uso. Receita em [superfície e profundidade](superficie-e-profundidade.md).
|
|
90
|
+
- **Card fantasma.** Borda de 1px com sombra larga e suave ao mesmo tempo. *Vício:* duas linguagens de elevação brigando. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção; o default é borda **ou** sombra, declarada uma vez. *Checa:* heurística.
|
|
91
|
+
- **Aba lateral.** Borda colorida à esquerda ou à direita, acima de 1px, em card, item de lista, callout ou alerta. *Vício:* marca de template; carrega significado só por cor. *Libera:* a marca usa; o indicador é acompanhado de ícone ou texto. *Checa:* heurística.
|
|
92
|
+
- **Sombra dura deslocada.** `box-shadow: 4px 4px 0` fora de um mundo neobrutalista. *Vício:* fantasia de estilo, não sistema de profundidade. *Libera:* o mundo escolheu o neobrutalismo. *Checa:* heurística.
|
|
93
|
+
- **Sombra preta genérica.** Sombra de preto puro em fundo claro, sombra média padrão de kit. *Vício:* suja a superfície. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção; o default é sombra tingida pelo matiz da superfície, com deslocamento e desfoque suave. *Checa:* heurística.
|
|
94
|
+
- **Raio sem sistema.** Mesmo raio em tudo achatando a hierarquia, ou mistura de raios sem regra, pílula em algo que não é controle pequeno, raio interno igual ao externo. *Vício:* a forma não diz o que é o quê. *Libera:* regra de mistura documentada ("botões em pílula com `radius.full`, cards 16px, campos 8px"); card de 12 a 16px é sugestão, não regra. *Checa:* heurística; raio interno = externo − padding.
|
|
95
|
+
- **Moldura dupla em tudo.** Casca e núcleo com raio concêntrico aplicados a todo card, campo e grade. *Vício:* ruído; em campo de formulário, confunde o limite. *Libera:* mídia de destaque e hero, no registro premium. *Checa:* nunca em campo; heurística no resto.
|
|
96
|
+
- **Limite interativo invisível.** Borda de componente interativo (campo, botão contornado, card clicável) em linha fina abaixo de 3:1 (um preto a 5% sobre branco fica em 1.1:1), ou feita com `border.default`, que é decorativo, em vez do papel `semantic.border.control` (≥3:1). *Vício:* reprova o contraste de não-texto. *Libera:* nunca quando a borda é o único limite. *Checa:* **gate**.
|
|
97
|
+
- **Grão mal posto.** Ruído em contêiner que rola, ou grão via `feTurbulence` como textura decorativa. *Vício:* custo de pintura a cada quadro; lê como amador. *Libera:* grão estático numa camada fixa que não captura ponteiro; filtro SVG de distorção funcional (efeito que é a ideia, com orçamento de desempenho). *Checa:* heurística.
|
|
98
|
+
- **Ilustração de rascunho.** Cena em SVG estilo esboço, classes do tipo `doodle`, SVG decorativo desenhado à mão, SVG inline grande (acima de cerca de 64px ou mais que alguns caminhos) fazendo papel de ilustração. *Vício:* lê como amador e não é sistema. *Libera:* ilustração autoral real ou nenhuma; SVG de geometria exata (diagrama, forma, linha animada) é mídia legítima. *Checa:* heurística.
|
|
99
|
+
- **Máscara geométrica no lugar de contorno.** Círculo, polígono ou recorte radial aproximando a borda de um sujeito fotográfico; `clip-path` com muitos vértices onde devia haver um asset recortado. *Vício:* versão barata do efeito, pior que omitir. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção (a forma geométrica é a ideia declarada, não aproximação de contorno); o default é alfa real ou asset recortado. *Checa:* heurística.
|
|
100
|
+
- **Fisicalidade falsa.** Bisel, relevo, metal estampado ou giz feitos em CSS imitando material. *Vício:* fantasia de material. *Libera:* mundo que é de fato esse material, com asset real. *Checa:* heurística.
|
|
101
|
+
- **Imagem enterrada.** Asset com opacidade quase zero ou atrás de um véu. *Vício:* peso de download sem efeito visível. *Libera:* textura quase invisível pedida pela marca, com o peso dentro do orçamento, registrando a exceção. *Checa:* heurística.
|
|
102
|
+
- **Interface falsa.** Screenshot de produto montado com divs, interface de produto falsa no hero, rodapé de versão inventado dentro dele, crop de composição entregue como imagem final. *Vício:* mente sobre o produto. *Libera:* nunca com cara de real; preview com o componente real ou captura real. *Checa:* **gate** de honestidade.
|
|
103
|
+
- **Pílulas sobre imagens.** Tags e rótulos ("Marca · 02", "PRANCHA · MARCA") sobre fotos. *Vício:* cromo de template. *Libera:* a tag é informação real (preço, status). *Checa:* heurística.
|
|
104
|
+
- **Barra de pontuação com trilho.** Barras com trilho preenchido como comparação de qualidades. *Vício:* precisão falsa. *Libera:* dado real com escala declarada. *Checa:* gate de honestidade se o número for inventado.
|
|
105
|
+
- **Ícones genéricos em tiles.** Quadrado com ícone de biblioteca em cada feature. *Vício:* parede de igualdade. *Libera:* o ícone carrega informação. *Checa:* heurística.
|
|
106
|
+
- **Cursor customizado.** *Vício:* hostil a acessibilidade e a expectativa. *Libera:* default recusável só em Experienciar, quando o cursor é a obra: o cursor do sistema fica preservado sobre controles e texto, e com movimento reduzido não há atraso de seguimento (o cursor acompanha o ponteiro sem inércia). *Checa:* heurística.
|
|
107
|
+
- **z-index solto.** `z-50`, `9999` espalhados. *Vício:* camadas brigam e ninguém sabe a ordem. *Libera:* nunca. *Checa:* escala de camadas tokenizada, canônica em [superfície e profundidade](superficie-e-profundidade.md).
|
|
108
|
+
|
|
109
|
+
## Movimento
|
|
110
|
+
|
|
111
|
+
- **Mesma entrada em toda seção; hover espalhado.** *Vício:* movimento que não diz nada vira ruído. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção (repetição como linguagem declarada); o default é um momento autoral por superfície. *Checa:* heurística.
|
|
112
|
+
- **Truque como tese.** Fade-and-rise genérico, elevação no hover, camada de paralaxe ou revelação na rolagem apresentados como a ideia de movimento. *Vício:* é o default, não uma tese. *Libera:* quando servem a uma tese escrita (continuidade, foco, revelação com significado). *Checa:* heurística; movimento justificado numa frase ou cortado.
|
|
113
|
+
- **Mola e quique por reflexo.** Easing de bounce ou elastic sem gesto que o justifique. *Vício:* cartunesco, cansa. *Libera:* gesto físico, interrupção, mundo lúdico. *Checa:* heurística.
|
|
114
|
+
- **Loops perpétuos.** Pulso, máquina de escrever, flutuação, brilho passando, carrossel infinito em avatares, status e fundos; card que "respira" sem parar. *Vício:* distrai, cansa e viola a pausa de movimento automático. *Libera:* propósito declarado, com pausa visível quando o movimento automático dura mais de 5 segundos no total e roda junto com outro conteúdo (WCAG 2.2.2), parando fora da tela e desligado com movimento reduzido. *Checa:* **gate** para pausa e reduced motion; heurística para o propósito.
|
|
115
|
+
- **Conteúdo invisível por padrão.** Elementos começam com `opacity: 0` e só aparecem quando a animação roda. *Vício:* sem JS, com JS falhando ou com movimento reduzido, o conteúdo some. *Libera:* nunca. *Checa:* **gate**: conteúdo visível por padrão; revelação anima só com `prefers-reduced-motion: no-preference` e JS ativo.
|
|
116
|
+
- **Animar o caro.** Filtro (desfoque) animado na entrada; animar largura, altura, top, left, margens; `transition: all`. *Vício:* jank, custo em celular, propriedades animadas sem controle. *Libera:* custo medido no dispositivo-alvo e registrado como exceção (como a máscara no momento focal); o default é animar transform e opacity, listar as propriedades da transição e manter filtro estático. *Checa:* heurística de especificação.
|
|
117
|
+
- **Ouvinte de rolagem.** `addEventListener('scroll')` ou posição de rolagem em estado. *Vício:* custo a cada quadro. *Libera:* caso sem alternativa declarativa, com custo medido e exceção registrada. *Checa:* IntersectionObserver, animação ligada à rolagem com `@supports`, ou biblioteca que faz isso.
|
|
118
|
+
- **Banir easing linear ou ease-in-out por estética.** *Vício inverso:* a progressão contínua (scrub, barra de progresso) é linear por natureza. *Checa:* easing por propósito: entrada ease-out, saída ease-in e mais curta, progressão linear (ver [movimento](movimento.md)).
|
|
119
|
+
- **Pressionar que sobe.** `:active` com `translateY(-1px)`; elevação no hover como padrão de botão. *Vício:* contradiz a metáfora física. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção; o default é afundar (`translateY(1px)` ou `scale(.98)`), e com movimento reduzido não há deslocamento em caso algum. *Checa:* heurística.
|
|
120
|
+
- **Coreografia de carregamento em produto.** *Vício:* ninguém quer assistir à ferramenta carregar. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção, sem atrasar a tarefa; em Operar o default é skeleton sem coreografia. *Checa:* heurística.
|
|
121
|
+
- **Movimento prometido e não entregue (e o inverso).** Botão de MOVIMENTO alto declarado e página estática; ou movimento intenso num contrato que declarou movimento baixo. *Vício:* contrato que não corresponde à entrega. *Libera:* nunca, porque é verdade do contrato; ajuste o botão ao que será entregue. *Checa:* heurística.
|
|
122
|
+
- **Mais de um marquee por página.** *Vício:* ruído. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção; o default é no máximo um por página. *Checa:* heurística.
|
|
123
|
+
- **Ponteiro sem alternativa.** Botão magnético, rastro de imagem no hover, menu radial, inclinação com paralaxe sem equivalente por teclado e toque. *Vício:* função só para mouse. *Libera:* efeito puramente decorativo, com o controle acessível por baixo. *Checa:* gate de teclado.
|
|
124
|
+
- **Fixação dupla e pan sem saída.** O mesmo elemento fixado por CSS sticky e por fixação de biblioteca; pan horizontal sem fallback, que com movimento reduzido deixa cards fora da tela inalcançáveis. *Vício:* salto de layout; conteúdo perdido justamente para quem pediu menos movimento. *Libera:* nunca o pan sem caminho alcançável (acessibilidade); a fixação dupla é defeito a corrigir, não exceção de gosto. *Checa:* um mecanismo de fixação; pan com caminho nativo (rolagem com snap ou empilhamento) testado por teclado.
|
|
125
|
+
- **Sem movimento reduzido.** Qualquer nível do botão de movimento sem alternativa reduzida. *Vício:* conforto vestibular e preferência da pessoa ignorados. *Libera:* nunca. *Checa:* **gate**.
|
|
126
|
+
- **Omitir fallbacks.** Instrução de "não incluir fallbacks genéricos" (movimento reduzido, transparência reduzida, sem JS, forced colors). *Vício:* exclui quem mais precisa. *Libera:* nunca. *Checa:* **gate**.
|
|
127
|
+
|
|
128
|
+
## Conteúdo e copy
|
|
129
|
+
|
|
130
|
+
- **Rótulos genéricos.** Sim, Não, OK, Enviar. *Vício:* não dizem o que acontece. *Libera:* convenção da plataforma ou do sistema existente, registrando a exceção. *Checa:* heurística de texto; verbo mais objeto.
|
|
131
|
+
- **Placeholder como rótulo.** *Vício:* some ao digitar; contraste baixo. *Libera:* nunca. *Checa:* **gate** de estados de formulário.
|
|
132
|
+
- **Código como mensagem.** "Erro 500", "Algo deu errado" sem saída. *Vício:* não ajuda a recuperar. *Libera:* código em detalhe para o suporte, nunca como mensagem principal. *Checa:* heurística; matriz de estados.
|
|
133
|
+
- **Progresso inventado e trabalho falso.** Barra que anda sozinha; atraso encenado para parecer que o sistema "pensa". *Vício:* mente sobre o estado. *Libera:* nunca. *Checa:* **gate** de honestidade.
|
|
134
|
+
- **Piada em hora errada.** Humor em perda de dados, dinheiro, privacidade, acesso perdido ou trabalho bloqueado. *Vício:* trivializa o problema da pessoa. *Libera:* só por decisão explícita do dono sobre o tom, registrada; nunca por default. *Checa:* heurística.
|
|
135
|
+
- **Clichê gerado.** "Elevar", "sem atrito", "desbloquear", "próxima geração", *seamless*, *unleash* e a lista completa em [texto e conteúdo](texto-e-conteudo.md); rótulos poéticos; prova social ensaiada; humildade encenada; micro-frase meta; rótulos de etapa genéricos. *Vício:* soa como qualquer página. *Libera:* copy fornecida pelo dono nunca é reescrita. *Checa:* heurística só para copy gerada.
|
|
136
|
+
- **Cromo de metadado.** Rótulo de versão no hero, rodapé de versão em marketing, contador de estoque decorativo, faixa de cidade e clima, crédito de foto decorativo inventado, sub-rótulo "Marca · Nº 01", mais de um ponto médio por linha, "PALAVRA — fragmento", seta anexada a todo botão e link. *Vício:* simula densidade editorial ou atividade. *Libera:* informação real (lançamento real, estúdio distribuído real, fotógrafo real com permissão). *Checa:* heurística; gate de honestidade quando o dado é inventado.
|
|
137
|
+
- **CTAs de mesma intenção.** "Fale conosco" e "Vamos conversar" na mesma página. *Vício:* a pessoa pensa que são coisas diferentes. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção. *Checa:* um rótulo por intenção.
|
|
138
|
+
- **Nomes de template.** Acme, Nexus, SmartFlow, Cloudly; Fulano de Tal, *Jane Doe*. *Vício:* o mock se anuncia como mock, e mal. *Libera:* rótulo de exemplo explícito. *Checa:* heurística.
|
|
139
|
+
- **Fabricação com cara de real.** Depoimento, cliente, pessoa, logo de terceiro, métrica, preço, benchmark inventados; dado "orgânico" (47,2%, telefone realista) inventado para parecer medido; telefone discável sem rótulo ou e-mail fora de domínio reservado (ver [texto e conteúdo](texto-e-conteudo.md)). *Vício:* alegação falsa, risco legal, sobrevive até a produção. *Libera:* **não se libera**; mock rotulado entra na lista de substituição. *Checa:* **gate** de honestidade.
|
|
140
|
+
- **Imagem que mente.** Imagem gerada representando o produto real; picsum ou placeholder como entrega final; referência colhida em busca no entregável; foto de banco com pessoa identificável endossando produto. *Vício:* deturpa o produto e a licença. *Libera:* imagem gerada com consentimento, rotulada, para mood e textura. *Checa:* **gate**: proveniência e licença por asset.
|
|
141
|
+
- **"Nenhum resultado" sem orientação.** *Vício:* beco sem saída. *Libera:* superfície sem ação possível, que diz isso. *Checa:* matriz de estados (gate 6) e os [tipos de vazio](componentes-e-estados.md#estado-vazio).
|
|
142
|
+
- **Emoji como ícone ou default de copy.** *Vício:* não é sistema; leitura irregular por leitor de tela. *Libera:* voz lúdica, social ou de chat, com parcimônia, fora de ícones e `alt`. *Checa:* heurística.
|
|
143
|
+
- **Banir o travessão.** *Vício inverso:* em pt-BR o travessão é correto em diálogo e aposto, e o meia-risca é o caractere de intervalos; banir quebra a tipografia e a voz. *Checa:* pontuação por locale; a heurística contra travessão-muleta vale só para copy gerada.
|
|
144
|
+
- **Aspas retas.** Aspas do teclado no lugar das tipográficas. *Vício:* acabamento. *Libera:* código. *Checa:* heurística.
|
|
145
|
+
- **Dois registros na mesma página.** Manifesto num bloco, manual no seguinte. *Vício:* voz quebrada. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção. *Checa:* heurística.
|
|
146
|
+
- **Reescrever copy fornecida.** *Vício:* troca a voz do dono pela da ferramenta; pode mudar claim. *Libera:* pedido do dono; sem ele, a sugestão vai separada. *Checa:* heurística; perguntar antes de mudar claims.
|
|
147
|
+
|
|
148
|
+
## Produto
|
|
149
|
+
|
|
150
|
+
- **Movimento sem estado.** Animação decorativa em superfície operacional. *Vício:* atrasa quem trabalha. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção; em Operar o default é movimento só de estado e feedback. *Checa:* heurística.
|
|
151
|
+
- **Vocabulário inconsistente.** O mesmo controle com formas diferentes em telas diferentes. *Vício:* impede aprender. *Libera:* migração em curso com prazo e dono, registrando a exceção. *Checa:* heurística; componentes do sistema.
|
|
152
|
+
- **Affordance reinventada.** Barra de rolagem com comportamento próprio, controle de formulário estranho, modal fora do padrão. *Vício:* estranheza sem propósito. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção, desde que o comportamento continue acessível; a barra de rolagem pode ser tematizada na cor. *Checa:* heurística.
|
|
153
|
+
- **Spinner no meio do conteúdo.** *Vício:* esconde a forma do que vem e salta ao chegar. *Libera:* spinner inline na ação. *Checa:* matriz de estados.
|
|
154
|
+
- **Gráfico decorativo.** Sparkline, anel de progresso e retângulo com sombra suave no lugar de conteúdo. *Vício:* forma de dado sem dado. *Libera:* são dado (período, escala, valor, fonte). *Checa:* heurística; ver [dados e densidade](dados-e-densidade.md).
|
|
155
|
+
- **Navegação só com ícone.** *Vício:* reconhecimento vira memória. *Libera:* barra de ferramentas de especialista com tooltip e nome acessível, ícones universais. *Checa:* heurística.
|
|
156
|
+
- **Marketing no painel.** Hero, frase de campanha, sequência de entrada numa superfície operacional. *Vício:* erro de classificação. *Libera:* tela de boas-vindas no primeiro uso. *Checa:* heurística.
|
|
157
|
+
- **Estados faltando.** Componente com só o caminho feliz. *Vício:* a implementação inventa o resto. *Libera:* nunca, porque a decisão de estado é exigida por gate (integridade do contrato). *Checa:* **gate**: matriz de estados completa.
|
|
158
|
+
- **Motor de cards animados em dashboard.** Bento com cards que fazem loop infinito (lista que se reordena sozinha, digitação, indicador que respira, carrossel de dados) como padrão de SaaS. *Vício:* distração em superfície de trabalho; viola pausa de movimento. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção, com pausa e movimento reduzido (esses não se liberam). *Checa:* gate de pausa e reduced motion.
|
|
159
|
+
- **Tabela torta.** Status centralizado, números sem `tabular-nums` ou à esquerda, unidade repetida em cada célula, borda em cima e embaixo de toda linha. *Vício:* coluna difícil de varrer. *Libera:* convenção do sistema existente, registrando a exceção. *Checa:* especificação de tabela.
|
|
160
|
+
- **Toast para erro acionável.** *Vício:* some antes da ação e longe da causa, e quem precisa de mais tempo perde a mensagem. *Libera:* nunca (acessibilidade). *Checa:* matriz de estados.
|
|
161
|
+
- **Variar telas do mesmo produto.** *Vício:* quebra consistência. *Libera:* libera quando o brief ou a marca pedem, registrando a exceção; o default é consistência entre telas do mesmo fluxo. *Checa:* heurística.
|
|
162
|
+
|
|
163
|
+
## Nativo
|
|
164
|
+
|
|
165
|
+
- **iOS "portado de site".** Barra de navegação ou voltar customizados, gesto de borda desligado ou coberto, botões com cara de web, affordances de hover, glassmorphism à mão no lugar dos materiais do sistema, pilhas de cards em ajustes, ícones da web misturados com SF Symbols, tamanhos em pontos fixos no lugar de Dynamic Type, hex cru no lugar das cores semânticas. *Vício:* o usuário fluente para a cada controle fora do padrão. *Libera:* razão que o usuário agradeceria. *Checa:* heurística de conformidade; ver [adaptação](adaptacao.md).
|
|
166
|
+
- **Android "com pele de iOS".** Só barra inferior copiada do iPhone, voltar que ignora o gesto do sistema, switches e diálogos Cupertino, FABs empilhados, FAB em ação secundária, toast no lugar de snackbar, `px` no lugar de `sp`, sombras arbitrárias no lugar da elevação tonal. *Vício:* idem. *Libera:* idem. *Checa:* heurística de conformidade.
|
|
167
|
+
- **Celular esticado no tablet.** Barra inferior intocada, uma coluna ampliada. *Vício:* desperdício e desconforto. *Libera:* quando o brief limita o produto a uma coluna, registrando a exceção. *Checa:* estrutura por classe de tamanho.
|
|
168
|
+
- **Travar orientação para esconder defeito.** *Vício:* a pessoa perde a paisagem por um bug. *Libera:* tarefa que exige de fato. *Checa:* heurística.
|
|
169
|
+
|
|
170
|
+
## Sistema e tokens
|
|
171
|
+
|
|
172
|
+
- **Valor cru em componente.** Hex, px ou duração soltos no componente em vez de token. *Vício:* tema e manutenção quebram. *Libera:* nunca. *Checa:* gate de tokens (ver [sistema de tokens](sistema-de-tokens.md)).
|
|
173
|
+
- **Componente que pula o semântico.** Token de componente apontando direto para um primitivo. *Vício:* a troca de modo não alcança o componente. *Libera:* categorias declaradas como exceção (dimensões sem tema). *Checa:* o validador avisa.
|
|
174
|
+
- **Camadas achatadas na saída.** Gerador ou CSS que grava o valor resolvido em vez de referenciar o semântico. *Vício:* o modo escuro dos componentes quebra. *Libera:* nunca. *Checa:* trocar o modo e ver os tokens de componente seguirem.
|
|
175
|
+
- **Referência quebrada silenciosa.** Token que aponta para algo inexistente e cai num valor qualquer; token usado e não definido num dos modos. *Vício:* defeito vai para produção. *Libera:* nunca. *Checa:* **gate**: `python3 scripts/validar_tokens.py ARQUIVO.json` sai com 0.
|
|
176
|
+
- **Nomes divergentes.** Documentação com um esquema de nomes e código com outro. *Vício:* ninguém acha a variável. *Libera:* nunca. *Checa:* um esquema, gerado a partir da fonte.
|
|
177
|
+
- **Modo pela metade.** O modo escuro sobrescreve fundo e texto mas não primário, foco, status, sobreposição e superfícies elevadas; sobreposição literal igual nos dois temas. *Vício:* contraste não verificado no escuro. *Libera:* nunca. *Checa:* gate de contraste por modo.
|
|
178
|
+
- **Camadas misturadas.** Durações semânticas ou cores de status declaradas na camada primitiva. *Vício:* o tema não sabe o que sobrescrever. *Libera:* nunca. *Checa:* revisão do arquivo de tokens; o validador só confere a direção das referências, não o significado dos nomes.
|
|
179
|
+
- **Componente inventado.** O documento do sistema "sintetiza" componentes que o projeto não tem para ter algo a mostrar. *Vício:* especificação poluída por ficção. *Libera:* nunca; lista vazia declarada. *Checa:* heurística.
|
|
180
|
+
- **Regra normativa antes do build.** Documento do sistema definitivo escrito antes de a direção ser construída e testada. *Vício:* a regra passa a ser defendida contra a realidade. *Libera:* o documento provisório de direção (`direcao.md`), rotulado como provisório e promovido a documento do sistema depois do build (ver [documento do sistema](documento-do-sistema.md)). *Checa:* heurística.
|
|
181
|
+
- **Exemplo que ensina o vício.** Exemplo de tokens ou de documento com creme, serifa e terracota, botão em caixa alta espaçada, elevação no hover, brilho difuso. *Vício:* o exemplo é copiado. *Libera:* exemplo que é o sistema real do dono; fora disso, exemplos sintéticos e neutros. *Checa:* heurística.
|
|
182
|
+
- **Sem governança.** Sistema sem versão, sem changelog, sem depreciação com alias, sem dono; exceção sem dono e sem validade. *Vício:* tokens divergem com o tempo. *Libera:* nunca para sistema compartilhado. *Checa:* `$meta.version` semântico e seção de governança.
|
|
183
|
+
- **Dois sistemas ou sistema falsificado.** Dois design systems no mesmo projeto; recriar à mão o CSS de um pacote oficial; importar os tokens de um sistema para sobrescrever quase tudo; kit de componentes entregue no estado padrão sem a marca. *Vício:* custo dobrado e identidade de ninguém. *Libera:* nunca dois sistemas; pacote oficial quando a direção vem de um sistema existente, com o nome conferido no registro na hora. *Checa:* heurística.
|
|
184
|
+
- **Validador permissivo.** Checagem que isenta preto e branco puros, pula o arquivo global de estilos ou não olha utilitários arbitrários. *Vício:* falsa sensação de governança. *Libera:* nunca. *Checa:* heurística.
|
|
185
|
+
- **Corrigir deriva de passagem.** Ajustar o sistema como efeito colateral de outra tarefa. *Vício:* mudança sem dono nem registro. *Libera:* pedido explícito. *Checa:* deriva é relatada, não corrigida em silêncio.
|
|
186
|
+
- **Regra nascida de anedota.** "Na última vez saíram cinco kickers, então kicker está proibido." *Vício:* um incidente vira lei absoluta. *Libera:* quando a razão de design está escrita, a regra deixa de ser anedota. *Checa:* heurística.
|
|
187
|
+
- **Número mágico como lei.** Padding mínimo de seção, altura máxima de navegação, limite de palavras, contagem de eyebrows aplicados como reprovação automática. *Vício:* quebram em contextos legítimos. *Libera:* sempre como heurística com motivo e escape; gates são só os objetivos. *Checa:* ver [aceite e pré-voo](aceite-e-pre-voo.md).
|