@luanpdd/kit-mcp 1.32.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.
@@ -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
@@ -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/