@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,261 @@
1
+ ---
2
+ name: ui-anti-padroes-ia
3
+ description: Use ao gerar ou revisar UI — catálogo das 18 regras determinísticas que delatam "UI gerada por IA". Categorias Tells-IA (gradiente roxo, card aninhado, monocultura Inter, hero italic-serif, rótulo uppercase decorativo, texto com gradiente, card de borda lateral colorida) e Qualidade (cramped padding, touch < 44px, body flush ao edge, gray-on-colored). Cada regra com grep determinístico para detecção CI-friendly.
4
+ ---
5
+
6
+ # UI — Anti-padrões IA
7
+
8
+ ## Quando usar
9
+
10
+ LLM carrega esta skill quando:
11
+
12
+ - "Gerar componente / página / layout" (preventivo)
13
+ - "Esse design parece gerado por IA" / "tem cara de Lovable / Bolt / v0 / Replit"
14
+ - "Audite design / verifique tells / detect anti-patterns"
15
+ - "Faça crítica ou auditoria"
16
+ - Antes de declarar feature de UI pronta
17
+
18
+ ## Regras absolutas
19
+
20
+ **REGRA #1 (zero P0 antes do ship):** Itens marcados P0 abaixo são deal-breakers. Nenhuma feature merge sem todos os P0 zerados ou justificados em DESIGN.md > Faça/Não faça como override consciente.
21
+
22
+ **REGRA #2 (determinístico primeiro):** Anti-pattern só vira regra desta skill se for grepável. Subjetivos vão para [ui-critica-auditoria](../ui-critica-auditoria/SKILL.md).
23
+
24
+ **REGRA #3 (contexto marca vs produto):** Algumas regras suavizam em marca (gradiente sutil ok), endurecem em produto (zero gradiente). Sempre cite o registro ao classificar.
25
+
26
+ ## Catálogo — Tells-IA (deal-breakers)
27
+
28
+ ### T01 — Gradientes roxo/violeta (P0)
29
+
30
+ **Tell:** Hero ou CTA com gradiente roxo→rosa, ou roxo→azul. Marca registrada de defaults de modelos 2023-2024.
31
+
32
+ ```bash
33
+ grep -rnE "from-(purple|violet|indigo|fuchsia)-[0-9]+ +to-(purple|violet|indigo|pink|fuchsia)-|bg-gradient-to-[a-z]+ +from-(purple|violet)" src 2>/dev/null
34
+ ```
35
+
36
+ Fix: troque por destaque sólido único OU gradiente brand-específico em duas cores warm/neutras (nunca purple→pink).
37
+
38
+ ### T02 — Texto com gradiente (P0)
39
+
40
+ **Tell:** Heading com `bg-clip-text text-transparent` + gradiente.
41
+
42
+ ```bash
43
+ grep -rnE "bg-clip-text.*text-transparent|background-clip:\s*text" src 2>/dev/null
44
+ ```
45
+
46
+ Fix: texto sólido em foreground. Se quer ênfase, peso + tamanho, nunca gradiente.
47
+
48
+ ### T03 — Hero com display italic-serif (P0)
49
+
50
+ **Tell:** `<h1>` em italic + serif gigante. "Build *beautiful* products".
51
+
52
+ ```bash
53
+ grep -rnE "<h1[^>]*\b(italic|font-serif)\b[^>]*>" src --include="*.tsx" --include="*.jsx" 2>/dev/null
54
+ ```
55
+
56
+ Fix: display em grotesk ou regular serif (não italic). Italic só em palavra-chave inline pontual, não 100% do heading.
57
+
58
+ ### T04 — Rótulo uppercase decorativo acima do hero (P0)
59
+
60
+ **Tell:** "NEW FEATURE • SHIPPED" — chip pequeno uppercase + tracking-wider acima do H1.
61
+
62
+ ```bash
63
+ grep -rnE "uppercase.*tracking-(wider|widest)|text-xs.*uppercase.*tracking" src --include="*.tsx" --include="*.jsx" 2>/dev/null
64
+ ```
65
+
66
+ Fix: remova. Se tem realmente um anúncio, use banner topo de página ou badge inline pequeno, não decorativo acima do heading.
67
+
68
+ ### T05 — Card com borda lateral colorida (P0)
69
+
70
+ **Tell:** Card com `border-l-4 border-blue-500 bg-blue-50`. Visual de "tab indicator" em todo card.
71
+
72
+ ```bash
73
+ grep -rnE "border-l-[2-8].*bg-(blue|green|yellow|red|purple)-(50|100)" src 2>/dev/null
74
+ ```
75
+
76
+ Fix: remova a borda lateral. Se realmente precisa categorizar, use badge de cor ou ícone, não barra vertical.
77
+
78
+ ### T06 — Card aninhado (P1)
79
+
80
+ **Tell:** Card dentro de card. `<Card><Card>...</Card></Card>` ou seção inteira embrulhada em card só porque "fica organizado".
81
+
82
+ ```bash
83
+ grep -rln "<Card" src --include="*.tsx" 2>/dev/null | while read f; do
84
+ count=$(grep -c "<Card" "$f")
85
+ [ "$count" -gt 3 ] && echo "$f: $count Card refs"
86
+ done
87
+ ```
88
+
89
+ Fix: cards são para itens discretos em lista. Section containers usam padding + border-top divider, nunca card.
90
+
91
+ ### T07 — Monocultura Inter (P1)
92
+
93
+ **Tell:** Inter como única fonte do projeto.
94
+
95
+ ```bash
96
+ grep -rE "font-family.*Inter|font-Inter|--font.*Inter" src --include="*.css" --include="*.ts" --include="*.tsx" 2>/dev/null | head -5
97
+ ```
98
+
99
+ Fix: combine pelo menos display + body distintos. Display em Söhne, Söhne Breit, Roobert, Inter Display (variante!), Avenir, ou um humanist serif. Inter pode ficar só no body se inevitável.
100
+
101
+ ### T08 — Monocultura de fontes saturadas (P1)
102
+
103
+ **Tell:** projeto adota uma das fontes "saturadas 2024-2026" como display:
104
+
105
+ ```bash
106
+ grep -rohE "(Fraunces|Geist|Mona Sans|Plus Jakarta Sans|Space Grotesk|Recoleta|Instrument Sans)" \
107
+ src --include="*.ts*" --include="*.css" 2>/dev/null | sort | uniq -c
108
+ ```
109
+
110
+ Fix: use foundry independente (Klim, Pangram, Grilli, Lineto, Commercial Type, ABC Dinamo) ou pareça com a personalidade do MARCA.md.
111
+
112
+ ### T09 — Paleta IA genérica (P1)
113
+
114
+ **Tell:** roxo + verde mint + amarelo claro + cinza neutro. A "paleta padrão de IA".
115
+
116
+ Sinal: olhar `tailwind.config.*` `globals.css` por paleta OKLCH com cromaticidade muito uniforme em ~5-6 cores. Heurística humana — esta regra **não** é puramente grepável, mas o ponto de partida é:
117
+
118
+ ```bash
119
+ grep -rnE "oklch\([^)]+\)" src --include="*.css" 2>/dev/null | wc -l
120
+ ```
121
+
122
+ Se > 30 cores definidas com chroma similar, suspeitar.
123
+
124
+ Fix: derive paleta de ANTI-REFERÊNCIA em MARCA.md. Ex: "parece com Lovable default" → adotar paleta editorial monocromática + 1 destaque.
125
+
126
+ ### T10 — Stack glassmorphism (P1)
127
+
128
+ **Tell:** múltiplas camadas de `backdrop-blur` + `bg-white/10` + `border-white/20`. Volta dos mortos do iOS 7.
129
+
130
+ ```bash
131
+ grep -rnE "backdrop-blur.*bg-(white|black)/[0-9]+.*border-(white|black)/" src 2>/dev/null
132
+ ```
133
+
134
+ Fix: max 1 camada com backdrop-blur (header sticky talvez). Senão, superfície sólida.
135
+
136
+ ## Catálogo — Qualidade (regardless of source)
137
+
138
+ ### Q01 — Touch targets < 44px (P0 a11y)
139
+
140
+ ```bash
141
+ grep -rnE "(h-[1-9]|size-[1-9])\b[^0-9].*onClick|button.*h-[1-9]\b" src --include="*.tsx" 2>/dev/null
142
+ ```
143
+
144
+ Min 44×44 px (≈ `h-11 w-11` em Tailwind base 4px). Apertado em produto ok mas nunca < 44.
145
+
146
+ ### Q02 — Body flush ao viewport edge (P0)
147
+
148
+ ```bash
149
+ grep -rnE "main[^>]*p-0|<body[^>]*p-0|class=[\"'][^\"']*(px-0)\b" src 2>/dev/null
150
+ ```
151
+
152
+ Fix: sempre `px-4` (mobile) → `px-6` (tablet) → `px-8` (desktop) no min. Texto encostando viewport = sem ar para respirar.
153
+
154
+ ### Q03 — Cores hard-coded (P1)
155
+
156
+ ```bash
157
+ grep -rnE "#[0-9a-fA-F]{3,8}\b|\brgb\(|\bhsl\(" \
158
+ src --include="*.tsx" --include="*.jsx" 2>/dev/null | \
159
+ grep -vE "var\(--|tw-|theme\("
160
+ ```
161
+
162
+ Fix: substitua por token (`text-foreground`, `bg-primary`, `border-border`). Aceitável apenas em SVG ilustrativo.
163
+
164
+ ### Q04 — Botão estilizado com contraste baixo (P0 a11y)
165
+
166
+ Custom `<button>` com `bg-*-300` + `text-white` ou `bg-*-200` + `text-*-400`. Falha 4.5:1.
167
+
168
+ ```bash
169
+ grep -rnE "<button[^>]*bg-[a-z]+-([1-3]00)\b" src --include="*.tsx" 2>/dev/null
170
+ ```
171
+
172
+ Fix: use shadcn variants (`default`, `secondary`, `destructive`) que já passam contraste, ou rode contraste com `npx pa11y` localmente.
173
+
174
+ ### Q05 — Anchor com herança silenciosa (P1)
175
+
176
+ `<a>` sem cor explícita, herda do parent. Em `text-muted-foreground` parent → link visível como texto normal.
177
+
178
+ ```bash
179
+ grep -rn "<a " src --include="*.tsx" 2>/dev/null | grep -v "className"
180
+ ```
181
+
182
+ Fix: todo `<a>` em conteúdo tem `text-primary underline-offset-4 hover:underline` ou similar.
183
+
184
+ ### Q06 — Padding cramped (P1)
185
+
186
+ `p-1`, `p-2`, `px-2 py-1` em botão importante. Cramped em interactive = hit area pequena + densidade desconfortável.
187
+
188
+ ```bash
189
+ grep -rnE "<button[^>]*\bp[xy]?-(1|2)\b|<Button[^>]*\bp[xy]?-(1|2)\b" src --include="*.tsx" 2>/dev/null
190
+ ```
191
+
192
+ Fix: min `px-4 py-2` em botões; `px-3 py-1.5` só em badges/chips.
193
+
194
+ ### Q07 — Pular nível de heading (h1 → h3) (P1 a11y)
195
+
196
+ Pula nível semântico, screen reader perde hierarquia.
197
+
198
+ ```bash
199
+ grep -rn "<h1\|<h2\|<h3\|<h4" src --include="*.tsx" 2>/dev/null
200
+ # Inspecionar por seção
201
+ ```
202
+
203
+ Fix: sequência h1 → h2 → h3. Se quer "small heading" use h{N+1} com style, não jumpar nível.
204
+
205
+ ### Q08 — Bounce easing (P1)
206
+
207
+ `ease-bounce`, `cubic-bezier(0.68, -0.55, 0.265, 1.55)`. Motion playful em produto = pouco profissional.
208
+
209
+ ```bash
210
+ grep -rnE "bounce|cubic-bezier\(0\.68" src --include="*.css" --include="*.tsx" 2>/dev/null
211
+ ```
212
+
213
+ Fix: `ease-out` ou `ease-[cubic-bezier(0.2,0.8,0.2,1)]` para interactions. Bounce só em onboarding/celebration moment justificado.
214
+
215
+ ## Tabela de severidade
216
+
217
+ | Código | Anti-pattern | Categoria | Severidade | Override por registro |
218
+ |------|--------------|----------|----------|-------------------|
219
+ | T01 | Gradiente roxo | Tells-IA | P0 | Marca pode aceitar gradiente 2 cores warm |
220
+ | T02 | Texto gradiente | Tells-IA | P0 | Nunca |
221
+ | T03 | Italic serif H1 | Tells-IA | P0 | Marca editorial pode (1 keyword inline) |
222
+ | T04 | Rótulo uppercase decorativo | Tells-IA | P0 | Nunca |
223
+ | T05 | Card borda lateral | Tells-IA | P0 | Nunca |
224
+ | T06 | Card aninhado | Tells-IA | P1 | — |
225
+ | T07 | Monocultura Inter | Tells-IA | P1 | Produto corp pode (mas combine display) |
226
+ | T08 | Fonte saturada | Tells-IA | P1 | — |
227
+ | T09 | Paleta IA genérica | Tells-IA | P1 | — |
228
+ | T10 | Glassmorphism | Tells-IA | P1 | Marca pode 1 camada |
229
+ | Q01 | Touch < 44px | Qualidade | P0 | Nunca |
230
+ | Q02 | Edge flush | Qualidade | P0 | Nunca |
231
+ | Q03 | Cor hard-coded | Qualidade | P1 | Aceitável em SVG decorativo |
232
+ | Q04 | Botão contraste baixo | Qualidade | P0 | Nunca |
233
+ | Q05 | Anchor herança | Qualidade | P1 | — |
234
+ | Q06 | Padding cramped | Qualidade | P1 | Produto density-heavy pode menor |
235
+ | Q07 | Pular heading | Qualidade | P1 | Nunca |
236
+ | Q08 | Bounce easing | Qualidade | P1 | Onboarding/celebration ok |
237
+
238
+ ## Anti-patterns DESTA skill
239
+
240
+ ### Anti-pattern 1: usar como linter cego
241
+
242
+ **Errado:** rodar grep e auto-corrigir tudo P0/P1 sem ler contexto.
243
+
244
+ **Por quê:** parceiro opinativo, não validator. Override consciente em DESIGN.md > Faça/Não faça é legítimo. Paleta IA pode ser intencional se MARCA.md anti-referência disser explicitamente "embrace genérico-de-propósito".
245
+
246
+ **Certo:** Rode detector → apresente findings → discuta com user antes de patches automáticos. Cada P0 ignorado precisa entry em DESIGN.md justificando.
247
+
248
+ ### Anti-pattern 2: declarar pronto sem rodar detector
249
+
250
+ **Errado:** "Feature implementada e revisada". Mas grep T01 retorna 3 hits.
251
+
252
+ **Por quê:** REGRA #1 — zero P0 antes de ship. Tells de IA são caros de remover depois (cliente já viu).
253
+
254
+ **Certo:** Detector é último passo antes de commit final. Cole a output do varredor no PR description.
255
+
256
+ ## Ver também
257
+
258
+ - [ui-contexto-produto](../ui-contexto-produto/SKILL.md) — Regras (Faça/Não faça) vivem aqui após override
259
+ - [ui-critica-auditoria](../ui-critica-auditoria/SKILL.md) — camada subjetiva (Nielsen, carga cognitiva)
260
+ - [ui-tipografia](../ui-tipografia/SKILL.md) — regras tipográficas detalhadas
261
+ - [ui-cor-estrategia](../ui-cor-estrategia/SKILL.md) — regras de cor detalhadas
@@ -0,0 +1,248 @@
1
+ ---
2
+ name: ui-contexto-produto
3
+ description: Use ANTES de qualquer trabalho de UI — carrega/gera MARCA.md (estratégia: registro marca vs produto, persona, voz, anti-referências) + DESIGN.md (visual: 6 seções canônicas Visão/Cores/Tipografia/Elevação/Componentes/Regras). Estratégia ≠ visual; arquivos separados deliberadamente. Bootstrap canônico de fluência de design para IA.
4
+ ---
5
+
6
+ # UI — Contexto de Produto (MARCA.md + DESIGN.md)
7
+
8
+ ## Quando usar
9
+
10
+ LLM carrega esta skill quando:
11
+
12
+ - "Desenhe / refine / audite UI" em projeto que ainda não tem brand spec
13
+ - "Crie um DESIGN.md / MARCA.md / docs de design system"
14
+ - "Onboard o IA no design deste projeto"
15
+ - "Faça o ensino / extração de design"
16
+ - Antes de invocar agente `designer-ui` pela primeira vez
17
+
18
+ ## Regras absolutas
19
+
20
+ **REGRA #1 (separação de preocupações):** `MARCA.md` responde **estratégia** (quem/o quê/porquê). `DESIGN.md` responde **visual** (como aparenta). Nunca coloque cor, fonte ou pixel em MARCA.md. Nunca coloque persona ou tom de voz em DESIGN.md.
21
+
22
+ **REGRA #2 (registro primeiro):** Primeira pergunta sempre é registro: **marca** (marketing, hero, motion-rich) vs **produto** (dashboard, calm-clinical). Tudo deriva disso.
23
+
24
+ **REGRA #3 (específico, não adjetivo):** Recuse respostas genéricas. "Moderno e limpo" → reject. "Caloroso, mecânico, opinativo" → accept. Referências por **nome próprio**: "Linear sidebar density", não "técnico e limpo".
25
+
26
+ **REGRA #4 (6 seções fixas):** DESIGN.md tem exatamente 6 seções, em ordem fixa, com nomes fixos. NÃO adicione Layout, Motion ou Responsivo como top-level — eles vivem dentro de Componentes ou Regras.
27
+
28
+ **REGRA #5 (ancorado no codebase):** Modo scan lê tokens reais (CSS vars, Tailwind config, shadcn preset). Nunca invente valores que o codebase não suporta — marque como `<!-- RASCUNHO -->` se vier de prompt e não de código.
29
+
30
+ ## Template canônico — MARCA.md
31
+
32
+ ```markdown
33
+ # MARCA.md
34
+
35
+ > Contexto estratégico para parceiros de design IA. Visuais vivem em DESIGN.md.
36
+
37
+ ## Registro
38
+ {marca | produto | híbrido — justifique em 1 linha}
39
+
40
+ ## Usuários
41
+ - Primário: {persona específica, contexto, estado de espírito}
42
+ Exemplo: "SRE em on-call às 3h, debugando incidente, só mobile, janela de paciência 90s"
43
+ - Secundário: {se houver}
44
+
45
+ ## Propósito
46
+ {O que o produto faz, em 1 frase de no máximo 20 palavras. Sem "platform" ou "solution"}
47
+
48
+ ## Personalidade
49
+ 3-5 adjetivos. Exemplo: "Calmo, clínico, opinativo, mecânico, sem hype"
50
+ Reject: "moderno, limpo, simples, intuitivo" (genéricos)
51
+
52
+ ## Referências
53
+ - {Nome próprio + URL}. Ex: "Linear app — densidade de sidebar"
54
+ - {Nome próprio + URL}. Ex: "Vercel dashboard — empty states"
55
+
56
+ ## Anti-referências
57
+ - {Nome próprio + razão}. Ex: "Templates SaaS genéricos — sobreuso de cards"
58
+ - {Nome próprio + razão}. Ex: "Hero Stripe 2014 — era do gradiente roxo"
59
+
60
+ ## Voz
61
+ - Tom: {calmo | brincalhão | clínico | caloroso | mecânico | outro}
62
+ - Tempo verbal: {presente padrão | passado para eventos}
63
+ - Frases banidas: {liste 3-5. Ex: "alavancar", "seamless", "incrível"}
64
+
65
+ ## Acessibilidade
66
+ - WCAG: {AA | AAA}
67
+ - Locale: {pt-BR primário | en secundário | etc}
68
+ - Sensibilidade a motion: {respeitar prefers-reduced-motion: sim/não — default sim}
69
+ - Daltonismo: {protanopia/deuteranopia testados via tooling}
70
+
71
+ ## Restrições
72
+ - {Técnica. Ex: "shadcn/ui locked", "Tailwind v4 OKLCH tokens"}
73
+ - {Negócio. Ex: "deve parecer sério para pitch enterprise"}
74
+ ```
75
+
76
+ ## Template canônico — DESIGN.md
77
+
78
+ ```markdown
79
+ # DESIGN.md
80
+
81
+ > Sistema visual. Agentes IA leem isto antes de gerar UI. 6 seções, ordem fixa.
82
+
83
+ ## Visão
84
+ {North Star em 2-3 frases. O "feeling" do produto traduzido em direção visual.}
85
+ Exemplo: "Quietude editorial. Preto sobre creme, accent único, espaçamento generoso, motion apenas em mudança de estado."
86
+
87
+ ## Cores
88
+ - Superfície (60%): `{token | hex}` — `--background`
89
+ - Secundária (30%): `{token | hex}` — `--muted`
90
+ - Destaque (10%): `{token | hex}` — reservada para: {liste elementos exatos. Ex: "apenas CTA primário"}
91
+ - Destrutiva: `{token | hex}` — reservada para: confirmação de ação irreversível
92
+ - Foreground / contraste: AA mín 4.5:1 em cada superfície
93
+ Modo: {claro só | escuro só | ambos com pref do sistema}
94
+
95
+ ## Tipografia
96
+ - Display ({nome próprio}): h1/h2 hero
97
+ - Body ({nome próprio}): todo o resto
98
+ - Mono ({nome próprio}): código, dados, tempo
99
+
100
+ Tamanhos (exatos, máximo 4): {ex: 14, 16, 20, 32}
101
+ Pesos (exatos, máximo 2): {ex: 400, 600}
102
+ Altura de linha: body 1.5, heading 1.2
103
+ Comprimento de linha: 50-75 chars body, 30-50 hero
104
+
105
+ Banidas: {liste fontes proibidas. Ex: "Inter, Geist, Space Grotesk" se quer fugir do default genérico}
106
+
107
+ ## Elevação
108
+ Filosofia: {flat | sombra sutil | dramático | nenhuma}
109
+ Tokens:
110
+ - `elev-0`: `none` — superfície rasa
111
+ - `elev-1`: `{shadow value}` — cards, popovers
112
+ - `elev-2`: `{shadow value}` — modais, command palette
113
+ Anti-pattern: glassmorphism (`backdrop-blur` em ≥ 3 camadas) PROIBIDO
114
+
115
+ ## Componentes
116
+ Notas breves de caráter por padrão. Não replique docs do shadcn — declare *o que é opinativo aqui*.
117
+ - **Button**: {raio, peso, altura, caráter}. Ex: "Raio 4px afiado, semibold, h-10, sem sombra"
118
+ - **Card**: {quando usar, quando NÃO}. Ex: "Apenas para itens de dados em lista. Nunca envolva uma seção em card. Nunca aninhe."
119
+ - **Input**: {caráter}. Ex: "Apenas underline, sem borda, foco = border-bottom accent"
120
+ - **Dialog**: {motion, tamanho, dismiss}. Ex: "Slide-from-bottom em mobile, scale central em desktop, ESC sempre dismissa"
121
+ - **Toast**: {posição, duração, caráter}
122
+
123
+ ## Regras (Faça / Não faça)
124
+ FAÇA:
125
+ - {regra brand-específica. Ex: "Use cor de destaque APENAS em CTA primário por tela"}
126
+ - {regra. Ex: "Body copy max 70ch — wrap container em 65ch"}
127
+
128
+ NÃO FAÇA:
129
+ - {anti-pattern relevante. Ex: "Sem gradiente em texto. Nunca."}
130
+ - {anti-pattern brand. Ex: "Sem emoji em strings de UI fora de error toasts"}
131
+ - {anti-pattern. Ex: "Nunca envolva headings em italic serif. Display é grotesk."}
132
+ ```
133
+
134
+ ## Sidecar — DESIGN.json
135
+
136
+ Companion machine-readable. Tokens primários extraídos do codebase:
137
+
138
+ ```json
139
+ {
140
+ "version": "1.0",
141
+ "tokens": {
142
+ "color": {
143
+ "surface": "oklch(0.99 0 0)",
144
+ "muted": "oklch(0.94 0.005 240)",
145
+ "accent": "oklch(0.55 0.18 28)"
146
+ },
147
+ "typography": {
148
+ "display": "Söhne Breit",
149
+ "body": "Söhne",
150
+ "sizes": [14, 16, 20, 32],
151
+ "weights": [400, 600]
152
+ },
153
+ "spacing": [4, 8, 16, 24, 32, 48, 64],
154
+ "radius": { "default": 4, "pill": 9999 }
155
+ }
156
+ }
157
+ ```
158
+
159
+ ## Workflow
160
+
161
+ ### Modo Scan (codebase existe)
162
+
163
+ 1. `Grep` por `tailwind.config.*`, `globals.css`, `:root {` para extrair tokens
164
+ 2. `Read` `components.json` (shadcn) para preset
165
+ 3. `Glob` `src/components/**` para inventário
166
+ 4. Apresentar valores detectados → pedir confirmação para Visão + notas de caráter
167
+ 5. Gerar MARCA.md (via entrevista) + DESIGN.md (via scan + confirmação)
168
+
169
+ ### Modo Rascunho (greenfield)
170
+
171
+ 1. Entrevista de 5-8 minutos. Perguntas mínimas:
172
+ - Registro (marca vs produto)?
173
+ - Usuário primário em 1 frase com contexto + estado de espírito?
174
+ - 3-5 adjetivos de personalidade (não-genéricos)?
175
+ - 2-3 referências **nomeadas** com URL?
176
+ - 2 anti-referências **nomeadas**?
177
+ - Locale + nível WCAG?
178
+ 2. Scaffold DESIGN.md com comentários `<!-- RASCUNHO -->` em valores não-extraídos
179
+ 3. Marcar para revisão pós-implementação inicial
180
+
181
+ ## Anti-patterns
182
+
183
+ ### Anti-pattern 1: misturar estratégia e visual
184
+
185
+ **Errado (MARCA.md):**
186
+ ```markdown
187
+ ## Personalidade
188
+ Moderno, limpo, com #4F46E5 primário
189
+ ```
190
+
191
+ **Por quê:** REGRA #1 — cor pertence a DESIGN.md. MARCA.md fica fora de sincronia quando rebrand.
192
+
193
+ **Certo:** "Personalidade: Mecânico, opinativo" em MARCA.md. "#4F46E5" em DESIGN.md > Cores > Destaque.
194
+
195
+ ### Anti-pattern 2: respostas adjetivais genéricas
196
+
197
+ **Errado:**
198
+ ```markdown
199
+ ## Referências
200
+ - Apps SaaS modernos
201
+ - Design systems limpos
202
+ ```
203
+
204
+ **Por quê:** REGRA #3 — sem nome próprio, IA volta ao default genérico ("dribbble médio").
205
+
206
+ **Certo:**
207
+ ```markdown
208
+ ## Referências
209
+ - [Linear](https://linear.app) — densidade de sidebar + gravidade do command palette
210
+ - [Klim Type Foundry](https://klim.co.nz) — hero editorial quieto
211
+ ```
212
+
213
+ ### Anti-pattern 3: criar Layout/Motion/Responsivo como seção top-level em DESIGN.md
214
+
215
+ **Errado:**
216
+ ```markdown
217
+ ## Visão
218
+ ## Cores
219
+ ## Tipografia
220
+ ## Layout ← não!
221
+ ## Motion ← não!
222
+ ## Responsivo ← não!
223
+ ```
224
+
225
+ **Por quê:** REGRA #4 — schema canônico tem 6 seções fixas. Layout/motion/responsivo são propriedades dos Componentes ou regras em Faça/Não faça. Agentes IA downstream esperam o schema fixo.
226
+
227
+ **Certo:** Embuta em Componentes ("Dialog: slide-from-bottom em mobile, scale central em desktop") ou Regras ("FAÇA: respeitar prefers-reduced-motion").
228
+
229
+ ### Anti-pattern 4: MARCA.md sem anti-referências
230
+
231
+ **Errado:**
232
+ ```markdown
233
+ ## Referências
234
+ - Linear
235
+ ## Personalidade
236
+ - Limpo
237
+ ```
238
+ (sem anti-referências)
239
+
240
+ **Por quê:** IA tende a regressão à média. Sem "NÃO se parecer com X", o output gravita para template SaaS médio mesmo com referências fortes.
241
+
242
+ **Certo:** sempre 2+ anti-referências nomeadas com razão.
243
+
244
+ ## Ver também
245
+
246
+ - [ui-anti-padroes-ia](../ui-anti-padroes-ia/SKILL.md) — catálogo de tells a evitar (alimenta seção Não faça de DESIGN.md)
247
+ - [ui-tipografia](../ui-tipografia/SKILL.md) — preenche seção Tipografia
248
+ - [ui-cor-estrategia](../ui-cor-estrategia/SKILL.md) — preenche seção Cores