@luanpdd/kit-mcp 1.32.0 → 1.34.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/LICENSE +21 -21
- package/README.md +168 -168
- package/gates/agent-no-recursive-dispatch.md +84 -84
- package/kit/COMANDOS.md +138 -138
- package/kit/COMPATIBILITY.md +70 -70
- package/kit/README.md +76 -76
- package/kit/agents/advisor-researcher.md +109 -109
- package/kit/agents/ai-mutation-tester.md +289 -289
- package/kit/agents/assumptions-analyzer.md +110 -110
- package/kit/agents/audit-log-implementer.md +314 -314
- package/kit/agents/auditor-consistencia-isolamento.md +414 -414
- package/kit/agents/b2b-saas-architect.md +157 -157
- package/kit/agents/burn-rate-forecaster.md +153 -153
- package/kit/agents/cascading-failures-auditor.md +299 -299
- package/kit/agents/codebase-mapper.md +769 -769
- package/kit/agents/crm-pipeline-implementer.md +257 -257
- package/kit/agents/debugger.md +814 -814
- package/kit/agents/designer-ui.md +216 -0
- package/kit/agents/detector-tenant-quente.md +338 -338
- package/kit/agents/evolution-go-integrator.md +201 -201
- package/kit/agents/example-reviewer.md +22 -22
- package/kit/agents/executor.md +565 -565
- package/kit/agents/golden-signals-instrumenter.md +232 -232
- package/kit/agents/incident-investigator.md +238 -238
- package/kit/agents/integration-checker.md +203 -203
- package/kit/agents/invite-flow-implementer.md +190 -190
- package/kit/agents/legacy-characterizer.md +369 -369
- package/kit/agents/lgpd-compliance-auditor.md +296 -296
- package/kit/agents/load-shedding-instrumenter.md +290 -290
- package/kit/agents/multi-tenant-isolation-auditor.md +254 -254
- package/kit/agents/multi-tenant-rls-writer.md +341 -341
- package/kit/agents/nyquist-auditor.md +181 -181
- package/kit/agents/observability-coverage-auditor.md +316 -316
- package/kit/agents/observability-instrumenter.md +191 -191
- package/kit/agents/omm-auditor.md +291 -291
- package/kit/agents/org-onboarding-implementer.md +224 -224
- package/kit/agents/payload-capture-instrumenter.md +274 -274
- package/kit/agents/phase-researcher.md +697 -697
- package/kit/agents/plan-checker.md +275 -275
- package/kit/agents/planner.md +923 -923
- package/kit/agents/postmortem-writer.md +273 -273
- package/kit/agents/project-researcher.md +653 -653
- package/kit/agents/prr-conductor.md +287 -287
- package/kit/agents/refactor-safety-auditor.md +405 -405
- package/kit/agents/release-pipeline-auditor.md +364 -364
- package/kit/agents/research-synthesizer.md +246 -246
- package/kit/agents/roadmapper.md +678 -678
- package/kit/agents/schema-checker.md +160 -160
- package/kit/agents/seam-finder.md +360 -360
- package/kit/agents/shotgun-surgery-detector.md +350 -350
- package/kit/agents/slo-engineer.md +217 -217
- package/kit/agents/storytelling-analyst.md +300 -300
- package/kit/agents/supabase-architect.md +249 -249
- package/kit/agents/supabase-auth-bootstrapper.md +400 -400
- package/kit/agents/supabase-auth-hook-writer.md +418 -418
- package/kit/agents/supabase-branching-architect.md +563 -563
- package/kit/agents/supabase-cicd-pipeline-implementer.md +778 -778
- package/kit/agents/supabase-column-privileges-writer.md +400 -400
- package/kit/agents/supabase-edge-fn-tester.md +288 -288
- package/kit/agents/supabase-edge-fn-writer.md +341 -341
- package/kit/agents/supabase-mfa-implementer.md +439 -439
- package/kit/agents/supabase-migration-writer.md +386 -386
- package/kit/agents/supabase-oauth-server-implementer.md +507 -507
- package/kit/agents/supabase-rbac-implementer.md +393 -393
- package/kit/agents/supabase-realtime-implementer.md +364 -364
- package/kit/agents/supabase-rls-hardener.md +522 -522
- package/kit/agents/supabase-rls-writer.md +324 -324
- package/kit/agents/supabase-roles-implementer.md +356 -356
- package/kit/agents/supabase-social-auth-implementer.md +451 -451
- package/kit/agents/supabase-sso-saml-architect.md +549 -549
- package/kit/agents/supabase-storage-implementer.md +407 -407
- package/kit/agents/super-admin-implementer.md +282 -282
- package/kit/agents/toil-auditor.md +268 -268
- package/kit/agents/ui-auditor.md +438 -438
- package/kit/agents/ui-checker.md +305 -305
- package/kit/agents/ui-researcher.md +356 -356
- package/kit/agents/user-profiler.md +176 -176
- package/kit/agents/validador-evolucao-schema.md +336 -336
- package/kit/agents/verifier.md +729 -729
- package/kit/commands/adicionar-backlog.md +75 -75
- package/kit/commands/adicionar-fase.md +42 -42
- package/kit/commands/adicionar-tarefa.md +45 -45
- package/kit/commands/adicionar-testes.md +41 -41
- package/kit/commands/ajuda.md +21 -21
- package/kit/commands/atualizar.md +37 -37
- package/kit/commands/auditar-cascading.md +111 -111
- package/kit/commands/auditar-marco.md +179 -179
- package/kit/commands/auditar-observabilidade-cobertura-workflow.md +121 -0
- package/kit/commands/auditar-observabilidade-cobertura.md +183 -183
- package/kit/commands/auditar-refactor.md +219 -219
- package/kit/commands/auditar-release.md +109 -109
- package/kit/commands/auditar-uat.md +23 -23
- package/kit/commands/autonomo.md +40 -40
- package/kit/commands/branch-pr.md +24 -24
- package/kit/commands/burn-rate-status.md +408 -408
- package/kit/commands/capturar-payloads.md +193 -193
- package/kit/commands/caracterizar.md +212 -212
- package/kit/commands/concluir-marco.md +247 -247
- package/kit/commands/configuracoes.md +36 -36
- package/kit/commands/dados-distribuidos.md +188 -188
- package/kit/commands/definir-perfil.md +10 -10
- package/kit/commands/depurar.md +190 -190
- package/kit/commands/detectar-duplicacao.md +197 -197
- package/kit/commands/discutir-fase.md +131 -131
- package/kit/commands/encontrar-seams.md +136 -136
- package/kit/commands/entrar-discord.md +17 -17
- package/kit/commands/estatisticas.md +18 -18
- package/kit/commands/example-greeting.md +33 -33
- package/kit/commands/executar-fase.md +58 -58
- package/kit/commands/expresso.md +56 -56
- package/kit/commands/fase-ui.md +34 -34
- package/kit/commands/fazer.md +57 -57
- package/kit/commands/fio.md +125 -125
- package/kit/commands/fluxos-trabalho.md +64 -64
- package/kit/commands/forense.md +176 -176
- package/kit/commands/gerenciador.md +38 -38
- package/kit/commands/inserir-fase.md +31 -31
- package/kit/commands/legacy.md +263 -263
- package/kit/commands/limpeza.md +17 -17
- package/kit/commands/listar-hipoteses-fase.md +45 -45
- package/kit/commands/listar-workspaces.md +18 -18
- package/kit/commands/load-shedding.md +117 -117
- package/kit/commands/mapear-codebase.md +70 -70
- package/kit/commands/multi-tenant.md +163 -163
- package/kit/commands/nota.md +33 -33
- package/kit/commands/novo-marco.md +43 -43
- package/kit/commands/novo-projeto.md +41 -41
- package/kit/commands/novo-workspace.md +43 -43
- package/kit/commands/pausar-trabalho.md +37 -37
- package/kit/commands/perfil-usuario.md +45 -45
- package/kit/commands/pesquisar-fase.md +195 -195
- package/kit/commands/planejar-fase.md +67 -67
- package/kit/commands/planejar-lacunas.md +33 -33
- package/kit/commands/plantar-ideia.md +25 -25
- package/kit/commands/progresso.md +24 -24
- package/kit/commands/proximo.md +30 -30
- package/kit/commands/publicar.md +490 -490
- package/kit/commands/rapido.md +35 -35
- package/kit/commands/reaplicar-patches.md +124 -124
- package/kit/commands/refactor-seguro.md +321 -321
- package/kit/commands/relatorio-sessao.md +19 -19
- package/kit/commands/remover-fase.md +31 -31
- package/kit/commands/remover-workspace.md +26 -26
- package/kit/commands/resumo-marco.md +50 -50
- package/kit/commands/retomar-trabalho.md +40 -40
- package/kit/commands/revisar-backlog.md +60 -60
- package/kit/commands/revisar-ui.md +32 -32
- package/kit/commands/revisar.md +37 -37
- package/kit/commands/saude.md +21 -21
- package/kit/commands/setup-notion.md +93 -93
- package/kit/commands/storytelling.md +179 -179
- package/kit/commands/supabase.md +238 -238
- package/kit/commands/sync-main.md +68 -68
- package/kit/commands/validar-fase.md +35 -35
- package/kit/commands/verificar-tarefas.md +44 -44
- package/kit/commands/verificar-trabalho.md +64 -64
- package/kit/file-manifest.json +13 -3
- package/kit/framework/bin/lib/commands.cjs +959 -959
- package/kit/framework/bin/lib/config.cjs +442 -442
- package/kit/framework/bin/lib/core.cjs +1230 -1230
- package/kit/framework/bin/lib/frontmatter.cjs +336 -336
- package/kit/framework/bin/lib/init.cjs +1442 -1442
- package/kit/framework/bin/lib/milestone.cjs +252 -252
- package/kit/framework/bin/lib/model-profiles.cjs +68 -68
- package/kit/framework/bin/lib/phase.cjs +888 -888
- package/kit/framework/bin/lib/profile-output.cjs +952 -952
- package/kit/framework/bin/lib/profile-pipeline.cjs +539 -539
- package/kit/framework/bin/lib/roadmap.cjs +329 -329
- package/kit/framework/bin/lib/security.cjs +382 -382
- package/kit/framework/bin/lib/state.cjs +1031 -1031
- package/kit/framework/bin/lib/template.cjs +222 -222
- package/kit/framework/bin/lib/uat.cjs +282 -282
- package/kit/framework/bin/lib/verify.cjs +888 -888
- package/kit/framework/bin/lib/workstream.cjs +491 -491
- package/kit/framework/bin/tools.cjs +918 -918
- package/kit/framework/commands/workstreams.md +63 -63
- package/kit/framework/references/checkpoints.md +778 -778
- package/kit/framework/references/continuation-format.md +249 -249
- package/kit/framework/references/decimal-phase-calculation.md +64 -64
- package/kit/framework/references/git-integration.md +295 -295
- package/kit/framework/references/git-planning-commit.md +38 -38
- package/kit/framework/references/model-profile-resolution.md +36 -36
- package/kit/framework/references/model-profiles.md +139 -139
- package/kit/framework/references/phase-argument-parsing.md +61 -61
- package/kit/framework/references/planning-config.md +202 -202
- package/kit/framework/references/questioning.md +162 -162
- package/kit/framework/references/tdd.md +263 -263
- package/kit/framework/references/ui-brand.md +160 -160
- package/kit/framework/references/user-profiling.md +657 -657
- package/kit/framework/references/verification-patterns.md +612 -612
- package/kit/framework/references/workstream-flag.md +58 -58
- package/kit/framework/templates/DEBUG.md +164 -164
- package/kit/framework/templates/UAT.md +265 -265
- package/kit/framework/templates/UI-SPEC.md +100 -100
- package/kit/framework/templates/VALIDATION.md +76 -76
- package/kit/framework/templates/claude-md.md +122 -122
- package/kit/framework/templates/codebase/architecture.md +185 -185
- package/kit/framework/templates/codebase/concerns.md +205 -205
- package/kit/framework/templates/codebase/conventions.md +204 -204
- package/kit/framework/templates/codebase/integrations.md +192 -192
- package/kit/framework/templates/codebase/stack.md +158 -158
- package/kit/framework/templates/codebase/structure.md +199 -199
- package/kit/framework/templates/codebase/testing.md +301 -301
- package/kit/framework/templates/config.json +44 -44
- package/kit/framework/templates/context.md +352 -352
- package/kit/framework/templates/continue-here.md +78 -78
- package/kit/framework/templates/copilot-instructions.md +7 -7
- package/kit/framework/templates/debug-subagent-prompt.md +91 -91
- package/kit/framework/templates/dev-preferences.md +20 -20
- package/kit/framework/templates/discovery.md +146 -146
- package/kit/framework/templates/discussion-log.md +63 -63
- package/kit/framework/templates/milestone-archive.md +123 -123
- package/kit/framework/templates/milestone.md +115 -115
- package/kit/framework/templates/phase-prompt.md +610 -610
- package/kit/framework/templates/planner-subagent-prompt.md +117 -117
- package/kit/framework/templates/project.md +186 -186
- package/kit/framework/templates/requirements.md +231 -231
- package/kit/framework/templates/research-project/ARCHITECTURE.md +204 -204
- package/kit/framework/templates/research-project/FEATURES.md +147 -147
- package/kit/framework/templates/research-project/PITFALLS.md +200 -200
- package/kit/framework/templates/research-project/STACK.md +120 -120
- package/kit/framework/templates/research-project/SUMMARY.md +170 -170
- package/kit/framework/templates/research.md +419 -419
- package/kit/framework/templates/retrospective.md +54 -54
- package/kit/framework/templates/roadmap.md +202 -202
- package/kit/framework/templates/state.md +176 -176
- package/kit/framework/templates/summary-complex.md +59 -59
- package/kit/framework/templates/summary-minimal.md +41 -41
- package/kit/framework/templates/summary-standard.md +48 -48
- package/kit/framework/templates/summary.md +209 -209
- package/kit/framework/templates/user-profile.md +146 -146
- package/kit/framework/templates/user-setup.md +256 -256
- package/kit/framework/templates/verification-report.md +258 -258
- package/kit/framework/workflows/add-phase.md +112 -112
- package/kit/framework/workflows/add-tests.md +351 -351
- package/kit/framework/workflows/add-todo.md +158 -158
- package/kit/framework/workflows/audit-milestone.md +340 -340
- package/kit/framework/workflows/audit-uat.md +109 -109
- package/kit/framework/workflows/autonomous.md +891 -891
- package/kit/framework/workflows/check-todos.md +177 -177
- package/kit/framework/workflows/cleanup.md +152 -152
- package/kit/framework/workflows/complete-milestone.md +696 -696
- package/kit/framework/workflows/diagnose-issues.md +231 -231
- package/kit/framework/workflows/discovery-phase.md +289 -289
- package/kit/framework/workflows/discuss-phase-assumptions.md +653 -653
- package/kit/framework/workflows/discuss-phase.md +784 -784
- package/kit/framework/workflows/do.md +104 -104
- package/kit/framework/workflows/execute-phase.md +838 -838
- package/kit/framework/workflows/execute-plan.md +510 -510
- package/kit/framework/workflows/fast.md +102 -102
- package/kit/framework/workflows/forensics.md +265 -265
- package/kit/framework/workflows/health.md +181 -181
- package/kit/framework/workflows/help.md +619 -619
- package/kit/framework/workflows/insert-phase.md +130 -130
- package/kit/framework/workflows/list-phase-assumptions.md +178 -178
- package/kit/framework/workflows/list-workspaces.md +56 -56
- package/kit/framework/workflows/manager.md +362 -362
- package/kit/framework/workflows/map-codebase.md +377 -377
- package/kit/framework/workflows/milestone-summary.md +223 -223
- package/kit/framework/workflows/new-milestone.md +486 -486
- package/kit/framework/workflows/new-project.md +1159 -1159
- package/kit/framework/workflows/new-workspace.md +237 -237
- package/kit/framework/workflows/next.md +97 -97
- package/kit/framework/workflows/node-repair.md +92 -92
- package/kit/framework/workflows/note.md +156 -156
- package/kit/framework/workflows/pause-work.md +176 -176
- package/kit/framework/workflows/plan-milestone-gaps.md +273 -273
- package/kit/framework/workflows/plan-phase.md +765 -765
- package/kit/framework/workflows/plant-seed.md +169 -169
- package/kit/framework/workflows/pr-branch.md +129 -129
- package/kit/framework/workflows/profile-user.md +450 -450
- package/kit/framework/workflows/progress.md +507 -507
- package/kit/framework/workflows/quick.md +757 -757
- package/kit/framework/workflows/remove-phase.md +155 -155
- package/kit/framework/workflows/remove-workspace.md +90 -90
- package/kit/framework/workflows/research-phase.md +82 -82
- package/kit/framework/workflows/resume-project.md +326 -326
- package/kit/framework/workflows/review.md +228 -228
- package/kit/framework/workflows/session-report.md +146 -146
- package/kit/framework/workflows/settings.md +283 -283
- package/kit/framework/workflows/ship.md +228 -228
- package/kit/framework/workflows/stats.md +60 -60
- package/kit/framework/workflows/transition.md +671 -671
- package/kit/framework/workflows/ui-phase.md +302 -302
- package/kit/framework/workflows/ui-review.md +165 -165
- package/kit/framework/workflows/update.md +323 -323
- package/kit/framework/workflows/validate-phase.md +174 -174
- package/kit/framework/workflows/verify-phase.md +252 -252
- package/kit/framework/workflows/verify-work.md +637 -637
- package/kit/hooks/check-update.js +118 -118
- package/kit/hooks/context-monitor.js +163 -163
- package/kit/hooks/kit-attribution-reminder.cjs +92 -92
- package/kit/hooks/kit-router.cjs +137 -137
- package/kit/hooks/prompt-guard.js +103 -103
- package/kit/hooks/statusline.js +125 -125
- package/kit/hooks/workflow-guard.js +101 -101
- package/kit/settings.json +45 -45
- package/kit/skills/ai-prompt-characterization/SKILL.md +335 -335
- package/kit/skills/armadilhas-sistemas-distribuidos/SKILL.md +447 -447
- package/kit/skills/audit-log-multi-tenant/SKILL.md +340 -340
- package/kit/skills/b2b-saas-architecture/SKILL.md +300 -300
- package/kit/skills/consistencia-leitura-replica/SKILL.md +385 -385
- package/kit/skills/crm-lead-pipeline-patterns/SKILL.md +343 -343
- package/kit/skills/escolha-modelo-consistencia/SKILL.md +494 -494
- package/kit/skills/evolucao-schema-compativel/SKILL.md +448 -448
- package/kit/skills/evolution-go-whatsapp-integration/SKILL.md +322 -322
- package/kit/skills/example-skill/SKILL.md +42 -42
- package/kit/skills/legacy-api-only-applications/SKILL.md +358 -358
- package/kit/skills/legacy-characterization-tests/SKILL.md +330 -330
- package/kit/skills/legacy-effect-analysis/SKILL.md +331 -331
- package/kit/skills/legacy-extract-class/SKILL.md +203 -203
- package/kit/skills/legacy-programming-by-difference/SKILL.md +252 -252
- package/kit/skills/legacy-seams-and-test-harness/SKILL.md +460 -460
- package/kit/skills/legacy-shotgun-surgery/SKILL.md +286 -286
- package/kit/skills/legacy-sprout-wrap-techniques/SKILL.md +434 -434
- package/kit/skills/legacy-storytelling-naked-crc/SKILL.md +270 -270
- package/kit/skills/lgpd-multi-tenant-compliance/SKILL.md +340 -340
- package/kit/skills/member-invite-flow/SKILL.md +305 -305
- package/kit/skills/member-management-react-shadcn/SKILL.md +328 -328
- package/kit/skills/multi-tenant-performance-scaling/SKILL.md +316 -316
- package/kit/skills/multi-tenant-rls-hierarchy/SKILL.md +342 -342
- package/kit/skills/org-onboarding-flow/SKILL.md +257 -257
- package/kit/skills/org-switcher-react-pattern/SKILL.md +349 -349
- package/kit/skills/permission-gate-react-pattern/SKILL.md +271 -271
- package/kit/skills/postgres-isolamento-concorrencia/SKILL.md +552 -552
- package/kit/skills/pre-refactor-characterization/SKILL.md +421 -421
- package/kit/skills/rbac-permissions-matrix-supabase/SKILL.md +338 -338
- package/kit/skills/streams-eventos-cdc/SKILL.md +711 -711
- package/kit/skills/supabase-auth-hardening/SKILL.md +674 -674
- package/kit/skills/supabase-auth-hooks/SKILL.md +875 -875
- package/kit/skills/supabase-auth-methods/SKILL.md +486 -486
- package/kit/skills/supabase-auth-sessions/SKILL.md +579 -579
- package/kit/skills/supabase-auth-ssr/SKILL.md +306 -306
- package/kit/skills/supabase-branching-workflow/SKILL.md +544 -544
- package/kit/skills/supabase-ci-cd-github-actions/SKILL.md +880 -880
- package/kit/skills/supabase-column-level-security/SKILL.md +426 -426
- package/kit/skills/supabase-config-toml-remotes/SKILL.md +807 -807
- package/kit/skills/supabase-custom-claims-rbac/SKILL.md +472 -472
- package/kit/skills/supabase-edge-functions/SKILL.md +330 -330
- package/kit/skills/supabase-edge-functions-auth/SKILL.md +309 -309
- package/kit/skills/supabase-edge-functions-limits/SKILL.md +302 -302
- package/kit/skills/supabase-edge-functions-mcp-server/SKILL.md +279 -279
- package/kit/skills/supabase-edge-functions-testing/SKILL.md +277 -277
- package/kit/skills/supabase-edge-runtime-builtins/SKILL.md +357 -357
- package/kit/skills/supabase-enterprise-sso-saml/SKILL.md +545 -545
- package/kit/skills/supabase-jwt-signing-keys/SKILL.md +399 -399
- package/kit/skills/supabase-mfa/SKILL.md +488 -488
- package/kit/skills/supabase-migration-repair/SKILL.md +823 -823
- package/kit/skills/supabase-migrations/SKILL.md +297 -297
- package/kit/skills/supabase-oauth-server/SKILL.md +537 -537
- package/kit/skills/supabase-pgtap-testing/SKILL.md +1053 -1053
- package/kit/skills/supabase-postgres-roles/SKILL.md +392 -392
- package/kit/skills/supabase-realtime/SKILL.md +460 -460
- package/kit/skills/supabase-rls-defense-in-depth/SKILL.md +418 -418
- package/kit/skills/supabase-rls-policies/SKILL.md +635 -635
- package/kit/skills/supabase-social-oauth/SKILL.md +480 -480
- package/kit/skills/supabase-third-party-auth/SKILL.md +450 -450
- package/kit/skills/super-admin-platform-pattern/SKILL.md +326 -326
- package/kit/skills/tenant-quente-mitigacao/SKILL.md +605 -605
- package/kit/skills/ui-anti-padroes-ia/SKILL.md +261 -0
- package/kit/skills/ui-contexto-produto/SKILL.md +248 -0
- package/kit/skills/ui-cor-estrategia/SKILL.md +213 -0
- package/kit/skills/ui-critica-auditoria/SKILL.md +260 -0
- package/kit/skills/ui-motion-funcional/SKILL.md +264 -0
- package/kit/skills/ui-ritmo-espacial/SKILL.md +259 -0
- package/kit/skills/ui-tipografia/SKILL.md +211 -0
- package/kit/skills/whatsapp-conversation-state-machine/SKILL.md +287 -287
- package/kit/workflows/auditar-observabilidade-cobertura.workflow.js +250 -0
- package/package.json +65 -63
- package/src/core/kit.js +333 -216
- package/src/core/reflect.js +247 -247
- package/src/core/registry.js +123 -112
- package/src/core/reverse-sync.js +448 -372
- package/src/core/sync.js +477 -437
- package/src/core/watch.js +121 -121
- package/src/mcp-server/index.js +794 -794
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-motion-funcional
|
|
3
|
+
description: Use ao adicionar animation/transition — motion comunica estado, nao decora. 150-200ms interacoes / 250-400ms layout. ease-out default. prefers-reduced-motion sempre. Sem auto-play e parallax.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# UI — Motion Funcional
|
|
7
|
+
|
|
8
|
+
## Quando usar
|
|
9
|
+
|
|
10
|
+
LLM carrega esta skill quando:
|
|
11
|
+
|
|
12
|
+
- "Adicionar animation / transition / motion"
|
|
13
|
+
- "Algo parece estático / sem vida"
|
|
14
|
+
- "Confetti / celebration / delight moment"
|
|
15
|
+
- "Page transition / route change"
|
|
16
|
+
- Preenchendo Componentes/Regras com motion rules
|
|
17
|
+
|
|
18
|
+
## Regras absolutas
|
|
19
|
+
|
|
20
|
+
**REGRA #1 (com propósito, não decorativo):** Motion existe para comunicar **mudança de estado** (loading → done, hidden → visible, focus, error). Decoração pura (parallax, auto-scrolling text, ambient bg motion) é proibida em produto, raramente justificada em marca.
|
|
21
|
+
|
|
22
|
+
**REGRA #2 (duração por contexto):**
|
|
23
|
+
- **Micro-interação** (hover, focus, button press): **100-150ms**
|
|
24
|
+
- **Mudança de estado** (toggle, dropdown, popover open): **150-200ms**
|
|
25
|
+
- **Layout shift** (modal open, drawer slide): **250-400ms**
|
|
26
|
+
- **Page transition**: **300-400ms** max
|
|
27
|
+
- **Celebration** (confetti, hero entrance): **600-800ms** com justificativa, 1 vez
|
|
28
|
+
|
|
29
|
+
Duração > 500ms em interação = lento. < 100ms = imperceptível, sem valor.
|
|
30
|
+
|
|
31
|
+
**REGRA #3 (easing canônico):**
|
|
32
|
+
- **Padrão**: `ease-out` ou `cubic-bezier(0.2, 0.8, 0.2, 1)` (entry rápido, settle suave)
|
|
33
|
+
- **Exit/dismiss**: `ease-in` aceitável para "remover do palco"
|
|
34
|
+
- **Layout shifts**: `cubic-bezier(0.4, 0, 0.2, 1)` (Material standard)
|
|
35
|
+
- **PROIBIDO em produto**: `bounce`, `elastic`, `back` easings — playful demais para uso funcional
|
|
36
|
+
|
|
37
|
+
**REGRA #4 (prefers-reduced-motion sempre):** Toda animation tem fallback estático.
|
|
38
|
+
|
|
39
|
+
**REGRA #5 (no layout thrash):** Anime apenas `transform` + `opacity`. Nunca anime `width`, `height`, `top`, `left`, `padding` em hot path. Use `transform: translate3d()` + `scale()`.
|
|
40
|
+
|
|
41
|
+
## Patterns canônicos
|
|
42
|
+
|
|
43
|
+
### Micro-interação (button hover)
|
|
44
|
+
|
|
45
|
+
```css
|
|
46
|
+
.button {
|
|
47
|
+
transition: background-color 150ms ease-out, transform 150ms ease-out;
|
|
48
|
+
}
|
|
49
|
+
.button:hover {
|
|
50
|
+
background-color: var(--primary-hover);
|
|
51
|
+
}
|
|
52
|
+
.button:active {
|
|
53
|
+
transform: translateY(1px); /* sutil press-down */
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@media (prefers-reduced-motion: reduce) {
|
|
57
|
+
.button { transition: none; }
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Dropdown / Popover open
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
// Framer Motion
|
|
65
|
+
<motion.div
|
|
66
|
+
initial={{ opacity: 0, y: -8 }}
|
|
67
|
+
animate={{ opacity: 1, y: 0 }}
|
|
68
|
+
exit={{ opacity: 0, y: -8 }}
|
|
69
|
+
transition={{ duration: 0.18, ease: [0.2, 0.8, 0.2, 1] }}
|
|
70
|
+
>
|
|
71
|
+
{/* content */}
|
|
72
|
+
</motion.div>
|
|
73
|
+
|
|
74
|
+
// Tailwind / CSS only
|
|
75
|
+
className="data-[state=open]:animate-in data-[state=open]:fade-in-0
|
|
76
|
+
data-[state=open]:slide-in-from-top-1
|
|
77
|
+
data-[state=closed]:animate-out data-[state=closed]:fade-out-0
|
|
78
|
+
data-[state=closed]:slide-out-to-top-1
|
|
79
|
+
duration-200 ease-out"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Modal / Dialog
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
// Mobile: slide-from-bottom (sheet)
|
|
86
|
+
// Desktop: scale central + fade
|
|
87
|
+
|
|
88
|
+
className="
|
|
89
|
+
/* mobile */
|
|
90
|
+
data-[state=open]:animate-in data-[state=open]:slide-in-from-bottom
|
|
91
|
+
data-[state=closed]:animate-out data-[state=closed]:slide-out-to-bottom
|
|
92
|
+
/* desktop */
|
|
93
|
+
sm:data-[state=open]:zoom-in-95 sm:data-[state=closed]:zoom-out-95
|
|
94
|
+
sm:data-[state=open]:fade-in-0 sm:data-[state=closed]:fade-out-0
|
|
95
|
+
/* timing */
|
|
96
|
+
duration-300 ease-out
|
|
97
|
+
"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Layout state transitions
|
|
101
|
+
|
|
102
|
+
```tsx
|
|
103
|
+
// Lista que filtra: AnimatePresence + layout
|
|
104
|
+
<AnimatePresence mode="popLayout">
|
|
105
|
+
{items.map(item => (
|
|
106
|
+
<motion.div
|
|
107
|
+
key={item.id}
|
|
108
|
+
layout
|
|
109
|
+
initial={{ opacity: 0, scale: 0.95 }}
|
|
110
|
+
animate={{ opacity: 1, scale: 1 }}
|
|
111
|
+
exit={{ opacity: 0, scale: 0.95 }}
|
|
112
|
+
transition={{ duration: 0.2, ease: 'easeOut' }}
|
|
113
|
+
>
|
|
114
|
+
{item.label}
|
|
115
|
+
</motion.div>
|
|
116
|
+
))}
|
|
117
|
+
</AnimatePresence>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Loading state (skeleton + transition)
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
{loading ? (
|
|
124
|
+
<Skeleton className="h-24 animate-pulse" />
|
|
125
|
+
) : (
|
|
126
|
+
<motion.div
|
|
127
|
+
initial={{ opacity: 0 }}
|
|
128
|
+
animate={{ opacity: 1 }}
|
|
129
|
+
transition={{ duration: 0.15 }}
|
|
130
|
+
>
|
|
131
|
+
{data}
|
|
132
|
+
</motion.div>
|
|
133
|
+
)}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Celebration (use 1× por flow, justificado)
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
// Onboarding: primeiro check-in completado
|
|
140
|
+
import confetti from 'canvas-confetti'
|
|
141
|
+
|
|
142
|
+
useEffect(() => {
|
|
143
|
+
if (justCompleted) {
|
|
144
|
+
confetti({
|
|
145
|
+
particleCount: 80,
|
|
146
|
+
spread: 60,
|
|
147
|
+
origin: { y: 0.4 },
|
|
148
|
+
colors: [primaryColor, foregroundColor], // brand-tinted, não rainbow
|
|
149
|
+
disableForReducedMotion: true,
|
|
150
|
+
})
|
|
151
|
+
}
|
|
152
|
+
}, [justCompleted])
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Critérios para usar confetti:
|
|
156
|
+
1. Evento raro (não toast comum)
|
|
157
|
+
2. Sucesso significativo (não "saved successfully" trivial)
|
|
158
|
+
3. Cores da marca (não default rainbow)
|
|
159
|
+
4. `disableForReducedMotion: true`
|
|
160
|
+
5. Não bloqueia interação subsequente
|
|
161
|
+
|
|
162
|
+
## Anti-patterns
|
|
163
|
+
|
|
164
|
+
### Anti-pattern 1: bounce easing em produto
|
|
165
|
+
|
|
166
|
+
**Errado:**
|
|
167
|
+
```css
|
|
168
|
+
.dropdown {
|
|
169
|
+
transition: transform 300ms cubic-bezier(0.68, -0.55, 0.265, 1.55); /* bounce */
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Por quê:** Q08 — bounce em interação comum = playful demais, perde profissionalismo em context dashboard.
|
|
174
|
+
|
|
175
|
+
**Certo:** `ease-out` ou `cubic-bezier(0.2, 0.8, 0.2, 1)`.
|
|
176
|
+
|
|
177
|
+
### Anti-pattern 2: motion em decoração de bg
|
|
178
|
+
|
|
179
|
+
**Errado:** SVG floating shapes orbitando hero em background, animação infinita.
|
|
180
|
+
|
|
181
|
+
**Por quê:** REGRA #1 — decoração sem propósito + drena GPU + viewport battery + distrai do conteúdo.
|
|
182
|
+
|
|
183
|
+
**Certo:** static. Ou movimento triggerado por scroll JÁ engajado (parallax leve, max -10% translate), nunca infinito.
|
|
184
|
+
|
|
185
|
+
### Anti-pattern 3: animar `height` ou `width` em accordion
|
|
186
|
+
|
|
187
|
+
**Errado:**
|
|
188
|
+
```css
|
|
189
|
+
.accordion-content {
|
|
190
|
+
transition: height 300ms;
|
|
191
|
+
}
|
|
192
|
+
.accordion-content.open { height: auto; } /* além de quebrar transition, layout thrash */
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Por quê:** REGRA #5 — height/width disparam reflow + paint, queda de fps em mobile.
|
|
196
|
+
|
|
197
|
+
**Certo:** anime `transform: scaleY` ou `max-height` + `clip-path`. Ou use lib (Radix Accordion) que faz right.
|
|
198
|
+
|
|
199
|
+
### Anti-pattern 4: page transition longa
|
|
200
|
+
|
|
201
|
+
**Errado:** route change com fade out 600ms + fade in 600ms = 1.2s de tela vazia.
|
|
202
|
+
|
|
203
|
+
**Por quê:** REGRA #2 — user percebe app lento. App nativo bom = transição instantânea ou < 300ms.
|
|
204
|
+
|
|
205
|
+
**Certo:** 200ms fade out + 200ms fade in, OU cross-fade overlap 250ms total.
|
|
206
|
+
|
|
207
|
+
### Anti-pattern 5: ignorar prefers-reduced-motion
|
|
208
|
+
|
|
209
|
+
**Errado:**
|
|
210
|
+
```tsx
|
|
211
|
+
<motion.div animate={{ x: [0, 100, 0] }} transition={{ repeat: Infinity }} />
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**Por quê:** REGRA #4 — users com vestibular disorder ou enxaqueca + usuários com bateria fraca + corporate machines.
|
|
215
|
+
|
|
216
|
+
**Certo:**
|
|
217
|
+
```tsx
|
|
218
|
+
const shouldReduceMotion = useReducedMotion()
|
|
219
|
+
<motion.div
|
|
220
|
+
animate={shouldReduceMotion ? {} : { x: [0, 100, 0] }}
|
|
221
|
+
transition={{ repeat: shouldReduceMotion ? 0 : Infinity }}
|
|
222
|
+
/>
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Anti-pattern 6: auto-play hero video sem controle
|
|
226
|
+
|
|
227
|
+
**Errado:** `<video autoPlay loop muted playsInline>` em hero, 5MB+, sem botão pausar.
|
|
228
|
+
|
|
229
|
+
**Por quê:** Acessibilidade + bateria + bandwidth. Tem que existir pause/control visível e respeitar prefers-reduced-motion (pausa default).
|
|
230
|
+
|
|
231
|
+
**Certo:**
|
|
232
|
+
```tsx
|
|
233
|
+
<video
|
|
234
|
+
ref={videoRef}
|
|
235
|
+
autoPlay={!prefersReducedMotion}
|
|
236
|
+
loop muted playsInline
|
|
237
|
+
poster="/hero-static.jpg"
|
|
238
|
+
/>
|
|
239
|
+
<button onClick={togglePlay} aria-label="Toggle video">…</button>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Detecção
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# Bounce/elastic easing
|
|
246
|
+
grep -rnE "bounce|cubic-bezier\(0\.68|elastic" src --include="*.css" --include="*.tsx" 2>/dev/null
|
|
247
|
+
|
|
248
|
+
# Animação > 500ms em interação
|
|
249
|
+
grep -rnE "duration-(700|1000|1500|2000)\b|duration:\s*(700|800|1000|1500)" src --include="*.tsx" --include="*.css" 2>/dev/null
|
|
250
|
+
|
|
251
|
+
# Layout-thrashing animations
|
|
252
|
+
grep -rnE "transition.*width|transition.*height|transition.*top|transition.*left|transition.*padding|transition.*margin" src --include="*.css" 2>/dev/null
|
|
253
|
+
|
|
254
|
+
# Falta de prefers-reduced-motion handler
|
|
255
|
+
grep -rln "framer-motion\|animate=" src --include="*.tsx" 2>/dev/null | while read f; do
|
|
256
|
+
grep -q "useReducedMotion\|prefers-reduced-motion" "$f" || echo "$f: motion sem reduce handler"
|
|
257
|
+
done
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Ver também
|
|
261
|
+
|
|
262
|
+
- [ui-anti-padroes-ia](../ui-anti-padroes-ia/SKILL.md) — Q08 (bounce easing)
|
|
263
|
+
- [ui-contexto-produto](../ui-contexto-produto/SKILL.md) — sensibilidade a motion em MARCA.md
|
|
264
|
+
- WCAG SC 2.3.3 Animation from Interactions: https://www.w3.org/WAI/WCAG21/Understanding/animation-from-interactions
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-ritmo-espacial
|
|
3
|
+
description: Use ao definir spacing/padding/grid — escala base 4 (4/8/16/24/32/48/64/96), alinhamento optico != matematico, breathing room no viewport edge, sem arbitrary [13px] nem padding cramped.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# UI — Ritmo Espacial
|
|
7
|
+
|
|
8
|
+
## Quando usar
|
|
9
|
+
|
|
10
|
+
LLM carrega esta skill quando:
|
|
11
|
+
|
|
12
|
+
- "Espaçamento parece estranho / cramped / inconsistente"
|
|
13
|
+
- "Alinhar elementos / grid / layout"
|
|
14
|
+
- "Padding em botão / card / dialog"
|
|
15
|
+
- "Container width / max-width"
|
|
16
|
+
- "Optical alignment" / "está 1px off"
|
|
17
|
+
- Preenchendo seção **Componentes** com spacing rules
|
|
18
|
+
|
|
19
|
+
## Regras absolutas
|
|
20
|
+
|
|
21
|
+
**REGRA #1 (escala base-4):** Spacing apenas em múltiplos de 4. Permitidos: `4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128`. **Proibidos:** valores arbitrários `[13px]`, `[27px]`, `[1.7rem]`. Se você precisa de um, problema é de escala não documentada.
|
|
22
|
+
|
|
23
|
+
**REGRA #2 (3 níveis de densidade):**
|
|
24
|
+
- **Densa** (`gap-1`/`p-2`/`px-3`): tables, data grids, command palettes
|
|
25
|
+
- **Padrão** (`gap-4`/`p-4`/`px-6`): cards, forms, sections
|
|
26
|
+
- **Generosa** (`gap-8`/`p-8`/`px-12`): heroes, marketing, empty states
|
|
27
|
+
|
|
28
|
+
Misturar densa + generosa na mesma seção = ritmo quebrado.
|
|
29
|
+
|
|
30
|
+
**REGRA #3 (no edge flush):** Texto e UI sempre com padding lateral mínimo `px-4` (mobile) → `px-6` (tablet) → `px-8` (desktop). Conteúdo nunca encosta na viewport.
|
|
31
|
+
|
|
32
|
+
**REGRA #4 (container width em ch):** Containers de texto têm `max-width` em `ch` unit (50-75ch body). Container de UI em `max-w-7xl` (1280px) ou `max-w-5xl` (1024px) padrão.
|
|
33
|
+
|
|
34
|
+
**REGRA #5 (alinhamento óptico):** Ícones e glifos têm bounding box que ≠ shape óptico. Centralização matemática vê desalinhada. Compense: setas/triângulos shift -1 ou -2 px na direção oposta da ponta. Texto + ícone vertical alinha pela `cap-height`, não pela baseline.
|
|
35
|
+
|
|
36
|
+
## Escala canônica
|
|
37
|
+
|
|
38
|
+
```js
|
|
39
|
+
// tailwind.config.js — restrinja explicit, esconda o resto
|
|
40
|
+
module.exports = {
|
|
41
|
+
theme: {
|
|
42
|
+
spacing: {
|
|
43
|
+
'0': '0',
|
|
44
|
+
'px': '1px',
|
|
45
|
+
'0.5': '2px', // só para borders/dividers
|
|
46
|
+
'1': '4px',
|
|
47
|
+
'2': '8px',
|
|
48
|
+
'3': '12px',
|
|
49
|
+
'4': '16px',
|
|
50
|
+
'5': '20px',
|
|
51
|
+
'6': '24px',
|
|
52
|
+
'8': '32px',
|
|
53
|
+
'10': '40px',
|
|
54
|
+
'12': '48px',
|
|
55
|
+
'16': '64px',
|
|
56
|
+
'20': '80px',
|
|
57
|
+
'24': '96px',
|
|
58
|
+
'32': '128px',
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Não inclua `7`, `9`, `11`, `14`, etc — força escolha de uma escala vizinha em vez de "tô em dúvida, vou de meio termo".
|
|
65
|
+
|
|
66
|
+
## Patterns canônicos
|
|
67
|
+
|
|
68
|
+
### Padding interno por componente
|
|
69
|
+
|
|
70
|
+
| Componente | Padding | Notas |
|
|
71
|
+
|------------|---------|-------|
|
|
72
|
+
| Button (padrão) | `px-4 py-2` (h-10) | min 44px touch target |
|
|
73
|
+
| Button (sm) | `px-3 py-1.5` (h-9) | minimum, densidade-tight |
|
|
74
|
+
| Button (lg) | `px-6 py-3` (h-12) | CTA hero |
|
|
75
|
+
| Input | `px-3 py-2` (h-10) | espaço para focus ring outside |
|
|
76
|
+
| Card (padrão) | `p-6` | conteúdo respira |
|
|
77
|
+
| Card (denso) | `p-4` | em lista de muitos |
|
|
78
|
+
| Dialog | `p-6` (mobile) / `p-8` (desktop) | conteúdo central |
|
|
79
|
+
| Badge / Chip | `px-2 py-0.5` | exceção à base-4, ok |
|
|
80
|
+
| Section (vertical) | `py-16` (mobile) / `py-24` (desktop) | hero/marketing |
|
|
81
|
+
| Section (vertical, produto) | `py-8` / `py-12` | denso |
|
|
82
|
+
|
|
83
|
+
### Container patterns
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
// Layout shell
|
|
87
|
+
<div className="min-h-screen">
|
|
88
|
+
<header className="border-b">
|
|
89
|
+
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 h-16 flex items-center">
|
|
90
|
+
{/* nav */}
|
|
91
|
+
</div>
|
|
92
|
+
</header>
|
|
93
|
+
|
|
94
|
+
<main>
|
|
95
|
+
{/* Marketing section */}
|
|
96
|
+
<section className="mx-auto max-w-5xl px-4 sm:px-6 lg:px-8 py-16 lg:py-24">
|
|
97
|
+
<h1 className="max-w-[18ch] text-balance text-6xl">…</h1>
|
|
98
|
+
<p className="max-w-[50ch] mt-6 text-lg text-muted-foreground">…</p>
|
|
99
|
+
</section>
|
|
100
|
+
|
|
101
|
+
{/* Produto dashboard */}
|
|
102
|
+
<section className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-8">
|
|
103
|
+
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">…</div>
|
|
104
|
+
</section>
|
|
105
|
+
|
|
106
|
+
{/* Prose article */}
|
|
107
|
+
<article className="mx-auto max-w-prose px-4 sm:px-6 py-12">
|
|
108
|
+
{/* max-w-prose = 65ch */}
|
|
109
|
+
</article>
|
|
110
|
+
</main>
|
|
111
|
+
</div>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Ritmo vertical em prose
|
|
115
|
+
|
|
116
|
+
```tsx
|
|
117
|
+
<article className="prose">
|
|
118
|
+
<h1 className="mb-8">…</h1> {/* h1 + spacing maior abaixo */}
|
|
119
|
+
<h2 className="mt-12 mb-4">…</h2> {/* h2 separa seções */}
|
|
120
|
+
<p className="mb-4 leading-7">…</p>{/* p body */}
|
|
121
|
+
<ul className="my-4 space-y-2">…</ul>
|
|
122
|
+
</article>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Regra: spacing acima de heading > spacing abaixo. Senão heading "flutua" no meio.
|
|
126
|
+
|
|
127
|
+
### Alinhamento óptico
|
|
128
|
+
|
|
129
|
+
```tsx
|
|
130
|
+
// Texto + ícone: align pelo center vertical, não baseline
|
|
131
|
+
<button className="inline-flex items-center gap-2">
|
|
132
|
+
<ArrowRight className="size-4 -translate-y-px" /> {/* -1px opcional para cap-height match */}
|
|
133
|
+
<span>Próximo</span>
|
|
134
|
+
</button>
|
|
135
|
+
|
|
136
|
+
// Heading + ícone decorativo: ícone alinha pelo x-height, não top
|
|
137
|
+
<h2 className="flex items-baseline gap-2">
|
|
138
|
+
<Sparkles className="size-5 translate-y-1" /> {/* push down to baseline-ish */}
|
|
139
|
+
<span>Feature</span>
|
|
140
|
+
</h2>
|
|
141
|
+
|
|
142
|
+
// Pill button: padding horizontal mais leve que vertical estaria — compense
|
|
143
|
+
<button className="rounded-full px-4 py-2"> {/* px-4 não px-3 — pill rouba H */}
|
|
144
|
+
Ação
|
|
145
|
+
</button>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Anti-patterns
|
|
149
|
+
|
|
150
|
+
### Anti-pattern 1: arbitrary values salpicados
|
|
151
|
+
|
|
152
|
+
**Errado:**
|
|
153
|
+
```tsx
|
|
154
|
+
<div className="p-[13px] mt-[27px] gap-[18px]">…</div>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Por quê:** REGRA #1 — escala se desfaz. Outro dev vê `13px` e adiciona `15px` ao lado. Em 6 meses ninguém sabe o que é "spacing default".
|
|
158
|
+
|
|
159
|
+
**Certo:** `p-3 mt-6 gap-4` (12/24/16, todos na escala). Se realmente precisa de um valor fora, adicione ao theme em vez de inline.
|
|
160
|
+
|
|
161
|
+
### Anti-pattern 2: padding cramped em interactive
|
|
162
|
+
|
|
163
|
+
**Errado:** `<button className="px-2 py-1">Salvar</button>`
|
|
164
|
+
|
|
165
|
+
**Por quê:** Q06 — touch hit area pequena + densidade desconfortável. Botão difícil de clicar.
|
|
166
|
+
|
|
167
|
+
**Certo:** `px-4 py-2` mínimo. Botão denso `px-3 py-1.5` apenas em toolbar.
|
|
168
|
+
|
|
169
|
+
### Anti-pattern 3: section sem padding lateral em mobile
|
|
170
|
+
|
|
171
|
+
**Errado:**
|
|
172
|
+
```tsx
|
|
173
|
+
<section className="max-w-7xl mx-auto py-16">
|
|
174
|
+
<h1 className="text-4xl">Title</h1> {/* encosta na borda em mobile */}
|
|
175
|
+
</section>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Por quê:** REGRA #3 — texto sem ar para respirar + acessibilidade em landscape narrow.
|
|
179
|
+
|
|
180
|
+
**Certo:**
|
|
181
|
+
```tsx
|
|
182
|
+
<section className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16">
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Anti-pattern 4: hero text sem max-width
|
|
186
|
+
|
|
187
|
+
**Errado:**
|
|
188
|
+
```tsx
|
|
189
|
+
<h1 className="text-6xl">Build amazing products with our platform today</h1>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Por quê:** REGRA #4 — line-length destruído em widescreen, leitura interrompida.
|
|
193
|
+
|
|
194
|
+
**Certo:**
|
|
195
|
+
```tsx
|
|
196
|
+
<h1 className="text-6xl max-w-[18ch] text-balance leading-tight">
|
|
197
|
+
Build amazing products
|
|
198
|
+
</h1>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Anti-pattern 5: misturar densidades sem motivo
|
|
202
|
+
|
|
203
|
+
**Errado:**
|
|
204
|
+
```tsx
|
|
205
|
+
<Card className="p-2"> {/* densa */}
|
|
206
|
+
<CardHeader className="p-8"> {/* generosa */}
|
|
207
|
+
<CardTitle>...</CardTitle>
|
|
208
|
+
</CardHeader>
|
|
209
|
+
<CardContent className="p-4"> {/* padrão */}
|
|
210
|
+
...
|
|
211
|
+
</CardContent>
|
|
212
|
+
</Card>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Por quê:** REGRA #2 — ritmo quebrado, agente IA depois não sabe qual densidade replicar.
|
|
216
|
+
|
|
217
|
+
**Certo:** uma densidade por componente. Card denso = todo o card `p-4` máximo. Card padrão = todo o card `p-6`.
|
|
218
|
+
|
|
219
|
+
### Anti-pattern 6: alinhar centro com texto
|
|
220
|
+
|
|
221
|
+
**Errado:**
|
|
222
|
+
```tsx
|
|
223
|
+
<div className="flex items-center">
|
|
224
|
+
<Icon />
|
|
225
|
+
<h2>Heading</h2>
|
|
226
|
+
</div>
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Pixel-perfect: ícone tem `cap-height` diferente do texto.
|
|
230
|
+
|
|
231
|
+
**Certo:**
|
|
232
|
+
```tsx
|
|
233
|
+
<div className="flex items-baseline gap-2"> {/* ou items-center + ícone -translate-y-px */}
|
|
234
|
+
<Icon className="translate-y-0.5" />
|
|
235
|
+
<h2>Heading</h2>
|
|
236
|
+
</div>
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Detecção
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
# Arbitrary spacing values
|
|
243
|
+
grep -rnE "(p|m|gap|space)-(x|y)?-\[[0-9]+(px|rem)\]" src --include="*.tsx" 2>/dev/null
|
|
244
|
+
|
|
245
|
+
# Edge flush
|
|
246
|
+
grep -rnE "max-w-7xl.*mx-auto.*py-" src --include="*.tsx" 2>/dev/null | grep -v "px-"
|
|
247
|
+
|
|
248
|
+
# Botão cramped
|
|
249
|
+
grep -rnE "<(button|Button)[^>]*\bp[xy]?-(1|2)\b" src --include="*.tsx" 2>/dev/null
|
|
250
|
+
|
|
251
|
+
# Hero sem max-w em ch
|
|
252
|
+
grep -rnE "text-(5xl|6xl|7xl|8xl|9xl)" src --include="*.tsx" 2>/dev/null | grep -v "max-w-\["
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Ver também
|
|
256
|
+
|
|
257
|
+
- [ui-anti-padroes-ia](../ui-anti-padroes-ia/SKILL.md) — Q02 (edge flush), Q06 (padding cramped)
|
|
258
|
+
- [ui-tipografia](../ui-tipografia/SKILL.md) — line-length em ch
|
|
259
|
+
- [ui-contexto-produto](../ui-contexto-produto/SKILL.md) — escala vai em DESIGN.json
|