specifica-br 1.2.2 → 1.5.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 (46) hide show
  1. package/README.md +114 -44
  2. package/dist/boilerplate/commands/executar-task.md +133 -0
  3. package/dist/boilerplate/commands/gerar-contexto.md +1462 -0
  4. package/dist/boilerplate/commands/gerar-prd.md +289 -0
  5. package/dist/boilerplate/commands/gerar-tasks.md +168 -0
  6. package/dist/boilerplate/commands/gerar-techspec.md +1467 -0
  7. package/dist/boilerplate/commands/gerar-visao.md +731 -0
  8. package/dist/boilerplate/commands/realizar-codereview.md +288 -0
  9. package/dist/boilerplate/opencode-commands/executar-task.md +55 -48
  10. package/dist/boilerplate/opencode-commands/gerar-contexto.md +1462 -0
  11. package/dist/boilerplate/opencode-commands/gerar-prd.md +232 -40
  12. package/dist/boilerplate/opencode-commands/gerar-tasks.md +112 -31
  13. package/dist/boilerplate/opencode-commands/gerar-techspec.md +1464 -80
  14. package/dist/boilerplate/opencode-commands/gerar-visao.md +731 -0
  15. package/dist/boilerplate/opencode-commands/realizar-codereview.md +288 -0
  16. package/dist/boilerplate/skills/product-manager/SKILL.md +32 -0
  17. package/dist/boilerplate/skills/techspec-generator/SKILL.md +489 -0
  18. package/dist/boilerplate/skills/techspec-generator/references/api-contracts.md +421 -0
  19. package/dist/boilerplate/skills/techspec-generator/references/architecture-patterns.md +316 -0
  20. package/dist/boilerplate/skills/techspec-generator/references/database-modeling.md +436 -0
  21. package/dist/boilerplate/skills/techspec-generator/references/observability-testing.md +436 -0
  22. package/dist/boilerplate/skills/techspec-generator/references/security-hardening.md +238 -0
  23. package/dist/boilerplate/skills/techspec-generator/references/ux-ui-accessibility.md +511 -0
  24. package/dist/boilerplate/specs-templates/architecture-template.md +736 -0
  25. package/dist/boilerplate/specs-templates/codereview-template.md +95 -0
  26. package/dist/boilerplate/specs-templates/prd-template.md +101 -19
  27. package/dist/boilerplate/specs-templates/product_vision-template.md +284 -0
  28. package/dist/boilerplate/specs-templates/task-template.md +64 -18
  29. package/dist/boilerplate/specs-templates/tasks-template.md +12 -4
  30. package/dist/boilerplate/specs-templates/techspec-template.md +1227 -89
  31. package/dist/boilerplate/templates/architecture-template.md +736 -0
  32. package/dist/boilerplate/templates/codereview-template.md +95 -0
  33. package/dist/boilerplate/templates/prd-template.md +167 -0
  34. package/dist/boilerplate/templates/product_vision-template.md +284 -0
  35. package/dist/boilerplate/templates/task-template.md +169 -0
  36. package/dist/boilerplate/templates/tasks-template.md +15 -0
  37. package/dist/boilerplate/templates/techspec-template.md +1306 -0
  38. package/dist/commands/help.js +33 -11
  39. package/dist/commands/init.js +39 -43
  40. package/dist/tools-mapping.json +32 -0
  41. package/dist/types/init.d.ts +14 -17
  42. package/dist/utils/file-service.d.ts +5 -3
  43. package/dist/utils/file-service.js +168 -56
  44. package/dist/utils/message-formatter.d.ts +2 -1
  45. package/dist/utils/message-formatter.js +39 -22
  46. package/package.json +1 -1
@@ -0,0 +1,511 @@
1
+ # Usabilidade, Acessibilidade e Design de Interfaces
2
+
3
+ Referência técnica para design de frontend, usabilidade e acessibilidade ao gerar Tech Specs.
4
+
5
+ ## Sumário
6
+
7
+ 1. [Princípios de Usabilidade](#1-principios-de-usabilidade)
8
+ 2. [Acessibilidade (a11y)](#2-acessibilidade-a11y)
9
+ 3. [Design de Componentes](#3-design-de-componentes)
10
+ 4. [Estados de UI](#4-estados-de-ui)
11
+ 5. [Formulários](#5-formularios)
12
+ 6. [Layout e Responsividade](#6-layout-e-responsividade)
13
+ 7. [Performance Percebida](#7-performance-percebida)
14
+ 8. [Interações e Feedback](#8-interacoes-e-feedback)
15
+ 9. [Checklist de UI/UX para TechSpec](#9-checklist-de-uiux-para-techspec)
16
+
17
+ ---
18
+
19
+ ## 1. Princípios de Usabilidade
20
+
21
+ ### 1.1. Heurísticas de Nielsen (Aplicadas à TechSpec)
22
+
23
+ | Heurística | O que especificar | Exemplo |
24
+ |:---|:---|:---|
25
+ | **Visibilidade do estado** | Loading, progresso, sucesso, erro | Skeleton screen durante carregamento |
26
+ | **Correspondência com o mundo real** | Linguagem do usuário, não técnica | "Seu pedido foi enviado" vs "Status: SHIPPED" |
27
+ | **Controle do usuário** | Undo, cancelar, voltar | Botão "Cancelar pedido" com confirmação |
28
+ | **Consistência** | Seguir design system existente | Usar componentes do shadcn-vue do projeto |
29
+ | **Prevenção de erros** | Validação antes do submit | Desabilitar botão se formulário inválido |
30
+ | **Reconhecimento vs recall** | Mostrar opções, não exigir memorização | Dropdown com sugestões de busca |
31
+ | **Flexibilidade** | Atalhos para usuários avançados | Keyboard shortcuts (Ctrl+N para novo) |
32
+ | **Design minimalista** | Apenas informação necessária | Formulário em etapas (wizard) para dados longos |
33
+ | **Recuperação de erros** | Mensagens claras com ação de correção | "Email inválido. Verifique se digitou corretamente." |
34
+ | **Ajuda e documentação** | Tooltips, empty states com orientação | "Nenhum pedido encontrado. Clique aqui para criar." |
35
+
36
+ ### 1.2. O que Especificar na TechSpec (Frontend)
37
+
38
+ Para cada tela/view/componente da feature:
39
+
40
+ ```
41
+ Tela: [Nome da Tela]
42
+ Rota: /orders/new
43
+ Componentes: OrderForm, ProductSearch, CartSummary, AddressForm
44
+ Design System: shadcn-vue (conforme padrão do projeto)
45
+ Layout: DashboardLayout > PageContainer > OrderForm
46
+
47
+ Estados:
48
+ - Empty: "Adicione produtos ao seu pedido"
49
+ - Loading: Skeleton nos cards de produto
50
+ - Error: Toast de erro + botão "Tentar novamente"
51
+ - Success: Redirect para /orders/{id} com toast "Pedido criado!"
52
+
53
+ Validações:
54
+ - Produto: obrigatório, quantidade >= 1
55
+ - Endereço: CEP válido (busca automática via API)
56
+ - Submit: desabilitado até formulário válido
57
+
58
+ Acessibilidade:
59
+ - Formulário com fieldset e legend
60
+ - Labels visíveis para todos os inputs
61
+ - Erros com aria-describedby
62
+ - Focus no primeiro campo inválido após submit
63
+ ```
64
+
65
+ ---
66
+
67
+ ## 2. Acessibilidade (a11y)
68
+
69
+ ### 2.1. WCAG 2.1 - Nível AA (Mínimo Esperado)
70
+
71
+ **Princípio: Perceptível**
72
+ | Critério | O que especificar | Como verificar |
73
+ |:---|:---|:---|
74
+ | Texto alternativo | Imagens com `alt` descritivo | Screen reader lê descrição |
75
+ | Mídia time-based | Legendas em vídeos (se aplicável) | Legendas sincronizadas |
76
+ | Contraste | Mínimo 4.5:1 para texto normal, 3:1 para texto grande | Ferramenta de contraste |
77
+ | Texto redimensionável | Funciona até 200% zoom | Zoom do navegador |
78
+ | Conteúdo adaptável | Layout responsivo sem perda de informação | Testar em mobile |
79
+
80
+ **Princípio: Operável**
81
+ | Critério | O que especificar | Como verificar |
82
+ |:---|:---|:---|
83
+ | Teclado | Todos os controles acessíveis via Tab | Navegar sem mouse |
84
+ | Tempo suficiente | Sem time limits ou com opção de estender | Usuário controla tempo |
85
+ | Flash | Sem conteúdo que pisca > 3x/segundo | Sem risco de convulsão |
86
+ | Navegação | Skip links, landmarks, breadcrumbs | Tab pula para conteúdo |
87
+ | Input modal | Focus trap em modais/diálogos | Tab não sai do modal |
88
+
89
+ **Princípio: Compreensível**
90
+ | Critério | O que especificar | Como verificar |
91
+ |:---|:---|:---|
92
+ | Idioma | `<html lang="pt-BR">` | Screen reader usa idioma correto |
93
+ | Previsível | Navegação consistente, sem mudanças inesperadas | Mesmo padrão em todas as páginas |
94
+ | Assistência | Labels, instruções, sugestões de erro | Formulário guiado |
95
+
96
+ **Princípio: Robusto**
97
+ | Critério | O que especificar | Como verificar |
98
+ |:---|:---|:---|
99
+ | Compatível | HTML semântico, ARIA correto | Validação W3C + screen reader |
100
+
101
+ ### 2.2. ARIA Patterns Essenciais
102
+
103
+ **Landmarks:**
104
+ ```html
105
+ <header role="banner">
106
+ <nav role="navigation" aria-label="Menu principal">
107
+ <main role="main">
108
+ <aside role="complementary">
109
+ <footer role="contentinfo">
110
+ ```
111
+
112
+ **Formulários acessíveis:**
113
+ ```html
114
+ <label for="email">Email</label>
115
+ <input id="email" type="email" name="email" autocomplete="email"
116
+ aria-required="true"
117
+ aria-describedby="email-error"
118
+ placeholder="usuario@exemplo.com…" />
119
+ <span id="email-error" role="alert">Email inválido. Verifique se digitou corretamente.</span>
120
+ ```
121
+
122
+ **Estados dinâmicos:**
123
+ ```html
124
+ <button aria-expanded="false" aria-controls="dropdown-menu">
125
+ Opções
126
+ </button>
127
+ <div id="dropdown-menu" role="listbox">
128
+ <div role="option" aria-selected="true">Opção 1</div>
129
+ </div>
130
+ ```
131
+
132
+ **Loading/Progresso:**
133
+ ```html
134
+ <div role="status" aria-live="polite">
135
+ <div class="skeleton-card" aria-hidden="true">
136
+ <!-- Skeleton visual placeholder -->
137
+ </div>
138
+ <span class="sr-only">Carregando pedidos…</span>
139
+ </div>
140
+ <div role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100">
141
+ 60%
142
+ </div>
143
+ ```
144
+
145
+ **Modais:**
146
+ ```html
147
+ <div role="dialog" aria-modal="true" aria-labelledby="dialog-title">
148
+ <h2 id="dialog-title">Confirmar exclusão</h2>
149
+ <button>Cancelar</button>
150
+ <button>Confirmar</button>
151
+ </div>
152
+ ```
153
+
154
+ ### 2.3. Especificação na TechSpec
155
+
156
+ ```
157
+ Acessibilidade:
158
+ - Nível WCAG: AA (mínimo)
159
+ - HTML semântico com landmarks (nav, main, aside)
160
+ - Todos os inputs com label visível e aria-describedby para erros
161
+ - Focus trap em modais (Dialog component do shadcn)
162
+ - Navegação por teclado: Tab para campos, Enter para submit, Esc para fechar modal
163
+ - aria-live="polite" para feedback de ações (toast)
164
+ - Skip link para pular navegação
165
+ - Contraste: seguir tokens do design system (≥ 4.5:1)
166
+ - Testar com: VoiceOver (Mac) ou NVDA (Windows)
167
+ ```
168
+
169
+ ---
170
+
171
+ ## 3. Design de Componentes
172
+
173
+ ### 3.1. Hierarquia de Componentes
174
+
175
+ ```
176
+ Layout (global)
177
+ └── Page (route-specific)
178
+ ├── Header (page title, actions)
179
+ ├── Content (main content area)
180
+ │ ├── Section (logical group)
181
+ │ │ ├── Card (container)
182
+ │ │ │ ├── Form (data entry)
183
+ │ │ │ │ ├── Field (input + label + error)
184
+ │ │ │ │ └── Actions (submit, cancel)
185
+ │ │ │ └── Display (read-only data)
186
+ │ │ └── Table (list data)
187
+ │ └── EmptyState (no data)
188
+ └── Footer (pagination, summary)
189
+ ```
190
+
191
+ ### 3.2. Composição com Design System
192
+
193
+ **Verificar biblioteca de UI existente no projeto:**
194
+
195
+ | Biblioteca | Componente de Botão | Componente de Input |
196
+ |:---|:---|:---|
197
+ | shadcn-vue | `<Button variant="default">` | `<Input />` |
198
+ | shadcn-ui | `<Button>` | `<Input />` |
199
+ | MUI | `<Button variant="contained">` | `<TextField>` |
200
+ | PrimeVue | `<Button label="OK">` | `<InputText>` |
201
+ | Vuetify | `<v-btn color="primary">` | `<v-text-field>` |
202
+
203
+ **Na TechSpec, especificar:**
204
+ ```
205
+ Biblioteca UI: shadcn-vue (padrão do projeto, conforme package.json)
206
+ Componentes utilizados:
207
+ - Button (submit, cancel, delete)
208
+ - Input (text fields)
209
+ - Select (dropdown de status)
210
+ - Dialog (confirmação de exclusão)
211
+ - Table (listagem de pedidos)
212
+ - Toast (feedback de ações)
213
+ - Card (container de seções)
214
+ ```
215
+
216
+ ### 3.3. Componentes por Feature
217
+
218
+ Para cada feature, especificar componentes necessários:
219
+
220
+ ```
221
+ Novos componentes:
222
+ - OrderForm.vue (formulário de criação de pedido)
223
+ Props: customerId, products[]
224
+ Events: submit(orderData), cancel()
225
+ Dependências: ProductSearch, CartSummary, AddressForm
226
+
227
+ - ProductSearch.vue (busca de produtos com autocomplete)
228
+ Props: []
229
+ Events: select(product)
230
+ State: loading, results[], searchTerm
231
+
232
+ - OrderStatusBadge.vue (badge de status com cor)
233
+ Props: status (PENDING | PAID | CANCELLED)
234
+ Render: cor condicional (PENDING=yellow, PAID=green, CANCELLED=red)
235
+
236
+ Componentes reutilizados:
237
+ - Card (shadcn) para containers
238
+ - Table (shadcn) para listagens
239
+ - Dialog (shadcn) para confirmações
240
+ - Toast (shadcn) para feedback
241
+ ```
242
+
243
+ ---
244
+
245
+ ## 4. Estados de UI
246
+
247
+ ### 4.1. Estados Obrigatórios
248
+
249
+ Para cada tela/componente que faz requisição:
250
+
251
+ | Estado | O que mostrar | Implementação |
252
+ |:---|:---|:---|
253
+ | **Initial** | Tela inicial sem dados carregados | Buscar dados no mount |
254
+ | **Loading** | Indicador visual de carregamento | Skeleton screen (preferido) ou Spinner |
255
+ | **Empty** | Estado quando não há dados | Ilustração + mensagem + CTA |
256
+ | **Success** | Dados carregados com sucesso | Renderizar dados |
257
+ | **Error** | Falha ao carregar dados | Mensagem + botão retry |
258
+ | **Partial** | Alguns dados carregados, outros não | Mostrar disponíveis, loading nos outros |
259
+
260
+ ### 4.2. Skeleton Screens
261
+
262
+ ```
263
+ Loading state: Skeleton screen
264
+ - Usar componente Skeleton do shadcn
265
+ - Replicar layout da tela final com placeholders
266
+ - Animação sutil (pulse)
267
+ - Timeout: após 10s, mostrar mensagem "Carregando..."
268
+ - Após 30s: mostrar error state com retry
269
+ ```
270
+
271
+ ### 4.3. Empty States
272
+
273
+ ```
274
+ Empty state para listagens:
275
+ - Ícone/ilustração representativa
276
+ - Título: "Nenhum pedido encontrado"
277
+ - Descrição: "Crie seu primeiro pedido para começar."
278
+ - CTA: Botão "Criar Pedido" → navega para /orders/new
279
+ - Secondary action (opcional): Link para documentação/ajuda
280
+ ```
281
+
282
+ ### 4.4. Exemplo Completo de Especificação de Tela
283
+
284
+ Para cada tela, especificar todos os estados integrados:
285
+
286
+ ```
287
+ Tela: Listagem de Pedidos
288
+ Rota: /orders
289
+ Componente: OrderListPage
290
+
291
+ Estados de UI:
292
+ - Initial → Loading: Skeleton com aria-live="polite" e aria-hidden nos placeholders
293
+ - Loading → Success: Renderizar tabela de pedidos
294
+ - Loading → Error: "Falha ao carregar pedidos." + botão retry
295
+ - Success + vazio → Empty: "Nenhum pedido encontrado." + CTA "Criar Pedido"
296
+
297
+ Formulário de busca (se aplicável):
298
+ - Input com autocomplete="off", debounce 300ms, placeholder "Busque por nome, ID…"
299
+ - Resultados atualizam com aria-live="polite"
300
+
301
+ Acessibilidade:
302
+ - Skip link para pular navegação
303
+ - Tabela com <thead>/<tbody> semânticos
304
+ - Ações com <button>, não <div onClick>
305
+ - Paginação com <nav aria-label="Paginação">
306
+ ```
307
+
308
+ ---
309
+
310
+ ## 5. Formulários
311
+
312
+ ### 5.1. Padrão de Formulário
313
+
314
+ ```
315
+ Formulário: OrderForm
316
+ Framework: useForm (Vue Use) ou React Hook Form (conforme projeto)
317
+ Validação: Zod schema (conforme projeto)
318
+
319
+ Campos:
320
+ | Campo | Tipo | Validação | autocomplete | Máscara |
321
+ |:---|:---|:---|:---|:---|
322
+ | email | email | obrigatório, formato email | email | - |
323
+ | phone | tel | obrigatório, 11 dígitos | tel | (00) 00000-0000 |
324
+ | zip_code | text | obrigatório, 8 dígitos | postal-code | 00000-000 |
325
+ | quantity | number | obrigatório, >= 1, <= 999 | off | - |
326
+ | password | password | obrigatório, min 8 chars | off | - |
327
+ | notes | textarea | opcional, max 500 chars | off | - |
328
+
329
+ Nota: Use `autocomplete="off"` em campos não-auth (como notas, CPF) para evitar trigger de password managers.
330
+
331
+ Comportamento:
332
+ - Validação: inline em blur (não em tempo real, para não irritar)
333
+ - Submit: validar tudo antes, scroll para primeiro erro
334
+ - Submitting: botão com loading state, desabilitado
335
+ - Success: redirect + toast
336
+ - Error: toast com mensagem específica
337
+ ```
338
+
339
+ ### 5.2. Feedback de Validação
340
+
341
+ ```
342
+ Estados de campo:
343
+ - Pristine: sem indicação visual (ainda não interagiu)
344
+ - Valid: borda verde (sutil), ícone check
345
+ - Invalid: borda vermelha, mensagem de erro abaixo do campo
346
+ - Disabled: visualmente distinto, sem interação
347
+
348
+ Mensagem de erro:
349
+ - Posição: abaixo do campo, alinhado à esquerda
350
+ - Cor: vermelho (conforme token do design system)
351
+ - Texto: específico ("Email é obrigatório" vs "Campo obrigatório")
352
+ - Icone: indicação visual além de cor
353
+ ```
354
+
355
+ ---
356
+
357
+ ## 6. Layout e Responsividade
358
+
359
+ ### 6.1. Breakpoints
360
+
361
+ | Breakpoint | Largura | Layout | Colunas |
362
+ |:---|:---|:---|:---|
363
+ | **Mobile** | < 640px | Stack vertical | 1 coluna |
364
+ | **Tablet** | 640px - 1024px | Hybrid | 2 colunas |
365
+ | **Desktop** | 1024px+ | Layout completo | 3-4 colunas |
366
+
367
+ ### 6.2. Padrões de Layout
368
+
369
+ **List page:**
370
+ ```
371
+ Desktop: Table com colunas expandidas + ações inline
372
+ Tablet: Card list (cada item = card)
373
+ Mobile: Card list simplificada + swipe actions
374
+ ```
375
+
376
+ **Form page:**
377
+ ```
378
+ Desktop: 2 colunas (formulário + preview/summary)
379
+ Tablet: 1 coluna com sections collapsíveis
380
+ Mobile: Wizard (uma seção por vez)
381
+ ```
382
+
383
+ **Detail page:**
384
+ ```
385
+ Desktop: Header com ações + tabs (info, histórico, documentos)
386
+ Tablet: Header com ações em menu dropdown + tabs
387
+ Mobile: Header sticky + scroll vertical
388
+ ```
389
+
390
+ ### 6.3. Design Tokens
391
+
392
+ ```
393
+ Spacing: { xs: 4px, sm: 8px, md: 16px, lg: 24px, xl: 32px, 2xl: 48px }
394
+ Typography: { sm: 12px, base: 14px, lg: 16px, xl: 20px, 2xl: 24px, 3xl: 32px }
395
+ BorderRadius: { sm: 4px, md: 8px, lg: 12px, full: 9999px }
396
+ Shadows: { sm: "0 1px 2px rgba(0,0,0,0.05)", md: "0 4px 6px rgba(0,0,0,0.07)" }
397
+ ```
398
+
399
+ *(Verificar tokens do design system do projeto antes de definir)*
400
+
401
+ ---
402
+
403
+ ## 7. Performance Percebida
404
+
405
+ ### 7.1. Técnicas
406
+
407
+ | Técnica | Quando usar | O que especificar |
408
+ |:---|:---|:---|
409
+ | **Skeleton screen** | Carregamento de dados | Mostrar skeleton com mesmo layout |
410
+ | **Optimistic update** | Ações rápidas (like, favoritar) | Atualizar UI antes da resposta, reverter se falhar |
411
+ | **Lazy loading** | Imagens, componentes pesados | `loading="lazy"` em imagens, dynamic import |
412
+ | **Code splitting** | Páginas pesadas | Import dinâmico por rota |
413
+ | **Prefetching** | Links que usuário provavelmente clicará | `<Link prefetch>` ou hover prefetch |
414
+ | **Debounced search** | Campos de busca com API | 300ms debounce, cancelar request anterior |
415
+ | **Progressive loading** | Listagens longas | Infinite scroll ou "Carregar mais" |
416
+
417
+ ### 7.2. Na TechSpec
418
+
419
+ ```
420
+ Performance de UI:
421
+ - Listagem: paginação com "Carregar mais" (lazy loading)
422
+ - Imagens de produto: loading="lazy" + placeholder blur
423
+ - Busca de produtos: debounce 300ms + cancelar request anterior
424
+ - Criação de pedido: optimistic lock (desabilitar botão, mostrar loading)
425
+ - Componentes pesados: dynamic import (lazy) para formulário
426
+ ```
427
+
428
+ ---
429
+
430
+ ## 8. Interações e Feedback
431
+
432
+ ### 8.1. Toast Notifications
433
+
434
+ ```
435
+ Tipos:
436
+ - Success: "Pedido criado com sucesso!" (verde, auto-dismiss 5s)
437
+ - Error: "Falha ao criar pedido. Tente novamente." (vermelho, manual dismiss)
438
+ - Warning: "Estoque baixo para item X" (amarelo, auto-dismiss 7s)
439
+ - Info: "Pedido em processamento" (azul, auto-dismiss 5s)
440
+
441
+ Posição: bottom-right (padrão shadcn)
442
+ Stack: Máximo 3 toasts visíveis, substituir mais antigo
443
+ ```
444
+
445
+ ### 8.2. Confirmações
446
+
447
+ ```
448
+ Ações destrutivas (delete, cancel):
449
+ - Dialog de confirmação com título e descrição clara
450
+ - Botão primário: vermelho com texto da ação ("Excluir pedido")
451
+ - Botão secundário: "Cancelar" (fecha dialog)
452
+ - Input de confirmação para ações críticas ("Digite EXCLUIR para confirmar")
453
+ ```
454
+
455
+ ### 8.3. Microinterações
456
+
457
+ ```
458
+ Animações (se aplicável):
459
+ - Transição de página: fade-in (200ms)
460
+ - Abertura de modal: scale + fade (150ms)
461
+ - Hover em cards: elevação de shadow (150ms)
462
+ - Toggle de status: cor transiciona (200ms)
463
+ - Feedback de clique: ripple ou scale sutil (100ms)
464
+
465
+ Preferir animações de 150-200ms. Nada > 300ms (lento).
466
+ ```
467
+
468
+ ---
469
+
470
+ ## 9. Checklist de UI/UX para TechSpec
471
+
472
+ Antes de finalizar a seção de frontend na TechSpec, verificar:
473
+
474
+ ### Usabilidade
475
+ - [ ] Estados de UI definidos (loading, error, empty, success)
476
+ - [ ] Feedback visual para todas as ações do usuário
477
+ - [ ] Navegação clara (breadcrumbs, rotas, links)
478
+ - [ ] Prevenção de erros (validação inline, botões desabilitados)
479
+ - [ ] Linguagem do usuário (não técnica)
480
+ - [ ] Consistência com design system existente
481
+
482
+ ### Acessibilidade
483
+ - [ ] HTML semântico com landmarks
484
+ - [ ] Labels visíveis para todos os inputs
485
+ - [ ] Navegação por teclado (Tab, Enter, Esc)
486
+ - [ ] Contraste adequado (≥ 4.5:1)
487
+ - [ ] aria-describedby para erros de validação
488
+ - [ ] aria-live para conteúdo dinâmico
489
+ - [ ] Focus trap em modais
490
+ - [ ] Skip link disponível
491
+ - [ ] Testado com screen reader (ou plano para testar)
492
+
493
+ ### Componentes
494
+ - [ ] Biblioteca UI existente mapeada
495
+ - [ ] Novos componentes especificados (props, events, state)
496
+ - [ ] Componentes reutilizados identificados
497
+ - [ ] Composição hierárquica documentada
498
+
499
+ ### Formulários
500
+ - [ ] Campos com tipos e validações
501
+ - [ ] Feedback de validação (inline em blur)
502
+ - [ ] Máscaras de input (se aplicável)
503
+ - [ ] Submit com loading state
504
+ - [ ] Error handling com mensagem específica
505
+
506
+ ### Performance
507
+ - [ ] Lazy loading especificado (imagens, componentes)
508
+ - [ ] Debounce em campos de busca
509
+ - [ ] Paginação ou infinite scroll
510
+ - [ ] Code splitting por rota (se aplicável)
511
+ - [ ] Skeleton screens para loading