aw-ecc 1.4.32 → 1.4.48
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/.claude-plugin/plugin.json +1 -1
- package/.cursor/INSTALL.md +7 -5
- package/.cursor/hooks/adapter.js +41 -4
- package/.cursor/hooks/after-agent-response.js +62 -0
- package/.cursor/hooks/before-submit-prompt.js +7 -1
- package/.cursor/hooks/post-tool-use-failure.js +21 -0
- package/.cursor/hooks/post-tool-use.js +39 -0
- package/.cursor/hooks/shared/aw-phase-definitions.js +53 -0
- package/.cursor/hooks/shared/aw-phase-runner.js +3 -1
- package/.cursor/hooks/subagent-start.js +22 -4
- package/.cursor/hooks/subagent-stop.js +18 -1
- package/.cursor/hooks.json +23 -2
- package/.opencode/package.json +1 -1
- package/AGENTS.md +3 -3
- package/README.md +5 -5
- package/commands/adk.md +52 -0
- package/commands/build.md +22 -9
- package/commands/deploy.md +12 -0
- package/commands/execute.md +9 -0
- package/commands/feature.md +333 -0
- package/commands/investigate.md +18 -5
- package/commands/plan.md +23 -9
- package/commands/publish.md +65 -0
- package/commands/review.md +12 -0
- package/commands/ship.md +12 -0
- package/commands/test.md +12 -0
- package/commands/verify.md +9 -0
- package/hooks/hooks.json +36 -0
- package/manifests/install-components.json +8 -0
- package/manifests/install-modules.json +83 -0
- package/manifests/install-profiles.json +7 -0
- package/package.json +2 -2
- package/scripts/ci/validate-rules.js +51 -0
- package/scripts/cursor-aw-home/hooks.json +23 -2
- package/scripts/cursor-aw-hooks/adapter.js +41 -4
- package/scripts/cursor-aw-hooks/before-submit-prompt.js +7 -1
- package/scripts/hooks/aw-usage-commit-created.js +32 -0
- package/scripts/hooks/aw-usage-post-tool-use-failure.js +56 -0
- package/scripts/hooks/aw-usage-post-tool-use.js +242 -0
- package/scripts/hooks/aw-usage-prompt-submit.js +112 -0
- package/scripts/hooks/aw-usage-session-start.js +48 -0
- package/scripts/hooks/aw-usage-stop.js +182 -0
- package/scripts/hooks/aw-usage-telemetry-send.js +84 -0
- package/scripts/hooks/cost-tracker.js +3 -23
- package/scripts/hooks/shared/aw-phase-definitions.js +53 -0
- package/scripts/hooks/shared/aw-phase-runner.js +3 -1
- package/scripts/lib/aw-hook-contract.js +2 -2
- package/scripts/lib/aw-pricing.js +306 -0
- package/scripts/lib/aw-usage-telemetry.js +472 -0
- package/scripts/lib/codex-hook-config.js +8 -8
- package/scripts/lib/cursor-hook-config.js +25 -10
- package/scripts/lib/install-targets/cursor-project.js +3 -0
- package/scripts/lib/install-targets/helpers.js +20 -3
- package/skills/aw-adk/SKILL.md +317 -0
- package/skills/aw-adk/agents/analyzer.md +113 -0
- package/skills/aw-adk/agents/comparator.md +113 -0
- package/skills/aw-adk/agents/grader.md +115 -0
- package/skills/aw-adk/assets/eval_review.html +76 -0
- package/skills/aw-adk/eval-viewer/generate_review.py +164 -0
- package/skills/aw-adk/eval-viewer/viewer.html +181 -0
- package/skills/aw-adk/evals/eval-colocated-placement.md +84 -0
- package/skills/aw-adk/evals/eval-create-agent.md +90 -0
- package/skills/aw-adk/evals/eval-create-command.md +98 -0
- package/skills/aw-adk/evals/eval-create-eval.md +89 -0
- package/skills/aw-adk/evals/eval-create-rule.md +99 -0
- package/skills/aw-adk/evals/eval-create-skill.md +97 -0
- package/skills/aw-adk/evals/eval-delete-agent.md +79 -0
- package/skills/aw-adk/evals/eval-delete-command.md +89 -0
- package/skills/aw-adk/evals/eval-delete-rule.md +86 -0
- package/skills/aw-adk/evals/eval-delete-skill.md +90 -0
- package/skills/aw-adk/evals/eval-meta-eval-coverage.md +78 -0
- package/skills/aw-adk/evals/eval-meta-eval-determinism.md +81 -0
- package/skills/aw-adk/evals/eval-meta-eval-false-pass.md +81 -0
- package/skills/aw-adk/evals/eval-score-accuracy.md +95 -0
- package/skills/aw-adk/evals/eval-type-redirect.md +68 -0
- package/skills/aw-adk/evals/evals.json +96 -0
- package/skills/aw-adk/references/artifact-wiring.md +162 -0
- package/skills/aw-adk/references/cross-ide-mapping.md +71 -0
- package/skills/aw-adk/references/eval-placement-guide.md +183 -0
- package/skills/aw-adk/references/external-resources.md +75 -0
- package/skills/aw-adk/references/getting-started.md +66 -0
- package/skills/aw-adk/references/registry-structure.md +152 -0
- package/skills/aw-adk/references/rubric-agent.md +36 -0
- package/skills/aw-adk/references/rubric-command.md +36 -0
- package/skills/aw-adk/references/rubric-eval.md +36 -0
- package/skills/aw-adk/references/rubric-meta-eval.md +132 -0
- package/skills/aw-adk/references/rubric-rule.md +36 -0
- package/skills/aw-adk/references/rubric-skill.md +36 -0
- package/skills/aw-adk/references/schemas.md +222 -0
- package/skills/aw-adk/references/template-agent.md +251 -0
- package/skills/aw-adk/references/template-command.md +279 -0
- package/skills/aw-adk/references/template-eval.md +176 -0
- package/skills/aw-adk/references/template-rule.md +119 -0
- package/skills/aw-adk/references/template-skill.md +123 -0
- package/skills/aw-adk/references/type-classifier.md +98 -0
- package/skills/aw-adk/references/writing-good-agents.md +227 -0
- package/skills/aw-adk/references/writing-good-commands.md +258 -0
- package/skills/aw-adk/references/writing-good-evals.md +271 -0
- package/skills/aw-adk/references/writing-good-rules.md +214 -0
- package/skills/aw-adk/references/writing-good-skills.md +159 -0
- package/skills/aw-adk/scripts/aggregate-benchmark.py +190 -0
- package/skills/aw-adk/scripts/lint-artifact.sh +211 -0
- package/skills/aw-adk/scripts/score-artifact.sh +179 -0
- package/skills/aw-adk/scripts/trigger-eval.py +192 -0
- package/skills/aw-build/SKILL.md +19 -2
- package/skills/aw-deploy/SKILL.md +65 -3
- package/skills/aw-design/SKILL.md +156 -0
- package/skills/aw-design/references/highrise-tokens.md +394 -0
- package/skills/aw-design/references/micro-interactions.md +76 -0
- package/skills/aw-design/references/prompt-template.md +160 -0
- package/skills/aw-design/references/quality-checklist.md +70 -0
- package/skills/aw-design/references/self-review.md +497 -0
- package/skills/aw-design/references/stitch-workflow.md +127 -0
- package/skills/aw-feature/SKILL.md +293 -0
- package/skills/aw-investigate/SKILL.md +17 -0
- package/skills/aw-plan/SKILL.md +34 -3
- package/skills/aw-publish/SKILL.md +300 -0
- package/skills/aw-publish/evals/eval-confirmation-gate.md +60 -0
- package/skills/aw-publish/evals/eval-intent-detection.md +111 -0
- package/skills/aw-publish/evals/eval-push-modes.md +67 -0
- package/skills/aw-publish/evals/eval-rules-push.md +60 -0
- package/skills/aw-publish/evals/evals.json +29 -0
- package/skills/aw-publish/references/push-modes.md +38 -0
- package/skills/aw-review/SKILL.md +88 -9
- package/skills/aw-rules-review/SKILL.md +124 -0
- package/skills/aw-rules-review/agents/openai.yaml +3 -0
- package/skills/aw-rules-review/scripts/generate-review-template.mjs +323 -0
- package/skills/aw-ship/SKILL.md +16 -0
- package/skills/aw-spec/SKILL.md +15 -0
- package/skills/aw-tasks/SKILL.md +15 -0
- package/skills/aw-test/SKILL.md +16 -0
- package/skills/aw-yolo/SKILL.md +4 -0
- package/skills/diagnose/SKILL.md +121 -0
- package/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
- package/skills/finish-only-when-green/SKILL.md +265 -0
- package/skills/grill-me/SKILL.md +24 -0
- package/skills/grill-with-docs/SKILL.md +92 -0
- package/skills/grill-with-docs/adr-format.md +47 -0
- package/skills/grill-with-docs/context-format.md +67 -0
- package/skills/improve-codebase-architecture/SKILL.md +75 -0
- package/skills/improve-codebase-architecture/deepening.md +37 -0
- package/skills/improve-codebase-architecture/interface-design.md +44 -0
- package/skills/improve-codebase-architecture/language.md +53 -0
- package/skills/local-ghl-setup-from-screenshot/SKILL.md +538 -0
- package/skills/tdd/SKILL.md +115 -0
- package/skills/tdd/deep-modules.md +33 -0
- package/skills/tdd/interface-design.md +31 -0
- package/skills/tdd/mocking.md +59 -0
- package/skills/tdd/refactoring.md +10 -0
- package/skills/tdd/tests.md +61 -0
- package/skills/to-issues/SKILL.md +62 -0
- package/skills/to-prd/SKILL.md +75 -0
- package/skills/using-aw-skills/SKILL.md +170 -237
- package/skills/using-aw-skills/hooks/session-start.sh +11 -41
- package/skills/zoom-out/SKILL.md +24 -0
- package/.codex/hooks/aw-post-tool-use.sh +0 -6
- package/.codex/hooks/aw-pre-tool-use.sh +0 -6
- package/.codex/hooks/aw-session-start.sh +0 -25
- package/.codex/hooks/aw-stop.sh +0 -6
- package/.codex/hooks/aw-user-prompt-submit.sh +0 -10
- package/.codex/hooks.json +0 -62
- package/.cursor/rules/common-agents.md +0 -53
- package/.cursor/rules/common-aw-routing.md +0 -43
- package/.cursor/rules/common-coding-style.md +0 -52
- package/.cursor/rules/common-development-workflow.md +0 -33
- package/.cursor/rules/common-git-workflow.md +0 -28
- package/.cursor/rules/common-hooks.md +0 -34
- package/.cursor/rules/common-patterns.md +0 -35
- package/.cursor/rules/common-performance.md +0 -59
- package/.cursor/rules/common-security.md +0 -33
- package/.cursor/rules/common-testing.md +0 -33
- package/.cursor/skills/api-and-interface-design/SKILL.md +0 -75
- package/.cursor/skills/article-writing/SKILL.md +0 -85
- package/.cursor/skills/aw-brainstorm/SKILL.md +0 -115
- package/.cursor/skills/aw-build/SKILL.md +0 -152
- package/.cursor/skills/aw-build/evals/build-stage-cases.json +0 -28
- package/.cursor/skills/aw-debug/SKILL.md +0 -49
- package/.cursor/skills/aw-deploy/SKILL.md +0 -101
- package/.cursor/skills/aw-deploy/evals/deploy-stage-cases.json +0 -32
- package/.cursor/skills/aw-execute/SKILL.md +0 -47
- package/.cursor/skills/aw-execute/references/mode-code.md +0 -47
- package/.cursor/skills/aw-execute/references/mode-docs.md +0 -28
- package/.cursor/skills/aw-execute/references/mode-infra.md +0 -44
- package/.cursor/skills/aw-execute/references/mode-migration.md +0 -58
- package/.cursor/skills/aw-execute/references/worker-implementer.md +0 -26
- package/.cursor/skills/aw-execute/references/worker-parallel-worker.md +0 -23
- package/.cursor/skills/aw-execute/references/worker-quality-reviewer.md +0 -23
- package/.cursor/skills/aw-execute/references/worker-spec-reviewer.md +0 -23
- package/.cursor/skills/aw-execute/scripts/build-worker-bundle.js +0 -229
- package/.cursor/skills/aw-finish/SKILL.md +0 -111
- package/.cursor/skills/aw-investigate/SKILL.md +0 -109
- package/.cursor/skills/aw-plan/SKILL.md +0 -368
- package/.cursor/skills/aw-prepare/SKILL.md +0 -118
- package/.cursor/skills/aw-review/SKILL.md +0 -118
- package/.cursor/skills/aw-ship/SKILL.md +0 -115
- package/.cursor/skills/aw-spec/SKILL.md +0 -104
- package/.cursor/skills/aw-tasks/SKILL.md +0 -138
- package/.cursor/skills/aw-test/SKILL.md +0 -118
- package/.cursor/skills/aw-verify/SKILL.md +0 -51
- package/.cursor/skills/aw-yolo/SKILL.md +0 -111
- package/.cursor/skills/browser-testing-with-devtools/SKILL.md +0 -81
- package/.cursor/skills/bun-runtime/SKILL.md +0 -84
- package/.cursor/skills/ci-cd-and-automation/SKILL.md +0 -71
- package/.cursor/skills/code-simplification/SKILL.md +0 -74
- package/.cursor/skills/content-engine/SKILL.md +0 -88
- package/.cursor/skills/context-engineering/SKILL.md +0 -74
- package/.cursor/skills/deprecation-and-migration/SKILL.md +0 -75
- package/.cursor/skills/documentation-and-adrs/SKILL.md +0 -75
- package/.cursor/skills/documentation-lookup/SKILL.md +0 -90
- package/.cursor/skills/frontend-slides/SKILL.md +0 -184
- package/.cursor/skills/frontend-slides/STYLE_PRESETS.md +0 -330
- package/.cursor/skills/frontend-ui-engineering/SKILL.md +0 -68
- package/.cursor/skills/git-workflow-and-versioning/SKILL.md +0 -75
- package/.cursor/skills/idea-refine/SKILL.md +0 -84
- package/.cursor/skills/incremental-implementation/SKILL.md +0 -75
- package/.cursor/skills/investor-materials/SKILL.md +0 -96
- package/.cursor/skills/investor-outreach/SKILL.md +0 -76
- package/.cursor/skills/market-research/SKILL.md +0 -75
- package/.cursor/skills/mcp-server-patterns/SKILL.md +0 -67
- package/.cursor/skills/nextjs-turbopack/SKILL.md +0 -44
- package/.cursor/skills/performance-optimization/SKILL.md +0 -77
- package/.cursor/skills/security-and-hardening/SKILL.md +0 -70
- package/.cursor/skills/using-aw-skills/SKILL.md +0 -290
- package/.cursor/skills/using-aw-skills/evals/skill-trigger-cases.tsv +0 -25
- package/.cursor/skills/using-aw-skills/evals/test-skill-triggers.sh +0 -171
- package/.cursor/skills/using-aw-skills/hooks/hooks.json +0 -9
- package/.cursor/skills/using-aw-skills/hooks/session-start.sh +0 -67
- package/.cursor/skills/using-platform-skills/SKILL.md +0 -163
- package/.cursor/skills/using-platform-skills/evals/platform-selection-cases.json +0 -52
- /package/.cursor/rules/{golang-coding-style.md → golang-coding-style.mdc} +0 -0
- /package/.cursor/rules/{golang-hooks.md → golang-hooks.mdc} +0 -0
- /package/.cursor/rules/{golang-patterns.md → golang-patterns.mdc} +0 -0
- /package/.cursor/rules/{golang-security.md → golang-security.mdc} +0 -0
- /package/.cursor/rules/{golang-testing.md → golang-testing.mdc} +0 -0
- /package/.cursor/rules/{kotlin-coding-style.md → kotlin-coding-style.mdc} +0 -0
- /package/.cursor/rules/{kotlin-hooks.md → kotlin-hooks.mdc} +0 -0
- /package/.cursor/rules/{kotlin-patterns.md → kotlin-patterns.mdc} +0 -0
- /package/.cursor/rules/{kotlin-security.md → kotlin-security.mdc} +0 -0
- /package/.cursor/rules/{kotlin-testing.md → kotlin-testing.mdc} +0 -0
- /package/.cursor/rules/{php-coding-style.md → php-coding-style.mdc} +0 -0
- /package/.cursor/rules/{php-hooks.md → php-hooks.mdc} +0 -0
- /package/.cursor/rules/{php-patterns.md → php-patterns.mdc} +0 -0
- /package/.cursor/rules/{php-security.md → php-security.mdc} +0 -0
- /package/.cursor/rules/{php-testing.md → php-testing.mdc} +0 -0
- /package/.cursor/rules/{python-coding-style.md → python-coding-style.mdc} +0 -0
- /package/.cursor/rules/{python-hooks.md → python-hooks.mdc} +0 -0
- /package/.cursor/rules/{python-patterns.md → python-patterns.mdc} +0 -0
- /package/.cursor/rules/{python-security.md → python-security.mdc} +0 -0
- /package/.cursor/rules/{python-testing.md → python-testing.mdc} +0 -0
- /package/.cursor/rules/{swift-coding-style.md → swift-coding-style.mdc} +0 -0
- /package/.cursor/rules/{swift-hooks.md → swift-hooks.mdc} +0 -0
- /package/.cursor/rules/{swift-patterns.md → swift-patterns.mdc} +0 -0
- /package/.cursor/rules/{swift-security.md → swift-security.mdc} +0 -0
- /package/.cursor/rules/{swift-testing.md → swift-testing.mdc} +0 -0
- /package/.cursor/rules/{typescript-coding-style.md → typescript-coding-style.mdc} +0 -0
- /package/.cursor/rules/{typescript-hooks.md → typescript-hooks.mdc} +0 -0
- /package/.cursor/rules/{typescript-patterns.md → typescript-patterns.mdc} +0 -0
- /package/.cursor/rules/{typescript-security.md → typescript-security.mdc} +0 -0
- /package/.cursor/rules/{typescript-testing.md → typescript-testing.mdc} +0 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
# HighRise Design Tokens
|
|
2
|
+
|
|
3
|
+
**Source of truth:** Figma — `HighRise` (fileKey `BM196jNmVUfXBYDsyEVv8N`), page **1. Tokens**.
|
|
4
|
+
**Extraction method:** Figma MCP `get_variable_defs` on the Colors / Typography / Gradients / Label / Input / Gap frames.
|
|
5
|
+
**Status markers:** ✓ verified from Figma | ~ derived | ? needs verification.
|
|
6
|
+
|
|
7
|
+
Every value below was pulled directly from the production design system. Use these exact tokens — no rogue hex codes, no sibling brand scales (violet / purple / indigo exist in the kit but are **accent** colors, not brand).
|
|
8
|
+
|
|
9
|
+
## Colors — Core Palette
|
|
10
|
+
|
|
11
|
+
### Primary · Blue (brand) ✓
|
|
12
|
+
|
|
13
|
+
Brand color. Primary buttons, active indicators, links, focus rings. Never decorative. `color/primary/blue/600` is the one true brand token.
|
|
14
|
+
|
|
15
|
+
```css
|
|
16
|
+
--color-primary-blue-25: #F5F8FF; /* ✓ subtlest bg tint */
|
|
17
|
+
--color-primary-blue-50: #EFF4FF; /* ✓ selected-row bg, Secondary/Tertiary btn bg */
|
|
18
|
+
--color-primary-blue-100: #D1E0FF; /* ✓ focus ring 4px glow, soft hover */
|
|
19
|
+
--color-primary-blue-200: #B2CCFF; /* ✓ disabled primary bg, Secondary btn bg */
|
|
20
|
+
--color-primary-blue-300: #84ADFF; /* ✓ Secondary btn border, dark-mode focus */
|
|
21
|
+
--color-primary-blue-400: #528BFF; /* ✓ lighter accent on dark surface */
|
|
22
|
+
--color-primary-blue-500: #2970FF; /* ✓ dark-mode accent / gradient stop */
|
|
23
|
+
--color-primary-blue-600: #155EEF; /* ✓ PRIMARY BRAND — buttons, active nav, links */
|
|
24
|
+
--color-primary-blue-700: #004EEB; /* ✓ hover / blue text on light bg */
|
|
25
|
+
--color-primary-blue-800: #0040C1; /* ✓ focused border, hover-on-primary */
|
|
26
|
+
--color-primary-blue-900: #00359E; /* ✓ active / pressed */
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Neutral · Gray ✓
|
|
30
|
+
|
|
31
|
+
Primary neutral. HighRise also ships seven optional gray variants (`gray-blue`, `gray-cool`, `gray-modern`, `gray-neutral`, `gray-iron`, `gray-true`, `gray-warm`) — only reach for those when explicitly asked. Default to plain `gray`.
|
|
32
|
+
|
|
33
|
+
```css
|
|
34
|
+
--color-neutral-white: #FFFFFF; /* ✓ page bg (light), text on primary */
|
|
35
|
+
--color-neutral-black: #000000; /* ✓ modal scrim only — never as surface */
|
|
36
|
+
--color-neutral-gray-25: #FCFCFD; /* ✓ subtle page bg / hover-on-white */
|
|
37
|
+
--color-neutral-gray-50: #F9FAFB; /* ✓ sidebar bg, table header, subtle bg */
|
|
38
|
+
--color-neutral-gray-100: #F2F4F7; /* ✓ hover states on neutral surfaces */
|
|
39
|
+
--color-neutral-gray-200: #EAECF0; /* ✓ dividers, disabled neutral bg */
|
|
40
|
+
--color-neutral-gray-300: #D0D5DD; /* ✓ input borders, card borders */
|
|
41
|
+
--color-neutral-gray-400: #98A2B3; /* ✓ placeholder text, icons */
|
|
42
|
+
--color-neutral-gray-500: #667085; /* ✓ body text (secondary), metadata */
|
|
43
|
+
--color-neutral-gray-600: #475467; /* ✓ body text (primary), Neutral btn bg */
|
|
44
|
+
--color-neutral-gray-700: #344054; /* ✓ headings (secondary), Label text */
|
|
45
|
+
--color-neutral-gray-800: #1D2939; /* ✓ headings, emphatic text */
|
|
46
|
+
--color-neutral-gray-900: #101828; /* ✓ page titles, metric numbers, input value */
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Secondary · Error / Destructive ✓
|
|
50
|
+
|
|
51
|
+
```css
|
|
52
|
+
--color-secondary-error-25: #FFFBFA;
|
|
53
|
+
--color-secondary-error-50: #FEF3F2; /* error bg */
|
|
54
|
+
--color-secondary-error-100: #FEE4E2; /* error soft */
|
|
55
|
+
--color-secondary-error-200: #FECDCA;
|
|
56
|
+
--color-secondary-error-300: #FDA29B; /* invalid input border */
|
|
57
|
+
--color-secondary-error-400: #F97066;
|
|
58
|
+
--color-secondary-error-500: #F04438; /* status dot */
|
|
59
|
+
--color-secondary-error-600: #D92D20; /* Destructive base — btns, alerts */
|
|
60
|
+
--color-secondary-error-700: #B42318; /* hover */
|
|
61
|
+
--color-secondary-error-800: #912018;
|
|
62
|
+
--color-secondary-error-900: #7A271A;
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Secondary · Warning ✓
|
|
66
|
+
|
|
67
|
+
```css
|
|
68
|
+
--color-secondary-warning-25: #FFFCF5;
|
|
69
|
+
--color-secondary-warning-50: #FFFAEB;
|
|
70
|
+
--color-secondary-warning-100: #FEF0C7;
|
|
71
|
+
--color-secondary-warning-200: #FEDF89;
|
|
72
|
+
--color-secondary-warning-300: #FEC84B;
|
|
73
|
+
--color-secondary-warning-400: #FDB022;
|
|
74
|
+
--color-secondary-warning-500: #F79009; /* status dot */
|
|
75
|
+
--color-secondary-warning-600: #DC6803; /* Warning base */
|
|
76
|
+
--color-secondary-warning-700: #B54708; /* hover */
|
|
77
|
+
--color-secondary-warning-800: #93370D;
|
|
78
|
+
--color-secondary-warning-900: #7A2E0E;
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Secondary · Success ✓
|
|
82
|
+
|
|
83
|
+
```css
|
|
84
|
+
--color-secondary-success-25: #F6FEF9;
|
|
85
|
+
--color-secondary-success-50: #ECFDF3;
|
|
86
|
+
--color-secondary-success-100: #D1FADF;
|
|
87
|
+
--color-secondary-success-200: #A6F4C5;
|
|
88
|
+
--color-secondary-success-300: #6CE9A6;
|
|
89
|
+
--color-secondary-success-400: #32D583;
|
|
90
|
+
--color-secondary-success-500: #12B76A; /* status dot */
|
|
91
|
+
--color-secondary-success-600: #039855; /* Success base */
|
|
92
|
+
--color-secondary-success-700: #027A48; /* hover */
|
|
93
|
+
--color-secondary-success-800: #05603A;
|
|
94
|
+
--color-secondary-success-900: #054F31;
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Accent library (opt-in) ✓
|
|
98
|
+
|
|
99
|
+
Full 25-900 scales exist for: `moss`, `green-light`, `green`, `teal`, `cyan`, `blue-light`, `blue`, `blue-dark`, `indigo`, `violet`, `purple`, `fuchsia`, `pink`, `rose`, `orange`, `orange-dark`, `yellow`. Use only when an accent chart / category / tag color is explicitly required. Never substitute for brand. Common 600 values:
|
|
100
|
+
|
|
101
|
+
```css
|
|
102
|
+
--color-accent-green-light-600: #4CA30D;
|
|
103
|
+
--color-accent-green-600: #099250;
|
|
104
|
+
--color-accent-teal-600: #0E9384;
|
|
105
|
+
--color-accent-cyan-600: #088AB2;
|
|
106
|
+
--color-accent-blue-light-600: #0086C9;
|
|
107
|
+
--color-accent-blue-600: #1570EF; /* note: distinct from primary-blue-600 */
|
|
108
|
+
--color-accent-indigo-600: #444CE7;
|
|
109
|
+
--color-accent-violet-600: #7839EE;
|
|
110
|
+
--color-accent-purple-600: #6938EF;
|
|
111
|
+
--color-accent-fuchsia-600: #BA24D5;
|
|
112
|
+
--color-accent-pink-600: #DD2590;
|
|
113
|
+
--color-accent-rose-600: #E31B54;
|
|
114
|
+
--color-accent-orange-600: #E04F16;
|
|
115
|
+
--color-accent-yellow-600: #CA8504;
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Semantic Aliases
|
|
119
|
+
|
|
120
|
+
```css
|
|
121
|
+
/* Surfaces */
|
|
122
|
+
--bg-page: var(--color-neutral-white);
|
|
123
|
+
--bg-surface: var(--color-neutral-white);
|
|
124
|
+
--bg-subtle: var(--color-neutral-gray-50); /* sidebar, table header */
|
|
125
|
+
--bg-hover: var(--color-neutral-gray-100); /* row hover */
|
|
126
|
+
--bg-selected: var(--color-primary-blue-50); /* selected row, active nav */
|
|
127
|
+
|
|
128
|
+
/* Borders */
|
|
129
|
+
--border-default: var(--color-neutral-gray-300);
|
|
130
|
+
--border-subtle: var(--color-neutral-gray-200);
|
|
131
|
+
--border-focus: var(--color-primary-blue-800);
|
|
132
|
+
|
|
133
|
+
/* Text */
|
|
134
|
+
--text-primary: var(--color-neutral-gray-900);
|
|
135
|
+
--text-secondary: var(--color-neutral-gray-700); /* labels */
|
|
136
|
+
--text-tertiary: var(--color-neutral-gray-500); /* helper, metadata */
|
|
137
|
+
--text-placeholder: var(--color-neutral-gray-400);
|
|
138
|
+
--text-accent: var(--color-primary-blue-700); /* links */
|
|
139
|
+
--text-on-accent: var(--color-neutral-white);
|
|
140
|
+
|
|
141
|
+
/* Brand */
|
|
142
|
+
--accent-base: var(--color-primary-blue-600);
|
|
143
|
+
--accent-hover: var(--color-primary-blue-700);
|
|
144
|
+
--accent-pressed: var(--color-primary-blue-900);
|
|
145
|
+
--accent-disabled: var(--color-primary-blue-200);
|
|
146
|
+
|
|
147
|
+
/* Status dots (6px circle + gray label — NEVER filled pills) */
|
|
148
|
+
--status-success: var(--color-secondary-success-500);
|
|
149
|
+
--status-warning: var(--color-secondary-warning-500);
|
|
150
|
+
--status-error: var(--color-secondary-error-500);
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Dark Mode ? (not yet exported from Figma)
|
|
154
|
+
|
|
155
|
+
Derived defaults that respect the blue brand and meet WCAG AA:
|
|
156
|
+
|
|
157
|
+
```css
|
|
158
|
+
.dark {
|
|
159
|
+
--bg-page: #0A0A0A;
|
|
160
|
+
--bg-surface: #141414;
|
|
161
|
+
--bg-subtle: #1A1A1A;
|
|
162
|
+
--bg-hover: #1F1F22;
|
|
163
|
+
--bg-selected: rgba(21, 94, 239, 0.14); /* primary-blue-600 @ 14% */
|
|
164
|
+
|
|
165
|
+
--border-default: #2A2A2E;
|
|
166
|
+
--border-subtle: #222226;
|
|
167
|
+
--border-focus: #84ADFF; /* primary-blue-300 */
|
|
168
|
+
|
|
169
|
+
--text-primary: #FAFAFA;
|
|
170
|
+
--text-secondary: #A1A1AA;
|
|
171
|
+
--text-tertiary: #71717A;
|
|
172
|
+
--text-placeholder: #5A5A5F;
|
|
173
|
+
--text-accent: #84ADFF; /* primary-blue-300 */
|
|
174
|
+
--text-on-accent: #FFFFFF;
|
|
175
|
+
|
|
176
|
+
--accent-base: #2970FF; /* primary-blue-500 */
|
|
177
|
+
--accent-hover: #528BFF; /* primary-blue-400 */
|
|
178
|
+
--accent-pressed: #155EEF; /* primary-blue-600 */
|
|
179
|
+
--accent-disabled: #00359E; /* primary-blue-900 */
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Contrast: near-zero shadow opacity on dark; borders do the work.
|
|
184
|
+
|
|
185
|
+
## Gradients ✓
|
|
186
|
+
|
|
187
|
+
HighRise ships gradients only in gray and primary blue. Use sparingly — hero banners, marketing surfaces, empty-state illustrations. **Never** on buttons or form fields.
|
|
188
|
+
|
|
189
|
+
```css
|
|
190
|
+
/* Primary (brand) */
|
|
191
|
+
--gradient-primary-600-500-90: linear-gradient(90deg, #155EEF 0%, #2970FF 100%);
|
|
192
|
+
--gradient-primary-700-600-45: linear-gradient(45deg, #004EEB 0%, #155EEF 100%);
|
|
193
|
+
--gradient-primary-800-600-45: linear-gradient(45deg, #0040C1 0%, #155EEF 100%);
|
|
194
|
+
--gradient-primary-800-600-90: linear-gradient(90deg, #0040C1 0%, #155EEF 100%);
|
|
195
|
+
--gradient-primary-800-700-26: linear-gradient(26.5deg, #0040C1 0%, #004EEB 100%);
|
|
196
|
+
--gradient-primary-900-600-45: linear-gradient(45deg, #00359E 0%, #155EEF 100%);
|
|
197
|
+
|
|
198
|
+
/* Gray (neutral hero / illustration fill) */
|
|
199
|
+
--gradient-gray-600-500-90: linear-gradient(90deg, #475467 0%, #667085 100%);
|
|
200
|
+
--gradient-gray-700-600-45: linear-gradient(45deg, #344054 0%, #475467 100%);
|
|
201
|
+
--gradient-gray-800-600-45: linear-gradient(45deg, #1D2939 0%, #475467 100%);
|
|
202
|
+
--gradient-gray-800-600-90: linear-gradient(90deg, #1D2939 0%, #475467 100%);
|
|
203
|
+
--gradient-gray-800-700-26: linear-gradient(26.5deg, #1D2939 0%, #344054 100%);
|
|
204
|
+
--gradient-gray-900-600-45: linear-gradient(45deg, #101828 0%, #475467 100%);
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Note:** Figma also contains 28 "Mesh gradients" for illustration / marketing surfaces. Treat those as image assets — don't try to recreate in CSS.
|
|
208
|
+
|
|
209
|
+
## Typography — Inter ✓
|
|
210
|
+
|
|
211
|
+
Font family: `Inter, -apple-system, BlinkMacSystemFont, sans-serif`.
|
|
212
|
+
|
|
213
|
+
### Text scale (body, UI) ✓
|
|
214
|
+
|
|
215
|
+
```css
|
|
216
|
+
--font-size-4xs: 8px; --font-line-height-4xs: 12px;
|
|
217
|
+
--font-size-3xs: 9px; --font-line-height-3xs: 14px;
|
|
218
|
+
--font-size-2xs: 10px; --font-line-height-2xs: 15px;
|
|
219
|
+
--font-size-xs: 11px; --font-line-height-xs: 16px; /* Label xs, helper xs */
|
|
220
|
+
--font-size-sm: 12px; --font-line-height-sm: 17px; /* smallest body, chips */
|
|
221
|
+
--font-size-md: 13px; --font-line-height-md: 18px; /* Button label, Input value */
|
|
222
|
+
--font-size-lg: 14px; --font-line-height-lg: 20px; /* Body default, Label md */
|
|
223
|
+
--font-size-xl: 15px; --font-line-height-xl: 20px;
|
|
224
|
+
--font-size-2xl: 16px; --font-line-height-2xl: 24px; /* larger body emphasis */
|
|
225
|
+
--font-size-3xl: 18px; --font-line-height-3xl: 28px; /* section headings */
|
|
226
|
+
--font-size-4xl: 20px; --font-line-height-4xl: 30px; /* card titles */
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Display scale (page titles, hero) ✓
|
|
230
|
+
|
|
231
|
+
| Token | Size × Line | Letter-spacing |
|
|
232
|
+
|---|---|---|
|
|
233
|
+
| `Display xs` | 24 / 32 | 0 |
|
|
234
|
+
| `Display sm` | 30 / 38 | 0 |
|
|
235
|
+
| `Display md` | 36 / 44 | -0.02em |
|
|
236
|
+
| `Display lg` | 48 / 60 | -0.02em |
|
|
237
|
+
| `Display xl` | 60 / 72 | -0.02em |
|
|
238
|
+
| `Display 2xl` | 72 / 90 | -0.02em |
|
|
239
|
+
|
|
240
|
+
Each display size ships in Regular / Medium / Semibold / Bold.
|
|
241
|
+
|
|
242
|
+
### Weights ✓
|
|
243
|
+
|
|
244
|
+
```css
|
|
245
|
+
--font-weight-regular: 400;
|
|
246
|
+
--font-weight-medium: 500; /* Label default */
|
|
247
|
+
--font-weight-semibold: 600; /* Button label, headings */
|
|
248
|
+
--font-weight-bold: 700;
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Letter spacing ✓
|
|
252
|
+
|
|
253
|
+
```css
|
|
254
|
+
--letter-spacing-normal: 0; /* all text scale */
|
|
255
|
+
--letter-spacing-tight: -0.02em; /* display md+ */
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Role mappings ✓
|
|
259
|
+
|
|
260
|
+
```css
|
|
261
|
+
/* Label (form labels, overline) — always Medium weight, uses gray-700 */
|
|
262
|
+
.label-xs { font: 500 11px/16px Inter; color: var(--text-secondary); }
|
|
263
|
+
.label-sm { font: 500 12px/17px Inter; color: var(--text-secondary); }
|
|
264
|
+
.label-md { font: 500 13px/18px Inter; color: var(--text-secondary); }
|
|
265
|
+
.label-lg { font: 500 14px/20px Inter; color: var(--text-secondary); }
|
|
266
|
+
|
|
267
|
+
/* Input value (rendered text in field) — Regular, gray-900 */
|
|
268
|
+
.input-xs { font: 400 11px/16px Inter; color: var(--text-primary); }
|
|
269
|
+
.input-sm { font: 400 12px/17px Inter; color: var(--text-primary); }
|
|
270
|
+
.input-md { font: 400 13px/18px Inter; color: var(--text-primary); }
|
|
271
|
+
.input-lg { font: 400 14px/20px Inter; color: var(--text-primary); }
|
|
272
|
+
|
|
273
|
+
/* Button label — Semibold */
|
|
274
|
+
.text-button-sm { font: 600 12px/17px Inter; }
|
|
275
|
+
.text-button-md { font: 600 13px/18px Inter; }
|
|
276
|
+
.text-button-lg { font: 600 14px/20px Inter; }
|
|
277
|
+
|
|
278
|
+
/* Body copy */
|
|
279
|
+
.text-body-sm { font: 400 12px/17px Inter; color: var(--text-secondary); }
|
|
280
|
+
.text-body-md { font: 400 13px/18px Inter; color: var(--text-secondary); }
|
|
281
|
+
.text-body-lg { font: 400 14px/20px Inter; color: var(--text-secondary); }
|
|
282
|
+
|
|
283
|
+
/* Headings (use Display scale for page titles, Text 3xl/4xl for sections) */
|
|
284
|
+
.text-heading-section { font: 600 18px/28px Inter; color: var(--text-primary); }
|
|
285
|
+
.text-heading-card { font: 600 20px/30px Inter; color: var(--text-primary); }
|
|
286
|
+
.text-heading-page { font: 600 30px/38px Inter; letter-spacing: 0; color: var(--text-primary); }
|
|
287
|
+
.text-display-hero { font: 600 48px/60px Inter; letter-spacing: -0.02em; color: var(--text-primary); }
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
## Spacing ~ (derived from component observations)
|
|
291
|
+
|
|
292
|
+
```css
|
|
293
|
+
--space-0: 0;
|
|
294
|
+
--space-1: 2px;
|
|
295
|
+
--space-2: 4px;
|
|
296
|
+
--space-3: 6px; /* Label → input gap, helper text → icon gap */
|
|
297
|
+
--space-4: 8px; /* button icon gap, helper → helper */
|
|
298
|
+
--space-5: 10px; /* MD button vertical padding */
|
|
299
|
+
--space-6: 12px;
|
|
300
|
+
--space-7: 14px;
|
|
301
|
+
--space-8: 16px; /* MD button horizontal padding, input → helper */
|
|
302
|
+
--space-10: 20px;
|
|
303
|
+
--space-12: 24px; /* card padding, grid gap */
|
|
304
|
+
--space-16: 32px; /* card padding large */
|
|
305
|
+
--space-20: 40px;
|
|
306
|
+
--space-24: 48px; /* section gap */
|
|
307
|
+
--space-32: 64px;
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
Content max-width `1200px` with generous side margins.
|
|
311
|
+
|
|
312
|
+
## Border Radius ✓
|
|
313
|
+
|
|
314
|
+
```css
|
|
315
|
+
--radius-xs: 4px; /* icon-only button */
|
|
316
|
+
--radius-sm: 6px; /* chips, tags */
|
|
317
|
+
--radius-md: 8px; /* MD button, input, select */
|
|
318
|
+
--radius-lg: 12px; /* cards */
|
|
319
|
+
--radius-xl: 16px; /* modals */
|
|
320
|
+
--radius-2xl: 20px;
|
|
321
|
+
--radius-full: 9999px; /* pills, avatars, toggle */
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Shadows ✓
|
|
325
|
+
|
|
326
|
+
```css
|
|
327
|
+
/* Verified from Figma "Shadow/xs" & "Shadow/lg" */
|
|
328
|
+
--shadow-xs: 0 1px 2px 0 rgba(16, 24, 40, 0.05);
|
|
329
|
+
--shadow-lg: 0 4px 6px -2px rgba(16, 24, 40, 0.03), 0 12px 16px -4px rgba(16, 24, 40, 0.08);
|
|
330
|
+
|
|
331
|
+
/* Derived interpolations */
|
|
332
|
+
--shadow-sm: 0 1px 3px 0 rgba(16, 24, 40, 0.10), 0 1px 2px 0 rgba(16, 24, 40, 0.06);
|
|
333
|
+
--shadow-md: 0 4px 8px -2px rgba(16, 24, 40, 0.10), 0 2px 4px -2px rgba(16, 24, 40, 0.06);
|
|
334
|
+
|
|
335
|
+
/* Focus ring — 4px outer glow of primary-blue-100 + xs */
|
|
336
|
+
--focus-ring: 0 0 0 4px var(--color-primary-blue-100), 0 1px 2px 0 rgba(16, 24, 40, 0.05);
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
## Component Anatomy ✓
|
|
340
|
+
|
|
341
|
+
### Button
|
|
342
|
+
- **Variants:** Primary / Secondary / Tertiary / Ghost / Link
|
|
343
|
+
- **Themes:** Primary (blue) / Neutral (gray) / Destructive / Warning / Success
|
|
344
|
+
- **States:** Default / Hover / Focused / Active / Disabled
|
|
345
|
+
- **Sizes (height × radius):** 2XL 60px, XL 48px, LG 44px, MD 40px · `--radius-md`, SM 36px, XS 32px · `--radius-xs` (icon-only), 2XS 28px, 3XS 24px
|
|
346
|
+
- **MD padding:** `10px 16px`, `8px` icon gap
|
|
347
|
+
- **Label:** `.text-button-md` (600 13/18) for Primary/Secondary/Tertiary/Ghost, `.text-button-lg` (600 14/20) for Links
|
|
348
|
+
|
|
349
|
+
### Input Field
|
|
350
|
+
- **Height scale:** 24, 28, 32, 36, 40 (default), 44
|
|
351
|
+
- **Radius:** `--radius-md` (8px), border 1px `--border-default`, `--shadow-xs` at rest
|
|
352
|
+
- **Value:** `.input-md` (400 13/18, gray-900) default · also available xs/sm/lg (`.input-*`)
|
|
353
|
+
- **Placeholder:** `--text-placeholder` (gray-400)
|
|
354
|
+
- **Focus:** border `--border-focus` (primary-blue-800) + `--focus-ring`
|
|
355
|
+
- **Label → Input gap:** `--space-3` (6px)
|
|
356
|
+
- **Input → Helper gap:** `--space-3` (6px)
|
|
357
|
+
- **Helper lines gap:** `--space-2` (4px), icon-to-text `--space-3` (6px)
|
|
358
|
+
|
|
359
|
+
## Visual Restraint Rules (non-negotiable)
|
|
360
|
+
|
|
361
|
+
- **One** brand accent (`--color-primary-blue-600` = `#155EEF`) — no rainbow
|
|
362
|
+
- **Status indicators** = 6px colored dot + gray label, **NEVER** filled pills
|
|
363
|
+
- **Cards** = white surface + 1px `--border-default` + no shadow at rest (hover can add `--shadow-sm`)
|
|
364
|
+
- Near-zero shadow opacity — borders do the work
|
|
365
|
+
- Section gaps ≥ 48px — content breathes
|
|
366
|
+
- **No zebra-striped tables** — hover `--bg-subtle` + single bottom border
|
|
367
|
+
- Sidebar = `--bg-subtle` or white, never dark or colored in light mode
|
|
368
|
+
- Max 3 text sizes per section (title, body, caption)
|
|
369
|
+
- Realistic data — real names, plausible numbers, recent dates; never Lorem Ipsum
|
|
370
|
+
- Gradients reserved for hero / marketing / illustration surfaces — not buttons, not form fields
|
|
371
|
+
|
|
372
|
+
## Responsive Breakpoints (mandatory)
|
|
373
|
+
|
|
374
|
+
| Breakpoint | Width | Layout |
|
|
375
|
+
|---|---|---|
|
|
376
|
+
| Mobile | 320–767px | Single column, sidebar behind hamburger, stacked cards, tables scroll horizontally, touch targets ≥ 44×44 |
|
|
377
|
+
| Tablet | 768–1023px | 2-column grid, collapsed sidebar (64px icons only) |
|
|
378
|
+
| Desktop | 1024–1279px | Full layout, expanded sidebar |
|
|
379
|
+
| Wide | 1280px+ | Content max-width 1200px, centered |
|
|
380
|
+
|
|
381
|
+
Body font ≥ 14px on mobile. Modal full-screen below 640px.
|
|
382
|
+
|
|
383
|
+
## Provenance
|
|
384
|
+
|
|
385
|
+
All values extracted from Figma file `BM196jNmVUfXBYDsyEVv8N` (HighRise), page **1. Tokens**, via Figma MCP `get_variable_defs` / `get_design_context`:
|
|
386
|
+
|
|
387
|
+
- `1525:271581` (Colors) — full primary, neutral, secondary, and accent palettes
|
|
388
|
+
- `1525:272676` (Gradients) — gray + primary gradient stops & angles
|
|
389
|
+
- `1023:36826` (Typography) — full 11-step Text scale + 6-step Display scale + weights + letter-spacing
|
|
390
|
+
- `26951:17805` (Label) — Label Medium-weight variants (xs/sm/md/lg/2xl)
|
|
391
|
+
- `27376:6411` (Input text) — Input Regular-weight variants + placeholder / value colors
|
|
392
|
+
- `28038:45100` (Gap) — label/input/helper spacing reference (6/8/4px pattern)
|
|
393
|
+
|
|
394
|
+
To extend, open the file in Figma and run `get_variable_defs` on the target node. Dark-mode tokens are **not yet published** in this file; update when they land.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Micro-interactions
|
|
2
|
+
|
|
3
|
+
Static-looking designs feel unfinished. Every prototype must include these CSS-only interactions.
|
|
4
|
+
|
|
5
|
+
## Transitions (global)
|
|
6
|
+
|
|
7
|
+
```css
|
|
8
|
+
* { transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease; }
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Buttons
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
:hover → background shifts one shade darker, no shadow change
|
|
15
|
+
:focus-visible → 4px primary-soft ring (#D1E0FF in light, rgba(132,173,255,0.2) in dark)
|
|
16
|
+
:active → transform: scale(0.97)
|
|
17
|
+
transition: all 0.15s ease
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Cards / List rows
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
:hover → background: #f9fafb (or #1a1a1a in dark), 0.2s ease
|
|
24
|
+
cursor: pointer if clickable
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Inputs
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
:focus-visible → border #0040C1 + 4px #D1E0FF ring, 0.15s ease
|
|
31
|
+
:invalid (on blur) → border #f04438 + inline error message fade-in 0.2s
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Sidebar nav
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
:hover → background: #f9fafb, 0.15s
|
|
38
|
+
Active → #EFF4FF background + #155EEF text + 2px left border (slide-in on mount)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Loading choreography
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Skeleton shimmer: @keyframes pulse with background: linear-gradient(-90deg, #f2f4f7 0%, #e5e7eb 50%, #f2f4f7 100%), 1.5s infinite
|
|
45
|
+
Skeleton-to-content crossfade: 0.3s ease when data arrives
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Toast notifications
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
Slide in from top-right: translateX(100%) → 0, 0.25s ease-out
|
|
52
|
+
Auto-dismiss: fade out 0.2s after 4s
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Modal
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
Backdrop: opacity 0 → 0.4, 0.2s ease
|
|
59
|
+
Dialog: translateY(8px) scale(0.98) opacity 0 → translateY(0) scale(1) opacity 1, 0.2s ease-out
|
|
60
|
+
Close: reverse in 0.15s
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Page entrance (light touch)
|
|
64
|
+
|
|
65
|
+
Stagger reveal of top-level sections: each gets `animation: fadeUp 0.3s ease-out backwards` with `animation-delay: calc(var(--i) * 50ms)`. Max 5 staggered items.
|
|
66
|
+
|
|
67
|
+
## Accessibility fallback (mandatory)
|
|
68
|
+
|
|
69
|
+
```css
|
|
70
|
+
@media (prefers-reduced-motion: reduce) {
|
|
71
|
+
*, *::before, *::after {
|
|
72
|
+
animation-duration: 0.01ms !important;
|
|
73
|
+
transition-duration: 0.01ms !important;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Screen Prompt Template
|
|
2
|
+
|
|
3
|
+
Use this template verbatim for every screen, filling in the bracketed parts. Whether you send it to Stitch or implement it directly as HTML, the template is the same.
|
|
4
|
+
|
|
5
|
+
## Base template
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Design a [SCREEN TYPE] for a SaaS [PRODUCT TYPE] application.
|
|
9
|
+
|
|
10
|
+
AESTHETIC: Clean, minimal, premium. Think Linear.app or Vercel dashboard.
|
|
11
|
+
Generous whitespace. Let content breathe. Almost flat design.
|
|
12
|
+
NO colored backgrounds on cards. NO heavy shadows. NO gradient fills.
|
|
13
|
+
Monochrome-first — only use the accent color for primary CTAs and active states.
|
|
14
|
+
|
|
15
|
+
COLORS (Highrise tokens):
|
|
16
|
+
- Page background: #ffffff
|
|
17
|
+
- Content cards: #ffffff with 1px border rgba(0,0,0,0.06)
|
|
18
|
+
- Primary accent: #155EEF (HighRise brand blue — ONLY for primary buttons and active indicators)
|
|
19
|
+
- Primary hover: #004EEB, pressed: #00359E, disabled bg: #B2CCFF, soft: #EFF4FF (selected rows, active nav bg)
|
|
20
|
+
- Heading text: #101828
|
|
21
|
+
- Body text: #344054
|
|
22
|
+
- Secondary/muted text: #667085
|
|
23
|
+
- Subtle backgrounds: #f9fafb (hover states, sidebar, table headers)
|
|
24
|
+
- Dividers: #eaecf0 (use sparingly — prefer spacing over lines)
|
|
25
|
+
- Status indicators: tiny 6px dots only (green #12B76A, amber #F79009, red #F04438)
|
|
26
|
+
paired with gray text labels. NEVER use colored pills or colored backgrounds.
|
|
27
|
+
|
|
28
|
+
TYPOGRAPHY: Inter font family. Use HighRise's verified scale — every line-height is fixed.
|
|
29
|
+
- Page title (Display sm): 30px / line-height 38px, semibold, letter-spacing 0
|
|
30
|
+
- Hero / large display (Display md): 36px / 44px, semibold, letter-spacing -0.02em
|
|
31
|
+
- Section headings: 18px / 28px or 20px / 30px, semibold
|
|
32
|
+
- Body default (Text lg): 14px / 20px, regular, color #475467
|
|
33
|
+
- Button label (Text md): 13px / 18px, semibold 600
|
|
34
|
+
- Captions / metadata (Text sm): 12px / 17px, medium 500, color #667085
|
|
35
|
+
- Helper / micro (Text xs): 11px / 16px, medium 500, color #667085
|
|
36
|
+
- Metric numbers (Display sm / md): 30px / 38px or 36px / 44px, semibold, color #101828
|
|
37
|
+
|
|
38
|
+
SPACING:
|
|
39
|
+
- Section gaps: 48px
|
|
40
|
+
- Card padding: 24-32px
|
|
41
|
+
- Card grid gap: 24px
|
|
42
|
+
- Content max-width: 1200px with generous side margins
|
|
43
|
+
|
|
44
|
+
COMPONENTS:
|
|
45
|
+
- Cards: 12px radius, 1px border (no shadow at rest), 24-32px padding
|
|
46
|
+
- Buttons: 8px radius, 36-40px height, only primary gets color fill, scale(0.97) on active
|
|
47
|
+
- Secondary buttons: ghost/outline style with gray border
|
|
48
|
+
- Tables: clean rows, no zebra stripes, #f9fafb hover, 1px bottom border only
|
|
49
|
+
- Metric cards: large number prominently, small gray label below, NO icon circles
|
|
50
|
+
- Inputs: 8px radius, 1px #D0D5DD border, 40px height, 4px #D1E0FF focus ring + border #0040C1 on focus
|
|
51
|
+
|
|
52
|
+
MICRO-INTERACTIONS (include CSS for all):
|
|
53
|
+
- All interactive elements: transition 0.15s ease on bg, border, color, transform
|
|
54
|
+
- Button hover: shade darker, focus-visible 4px primary ring, active scale(0.97)
|
|
55
|
+
- Card/row hover: background #f9fafb 0.2s ease
|
|
56
|
+
- Input focus: #0040C1 border + 4px #D1E0FF ring
|
|
57
|
+
- Sidebar active: 2px left border slide-in
|
|
58
|
+
- @media (prefers-reduced-motion: reduce) fallback to disable animations
|
|
59
|
+
|
|
60
|
+
DARK MODE (mandatory): Toggle via .dark class on <html>. Use CSS custom properties.
|
|
61
|
+
- Page bg: #0A0A0A, cards #141414, subtle bg #1A1A1A, borders #2A2A2E
|
|
62
|
+
- Heading #FAFAFA, body #A1A1AA, secondary #71717A
|
|
63
|
+
- Accent #2970FF (blue-500 lighter for dark contrast), hover #528BFF, pressed #155EEF
|
|
64
|
+
- Focused border: #84ADFF, focus ring 4px rgba(132,173,255,0.2), near-zero shadow opacity
|
|
65
|
+
|
|
66
|
+
RESPONSIVE (mandatory): The HTML must include working CSS media queries for all four breakpoints. Test by resizing — content must reflow, not just scale.
|
|
67
|
+
|
|
68
|
+
- Mobile (max-width: 767px):
|
|
69
|
+
* Sidebar: hidden, replaced by a hamburger icon in the header that opens a full-height drawer
|
|
70
|
+
* Header: 56px tall, compact spacing
|
|
71
|
+
* Main grid: single column, cards stacked vertically with 16px gap
|
|
72
|
+
* Tables: wrap in overflow-x: auto so they scroll horizontally; OR collapse to card-per-row layout for primary tables
|
|
73
|
+
* Metric cards: 2-per-row (or 1-per-row if there are <=3)
|
|
74
|
+
* Modals: full-screen (100vw, 100vh, no rounded corners, no backdrop)
|
|
75
|
+
* Touch targets: minimum 44x44px
|
|
76
|
+
* Body text: minimum 14px
|
|
77
|
+
* Side padding: 16px
|
|
78
|
+
|
|
79
|
+
- Tablet (min-width: 768px and max-width: 1023px):
|
|
80
|
+
* Sidebar: collapsed to 64px icon rail (tooltips on hover show labels)
|
|
81
|
+
* Main grid: 2 columns
|
|
82
|
+
* Metric cards: 2-per-row
|
|
83
|
+
* Modals: centered but max-width 90vw
|
|
84
|
+
* Side padding: 24px
|
|
85
|
+
|
|
86
|
+
- Desktop (min-width: 1024px and max-width: 1279px):
|
|
87
|
+
* Sidebar: full 240px, expanded with labels
|
|
88
|
+
* Main grid: 3 columns (or whatever the design calls for)
|
|
89
|
+
* Metric cards: 3-4 per row
|
|
90
|
+
* Modals: max-width 560px, centered
|
|
91
|
+
* Side padding: 32px
|
|
92
|
+
|
|
93
|
+
- Wide (min-width: 1280px):
|
|
94
|
+
* Content wrapper capped at max-width 1200px, centered with auto margins
|
|
95
|
+
* Side padding: 48px
|
|
96
|
+
|
|
97
|
+
Use a mobile-first approach with min-width media queries. Do NOT use JavaScript for layout changes — pure CSS only.
|
|
98
|
+
|
|
99
|
+
LAYOUT: [describe specific layout — sidebar width, header height, content areas, grid]
|
|
100
|
+
|
|
101
|
+
DATA: Use realistic placeholder data (real names, plausible numbers, recent dates).
|
|
102
|
+
|
|
103
|
+
NAVIGATION: This screen is part of a linked prototype. Include a left sidebar with navigation links.
|
|
104
|
+
Each nav item must be an <a> tag with href pointing to sibling pages using relative paths.
|
|
105
|
+
Sidebar nav items:
|
|
106
|
+
[list nav items with relative href paths like ../dashboard/default.html]
|
|
107
|
+
[current page] should have active state: #EFF4FF background, #155EEF text, 2px left border.
|
|
108
|
+
Theme toggle button in top-right that flips .dark class and persists to localStorage.
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Layout hints by screen type
|
|
112
|
+
|
|
113
|
+
**Dashboard:** Left sidebar 240px (#f9fafb), 64px header (white), metric cards row, then charts/tables.
|
|
114
|
+
|
|
115
|
+
**List view:** Search bar + filter chips, action bar with bulk actions/sort/view toggle, data table, pagination.
|
|
116
|
+
|
|
117
|
+
**Detail view:** Breadcrumb, header with name + status dot + actions, tab bar or side panels, activity timeline.
|
|
118
|
+
|
|
119
|
+
**Form / Settings:** Section headers with descriptions, form groups with labels + inputs + help text, sticky save/cancel.
|
|
120
|
+
|
|
121
|
+
**Modal:** Semi-transparent backdrop rgba(0,0,0,0.4), centered white card 16px radius 32px padding max-width 560px, header + body + footer with cancel/confirm.
|
|
122
|
+
|
|
123
|
+
## State variant prompt additions
|
|
124
|
+
|
|
125
|
+
Append one of these to the base template to generate a state variant:
|
|
126
|
+
|
|
127
|
+
### Loading
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
Show LOADING state: replace text with skeleton shimmer rectangles (#f2f4f7, animated pulse).
|
|
131
|
+
@keyframes pulse { 0%,100% { opacity: 1 } 50% { opacity: 0.5 } }. 1.5s infinite.
|
|
132
|
+
Replace images with gray rectangles. Keep sidebar and header fully rendered.
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Empty
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
Show EMPTY state (zero data): centered illustration placeholder (gray circle with icon),
|
|
139
|
+
heading "No [items] yet" 18px semibold #101828, description 14px #667085,
|
|
140
|
+
primary CTA "Create your first [item]" #155EEF with hover (#004EEB) and active (#00359E) states.
|
|
141
|
+
Keep sidebar and header rendered.
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Error
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
Show ERROR state: form inputs with red border #f04438 and error text 12px below (fade-in 0.2s),
|
|
148
|
+
toast notification top-right (white card, red left border, slide-in from right 0.25s, dismiss X).
|
|
149
|
+
Keep sidebar and header rendered.
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Modal
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
Show MODAL OVERLAY: backdrop rgba(0,0,0,0.4) fade-in 0.2s,
|
|
156
|
+
centered white modal 16px radius 32px padding max-width 560px,
|
|
157
|
+
dialog entrance: translateY(8px) scale(0.98) opacity 0 → translateY(0) scale(1) opacity 1, 0.2s ease-out,
|
|
158
|
+
title + close X, [form/content], cancel ghost + confirm primary button.
|
|
159
|
+
Background page visible but dimmed.
|
|
160
|
+
```
|