@1agh/maude 0.15.0

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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -0
  3. package/cli/bin/maude.exe +15 -0
  4. package/cli/bin/maude.mjs +45 -0
  5. package/cli/bin/mdcc.exe +10 -0
  6. package/cli/bin/mdcc.mjs +7 -0
  7. package/cli/cli-wrapper.cjs +67 -0
  8. package/cli/commands/config.mjs +94 -0
  9. package/cli/commands/design.mjs +386 -0
  10. package/cli/commands/help.mjs +57 -0
  11. package/cli/commands/init.mjs +178 -0
  12. package/cli/commands/version.mjs +7 -0
  13. package/cli/install.cjs +113 -0
  14. package/cli/lib/argv.mjs +37 -0
  15. package/cli/lib/argv.test.mjs +46 -0
  16. package/cli/lib/copy-tree.mjs +78 -0
  17. package/package.json +94 -0
  18. package/plugins/design/dev-server/annotations-context-toolbar.tsx +397 -0
  19. package/plugins/design/dev-server/annotations-layer.tsx +1717 -0
  20. package/plugins/design/dev-server/api.ts +674 -0
  21. package/plugins/design/dev-server/bin/_screenshot-playwright.mjs +50 -0
  22. package/plugins/design/dev-server/bin/bootstrap-check.sh +83 -0
  23. package/plugins/design/dev-server/bin/canvas-edit.sh +48 -0
  24. package/plugins/design/dev-server/bin/handoff.sh +27 -0
  25. package/plugins/design/dev-server/bin/screenshot.sh +232 -0
  26. package/plugins/design/dev-server/bin/server-up.sh +135 -0
  27. package/plugins/design/dev-server/bin/slug.sh +22 -0
  28. package/plugins/design/dev-server/bin/smoke.sh +272 -0
  29. package/plugins/design/dev-server/build.ts +267 -0
  30. package/plugins/design/dev-server/canvas-build.ts +219 -0
  31. package/plugins/design/dev-server/canvas-edit.ts +388 -0
  32. package/plugins/design/dev-server/canvas-header.ts +165 -0
  33. package/plugins/design/dev-server/canvas-icons.tsx +131 -0
  34. package/plugins/design/dev-server/canvas-lib-inline.ts +260 -0
  35. package/plugins/design/dev-server/canvas-lib-resolver.ts +85 -0
  36. package/plugins/design/dev-server/canvas-lib.tsx +1995 -0
  37. package/plugins/design/dev-server/canvas-meta.schema.json +181 -0
  38. package/plugins/design/dev-server/canvas-pipeline.ts +270 -0
  39. package/plugins/design/dev-server/canvas-shell.tsx +813 -0
  40. package/plugins/design/dev-server/client/app.jsx +2027 -0
  41. package/plugins/design/dev-server/client/hmr.mjs +85 -0
  42. package/plugins/design/dev-server/client/iframe-lazy.mjs +121 -0
  43. package/plugins/design/dev-server/client/index.html +15 -0
  44. package/plugins/design/dev-server/client/styles/0-reset.css +18 -0
  45. package/plugins/design/dev-server/client/styles/1-tokens.css +297 -0
  46. package/plugins/design/dev-server/client/styles/2-layout.css +35 -0
  47. package/plugins/design/dev-server/client/styles/3-shell.css +906 -0
  48. package/plugins/design/dev-server/client/styles/4-components.css +1268 -0
  49. package/plugins/design/dev-server/client/styles/5-utilities.css +4 -0
  50. package/plugins/design/dev-server/client/styles/_index.css +24 -0
  51. package/plugins/design/dev-server/client/styles.css +1419 -0
  52. package/plugins/design/dev-server/config.schema.json +147 -0
  53. package/plugins/design/dev-server/context-menu.tsx +343 -0
  54. package/plugins/design/dev-server/context.ts +173 -0
  55. package/plugins/design/dev-server/dist/client.bundle.js +20323 -0
  56. package/plugins/design/dev-server/dist/styles.css +2875 -0
  57. package/plugins/design/dev-server/examples/README.md +9 -0
  58. package/plugins/design/dev-server/examples/perf-100-artboards.tsx +113 -0
  59. package/plugins/design/dev-server/fs-watch.ts +63 -0
  60. package/plugins/design/dev-server/handoff.ts +721 -0
  61. package/plugins/design/dev-server/history.ts +125 -0
  62. package/plugins/design/dev-server/hmr-broadcast.ts +114 -0
  63. package/plugins/design/dev-server/http.ts +413 -0
  64. package/plugins/design/dev-server/input-router.tsx +485 -0
  65. package/plugins/design/dev-server/inspect.ts +365 -0
  66. package/plugins/design/dev-server/locator.ts +159 -0
  67. package/plugins/design/dev-server/mem.ts +97 -0
  68. package/plugins/design/dev-server/runtime-bundle.ts +235 -0
  69. package/plugins/design/dev-server/server.mjs +1246 -0
  70. package/plugins/design/dev-server/server.ts +131 -0
  71. package/plugins/design/dev-server/test/_helpers.ts +81 -0
  72. package/plugins/design/dev-server/test/active-state.test.ts +145 -0
  73. package/plugins/design/dev-server/test/annotations-api.test.ts +146 -0
  74. package/plugins/design/dev-server/test/annotations-layer.test.ts +419 -0
  75. package/plugins/design/dev-server/test/binary-smoke.test.ts +47 -0
  76. package/plugins/design/dev-server/test/bundle-smoke.test.ts +29 -0
  77. package/plugins/design/dev-server/test/canvas-build.test.ts +78 -0
  78. package/plugins/design/dev-server/test/canvas-edit.test.ts +139 -0
  79. package/plugins/design/dev-server/test/canvas-header.test.ts +127 -0
  80. package/plugins/design/dev-server/test/canvas-lib-inline.test.ts +146 -0
  81. package/plugins/design/dev-server/test/canvas-lib-resolver.test.ts +112 -0
  82. package/plugins/design/dev-server/test/canvas-meta-api.test.ts +236 -0
  83. package/plugins/design/dev-server/test/canvas-pipeline.test.ts +180 -0
  84. package/plugins/design/dev-server/test/canvas-route.test.ts +176 -0
  85. package/plugins/design/dev-server/test/fs-watch.test.ts +41 -0
  86. package/plugins/design/dev-server/test/handoff-static-frames.test.ts +215 -0
  87. package/plugins/design/dev-server/test/handoff.test.ts +281 -0
  88. package/plugins/design/dev-server/test/history-rollback.test.ts +62 -0
  89. package/plugins/design/dev-server/test/hmr-broadcast.test.ts +108 -0
  90. package/plugins/design/dev-server/test/input-router.test.ts +316 -0
  91. package/plugins/design/dev-server/test/locator.test.ts +214 -0
  92. package/plugins/design/dev-server/test/perf-harness.ts +193 -0
  93. package/plugins/design/dev-server/test/phase-3.6-smoke.test.ts +77 -0
  94. package/plugins/design/dev-server/test/runtime-bundle.test.ts +69 -0
  95. package/plugins/design/dev-server/test/server-lifecycle.test.ts +28 -0
  96. package/plugins/design/dev-server/test/tool-palette.test.tsx +55 -0
  97. package/plugins/design/dev-server/test/use-annotation-selection.test.tsx +77 -0
  98. package/plugins/design/dev-server/test/use-artboard-drag.test.ts +325 -0
  99. package/plugins/design/dev-server/test/use-selection-set.test.tsx +166 -0
  100. package/plugins/design/dev-server/test/use-snap-guides.test.ts +190 -0
  101. package/plugins/design/dev-server/test/use-tool-mode.test.tsx +93 -0
  102. package/plugins/design/dev-server/test/ws-handshake.test.ts +33 -0
  103. package/plugins/design/dev-server/tool-palette.tsx +278 -0
  104. package/plugins/design/dev-server/tsconfig.json +26 -0
  105. package/plugins/design/dev-server/use-annotation-selection.tsx +92 -0
  106. package/plugins/design/dev-server/use-annotations-visibility.tsx +43 -0
  107. package/plugins/design/dev-server/use-artboard-drag.tsx +445 -0
  108. package/plugins/design/dev-server/use-selection-set.tsx +224 -0
  109. package/plugins/design/dev-server/use-snap-guides.tsx +215 -0
  110. package/plugins/design/dev-server/use-tool-mode.tsx +114 -0
  111. package/plugins/design/dev-server/ws.ts +90 -0
  112. package/plugins/design/templates/_shell.html +177 -0
  113. package/plugins/design/templates/canvas.tsx.template +54 -0
  114. package/plugins/design/templates/design-system-inspiration/_MAPPING.md +277 -0
  115. package/plugins/design/templates/design-system-inspiration/_README.md +71 -0
  116. package/plugins/design/templates/design-system-inspiration/audience-consumer/components-banner.html +68 -0
  117. package/plugins/design/templates/design-system-inspiration/audience-consumer/components-empty-state-generous.html +39 -0
  118. package/plugins/design/templates/design-system-inspiration/audience-consumer/components-feature-grid.html +62 -0
  119. package/plugins/design/templates/design-system-inspiration/audience-consumer/components-marketing-card.html +63 -0
  120. package/plugins/design/templates/design-system-inspiration/audience-consumer/components-testimonial.html +80 -0
  121. package/plugins/design/templates/design-system-inspiration/audience-developer/components-code-block.html +71 -0
  122. package/plugins/design/templates/design-system-inspiration/audience-developer/components-diff-view.html +65 -0
  123. package/plugins/design/templates/design-system-inspiration/audience-developer/components-log-stream.html +62 -0
  124. package/plugins/design/templates/design-system-inspiration/audience-developer/components-monospace-table.html +57 -0
  125. package/plugins/design/templates/design-system-inspiration/audience-developer/components-terminal-pane.html +67 -0
  126. package/plugins/design/templates/design-system-inspiration/audience-developer/type-mono.html +57 -0
  127. package/plugins/design/templates/design-system-inspiration/audience-pro/colors-presence.html +74 -0
  128. package/plugins/design/templates/design-system-inspiration/audience-pro/components-command-palette.html +90 -0
  129. package/plugins/design/templates/design-system-inspiration/audience-pro/components-keyboard.html +51 -0
  130. package/plugins/design/templates/design-system-inspiration/audience-pro/components-list.html +89 -0
  131. package/plugins/design/templates/design-system-inspiration/audience-pro/components-shortcuts-overlay.html +85 -0
  132. package/plugins/design/templates/design-system-inspiration/audience-pro/components-toast-menu.html +80 -0
  133. package/plugins/design/templates/design-system-inspiration/core/INDEX.md.tpl +25 -0
  134. package/plugins/design/templates/design-system-inspiration/core/README.orchestration.md.tpl +71 -0
  135. package/plugins/design/templates/design-system-inspiration/core/README.philosophy.md.tpl +77 -0
  136. package/plugins/design/templates/design-system-inspiration/core/SKILL.md.tpl +50 -0
  137. package/plugins/design/templates/design-system-inspiration/core/colors_and_type.css.tpl +111 -0
  138. package/plugins/design/templates/design-system-inspiration/core/config.json.tpl +28 -0
  139. package/plugins/design/templates/design-system-inspiration/core/preview/_layout.css +113 -0
  140. package/plugins/design/templates/design-system-inspiration/core/preview/colors-accent.html +48 -0
  141. package/plugins/design/templates/design-system-inspiration/core/preview/colors-surfaces.html +49 -0
  142. package/plugins/design/templates/design-system-inspiration/core/preview/colors-text.html +52 -0
  143. package/plugins/design/templates/design-system-inspiration/core/preview/components-buttons.html +83 -0
  144. package/plugins/design/templates/design-system-inspiration/core/preview/components-cards.html +79 -0
  145. package/plugins/design/templates/design-system-inspiration/core/preview/components-inputs.html +82 -0
  146. package/plugins/design/templates/design-system-inspiration/core/preview/motion.html +66 -0
  147. package/plugins/design/templates/design-system-inspiration/core/preview/spacing-scale.html +53 -0
  148. package/plugins/design/templates/design-system-inspiration/core/preview/type-scale.html +62 -0
  149. package/plugins/design/templates/design-system-inspiration/foundations/borders.html +39 -0
  150. package/plugins/design/templates/design-system-inspiration/foundations/elevation.html +46 -0
  151. package/plugins/design/templates/design-system-inspiration/foundations/focus.html +48 -0
  152. package/plugins/design/templates/design-system-inspiration/foundations/grid.html +51 -0
  153. package/plugins/design/templates/design-system-inspiration/foundations/iconography.html +73 -0
  154. package/plugins/design/templates/design-system-inspiration/foundations/opacity.html +45 -0
  155. package/plugins/design/templates/design-system-inspiration/foundations/radii.html +40 -0
  156. package/plugins/design/templates/design-system-inspiration/foundations/selection.html +45 -0
  157. package/plugins/design/templates/design-system-inspiration/meta/accessibility.html +62 -0
  158. package/plugins/design/templates/design-system-inspiration/meta/i18n.html +73 -0
  159. package/plugins/design/templates/design-system-inspiration/meta/presence-multiplayer.html +71 -0
  160. package/plugins/design/templates/design-system-inspiration/meta/tokens-index.html +80 -0
  161. package/plugins/design/templates/design-system-inspiration/patterns/patterns-auth.html +78 -0
  162. package/plugins/design/templates/design-system-inspiration/patterns/patterns-data-density.html +61 -0
  163. package/plugins/design/templates/design-system-inspiration/patterns/patterns-error-pages.html +70 -0
  164. package/plugins/design/templates/design-system-inspiration/patterns/patterns-form-layouts.html +70 -0
  165. package/plugins/design/templates/design-system-inspiration/patterns/patterns-onboarding.html +71 -0
  166. package/plugins/design/templates/design-system-inspiration/patterns/patterns-pricing.html +83 -0
  167. package/plugins/design/templates/design-system-inspiration/platform-desktop/components-resize-panels.html +63 -0
  168. package/plugins/design/templates/design-system-inspiration/platform-desktop/ui_kits-desktop-index.html +55 -0
  169. package/plugins/design/templates/design-system-inspiration/platform-desktop/ui_kits-desktop-showcase.html +302 -0
  170. package/plugins/design/templates/design-system-inspiration/platform-mobile/components-bottom-sheet.html +63 -0
  171. package/plugins/design/templates/design-system-inspiration/platform-mobile/components-pull-to-refresh.html +74 -0
  172. package/plugins/design/templates/design-system-inspiration/platform-mobile/components-segmented-control.html +51 -0
  173. package/plugins/design/templates/design-system-inspiration/platform-mobile/components-tab-bar.html +57 -0
  174. package/plugins/design/templates/design-system-inspiration/platform-mobile/ui_kits-mobile-index.html +58 -0
  175. package/plugins/design/templates/design-system-inspiration/platform-mobile/ui_kits-mobile-showcase.html +237 -0
  176. package/plugins/design/templates/design-system-inspiration/status/colors-status.html +49 -0
  177. package/plugins/design/templates/design-system-inspiration/status/components-status.html +63 -0
  178. package/plugins/design/templates/design-system-inspiration/status/skeletons.html +74 -0
  179. package/plugins/design/templates/design-system-inspiration/theme-both/colors-themes-side-by-side.html +59 -0
  180. package/plugins/design/templates/design-system-inspiration/universal/components-callout.html +74 -0
  181. package/plugins/design/templates/design-system-inspiration/universal/components-dialogs.html +81 -0
  182. package/plugins/design/templates/design-system-inspiration/universal/components-tables.html +101 -0
  183. package/plugins/design/templates/design-system-inspiration/universal/components-toggles.html +74 -0
  184. package/plugins/design/templates/design-system-inspiration/universal/components-tooltips.html +74 -0
  185. package/plugins/design/templates/design-system-inspiration/universal/empty-state.html.tpl +34 -0
  186. package/plugins/design/templates/design-system-inspiration/universal/logo.html +42 -0
  187. package/plugins/design/templates/ds-specimen.tsx.template +59 -0
  188. package/plugins/flow/.claude-plugin/config.schema.json +398 -0
  189. package/plugins/flow/README.md +45 -0
  190. package/plugins/flow/templates/ai-skeleton/INDEX.md +50 -0
  191. package/plugins/flow/templates/ai-skeleton/README.md +46 -0
  192. package/plugins/flow/templates/ai-skeleton/browser/har/.gitkeep +0 -0
  193. package/plugins/flow/templates/ai-skeleton/browser/snapshots/.gitkeep +0 -0
  194. package/plugins/flow/templates/ai-skeleton/business/README.md +12 -0
  195. package/plugins/flow/templates/ai-skeleton/context/README.md +12 -0
  196. package/plugins/flow/templates/ai-skeleton/decisions/README.md +20 -0
  197. package/plugins/flow/templates/ai-skeleton/design-import/.gitkeep +0 -0
  198. package/plugins/flow/templates/ai-skeleton/dev-logs/.gitkeep +0 -0
  199. package/plugins/flow/templates/ai-skeleton/device/.gitkeep +0 -0
  200. package/plugins/flow/templates/ai-skeleton/docs/README.md +5 -0
  201. package/plugins/flow/templates/ai-skeleton/logs/.gitkeep +0 -0
  202. package/plugins/flow/templates/ai-skeleton/logs/README.md +13 -0
  203. package/plugins/flow/templates/ai-skeleton/plans/README.md +16 -0
  204. package/plugins/flow/templates/ai-skeleton/plans/archive/.gitkeep +0 -0
  205. package/plugins/flow/templates/ai-skeleton/release-guide.md +35 -0
  206. package/plugins/flow/templates/ai-skeleton/reviews/README.md +15 -0
  207. package/plugins/flow/templates/ai-skeleton/scenarios/README.md +26 -0
  208. package/plugins/flow/templates/ai-skeleton/scenarios/_lib/.gitkeep +0 -0
  209. package/plugins/flow/templates/ai-skeleton/state/STATE.md +25 -0
  210. package/plugins/flow/templates/ai-skeleton/templates/HANDOFF.md +32 -0
  211. package/plugins/flow/templates/ai-skeleton/workflows.config.json +74 -0
@@ -0,0 +1,90 @@
1
+ <!--
2
+ SPECIMEN: audience-pro-command-palette
3
+ DEMONSTRATES: Cmd+K palette UI, fuzzy-matched results with highlighted substring, grouped sections, recent / pinned, keyboard hints
4
+ COMPOSITION: full palette mock with search bar + 6 results across 2 groups + footer with kbd hints
5
+ COPY VOICE: action-verb commands ("Open roster", "Create canvas", "Toggle dark mode")
6
+ WHEN SCAFFOLDED: audience-pro
7
+ NOTES: Match highlighting uses --accent at low alpha (oklch alpha). Group headers are small caps + fg-2. ⌘K is the universal trigger — never bind to a custom combo unless docs explicitly call it out.
8
+ -->
9
+ <!doctype html>
10
+ <html lang="en">
11
+ <head>
12
+ <meta charset="utf-8" />
13
+ <title>Audience — pro command palette</title>
14
+ <link rel="stylesheet" href="../core/colors_and_type.css" />
15
+ <link rel="stylesheet" href="../core/preview/_layout.css" />
16
+ <style>
17
+ .palette { background: var(--bg-1); border: 1px solid var(--border-default); border-radius: var(--radius-md); box-shadow: var(--shadow-lg); max-width: 520px; overflow: hidden; }
18
+ .palette-input { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--border-subtle); }
19
+ .palette-input input { background: transparent; border: 0; outline: 0; color: var(--fg-0); font: inherit; font-size: var(--type-md); flex: 1; }
20
+ .palette-group { padding: 4px 0; }
21
+ .palette-group .head { padding: 6px 14px; font-size: 10px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--fg-2); }
22
+ .palette-item { display: flex; align-items: center; gap: 10px; padding: 8px 14px; cursor: pointer; }
23
+ .palette-item:hover, .palette-item.is-active { background: var(--bg-3); }
24
+ .palette-item .label { flex: 1; }
25
+ .palette-item .shortcut { color: var(--fg-2); font-family: var(--font-mono); font-size: var(--type-xs); }
26
+ .palette-item .icon { width: 16px; height: 16px; color: var(--fg-1); }
27
+ .match { background: oklch(from var(--accent) l c h / 0.4); border-radius: 2px; padding: 0 1px; }
28
+ .palette-footer { display: flex; justify-content: space-between; padding: 8px 14px; border-top: 1px solid var(--border-subtle); background: var(--bg-2); font-size: var(--type-xs); color: var(--fg-2); }
29
+ kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 16px; height: 16px; padding: 0 4px; background: var(--bg-3); border: 1px solid var(--border-default); border-radius: var(--radius-xs); font-family: var(--font-mono); font-size: 10px; color: var(--fg-0); }
30
+ </style>
31
+ </head>
32
+ <body class="app" data-theme="dark">
33
+ <main class="specimen">
34
+ <h1>Command palette</h1>
35
+ <p class="lede">The <kbd>⌘</kbd>+<kbd>K</kbd> palette is the keyboard-first entry point to everything. Fuzzy match highlights the matched substring; results group into Pinned, Recent, and All actions.</p>
36
+
37
+ <div class="palette">
38
+ <div class="palette-input">
39
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" style="color: var(--fg-2);"><circle cx="11" cy="11" r="7"/><path d="m20 20-3-3"/></svg>
40
+ <input type="text" value="rost" placeholder="Search commands…" />
41
+ <kbd>⎋</kbd>
42
+ </div>
43
+
44
+ <div class="palette-group">
45
+ <div class="head">Pinned</div>
46
+ <div class="palette-item is-active">
47
+ <span class="icon">☰</span>
48
+ <span class="label">Open <span class="match">rost</span>er</span>
49
+ <span class="shortcut">⌘R</span>
50
+ </div>
51
+ </div>
52
+
53
+ <div class="palette-group">
54
+ <div class="head">Recent</div>
55
+ <div class="palette-item">
56
+ <span class="icon">+</span>
57
+ <span class="label">Create new <span class="match">rost</span>er</span>
58
+ <span class="shortcut">⌘⇧N</span>
59
+ </div>
60
+ <div class="palette-item">
61
+ <span class="icon">⏏</span>
62
+ <span class="label">Export <span class="match">rost</span>er CSV</span>
63
+ </div>
64
+ </div>
65
+
66
+ <div class="palette-group">
67
+ <div class="head">All actions</div>
68
+ <div class="palette-item">
69
+ <span class="icon">⟳</span>
70
+ <span class="label">Sync <span class="match">rost</span>er with league</span>
71
+ </div>
72
+ <div class="palette-item">
73
+ <span class="icon">🔍</span>
74
+ <span class="label">Find player in <span class="match">rost</span>er</span>
75
+ <span class="shortcut">/</span>
76
+ </div>
77
+ <div class="palette-item">
78
+ <span class="icon">⚙</span>
79
+ <span class="label"><span class="match">Rost</span>er settings</span>
80
+ </div>
81
+ </div>
82
+
83
+ <div class="palette-footer">
84
+ <span><kbd>↑</kbd><kbd>↓</kbd> navigate · <kbd>⏎</kbd> run · <kbd>⎋</kbd> close</span>
85
+ <span>6 results</span>
86
+ </div>
87
+ </div>
88
+ </main>
89
+ </body>
90
+ </html>
@@ -0,0 +1,51 @@
1
+ <!--
2
+ SPECIMEN: audience-pro-keyboard
3
+ DEMONSTRATES: <kbd> styling, key combos with `+` separators, OS-aware modifier symbols (⌘ vs Ctrl)
4
+ COMPOSITION: kbd primitives at 3 sizes + common combo recipes + inline-in-paragraph usage
5
+ COPY VOICE: literal key names, no spelling-out ("Cmd+K" not "Command-K")
6
+ WHEN SCAFFOLDED: audience-pro
7
+ NOTES: Use Mac symbols (⌘ ⇧ ⌥ ⌃ ⌫ ⏎ ⎋) on macOS, spell out on Windows/Linux. JS detects platform; the visual style is identical. Single keys use single <kbd>; combos chain with `+` (visible separator, not part of the kbd).
8
+ -->
9
+ <!doctype html>
10
+ <html lang="en">
11
+ <head>
12
+ <meta charset="utf-8" />
13
+ <title>Audience — pro keyboard</title>
14
+ <link rel="stylesheet" href="../core/colors_and_type.css" />
15
+ <link rel="stylesheet" href="../core/preview/_layout.css" />
16
+ <style>
17
+ kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; padding: 0 5px; height: 20px; background: var(--bg-3); border: 1px solid var(--border-default); border-bottom-width: 2px; border-radius: var(--radius-xs); font-family: var(--font-mono); font-size: 11px; color: var(--fg-0); }
18
+ kbd.lg { min-width: 24px; height: 26px; font-size: 13px; padding: 0 8px; }
19
+ kbd.sm { min-width: 14px; height: 16px; font-size: 9px; padding: 0 4px; }
20
+ .combo { display: inline-flex; align-items: center; gap: 2px; }
21
+ .combo .plus { color: var(--fg-2); font-size: var(--type-xs); padding: 0 1px; }
22
+ </style>
23
+ </head>
24
+ <body class="app" data-theme="dark">
25
+ <main class="specimen">
26
+ <h1>Keyboard primitives</h1>
27
+ <p class="lede">The <code>&lt;kbd&gt;</code> element with project-specific styling. Use Mac symbols (⌘ ⇧ ⌥ ⌃) on macOS and spell out on other platforms — the visual style is identical. Combos chain individual <code>&lt;kbd&gt;</code>s with a "+" separator.</p>
28
+
29
+ <h2>Sizes</h2>
30
+ <div class="row" style="gap: 16px; align-items: end;">
31
+ <kbd class="lg">⌘</kbd>
32
+ <kbd>K</kbd>
33
+ <kbd class="sm">⌫</kbd>
34
+ </div>
35
+
36
+ <h2>Common combos</h2>
37
+ <table style="width: 100%; max-width: 480px; border-collapse: collapse;">
38
+ <tr><td style="padding: 8px 0; color: var(--fg-1);">Command palette</td><td style="padding: 8px 0;"><span class="combo"><kbd>⌘</kbd><span class="plus">+</span><kbd>K</kbd></span></td></tr>
39
+ <tr><td style="padding: 8px 0; color: var(--fg-1);">Quick search</td><td style="padding: 8px 0;"><span class="combo"><kbd>/</kbd></span></td></tr>
40
+ <tr><td style="padding: 8px 0; color: var(--fg-1);">New canvas</td><td style="padding: 8px 0;"><span class="combo"><kbd>⌘</kbd><span class="plus">+</span><kbd>⇧</kbd><span class="plus">+</span><kbd>N</kbd></span></td></tr>
41
+ <tr><td style="padding: 8px 0; color: var(--fg-1);">Toggle sidebar</td><td style="padding: 8px 0;"><span class="combo"><kbd>⌘</kbd><span class="plus">+</span><kbd>B</kbd></span></td></tr>
42
+ <tr><td style="padding: 8px 0; color: var(--fg-1);">Save</td><td style="padding: 8px 0;"><span class="combo"><kbd>⌘</kbd><span class="plus">+</span><kbd>S</kbd></span></td></tr>
43
+ <tr><td style="padding: 8px 0; color: var(--fg-1);">Close tab</td><td style="padding: 8px 0;"><span class="combo"><kbd>⌘</kbd><span class="plus">+</span><kbd>W</kbd></span></td></tr>
44
+ <tr><td style="padding: 8px 0; color: var(--fg-1);">Cancel</td><td style="padding: 8px 0;"><span class="combo"><kbd>⎋</kbd></span></td></tr>
45
+ </table>
46
+
47
+ <h2>In flowing copy</h2>
48
+ <p style="max-width: 60ch;">Press <span class="combo"><kbd>⌘</kbd><span class="plus">+</span><kbd>K</kbd></span> from anywhere in the app to open the command palette. Use <kbd>J</kbd> and <kbd>K</kbd> to navigate the results, <kbd>⏎</kbd> to run the selected action, or <kbd>⎋</kbd> to dismiss without choosing.</p>
49
+ </main>
50
+ </body>
51
+ </html>
@@ -0,0 +1,89 @@
1
+ <!--
2
+ SPECIMEN: audience-pro-components-list
3
+ DEMONSTRATES: dense list rows, selection state, hover preview, J/K keyboard hints, multi-select
4
+ COMPOSITION: vertical list with avatar + primary + meta + actions, in idle / hover / selected states + sticky header
5
+ COPY VOICE: terse, dense — pro tools assume reading speed
6
+ WHEN SCAFFOLDED: audience-pro (only when Q2 = pro tool)
7
+ NOTES: Row height stays tight (~36-44px). J/K hints surface only on focus, not on hover. Avoid bg gradients — pro users read fast and high-contrast surfaces beat decorative ones.
8
+ -->
9
+ <!doctype html>
10
+ <html lang="en">
11
+ <head>
12
+ <meta charset="utf-8" />
13
+ <title>Audience — pro list</title>
14
+ <link rel="stylesheet" href="../core/colors_and_type.css" />
15
+ <link rel="stylesheet" href="../core/preview/_layout.css" />
16
+ <style>
17
+ .list { background: var(--bg-1); border: 1px solid var(--border-default); border-radius: var(--radius-md); overflow: hidden; max-width: 640px; }
18
+ .list-header { display: grid; grid-template-columns: 24px 1fr 80px 64px 80px; gap: 12px; align-items: center; padding: 6px 12px; background: var(--bg-2); border-bottom: 1px solid var(--border-default); font-size: var(--type-xs); color: var(--fg-1); text-transform: uppercase; letter-spacing: 0.04em; position: sticky; top: 0; }
19
+ .row { display: grid; grid-template-columns: 24px 1fr 80px 64px 80px; gap: 12px; align-items: center; padding: 8px 12px; border-bottom: 1px solid var(--border-subtle); font-size: var(--type-sm); cursor: pointer; }
20
+ .row:hover { background: var(--bg-3); }
21
+ .row.is-selected { background: var(--bg-4); }
22
+ .row .avatar { width: 24px; height: 24px; background: var(--bg-3); border-radius: 50%; }
23
+ .row .name { color: var(--fg-0); }
24
+ .row .meta { color: var(--fg-2); font-size: var(--type-xs); }
25
+ .row .num { color: var(--fg-1); font-variant-numeric: tabular-nums; text-align: right; }
26
+ kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 4px; background: var(--bg-3); border: 1px solid var(--border-default); border-radius: var(--radius-xs); font-family: var(--font-mono); font-size: 10px; color: var(--fg-1); }
27
+ </style>
28
+ </head>
29
+ <body class="app" data-theme="dark">
30
+ <main class="specimen">
31
+ <h1>List (pro tool)</h1>
32
+ <p class="lede">Dense rows with predictable column slots. Pro users navigate by keyboard — surface <kbd>J</kbd>/<kbd>K</kbd> hints in the footer, not the rows themselves. Selection uses <code>--bg-4</code>; never the accent (rows aren't navigation).</p>
33
+
34
+ <h2>Roster — 5 players</h2>
35
+ <div class="list">
36
+ <div class="list-header">
37
+ <span></span>
38
+ <span>Player</span>
39
+ <span style="text-align: right;">Pos</span>
40
+ <span style="text-align: right;">Mat</span>
41
+ <span style="text-align: right;">Goals</span>
42
+ </div>
43
+ <div class="row is-selected">
44
+ <div class="avatar"></div>
45
+ <div><span class="name">Kim Park</span> <span class="meta">#9 · captain</span></div>
46
+ <span class="num">FWD</span>
47
+ <span class="num">24</span>
48
+ <span class="num">14</span>
49
+ </div>
50
+ <div class="row">
51
+ <div class="avatar"></div>
52
+ <div><span class="name">Jonas Weber</span> <span class="meta">#14</span></div>
53
+ <span class="num">MID</span>
54
+ <span class="num">22</span>
55
+ <span class="num">3</span>
56
+ </div>
57
+ <div class="row">
58
+ <div class="avatar"></div>
59
+ <div><span class="name">Marta Silva</span> <span class="meta">#4</span></div>
60
+ <span class="num">DEF</span>
61
+ <span class="num">23</span>
62
+ <span class="num">1</span>
63
+ </div>
64
+ <div class="row">
65
+ <div class="avatar"></div>
66
+ <div><span class="name">Liam Chen</span> <span class="meta">#1</span></div>
67
+ <span class="num">GK</span>
68
+ <span class="num">19</span>
69
+ <span class="num">0</span>
70
+ </div>
71
+ <div class="row">
72
+ <div class="avatar"></div>
73
+ <div><span class="name">Sara Novak</span> <span class="meta">#11</span></div>
74
+ <span class="num">FWD</span>
75
+ <span class="num">20</span>
76
+ <span class="num">8</span>
77
+ </div>
78
+ </div>
79
+
80
+ <h2>Keyboard footer</h2>
81
+ <div class="row" style="display: flex; gap: 16px; color: var(--fg-2); font-size: var(--type-xs); padding: 8px 12px;">
82
+ <span><kbd>J</kbd><kbd>K</kbd> navigate</span>
83
+ <span><kbd>X</kbd> select</span>
84
+ <span><kbd>⏎</kbd> open</span>
85
+ <span><kbd>⌘K</kbd> palette</span>
86
+ </div>
87
+ </main>
88
+ </body>
89
+ </html>
@@ -0,0 +1,85 @@
1
+ <!--
2
+ SPECIMEN: audience-pro-shortcuts-overlay
3
+ DEMONSTRATES: ? key cheat-sheet overlay, grouped sections, kbd primitives in dense table
4
+ COMPOSITION: 4-column overlay with sections (Navigation / Editing / View / Other) and ~16 shortcuts total
5
+ COPY VOICE: terse action-verb descriptions, never repeating the key in the label
6
+ WHEN SCAFFOLDED: audience-pro
7
+ NOTES: The ? key is the discovery trigger. Overlay is full-screen with a dark veil. Layout adapts to short / tall screens — sections wrap.
8
+ -->
9
+ <!doctype html>
10
+ <html lang="en">
11
+ <head>
12
+ <meta charset="utf-8" />
13
+ <title>Audience — pro shortcuts overlay</title>
14
+ <link rel="stylesheet" href="../core/colors_and_type.css" />
15
+ <link rel="stylesheet" href="../core/preview/_layout.css" />
16
+ <style>
17
+ .overlay-frame { position: relative; background: var(--bg-0); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: 32px; overflow: hidden; }
18
+ .veil { position: absolute; inset: 0; background: oklch(0 0 0 / 0.5); }
19
+ .overlay { position: relative; background: var(--bg-1); border: 1px solid var(--border-default); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); padding: 24px; max-width: 720px; margin: 0 auto; }
20
+ .overlay h2 { margin: 0 0 16px; font-size: var(--type-lg); }
21
+ .sections { display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; }
22
+ .section h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--fg-2); margin: 0 0 8px; }
23
+ .section dl { display: grid; grid-template-columns: 1fr auto; gap: 6px 12px; margin: 0; font-size: var(--type-sm); }
24
+ .section dt { color: var(--fg-1); }
25
+ .section dd { margin: 0; }
26
+ kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 4px; background: var(--bg-3); border: 1px solid var(--border-default); border-radius: var(--radius-xs); font-family: var(--font-mono); font-size: 10px; color: var(--fg-0); margin-left: 2px; }
27
+ .overlay-footer { display: flex; justify-content: space-between; margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--border-subtle); color: var(--fg-2); font-size: var(--type-xs); }
28
+ </style>
29
+ </head>
30
+ <body class="app" data-theme="dark">
31
+ <main class="specimen">
32
+ <h1>Shortcuts overlay</h1>
33
+ <p class="lede">Press <kbd>?</kbd> from anywhere to surface this. Pro users want this on demand, not pinned in a sidebar — discovery without permanent UI weight.</p>
34
+
35
+ <div class="overlay-frame">
36
+ <div class="veil"></div>
37
+ <div class="overlay">
38
+ <h2>Keyboard shortcuts</h2>
39
+ <div class="sections">
40
+ <div class="section">
41
+ <h3>Navigation</h3>
42
+ <dl>
43
+ <dt>Command palette</dt><dd><kbd>⌘</kbd><kbd>K</kbd></dd>
44
+ <dt>Quick search</dt><dd><kbd>/</kbd></dd>
45
+ <dt>Toggle sidebar</dt><dd><kbd>⌘</kbd><kbd>B</kbd></dd>
46
+ <dt>Next / prev tab</dt><dd><kbd>⌥</kbd><kbd>→</kbd></dd>
47
+ </dl>
48
+ </div>
49
+ <div class="section">
50
+ <h3>Editing</h3>
51
+ <dl>
52
+ <dt>Save</dt><dd><kbd>⌘</kbd><kbd>S</kbd></dd>
53
+ <dt>Undo / redo</dt><dd><kbd>⌘</kbd><kbd>Z</kbd></dd>
54
+ <dt>Duplicate</dt><dd><kbd>⌘</kbd><kbd>D</kbd></dd>
55
+ <dt>Delete</dt><dd><kbd>⌫</kbd></dd>
56
+ </dl>
57
+ </div>
58
+ <div class="section">
59
+ <h3>View</h3>
60
+ <dl>
61
+ <dt>Zoom in / out</dt><dd><kbd>⌘</kbd><kbd>+</kbd></dd>
62
+ <dt>Reset zoom</dt><dd><kbd>⌘</kbd><kbd>0</kbd></dd>
63
+ <dt>Toggle theme</dt><dd><kbd>⌘</kbd><kbd>⇧</kbd><kbd>T</kbd></dd>
64
+ <dt>Full screen</dt><dd><kbd>⌃</kbd><kbd>⌘</kbd><kbd>F</kbd></dd>
65
+ </dl>
66
+ </div>
67
+ <div class="section">
68
+ <h3>Other</h3>
69
+ <dl>
70
+ <dt>Show shortcuts</dt><dd><kbd>?</kbd></dd>
71
+ <dt>Open settings</dt><dd><kbd>⌘</kbd><kbd>,</kbd></dd>
72
+ <dt>Sign out</dt><dd><kbd>⌘</kbd><kbd>⇧</kbd><kbd>Q</kbd></dd>
73
+ <dt>Dismiss this</dt><dd><kbd>⎋</kbd></dd>
74
+ </dl>
75
+ </div>
76
+ </div>
77
+ <div class="overlay-footer">
78
+ <span>Press <kbd>⎋</kbd> to close</span>
79
+ <span>16 shortcuts</span>
80
+ </div>
81
+ </div>
82
+ </div>
83
+ </main>
84
+ </body>
85
+ </html>
@@ -0,0 +1,80 @@
1
+ <!--
2
+ SPECIMEN: audience-pro-toast-menu
3
+ DEMONSTRATES: bottom-anchored toast notifications, contextual menu (right-click / button-triggered), action chain on toast
4
+ COMPOSITION: 3 toast variants (success / pending / error w/ retry) + a right-click context menu with keyboard shortcut hints
5
+ COPY VOICE: terse, actionable ("Saved", "Retry", "Undo") — never "Successful!"
6
+ WHEN SCAFFOLDED: audience-pro
7
+ NOTES: Toast is auto-dismissed for success (4s), persistent for error (until user acts). Context menus include keyboard shortcuts in the right column — power users learn through repetition.
8
+ -->
9
+ <!doctype html>
10
+ <html lang="en">
11
+ <head>
12
+ <meta charset="utf-8" />
13
+ <title>Audience — pro toast + menu</title>
14
+ <link rel="stylesheet" href="../core/colors_and_type.css" />
15
+ <link rel="stylesheet" href="../core/preview/_layout.css" />
16
+ <style>
17
+ .toast { background: var(--bg-1); border: 1px solid var(--border-default); border-radius: var(--radius-md); box-shadow: var(--shadow-md); padding: 10px 14px; display: flex; align-items: center; gap: 12px; max-width: 360px; font-size: var(--type-sm); }
18
+ .toast .icon { width: 18px; height: 18px; flex-shrink: 0; }
19
+ .toast .body { flex: 1; }
20
+ .toast .actions { display: flex; gap: 8px; }
21
+ .toast button { background: transparent; border: 0; color: var(--accent); font: inherit; font-size: var(--type-sm); padding: 2px 6px; border-radius: var(--radius-xs); cursor: pointer; }
22
+ .toast button:hover { background: var(--bg-3); }
23
+ .menu { background: var(--bg-1); border: 1px solid var(--border-default); border-radius: var(--radius-md); box-shadow: var(--shadow-md); padding: 4px; width: 220px; }
24
+ .menu-item { display: flex; justify-content: space-between; align-items: center; padding: 6px 10px; border-radius: var(--radius-sm); cursor: pointer; font-size: var(--type-sm); }
25
+ .menu-item:hover { background: var(--bg-3); }
26
+ .menu-item.is-destructive:hover { background: var(--status-error); color: var(--accent-fg); }
27
+ .menu .shortcut { color: var(--fg-2); font-family: var(--font-mono); font-size: var(--type-xs); }
28
+ .menu-sep { height: 1px; background: var(--border-subtle); margin: 4px -4px; }
29
+ </style>
30
+ </head>
31
+ <body class="app" data-theme="dark">
32
+ <main class="specimen">
33
+ <h1>Toast + context menu</h1>
34
+ <p class="lede">Toasts auto-dismiss for success (4s) but stay sticky for errors until the user acts. Context menus show keyboard shortcuts on the right so power users learn the binding while they use the mouse.</p>
35
+
36
+ <h2>Toasts</h2>
37
+ <div style="display: grid; gap: 12px; margin: 16px 0;">
38
+ <div class="toast" style="border-color: var(--status-success);">
39
+ <span class="icon" style="color: var(--status-success);">✓</span>
40
+ <div class="body">
41
+ <strong>Match recap saved.</strong>
42
+ <div style="color: var(--fg-1); font-size: var(--type-xs);">Shared with the captain.</div>
43
+ </div>
44
+ <div class="actions">
45
+ <button>Undo</button>
46
+ </div>
47
+ </div>
48
+ <div class="toast">
49
+ <span class="icon" style="color: var(--status-warn);">⟳</span>
50
+ <div class="body">
51
+ <strong>Syncing roster…</strong>
52
+ <div style="color: var(--fg-1); font-size: var(--type-xs);">3 of 24 done.</div>
53
+ </div>
54
+ </div>
55
+ <div class="toast" style="border-color: var(--status-error);">
56
+ <span class="icon" style="color: var(--status-error);">×</span>
57
+ <div class="body">
58
+ <strong>Couldn't reach the league API.</strong>
59
+ <div style="color: var(--fg-1); font-size: var(--type-xs);">We'll retry in 30s.</div>
60
+ </div>
61
+ <div class="actions">
62
+ <button>Retry now</button>
63
+ </div>
64
+ </div>
65
+ </div>
66
+
67
+ <h2>Context menu (right-click / button)</h2>
68
+ <div class="menu">
69
+ <div class="menu-item">Open player <span class="shortcut">⏎</span></div>
70
+ <div class="menu-item">Edit profile <span class="shortcut">E</span></div>
71
+ <div class="menu-item">Toggle availability <span class="shortcut">A</span></div>
72
+ <div class="menu-sep"></div>
73
+ <div class="menu-item">Copy ID <span class="shortcut">⌘C</span></div>
74
+ <div class="menu-item">Duplicate <span class="shortcut">⌘D</span></div>
75
+ <div class="menu-sep"></div>
76
+ <div class="menu-item is-destructive">Remove from roster <span class="shortcut">⌫</span></div>
77
+ </div>
78
+ </main>
79
+ </body>
80
+ </html>
@@ -0,0 +1,25 @@
1
+ # Canvas index — {{project_label}}
2
+
3
+ _Auto-maintained by `/design:setup-docs`. Last updated {{iso_timestamp}}._
4
+
5
+ ## All canvases
6
+
7
+ _No canvases yet. Run `/design:new "<Name>" "<brief>"` to scaffold the first one._
8
+
9
+ <!--
10
+ After the first canvas exists, this section is auto-regenerated as:
11
+
12
+ | File | Title | Platform | Sections | Artboards | Iter | Last modified |
13
+ |---|---|---|---|---|---|---|
14
+ | <Canvas>.html | <meta.title> | <meta.platform> | <count> | <sum> | <count> | <ts> |
15
+ -->
16
+
17
+ ## Statistics
18
+
19
+ - Canvases: 0
20
+ - Total artboards: 0
21
+ - Tokens defined: see `system/{{ds_dirname}}/colors_and_type.css`
22
+ - Components: 0
23
+ - Last canvas modified: —
24
+
25
+ <!-- AUTO-MAINTAINED by /design:setup-docs — do not edit by hand. Add notes to system/{{ds_dirname}}/README.md or sections of INDEX.md that aren't auto-generated. -->
@@ -0,0 +1,71 @@
1
+ # {{project_label}} — Design root
2
+
3
+ > **CODING AGENTS: READ THIS FIRST.**
4
+ >
5
+ > This folder is the project's living design source. It's NOT a snapshot — it's continuously maintained as the team iterates on UI in this repo. When in doubt, trust the contents of this folder over any older PDF / Figma / mockup snapshot.
6
+
7
+ ## What's here
8
+
9
+ ```
10
+ .design/
11
+ ├── README.md # this file (auto-maintained by /design:setup-docs)
12
+ ├── INDEX.md # canvas catalog (auto-maintained)
13
+ ├── config.json # per-repo plugin config
14
+ ├── system/ # design system: tokens, assets, ui kits, README
15
+ │ └── {{ds_dirname}}/
16
+ │ ├── README.md
17
+ │ ├── SKILL.md
18
+ │ ├── colors_and_type.css # ← authoritative tokens
19
+ │ ├── assets/ # logos, brand glyphs
20
+ │ ├── preview/ # browsable specimens (colors, type, components, motion)
21
+ │ └── ui_kits/ # reference UI compositions
22
+ └── ui/ # canvas projects (multi-artboard DesignCanvas files)
23
+ ├── <Canvas-1>.html
24
+ ├── <Canvas-1>.meta.json
25
+ ├── <Canvas-2>.html
26
+ └── ...
27
+ ```
28
+
29
+ ## What you should do — IMPORTANT
30
+
31
+ **Read `INDEX.md` first.** It lists every canvas with title, brief, sections, artboards, and which production routes they map to. Pick the canvas matching the work scope.
32
+
33
+ **Read its iteration transcript next.** Each canvas with iteration history has a chat at `_history/<slug>/chat.md`. The chat shows the back-and-forth between the user and the design assistant — it tells you **what the user actually wants** and **where they landed**. The HTML file is the output, but the chat is where the intent lives.
34
+
35
+ **Find the canvas's primary HTML and read it top to bottom.** Each canvas project is a multi-artboard `DesignCanvas` HTML file. Then **follow its imports**: open every component file under `ui/components/`, the tokens at `system/{{ds_dirname}}/colors_and_type.css`, and the canvas's `.meta.json` sidecar.
36
+
37
+ **If anything is ambiguous, ask the user to confirm before you start implementing.** It's much cheaper to clarify scope up front than to build the wrong thing.
38
+
39
+ ## About the design files
40
+
41
+ The design medium is **HTML/CSS/JS** — these are prototypes, not production code. Your job is to **recreate them pixel-perfectly** in whatever technology the production codebase uses (React, Vue, native, whatever fits). Match the visual output; don't copy the prototype's internal structure unless it happens to fit.
42
+
43
+ Each canvas is a **multi-artboard `DesignCanvas`** with one or more `DCSection` blocks containing `DCArtboard` instances. Each artboard is a separate screen — you implement them as separate routes / components in production.
44
+
45
+ ## Hard rules (from {{project_label}}'s design system)
46
+
47
+ {{hard_rules_from_system_readme}}
48
+
49
+ ## How tokens work
50
+
51
+ The authoritative token file is `system/{{ds_dirname}}/colors_and_type.css`. Every canvas links to it. Production code should consume the same tokens (compiled to TS/JS or kept as CSS vars). **Never invent tokens — extend the source CSS instead.**
52
+
53
+ ## Plugin commands quick reference
54
+
55
+ | Command | Purpose |
56
+ |---|---|
57
+ | `/design:edit "<feedback>"` | Edit active canvas in place (auto-critic loop runs after) |
58
+ | `/design:edit "<…>" --perfect` | Same, with up to 8 polish iterations |
59
+ | `/design:new "<Name>" "<brief>"` | Scaffold a new canvas project |
60
+ | `/design:critic` | Run review panel (orchestrator-routed) |
61
+ | `/design:rollback` | Undo last edit |
62
+ | `/design:screenshot` | Capture canvas / selected element |
63
+ | `/design:setup-docs` | Refresh this README + INDEX (auto-runs after `/design:edit` and `/design:new`) |
64
+ | `/design:setup-ds <name>` | Create another design system |
65
+ | `/design:handoff` | Migrate active canvas to a handoff target |
66
+ | `/design:browse` | Boot the local dev server |
67
+ | `/design:help` | Grouped command index |
68
+
69
+ ## Last updated
70
+
71
+ {{iso_timestamp}}
@@ -0,0 +1,77 @@
1
+ # {{project_label}} — Design System
2
+
3
+ > **Philosophy layer.** This file documents the *why* and *what* of the design system. The *how* (tokens, specimens) lives in `colors_and_type.css` and the `preview/` directory.
4
+
5
+ ## Purpose
6
+
7
+ {{purpose_one_liner}}
8
+
9
+ ## Audience profile
10
+
11
+ - **Primary user:** {{audience_summary}}
12
+ - **Platforms:** {{platforms_summary}}
13
+ - **Default theme:** {{theme_default}}
14
+ - **Content tone:** {{content_tone}}
15
+
16
+ ## Mood references
17
+
18
+ {{mood_references_block}}
19
+
20
+ ## Foundations
21
+
22
+ ### One-accent rule
23
+
24
+ Exactly one accent family lives in `colors_and_type.css`: `--accent`, `--accent-hover`, `--accent-active`, `--accent-fg`. **No `--accent2`.** Calls-to-attention compete with each other; one accent forces hierarchy decisions at design time, not runtime.
25
+
26
+ ### Token contract
27
+
28
+ All visuals reference `var(--*)` tokens declared in `colors_and_type.css`. No hardcoded hex / px / rem in canvases or production code. Adding a new visual concept means **extending the tokens CSS first**, never inventing values inline.
29
+
30
+ ### Active token families
31
+
32
+ {{active_families_block}}
33
+
34
+ ## Hard rules (non-negotiable)
35
+
36
+ - **Accessibility:** WCAG 2.1 AA contrast at every theme. Focus-visible always rendered. Touch targets ≥ 44×44. `prefers-reduced-motion: reduce` respected.
37
+ - **No off-token colors / radii / spacings** in canvases. Extend tokens; don't inline.
38
+ - **No placeholder copy.** Real product strings only — no "Lorem Solutions Inc.", no "Click here".
39
+ - **Type ladder:** {{type_scale_summary}}
40
+ - **Motion:** every animation uses a `var(--dur-*)` and `var(--ease-*)` token. No magic numbers.
41
+
42
+ {{platform_hard_rules}}
43
+
44
+ ## Voice & tone
45
+
46
+ {{voice_tone_block}}
47
+
48
+ ## Iconography
49
+
50
+ {{iconography_summary}}
51
+
52
+ ## Hard-stops the completeness-critic enforces
53
+
54
+ - Core tokens present (`--accent`, `--bg-0..4`, `--fg-0..3`, `--dur-flip`)
55
+ - Exactly one accent family
56
+ - `system/{{ds_dirname}}/preview/` populated with at least 8 specimens
57
+ - `colors_and_type.css` linked from every specimen
58
+ - `prefers-reduced-motion: reduce` guard present in tokens CSS
59
+
60
+ See `plugins/design/agents/design-system-completeness-critic.md` for the full rule set.
61
+
62
+ ## Where things live
63
+
64
+ - **Tokens:** `colors_and_type.css` (this directory)
65
+ - **Specimens:** `preview/` (one HTML file per token family / component class)
66
+ - **UI kits:** `ui_kits/<platform>/` (reference compositions for {{platforms_summary}})
67
+ - **Brand assets:** `assets/logos/`, `assets/glyphs/`
68
+
69
+ ## How to extend
70
+
71
+ 1. Identify the missing concept (new component, new state, new platform).
72
+ 2. **Extend `colors_and_type.css`** with any new tokens needed.
73
+ 3. **Add a specimen** under `preview/` with a SPECIMEN comment header so future agents learn from it.
74
+ 4. Run `/design:critic --system-only` to confirm completeness.
75
+ 5. Commit.
76
+
77
+ Never extend the system by inventing values inline in a canvas — that's how systems decay.
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: {{ds_skill_name}}
3
+ description: "Loads the {{project_label}} design system context — tokens, philosophy, hard-stops — so any agent iterating on a canvas under this project respects the system. Auto-invoked by /design:edit and /design:new when the active canvas declares this DS via .meta.json.designSystem (or when this is the single DS)."
4
+ user-invocable: false
5
+ ---
6
+
7
+ # {{ds_skill_name}} — design system context
8
+
9
+ Loads the project's design system into the agent's working memory:
10
+
11
+ - **Tokens** — `colors_and_type.css` (the source of truth for color, type, spacing, motion, radii)
12
+ - **Philosophy** — `README.md` (the *why* — audience, mood, voice, hard rules)
13
+ - **Hard-stops** — non-negotiable constraints the design-system-completeness-critic enforces
14
+ - **Active token families** — `{{active_families_csv}}`
15
+
16
+ ## When this skill loads
17
+
18
+ This skill is loaded automatically when:
19
+
20
+ - The active canvas's `.meta.json` declares `designSystem: "{{ds_dirname}}"`
21
+ - OR the project has a single DS (single-DS layout: `system/project/`) and the active canvas has no explicit DS declaration
22
+
23
+ It is **not** auto-invoked by `/design:edit` or `/design:new` on a project with no DS yet — that path triggers skill `design-system` in bootstrap mode instead. See `plugins/design/skills/design-system/SKILL.md` "Mode-detection".
24
+
25
+ ## What the agent should remember
26
+
27
+ - **One accent.** No `--accent2`. Calls-to-attention compete; one accent forces hierarchy decisions.
28
+ - **All visuals reference `var(--*)` tokens.** No hardcoded hex / px / rem in canvases.
29
+ - **Voice:** {{voice_tone_summary}}
30
+ - **Iconography:** {{iconography_summary}}
31
+ - **Theme default:** `{{theme_default}}`. {{theme_extra}}
32
+ - **Platforms:** {{platforms_summary}}
33
+
34
+ ## Hard rules (verbatim from README.md)
35
+
36
+ {{hard_rules_block}}
37
+
38
+ ## Files of interest
39
+
40
+ | Path | Role |
41
+ |---|---|
42
+ | `colors_and_type.css` | Authoritative tokens |
43
+ | `README.md` | Philosophy + hard rules |
44
+ | `preview/` | Specimens — read these to understand what good looks like |
45
+ | `assets/logos/`, `assets/glyphs/` | Brand assets |
46
+ | `ui_kits/{{platforms_first}}/` | Reference UI compositions |
47
+
48
+ ## How to extend
49
+
50
+ If a canvas iteration needs a value not currently in the system, **extend `colors_and_type.css` first**. Adding a new variant of an existing token (e.g. `--accent-tertiary`) is fine; adding a parallel accent family (e.g. `--accent2`) violates the one-accent rule and the completeness-critic will block.