@luanpdd/kit-mcp 1.31.0 → 1.33.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.
Files changed (30) hide show
  1. package/README.md +1 -1
  2. package/kit/COMPATIBILITY.md +5 -0
  3. package/kit/agents/designer-ui.md +216 -0
  4. package/kit/agents/supabase-auth-bootstrapper.md +15 -1
  5. package/kit/agents/supabase-auth-hook-writer.md +418 -0
  6. package/kit/agents/supabase-mfa-implementer.md +439 -0
  7. package/kit/agents/supabase-oauth-server-implementer.md +507 -0
  8. package/kit/agents/supabase-social-auth-implementer.md +451 -0
  9. package/kit/agents/supabase-sso-saml-architect.md +549 -0
  10. package/kit/commands/supabase.md +21 -1
  11. package/kit/file-manifest.json +29 -6
  12. package/kit/skills/supabase-auth-hardening/SKILL.md +674 -0
  13. package/kit/skills/supabase-auth-hooks/SKILL.md +875 -0
  14. package/kit/skills/supabase-auth-methods/SKILL.md +486 -0
  15. package/kit/skills/supabase-auth-sessions/SKILL.md +579 -0
  16. package/kit/skills/supabase-auth-ssr/SKILL.md +60 -14
  17. package/kit/skills/supabase-enterprise-sso-saml/SKILL.md +545 -0
  18. package/kit/skills/supabase-jwt-signing-keys/SKILL.md +399 -0
  19. package/kit/skills/supabase-mfa/SKILL.md +488 -0
  20. package/kit/skills/supabase-oauth-server/SKILL.md +537 -0
  21. package/kit/skills/supabase-social-oauth/SKILL.md +480 -0
  22. package/kit/skills/supabase-third-party-auth/SKILL.md +450 -0
  23. package/kit/skills/ui-anti-padroes-ia/SKILL.md +261 -0
  24. package/kit/skills/ui-contexto-produto/SKILL.md +248 -0
  25. package/kit/skills/ui-cor-estrategia/SKILL.md +213 -0
  26. package/kit/skills/ui-critica-auditoria/SKILL.md +260 -0
  27. package/kit/skills/ui-motion-funcional/SKILL.md +264 -0
  28. package/kit/skills/ui-ritmo-espacial/SKILL.md +259 -0
  29. package/kit/skills/ui-tipografia/SKILL.md +211 -0
  30. package/package.json +1 -1
@@ -0,0 +1,213 @@
1
+ ---
2
+ name: ui-cor-estrategia
3
+ description: Use ao definir paleta, decidir cor de elemento, ou auditar uso de cor — split 60% superfície / 30% secundária / 10% destaque, destaque reservado a elementos LISTADOS exatos, OKLCH preferido sobre HSL/HEX, contraste WCAG AA min 4.5:1, fugir da "paleta padrão IA" (roxo+mint+amarelo claro+gray uniforme), dark mode via tokens não duplicação.
4
+ ---
5
+
6
+ # UI — Estratégia de Cor
7
+
8
+ ## Quando usar
9
+
10
+ LLM carrega esta skill quando:
11
+
12
+ - "Que cor usar para CTA / link / button"
13
+ - "Definir paleta / color tokens"
14
+ - "Audit cor / muito colorido / parece genérico"
15
+ - "Adicionar dark mode"
16
+ - Preenchendo seção **Cores** de DESIGN.md
17
+ - Editando `globals.css :root` ou `tailwind.config` colors
18
+
19
+ ## Regras absolutas
20
+
21
+ **REGRA #1 (split 60/30/10):** Superfície dominante 60%, secundária 30%, destaque 10%. Mais que 10% de destaque = ruído, sinal perde força.
22
+
23
+ **REGRA #2 (lista de reserva do destaque):** A cor de destaque vai a uma lista DECLARADA de elementos. Ex: "destaque = apenas CTA primário + link de nav ativo". Tudo fora da lista vira superfície ou foreground neutro.
24
+
25
+ **REGRA #3 (OKLCH preferido):** Novos tokens em `oklch()`. Lightness é perceptualmente linear (HSL não é), o que torna dark mode + variants automáticos. HEX só em integrações legacy.
26
+
27
+ **REGRA #4 (AA 4.5:1 mínimo):** Contraste body em superfície ≥ 4.5:1. UI controls + interactive ≥ 3:1 (AA non-text). AAA opcional mas declare em MARCA.md.
28
+
29
+ **REGRA #5 (semântico ≠ paleta):** Tokens são semânticos (`--primary`, `--destructive`, `--muted`), não nome de cor (`--blue-500`). Trocar paleta = mudar 1 lugar.
30
+
31
+ ## Estrutura canônica de tokens
32
+
33
+ ```css
34
+ :root {
35
+ /* ─── Stack de superfície (60%) ─── */
36
+ --background: oklch(0.99 0 0); /* canvas */
37
+ --card: oklch(0.99 0 0); /* alias to background */
38
+ --popover: oklch(0.99 0 0);
39
+
40
+ /* ─── Foreground & secundária (30%) ─── */
41
+ --foreground: oklch(0.18 0 0); /* body text on background */
42
+ --muted: oklch(0.94 0.005 240); /* superfície secundária */
43
+ --muted-foreground: oklch(0.45 0 0); /* caption, helper text */
44
+ --border: oklch(0.90 0 0);
45
+ --input: oklch(0.90 0 0);
46
+ --ring: oklch(0.55 0.18 28); /* matches primary, focus ring */
47
+
48
+ /* ─── Destaque (10%) ─── */
49
+ --primary: oklch(0.55 0.18 28); /* THE brand color */
50
+ --primary-foreground: oklch(0.99 0 0);
51
+
52
+ /* ─── Semântico ─── */
53
+ --destructive: oklch(0.55 0.22 25); /* red-ish, irreversível */
54
+ --destructive-foreground: oklch(0.99 0 0);
55
+
56
+ /* ─── Opcional: success/warning ───
57
+ * Use com parcimônia. Sucesso/aviso são UX patterns,
58
+ * não brand. Use cor apenas quando ícone+texto não bastarem.
59
+ */
60
+ }
61
+
62
+ .dark {
63
+ --background: oklch(0.14 0 0);
64
+ --card: oklch(0.16 0 0); /* slight lift */
65
+ --foreground: oklch(0.96 0 0);
66
+ --muted: oklch(0.20 0.005 240);
67
+ --muted-foreground: oklch(0.65 0 0);
68
+ --border: oklch(0.24 0 0);
69
+ --primary: oklch(0.65 0.15 28); /* shift saturation down + L up */
70
+ }
71
+ ```
72
+
73
+ ## Lista de reserva do destaque — patterns
74
+
75
+ Em DESIGN.md > Cores, declare a lista EXATA:
76
+
77
+ ```markdown
78
+ ## Cores
79
+ - Destaque (10%) — `--primary` — reservada para:
80
+ - CTA primário (exatamente um por tela)
81
+ - Underline de link de nav ativo
82
+ - Estado selecionado de toggle/tab
83
+ - Focus ring em inputs (via `--ring`)
84
+ - Logo da marca
85
+ - Destrutiva — `--destructive` — reservada para:
86
+ - Botão de confirmação final "Deletar X"
87
+ - Variante destrutiva de toast
88
+ ```
89
+
90
+ Tudo FORA dessa lista usa `--foreground` ou `--muted-foreground`. Inclui:
91
+
92
+ - Botões secundários → `bg-secondary` (= `--muted`) + `text-foreground`
93
+ - Ícones de UI geral → `text-muted-foreground`
94
+ - Links em prose → `text-foreground underline` (não destaque)
95
+ - Badges decorativos → `bg-muted text-muted-foreground`
96
+
97
+ ## Padrões anti-rainbow
98
+
99
+ Em produto (não marca), use **monocromático + 1 destaque**:
100
+ - Stack de superfície: 4 tons neutros (background, card lift, muted, border)
101
+ - Stack de foreground: 2 tons (foreground, muted-foreground)
102
+ - Destaque: 1 cor única + sua foreground complementar
103
+
104
+ Total: ~8 tokens distintos. Paleta rainbow (10+ cores) é sinal de tell T09.
105
+
106
+ ## Status colors — usar com parcimônia
107
+
108
+ ```css
109
+ /* SOMENTE se ícone + label não bastarem */
110
+ --success: oklch(0.55 0.15 145); /* green */
111
+ --warning: oklch(0.75 0.15 75); /* amber, não yellow saturado */
112
+ --info: oklch(0.55 0.15 240); /* blue */
113
+ ```
114
+
115
+ Status colors quebram o split 60/30/10. Use só em:
116
+ - Toast variants (feedback nível sistema)
117
+ - Form inline validation (ícone + label é primário, cor é reforço)
118
+
119
+ NÃO use status colors em:
120
+ - Card backgrounds para "tipo de item" (vira card com borda lateral colorida T05)
121
+ - Texto em botão para indicar significado (texto faz isso)
122
+
123
+ ## Verificação de contraste
124
+
125
+ ```bash
126
+ # tooling local
127
+ npx pa11y http://localhost:3000 --standard WCAG2AA
128
+
129
+ # CSS-only check em dev: outline elements abaixo de 4.5:1
130
+ # (snippet em CLAUDE.md ou globals.css dev)
131
+ ```
132
+
133
+ Mínimos:
134
+ - `--foreground` em `--background`: ≥ 4.5:1
135
+ - `--muted-foreground` em `--background`: ≥ 4.5:1 (ela é caption mas é texto)
136
+ - `--primary-foreground` em `--primary`: ≥ 4.5:1
137
+ - Buttons disabled state: ≥ 3:1 (UI control non-text)
138
+
139
+ Combo failing comum: `text-gray-400` em `bg-gray-100` → ~3.2:1, AA fail.
140
+
141
+ ## Anti-patterns
142
+
143
+ ### Anti-pattern 1: paleta IA padrão (roxo + mint + amarelo + gray)
144
+
145
+ **Errado:**
146
+ ```css
147
+ --primary: #6366F1; /* indigo */
148
+ --secondary: #10B981; /* mint */
149
+ --accent: #FBBF24; /* yellow */
150
+ --neutral: #64748B; /* slate */
151
+ ```
152
+
153
+ **Por quê:** T09 — esta é a paleta que aparece em Lovable, v0, Bolt, Replit default. Cliente identifica instantaneamente.
154
+
155
+ **Certo:** derive de MARCA.md anti-referência. Se anti-ref é "Lovable default", adote monocromático + 1 destaque warm (terra cota, ocre, ferrugem) OU 1 destaque cool fora do espectro indigo (ciano profundo, verde-azulado oxidado).
156
+
157
+ ### Anti-pattern 2: usar HEX em token novo
158
+
159
+ **Errado:** `--primary: #4F46E5;`
160
+
161
+ **Por quê:** REGRA #3 — HSL/HEX não são perceptualmente uniformes. Lightness não corresponde a brilho percebido. Dark mode + states (hover/active) viram tentativa-e-erro.
162
+
163
+ **Certo:** `--primary: oklch(0.55 0.18 270);` — agora `oklch(0.45 ...)` é "mais escuro de forma percebida".
164
+
165
+ ### Anti-pattern 3: rainbow status no dashboard
166
+
167
+ **Errado:** cada card de stats com cor diferente — sales verde, churn vermelho, revenue azul, MRR roxo.
168
+
169
+ **Por quê:** REGRA #1 quebrada — 4 destaques em 1 tela = caos. Sinal perde força.
170
+
171
+ **Certo:** todos os números em foreground neutro. Apenas o número "preocupante" (churn alto) ganha destructive color. Tendências (up/down) via ícone arrow + sinal +/−, não cor.
172
+
173
+ ### Anti-pattern 4: dark mode duplicando tokens
174
+
175
+ **Errado:**
176
+ ```css
177
+ :root.dark {
178
+ --primary-dark: #818CF8;
179
+ --background-dark: #0F172A;
180
+ }
181
+ /* uso: bg-[var(--primary-dark)] em .dark, manual */
182
+ ```
183
+
184
+ **Por quê:** REGRA #5 — tokens devem ser semânticos. `--primary` muda valor entre `:root` e `.dark`, não nome. Senão toda regra de CSS precisa branch.
185
+
186
+ **Certo:**
187
+ ```css
188
+ :root { --primary: oklch(0.55 0.18 28); }
189
+ .dark { --primary: oklch(0.65 0.15 28); }
190
+ /* uso único: bg-[var(--primary)] sempre */
191
+ ```
192
+
193
+ ### Anti-pattern 5: destaque em link de body
194
+
195
+ **Errado:**
196
+ ```tsx
197
+ <p>Leia mais em nossa <a className="text-primary">documentação</a></p>
198
+ ```
199
+
200
+ **Por quê:** REGRA #2 — destaque reservado a CTA primário. Espalhado em prose vira ruído + dilui sinal de "esta é A ação".
201
+
202
+ **Certo:**
203
+ ```tsx
204
+ <p>Leia mais em nossa <a className="text-foreground underline underline-offset-4 hover:text-primary">documentação</a></p>
205
+ ```
206
+ Hover pode revelar destaque, default fica no foreground.
207
+
208
+ ## Ver também
209
+
210
+ - [ui-anti-padroes-ia](../ui-anti-padroes-ia/SKILL.md) — T01 (gradiente roxo), T05 (card borda lateral), T09 (paleta IA), Q04 (contraste baixo)
211
+ - [ui-contexto-produto](../ui-contexto-produto/SKILL.md) — seção Cores do DESIGN.md
212
+ - [ui-tipografia](../ui-tipografia/SKILL.md) — hierarquia usa peso + cor
213
+ - OKLCH playground: https://oklch.com/
@@ -0,0 +1,260 @@
1
+ ---
2
+ name: ui-critica-auditoria
3
+ description: Use ao revisar UI implementada — combina crítica (Nielsen 10 heurísticas 0-4 + carga cognitiva /8 + verdict de tells-IA pass/fail) e auditoria (5 dimensões a11y/perf/theming/responsive/anti-patterns com P0-P3 severity). Produz REVISAO-UI.md scored, routes findings para endurecer/polir/otimizar. Não roda em incomplete work — só em finished pages.
4
+ ---
5
+
6
+ # UI — Crítica & Auditoria
7
+
8
+ ## Quando usar
9
+
10
+ LLM carrega esta skill quando:
11
+
12
+ - "Audite design / revise UI / está bom?"
13
+ - "Está pronto para ship?"
14
+ - "Score this design / quão ruim é o tell de IA?"
15
+ - Antes de release de feature visível
16
+ - Em PR de mudança visual significativa
17
+
18
+ **NÃO use em:**
19
+ - Work-in-progress (vai pontuar mal porque incompleto, não porque ruim)
20
+ - Componente isolado fora de página real
21
+ - Code-only review (precisa ver rendered)
22
+
23
+ ## Regras absolutas
24
+
25
+ **REGRA #1 (duas passadas independentes):** Rode **crítica** (LLM + heurísticas, subjetivo) E **auditoria** (5 dimensões, determinístico) **separadamente**. Não bias um pelo outro. Findings convergentes têm peso 2×.
26
+
27
+ **REGRA #2 (P0-P3 severity definida):**
28
+ - **P0** — Bloqueia release (a11y crítica, tell-IA deal-breaker, UX quebrado)
29
+ - **P1** — Resolver neste sprint (gaps notáveis, tell parcial)
30
+ - **P2** — Próximo ciclo (refinamento)
31
+ - **P3** — Polimento (nice-to-have)
32
+
33
+ **REGRA #3 (score antes da opinião):** Heuristic scores são numéricos (0-4), prioridade de fixes é opinião. Cliente pode discordar de prioridade, não de score.
34
+
35
+ **REGRA #4 (route, don't fix):** Auditoria documenta, não corrige. Findings vão para:
36
+ - a11y, contrast → `ui-cor-estrategia` + endurecer phase
37
+ - tells de IA → `ui-anti-padroes-ia` patches
38
+ - Performance → otimizar phase
39
+ - Typography → `ui-tipografia` refactor
40
+
41
+ ## Passada Crítica — Nielsen 10 (0-4 cada)
42
+
43
+ | # | Heurística | Como medir |
44
+ |---|-----------|------------|
45
+ | 1 | Visibility of system status | Loading states? Optimistic UI? Toast feedback? |
46
+ | 2 | Match with real world | Vocabulário do domínio? Ícones reconhecíveis? Locale-aware? |
47
+ | 3 | User control & freedom | Undo? Cancel em modais? Botão back claro? Confirm em destrutivo? |
48
+ | 4 | Consistency & standards | Mesmo padrão de botão em todas telas? CTAs consistentes? |
49
+ | 5 | Error prevention | Validation inline? Confirm em destrutivo? Disable em estado inválido? |
50
+ | 6 | Recognition over recall | Labels visíveis vs precisar lembrar? Recent items? Autocomplete? |
51
+ | 7 | Flexibility & efficiency | Keyboard shortcuts? Power-user paths? Bulk actions? |
52
+ | 8 | Aesthetic & minimalist | Algo na tela não é essencial? Card aninhado? Decoração gratuita? |
53
+ | 9 | Help users recognize errors | Mensagem específica + recovery action? Não "Something went wrong" genérico? |
54
+ | 10 | Help & documentation | Inline help em fields complexos? Empty state ensina? Onboarding presente? |
55
+
56
+ **Scoring:**
57
+ - 4 — Excelente, supera expectativa
58
+ - 3 — Bom, alguns gaps menores
59
+ - 2 — Cumprido parcialmente, gaps notáveis
60
+ - 1 — Falha na maioria dos cenários
61
+ - 0 — Ausente / quebrado
62
+
63
+ ## Passada Crítica — Carga cognitiva (/8)
64
+
65
+ Conte falhas. Para cada uma, +1 ao counter:
66
+
67
+ 1. Mais de 7±2 elementos competindo por atenção em viewport inicial?
68
+ 2. Hierarquia visual ambígua (qual é a ação primária)?
69
+ 3. Vocabulary mismatch (jargão técnico em UI consumer)?
70
+ 4. Decisões prematuras pedidas (escolha de plano antes de ver valor)?
71
+ 5. Estado escondido (qual aba está ativa? qual filtro aplicado?)?
72
+ 6. Confirmação ausente em destrutivo, ou excessiva em trivial?
73
+ 7. Loading sem progress signal em > 1s waits?
74
+ 8. Layout shift visível durante load (CLS > 0.1)?
75
+
76
+ Score: 0-2 falhas = bom, 3-4 = preocupante, 5+ = redesign.
77
+
78
+ ## Passada Crítica — Verdict de Tells-IA (pass/fail)
79
+
80
+ Rode o detector da skill [ui-anti-padroes-ia](../ui-anti-padroes-ia/SKILL.md). Verdict:
81
+
82
+ - **PASS** — zero P0, ≤ 2 P1 com justificativa em DESIGN.md
83
+ - **MARGINAL** — 1 P0 OU > 2 P1
84
+ - **FAIL** — ≥ 2 P0 OU padrão sistêmico de tells
85
+
86
+ Liste os tells específicos: `verdict: FAIL · gradiente-roxo · italic-serif-hero · card-aninhado`.
87
+
88
+ ## Passada Auditoria — 5 dimensões (0-4 cada)
89
+
90
+ ### D1 Accessibility (0-4)
91
+
92
+ Check:
93
+ - [ ] WCAG AA contrast pass para foreground/background pairs (`npx pa11y`)
94
+ - [ ] Todo input tem `<label>` ou `aria-label`
95
+ - [ ] Botão de ícone sem texto tem `aria-label`
96
+ - [ ] Keyboard nav: Tab order lógico, focus visible
97
+ - [ ] Semantic HTML (`<button>` não `<div onClick>`)
98
+ - [ ] Skip-to-content em layouts longos
99
+
100
+ ### D2 Performance (0-4)
101
+
102
+ Check:
103
+ - [ ] LCP < 2.5s (Lighthouse mobile)
104
+ - [ ] CLS < 0.1
105
+ - [ ] Bundle JS first-load < 200KB gzipped
106
+ - [ ] Imagens com `loading="lazy"` e dimensions
107
+ - [ ] Sem layout-thrashing animations (height/width transitions)
108
+ - [ ] Lighthouse Perf score ≥ 90
109
+
110
+ ### D3 Theming (0-4)
111
+
112
+ Check:
113
+ - [ ] Zero HEX/RGB hard-coded em components (use tokens)
114
+ - [ ] Dark mode covered (se declarado em MARCA.md)
115
+ - [ ] Tokens semânticos não nomes de cor (`--primary`, não `--blue-500`)
116
+ - [ ] Sem `!important` em styles
117
+ - [ ] CSS custom properties consistentes entre `:root` e `.dark`
118
+
119
+ ### D4 Responsive (0-4)
120
+
121
+ Check:
122
+ - [ ] Breakpoints: mobile (375), tablet (768), desktop (1024+) todos testados
123
+ - [ ] Touch targets ≥ 44×44 em mobile
124
+ - [ ] Horizontal scroll só em data tables (nunca em layout)
125
+ - [ ] Texto reflow em narrow (não cortado, não overflow)
126
+ - [ ] Hover-only interactions têm equivalente touch
127
+
128
+ ### D5 Anti-patterns (0-4)
129
+
130
+ Rode o detector da [ui-anti-padroes-ia](../ui-anti-padroes-ia/SKILL.md). Score:
131
+ - 4 = zero P0/P1
132
+ - 3 = 1 P1 documentado
133
+ - 2 = 2-3 P1 OU 1 P0 documentado
134
+ - 1 = ≥ 2 P0
135
+ - 0 = sistêmico
136
+
137
+ ## Output — REVISAO-UI.md
138
+
139
+ ```markdown
140
+ # Revisão de UI — {nome da feature/página}
141
+
142
+ **Revisado:** {data}
143
+ **Revisor:** designer-ui (kit)
144
+ **Registro:** {marca | produto}
145
+ **Baseline:** {DESIGN.md path | abstract defaults}
146
+
147
+ ---
148
+
149
+ ## TL;DR
150
+
151
+ **Verdict tells-IA:** {PASS | MARGINAL | FAIL} — {tells}
152
+ **Crítica total:** {soma dos 10 Nielsen}/40
153
+ **Carga cognitiva:** {N}/8 falhas
154
+ **Auditoria total:** {soma das 5 dimensões}/20
155
+
156
+ **Recomendação:** {SHIP | FIX-P0-PRIMEIRO | REWORK}
157
+
158
+ ---
159
+
160
+ ## Passada Crítica
161
+
162
+ ### Nielsen Heuristics
163
+
164
+ | # | Heurística | Score | Key issue |
165
+ |---|-----------|-------|-----------|
166
+ | 1 | Visibility of status | {0-4} | {linha resumo} |
167
+ | 2 | Match with real world | {0-4} | … |
168
+ | 3 | User control | {0-4} | … |
169
+ | … | … | … | … |
170
+
171
+ **Subtotal:** {N}/40
172
+
173
+ ### Falhas de Carga Cognitiva: {N}/8
174
+
175
+ {lista de falhas com referência arquivo:linha}
176
+
177
+ ### Tells-IA detectados
178
+
179
+ {cole output do detector se houver hits}
180
+
181
+ ---
182
+
183
+ ## Passada Auditoria
184
+
185
+ | Dimensão | Score | P0 | P1 | P2 | P3 |
186
+ |-----------|-------|----|----|----|----|
187
+ | Accessibility | {0-4} | … | … | … | … |
188
+ | Performance | {0-4} | … | … | … | … |
189
+ | Theming | {0-4} | … | … | … | … |
190
+ | Responsive | {0-4} | … | … | … | … |
191
+ | Anti-patterns | {0-4} | … | … | … | … |
192
+
193
+ **Subtotal:** {N}/20
194
+
195
+ ---
196
+
197
+ ## Top 5 Priority Issues
198
+
199
+ 1. **[P0]** {issue} — `{file:line}` — {fix opinion (route para qual skill)}
200
+ 2. **[P0]** … — … — …
201
+ 3. **[P1]** … — … — …
202
+ 4. **[P1]** … — … — …
203
+ 5. **[P2]** … — … — …
204
+
205
+ ---
206
+
207
+ ## Perguntas Provocativas
208
+
209
+ (Questões "vale responder antes de shippar")
210
+
211
+ 1. {ex: "Esta tela funciona em mobile com 1 mão? Você testou?"}
212
+ 2. {ex: "O empty state ensina o usuário ou só diz 'No data'?"}
213
+ 3. {ex: "Qual é a UMA ação que esta página existe para promover?"}
214
+
215
+ ---
216
+
217
+ ## Routing
218
+
219
+ - P0/P1 a11y → `ui-cor-estrategia` + endurecer phase
220
+ - P0/P1 tells → `ui-anti-padroes-ia` patches inline
221
+ - Performance → otimizar phase
222
+ - Typography → `ui-tipografia` audit
223
+ - Layout → `ui-ritmo-espacial` audit
224
+ ```
225
+
226
+ ## Anti-patterns DESTA skill
227
+
228
+ ### Anti-pattern 1: review em WIP
229
+
230
+ **Errado:** rodar audit em página com placeholders, lorem ipsum, estados não implementados.
231
+
232
+ **Por quê:** "incomplete work scores badly because it is not done, not because it is bad". Cliente acha que tem problema de design quando é só falta acabar.
233
+
234
+ **Certo:** audit apenas em features completas. Para WIP use `ui-anti-padroes-ia` detector preventivo + checklist visual sem score.
235
+
236
+ ### Anti-pattern 2: misturar crítica e auditoria
237
+
238
+ **Errado:** rodar Nielsen + dimensões juntos, score combinado.
239
+
240
+ **Por quê:** REGRA #1 — bias mútuo. LLM sabendo que tem tell-IA ajusta Nielsen down. Detector sabendo que Nielsen está alto sub-conta.
241
+
242
+ **Certo:** dois reviews separados, mesclar findings no REVISAO-UI.md no fim.
243
+
244
+ ### Anti-pattern 3: prioridade sem evidência
245
+
246
+ **Errado:** "Priority 1: fix the gradient" sem citar arquivo, sem dizer por quê P0.
247
+
248
+ **Por quê:** Não acionável. Outro dev não sabe onde fixar nem se realmente é P0.
249
+
250
+ **Certo:** "**[P0]** Hero gradiente roxo (`Hero.tsx:42-48`) — T01 tell-IA, ship blocker. Fix: replace `bg-gradient-to-br from-purple-500 to-pink-500` with `bg-primary` per DESIGN.md > Cores > Destaque."
251
+
252
+ ## Ver também
253
+
254
+ - [ui-anti-padroes-ia](../ui-anti-padroes-ia/SKILL.md) — feeds verdict de tells-IA + D5
255
+ - [ui-contexto-produto](../ui-contexto-produto/SKILL.md) — baseline para audit
256
+ - [ui-cor-estrategia](../ui-cor-estrategia/SKILL.md) — fixes para D1/D3
257
+ - [ui-tipografia](../ui-tipografia/SKILL.md) — fixes para typography findings
258
+ - [ui-ritmo-espacial](../ui-ritmo-espacial/SKILL.md) — fixes para D4 responsive
259
+ - [ui-motion-funcional](../ui-motion-funcional/SKILL.md) — motion review
260
+ - Nielsen 10 heuristics: https://www.nngroup.com/articles/ten-usability-heuristics/