aw-ecc 1.4.32 → 1.4.47

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.
Files changed (258) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex/hooks/aw-post-tool-use.sh +8 -2
  3. package/.codex/hooks/aw-session-start.sh +11 -4
  4. package/.codex/hooks/aw-stop.sh +8 -2
  5. package/.codex/hooks/aw-user-prompt-submit.sh +10 -2
  6. package/.codex/hooks.json +8 -8
  7. package/.cursor/INSTALL.md +7 -5
  8. package/.cursor/hooks/adapter.js +41 -4
  9. package/.cursor/hooks/after-agent-response.js +62 -0
  10. package/.cursor/hooks/before-submit-prompt.js +7 -1
  11. package/.cursor/hooks/post-tool-use-failure.js +21 -0
  12. package/.cursor/hooks/post-tool-use.js +39 -0
  13. package/.cursor/hooks/shared/aw-phase-definitions.js +53 -0
  14. package/.cursor/hooks/shared/aw-phase-runner.js +3 -1
  15. package/.cursor/hooks/subagent-start.js +22 -4
  16. package/.cursor/hooks/subagent-stop.js +18 -1
  17. package/.cursor/hooks.json +23 -2
  18. package/.opencode/package.json +1 -1
  19. package/AGENTS.md +3 -3
  20. package/README.md +5 -5
  21. package/commands/adk.md +52 -0
  22. package/commands/build.md +22 -9
  23. package/commands/deploy.md +12 -0
  24. package/commands/execute.md +9 -0
  25. package/commands/feature.md +333 -0
  26. package/commands/investigate.md +18 -5
  27. package/commands/plan.md +23 -9
  28. package/commands/publish.md +65 -0
  29. package/commands/review.md +12 -0
  30. package/commands/ship.md +12 -0
  31. package/commands/test.md +12 -0
  32. package/commands/verify.md +9 -0
  33. package/hooks/hooks.json +36 -0
  34. package/manifests/install-components.json +8 -0
  35. package/manifests/install-modules.json +83 -0
  36. package/manifests/install-profiles.json +7 -0
  37. package/package.json +1 -1
  38. package/scripts/ci/validate-rules.js +51 -0
  39. package/scripts/cursor-aw-home/hooks.json +23 -2
  40. package/scripts/cursor-aw-hooks/adapter.js +41 -4
  41. package/scripts/cursor-aw-hooks/before-submit-prompt.js +7 -1
  42. package/scripts/hooks/aw-usage-commit-created.js +32 -0
  43. package/scripts/hooks/aw-usage-post-tool-use-failure.js +56 -0
  44. package/scripts/hooks/aw-usage-post-tool-use.js +242 -0
  45. package/scripts/hooks/aw-usage-prompt-submit.js +112 -0
  46. package/scripts/hooks/aw-usage-session-start.js +48 -0
  47. package/scripts/hooks/aw-usage-stop.js +182 -0
  48. package/scripts/hooks/aw-usage-telemetry-send.js +84 -0
  49. package/scripts/hooks/cost-tracker.js +3 -23
  50. package/scripts/hooks/shared/aw-phase-definitions.js +53 -0
  51. package/scripts/hooks/shared/aw-phase-runner.js +3 -1
  52. package/scripts/lib/aw-hook-contract.js +2 -2
  53. package/scripts/lib/aw-pricing.js +306 -0
  54. package/scripts/lib/aw-usage-telemetry.js +472 -0
  55. package/scripts/lib/codex-hook-config.js +8 -8
  56. package/scripts/lib/cursor-hook-config.js +25 -10
  57. package/scripts/lib/install-targets/cursor-project.js +3 -0
  58. package/scripts/lib/install-targets/helpers.js +20 -3
  59. package/skills/aw-adk/SKILL.md +317 -0
  60. package/skills/aw-adk/agents/analyzer.md +113 -0
  61. package/skills/aw-adk/agents/comparator.md +113 -0
  62. package/skills/aw-adk/agents/grader.md +115 -0
  63. package/skills/aw-adk/assets/eval_review.html +76 -0
  64. package/skills/aw-adk/eval-viewer/generate_review.py +164 -0
  65. package/skills/aw-adk/eval-viewer/viewer.html +181 -0
  66. package/skills/aw-adk/evals/eval-colocated-placement.md +84 -0
  67. package/skills/aw-adk/evals/eval-create-agent.md +90 -0
  68. package/skills/aw-adk/evals/eval-create-command.md +98 -0
  69. package/skills/aw-adk/evals/eval-create-eval.md +89 -0
  70. package/skills/aw-adk/evals/eval-create-rule.md +99 -0
  71. package/skills/aw-adk/evals/eval-create-skill.md +97 -0
  72. package/skills/aw-adk/evals/eval-delete-agent.md +79 -0
  73. package/skills/aw-adk/evals/eval-delete-command.md +89 -0
  74. package/skills/aw-adk/evals/eval-delete-rule.md +86 -0
  75. package/skills/aw-adk/evals/eval-delete-skill.md +90 -0
  76. package/skills/aw-adk/evals/eval-meta-eval-coverage.md +78 -0
  77. package/skills/aw-adk/evals/eval-meta-eval-determinism.md +81 -0
  78. package/skills/aw-adk/evals/eval-meta-eval-false-pass.md +81 -0
  79. package/skills/aw-adk/evals/eval-score-accuracy.md +95 -0
  80. package/skills/aw-adk/evals/eval-type-redirect.md +68 -0
  81. package/skills/aw-adk/evals/evals.json +96 -0
  82. package/skills/aw-adk/references/artifact-wiring.md +162 -0
  83. package/skills/aw-adk/references/cross-ide-mapping.md +71 -0
  84. package/skills/aw-adk/references/eval-placement-guide.md +183 -0
  85. package/skills/aw-adk/references/external-resources.md +75 -0
  86. package/skills/aw-adk/references/getting-started.md +66 -0
  87. package/skills/aw-adk/references/registry-structure.md +152 -0
  88. package/skills/aw-adk/references/rubric-agent.md +36 -0
  89. package/skills/aw-adk/references/rubric-command.md +36 -0
  90. package/skills/aw-adk/references/rubric-eval.md +36 -0
  91. package/skills/aw-adk/references/rubric-meta-eval.md +132 -0
  92. package/skills/aw-adk/references/rubric-rule.md +36 -0
  93. package/skills/aw-adk/references/rubric-skill.md +36 -0
  94. package/skills/aw-adk/references/schemas.md +222 -0
  95. package/skills/aw-adk/references/template-agent.md +251 -0
  96. package/skills/aw-adk/references/template-command.md +279 -0
  97. package/skills/aw-adk/references/template-eval.md +176 -0
  98. package/skills/aw-adk/references/template-rule.md +119 -0
  99. package/skills/aw-adk/references/template-skill.md +123 -0
  100. package/skills/aw-adk/references/type-classifier.md +98 -0
  101. package/skills/aw-adk/references/writing-good-agents.md +227 -0
  102. package/skills/aw-adk/references/writing-good-commands.md +258 -0
  103. package/skills/aw-adk/references/writing-good-evals.md +271 -0
  104. package/skills/aw-adk/references/writing-good-rules.md +214 -0
  105. package/skills/aw-adk/references/writing-good-skills.md +159 -0
  106. package/skills/aw-adk/scripts/aggregate-benchmark.py +190 -0
  107. package/skills/aw-adk/scripts/lint-artifact.sh +211 -0
  108. package/skills/aw-adk/scripts/score-artifact.sh +179 -0
  109. package/skills/aw-adk/scripts/trigger-eval.py +192 -0
  110. package/skills/aw-build/SKILL.md +19 -2
  111. package/skills/aw-deploy/SKILL.md +65 -3
  112. package/skills/aw-design/SKILL.md +156 -0
  113. package/skills/aw-design/references/highrise-tokens.md +394 -0
  114. package/skills/aw-design/references/micro-interactions.md +76 -0
  115. package/skills/aw-design/references/prompt-template.md +160 -0
  116. package/skills/aw-design/references/quality-checklist.md +70 -0
  117. package/skills/aw-design/references/self-review.md +497 -0
  118. package/skills/aw-design/references/stitch-workflow.md +127 -0
  119. package/skills/aw-feature/SKILL.md +293 -0
  120. package/skills/aw-investigate/SKILL.md +17 -0
  121. package/skills/aw-plan/SKILL.md +34 -3
  122. package/skills/aw-publish/SKILL.md +300 -0
  123. package/skills/aw-publish/evals/eval-confirmation-gate.md +60 -0
  124. package/skills/aw-publish/evals/eval-intent-detection.md +111 -0
  125. package/skills/aw-publish/evals/eval-push-modes.md +67 -0
  126. package/skills/aw-publish/evals/eval-rules-push.md +60 -0
  127. package/skills/aw-publish/evals/evals.json +29 -0
  128. package/skills/aw-publish/references/push-modes.md +38 -0
  129. package/skills/aw-review/SKILL.md +88 -9
  130. package/skills/aw-rules-review/SKILL.md +124 -0
  131. package/skills/aw-rules-review/agents/openai.yaml +3 -0
  132. package/skills/aw-rules-review/scripts/generate-review-template.mjs +323 -0
  133. package/skills/aw-ship/SKILL.md +16 -0
  134. package/skills/aw-spec/SKILL.md +15 -0
  135. package/skills/aw-tasks/SKILL.md +15 -0
  136. package/skills/aw-test/SKILL.md +16 -0
  137. package/skills/aw-yolo/SKILL.md +4 -0
  138. package/skills/diagnose/SKILL.md +121 -0
  139. package/skills/diagnose/scripts/hitl-loop.template.sh +41 -0
  140. package/skills/finish-only-when-green/SKILL.md +265 -0
  141. package/skills/grill-me/SKILL.md +24 -0
  142. package/skills/grill-with-docs/SKILL.md +92 -0
  143. package/skills/grill-with-docs/adr-format.md +47 -0
  144. package/skills/grill-with-docs/context-format.md +67 -0
  145. package/skills/improve-codebase-architecture/SKILL.md +75 -0
  146. package/skills/improve-codebase-architecture/deepening.md +37 -0
  147. package/skills/improve-codebase-architecture/interface-design.md +44 -0
  148. package/skills/improve-codebase-architecture/language.md +53 -0
  149. package/skills/local-ghl-setup-from-screenshot/SKILL.md +538 -0
  150. package/skills/tdd/SKILL.md +115 -0
  151. package/skills/tdd/deep-modules.md +33 -0
  152. package/skills/tdd/interface-design.md +31 -0
  153. package/skills/tdd/mocking.md +59 -0
  154. package/skills/tdd/refactoring.md +10 -0
  155. package/skills/tdd/tests.md +61 -0
  156. package/skills/to-issues/SKILL.md +62 -0
  157. package/skills/to-prd/SKILL.md +75 -0
  158. package/skills/using-aw-skills/SKILL.md +170 -237
  159. package/skills/using-aw-skills/hooks/session-start.sh +11 -41
  160. package/skills/zoom-out/SKILL.md +24 -0
  161. package/.cursor/rules/common-agents.md +0 -53
  162. package/.cursor/rules/common-aw-routing.md +0 -43
  163. package/.cursor/rules/common-coding-style.md +0 -52
  164. package/.cursor/rules/common-development-workflow.md +0 -33
  165. package/.cursor/rules/common-git-workflow.md +0 -28
  166. package/.cursor/rules/common-hooks.md +0 -34
  167. package/.cursor/rules/common-patterns.md +0 -35
  168. package/.cursor/rules/common-performance.md +0 -59
  169. package/.cursor/rules/common-security.md +0 -33
  170. package/.cursor/rules/common-testing.md +0 -33
  171. package/.cursor/skills/api-and-interface-design/SKILL.md +0 -75
  172. package/.cursor/skills/article-writing/SKILL.md +0 -85
  173. package/.cursor/skills/aw-brainstorm/SKILL.md +0 -115
  174. package/.cursor/skills/aw-build/SKILL.md +0 -152
  175. package/.cursor/skills/aw-build/evals/build-stage-cases.json +0 -28
  176. package/.cursor/skills/aw-debug/SKILL.md +0 -49
  177. package/.cursor/skills/aw-deploy/SKILL.md +0 -101
  178. package/.cursor/skills/aw-deploy/evals/deploy-stage-cases.json +0 -32
  179. package/.cursor/skills/aw-execute/SKILL.md +0 -47
  180. package/.cursor/skills/aw-execute/references/mode-code.md +0 -47
  181. package/.cursor/skills/aw-execute/references/mode-docs.md +0 -28
  182. package/.cursor/skills/aw-execute/references/mode-infra.md +0 -44
  183. package/.cursor/skills/aw-execute/references/mode-migration.md +0 -58
  184. package/.cursor/skills/aw-execute/references/worker-implementer.md +0 -26
  185. package/.cursor/skills/aw-execute/references/worker-parallel-worker.md +0 -23
  186. package/.cursor/skills/aw-execute/references/worker-quality-reviewer.md +0 -23
  187. package/.cursor/skills/aw-execute/references/worker-spec-reviewer.md +0 -23
  188. package/.cursor/skills/aw-execute/scripts/build-worker-bundle.js +0 -229
  189. package/.cursor/skills/aw-finish/SKILL.md +0 -111
  190. package/.cursor/skills/aw-investigate/SKILL.md +0 -109
  191. package/.cursor/skills/aw-plan/SKILL.md +0 -368
  192. package/.cursor/skills/aw-prepare/SKILL.md +0 -118
  193. package/.cursor/skills/aw-review/SKILL.md +0 -118
  194. package/.cursor/skills/aw-ship/SKILL.md +0 -115
  195. package/.cursor/skills/aw-spec/SKILL.md +0 -104
  196. package/.cursor/skills/aw-tasks/SKILL.md +0 -138
  197. package/.cursor/skills/aw-test/SKILL.md +0 -118
  198. package/.cursor/skills/aw-verify/SKILL.md +0 -51
  199. package/.cursor/skills/aw-yolo/SKILL.md +0 -111
  200. package/.cursor/skills/browser-testing-with-devtools/SKILL.md +0 -81
  201. package/.cursor/skills/bun-runtime/SKILL.md +0 -84
  202. package/.cursor/skills/ci-cd-and-automation/SKILL.md +0 -71
  203. package/.cursor/skills/code-simplification/SKILL.md +0 -74
  204. package/.cursor/skills/content-engine/SKILL.md +0 -88
  205. package/.cursor/skills/context-engineering/SKILL.md +0 -74
  206. package/.cursor/skills/deprecation-and-migration/SKILL.md +0 -75
  207. package/.cursor/skills/documentation-and-adrs/SKILL.md +0 -75
  208. package/.cursor/skills/documentation-lookup/SKILL.md +0 -90
  209. package/.cursor/skills/frontend-slides/SKILL.md +0 -184
  210. package/.cursor/skills/frontend-slides/STYLE_PRESETS.md +0 -330
  211. package/.cursor/skills/frontend-ui-engineering/SKILL.md +0 -68
  212. package/.cursor/skills/git-workflow-and-versioning/SKILL.md +0 -75
  213. package/.cursor/skills/idea-refine/SKILL.md +0 -84
  214. package/.cursor/skills/incremental-implementation/SKILL.md +0 -75
  215. package/.cursor/skills/investor-materials/SKILL.md +0 -96
  216. package/.cursor/skills/investor-outreach/SKILL.md +0 -76
  217. package/.cursor/skills/market-research/SKILL.md +0 -75
  218. package/.cursor/skills/mcp-server-patterns/SKILL.md +0 -67
  219. package/.cursor/skills/nextjs-turbopack/SKILL.md +0 -44
  220. package/.cursor/skills/performance-optimization/SKILL.md +0 -77
  221. package/.cursor/skills/security-and-hardening/SKILL.md +0 -70
  222. package/.cursor/skills/using-aw-skills/SKILL.md +0 -290
  223. package/.cursor/skills/using-aw-skills/evals/skill-trigger-cases.tsv +0 -25
  224. package/.cursor/skills/using-aw-skills/evals/test-skill-triggers.sh +0 -171
  225. package/.cursor/skills/using-aw-skills/hooks/hooks.json +0 -9
  226. package/.cursor/skills/using-aw-skills/hooks/session-start.sh +0 -67
  227. package/.cursor/skills/using-platform-skills/SKILL.md +0 -163
  228. package/.cursor/skills/using-platform-skills/evals/platform-selection-cases.json +0 -52
  229. /package/.cursor/rules/{golang-coding-style.md → golang-coding-style.mdc} +0 -0
  230. /package/.cursor/rules/{golang-hooks.md → golang-hooks.mdc} +0 -0
  231. /package/.cursor/rules/{golang-patterns.md → golang-patterns.mdc} +0 -0
  232. /package/.cursor/rules/{golang-security.md → golang-security.mdc} +0 -0
  233. /package/.cursor/rules/{golang-testing.md → golang-testing.mdc} +0 -0
  234. /package/.cursor/rules/{kotlin-coding-style.md → kotlin-coding-style.mdc} +0 -0
  235. /package/.cursor/rules/{kotlin-hooks.md → kotlin-hooks.mdc} +0 -0
  236. /package/.cursor/rules/{kotlin-patterns.md → kotlin-patterns.mdc} +0 -0
  237. /package/.cursor/rules/{kotlin-security.md → kotlin-security.mdc} +0 -0
  238. /package/.cursor/rules/{kotlin-testing.md → kotlin-testing.mdc} +0 -0
  239. /package/.cursor/rules/{php-coding-style.md → php-coding-style.mdc} +0 -0
  240. /package/.cursor/rules/{php-hooks.md → php-hooks.mdc} +0 -0
  241. /package/.cursor/rules/{php-patterns.md → php-patterns.mdc} +0 -0
  242. /package/.cursor/rules/{php-security.md → php-security.mdc} +0 -0
  243. /package/.cursor/rules/{php-testing.md → php-testing.mdc} +0 -0
  244. /package/.cursor/rules/{python-coding-style.md → python-coding-style.mdc} +0 -0
  245. /package/.cursor/rules/{python-hooks.md → python-hooks.mdc} +0 -0
  246. /package/.cursor/rules/{python-patterns.md → python-patterns.mdc} +0 -0
  247. /package/.cursor/rules/{python-security.md → python-security.mdc} +0 -0
  248. /package/.cursor/rules/{python-testing.md → python-testing.mdc} +0 -0
  249. /package/.cursor/rules/{swift-coding-style.md → swift-coding-style.mdc} +0 -0
  250. /package/.cursor/rules/{swift-hooks.md → swift-hooks.mdc} +0 -0
  251. /package/.cursor/rules/{swift-patterns.md → swift-patterns.mdc} +0 -0
  252. /package/.cursor/rules/{swift-security.md → swift-security.mdc} +0 -0
  253. /package/.cursor/rules/{swift-testing.md → swift-testing.mdc} +0 -0
  254. /package/.cursor/rules/{typescript-coding-style.md → typescript-coding-style.mdc} +0 -0
  255. /package/.cursor/rules/{typescript-hooks.md → typescript-hooks.mdc} +0 -0
  256. /package/.cursor/rules/{typescript-patterns.md → typescript-patterns.mdc} +0 -0
  257. /package/.cursor/rules/{typescript-security.md → typescript-security.mdc} +0 -0
  258. /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
+ ```