@aexol/spectral 0.9.230 → 0.9.231

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 (172) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/designer/data/skills/blog-post.d.ts +3 -0
  3. package/dist/designer/data/skills/blog-post.d.ts.map +1 -0
  4. package/dist/designer/data/skills/blog-post.js +84 -0
  5. package/dist/designer/data/skills/blog-post.ts +87 -0
  6. package/dist/designer/data/skills/critique.d.ts +3 -0
  7. package/dist/designer/data/skills/critique.d.ts.map +1 -0
  8. package/dist/designer/data/skills/critique.js +109 -0
  9. package/dist/designer/data/skills/critique.ts +112 -0
  10. package/dist/designer/data/skills/dashboard.d.ts +3 -0
  11. package/dist/designer/data/skills/dashboard.d.ts.map +1 -0
  12. package/dist/designer/data/skills/dashboard.js +165 -0
  13. package/dist/designer/data/skills/dashboard.ts +168 -0
  14. package/dist/designer/data/skills/design-brief.d.ts +3 -0
  15. package/dist/designer/data/skills/design-brief.d.ts.map +1 -0
  16. package/dist/designer/data/skills/design-brief.js +141 -0
  17. package/dist/designer/data/skills/design-brief.ts +144 -0
  18. package/dist/designer/data/skills/design-skill.d.ts +10 -0
  19. package/dist/designer/data/skills/design-skill.d.ts.map +1 -0
  20. package/dist/designer/data/skills/design-skill.js +1 -0
  21. package/dist/designer/data/skills/design-skill.ts +9 -0
  22. package/dist/designer/data/skills/docs-page.d.ts +3 -0
  23. package/dist/designer/data/skills/docs-page.d.ts.map +1 -0
  24. package/dist/designer/data/skills/docs-page.js +68 -0
  25. package/dist/designer/data/skills/docs-page.ts +71 -0
  26. package/dist/designer/data/skills/index.d.ts +3 -0
  27. package/dist/designer/data/skills/index.d.ts.map +1 -0
  28. package/dist/designer/data/skills/index.js +28 -0
  29. package/dist/designer/data/skills/index.ts +30 -0
  30. package/dist/designer/data/skills/magazine-poster.d.ts +3 -0
  31. package/dist/designer/data/skills/magazine-poster.d.ts.map +1 -0
  32. package/dist/designer/data/skills/magazine-poster.js +70 -0
  33. package/dist/designer/data/skills/magazine-poster.ts +73 -0
  34. package/dist/designer/data/skills/mobile-app.d.ts +3 -0
  35. package/dist/designer/data/skills/mobile-app.d.ts.map +1 -0
  36. package/dist/designer/data/skills/mobile-app.js +229 -0
  37. package/dist/designer/data/skills/mobile-app.ts +232 -0
  38. package/dist/designer/data/skills/motion-frames.d.ts +3 -0
  39. package/dist/designer/data/skills/motion-frames.d.ts.map +1 -0
  40. package/dist/designer/data/skills/motion-frames.js +121 -0
  41. package/dist/designer/data/skills/motion-frames.ts +124 -0
  42. package/dist/designer/data/skills/pricing-page.d.ts +3 -0
  43. package/dist/designer/data/skills/pricing-page.d.ts.map +1 -0
  44. package/dist/designer/data/skills/pricing-page.js +76 -0
  45. package/dist/designer/data/skills/pricing-page.ts +79 -0
  46. package/dist/designer/data/skills/saas-landing.d.ts +3 -0
  47. package/dist/designer/data/skills/saas-landing.d.ts.map +1 -0
  48. package/dist/designer/data/skills/saas-landing.js +71 -0
  49. package/dist/designer/data/skills/saas-landing.ts +74 -0
  50. package/dist/designer/data/skills/slide-deck.d.ts +3 -0
  51. package/dist/designer/data/skills/slide-deck.d.ts.map +1 -0
  52. package/dist/designer/data/skills/slide-deck.js +213 -0
  53. package/dist/designer/data/skills/slide-deck.ts +216 -0
  54. package/dist/designer/data/skills/social-carousel.d.ts +3 -0
  55. package/dist/designer/data/skills/social-carousel.d.ts.map +1 -0
  56. package/dist/designer/data/skills/social-carousel.js +135 -0
  57. package/dist/designer/data/skills/social-carousel.ts +138 -0
  58. package/dist/designer/data/skills/web-prototype.d.ts +3 -0
  59. package/dist/designer/data/skills/web-prototype.d.ts.map +1 -0
  60. package/dist/designer/data/skills/web-prototype.js +159 -0
  61. package/dist/designer/data/skills/web-prototype.ts +162 -0
  62. package/dist/designer/skills.d.ts +4 -10
  63. package/dist/designer/skills.d.ts.map +1 -1
  64. package/dist/designer/skills.js +2 -1643
  65. package/dist/extensions/wizard/index.js +9 -1
  66. package/dist/generated/parser/ast/nodes.d.ts +115 -0
  67. package/dist/generated/parser/ast/nodes.d.ts.map +1 -0
  68. package/dist/generated/parser/ast/nodes.js +8 -0
  69. package/dist/generated/parser/lexer/lexer.d.ts +28 -0
  70. package/dist/generated/parser/lexer/lexer.d.ts.map +1 -0
  71. package/dist/generated/parser/{lexer.js → lexer/lexer.js} +1 -180
  72. package/dist/generated/parser/{lexer.d.ts → lexer/tokens.d.ts} +5 -24
  73. package/dist/generated/parser/lexer/tokens.d.ts.map +1 -0
  74. package/dist/generated/parser/lexer/tokens.js +187 -0
  75. package/dist/generated/parser/mod.d.ts +5 -7
  76. package/dist/generated/parser/mod.d.ts.map +1 -1
  77. package/dist/generated/parser/mod.js +2 -1
  78. package/dist/generated/parser/parser/cursor.d.ts +47 -0
  79. package/dist/generated/parser/parser/cursor.d.ts.map +1 -0
  80. package/dist/generated/parser/parser/cursor.js +12 -0
  81. package/dist/generated/parser/parser/definitions.d.ts +16 -0
  82. package/dist/generated/parser/parser/definitions.d.ts.map +1 -0
  83. package/dist/generated/parser/parser/definitions.js +353 -0
  84. package/dist/generated/parser/parser/expressions.d.ts +17 -0
  85. package/dist/generated/parser/parser/expressions.d.ts.map +1 -0
  86. package/dist/generated/parser/parser/expressions.js +165 -0
  87. package/dist/generated/parser/parser.d.ts +18 -133
  88. package/dist/generated/parser/parser.d.ts.map +1 -1
  89. package/dist/generated/parser/parser.js +9 -505
  90. package/dist/generated/parser/tokenizer.d.ts +1 -2
  91. package/dist/generated/parser/tokenizer.d.ts.map +1 -1
  92. package/dist/generated/parser/tokenizer.js +2 -1
  93. package/dist/generated/parser/validator.d.ts +1 -1
  94. package/dist/generated/parser/validator.d.ts.map +1 -1
  95. package/dist/mcp/glimpse-ui.js +9 -1
  96. package/dist/relay/dispatcher.d.ts +11 -104
  97. package/dist/relay/dispatcher.d.ts.map +1 -1
  98. package/dist/relay/dispatcher.js +10 -1130
  99. package/dist/relay/rest.d.ts +31 -0
  100. package/dist/relay/rest.d.ts.map +1 -0
  101. package/dist/relay/rest.js +85 -0
  102. package/dist/relay/routing.d.ts +109 -0
  103. package/dist/relay/routing.d.ts.map +1 -0
  104. package/dist/relay/routing.js +669 -0
  105. package/dist/relay/wizard-login.d.ts +17 -0
  106. package/dist/relay/wizard-login.d.ts.map +1 -0
  107. package/dist/relay/wizard-login.js +419 -0
  108. package/dist/sdk/agent-core/agent-loop.d.ts +2 -9
  109. package/dist/sdk/agent-core/agent-loop.d.ts.map +1 -1
  110. package/dist/sdk/agent-core/agent-loop.js +4 -288
  111. package/dist/sdk/agent-core/tool-execution.d.ts +33 -0
  112. package/dist/sdk/agent-core/tool-execution.d.ts.map +1 -0
  113. package/dist/sdk/agent-core/tool-execution.js +300 -0
  114. package/dist/sdk/ai/env-api-keys.js +9 -1
  115. package/dist/sdk/ai/providers/openai/reasoning-replay.d.ts +48 -0
  116. package/dist/sdk/ai/providers/openai/reasoning-replay.d.ts.map +1 -0
  117. package/dist/sdk/ai/providers/openai/reasoning-replay.js +209 -0
  118. package/dist/sdk/ai/providers/openai-completions.d.ts.map +1 -1
  119. package/dist/sdk/ai/providers/openai-completions.js +1 -203
  120. package/dist/sdk/coding-agent/core/compaction/compaction.d.ts +6 -118
  121. package/dist/sdk/coding-agent/core/compaction/compaction.d.ts.map +1 -1
  122. package/dist/sdk/coding-agent/core/compaction/compaction.js +11 -733
  123. package/dist/sdk/coding-agent/core/compaction/cut-points.d.ts +58 -0
  124. package/dist/sdk/coding-agent/core/compaction/cut-points.d.ts.map +1 -0
  125. package/dist/sdk/coding-agent/core/compaction/cut-points.js +191 -0
  126. package/dist/sdk/coding-agent/core/compaction/dedupe.d.ts +28 -0
  127. package/dist/sdk/coding-agent/core/compaction/dedupe.d.ts.map +1 -0
  128. package/dist/sdk/coding-agent/core/compaction/dedupe.js +156 -0
  129. package/dist/sdk/coding-agent/core/compaction/summarize.d.ts +21 -0
  130. package/dist/sdk/coding-agent/core/compaction/summarize.d.ts.map +1 -0
  131. package/dist/sdk/coding-agent/core/compaction/summarize.js +181 -0
  132. package/dist/sdk/coding-agent/core/compaction/tokens.d.ts +47 -0
  133. package/dist/sdk/coding-agent/core/compaction/tokens.d.ts.map +1 -0
  134. package/dist/sdk/coding-agent/core/compaction/tokens.js +224 -0
  135. package/dist/sdk/coding-agent/core/extensions/session-events.d.ts +157 -0
  136. package/dist/sdk/coding-agent/core/extensions/session-events.d.ts.map +1 -0
  137. package/dist/sdk/coding-agent/core/extensions/session-events.js +13 -0
  138. package/dist/sdk/coding-agent/core/extensions/types.d.ts +6 -365
  139. package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -1
  140. package/dist/sdk/coding-agent/core/extensions/types.js +2 -10
  141. package/dist/sdk/coding-agent/core/extensions/ui-types.d.ts +219 -0
  142. package/dist/sdk/coding-agent/core/extensions/ui-types.d.ts.map +1 -0
  143. package/dist/sdk/coding-agent/core/extensions/ui-types.js +4 -0
  144. package/dist/sdk/coding-agent/core/package/default-package-manager.d.ts +115 -0
  145. package/dist/sdk/coding-agent/core/package/default-package-manager.d.ts.map +1 -0
  146. package/dist/sdk/coding-agent/core/package/default-package-manager.js +1184 -0
  147. package/dist/sdk/coding-agent/core/package/discovery.d.ts +20 -0
  148. package/dist/sdk/coding-agent/core/package/discovery.d.ts.map +1 -0
  149. package/dist/sdk/coding-agent/core/package/discovery.js +283 -0
  150. package/dist/sdk/coding-agent/core/package/ignore.d.ts +29 -0
  151. package/dist/sdk/coding-agent/core/package/ignore.d.ts.map +1 -0
  152. package/dist/sdk/coding-agent/core/package/ignore.js +235 -0
  153. package/dist/sdk/coding-agent/core/package/types.d.ts +128 -0
  154. package/dist/sdk/coding-agent/core/package/types.d.ts.map +1 -0
  155. package/dist/sdk/coding-agent/core/package/types.js +18 -0
  156. package/dist/sdk/coding-agent/core/package/update-check.d.ts +43 -0
  157. package/dist/sdk/coding-agent/core/package/update-check.d.ts.map +1 -0
  158. package/dist/sdk/coding-agent/core/package/update-check.js +253 -0
  159. package/dist/sdk/coding-agent/core/package-manager.d.ts +2 -188
  160. package/dist/sdk/coding-agent/core/package-manager.d.ts.map +1 -1
  161. package/dist/sdk/coding-agent/core/package-manager.js +1 -1940
  162. package/dist/sdk/coding-agent/core/session/migrate.d.ts +18 -0
  163. package/dist/sdk/coding-agent/core/session/migrate.d.ts.map +1 -0
  164. package/dist/sdk/coding-agent/core/session/migrate.js +78 -0
  165. package/dist/sdk/coding-agent/core/session/types.d.ts +165 -0
  166. package/dist/sdk/coding-agent/core/session/types.d.ts.map +1 -0
  167. package/dist/sdk/coding-agent/core/session/types.js +4 -0
  168. package/dist/sdk/coding-agent/core/session-manager.d.ts +3 -161
  169. package/dist/sdk/coding-agent/core/session-manager.d.ts.map +1 -1
  170. package/dist/sdk/coding-agent/core/session-manager.js +4 -72
  171. package/package.json +2 -2
  172. package/dist/generated/parser/lexer.d.ts.map +0 -1
@@ -0,0 +1,168 @@
1
+ import type { DesignSkill } from "./design-skill.js";
2
+
3
+ export const dashboard: DesignSkill = {
4
+ name: "dashboard",
5
+ scenario: "design",
6
+ description:
7
+ "Data dashboard with cards, charts, tables, and KPIs. Clean information hierarchy with grid layout.",
8
+ outputKind: "html",
9
+ workflow: `# Dashboard Skill
10
+
11
+ Produce a data dashboard as a single HTML file. Card-based layout with KPIs, charts (CSS-only or SVG), tables, and activity feeds.
12
+
13
+ ## Phase 0 — Pre-flight
14
+
15
+ 1. Read the design system. Dashboards work best with clean, muted systems (Linear, Notion, Vercel).
16
+ 2. Determine: dashboard name, key metrics, sections needed.
17
+ 3. Vocalize: "I'll build a [name] dashboard with [N] sections: [section names]."
18
+
19
+ ## Phase 1 — Shell
20
+
21
+ Create \`dashboard.html\` with sidebar + main content layout:
22
+
23
+ \`\`\`html
24
+ <!doctype html>
25
+ <html lang="en">
26
+ <head>
27
+ <meta charset="utf-8">
28
+ <meta name="viewport" content="width=device-width, initial-scale=1">
29
+ <title>Dashboard</title>
30
+ <style>
31
+ *, *::before, *::after { box-sizing: border-box; margin: 0; }
32
+
33
+ :root {
34
+ --sidebar-w: 240px;
35
+ /* Design system tokens */
36
+ }
37
+
38
+ body {
39
+ display: flex;
40
+ min-height: 100vh;
41
+ font-family: var(--font-sans);
42
+ background: var(--color-bg-secondary);
43
+ color: var(--color-text-primary);
44
+ }
45
+
46
+ .sidebar {
47
+ width: var(--sidebar-w);
48
+ background: var(--color-bg-primary);
49
+ border-right: 1px solid var(--color-border);
50
+ padding: 24px 16px;
51
+ display: flex;
52
+ flex-direction: column;
53
+ position: sticky;
54
+ top: 0;
55
+ height: 100vh;
56
+ }
57
+ .sidebar-logo { font-size: 18px; font-weight: 700; margin-bottom: 32px; }
58
+ .sidebar-nav { display: flex; flex-direction: column; gap: 2px; }
59
+ .sidebar-link {
60
+ padding: 8px 12px;
61
+ border-radius: 6px;
62
+ font-size: 14px;
63
+ color: var(--color-text-secondary);
64
+ text-decoration: none;
65
+ cursor: pointer;
66
+ }
67
+ .sidebar-link:hover, .sidebar-link.active { background: var(--color-bg-hover, rgba(0,0,0,0.04)); color: var(--color-text-primary); }
68
+
69
+ .main {
70
+ flex: 1;
71
+ padding: 32px;
72
+ overflow-y: auto;
73
+ }
74
+ .main-header { margin-bottom: 32px; }
75
+ .main-header h1 { font-size: 28px; font-weight: 700; }
76
+ .main-header p { color: var(--color-text-secondary); margin-top: 4px; }
77
+ </style>
78
+ </head>
79
+ <body>
80
+ <aside class="sidebar">
81
+ <div class="sidebar-logo">Dashboard</div>
82
+ <nav class="sidebar-nav">
83
+ <a class="sidebar-link active">Overview</a>
84
+ <a class="sidebar-link">Analytics</a>
85
+ <a class="sidebar-link">Reports</a>
86
+ <a class="sidebar-link">Settings</a>
87
+ </nav>
88
+ </aside>
89
+ <main class="main">
90
+ <div class="main-header">
91
+ <h1>Overview</h1>
92
+ <p>Last updated: just now</p>
93
+ </div>
94
+ <!-- Content sections here -->
95
+ </main>
96
+ </body>
97
+ </html>
98
+ \`\`\`
99
+
100
+ ## Phase 2 — Component Patterns
101
+
102
+ ### KPI Cards (4-up row)
103
+ \`\`\`css
104
+ .kpi-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 32px; }
105
+ .kpi-card { background: var(--color-bg-surface); border: 1px solid var(--color-border); border-radius: var(--radius, 8px); padding: 20px; }
106
+ .kpi-label { font-size: 13px; color: var(--color-text-secondary); font-weight: 500; text-transform: uppercase; letter-spacing: 0.05em; }
107
+ .kpi-value { font-size: 32px; font-weight: 700; margin-top: 8px; }
108
+ .kpi-change { font-size: 13px; margin-top: 4px; }
109
+ .kpi-change.up { color: var(--color-success, #30a46c); }
110
+ .kpi-change.down { color: var(--color-danger, #e5484d); }
111
+ \`\`\`
112
+
113
+ ### Chart (CSS-only bar chart)
114
+ \`\`\`css
115
+ .chart-card { background: var(--color-bg-surface); border: 1px solid var(--color-border); border-radius: var(--radius, 8px); padding: 24px; margin-bottom: 24px; }
116
+ .chart-card h3 { font-size: 16px; font-weight: 600; margin-bottom: 20px; }
117
+ .bar-chart { display: flex; align-items: flex-end; gap: 12px; height: 200px; padding-top: 8px; }
118
+ .bar { flex: 1; border-radius: 4px 4px 0 0; background: var(--color-accent); min-height: 4px; position: relative; transition: height 0.3s; }
119
+ .bar:hover { opacity: 0.8; }
120
+ .bar-label { position: absolute; bottom: -20px; left: 0; right: 0; text-align: center; font-size: 11px; color: var(--color-text-secondary); }
121
+ \`\`\`
122
+
123
+ ### Table
124
+ \`\`\`css
125
+ .data-table { width: 100%; border-collapse: collapse; font-size: 14px; }
126
+ .data-table th { text-align: left; padding: 12px 16px; font-weight: 600; color: var(--color-text-secondary); font-size: 12px; text-transform: uppercase; letter-spacing: 0.05em; border-bottom: 1px solid var(--color-border); }
127
+ .data-table td { padding: 12px 16px; border-bottom: 1px solid var(--color-border); }
128
+ .data-table tr:hover td { background: var(--color-bg-hover, rgba(0,0,0,0.02)); }
129
+ \`\`\`
130
+
131
+ ### Activity Feed
132
+ \`\`\`css
133
+ .activity-feed { display: flex; flex-direction: column; }
134
+ .activity-item { display: flex; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--color-border); }
135
+ .activity-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--color-accent); margin-top: 6px; flex-shrink: 0; }
136
+ .activity-content { flex: 1; }
137
+ .activity-text { font-size: 14px; }
138
+ .activity-time { font-size: 12px; color: var(--color-text-secondary); margin-top: 2px; }
139
+ \`\`\`
140
+
141
+ ## Phase 3 — Layout Patterns
142
+
143
+ ### Two-column main area
144
+ \`\`\`css
145
+ .dashboard-grid { display: grid; grid-template-columns: 2fr 1fr; gap: 24px; }
146
+ \`\`\`
147
+
148
+ ### Responsive
149
+ \`\`\`css
150
+ @media (max-width: 1200px) {
151
+ .kpi-grid { grid-template-columns: repeat(2, 1fr); }
152
+ .dashboard-grid { grid-template-columns: 1fr; }
153
+ }
154
+ @media (max-width: 768px) {
155
+ .sidebar { display: none; }
156
+ .main { padding: 16px; }
157
+ .kpi-grid { grid-template-columns: 1fr; }
158
+ }
159
+ \`\`\`
160
+
161
+ ## Phase 4 — Dashboard Design Rules
162
+
163
+ - Information hierarchy: KPIs → Main chart → Detail tables → Activity
164
+ - Use consistent card padding (24px)
165
+ - Numbers should be right-aligned in table columns
166
+ - Color code only the most important KPI change (1-2 per row max)
167
+ - Tables: max 6 columns, zebra striping optional, hover row highlight`,
168
+ };
@@ -0,0 +1,3 @@
1
+ import type { DesignSkill } from "./design-skill.js";
2
+ export declare const designBrief: DesignSkill;
3
+ //# sourceMappingURL=design-brief.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-brief.d.ts","sourceRoot":"","sources":["../../../../src/designer/data/skills/design-brief.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,WAAW,EAAE,WA6IvB,CAAC"}
@@ -0,0 +1,141 @@
1
+ export const designBrief = {
2
+ name: "design-brief",
3
+ scenario: "design",
4
+ description: "Parse a design brief into concrete tokens. Resolves 8 design dimensions (palette, accent, typography, display, layout, mood, density, constraints) from natural language or I-Lang structured format, then generates a DESIGN.md and visual preview.",
5
+ outputKind: "html",
6
+ workflow: `# Design Brief Skill
7
+
8
+ Parse a structured or natural-language design brief into a concrete DESIGN.md and optional visual preview HTML.
9
+
10
+ ## Background
11
+
12
+ This skill resolves the 8 key design dimensions that every design artifact needs, using a closed vocabulary of symbolic values that map to concrete CSS tokens. It eliminates ambiguity from vague requests like "make it clean" or "make it professional."
13
+
14
+ ## Phase 1 — Accept input
15
+
16
+ The user provides a design brief in one of two formats:
17
+
18
+ ### Option A: I-Lang structured brief
19
+ \`\`\`
20
+ [PLAN:@DESIGN|type=saas_landing]
21
+ |palette=navy_and_white|accent=coral
22
+ |typography=inter|display=space_grotesk
23
+ |layout=single_column|max_width=1200px
24
+ |mood=professional_minimal
25
+ |density=spacious|section_gap=96px
26
+ |hero=headline+subhead+cta
27
+ |sections=features,pricing,testimonials,footer
28
+ |exclude=animations,parallax,gradients
29
+ |responsive=mobile_first
30
+ \`\`\`
31
+
32
+ ### Option B: Natural language
33
+ > "I need a landing page for a developer tool. Clean, minimal, dark mode. Inter font. No flashy animations."
34
+
35
+ If the user provides Option B, convert it using the mapping table below, then proceed.
36
+
37
+ ### Natural language → I-Lang mapping
38
+
39
+ | Natural language phrase | Dimension | I-Lang value |
40
+ |------------------------|-----------|-------------|
41
+ | "dark mode", "dark theme" | palette | \`monochrome_dark\` |
42
+ | "light", "white background" | palette | \`light_clean\` |
43
+ | "earthy", "warm tones" | palette | \`earth_tones\` |
44
+ | "pop of color", "vibrant" | accent | \`electric_blue\` or \`coral\` |
45
+ | "subtle accent" | accent | \`muted_sage\` or \`slate\` |
46
+ | "clean", "minimal", "simple" | mood | \`professional_minimal\` |
47
+ | "playful", "fun", "friendly" | mood | \`playful\` |
48
+ | "bold", "brutalist", "raw" | mood | \`brutalist\` |
49
+ | "editorial", "magazine-like" | mood | \`editorial\` |
50
+ | "spacious", "lots of whitespace" | density | \`spacious\` |
51
+ | "compact", "dense", "information-rich" | density | \`compact\` |
52
+ | "Inter", "system font" | typography | \`inter\` or \`system_ui\` |
53
+ | "serif", "traditional" | typography | \`georgia\` or \`playfair\` |
54
+ | "monospace", "code-like" | typography | \`jetbrains_mono\` |
55
+ | "no animations", "static" | exclude | \`animations\` |
56
+ | "no gradients" | exclude | \`gradients\` |
57
+ | "single page" | layout | \`single_column\` |
58
+ | "two columns", "sidebar" | layout | \`two_column\` |
59
+ | "mobile first" | responsive | \`mobile_first\` |
60
+
61
+ ## Phase 2 — Validate 8 dimensions
62
+
63
+ Every design brief must resolve these 8 dimensions. If any are missing, select sensible defaults:
64
+
65
+ | # | Dimension | Key | Example values |
66
+ |---|-----------|-----|---------------|
67
+ | 1 | Color palette | \`palette\` | navy_and_white, earth_tones, monochrome_dark, light_clean |
68
+ | 2 | Accent color | \`accent\` | coral, electric_blue, emerald, muted_sage, slate |
69
+ | 3 | Body typography | \`typography\` | inter, system_ui, dm_sans, georgia |
70
+ | 4 | Display typography | \`display\` | space_grotesk, clash_display, same_as_body, playfair |
71
+ | 5 | Layout model | \`layout\` | single_column, two_column, asymmetric |
72
+ | 6 | Mood | \`mood\` | professional_minimal, playful, brutalist, editorial |
73
+ | 7 | Density | \`density\` | compact, balanced, spacious |
74
+ | 8 | Constraints | \`exclude\` | animations, gradients, stock_photos, carousel |
75
+
76
+ ### Symbolic → concrete token resolution
77
+
78
+ | Symbolic value | Concrete tokens |
79
+ |---------------|----------------|
80
+ | \`palette=navy_and_white\` | Background: #0F172A, Surface: #1E293B, Text: #F8FAFC, Secondary: #94A3B8 |
81
+ | \`palette=monochrome_dark\` | Background: #09090B, Surface: #18181B, Text: #FAFAFA, Secondary: #A1A1AA |
82
+ | \`palette=light_clean\` | Background: #FFFFFF, Surface: #F8FAFC, Text: #0F172A, Secondary: #64748B |
83
+ | \`palette=earth_tones\` | Background: #FFFBEB, Surface: #FEF3C7, Text: #451A03, Secondary: #92400E |
84
+ | \`accent=coral\` | Accent: #F97316, Hover: #EA580C |
85
+ | \`accent=electric_blue\` | Accent: #3B82F6, Hover: #2563EB |
86
+ | \`accent=emerald\` | Accent: #10B981, Hover: #059669 |
87
+ | \`accent=muted_sage\` | Accent: #84A98C, Hover: #6B8F73 |
88
+ | \`accent=slate\` | Accent: #64748B, Hover: #475569 |
89
+ | \`density=compact\` | Section spacing: 48px, Content padding: 16px/24px |
90
+ | \`density=balanced\` | Section spacing: 72px, Content padding: 24px/40px |
91
+ | \`density=spacious\` | Section spacing: 96px, Content padding: 24px/48px |
92
+
93
+ ### Default resolution rules
94
+
95
+ | Unspecified dimension | Default rule |
96
+ |----------------------|-------------|
97
+ | \`palette\` | If mood=editorial → \`light_clean\`. If mood=brutalist → \`monochrome_dark\`. Else → \`light_clean\`. |
98
+ | \`accent\` | If palette is dark → \`coral\`. If palette is light → \`electric_blue\`. |
99
+ | \`typography\` | Always → \`inter\` (highest cross-platform legibility). |
100
+ | \`display\` | If mood=editorial → \`playfair\`. If mood=brutalist → \`space_grotesk\`. Else → \`same_as_body\`. |
101
+ | \`layout\` | Always → \`single_column\`. |
102
+ | \`mood\` | Always → \`professional_minimal\`. |
103
+ | \`density\` | Always → \`balanced\`. |
104
+ | \`exclude\` | Always → none (no constraints unless specified). |
105
+
106
+ ## Phase 3 — Generate DESIGN.md
107
+
108
+ Produce a DESIGN.md with these sections:
109
+ 1. **Visual Theme & Atmosphere** — mood, feel, references
110
+ 2. **Color Palette & Roles** — background, surface, text, accent, semantic colors
111
+ 3. **Typography Rules** — display, body, mono font specs with sizes
112
+ 4. **Component Stylings** — buttons, cards, inputs with concrete CSS values
113
+ 5. **Layout Principles** — max width, grid, section spacing, content padding
114
+ 6. **Depth & Elevation** — shadows, borders
115
+ 7. **Do's and Don'ts** — 5-6 rules for agents
116
+ 8. **Responsive Behavior** — breakpoints at 640px, 768px, 1024px, 1280px
117
+ 9. **Agent Prompt Guide** — constraints for code generation
118
+
119
+ All color hex values, font stacks, and spacing values must come from the resolved tokens in Phase 2 — do not invent values.
120
+
121
+ ## Phase 4 — Generate brief-preview.html
122
+
123
+ Create a single HTML file visualizing the resolved tokens with 4 sections:
124
+ 1. **Color palette swatches** — labeled with role and hex code
125
+ 2. **Typography specimens** — Display, Body, and Mono at declared sizes
126
+ 3. **Spacing ruler** — section spacing and content padding, labeled
127
+ 4. **Component preview** — 2-3 live components (button, card, input) using the resolved tokens
128
+
129
+ Style the preview itself with the resolved design system tokens.
130
+
131
+ ## Phase 5 — Report defaults applied
132
+
133
+ List any dimensions the user did not specify and the defaults applied:
134
+ \`\`\`
135
+ Dimensions resolved from defaults:
136
+ - display: set to "same_as_body" (rule: mood=professional_minimal → same_as_body)
137
+ - density: set to "balanced" (rule: no spacing preference given)
138
+ \`\`\`
139
+
140
+ This transparency prevents silent assumptions from propagating into the final design.`,
141
+ };
@@ -0,0 +1,144 @@
1
+ import type { DesignSkill } from "./design-skill.js";
2
+
3
+ export const designBrief: DesignSkill = {
4
+ name: "design-brief",
5
+ scenario: "design",
6
+ description:
7
+ "Parse a design brief into concrete tokens. Resolves 8 design dimensions (palette, accent, typography, display, layout, mood, density, constraints) from natural language or I-Lang structured format, then generates a DESIGN.md and visual preview.",
8
+ outputKind: "html",
9
+ workflow: `# Design Brief Skill
10
+
11
+ Parse a structured or natural-language design brief into a concrete DESIGN.md and optional visual preview HTML.
12
+
13
+ ## Background
14
+
15
+ This skill resolves the 8 key design dimensions that every design artifact needs, using a closed vocabulary of symbolic values that map to concrete CSS tokens. It eliminates ambiguity from vague requests like "make it clean" or "make it professional."
16
+
17
+ ## Phase 1 — Accept input
18
+
19
+ The user provides a design brief in one of two formats:
20
+
21
+ ### Option A: I-Lang structured brief
22
+ \`\`\`
23
+ [PLAN:@DESIGN|type=saas_landing]
24
+ |palette=navy_and_white|accent=coral
25
+ |typography=inter|display=space_grotesk
26
+ |layout=single_column|max_width=1200px
27
+ |mood=professional_minimal
28
+ |density=spacious|section_gap=96px
29
+ |hero=headline+subhead+cta
30
+ |sections=features,pricing,testimonials,footer
31
+ |exclude=animations,parallax,gradients
32
+ |responsive=mobile_first
33
+ \`\`\`
34
+
35
+ ### Option B: Natural language
36
+ > "I need a landing page for a developer tool. Clean, minimal, dark mode. Inter font. No flashy animations."
37
+
38
+ If the user provides Option B, convert it using the mapping table below, then proceed.
39
+
40
+ ### Natural language → I-Lang mapping
41
+
42
+ | Natural language phrase | Dimension | I-Lang value |
43
+ |------------------------|-----------|-------------|
44
+ | "dark mode", "dark theme" | palette | \`monochrome_dark\` |
45
+ | "light", "white background" | palette | \`light_clean\` |
46
+ | "earthy", "warm tones" | palette | \`earth_tones\` |
47
+ | "pop of color", "vibrant" | accent | \`electric_blue\` or \`coral\` |
48
+ | "subtle accent" | accent | \`muted_sage\` or \`slate\` |
49
+ | "clean", "minimal", "simple" | mood | \`professional_minimal\` |
50
+ | "playful", "fun", "friendly" | mood | \`playful\` |
51
+ | "bold", "brutalist", "raw" | mood | \`brutalist\` |
52
+ | "editorial", "magazine-like" | mood | \`editorial\` |
53
+ | "spacious", "lots of whitespace" | density | \`spacious\` |
54
+ | "compact", "dense", "information-rich" | density | \`compact\` |
55
+ | "Inter", "system font" | typography | \`inter\` or \`system_ui\` |
56
+ | "serif", "traditional" | typography | \`georgia\` or \`playfair\` |
57
+ | "monospace", "code-like" | typography | \`jetbrains_mono\` |
58
+ | "no animations", "static" | exclude | \`animations\` |
59
+ | "no gradients" | exclude | \`gradients\` |
60
+ | "single page" | layout | \`single_column\` |
61
+ | "two columns", "sidebar" | layout | \`two_column\` |
62
+ | "mobile first" | responsive | \`mobile_first\` |
63
+
64
+ ## Phase 2 — Validate 8 dimensions
65
+
66
+ Every design brief must resolve these 8 dimensions. If any are missing, select sensible defaults:
67
+
68
+ | # | Dimension | Key | Example values |
69
+ |---|-----------|-----|---------------|
70
+ | 1 | Color palette | \`palette\` | navy_and_white, earth_tones, monochrome_dark, light_clean |
71
+ | 2 | Accent color | \`accent\` | coral, electric_blue, emerald, muted_sage, slate |
72
+ | 3 | Body typography | \`typography\` | inter, system_ui, dm_sans, georgia |
73
+ | 4 | Display typography | \`display\` | space_grotesk, clash_display, same_as_body, playfair |
74
+ | 5 | Layout model | \`layout\` | single_column, two_column, asymmetric |
75
+ | 6 | Mood | \`mood\` | professional_minimal, playful, brutalist, editorial |
76
+ | 7 | Density | \`density\` | compact, balanced, spacious |
77
+ | 8 | Constraints | \`exclude\` | animations, gradients, stock_photos, carousel |
78
+
79
+ ### Symbolic → concrete token resolution
80
+
81
+ | Symbolic value | Concrete tokens |
82
+ |---------------|----------------|
83
+ | \`palette=navy_and_white\` | Background: #0F172A, Surface: #1E293B, Text: #F8FAFC, Secondary: #94A3B8 |
84
+ | \`palette=monochrome_dark\` | Background: #09090B, Surface: #18181B, Text: #FAFAFA, Secondary: #A1A1AA |
85
+ | \`palette=light_clean\` | Background: #FFFFFF, Surface: #F8FAFC, Text: #0F172A, Secondary: #64748B |
86
+ | \`palette=earth_tones\` | Background: #FFFBEB, Surface: #FEF3C7, Text: #451A03, Secondary: #92400E |
87
+ | \`accent=coral\` | Accent: #F97316, Hover: #EA580C |
88
+ | \`accent=electric_blue\` | Accent: #3B82F6, Hover: #2563EB |
89
+ | \`accent=emerald\` | Accent: #10B981, Hover: #059669 |
90
+ | \`accent=muted_sage\` | Accent: #84A98C, Hover: #6B8F73 |
91
+ | \`accent=slate\` | Accent: #64748B, Hover: #475569 |
92
+ | \`density=compact\` | Section spacing: 48px, Content padding: 16px/24px |
93
+ | \`density=balanced\` | Section spacing: 72px, Content padding: 24px/40px |
94
+ | \`density=spacious\` | Section spacing: 96px, Content padding: 24px/48px |
95
+
96
+ ### Default resolution rules
97
+
98
+ | Unspecified dimension | Default rule |
99
+ |----------------------|-------------|
100
+ | \`palette\` | If mood=editorial → \`light_clean\`. If mood=brutalist → \`monochrome_dark\`. Else → \`light_clean\`. |
101
+ | \`accent\` | If palette is dark → \`coral\`. If palette is light → \`electric_blue\`. |
102
+ | \`typography\` | Always → \`inter\` (highest cross-platform legibility). |
103
+ | \`display\` | If mood=editorial → \`playfair\`. If mood=brutalist → \`space_grotesk\`. Else → \`same_as_body\`. |
104
+ | \`layout\` | Always → \`single_column\`. |
105
+ | \`mood\` | Always → \`professional_minimal\`. |
106
+ | \`density\` | Always → \`balanced\`. |
107
+ | \`exclude\` | Always → none (no constraints unless specified). |
108
+
109
+ ## Phase 3 — Generate DESIGN.md
110
+
111
+ Produce a DESIGN.md with these sections:
112
+ 1. **Visual Theme & Atmosphere** — mood, feel, references
113
+ 2. **Color Palette & Roles** — background, surface, text, accent, semantic colors
114
+ 3. **Typography Rules** — display, body, mono font specs with sizes
115
+ 4. **Component Stylings** — buttons, cards, inputs with concrete CSS values
116
+ 5. **Layout Principles** — max width, grid, section spacing, content padding
117
+ 6. **Depth & Elevation** — shadows, borders
118
+ 7. **Do's and Don'ts** — 5-6 rules for agents
119
+ 8. **Responsive Behavior** — breakpoints at 640px, 768px, 1024px, 1280px
120
+ 9. **Agent Prompt Guide** — constraints for code generation
121
+
122
+ All color hex values, font stacks, and spacing values must come from the resolved tokens in Phase 2 — do not invent values.
123
+
124
+ ## Phase 4 — Generate brief-preview.html
125
+
126
+ Create a single HTML file visualizing the resolved tokens with 4 sections:
127
+ 1. **Color palette swatches** — labeled with role and hex code
128
+ 2. **Typography specimens** — Display, Body, and Mono at declared sizes
129
+ 3. **Spacing ruler** — section spacing and content padding, labeled
130
+ 4. **Component preview** — 2-3 live components (button, card, input) using the resolved tokens
131
+
132
+ Style the preview itself with the resolved design system tokens.
133
+
134
+ ## Phase 5 — Report defaults applied
135
+
136
+ List any dimensions the user did not specify and the defaults applied:
137
+ \`\`\`
138
+ Dimensions resolved from defaults:
139
+ - display: set to "same_as_body" (rule: mood=professional_minimal → same_as_body)
140
+ - density: set to "balanced" (rule: no spacing preference given)
141
+ \`\`\`
142
+
143
+ This transparency prevents silent assumptions from propagating into the final design.`,
144
+ };
@@ -0,0 +1,10 @@
1
+ export interface DesignSkill {
2
+ name: string;
3
+ scenario: string;
4
+ description: string;
5
+ /** What kind of artifact this produces */
6
+ outputKind: "html" | "html-multi" | "slides";
7
+ /** The full workflow guide for the LLM */
8
+ workflow: string;
9
+ }
10
+ //# sourceMappingURL=design-skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-skill.d.ts","sourceRoot":"","sources":["../../../../src/designer/data/skills/design-skill.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC7C,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ export interface DesignSkill {
2
+ name: string;
3
+ scenario: string;
4
+ description: string;
5
+ /** What kind of artifact this produces */
6
+ outputKind: "html" | "html-multi" | "slides";
7
+ /** The full workflow guide for the LLM */
8
+ workflow: string;
9
+ }
@@ -0,0 +1,3 @@
1
+ import type { DesignSkill } from "./design-skill.js";
2
+ export declare const docsPage: DesignSkill;
3
+ //# sourceMappingURL=docs-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-page.d.ts","sourceRoot":"","sources":["../../../../src/designer/data/skills/docs-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,QAAQ,EAAE,WAoEpB,CAAC"}
@@ -0,0 +1,68 @@
1
+ export const docsPage = {
2
+ name: "docs-page",
3
+ scenario: "engineering",
4
+ description: "Documentation page — left sidebar nav (sticky), scrollable article body, right table of contents. Three-column layout with grouped navigation links, code blocks, callouts, and proper RTL support.",
5
+ outputKind: "html",
6
+ workflow: `# Docs Page Skill
7
+
8
+ Produce a single, three-column documentation page in one HTML file.
9
+
10
+ ## Phase 1 — Pre-flight
11
+
12
+ 1. Read the active design system. Use the body type token for prose; the mono token for code; respect line-height and max-width rules.
13
+ 2. Pick a concrete topic from the brief — the page should look like real docs, not a generic wireframe. Concrete API names, command examples, plausible parameters.
14
+
15
+ ## Phase 2 — Three-column layout
16
+
17
+ \`\`\`css
18
+ .docs-layout { display: grid; grid-template-columns: 260px minmax(0, 720px) 200px; gap: 0; min-height: 100vh; }
19
+
20
+ /* Left sidebar — sticky nav */
21
+ .docs-nav { position: sticky; top: 0; height: 100vh; overflow-y: auto; padding: 32px 24px; border-right: 1px solid var(--border); background: var(--bg); }
22
+ .docs-nav-group { margin-bottom: 24px; }
23
+ .docs-nav-group-title { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); margin-bottom: 8px; padding: 0 8px; }
24
+ .docs-nav-link { display: block; padding: 6px 8px; border-radius: 6px; font-size: 14px; color: var(--muted); text-decoration: none; }
25
+ .docs-nav-link:hover { color: var(--fg); background: var(--surface); }
26
+ .docs-nav-link.active { color: var(--fg); background: var(--surface); border-left: 2px solid var(--accent); margin-left: -2px; }
27
+
28
+ /* Article body */
29
+ .docs-article { padding: 48px 64px; max-width: 720px; }
30
+
31
+ /* Right TOC — sticky */
32
+ .docs-toc { position: sticky; top: 0; height: 100vh; overflow-y: auto; padding: 32px 16px; border-left: 1px solid var(--border); font-size: 13px; }
33
+ .docs-toc-title { font-weight: 600; margin-bottom: 12px; }
34
+ .docs-toc a { display: block; padding: 3px 0; color: var(--muted); text-decoration: none; }
35
+ .docs-toc a:hover, .docs-toc a.active { color: var(--accent); }
36
+ \`\`\`
37
+
38
+ ## Phase 3 — Article Components
39
+
40
+ ### Code blocks
41
+ \`\`\`css
42
+ pre { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 20px 24px; overflow-x: auto; font-family: var(--font-mono); font-size: 14px; line-height: 1.6; margin: 24px 0; }
43
+ code { font-family: var(--font-mono); font-size: 0.9em; background: var(--surface); padding: 2px 6px; border-radius: 4px; }
44
+ pre code { background: none; padding: 0; }
45
+ \`\`\`
46
+
47
+ ### Callout boxes
48
+ \`\`\`css
49
+ .callout { border-left: 4px solid var(--accent); background: color-mix(in oklab, var(--accent) 5%, var(--bg)); padding: 16px 20px; border-radius: 0 8px 8px 0; margin: 24px 0; font-size: 14px; }
50
+ .callout.warning { border-color: var(--warn, #f59e0b); background: color-mix(in oklab, var(--warn, #f59e0b) 5%, var(--bg)); }
51
+ .callout-title { font-weight: 600; margin-bottom: 4px; }
52
+ \`\`\`
53
+
54
+ ### Typography
55
+ \`\`\`css
56
+ .docs-article h1 { font-size: 32px; font-weight: 700; line-height: 1.2; letter-spacing: -0.02em; margin-bottom: 8px; }
57
+ .docs-article h2 { font-size: 24px; font-weight: 600; line-height: 1.3; margin-top: 48px; margin-bottom: 12px; padding-bottom: 8px; border-bottom: 1px solid var(--border); }
58
+ .docs-article h3 { font-size: 18px; font-weight: 600; margin-top: 32px; margin-bottom: 8px; }
59
+ .docs-article p { font-size: 16px; line-height: 1.7; margin: 12px 0; color: var(--fg); }
60
+ \`\`\`
61
+
62
+ ## Phase 4 — Content Rules
63
+ - Navigation: 3-5 groups of 4-8 links each
64
+ - Article: H1, lede paragraph, H2 sections, code blocks, callouts (note/warning), inline links, lists
65
+ - TOC: "On this page" with H2 anchors, current section highlighted on scroll
66
+ - Concrete content: specific API names, command examples, plausible parameters — not placeholders
67
+ - Respect RTL: layout expressed on the inline axis so it flips correctly under dir="rtl"`,
68
+ };
@@ -0,0 +1,71 @@
1
+ import type { DesignSkill } from "./design-skill.js";
2
+
3
+ export const docsPage: DesignSkill = {
4
+ name: "docs-page",
5
+ scenario: "engineering",
6
+ description:
7
+ "Documentation page — left sidebar nav (sticky), scrollable article body, right table of contents. Three-column layout with grouped navigation links, code blocks, callouts, and proper RTL support.",
8
+ outputKind: "html",
9
+ workflow: `# Docs Page Skill
10
+
11
+ Produce a single, three-column documentation page in one HTML file.
12
+
13
+ ## Phase 1 — Pre-flight
14
+
15
+ 1. Read the active design system. Use the body type token for prose; the mono token for code; respect line-height and max-width rules.
16
+ 2. Pick a concrete topic from the brief — the page should look like real docs, not a generic wireframe. Concrete API names, command examples, plausible parameters.
17
+
18
+ ## Phase 2 — Three-column layout
19
+
20
+ \`\`\`css
21
+ .docs-layout { display: grid; grid-template-columns: 260px minmax(0, 720px) 200px; gap: 0; min-height: 100vh; }
22
+
23
+ /* Left sidebar — sticky nav */
24
+ .docs-nav { position: sticky; top: 0; height: 100vh; overflow-y: auto; padding: 32px 24px; border-right: 1px solid var(--border); background: var(--bg); }
25
+ .docs-nav-group { margin-bottom: 24px; }
26
+ .docs-nav-group-title { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: var(--muted); margin-bottom: 8px; padding: 0 8px; }
27
+ .docs-nav-link { display: block; padding: 6px 8px; border-radius: 6px; font-size: 14px; color: var(--muted); text-decoration: none; }
28
+ .docs-nav-link:hover { color: var(--fg); background: var(--surface); }
29
+ .docs-nav-link.active { color: var(--fg); background: var(--surface); border-left: 2px solid var(--accent); margin-left: -2px; }
30
+
31
+ /* Article body */
32
+ .docs-article { padding: 48px 64px; max-width: 720px; }
33
+
34
+ /* Right TOC — sticky */
35
+ .docs-toc { position: sticky; top: 0; height: 100vh; overflow-y: auto; padding: 32px 16px; border-left: 1px solid var(--border); font-size: 13px; }
36
+ .docs-toc-title { font-weight: 600; margin-bottom: 12px; }
37
+ .docs-toc a { display: block; padding: 3px 0; color: var(--muted); text-decoration: none; }
38
+ .docs-toc a:hover, .docs-toc a.active { color: var(--accent); }
39
+ \`\`\`
40
+
41
+ ## Phase 3 — Article Components
42
+
43
+ ### Code blocks
44
+ \`\`\`css
45
+ pre { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 20px 24px; overflow-x: auto; font-family: var(--font-mono); font-size: 14px; line-height: 1.6; margin: 24px 0; }
46
+ code { font-family: var(--font-mono); font-size: 0.9em; background: var(--surface); padding: 2px 6px; border-radius: 4px; }
47
+ pre code { background: none; padding: 0; }
48
+ \`\`\`
49
+
50
+ ### Callout boxes
51
+ \`\`\`css
52
+ .callout { border-left: 4px solid var(--accent); background: color-mix(in oklab, var(--accent) 5%, var(--bg)); padding: 16px 20px; border-radius: 0 8px 8px 0; margin: 24px 0; font-size: 14px; }
53
+ .callout.warning { border-color: var(--warn, #f59e0b); background: color-mix(in oklab, var(--warn, #f59e0b) 5%, var(--bg)); }
54
+ .callout-title { font-weight: 600; margin-bottom: 4px; }
55
+ \`\`\`
56
+
57
+ ### Typography
58
+ \`\`\`css
59
+ .docs-article h1 { font-size: 32px; font-weight: 700; line-height: 1.2; letter-spacing: -0.02em; margin-bottom: 8px; }
60
+ .docs-article h2 { font-size: 24px; font-weight: 600; line-height: 1.3; margin-top: 48px; margin-bottom: 12px; padding-bottom: 8px; border-bottom: 1px solid var(--border); }
61
+ .docs-article h3 { font-size: 18px; font-weight: 600; margin-top: 32px; margin-bottom: 8px; }
62
+ .docs-article p { font-size: 16px; line-height: 1.7; margin: 12px 0; color: var(--fg); }
63
+ \`\`\`
64
+
65
+ ## Phase 4 — Content Rules
66
+ - Navigation: 3-5 groups of 4-8 links each
67
+ - Article: H1, lede paragraph, H2 sections, code blocks, callouts (note/warning), inline links, lists
68
+ - TOC: "On this page" with H2 anchors, current section highlighted on scroll
69
+ - Concrete content: specific API names, command examples, plausible parameters — not placeholders
70
+ - Respect RTL: layout expressed on the inline axis so it flips correctly under dir="rtl"`,
71
+ };
@@ -0,0 +1,3 @@
1
+ import type { DesignSkill } from "./design-skill.js";
2
+ export declare const DESIGN_SKILLS: DesignSkill[];
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/designer/data/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAerD,eAAO,MAAM,aAAa,EAAE,WAAW,EActC,CAAC"}