@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,356 @@
|
|
|
1
|
+
# Motion — Warm Craft UI
|
|
2
|
+
|
|
3
|
+
Animation and transition specifications. Motion in Warm Craft is **gentle and purposeful** — every animation should feel like a natural, unhurried movement. Nothing aggressive, nothing flashy.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Motion Principles
|
|
8
|
+
|
|
9
|
+
1. **Gentle over dramatic.** Animations should feel like a slow exhale, not a punch. Ease-out curves, moderate durations, subtle distances.
|
|
10
|
+
2. **Purposeful only.** Every animation must communicate something: entrance, state change, feedback, hierarchy. Decorative motion is noise.
|
|
11
|
+
3. **Consistent timing.** Use the token-based durations. Never arbitrary millisecond values.
|
|
12
|
+
4. **Respect user preference.** Always implement `prefers-reduced-motion` — reduce all animations to near-instant.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Timing Tokens
|
|
17
|
+
|
|
18
|
+
```css
|
|
19
|
+
--transition-fast: 120ms ease; /* micro-interactions: hover, focus, toggle */
|
|
20
|
+
--transition-base: 200ms ease; /* state changes: active, expand, collapse */
|
|
21
|
+
--transition-slow: 320ms ease; /* page transitions, large reveals, modals */
|
|
22
|
+
--transition-theme: background 200ms ease, color 200ms ease, border-color 200ms ease, box-shadow 200ms ease;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Easing Curves
|
|
28
|
+
|
|
29
|
+
```css
|
|
30
|
+
/* Standard — most interactions */
|
|
31
|
+
--ease-default: cubic-bezier(0.25, 0.1, 0.25, 1.0); /* ease */
|
|
32
|
+
|
|
33
|
+
/* Entrance — elements appearing */
|
|
34
|
+
--ease-enter: cubic-bezier(0.0, 0.0, 0.2, 1.0); /* ease-out — decelerates in */
|
|
35
|
+
|
|
36
|
+
/* Exit — elements leaving */
|
|
37
|
+
--ease-exit: cubic-bezier(0.4, 0.0, 1.0, 1.0); /* ease-in — accelerates out */
|
|
38
|
+
|
|
39
|
+
/* Gentle spring — for playful moments (onboarding, celebrations) */
|
|
40
|
+
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1.0); /* slight overshoot */
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Entrance Animations
|
|
46
|
+
|
|
47
|
+
### Fade In (default entrance)
|
|
48
|
+
```css
|
|
49
|
+
@keyframes warm-fade-in {
|
|
50
|
+
from { opacity: 0; }
|
|
51
|
+
to { opacity: 1; }
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.fade-in {
|
|
55
|
+
animation: warm-fade-in 300ms var(--ease-enter) both;
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Fade Up (cards, sections)
|
|
60
|
+
```css
|
|
61
|
+
@keyframes warm-fade-up {
|
|
62
|
+
from {
|
|
63
|
+
opacity: 0;
|
|
64
|
+
transform: translateY(12px);
|
|
65
|
+
}
|
|
66
|
+
to {
|
|
67
|
+
opacity: 1;
|
|
68
|
+
transform: translateY(0);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.fade-up {
|
|
73
|
+
animation: warm-fade-up 400ms var(--ease-enter) both;
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Scale In (modals, popovers)
|
|
78
|
+
```css
|
|
79
|
+
@keyframes warm-scale-in {
|
|
80
|
+
from {
|
|
81
|
+
opacity: 0;
|
|
82
|
+
transform: scale(0.95);
|
|
83
|
+
}
|
|
84
|
+
to {
|
|
85
|
+
opacity: 1;
|
|
86
|
+
transform: scale(1);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.scale-in {
|
|
91
|
+
animation: warm-scale-in 250ms var(--ease-enter) both;
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Slide In (drawers, side panels)
|
|
96
|
+
```css
|
|
97
|
+
@keyframes warm-slide-in-right {
|
|
98
|
+
from {
|
|
99
|
+
opacity: 0;
|
|
100
|
+
transform: translateX(20px);
|
|
101
|
+
}
|
|
102
|
+
to {
|
|
103
|
+
opacity: 1;
|
|
104
|
+
transform: translateX(0);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.slide-in-right {
|
|
109
|
+
animation: warm-slide-in-right 300ms var(--ease-enter) both;
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Stagger Sequences
|
|
116
|
+
|
|
117
|
+
For lists, grids, and card groups appearing together:
|
|
118
|
+
|
|
119
|
+
```css
|
|
120
|
+
.stagger-group > * {
|
|
121
|
+
animation: warm-fade-up 400ms var(--ease-enter) both;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.stagger-group > *:nth-child(1) { animation-delay: 0ms; }
|
|
125
|
+
.stagger-group > *:nth-child(2) { animation-delay: 60ms; }
|
|
126
|
+
.stagger-group > *:nth-child(3) { animation-delay: 120ms; }
|
|
127
|
+
.stagger-group > *:nth-child(4) { animation-delay: 180ms; }
|
|
128
|
+
.stagger-group > *:nth-child(5) { animation-delay: 240ms; }
|
|
129
|
+
.stagger-group > *:nth-child(6) { animation-delay: 300ms; }
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Rules:
|
|
133
|
+
- Stagger delay: 60ms per item (warm, unhurried).
|
|
134
|
+
- Max 6 items staggered. After 6, start the rest together.
|
|
135
|
+
- Only stagger on first load or page transition. Never on scroll.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Micro-Interactions
|
|
140
|
+
|
|
141
|
+
### Button Press
|
|
142
|
+
```css
|
|
143
|
+
button:active {
|
|
144
|
+
transform: scale(0.98);
|
|
145
|
+
transition: transform 80ms ease;
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Card Hover Lift
|
|
150
|
+
```css
|
|
151
|
+
.card-interactive {
|
|
152
|
+
transition: transform var(--transition-base), box-shadow var(--transition-base);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.card-interactive:hover {
|
|
156
|
+
transform: translateY(-2px);
|
|
157
|
+
box-shadow: var(--shadow-md);
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Toggle Switch
|
|
162
|
+
```css
|
|
163
|
+
.toggle-thumb {
|
|
164
|
+
transition: transform 200ms var(--ease-spring);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.toggle-checked .toggle-thumb {
|
|
168
|
+
transform: translateX(20px);
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Checkbox Check
|
|
173
|
+
```css
|
|
174
|
+
@keyframes warm-check {
|
|
175
|
+
0% { stroke-dashoffset: 20; }
|
|
176
|
+
100% { stroke-dashoffset: 0; }
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.checkbox-checked svg path {
|
|
180
|
+
animation: warm-check 200ms var(--ease-enter) both;
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Input Focus Ring
|
|
185
|
+
```css
|
|
186
|
+
input {
|
|
187
|
+
transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
input:focus {
|
|
191
|
+
border-color: var(--accent);
|
|
192
|
+
box-shadow: 0 0 0 3px var(--accent-dim);
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Page Transitions
|
|
199
|
+
|
|
200
|
+
### Content Area Change (tab switch, route change)
|
|
201
|
+
```css
|
|
202
|
+
.page-content-enter {
|
|
203
|
+
animation: warm-fade-up 300ms var(--ease-enter) both;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.page-content-exit {
|
|
207
|
+
animation: warm-fade-in 150ms var(--ease-exit) reverse both;
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Rule: exit is faster than enter (150ms vs 300ms). Content should leave quickly and arrive gently.
|
|
212
|
+
|
|
213
|
+
### Modal Enter/Exit
|
|
214
|
+
```css
|
|
215
|
+
/* Backdrop */
|
|
216
|
+
.modal-backdrop-enter {
|
|
217
|
+
animation: warm-fade-in 200ms ease both;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/* Modal */
|
|
221
|
+
.modal-enter {
|
|
222
|
+
animation: warm-scale-in 280ms var(--ease-enter) both;
|
|
223
|
+
animation-delay: 60ms; /* slight delay after backdrop */
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.modal-exit {
|
|
227
|
+
animation: warm-scale-in 180ms var(--ease-exit) reverse both;
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Drawer Enter/Exit
|
|
232
|
+
```css
|
|
233
|
+
.drawer-enter {
|
|
234
|
+
animation: warm-slide-in-right 300ms var(--ease-enter) both;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.drawer-exit {
|
|
238
|
+
animation: warm-slide-in-right 200ms var(--ease-exit) reverse both;
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Scroll Reveal (websites only)
|
|
245
|
+
|
|
246
|
+
Use for landing pages and marketing sections. Never for app pages.
|
|
247
|
+
|
|
248
|
+
```css
|
|
249
|
+
.scroll-reveal {
|
|
250
|
+
opacity: 0;
|
|
251
|
+
transform: translateY(20px);
|
|
252
|
+
transition: opacity 500ms var(--ease-enter), transform 500ms var(--ease-enter);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.scroll-reveal.visible {
|
|
256
|
+
opacity: 1;
|
|
257
|
+
transform: translateY(0);
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Implementation:
|
|
262
|
+
```javascript
|
|
263
|
+
const observer = new IntersectionObserver((entries) => {
|
|
264
|
+
entries.forEach(entry => {
|
|
265
|
+
if (entry.isIntersecting) {
|
|
266
|
+
entry.target.classList.add('visible');
|
|
267
|
+
observer.unobserve(entry.target); // trigger once
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
}, { threshold: 0.15 });
|
|
271
|
+
|
|
272
|
+
document.querySelectorAll('.scroll-reveal').forEach(el => observer.observe(el));
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Rules:
|
|
276
|
+
- Threshold: 0.15 (trigger when 15% visible — feels natural).
|
|
277
|
+
- Trigger once, never re-animate on scroll back.
|
|
278
|
+
- Translate distance: 20px max. More feels dramatic, less feels invisible.
|
|
279
|
+
- Duration: 500ms. Scroll reveals are slower than UI transitions — they are narrative.
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Loading States
|
|
284
|
+
|
|
285
|
+
### Skeleton Pulse
|
|
286
|
+
```css
|
|
287
|
+
@keyframes warm-pulse {
|
|
288
|
+
0%, 100% { opacity: 1; }
|
|
289
|
+
50% { opacity: 0.5; }
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.skeleton {
|
|
293
|
+
background: var(--bg-elevated);
|
|
294
|
+
border-radius: var(--radius-md);
|
|
295
|
+
animation: warm-pulse 1.8s ease-in-out infinite;
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Spinner (for buttons, small areas)
|
|
300
|
+
```css
|
|
301
|
+
@keyframes warm-spin {
|
|
302
|
+
to { transform: rotate(360deg); }
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.spinner {
|
|
306
|
+
width: 20px;
|
|
307
|
+
height: 20px;
|
|
308
|
+
border: 2px solid var(--border-medium);
|
|
309
|
+
border-top-color: var(--accent);
|
|
310
|
+
border-radius: var(--radius-full);
|
|
311
|
+
animation: warm-spin 800ms linear infinite;
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Progress Bar Fill
|
|
316
|
+
```css
|
|
317
|
+
.progress-fill {
|
|
318
|
+
transition: width 600ms var(--ease-enter);
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Celebration Moments
|
|
325
|
+
|
|
326
|
+
For onboarding completion, achievement unlocked, milestone reached.
|
|
327
|
+
|
|
328
|
+
```css
|
|
329
|
+
@keyframes warm-celebrate {
|
|
330
|
+
0% { transform: scale(0.8); opacity: 0; }
|
|
331
|
+
50% { transform: scale(1.05); }
|
|
332
|
+
100% { transform: scale(1); opacity: 1; }
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.celebration {
|
|
336
|
+
animation: warm-celebrate 500ms var(--ease-spring) both;
|
|
337
|
+
}
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
Use sparingly. One celebration per flow, not per step.
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## Reduced Motion
|
|
345
|
+
|
|
346
|
+
```css
|
|
347
|
+
@media (prefers-reduced-motion: reduce) {
|
|
348
|
+
*, *::before, *::after {
|
|
349
|
+
animation-duration: 0.01ms !important;
|
|
350
|
+
animation-iteration-count: 1 !important;
|
|
351
|
+
transition-duration: 0.01ms !important;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
Non-negotiable. Always include this in the global stylesheet.
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# Page Patterns — Warm Craft UI
|
|
2
|
+
|
|
3
|
+
Layout patterns for common page types. Each pattern is a composition guide, not a rigid template. Use tokens from `design-tokens.md` and components from `components.md`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## App Shell
|
|
8
|
+
|
|
9
|
+
The main layout container for all app pages.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
+----------------------------------------------------------+
|
|
13
|
+
| TOP BAR (64px) |
|
|
14
|
+
+----------+-----------------------------------------------+
|
|
15
|
+
| | |
|
|
16
|
+
| SIDEBAR | CONTENT AREA |
|
|
17
|
+
| 240px | padding: var(--space-8) |
|
|
18
|
+
| | max-width: var(--content-xl) or fluid |
|
|
19
|
+
| | |
|
|
20
|
+
+----------+-----------------------------------------------+
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Rules:
|
|
24
|
+
- Sidebar background: `var(--bg-void)` — one level deeper than content
|
|
25
|
+
- Content background: `var(--bg-base)`
|
|
26
|
+
- Sidebar collapses to bottom tab bar on mobile (< 768px)
|
|
27
|
+
- Content area scrolls independently; sidebar and topbar are fixed
|
|
28
|
+
- Sidebar width: 240px default. Can collapse to 64px icon-only with toggle
|
|
29
|
+
|
|
30
|
+
### Compact Shell (no sidebar)
|
|
31
|
+
```
|
|
32
|
+
+----------------------------------------------------------+
|
|
33
|
+
| TOP BAR (64px) |
|
|
34
|
+
+----------------------------------------------------------+
|
|
35
|
+
| |
|
|
36
|
+
| CONTENT AREA |
|
|
37
|
+
| max-width: var(--content-lg) |
|
|
38
|
+
| margin: 0 auto |
|
|
39
|
+
| padding: var(--space-8) var(--space-6) |
|
|
40
|
+
| |
|
|
41
|
+
+----------------------------------------------------------+
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Use when: simple apps with fewer than 5 navigation items, single-purpose tools.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Dashboard Page
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
PAGE HEADER
|
|
52
|
+
font: var(--font-display), var(--text-3xl), var(--weight-bold)
|
|
53
|
+
color: var(--text-heading)
|
|
54
|
+
subtitle: var(--font-body), var(--text-base), var(--text-secondary)
|
|
55
|
+
margin-bottom: var(--space-8)
|
|
56
|
+
|
|
57
|
+
STAT ROW (optional — do NOT always start with this)
|
|
58
|
+
display: grid
|
|
59
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr))
|
|
60
|
+
gap: var(--space-5)
|
|
61
|
+
margin-bottom: var(--space-8)
|
|
62
|
+
uses: Stat Card component
|
|
63
|
+
|
|
64
|
+
SECTION
|
|
65
|
+
title:
|
|
66
|
+
font: var(--font-display), var(--text-xl), var(--weight-semibold)
|
|
67
|
+
color: var(--text-heading)
|
|
68
|
+
margin-bottom: var(--space-5)
|
|
69
|
+
content:
|
|
70
|
+
Card grid, Table, Chart, or Activity Feed
|
|
71
|
+
margin-bottom: var(--space-10)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Variation rules:
|
|
75
|
+
- Do NOT always use 4 stat cards as the first element
|
|
76
|
+
- Prefer one hero insight or greeting above stats
|
|
77
|
+
- Charts use warm palette (see `design-tokens.md` palette rules)
|
|
78
|
+
- Tables should feel native to the warm system, not pasted from a data library
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Detail / Profile Page
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
BACK NAVIGATION
|
|
86
|
+
Ghost Button with arrow icon + "Back to {list}"
|
|
87
|
+
margin-bottom: var(--space-4)
|
|
88
|
+
|
|
89
|
+
HEADER ZONE
|
|
90
|
+
display: flex; gap: var(--space-6); align-items: flex-start
|
|
91
|
+
avatar: var(--space-20) (80px)
|
|
92
|
+
title: var(--font-display), var(--text-3xl), var(--weight-bold)
|
|
93
|
+
subtitle: var(--text-secondary)
|
|
94
|
+
badges: inline-flex after subtitle
|
|
95
|
+
actions: flex-end (Edit, Delete, etc.)
|
|
96
|
+
|
|
97
|
+
TAB NAVIGATION (optional)
|
|
98
|
+
border-bottom: 1px solid var(--border-subtle)
|
|
99
|
+
margin: var(--space-6) 0
|
|
100
|
+
tab:
|
|
101
|
+
padding: var(--space-3) var(--space-4)
|
|
102
|
+
font: var(--text-sm), var(--weight-medium)
|
|
103
|
+
color: var(--text-secondary)
|
|
104
|
+
active:
|
|
105
|
+
color: var(--text-heading)
|
|
106
|
+
border-bottom: 2px solid var(--accent)
|
|
107
|
+
|
|
108
|
+
CONTENT SECTIONS
|
|
109
|
+
Two-column layout on desktop (content 2/3 + sidebar 1/3)
|
|
110
|
+
Single column on mobile
|
|
111
|
+
gap: var(--space-8)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Settings Page
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
PAGE HEADER
|
|
120
|
+
title: "Settings"
|
|
121
|
+
no subtitle needed
|
|
122
|
+
|
|
123
|
+
SETTINGS NAVIGATION (left column or tabs)
|
|
124
|
+
vertical list: General, Profile, Notifications, Security, Billing...
|
|
125
|
+
uses: Sidebar Navigation item style
|
|
126
|
+
|
|
127
|
+
SETTINGS CONTENT (right column)
|
|
128
|
+
sections:
|
|
129
|
+
SECTION TITLE
|
|
130
|
+
font: var(--font-display), var(--text-lg), var(--weight-semibold)
|
|
131
|
+
border-bottom: 1px solid var(--border-subtle)
|
|
132
|
+
padding-bottom: var(--space-3)
|
|
133
|
+
margin-bottom: var(--space-6)
|
|
134
|
+
|
|
135
|
+
SETTING ROW
|
|
136
|
+
display: flex; justify-content: space-between; align-items: center
|
|
137
|
+
padding: var(--space-4) 0
|
|
138
|
+
border-bottom: 1px solid var(--border-subtle)
|
|
139
|
+
|
|
140
|
+
label + description (left):
|
|
141
|
+
label: var(--text-sm), var(--weight-medium), var(--text-heading)
|
|
142
|
+
description: var(--text-sm), var(--text-secondary)
|
|
143
|
+
|
|
144
|
+
control (right):
|
|
145
|
+
Toggle, Select, or Button
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## List / Browse Page
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
PAGE HEADER + ACTIONS
|
|
154
|
+
title + description (left)
|
|
155
|
+
Primary Button "Create New" (right)
|
|
156
|
+
margin-bottom: var(--space-6)
|
|
157
|
+
|
|
158
|
+
FILTERS / SEARCH BAR
|
|
159
|
+
display: flex; gap: var(--space-3); align-items: center
|
|
160
|
+
Search Input (pill-shaped, flexible width)
|
|
161
|
+
Filter badges or dropdown buttons
|
|
162
|
+
margin-bottom: var(--space-6)
|
|
163
|
+
|
|
164
|
+
CONTENT
|
|
165
|
+
Option A — Card Grid:
|
|
166
|
+
display: grid
|
|
167
|
+
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr))
|
|
168
|
+
gap: var(--space-5)
|
|
169
|
+
uses: Base Card or Media Card
|
|
170
|
+
|
|
171
|
+
Option B — Table:
|
|
172
|
+
uses: Table component
|
|
173
|
+
with rounded outer corners and warm hover
|
|
174
|
+
|
|
175
|
+
Option C — List:
|
|
176
|
+
vertical stack with Base Card items
|
|
177
|
+
gap: var(--space-3)
|
|
178
|
+
|
|
179
|
+
PAGINATION
|
|
180
|
+
display: flex; justify-content: center; gap: var(--space-2)
|
|
181
|
+
margin-top: var(--space-8)
|
|
182
|
+
pill-shaped page buttons
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Onboarding / Setup Flow
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
LAYOUT
|
|
191
|
+
centered, max-width: 560px
|
|
192
|
+
padding: var(--space-16) var(--space-6)
|
|
193
|
+
no sidebar, minimal topbar (logo only)
|
|
194
|
+
|
|
195
|
+
PROGRESS
|
|
196
|
+
Step indicator above content
|
|
197
|
+
Numbered or dot-based, horizontal
|
|
198
|
+
Current step: accent color
|
|
199
|
+
Completed: accent-dim with checkmark
|
|
200
|
+
Future: var(--border-medium)
|
|
201
|
+
|
|
202
|
+
STEP CONTENT
|
|
203
|
+
title:
|
|
204
|
+
font: var(--font-display), var(--text-2xl), var(--weight-bold)
|
|
205
|
+
text-align: center
|
|
206
|
+
margin-bottom: var(--space-2)
|
|
207
|
+
|
|
208
|
+
description:
|
|
209
|
+
font: var(--text-base), var(--text-secondary)
|
|
210
|
+
text-align: center
|
|
211
|
+
max-width: 440px
|
|
212
|
+
margin: 0 auto var(--space-8)
|
|
213
|
+
|
|
214
|
+
form or content:
|
|
215
|
+
text-align: left
|
|
216
|
+
uses standard form components
|
|
217
|
+
|
|
218
|
+
ACTIONS
|
|
219
|
+
display: flex; justify-content: space-between
|
|
220
|
+
margin-top: var(--space-8)
|
|
221
|
+
"Back" (Ghost Button) + "Continue" (Primary Button)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Auth Pages (Login / Register)
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
LAYOUT
|
|
230
|
+
Option A — Centered card:
|
|
231
|
+
max-width: 420px
|
|
232
|
+
margin: auto
|
|
233
|
+
min-height: 100vh
|
|
234
|
+
display: flex; align-items: center; justify-content: center
|
|
235
|
+
background: var(--bg-void)
|
|
236
|
+
|
|
237
|
+
Option B — Split screen:
|
|
238
|
+
left 50%: illustration or brand panel (warm gradient or warm photography)
|
|
239
|
+
right 50%: auth form centered
|
|
240
|
+
|
|
241
|
+
CARD
|
|
242
|
+
background: var(--bg-surface)
|
|
243
|
+
border-radius: var(--radius-2xl)
|
|
244
|
+
padding: var(--space-10)
|
|
245
|
+
shadow: var(--shadow-lg)
|
|
246
|
+
|
|
247
|
+
logo:
|
|
248
|
+
centered, margin-bottom: var(--space-8)
|
|
249
|
+
|
|
250
|
+
title:
|
|
251
|
+
font: var(--font-display), var(--text-2xl), var(--weight-bold)
|
|
252
|
+
text-align: center
|
|
253
|
+
|
|
254
|
+
form:
|
|
255
|
+
margin-top: var(--space-6)
|
|
256
|
+
fields stacked with var(--space-4) gap
|
|
257
|
+
"Remember me" checkbox + "Forgot password?" link row
|
|
258
|
+
|
|
259
|
+
submit:
|
|
260
|
+
Primary Button, full width
|
|
261
|
+
margin-top: var(--space-6)
|
|
262
|
+
|
|
263
|
+
footer:
|
|
264
|
+
"Don't have an account? Sign up" — centered link
|
|
265
|
+
margin-top: var(--space-6)
|
|
266
|
+
font: var(--text-sm), var(--text-secondary)
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Responsive Breakpoints
|
|
272
|
+
|
|
273
|
+
```css
|
|
274
|
+
/* Mobile first */
|
|
275
|
+
@media (min-width: 640px) { /* sm — phone landscape */ }
|
|
276
|
+
@media (min-width: 768px) { /* md — tablet */ }
|
|
277
|
+
@media (min-width: 1024px) { /* lg — desktop */ }
|
|
278
|
+
@media (min-width: 1280px) { /* xl — wide desktop */ }
|
|
279
|
+
@media (min-width: 1440px) { /* 2xl — ultra-wide */ }
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Rules:
|
|
283
|
+
- Sidebar → bottom tab bar below 768px
|
|
284
|
+
- Card grids → single column below 640px
|
|
285
|
+
- Split layouts (detail page, auth) → stacked below 768px
|
|
286
|
+
- Content max-width respects `var(--content-*)` tokens
|
|
287
|
+
- Touch targets: minimum 44px on mobile
|
|
288
|
+
- Spacing reduces by one step on mobile (e.g., `--space-8` → `--space-6`)
|