@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,407 @@
|
|
|
1
|
+
# Components — Cognitive Core UI
|
|
2
|
+
|
|
3
|
+
Read after `design-tokens.md`. All components use CSS variables and adapt to dark/light theme automatically.
|
|
4
|
+
|
|
5
|
+
Code examples use JSX inline style notation as **design specifications** — read property-value pairs as spec, then adapt syntax to the active stack (HTML, Vue, Blade, etc.). The shorthand `TT` means `{ transition: 'var(--transition-theme)' }`.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Top Navigation Bar
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
┌──────────────────────────────────────────────────────┐
|
|
13
|
+
│ [Logo] AppName Link Link Link [☀] [Badge] │
|
|
14
|
+
│ SUBTITLE │
|
|
15
|
+
└──────────────────────────────────────────────────────┘
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
- Background: `var(--bg-void)`, `position: sticky`, `top: 0`, `z-index: var(--z-sticky)`
|
|
19
|
+
- Border-bottom: `1px solid var(--border-subtle)`
|
|
20
|
+
- Logo: `36px` square, `background: var(--accent-dim)`, `border: 1px solid var(--accent)`, `border-radius: var(--radius-md)`, icon in `var(--accent)`
|
|
21
|
+
- Brand name: `font-family: var(--font-mono)`, `--weight-bold`, `--text-base`, `--text-heading`, `letter-spacing: var(--tracking-wide)`
|
|
22
|
+
- Subtitle: mono, `--text-xs`, `--text-muted`, uppercase, `--tracking-widest`
|
|
23
|
+
- Nav links: `--text-base`. Active: `var(--text-accent)`. Inactive: `var(--text-secondary)`
|
|
24
|
+
- Theme toggle: `36px` button, `var(--bg-surface)`, `1px solid var(--border-subtle)` — only include when the product supports theme switching
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 2. Stat Card
|
|
29
|
+
|
|
30
|
+
Large numeric readout with mono label. Used in stat rows at the top of pages.
|
|
31
|
+
|
|
32
|
+
```jsx
|
|
33
|
+
<div style={{
|
|
34
|
+
background: 'var(--bg-surface)', border: '1px solid var(--border-subtle)',
|
|
35
|
+
borderRadius: 'var(--radius-lg)', padding: 'var(--space-4) var(--space-5)',
|
|
36
|
+
minWidth: 140, flex: 1, ...TT,
|
|
37
|
+
}}>
|
|
38
|
+
<div style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--text-xs)', color: 'var(--text-muted)',
|
|
39
|
+
letterSpacing: 'var(--tracking-widest)', textTransform: 'uppercase', fontWeight: 600,
|
|
40
|
+
marginBottom: 'var(--space-1)' }}>LABEL</div>
|
|
41
|
+
<div style={{ display: 'flex', alignItems: 'baseline', gap: 4 }}>
|
|
42
|
+
<span style={{ fontFamily: 'var(--font-display)', fontSize: 'var(--text-4xl)', fontWeight: 700,
|
|
43
|
+
color: 'var(--text-heading)', lineHeight: 1, fontVariantNumeric: 'tabular-nums' }}>42</span>
|
|
44
|
+
<span style={{ fontSize: 'var(--text-lg)', color: 'var(--text-muted)' }}>/100</span>
|
|
45
|
+
</div>
|
|
46
|
+
<div style={{ fontSize: 'var(--text-sm)', color: 'var(--text-muted)', marginTop: 'var(--space-1)' }}>
|
|
47
|
+
subtitle text
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Accent variant: replace stat number `color` with `var(--semantic-green)`, `var(--semantic-red)`, or `var(--semantic-amber)`.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 3. Card (base)
|
|
57
|
+
|
|
58
|
+
The fundamental container. Everything lives in cards.
|
|
59
|
+
|
|
60
|
+
```jsx
|
|
61
|
+
const cardStyle = {
|
|
62
|
+
background: 'var(--bg-surface)',
|
|
63
|
+
border: '1px solid var(--border-subtle)',
|
|
64
|
+
borderRadius: 'var(--radius-lg)',
|
|
65
|
+
padding: 'var(--space-5)',
|
|
66
|
+
transition: 'var(--transition-theme), border-color 150ms ease, box-shadow 150ms ease, transform 150ms ease',
|
|
67
|
+
};
|
|
68
|
+
// Hover: borderColor → var(--border-medium), boxShadow → var(--shadow-glow), transform → translateY(-1px)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 4. Info Card (icon + title + description + quote)
|
|
74
|
+
|
|
75
|
+
Used in grids for features, capabilities, items.
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
┌─────────────────────────────────┐
|
|
79
|
+
│ 📈 [icon] Badge text │ ← header row
|
|
80
|
+
│ Card Title │ ← accent color
|
|
81
|
+
│ Description text that explains │ ← secondary color
|
|
82
|
+
│ ┃ "Optional quote text" │ ← muted, left border
|
|
83
|
+
└─────────────────────────────────┘
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
- Header: `display: flex; justify-content: space-between`. Icon left, badge right (mono, `--text-xs`, muted).
|
|
87
|
+
- Title: `--text-lg`, `--weight-semibold`, `color: var(--text-accent)`
|
|
88
|
+
- Description: `--text-base`, `--text-secondary`, `line-height: 1.5`
|
|
89
|
+
- Quote: italic, `--text-muted`, `border-left: 2px solid var(--accent-dim)`, `padding-left: var(--space-3)`
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 5. Profile Header
|
|
94
|
+
|
|
95
|
+
Entity header with avatar, name, role, badges, and stat cards.
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
┌──────────────────────────────────────────────────────────┐
|
|
99
|
+
│ [Avatar 96px] BIG NAME [Badge] [Badge] │
|
|
100
|
+
│ ID: XXX Role (italic, accent) │
|
|
101
|
+
│ ✦ TAGLINE (mono, xs, muted) │
|
|
102
|
+
│ │
|
|
103
|
+
│ ┌─StatCard─┐ ┌─StatCard─┐ ┌─StatCard─┐ │
|
|
104
|
+
└──────────────────────────────────────────────────────────┘
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
- Avatar: `96px`, `border-radius: var(--radius-lg)`, `border: 2px solid var(--border-subtle)`
|
|
108
|
+
- Name: `--text-3xl`, `--weight-bold` by default, `--weight-black` only for a deliberately dramatic hero/profile treatment, `--tracking-tight`, `--text-heading`
|
|
109
|
+
- Role: `color: var(--text-accent)`, `font-style: italic`, `--text-lg`
|
|
110
|
+
- Tagline: mono, `--text-xs`, `--text-muted`, `--tracking-widest`, uppercase
|
|
111
|
+
- ID: mono, `--text-xs`, muted, absolute positioned below avatar
|
|
112
|
+
- Stat cards: same as component 2, `min-width: 130px`
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 6. Badge / Chip
|
|
117
|
+
|
|
118
|
+
Three variants — all use mono font, uppercase, `letter-spacing: var(--tracking-wider)`, `font-size: var(--text-xs)`.
|
|
119
|
+
|
|
120
|
+
**Accent badge** (active states, primary tags):
|
|
121
|
+
```jsx
|
|
122
|
+
{ background: 'var(--accent-dim)', color: 'var(--accent)', border: '1px solid var(--border-accent)',
|
|
123
|
+
fontFamily: 'var(--font-mono)', fontSize: 'var(--text-xs)', fontWeight: 600,
|
|
124
|
+
letterSpacing: 'var(--tracking-wider)', textTransform: 'uppercase',
|
|
125
|
+
padding: '2px 10px', borderRadius: 'var(--radius-sm)' }
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Outline badge** (neutral tags):
|
|
129
|
+
```jsx
|
|
130
|
+
{ background: 'transparent', color: 'var(--text-secondary)', border: '1px solid var(--border-medium)',
|
|
131
|
+
/* same font styles as accent */ }
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Semantic badges** (status — swap vars):
|
|
135
|
+
- Success: `background: var(--semantic-green-dim)`, `color: var(--semantic-green)`, `border: 1px solid rgba(22,199,132,0.3)`
|
|
136
|
+
- Danger: `var(--semantic-red-dim)`, `var(--semantic-red)`, red border
|
|
137
|
+
- Warning: `var(--semantic-amber-dim)`, `var(--semantic-amber)`, amber border
|
|
138
|
+
- Info: `var(--semantic-blue-dim)`, `var(--semantic-blue)`, blue border
|
|
139
|
+
|
|
140
|
+
Status dot: `width: 5px; height: 5px; border-radius: 50%; background: currentColor; display: inline-block; margin-right: 5px`
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 7. Tab Navigation
|
|
145
|
+
|
|
146
|
+
```jsx
|
|
147
|
+
<div style={{ display: 'flex', gap: 2, borderBottom: '1px solid var(--border-subtle)',
|
|
148
|
+
padding: '0 var(--space-6)', overflowX: 'auto', ...TT }}>
|
|
149
|
+
<button style={{
|
|
150
|
+
fontFamily: 'var(--font-body)', fontSize: 'var(--text-base)',
|
|
151
|
+
color: isActive ? 'var(--text-accent)' : 'var(--text-secondary)',
|
|
152
|
+
background: 'none', border: 'none',
|
|
153
|
+
padding: 'var(--space-3) var(--space-4)',
|
|
154
|
+
borderBottom: `2px solid ${isActive ? 'var(--accent)' : 'transparent'}`,
|
|
155
|
+
cursor: 'pointer', display: 'flex', alignItems: 'center', gap: 'var(--space-2)',
|
|
156
|
+
transition: 'color 150ms ease, border-color 150ms ease',
|
|
157
|
+
}}>
|
|
158
|
+
<span>icon</span> Label
|
|
159
|
+
</button>
|
|
160
|
+
</div>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Hover (non-active): `background: var(--bg-elevated)`, `border-radius: var(--radius-md) var(--radius-md) 0 0`
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 8. Sidebar Tree
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
┌──────────────────┐
|
|
171
|
+
│ SECTION LABEL │ ← mono, xs, muted, uppercase, tracking-widest
|
|
172
|
+
│ ⊞ Item Active │ ← bg-elevated, border-left: 3px solid var(--accent), text-heading
|
|
173
|
+
│ 📊 Item │ ← text-secondary, transparent bg
|
|
174
|
+
│ 💬 Item │
|
|
175
|
+
│ │
|
|
176
|
+
│ SECTION LABEL │
|
|
177
|
+
│ ○ Category │ ← text-muted (inactive)
|
|
178
|
+
│ ● Category (on) │ ← text-accent (active)
|
|
179
|
+
└──────────────────┘
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Width: `200–220px`. Items: `padding: var(--space-2) var(--space-3)`, `border-radius: var(--radius-md)`.
|
|
183
|
+
Active item: `background: var(--bg-elevated)`, `border-left: 3px solid var(--accent)`.
|
|
184
|
+
Hover: `background: var(--bg-elevated)`, `color: var(--text-primary)`.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 9. Section Header
|
|
189
|
+
|
|
190
|
+
```jsx
|
|
191
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: 'var(--space-3)',
|
|
192
|
+
padding: 'var(--space-6) 0 var(--space-4)' }}>
|
|
193
|
+
<span style={{ color: 'var(--accent)', fontSize: 'var(--text-lg)' }}>⚡</span>
|
|
194
|
+
<h2 style={{ fontFamily: 'var(--font-display)', fontSize: 'var(--text-xl)',
|
|
195
|
+
fontWeight: 700, color: 'var(--text-heading)', margin: 0 }}>Title</h2>
|
|
196
|
+
</div>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 10. Progress Bar
|
|
202
|
+
|
|
203
|
+
```jsx
|
|
204
|
+
<div style={{ height: 5, background: 'var(--bg-elevated)',
|
|
205
|
+
borderRadius: 'var(--radius-full)', overflow: 'hidden' }}>
|
|
206
|
+
<div style={{ height: '100%', borderRadius: 'var(--radius-full)',
|
|
207
|
+
background: color, width: `${pct}%`,
|
|
208
|
+
transition: 'width 300ms cubic-bezier(0.16, 1, 0.3, 1)' }} />
|
|
209
|
+
</div>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Colors: `var(--accent)`, `var(--semantic-green)`, `var(--semantic-red)`, `var(--semantic-amber)`, `var(--semantic-purple)`.
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## 11. Mode Panel (accent feature box)
|
|
217
|
+
|
|
218
|
+
Centered panel with radial glow — for "operating mode", featured status, or a primary CTA.
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
┌─────────── border-accent ──────────┐
|
|
222
|
+
│ ◆ BADGE PILL │
|
|
223
|
+
│ [Icon 56px] │ ← accent border + glow shadow
|
|
224
|
+
│ MONO LABEL │
|
|
225
|
+
│ Large Title │
|
|
226
|
+
│ "Subtitle italic" │
|
|
227
|
+
│ radial-gradient glow behind │
|
|
228
|
+
└────────────────────────────────────┘
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
- Border: `1px solid var(--border-accent)`, `border-radius: var(--radius-xl)`
|
|
232
|
+
- Background: `var(--bg-surface)` with `radial-gradient(circle at 50% 0%, var(--accent-glow), transparent 70%)`
|
|
233
|
+
- Icon: `56px`, circular, `background: var(--accent-dim)`, `border: 1px solid var(--accent)`, `color: var(--accent)`
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## 12. DNA Panel (sliders + tags)
|
|
238
|
+
|
|
239
|
+
Combined panel with labeled progress metrics and a tag group. The "personality" card of any entity.
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
┌─────────────────────────────────────────┐
|
|
243
|
+
│ ✦ PANEL TITLE │
|
|
244
|
+
│ │
|
|
245
|
+
│ LABEL ████████████████░░░░ 72% │
|
|
246
|
+
│ LABEL ██████████░░░░░░░░░ 58% │
|
|
247
|
+
│ LABEL █████████████░░░░░░ 85% │
|
|
248
|
+
│ │
|
|
249
|
+
│ [Badge] [Badge] [Badge] [Badge] │
|
|
250
|
+
└─────────────────────────────────────────┘
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Each metric row: `display: flex; align-items: center; gap: var(--space-3)`.
|
|
254
|
+
Label: `min-width: 80px; font-family: var(--font-mono); font-size: var(--text-xs); color: var(--text-muted)`.
|
|
255
|
+
Bar: `flex: 1` (use Progress Bar component).
|
|
256
|
+
Value: mono, `--text-sm`, `--text-secondary`, `min-width: 40px; text-align: right`.
|
|
257
|
+
Tags: flex-wrap, `gap: var(--space-2)` (use Badge/Chip component).
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 13. Data Table
|
|
262
|
+
|
|
263
|
+
```
|
|
264
|
+
┌────────────────────────────────────────────────────┐
|
|
265
|
+
│ NAME ▲ CATEGORY STOCK STATUS PRICE │ ← mono header
|
|
266
|
+
├────────────────────────────────────────────────────┤
|
|
267
|
+
│ Product Name Laptops 23 [●OK] R$12k │
|
|
268
|
+
│ Product Name Phones 5 [●Crit] R$8k │
|
|
269
|
+
└────────────────────────────────────────────────────┘
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
**Premium table CSS (preferred — surfaced rows with hover):**
|
|
273
|
+
|
|
274
|
+
```css
|
|
275
|
+
table {
|
|
276
|
+
width: 100%;
|
|
277
|
+
border-collapse: separate;
|
|
278
|
+
border-spacing: 0 8px;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
thead th {
|
|
282
|
+
padding: 0 16px 8px;
|
|
283
|
+
font-family: var(--font-mono);
|
|
284
|
+
font-size: var(--text-xs);
|
|
285
|
+
letter-spacing: var(--tracking-widest);
|
|
286
|
+
text-transform: uppercase;
|
|
287
|
+
color: var(--text-muted);
|
|
288
|
+
text-align: left;
|
|
289
|
+
font-weight: 600;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
tbody td {
|
|
293
|
+
padding: 14px 16px;
|
|
294
|
+
background: var(--bg-surface);
|
|
295
|
+
border-top: 1px solid var(--border-subtle);
|
|
296
|
+
border-bottom: 1px solid var(--border-subtle);
|
|
297
|
+
color: var(--text-primary);
|
|
298
|
+
font-size: var(--text-base);
|
|
299
|
+
transition: var(--transition-theme);
|
|
300
|
+
font-variant-numeric: tabular-nums;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
tbody td:first-child {
|
|
304
|
+
border-left: 1px solid var(--border-subtle);
|
|
305
|
+
border-top-left-radius: var(--radius-lg);
|
|
306
|
+
border-bottom-left-radius: var(--radius-lg);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
tbody td:last-child {
|
|
310
|
+
border-right: 1px solid var(--border-subtle);
|
|
311
|
+
border-top-right-radius: var(--radius-lg);
|
|
312
|
+
border-bottom-right-radius: var(--radius-lg);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
tbody tr:hover td {
|
|
316
|
+
background: var(--bg-elevated);
|
|
317
|
+
border-color: var(--border-medium);
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
**Rules:**
|
|
322
|
+
- Never use `border-collapse: collapse` with `tr` backgrounds in this visual system — hover fills look like hard painted rectangles.
|
|
323
|
+
- If the existing stack forces `collapse`, style `td` cells as the surface, not `tr`.
|
|
324
|
+
- In brownfield: check if the table should stay a table or become a list-detail surface before rewriting.
|
|
325
|
+
|
|
326
|
+
**Failure signs to fix:**
|
|
327
|
+
- Serif fallback or typography mismatch inside the table only → font scope bug
|
|
328
|
+
- Row hover painting a hard rectangle → use `border-collapse: separate` + `td` surfaces
|
|
329
|
+
- Status chips squeezed between columns → widen the lane or reduce chip padding
|
|
330
|
+
- Numbers misaligned → add `font-variant-numeric: tabular-nums`
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 14. Form Elements
|
|
335
|
+
|
|
336
|
+
**Input:**
|
|
337
|
+
```jsx
|
|
338
|
+
{ background: 'var(--bg-surface)', border: '1px solid var(--border-medium)',
|
|
339
|
+
borderRadius: 'var(--radius-md)', padding: 'var(--space-2) var(--space-3)',
|
|
340
|
+
color: 'var(--text-primary)', fontSize: 'var(--text-base)',
|
|
341
|
+
fontFamily: 'var(--font-body)', outline: 'none', ...TT }
|
|
342
|
+
// Focus: borderColor → var(--border-accent-strong), boxShadow → 0 0 0 3px var(--accent-glow)
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**Label:** mono label style (xs, muted, uppercase, tracking-widest). Place above input with `margin-bottom: var(--space-1)`.
|
|
346
|
+
|
|
347
|
+
**Button primary:**
|
|
348
|
+
```jsx
|
|
349
|
+
{ background: 'var(--accent)', color: 'var(--text-inverse)', border: 'none',
|
|
350
|
+
borderRadius: 'var(--radius-md)', padding: 'var(--space-2) var(--space-5)',
|
|
351
|
+
fontFamily: 'var(--font-mono)', fontSize: 'var(--text-sm)', fontWeight: 600,
|
|
352
|
+
letterSpacing: 'var(--tracking-wider)', textTransform: 'uppercase', cursor: 'pointer',
|
|
353
|
+
transition: 'background 150ms ease' }
|
|
354
|
+
// Hover: background → var(--accent-hover)
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**Button secondary:**
|
|
358
|
+
```jsx
|
|
359
|
+
{ background: 'transparent', color: 'var(--text-secondary)',
|
|
360
|
+
border: '1px solid var(--border-medium)',
|
|
361
|
+
/* rest same as primary */
|
|
362
|
+
}
|
|
363
|
+
// Hover: borderColor → var(--border-accent), color → var(--text-accent)
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## 15. Modal / Detail Overlay
|
|
369
|
+
|
|
370
|
+
```
|
|
371
|
+
┌─────────────── backdrop (rgba, z-modal) ───────────────┐
|
|
372
|
+
│ │
|
|
373
|
+
│ ┌─ Card max-w: 700px ─────────────────────────┐ │
|
|
374
|
+
│ │ HEADER: title + close button │ │
|
|
375
|
+
│ │ ───────────────────────── │ │
|
|
376
|
+
│ │ BODY: stat cards, progress, badges, etc. │ │
|
|
377
|
+
│ └─────────────────────────────────────────────┘ │
|
|
378
|
+
│ │
|
|
379
|
+
└──────────────────────────────────────────────────────────┘
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
- Backdrop: `rgba(0,0,0,0.6)`, centered flex, `z-index: var(--z-modal)`
|
|
383
|
+
- Content card: `var(--bg-base)`, `border: 1px solid var(--border-subtle)`, `border-radius: var(--radius-xl)`, `max-width: 700px`
|
|
384
|
+
- Header: flex, space-between, `padding: var(--space-5) var(--space-6)`, `border-bottom: 1px solid var(--border-subtle)`
|
|
385
|
+
- Body: `padding: var(--space-6)` — reuse stat cards, progress bars, badges, section headers
|
|
386
|
+
- Animation: `scaleIn 300ms cubic-bezier(0.16, 1, 0.3, 1)` (see motion.md)
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## 16. Theme Toggle
|
|
391
|
+
|
|
392
|
+
```jsx
|
|
393
|
+
<button
|
|
394
|
+
onClick={() => setTheme(t => t === 'dark' ? 'light' : 'dark')}
|
|
395
|
+
style={{
|
|
396
|
+
width: 36, height: 36, borderRadius: 'var(--radius-md)',
|
|
397
|
+
border: '1px solid var(--border-subtle)', background: 'var(--bg-surface)',
|
|
398
|
+
color: 'var(--text-secondary)', cursor: 'pointer',
|
|
399
|
+
display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
400
|
+
fontSize: '1rem', ...TT,
|
|
401
|
+
}}
|
|
402
|
+
>
|
|
403
|
+
{theme === 'dark' ? '☀' : '☾'}
|
|
404
|
+
</button>
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
Hover: `borderColor → var(--border-accent)`, `color → var(--accent)`.
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# Dashboard Presets — Cognitive Core UI
|
|
2
|
+
|
|
3
|
+
Read after `design-tokens.md`, `components.md`, and `patterns.md`.
|
|
4
|
+
|
|
5
|
+
These presets help choose a fitting operational composition instead of defaulting to random card grids.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## How to choose
|
|
10
|
+
|
|
11
|
+
1. Start from the product's **main operational pressure**, not from a visual trope.
|
|
12
|
+
2. Pick **one dominant preset** per screen.
|
|
13
|
+
3. Mix small traits from another preset only when the primary composition is already clear.
|
|
14
|
+
4. Choose one opening composition from the library below before placing a stat row.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Opening Composition Library
|
|
19
|
+
|
|
20
|
+
Do not let every dashboard begin with `4 KPI cards + tabs + equal grid`.
|
|
21
|
+
|
|
22
|
+
Choose one primary opening move:
|
|
23
|
+
|
|
24
|
+
### 1. Dominant Hero Surface
|
|
25
|
+
|
|
26
|
+
Use when:
|
|
27
|
+
- the screen has one main operational story
|
|
28
|
+
- users need a fast read on what matters most
|
|
29
|
+
|
|
30
|
+
Composition:
|
|
31
|
+
- one large hero analysis panel
|
|
32
|
+
- 2-3 supporting metrics beside or below
|
|
33
|
+
- secondary cards deferred downward
|
|
34
|
+
|
|
35
|
+
Best for:
|
|
36
|
+
- control centers
|
|
37
|
+
- analytics
|
|
38
|
+
- AI orchestration
|
|
39
|
+
|
|
40
|
+
### 2. Alert and Queue First
|
|
41
|
+
|
|
42
|
+
Use when:
|
|
43
|
+
- urgency beats summary
|
|
44
|
+
- users act from exceptions, incidents, or pending work
|
|
45
|
+
|
|
46
|
+
Composition:
|
|
47
|
+
- alert cluster or priority queue above the fold
|
|
48
|
+
- supporting health metrics nearby
|
|
49
|
+
- context rail for recent events
|
|
50
|
+
|
|
51
|
+
Best for:
|
|
52
|
+
- ops
|
|
53
|
+
- support
|
|
54
|
+
- logistics
|
|
55
|
+
- monitoring
|
|
56
|
+
|
|
57
|
+
### 3. Trend First
|
|
58
|
+
|
|
59
|
+
Use when:
|
|
60
|
+
- change over time matters more than static totals
|
|
61
|
+
- the main question is movement, not snapshot
|
|
62
|
+
|
|
63
|
+
Composition:
|
|
64
|
+
- chart or trend ribbon as the hero
|
|
65
|
+
- compact stat strip
|
|
66
|
+
- ranked list or narrative summary below
|
|
67
|
+
|
|
68
|
+
Best for:
|
|
69
|
+
- revenue
|
|
70
|
+
- analytics
|
|
71
|
+
- performance
|
|
72
|
+
|
|
73
|
+
### 4. Profile or Entity First
|
|
74
|
+
|
|
75
|
+
Use when:
|
|
76
|
+
- one active entity anchors the workflow
|
|
77
|
+
- the user is working inside a person, account, project, or agent
|
|
78
|
+
|
|
79
|
+
Composition:
|
|
80
|
+
- profile header or entity summary surface
|
|
81
|
+
- focused stat cards
|
|
82
|
+
- detail tabs and contextual rails
|
|
83
|
+
|
|
84
|
+
Best for:
|
|
85
|
+
- CRM
|
|
86
|
+
- account management
|
|
87
|
+
- AI agent panels
|
|
88
|
+
|
|
89
|
+
### 5. Workspace First
|
|
90
|
+
|
|
91
|
+
Use when:
|
|
92
|
+
- the dashboard is really a working surface, not just a summary
|
|
93
|
+
- users spend time editing, reviewing, or operating from this page
|
|
94
|
+
|
|
95
|
+
Composition:
|
|
96
|
+
- tool surface or main work pane dominates
|
|
97
|
+
- navigation and status become secondary chrome
|
|
98
|
+
- metrics move to support rails
|
|
99
|
+
|
|
100
|
+
Best for:
|
|
101
|
+
- admin tools
|
|
102
|
+
- builder UIs
|
|
103
|
+
- review flows
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Anti-Template Rules
|
|
108
|
+
|
|
109
|
+
- Never open every dashboard with four equal stat cards unless the product truly lives and dies by four equal KPIs.
|
|
110
|
+
- Never let the stat row be the most memorable part of the page.
|
|
111
|
+
- If the layout could be mistaken for a generic admin starter after removing the colors, redesign the composition.
|
|
112
|
+
- One strong focal block beats six medium-interest cards.
|
|
113
|
+
- Use `references/art-direction.md` to choose a signature move before styling panels.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Preset 1: Inventory Operations Board
|
|
118
|
+
|
|
119
|
+
**Best for:** stock control, inventory movement, replenishment monitoring, product catalog operations, supply dashboards.
|
|
120
|
+
|
|
121
|
+
**Default theme:** Dark.
|
|
122
|
+
|
|
123
|
+
**Layout composition:**
|
|
124
|
+
```
|
|
125
|
+
TOP BAR: Logo + product name + compact status badge + account/actions
|
|
126
|
+
STATS ROW: 3-4 high-signal cards only
|
|
127
|
+
SUBNAV: Dashboard | Products | Movements (or equivalent)
|
|
128
|
+
MAIN GRID:
|
|
129
|
+
LEFT RAIL (220-260px): monitoring blocks, quick filters, credential/mode card
|
|
130
|
+
CENTER (flex: 1): stock radar / urgent items / operational summary
|
|
131
|
+
RIGHT RAIL (320-380px): recent movements / alerts / short activity feed
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Why it works:**
|
|
135
|
+
- One central operational story above the fold
|
|
136
|
+
- Urgent items visible without a product-wall overload
|
|
137
|
+
- Movement history stays contextual, not dominant
|
|
138
|
+
- Left rail gives monitoring without stealing the main stage
|
|
139
|
+
|
|
140
|
+
**Rules:**
|
|
141
|
+
- Do not render the full product catalog above the fold. Show 2–4 urgent cards in the central radar.
|
|
142
|
+
- Use color semantics sparingly: green = stable, amber = low, red = zero/critical.
|
|
143
|
+
- Prefer operational labels: `Baixo estoque`, `Zerados`, `Saude do estoque`, `Movimentacao recente`.
|
|
144
|
+
- Keep the focal block calm. Do not turn it into a second dashboard shell inside the dashboard.
|
|
145
|
+
- For tables: treat each row as an intentional operational lane — aligned numbers, consistent padding, enough breathing room around status chips.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Preset 2: Premium Control Center
|
|
150
|
+
|
|
151
|
+
**Best for:** AI systems, orchestration panels, intelligence products, multi-module operational platforms, command centers.
|
|
152
|
+
|
|
153
|
+
**Default theme:** Dark.
|
|
154
|
+
|
|
155
|
+
**Layout composition:**
|
|
156
|
+
```
|
|
157
|
+
TOP BAR: Logo + system subtitle + nav + status badge
|
|
158
|
+
STATS ROW: 4 stat cards
|
|
159
|
+
SECONDARY NAV: domain tabs
|
|
160
|
+
MAIN GRID:
|
|
161
|
+
PRIMARY PANEL: single large analysis/control surface
|
|
162
|
+
SUPPORT PANEL: mode/status block
|
|
163
|
+
LOWER PANELS: grouped operational cards or capabilities
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Guardrail:**
|
|
167
|
+
- Use only when the product genuinely needs command-center semantics.
|
|
168
|
+
- DNA panels, mode panels, and labeled capability cards are optional, not default.
|
|
169
|
+
- Do not use for inventory just because the product is dark and premium.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Preset 3: Admin Analytics
|
|
174
|
+
|
|
175
|
+
**Best for:** analytics, SaaS admin, revenue tracking, performance reporting dashboards.
|
|
176
|
+
|
|
177
|
+
**Default theme:** Dark or Light.
|
|
178
|
+
|
|
179
|
+
**Layout composition:**
|
|
180
|
+
```
|
|
181
|
+
TOP BAR
|
|
182
|
+
STATS ROW
|
|
183
|
+
FILTER / DATE BAR
|
|
184
|
+
MAIN:
|
|
185
|
+
Chart panel (full width or 2/3)
|
|
186
|
+
Ranked list or summary panel (1/3)
|
|
187
|
+
Table or report panel (full width below)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Guardrail:**
|
|
191
|
+
- Let charts and tables do the work.
|
|
192
|
+
- Do not overload with decorative status cards.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Preset 4: Ops Cockpit
|
|
197
|
+
|
|
198
|
+
**Best for:** system monitoring, logistics control, incident response, infra operations, real-time dashboards.
|
|
199
|
+
|
|
200
|
+
**Default theme:** Dark.
|
|
201
|
+
|
|
202
|
+
**Layout composition:**
|
|
203
|
+
```
|
|
204
|
+
TOP BAR
|
|
205
|
+
STATUS ROW (alert counts + system health)
|
|
206
|
+
MAIN GRID:
|
|
207
|
+
Alert feed (primary, left/center)
|
|
208
|
+
System status cluster (grouped service cards)
|
|
209
|
+
Quick stats / context rail (right)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Guardrail:**
|
|
213
|
+
- Alerts must be scannable first. Status color must carry meaning, not atmosphere.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Preset 5: CRM / Contact Manager
|
|
218
|
+
|
|
219
|
+
**Best for:** CRM, support tools, people directories, account management, talent pipelines.
|
|
220
|
+
|
|
221
|
+
**Default theme:** Light or Dark.
|
|
222
|
+
|
|
223
|
+
**Layout composition:**
|
|
224
|
+
```
|
|
225
|
+
TOP BAR
|
|
226
|
+
TAB BAR (with filter badges)
|
|
227
|
+
LIST-DETAIL SPLIT:
|
|
228
|
+
Entity list (340px, scrollable)
|
|
229
|
+
Active profile/detail view (flex: 1)
|
|
230
|
+
→ Profile Header (compact) + Stat Cards + Tab sub-nav + Content
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Operational Table Guardrails
|
|
236
|
+
|
|
237
|
+
Dashboards often have tables. This is where otherwise-good boards lose quality.
|
|
238
|
+
|
|
239
|
+
### Goals
|
|
240
|
+
- Rows scannable in under 1 second
|
|
241
|
+
- Same premium density as the rest of the board
|
|
242
|
+
- Avoid the feeling of "spreadsheet leftovers pasted into a polished shell"
|
|
243
|
+
|
|
244
|
+
### Rules
|
|
245
|
+
1. Use `font-variant-numeric: tabular-nums` for quantities, prices, thresholds, and derived values.
|
|
246
|
+
2. Keep status, quantity, and actions visually separated — they should not collapse into one dense block.
|
|
247
|
+
3. Status chips must sit comfortably inside row rhythm. If they crowd neighboring columns, widen the lane.
|
|
248
|
+
4. Action buttons in tables should read as a grouped control cluster, not as independent floating pills.
|
|
249
|
+
5. Row hover must feel like a surface state, not a hard painted rectangle.
|
|
250
|
+
6. `border-collapse: separate` + `td` surfaces = premium. `border-collapse: collapse` + `tr` backgrounds = amateur.
|
|
251
|
+
|
|
252
|
+
### Failure signs
|
|
253
|
+
- Serif fallback inside the table only → font scope bug in `td`
|
|
254
|
+
- Row hover painting a hard rectangle → wrong collapse mode or `tr` background
|
|
255
|
+
- Status chips squeezed → widen the column or reduce chip padding
|
|
256
|
+
- Numbers misaligned → missing `font-variant-numeric: tabular-nums`
|
|
257
|
+
- Page opens with a large hero-like block → reduce stat row height, tighten typography
|
|
258
|
+
- Cards feel puffy and over-padded → reduce `padding`, `border-radius`, and grid gap
|
|
259
|
+
- Layout reads like a polished demo instead of an operational surface → density is part of the identity
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Inventory Mapping Guide
|
|
264
|
+
|
|
265
|
+
| Inventory concept | UI treatment |
|
|
266
|
+
|---|---|
|
|
267
|
+
| Low stock | Urgent card in stock radar |
|
|
268
|
+
| Zero stock | Critical card in stock radar (semantic-red) |
|
|
269
|
+
| Recent entry/exit | Right-rail activity list |
|
|
270
|
+
| Valuation / total items | Top stat row |
|
|
271
|
+
| Category / supplier monitoring | Left rail blocks or filters |
|
|
272
|
+
| Replenishment threshold | Progress bar + limit helper |
|