@jaimevalasek/aioson 1.3.0 → 1.5.1
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/CHANGELOG.md +31 -1
- package/LICENSE +661 -21
- package/README.md +22 -3
- package/docs/en/squad-dashboard.md +372 -0
- package/docs/openclaw-bridge.md +308 -0
- package/docs/pt/README.md +62 -2
- package/docs/pt/advisor-spec.md +5 -5
- package/docs/pt/agentes-customizados.md +670 -0
- package/docs/pt/agentes.md +235 -23
- package/docs/pt/automacao-squads.md +407 -0
- package/docs/pt/cenarios.md +49 -5
- package/docs/pt/clientes-ai.md +62 -0
- package/docs/pt/comandos-cli.md +226 -17
- package/docs/pt/deyvin.md +115 -0
- package/docs/pt/genome-3.0-spec.md +11 -11
- package/docs/pt/inicio-rapido.md +63 -2
- package/docs/pt/memoria-contexto.md +255 -0
- package/docs/pt/output-strategy-delivery.md +655 -0
- package/docs/pt/profiler-system.md +17 -17
- package/docs/pt/runtime-observability.md +5 -1
- package/docs/pt/skills.md +175 -0
- package/docs/pt/squad-dashboard.md +373 -0
- package/docs/pt/{squad-genoma.md → squad-genome.md} +81 -75
- package/docs/testing/genome-2.0-matrix.md +5 -5
- package/docs/testing/genome-2.0-rollout.md +10 -10
- package/package.json +4 -4
- package/src/agents.js +21 -5
- package/src/backup-local.js +74 -0
- package/src/backup-provider.js +303 -0
- package/src/cli.js +276 -2
- package/src/commands/agents.js +22 -4
- package/src/commands/backup-local-cmd.js +25 -0
- package/src/commands/backup.js +533 -0
- package/src/commands/cloud.js +17 -17
- package/src/commands/context-pack.js +45 -0
- package/src/commands/implementation-plan.js +340 -0
- package/src/commands/learning.js +134 -0
- package/src/commands/live.js +1583 -0
- package/src/commands/runtime.js +1075 -2
- package/src/commands/scan-project.js +288 -24
- package/src/commands/setup-context.js +30 -2
- package/src/commands/skill.js +558 -0
- package/src/commands/squad-agent-create.js +788 -0
- package/src/commands/squad-daemon.js +209 -0
- package/src/commands/squad-dashboard.js +39 -0
- package/src/commands/squad-deploy.js +64 -0
- package/src/commands/squad-doctor.js +103 -1
- package/src/commands/squad-investigate.js +261 -0
- package/src/commands/squad-learning.js +209 -0
- package/src/commands/squad-mcp.js +270 -0
- package/src/commands/squad-pipeline.js +247 -1
- package/src/commands/squad-plan.js +329 -0
- package/src/commands/squad-processes.js +56 -0
- package/src/commands/squad-recovery.js +42 -0
- package/src/commands/squad-roi.js +291 -0
- package/src/commands/squad-score.js +250 -0
- package/src/commands/squad-status.js +38 -2
- package/src/commands/squad-validate.js +118 -1
- package/src/commands/squad-webhook.js +160 -0
- package/src/commands/squad-worker.js +191 -0
- package/src/commands/squad-worktrees.js +75 -0
- package/src/commands/test-agents.js +6 -1
- package/src/commands/web-map.js +70 -0
- package/src/commands/web-scrape.js +71 -0
- package/src/commands/workflow-next.js +8 -1
- package/src/commands/workflow-status.js +250 -0
- package/src/constants.js +88 -16
- package/src/context-memory.js +837 -0
- package/src/context-writer.js +47 -1
- package/src/delivery-runner.js +319 -0
- package/src/genome-files.js +1 -1
- package/src/genome-format.js +1 -1
- package/src/i18n/messages/en.js +333 -8
- package/src/i18n/messages/es.js +240 -6
- package/src/i18n/messages/fr.js +239 -5
- package/src/i18n/messages/pt-BR.js +330 -12
- package/src/installer.js +30 -2
- package/src/lib/genomes/compat.js +1 -1
- package/src/lib/webhook-server.js +328 -0
- package/src/mcp-connectors/registry.js +602 -0
- package/src/runtime-store.js +1037 -42
- package/src/session-handoff.js +77 -0
- package/src/squad/external-session.js +180 -0
- package/src/squad/inter-squad.js +74 -0
- package/src/squad/recovery-context.js +201 -0
- package/src/squad/worktree-manager.js +114 -0
- package/src/squad-daemon.js +490 -0
- package/src/squad-dashboard/api.js +223 -0
- package/src/squad-dashboard/attachment-handler.js +93 -0
- package/src/squad-dashboard/context-monitor.js +157 -0
- package/src/squad-dashboard/execution-logs.js +115 -0
- package/src/squad-dashboard/hunk-review.js +209 -0
- package/src/squad-dashboard/metrics.js +133 -0
- package/src/squad-dashboard/process-monitor.js +125 -0
- package/src/squad-dashboard/renderer.js +858 -0
- package/src/squad-dashboard/server.js +232 -0
- package/src/squad-dashboard/styles.js +525 -0
- package/src/squad-dashboard/token-tracker.js +99 -0
- package/src/web.js +284 -0
- package/src/worker-runner.js +339 -0
- package/template/.aioson/agents/analyst.md +40 -9
- package/template/.aioson/agents/architect.md +24 -5
- package/template/.aioson/agents/dev.md +254 -25
- package/template/.aioson/agents/deyvin.md +174 -0
- package/template/.aioson/agents/discovery-design-doc.md +25 -1
- package/template/.aioson/agents/{genoma.md → genome.md} +20 -20
- package/template/.aioson/agents/neo.md +152 -0
- package/template/.aioson/agents/orache.md +388 -0
- package/template/.aioson/agents/orchestrator.md +63 -2
- package/template/.aioson/agents/pair.md +5 -0
- package/template/.aioson/agents/pm.md +17 -5
- package/template/.aioson/agents/product.md +113 -29
- package/template/.aioson/agents/profiler-enricher.md +1 -1
- package/template/.aioson/agents/profiler-forge.md +9 -9
- package/template/.aioson/agents/profiler-researcher.md +1 -1
- package/template/.aioson/agents/qa.md +18 -5
- package/template/.aioson/agents/setup.md +138 -18
- package/template/.aioson/agents/sheldon.md +603 -0
- package/template/.aioson/agents/squad.md +866 -28
- package/template/.aioson/agents/tester.md +254 -0
- package/template/.aioson/agents/ux-ui.md +289 -34
- package/template/.aioson/config.md +181 -0
- package/template/.aioson/context/spec.md.template +17 -0
- package/template/.aioson/genomes/.gitkeep +0 -0
- package/template/.aioson/installed-skills/.gitkeep +0 -0
- package/template/.aioson/locales/en/agents/analyst.md +34 -4
- package/template/.aioson/locales/en/agents/architect.md +18 -0
- package/template/.aioson/locales/en/agents/dev.md +155 -11
- package/template/.aioson/locales/en/agents/deyvin.md +137 -0
- package/template/.aioson/locales/en/agents/{genoma.md → genome.md} +14 -14
- package/template/.aioson/locales/en/agents/neo.md +8 -0
- package/template/.aioson/locales/en/agents/orchestrator.md +62 -2
- package/template/.aioson/locales/en/agents/pair.md +5 -0
- package/template/.aioson/locales/en/agents/pm.md +7 -0
- package/template/.aioson/locales/en/agents/product.md +35 -17
- package/template/.aioson/locales/en/agents/qa.md +56 -0
- package/template/.aioson/locales/en/agents/setup.md +53 -6
- package/template/.aioson/locales/en/agents/sheldon.md +340 -0
- package/template/.aioson/locales/en/agents/squad.md +203 -15
- package/template/.aioson/locales/en/agents/ux-ui.md +383 -35
- package/template/.aioson/locales/es/agents/analyst.md +24 -4
- package/template/.aioson/locales/es/agents/architect.md +18 -0
- package/template/.aioson/locales/es/agents/dev.md +136 -9
- package/template/.aioson/locales/es/agents/deyvin.md +97 -0
- package/template/.aioson/locales/es/agents/{genoma.md → genome.md} +13 -13
- package/template/.aioson/locales/es/agents/neo.md +48 -0
- package/template/.aioson/locales/es/agents/orache.md +103 -0
- package/template/.aioson/locales/es/agents/orchestrator.md +62 -2
- package/template/.aioson/locales/es/agents/pair.md +5 -0
- package/template/.aioson/locales/es/agents/pm.md +7 -0
- package/template/.aioson/locales/es/agents/product.md +13 -3
- package/template/.aioson/locales/es/agents/qa.md +33 -0
- package/template/.aioson/locales/es/agents/setup.md +30 -6
- package/template/.aioson/locales/es/agents/sheldon.md +192 -0
- package/template/.aioson/locales/es/agents/squad.md +284 -15
- package/template/.aioson/locales/es/agents/ux-ui.md +34 -25
- package/template/.aioson/locales/fr/agents/analyst.md +24 -4
- package/template/.aioson/locales/fr/agents/architect.md +18 -0
- package/template/.aioson/locales/fr/agents/dev.md +136 -9
- package/template/.aioson/locales/fr/agents/deyvin.md +97 -0
- package/template/.aioson/locales/fr/agents/{genoma.md → genome.md} +7 -7
- package/template/.aioson/locales/fr/agents/neo.md +48 -0
- package/template/.aioson/locales/fr/agents/orache.md +104 -0
- package/template/.aioson/locales/fr/agents/orchestrator.md +62 -2
- package/template/.aioson/locales/fr/agents/pair.md +5 -0
- package/template/.aioson/locales/fr/agents/pm.md +7 -0
- package/template/.aioson/locales/fr/agents/product.md +13 -3
- package/template/.aioson/locales/fr/agents/qa.md +33 -0
- package/template/.aioson/locales/fr/agents/setup.md +30 -6
- package/template/.aioson/locales/fr/agents/sheldon.md +192 -0
- package/template/.aioson/locales/fr/agents/squad.md +279 -10
- package/template/.aioson/locales/fr/agents/ux-ui.md +34 -25
- package/template/.aioson/locales/pt-BR/agents/analyst.md +45 -4
- package/template/.aioson/locales/pt-BR/agents/architect.md +29 -0
- package/template/.aioson/locales/pt-BR/agents/dev.md +167 -15
- package/template/.aioson/locales/pt-BR/agents/deyvin.md +137 -0
- package/template/.aioson/locales/pt-BR/agents/{genoma.md → genome.md} +49 -49
- package/template/.aioson/locales/pt-BR/agents/neo.md +147 -0
- package/template/.aioson/locales/pt-BR/agents/orache.md +137 -0
- package/template/.aioson/locales/pt-BR/agents/orchestrator.md +62 -2
- package/template/.aioson/locales/pt-BR/agents/pair.md +5 -0
- package/template/.aioson/locales/pt-BR/agents/pm.md +7 -0
- package/template/.aioson/locales/pt-BR/agents/product.md +43 -20
- package/template/.aioson/locales/pt-BR/agents/qa.md +67 -0
- package/template/.aioson/locales/pt-BR/agents/setup.md +53 -6
- package/template/.aioson/locales/pt-BR/agents/sheldon.md +192 -0
- package/template/.aioson/locales/pt-BR/agents/squad.md +591 -47
- package/template/.aioson/locales/pt-BR/agents/ux-ui.md +369 -22
- package/template/.aioson/my-agents/.gitkeep +0 -0
- package/template/.aioson/rules/.gitkeep +0 -0
- package/template/.aioson/rules/squad/.gitkeep +0 -0
- package/template/.aioson/rules/squad/README.md +50 -0
- package/template/.aioson/schemas/genome-meta.schema.json +1 -1
- package/template/.aioson/schemas/genome.schema.json +1 -1
- package/template/.aioson/schemas/squad-blueprint.schema.json +32 -0
- package/template/.aioson/schemas/squad-manifest.schema.json +434 -1
- package/template/.aioson/skills/design/bold-editorial-ui/SKILL.md +205 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/art-direction.md +338 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/components.md +977 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/dashboards.md +218 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/design-tokens.md +326 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/motion.md +461 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/patterns.md +293 -0
- package/template/.aioson/skills/design/bold-editorial-ui/references/websites.md +352 -0
- package/template/.aioson/skills/design/clean-saas-ui/SKILL.md +210 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/art-direction.md +319 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/components.md +365 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/dashboards.md +196 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/design-tokens.md +244 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/motion.md +235 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/patterns.md +215 -0
- package/template/.aioson/skills/design/clean-saas-ui/references/websites.md +295 -0
- package/template/.aioson/skills/design/cognitive-core-ui/SKILL.md +203 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/art-direction.md +339 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/components.md +407 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/dashboards.md +272 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/design-tokens.md +524 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/motion.md +277 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/patterns.md +289 -0
- package/template/.aioson/skills/design/cognitive-core-ui/references/websites.md +437 -0
- package/template/.aioson/skills/design/interface-design/SKILL.md +47 -0
- package/template/.aioson/skills/design/interface-design/references/components-and-states.md +105 -0
- package/template/.aioson/skills/design/interface-design/references/design-directions.md +101 -0
- package/template/.aioson/skills/design/interface-design/references/handoff-and-quality.md +71 -0
- package/template/.aioson/skills/design/interface-design/references/intent-and-domain.md +74 -0
- package/template/.aioson/skills/design/interface-design/references/tokens-and-depth.md +173 -0
- package/template/.aioson/skills/design/premium-command-center-ui/SKILL.md +62 -0
- package/template/.aioson/skills/design/premium-command-center-ui/references/operations.md +74 -0
- package/template/.aioson/skills/design/premium-command-center-ui/references/patterns.md +116 -0
- package/template/.aioson/skills/design/premium-command-center-ui/references/validation.md +47 -0
- package/template/.aioson/skills/design/premium-command-center-ui/references/visual-system.md +215 -0
- package/template/.aioson/skills/design/warm-craft-ui/SKILL.md +209 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/art-direction.md +324 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/components.md +508 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/dashboards.md +223 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/design-tokens.md +374 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/motion.md +356 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/patterns.md +288 -0
- package/template/.aioson/skills/design/warm-craft-ui/references/websites.md +289 -0
- package/template/.aioson/skills/design-system/SKILL.md +92 -0
- package/template/.aioson/skills/design-system/cognitive-core-ui.skill +0 -0
- package/template/.aioson/skills/design-system/components/SKILL.md +274 -0
- package/template/.aioson/skills/design-system/components/SKILL.md:Zone.Identifier +0 -0
- package/template/.aioson/skills/design-system/dashboards/SKILL.md +184 -0
- package/template/.aioson/skills/design-system/dashboards/SKILL.md:Zone.Identifier +0 -0
- package/template/.aioson/skills/design-system/foundations/SKILL.md +250 -0
- package/template/.aioson/skills/design-system/foundations/SKILL.md:Zone.Identifier +0 -0
- package/template/.aioson/skills/design-system/motion/SKILL.md +197 -0
- package/template/.aioson/skills/design-system/motion/SKILL.md:Zone.Identifier +0 -0
- package/template/.aioson/skills/design-system/patterns/SKILL.md +231 -0
- package/template/.aioson/skills/design-system/patterns/SKILL.md:Zone.Identifier +0 -0
- package/template/.aioson/skills/premium-visual-design/SKILL.md +83 -0
- package/template/.aioson/skills/premium-visual-design/components/agent-badge.md +92 -0
- package/template/.aioson/skills/premium-visual-design/components/dependency-node.md +102 -0
- package/template/.aioson/skills/premium-visual-design/components/mention-autocomplete.md +136 -0
- package/template/.aioson/skills/premium-visual-design/components/notification-center.md +136 -0
- package/template/.aioson/skills/premium-visual-design/components/review-action-bar.md +188 -0
- package/template/.aioson/skills/premium-visual-design/components/team-switcher.md +131 -0
- package/template/.aioson/skills/premium-visual-design/patterns/agent-message-thread.md +198 -0
- package/template/.aioson/skills/premium-visual-design/patterns/notification-panel.md +275 -0
- package/template/.aioson/skills/premium-visual-design/patterns/review-workflow-ui.md +234 -0
- package/template/.aioson/skills/premium-visual-design/patterns/task-dependency-graph.md +147 -0
- package/template/.aioson/skills/premium-visual-design/tokens/status-extended.md +142 -0
- package/template/.aioson/skills/squad/SKILL.md +58 -0
- package/template/.aioson/skills/squad/domains/.gitkeep +0 -0
- package/template/.aioson/skills/squad/formats/.gitkeep +0 -0
- package/template/.aioson/skills/squad/formats/catalog.json +15 -0
- package/template/.aioson/skills/squad/formats/content/blog-post.md +47 -0
- package/template/.aioson/skills/squad/formats/content/newsletter.md +47 -0
- package/template/.aioson/skills/squad/formats/creative/podcast-script.md +43 -0
- package/template/.aioson/skills/squad/formats/creative/video-script.md +41 -0
- package/template/.aioson/skills/squad/formats/social/instagram-feed.md +42 -0
- package/template/.aioson/skills/squad/formats/social/linkedin-post.md +42 -0
- package/template/.aioson/skills/squad/formats/social/tiktok.md +39 -0
- package/template/.aioson/skills/squad/formats/social/twitter-thread.md +39 -0
- package/template/.aioson/skills/squad/formats/social/youtube-long.md +47 -0
- package/template/.aioson/skills/squad/formats/social/youtube-shorts.md +39 -0
- package/template/.aioson/skills/squad/patterns/.gitkeep +0 -0
- package/template/.aioson/skills/squad/patterns/multi-platform-pattern.md +108 -0
- package/template/.aioson/skills/squad/patterns/persona-based-pattern.md +98 -0
- package/template/.aioson/skills/squad/patterns/pipeline-pattern.md +106 -0
- package/template/.aioson/skills/squad/patterns/review-loop-pattern.md +81 -0
- package/template/.aioson/skills/squad/references/.gitkeep +0 -0
- package/template/.aioson/skills/squad/references/checklist-templates.md +122 -0
- package/template/.aioson/skills/squad/references/executor-archetypes.md +123 -0
- package/template/.aioson/skills/squad/references/workflow-templates.md +169 -0
- package/template/.aioson/skills/static/debugging-protocol.md +42 -0
- package/template/.aioson/skills/static/git-worktrees.md +36 -0
- package/template/.aioson/tasks/implementation-plan.md +307 -0
- package/template/.aioson/tasks/squad-create.md +1 -1
- package/template/.aioson/tasks/squad-design.md +28 -0
- package/template/.aioson/tasks/squad-execution-plan.md +279 -0
- package/template/.aioson/tasks/squad-export.md +1 -1
- package/template/.aioson/tasks/squad-investigate.md +44 -0
- package/template/.aioson/tasks/squad-learning-review.md +44 -0
- package/template/.aioson/tasks/squad-output-config.md +177 -0
- package/template/.aioson/tasks/squad-profile.md +48 -0
- package/template/.aioson/tasks/squad-review.md +61 -0
- package/template/.aioson/tasks/squad-task-decompose.md +66 -0
- package/template/.aioson/tasks/squad-validate.md +1 -1
- package/template/.claude/commands/aioson/agent/deyvin.md +5 -0
- package/template/.claude/commands/aioson/agent/discovery-design-doc.md +5 -0
- package/template/.claude/commands/aioson/agent/genome.md +5 -0
- package/template/.claude/commands/aioson/agent/neo.md +5 -0
- package/template/.claude/commands/aioson/agent/product.md +5 -0
- package/template/.claude/commands/aioson/agent/profiler-enricher.md +5 -0
- package/template/.claude/commands/aioson/agent/profiler-forge.md +5 -0
- package/template/.claude/commands/aioson/agent/profiler-researcher.md +5 -0
- package/template/.claude/commands/aioson/agent/squad.md +5 -0
- package/template/.claude/commands/aioson/agent/tester.md +5 -0
- package/template/.gemini/GEMINI.md +3 -0
- package/template/.gemini/commands/aios-deyvin.toml +6 -0
- package/template/.gemini/commands/aios-neo.toml +4 -0
- package/template/.gemini/commands/aios-pair.toml +6 -0
- package/template/.gemini/commands/aios-tester.toml +6 -0
- package/template/AGENTS.md +37 -6
- package/template/CLAUDE.md +34 -4
- package/template/OPENCODE.md +8 -2
- package/template/squad-searches/.gitkeep +0 -0
- package/template/.aioson/skills/static/interface-design.md +0 -372
- package/template/.aioson/skills/static/premium-command-center-ui.md +0 -190
- /package/template/.aioson/{genomas → docs}/.gitkeep +0 -0
- /package/template/.claude/commands/aioson/{analyst.md → agent/analyst.md} +0 -0
- /package/template/.claude/commands/aioson/{architect.md → agent/architect.md} +0 -0
- /package/template/.claude/commands/aioson/{dev.md → agent/dev.md} +0 -0
- /package/template/.claude/commands/aioson/{orchestrator.md → agent/orchestrator.md} +0 -0
- /package/template/.claude/commands/aioson/{pm.md → agent/pm.md} +0 -0
- /package/template/.claude/commands/aioson/{qa.md → agent/qa.md} +0 -0
- /package/template/.claude/commands/aioson/{setup.md → agent/setup.md} +0 -0
- /package/template/.claude/commands/aioson/{ux-ui.md → agent/ux-ui.md} +0 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
# Motion — Cognitive Core UI
|
|
2
|
+
|
|
3
|
+
Read after `design-tokens.md`. Add to context only when motion materially improves the result.
|
|
4
|
+
|
|
5
|
+
Motion is **purposeful and restrained**. Dashboards use minimal motion. Landing pages use more dramatic entrances and scroll effects.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Principles
|
|
10
|
+
|
|
11
|
+
1. **Functional first** — every animation communicates state change or hierarchy
|
|
12
|
+
2. **Fast transitions** — UI state: 140ms. Theme: 240ms. Entrances: 400–600ms
|
|
13
|
+
3. **Ease curves** — default `ease`. Entrances: `cubic-bezier(0.16, 1, 0.3, 1)` (smooth decelerate)
|
|
14
|
+
4. **No bounce, no elastic** — this is a command center, not a toy
|
|
15
|
+
5. **Always include** `@media (prefers-reduced-motion: reduce)` fallback
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## CSS Keyframes
|
|
20
|
+
|
|
21
|
+
```css
|
|
22
|
+
@keyframes fadeInUp {
|
|
23
|
+
from { opacity: 0; transform: translateY(20px); }
|
|
24
|
+
to { opacity: 1; transform: translateY(0); }
|
|
25
|
+
}
|
|
26
|
+
@keyframes fadeInDown {
|
|
27
|
+
from { opacity: 0; transform: translateY(-12px); }
|
|
28
|
+
to { opacity: 1; transform: translateY(0); }
|
|
29
|
+
}
|
|
30
|
+
@keyframes fadeIn {
|
|
31
|
+
from { opacity: 0; }
|
|
32
|
+
to { opacity: 1; }
|
|
33
|
+
}
|
|
34
|
+
@keyframes slideInLeft {
|
|
35
|
+
from { opacity: 0; transform: translateX(-20px); }
|
|
36
|
+
to { opacity: 1; transform: translateX(0); }
|
|
37
|
+
}
|
|
38
|
+
@keyframes slideInRight {
|
|
39
|
+
from { opacity: 0; transform: translateX(20px); }
|
|
40
|
+
to { opacity: 1; transform: translateX(0); }
|
|
41
|
+
}
|
|
42
|
+
@keyframes scaleIn {
|
|
43
|
+
from { opacity: 0; transform: scale(0.95); }
|
|
44
|
+
to { opacity: 1; transform: scale(1); }
|
|
45
|
+
}
|
|
46
|
+
@keyframes pulseGlow {
|
|
47
|
+
0%, 100% { box-shadow: 0 0 20px var(--accent-glow); }
|
|
48
|
+
50% { box-shadow: var(--shadow-glow-strong); }
|
|
49
|
+
}
|
|
50
|
+
@keyframes shimmer {
|
|
51
|
+
0% { background-position: -200% 0; }
|
|
52
|
+
100% { background-position: 200% 0; }
|
|
53
|
+
}
|
|
54
|
+
@keyframes progressFill {
|
|
55
|
+
from { width: 0%; }
|
|
56
|
+
}
|
|
57
|
+
@keyframes countUp {
|
|
58
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
59
|
+
to { opacity: 1; transform: translateY(0); }
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* Reduced motion fallback */
|
|
63
|
+
@media (prefers-reduced-motion: reduce) {
|
|
64
|
+
*, *::before, *::after {
|
|
65
|
+
animation-duration: 0.01ms !important;
|
|
66
|
+
transition-duration: 0.01ms !important;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Entrance Patterns
|
|
74
|
+
|
|
75
|
+
### Dashboard Page Load (staggered)
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Top bar: fadeInDown 0ms 300ms
|
|
79
|
+
Stats row: fadeInUp 100ms 400ms (each card +80ms delay)
|
|
80
|
+
Tab bar: fadeIn 250ms 300ms
|
|
81
|
+
Sidebar: slideInLeft 200ms 400ms
|
|
82
|
+
Content: fadeInUp 350ms 500ms (each card in grid +60ms stagger)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**React helper:**
|
|
86
|
+
```jsx
|
|
87
|
+
const stagger = (index, base = 0, step = 60) => ({
|
|
88
|
+
animation: `fadeInUp 500ms cubic-bezier(0.16, 1, 0.3, 1) ${base + index * step}ms both`,
|
|
89
|
+
});
|
|
90
|
+
// Usage on each card: style={{ ...stagger(cardIndex, 350) }}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Landing Page Hero
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Mono label: fadeInUp 0ms 500ms
|
|
97
|
+
Heading: fadeInUp 150ms 600ms
|
|
98
|
+
Subtitle: fadeInUp 300ms 500ms
|
|
99
|
+
CTA buttons: fadeInUp 450ms 500ms
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Modal
|
|
103
|
+
|
|
104
|
+
```css
|
|
105
|
+
.modal-backdrop { animation: fadeIn 200ms ease both; }
|
|
106
|
+
.modal-content { animation: scaleIn 300ms cubic-bezier(0.16, 1, 0.3, 1) both; }
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Expression-Aware Motion
|
|
112
|
+
|
|
113
|
+
Match motion to the expression mode chosen in `references/art-direction.md`.
|
|
114
|
+
|
|
115
|
+
### Tactical Monolith
|
|
116
|
+
- Keep motion short, directional, and low drama
|
|
117
|
+
- Prefer panel reveals, status updates, and quiet count-up behavior
|
|
118
|
+
- Avoid floaty motion, oversized parallax, or decorative loops
|
|
119
|
+
|
|
120
|
+
### Quiet Graphite
|
|
121
|
+
- Use soft fades, small elevation shifts, and measured reveal delays
|
|
122
|
+
- Let motion reinforce polish, not spectacle
|
|
123
|
+
|
|
124
|
+
### Signal Editorial
|
|
125
|
+
- Use more narrative sequencing: headings, side notes, proof blocks, and media can enter in layered stages
|
|
126
|
+
- Favor stagger and reveal rhythm over obvious bounce or glow pulses
|
|
127
|
+
|
|
128
|
+
### Luminous Light
|
|
129
|
+
- Keep motion crisp and clean
|
|
130
|
+
- Favor focus, control feedback, and gentle surface lifts over cinematic effects
|
|
131
|
+
|
|
132
|
+
### Industrial Flow
|
|
133
|
+
- Motion should feel functional and linear
|
|
134
|
+
- Sliding panels, queue shifts, progress fills, and status transitions work better than float or blur-heavy effects
|
|
135
|
+
|
|
136
|
+
### Gallery Intelligence
|
|
137
|
+
- Let media frames, profile blocks, and showcase surfaces reveal with slightly richer sequencing
|
|
138
|
+
- Keep metadata motion subtle so the content remains primary
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Hover Effects
|
|
143
|
+
|
|
144
|
+
### Card Hover
|
|
145
|
+
|
|
146
|
+
```jsx
|
|
147
|
+
onMouseEnter={e => {
|
|
148
|
+
e.currentTarget.style.borderColor = 'var(--border-medium)';
|
|
149
|
+
e.currentTarget.style.boxShadow = 'var(--shadow-glow)';
|
|
150
|
+
e.currentTarget.style.transform = 'translateY(-2px)';
|
|
151
|
+
}}
|
|
152
|
+
onMouseLeave={e => {
|
|
153
|
+
e.currentTarget.style.borderColor = '';
|
|
154
|
+
e.currentTarget.style.boxShadow = 'none';
|
|
155
|
+
e.currentTarget.style.transform = '';
|
|
156
|
+
}}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Card must have: `transition: border-color 150ms ease, box-shadow 150ms ease, transform 150ms ease`
|
|
160
|
+
|
|
161
|
+
### Button Hover
|
|
162
|
+
```
|
|
163
|
+
Primary: background → var(--accent-hover)
|
|
164
|
+
Secondary: borderColor → var(--border-accent), color → var(--text-accent)
|
|
165
|
+
transition: 150ms ease
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Tab Hover (non-active)
|
|
169
|
+
`background: var(--bg-elevated)`, `border-radius: var(--radius-md) var(--radius-md) 0 0`
|
|
170
|
+
|
|
171
|
+
### Sidebar Item Hover
|
|
172
|
+
`background: var(--bg-elevated)`, `color: var(--text-primary)`
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Loading States
|
|
177
|
+
|
|
178
|
+
### Skeleton Shimmer
|
|
179
|
+
|
|
180
|
+
```jsx
|
|
181
|
+
const skeletonStyle = {
|
|
182
|
+
background: `linear-gradient(90deg,
|
|
183
|
+
var(--bg-elevated) 25%,
|
|
184
|
+
var(--bg-overlay) 50%,
|
|
185
|
+
var(--bg-elevated) 75%)`,
|
|
186
|
+
backgroundSize: '200% 100%',
|
|
187
|
+
animation: 'shimmer 1.5s ease-in-out infinite',
|
|
188
|
+
borderRadius: 'var(--radius-md)',
|
|
189
|
+
};
|
|
190
|
+
// Usage: <div style={{ ...skeletonStyle, height: 20, width: '60%', marginBottom: 8 }} />
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Pulse Glow (Mode Panel when active)
|
|
194
|
+
```css
|
|
195
|
+
animation: pulseGlow 3s ease-in-out infinite;
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Progress Bar Fill (on mount)
|
|
199
|
+
```css
|
|
200
|
+
animation: progressFill 800ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Stat Number Count-up
|
|
204
|
+
```css
|
|
205
|
+
animation: countUp 600ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Scroll-Triggered Animations (Landing Pages)
|
|
211
|
+
|
|
212
|
+
```jsx
|
|
213
|
+
function useScrollReveal(ref, delay = 0) {
|
|
214
|
+
const [visible, setVisible] = useState(false);
|
|
215
|
+
useEffect(() => {
|
|
216
|
+
const obs = new IntersectionObserver(
|
|
217
|
+
([e]) => { if (e.isIntersecting) { setVisible(true); obs.disconnect(); } },
|
|
218
|
+
{ threshold: 0.15 }
|
|
219
|
+
);
|
|
220
|
+
if (ref.current) obs.observe(ref.current);
|
|
221
|
+
return () => obs.disconnect();
|
|
222
|
+
}, []);
|
|
223
|
+
return {
|
|
224
|
+
opacity: visible ? 1 : 0,
|
|
225
|
+
transform: visible ? 'translateY(0)' : 'translateY(24px)',
|
|
226
|
+
transition: `opacity 600ms cubic-bezier(0.16,1,0.3,1) ${delay}ms,
|
|
227
|
+
transform 600ms cubic-bezier(0.16,1,0.3,1) ${delay}ms`,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Usage:
|
|
232
|
+
const ref = useRef(null);
|
|
233
|
+
const reveal = useScrollReveal(ref, 100);
|
|
234
|
+
<div ref={ref} style={reveal}>...</div>
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**CSS-only alternative (no JS):**
|
|
238
|
+
```css
|
|
239
|
+
.reveal {
|
|
240
|
+
opacity: 0; transform: translateY(24px);
|
|
241
|
+
transition: opacity 600ms cubic-bezier(0.16,1,0.3,1), transform 600ms cubic-bezier(0.16,1,0.3,1);
|
|
242
|
+
}
|
|
243
|
+
.reveal.visible { opacity: 1; transform: translateY(0); }
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Theme Transition
|
|
249
|
+
|
|
250
|
+
Apply to ALL themed containers so dark/light switch feels smooth:
|
|
251
|
+
|
|
252
|
+
```jsx
|
|
253
|
+
const TT = { transition: 'background 240ms ease, color 240ms ease, border-color 240ms ease, box-shadow 240ms ease' };
|
|
254
|
+
// Or in CSS: transition: var(--transition-theme);
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## When to Use What
|
|
260
|
+
|
|
261
|
+
| Context | Level | Techniques |
|
|
262
|
+
|---|---|---|
|
|
263
|
+
| Dashboard | Minimal | Card hover, tab switch, theme transition, progress fill |
|
|
264
|
+
| Landing page | Moderate | Staggered entrances, scroll reveals, hero sequence, card hovers |
|
|
265
|
+
| Frontpage | Moderate | Hero entrance, scroll reveals, CTA glow pulse |
|
|
266
|
+
| Modal/Detail | Light | scaleIn entrance, fadeIn backdrop |
|
|
267
|
+
| Loading state | Ambient | Skeleton shimmer, pulse glow |
|
|
268
|
+
| Admin CRUD | None/minimal | Only theme transition + hover states |
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## Anti-Generic Motion Rules
|
|
273
|
+
|
|
274
|
+
- Do not use the same stagger recipe on every page type.
|
|
275
|
+
- Do not animate everything just because motion is available.
|
|
276
|
+
- One memorable sequence beats constant moving surfaces.
|
|
277
|
+
- If motion draws more attention than hierarchy or content, reduce it.
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# Patterns — Page Layouts (Cognitive Core UI)
|
|
2
|
+
|
|
3
|
+
Requires `design-tokens.md` + `components.md` loaded first.
|
|
4
|
+
|
|
5
|
+
These patterns define how to compose full pages. All use CSS variables from design-tokens.md.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Dashboard Shell
|
|
10
|
+
|
|
11
|
+
The base layout for any admin/overview interface.
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
┌────────────────────────────────────────────────────────┐
|
|
15
|
+
│ TOP BAR (sticky, bg-void, border-bottom) │
|
|
16
|
+
├────────────────────────────────────────────────────────┤
|
|
17
|
+
│ STATS ROW: [StatCard] [StatCard] [StatCard] [StatCard]│
|
|
18
|
+
├────────────────────────────────────────────────────────┤
|
|
19
|
+
│ TAB BAR (full width, border-bottom) │
|
|
20
|
+
├───────────┬────────────────────────────────────────────┤
|
|
21
|
+
│ SIDEBAR │ CONTENT │
|
|
22
|
+
│ 200px │ ┌─ Section Header ──────────────────┐ │
|
|
23
|
+
│ tree nav │ │ Card Grid (auto-fill, 260px min) │ │
|
|
24
|
+
│ │ └───────────────────────────────────┘ │
|
|
25
|
+
│ │ ┌─ Section Header ──────────────────┐ │
|
|
26
|
+
│ │ │ Card Grid │ │
|
|
27
|
+
│ │ └───────────────────────────────────┘ │
|
|
28
|
+
└───────────┴────────────────────────────────────────────┘
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**CSS skeleton:**
|
|
32
|
+
```css
|
|
33
|
+
.shell { min-height: 100vh; background: var(--bg-base); font-family: var(--font-body); }
|
|
34
|
+
.stats-row { display: flex; gap: var(--space-3); padding: var(--space-5) var(--space-5) 0; flex-wrap: wrap; }
|
|
35
|
+
.main-layout { display: flex; min-height: calc(100vh - 230px); }
|
|
36
|
+
.sidebar { width: 200px; flex-shrink: 0; border-right: 1px solid var(--border-subtle); padding: var(--space-4); transition: var(--transition-theme); }
|
|
37
|
+
.content { flex: 1; padding: var(--space-4) var(--space-5); overflow-y: auto; }
|
|
38
|
+
.card-grid { display: grid; gap: var(--space-4); grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
|
|
39
|
+
.section { margin-bottom: var(--space-8); }
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Variant — with feature panels (2-col below stats):**
|
|
43
|
+
```css
|
|
44
|
+
.feature-row { display: grid; grid-template-columns: 1fr 280px; gap: var(--space-4); padding: var(--space-4) var(--space-5); }
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 2. Detail / Profile Page
|
|
50
|
+
|
|
51
|
+
For viewing a single entity (person, product, contact, project).
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
┌────────────────────────────────────────────────────────┐
|
|
55
|
+
│ TOP BAR │
|
|
56
|
+
├────────────────────────────────────────────────────────┤
|
|
57
|
+
│ Breadcrumbs: Gallery → Entity Name │
|
|
58
|
+
│ PROFILE HEADER │
|
|
59
|
+
│ ┌───────────────────────────────────────────────────┐ │
|
|
60
|
+
│ │ [Avatar 96px] NAME (text-3xl, black) │ │
|
|
61
|
+
│ │ Role (accent, italic) │ │
|
|
62
|
+
│ │ ✦ Tagline │ │
|
|
63
|
+
│ │ │ │
|
|
64
|
+
│ │ [StatCard] [StatCard] [StatCard] [Badge][Badge]│ │
|
|
65
|
+
│ └───────────────────────────────────────────────────┘ │
|
|
66
|
+
├────────────────────────────────────────────────────────┤
|
|
67
|
+
│ TAB BAR (Geral | DNA | Comunicação | Histórico | ...) │
|
|
68
|
+
├───────────┬────────────────────────────────────────────┤
|
|
69
|
+
│ SIDEBAR │ TAB CONTENT │
|
|
70
|
+
│ 180px │ Varies per tab: │
|
|
71
|
+
│ │ — Card grid (2-col) │
|
|
72
|
+
│ │ — DNA analysis panels │
|
|
73
|
+
│ │ — History table │
|
|
74
|
+
└───────────┴────────────────────────────────────────────┘
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Profile Header styles:**
|
|
78
|
+
```css
|
|
79
|
+
.profile-header {
|
|
80
|
+
padding: var(--space-5) var(--space-6);
|
|
81
|
+
background: var(--bg-base);
|
|
82
|
+
border-bottom: 1px solid var(--border-subtle);
|
|
83
|
+
transition: var(--transition-theme);
|
|
84
|
+
}
|
|
85
|
+
.profile-avatar {
|
|
86
|
+
width: 96px; height: 96px;
|
|
87
|
+
border-radius: var(--radius-lg);
|
|
88
|
+
border: 2px solid var(--border-subtle);
|
|
89
|
+
object-fit: cover;
|
|
90
|
+
}
|
|
91
|
+
.profile-name {
|
|
92
|
+
font-family: var(--font-display); font-weight: var(--weight-bold);
|
|
93
|
+
font-size: var(--text-3xl); color: var(--text-heading);
|
|
94
|
+
letter-spacing: var(--tracking-tight); line-height: var(--leading-tight);
|
|
95
|
+
}
|
|
96
|
+
.profile-role {
|
|
97
|
+
color: var(--accent); font-style: italic; font-size: var(--text-base);
|
|
98
|
+
}
|
|
99
|
+
.profile-tagline {
|
|
100
|
+
font-family: var(--font-mono); font-size: var(--text-xs);
|
|
101
|
+
color: var(--text-muted); letter-spacing: var(--tracking-wider);
|
|
102
|
+
text-transform: uppercase;
|
|
103
|
+
}
|
|
104
|
+
.profile-stats { display: flex; gap: var(--space-3); margin-top: var(--space-4); flex-wrap: wrap; }
|
|
105
|
+
.profile-badges { display: flex; gap: var(--space-2); align-items: center; }
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Featured quote block (inside tab content):**
|
|
109
|
+
```css
|
|
110
|
+
.quote-block {
|
|
111
|
+
padding: var(--space-8) var(--space-6);
|
|
112
|
+
text-align: center;
|
|
113
|
+
border-bottom: 1px solid var(--border-subtle);
|
|
114
|
+
}
|
|
115
|
+
.quote-text {
|
|
116
|
+
font-family: var(--font-display); font-size: var(--text-xl);
|
|
117
|
+
font-weight: var(--weight-medium); font-style: italic;
|
|
118
|
+
color: var(--text-primary); line-height: var(--leading-snug);
|
|
119
|
+
max-width: 680px; margin: 0 auto;
|
|
120
|
+
}
|
|
121
|
+
.quote-attribution {
|
|
122
|
+
font-family: var(--font-mono); font-size: var(--text-xs);
|
|
123
|
+
color: var(--text-muted); letter-spacing: var(--tracking-wider);
|
|
124
|
+
text-transform: uppercase; margin-top: var(--space-3);
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 3. Settings / Config Page
|
|
131
|
+
|
|
132
|
+
Apply the **Compact Density** scale from `design-tokens.md` throughout. Settings pages are operational UI, not marketing — no generous whitespace.
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
┌────────────────────────────────────────────────────────┐
|
|
136
|
+
│ TOP BAR │
|
|
137
|
+
├───────────┬────────────────────────────────────────────┤
|
|
138
|
+
│ SIDEBAR │ SETTINGS TITLE (text-2xl, no description) │
|
|
139
|
+
│ │ │
|
|
140
|
+
│ General │ ┌─ Entity grid ──────────────────────┐ │
|
|
141
|
+
│ Security │ │ [Card 280px] [Card 280px] [Card] │ │ ← 3-col auto-fill
|
|
142
|
+
│ Billing │ │ name + ID + status badges │ │
|
|
143
|
+
│ Team │ │ [Ativar btn] [Editar btn] │ │
|
|
144
|
+
│ API │ └─────────────────────────────────────┘ │
|
|
145
|
+
│ │ │
|
|
146
|
+
│ │ ┌─ Section card (p-4 rounded-[22px]) ─┐ │
|
|
147
|
+
│ │ │ eyebrow (mono xs) + title (text-base)│ │
|
|
148
|
+
│ │ │ [row] dot · name model badges Editar│ │ ← divide-y py-2
|
|
149
|
+
│ │ │ [row] dot · name model badges Editar│ │
|
|
150
|
+
│ │ │ ▸ Sync / secondary tool (details) │ │ ← collapsed
|
|
151
|
+
│ │ └─────────────────────────────────────┘ │
|
|
152
|
+
│ │ │
|
|
153
|
+
│ │ ┌─ Danger Zone Card ──────────────────┐ │
|
|
154
|
+
│ │ │ border: var(--semantic-red-dim) │ │
|
|
155
|
+
│ │ └─────────────────────────────────────┘ │
|
|
156
|
+
└───────────┴────────────────────────────────────────────┘
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Page heading:** `text-2xl` max — no verbose description subtitle on the page header.
|
|
160
|
+
|
|
161
|
+
**Entity cards (projects, providers, squads):**
|
|
162
|
+
- Grid: `grid-cols-[repeat(auto-fill,minmax(280px,1fr))]`, `gap: var(--space-3)`
|
|
163
|
+
- Card: `rounded-[18px] p-3`
|
|
164
|
+
- Name: `text-sm font-semibold truncate`
|
|
165
|
+
- ID: `font-mono text-[0.58rem] truncate`
|
|
166
|
+
- Status badges: `px-2 py-0.5 text-[0.58rem]`
|
|
167
|
+
- Actions: compact row at bottom — `py-1.5 text-[0.62rem]`
|
|
168
|
+
|
|
169
|
+
**Add/Edit forms → Modal pattern (not inline expansion):**
|
|
170
|
+
```
|
|
171
|
+
+ Adicionar button → opens modal (max-w-md, centered, backdrop)
|
|
172
|
+
Editar button → opens same modal pre-filled
|
|
173
|
+
Never use accordion/RevealPanel inside entity cards
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Section cards (provider lists, license, LLM config):**
|
|
177
|
+
- Card: `rounded-[22px] p-4`
|
|
178
|
+
- Header row: eyebrow + title + right-side control (select, badge) in one flex row
|
|
179
|
+
- File path or meta: `font-mono text-[0.62rem] truncate` — one line below title, no card for it
|
|
180
|
+
- Row items: `divide-y divide-[border]` with `py-2`, `text-xs` names, `text-[0.65rem]` models
|
|
181
|
+
- Edit button: `px-2.5 py-1 text-[0.65rem] rounded-xl`
|
|
182
|
+
|
|
183
|
+
**Disclosure pattern for secondary tools:**
|
|
184
|
+
```html
|
|
185
|
+
<details class="rounded-[16px] border bg-elevated mt-3">
|
|
186
|
+
<summary> <!-- flex: label + status badge + action button in one row --> </summary>
|
|
187
|
+
<div class="border-t px-3 pb-3 pt-2">
|
|
188
|
+
<!-- compact diff rows or secondary form -->
|
|
189
|
+
</div>
|
|
190
|
+
</details>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**Form inputs inside modals and cards:**
|
|
194
|
+
- Input/Select: `px-3 py-2 text-xs rounded-xl`
|
|
195
|
+
- Label: `text-[0.65rem] mb-0.5`
|
|
196
|
+
- Submit button: `w-full px-3 py-2 text-xs rounded-xl`
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## 4. Auth Page (Login / Register)
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
┌────────────────────────────────────────────────────────┐
|
|
204
|
+
│ bg-void (full viewport, dark) │
|
|
205
|
+
│ │
|
|
206
|
+
│ ┌─ Card max-w: 420px ─────────────────┐ │
|
|
207
|
+
│ │ [Logo] AppName (mono, weight-bold) │ │
|
|
208
|
+
│ │ SUBTITLE (mono, xs, muted, upper) │ │
|
|
209
|
+
│ │ │ │
|
|
210
|
+
│ │ MONO LABEL: EMAIL │ │
|
|
211
|
+
│ │ [Input] │ │
|
|
212
|
+
│ │ MONO LABEL: PASSWORD │ │
|
|
213
|
+
│ │ [Input] │ │
|
|
214
|
+
│ │ [Primary Button: full width] │ │
|
|
215
|
+
│ │ divider ─── ou ─── │ │
|
|
216
|
+
│ │ [Secondary Button: OAuth] │ │
|
|
217
|
+
│ │ Link: esqueceu / criar conta │ │
|
|
218
|
+
│ └──────────────────────────────────────┘ │
|
|
219
|
+
│ radial glow behind card (accent-glow) │
|
|
220
|
+
└────────────────────────────────────────────────────────┘
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
```css
|
|
224
|
+
.auth-shell {
|
|
225
|
+
min-height: 100vh; background: var(--bg-void);
|
|
226
|
+
display: flex; align-items: center; justify-content: center;
|
|
227
|
+
position: relative;
|
|
228
|
+
}
|
|
229
|
+
.auth-glow {
|
|
230
|
+
position: absolute;
|
|
231
|
+
width: 600px; height: 600px; border-radius: 50%;
|
|
232
|
+
background: radial-gradient(circle, var(--accent-glow) 0%, transparent 70%);
|
|
233
|
+
pointer-events: none;
|
|
234
|
+
}
|
|
235
|
+
.auth-card {
|
|
236
|
+
background: var(--bg-surface); border: 1px solid var(--border-subtle);
|
|
237
|
+
border-radius: var(--radius-xl); padding: var(--space-8);
|
|
238
|
+
width: 100%; max-width: 420px; position: relative; z-index: 1;
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 5. List-Detail (Split View)
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
┌────────────────────────────────────────────────────────┐
|
|
248
|
+
│ TOP BAR │
|
|
249
|
+
├────────────────────────────────────────────────────────┤
|
|
250
|
+
│ TAB BAR + Filter badges │
|
|
251
|
+
├──────────────────────┬─────────────────────────────────┤
|
|
252
|
+
│ LIST 340px │ DETAIL PANEL (flex: 1) │
|
|
253
|
+
│ ┌──────────────┐ │ Profile Header (compact) │
|
|
254
|
+
│ │ Item (active)│◄───│ border-left: 3px accent │
|
|
255
|
+
│ ├──────────────┤ │ Stat Cards row │
|
|
256
|
+
│ │ Item │ │ Tab sub-navigation │
|
|
257
|
+
│ ├──────────────┤ │ Content (cards, table, DNA) │
|
|
258
|
+
│ │ Item │ │ │
|
|
259
|
+
│ └──────────────┘ │ │
|
|
260
|
+
└──────────────────────┴─────────────────────────────────┘
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
```css
|
|
264
|
+
.list-panel { width: 340px; flex-shrink: 0; border-right: 1px solid var(--border-subtle); overflow-y: auto; }
|
|
265
|
+
.list-item { padding: var(--space-4); border-bottom: 1px solid var(--border-subtle); cursor: pointer; transition: var(--transition-theme); }
|
|
266
|
+
.list-item:hover { background: var(--bg-elevated); }
|
|
267
|
+
.list-item.active { background: var(--bg-elevated); border-left: 3px solid var(--accent); }
|
|
268
|
+
.detail-panel { flex: 1; overflow-y: auto; }
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Responsive Rules (all patterns)
|
|
274
|
+
|
|
275
|
+
```css
|
|
276
|
+
@media (max-width: 768px) {
|
|
277
|
+
.main-layout { flex-direction: column; }
|
|
278
|
+
.sidebar { width: 100%; border-right: none; border-bottom: 1px solid var(--border-subtle); }
|
|
279
|
+
.card-grid { grid-template-columns: 1fr; }
|
|
280
|
+
.stats-row { flex-direction: column; }
|
|
281
|
+
.list-panel { width: 100%; border-right: none; border-bottom: 1px solid var(--border-subtle); }
|
|
282
|
+
}
|
|
283
|
+
@media (min-width: 768px) and (max-width: 1024px) {
|
|
284
|
+
.card-grid { grid-template-columns: repeat(2, 1fr); }
|
|
285
|
+
}
|
|
286
|
+
@media (min-width: 1024px) {
|
|
287
|
+
.card-grid { grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
|
|
288
|
+
}
|
|
289
|
+
```
|