arggon-harness 0.1.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.
- package/README.md +229 -0
- package/config/default-opencode.json +21 -0
- package/dist/init.d.ts +3 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +406 -0
- package/dist/init.js.map +1 -0
- package/dist/plugin/engine/artifact-graph.d.ts +38 -0
- package/dist/plugin/engine/artifact-graph.d.ts.map +1 -0
- package/dist/plugin/engine/artifact-graph.js +137 -0
- package/dist/plugin/engine/artifact-graph.js.map +1 -0
- package/dist/plugin/engine/config.d.ts +21 -0
- package/dist/plugin/engine/config.d.ts.map +1 -0
- package/dist/plugin/engine/config.js +146 -0
- package/dist/plugin/engine/config.js.map +1 -0
- package/dist/plugin/engine/delta-apply.d.ts +23 -0
- package/dist/plugin/engine/delta-apply.d.ts.map +1 -0
- package/dist/plugin/engine/delta-apply.js +153 -0
- package/dist/plugin/engine/delta-apply.js.map +1 -0
- package/dist/plugin/engine/git.d.ts +32 -0
- package/dist/plugin/engine/git.d.ts.map +1 -0
- package/dist/plugin/engine/git.js +61 -0
- package/dist/plugin/engine/git.js.map +1 -0
- package/dist/plugin/engine/integrity.d.ts +45 -0
- package/dist/plugin/engine/integrity.d.ts.map +1 -0
- package/dist/plugin/engine/integrity.js +98 -0
- package/dist/plugin/engine/integrity.js.map +1 -0
- package/dist/plugin/engine/registry.d.ts +39 -0
- package/dist/plugin/engine/registry.d.ts.map +1 -0
- package/dist/plugin/engine/registry.js +191 -0
- package/dist/plugin/engine/registry.js.map +1 -0
- package/dist/plugin/engine/state.d.ts +31 -0
- package/dist/plugin/engine/state.d.ts.map +1 -0
- package/dist/plugin/engine/state.js +116 -0
- package/dist/plugin/engine/state.js.map +1 -0
- package/dist/plugin/engine/task-tracker.d.ts +66 -0
- package/dist/plugin/engine/task-tracker.d.ts.map +1 -0
- package/dist/plugin/engine/task-tracker.js +124 -0
- package/dist/plugin/engine/task-tracker.js.map +1 -0
- package/dist/plugin/engine/types.d.ts +349 -0
- package/dist/plugin/engine/types.d.ts.map +1 -0
- package/dist/plugin/engine/types.js +3 -0
- package/dist/plugin/engine/types.js.map +1 -0
- package/dist/plugin/engine/validator.d.ts +52 -0
- package/dist/plugin/engine/validator.d.ts.map +1 -0
- package/dist/plugin/engine/validator.js +457 -0
- package/dist/plugin/engine/validator.js.map +1 -0
- package/dist/plugin/engine/verifier.d.ts +61 -0
- package/dist/plugin/engine/verifier.d.ts.map +1 -0
- package/dist/plugin/engine/verifier.js +441 -0
- package/dist/plugin/engine/verifier.js.map +1 -0
- package/dist/plugin/hooks/context-injection.d.ts +11 -0
- package/dist/plugin/hooks/context-injection.d.ts.map +1 -0
- package/dist/plugin/hooks/context-injection.js +88 -0
- package/dist/plugin/hooks/context-injection.js.map +1 -0
- package/dist/plugin/hooks/event-handlers.d.ts +9 -0
- package/dist/plugin/hooks/event-handlers.d.ts.map +1 -0
- package/dist/plugin/hooks/event-handlers.js +10 -0
- package/dist/plugin/hooks/event-handlers.js.map +1 -0
- package/dist/plugin/hooks/workflow-gate.d.ts +24 -0
- package/dist/plugin/hooks/workflow-gate.d.ts.map +1 -0
- package/dist/plugin/hooks/workflow-gate.js +78 -0
- package/dist/plugin/hooks/workflow-gate.js.map +1 -0
- package/dist/plugin/index.d.ts +423 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +253 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/tools/spec-artifact-instr.d.ts +7 -0
- package/dist/plugin/tools/spec-artifact-instr.d.ts.map +1 -0
- package/dist/plugin/tools/spec-artifact-instr.js +73 -0
- package/dist/plugin/tools/spec-artifact-instr.js.map +1 -0
- package/dist/plugin/tools/spec-change-archive.d.ts +6 -0
- package/dist/plugin/tools/spec-change-archive.d.ts.map +1 -0
- package/dist/plugin/tools/spec-change-archive.js +62 -0
- package/dist/plugin/tools/spec-change-archive.js.map +1 -0
- package/dist/plugin/tools/spec-change-list.d.ts +3 -0
- package/dist/plugin/tools/spec-change-list.d.ts.map +1 -0
- package/dist/plugin/tools/spec-change-list.js +38 -0
- package/dist/plugin/tools/spec-change-list.js.map +1 -0
- package/dist/plugin/tools/spec-change-new.d.ts +7 -0
- package/dist/plugin/tools/spec-change-new.d.ts.map +1 -0
- package/dist/plugin/tools/spec-change-new.js +47 -0
- package/dist/plugin/tools/spec-change-new.js.map +1 -0
- package/dist/plugin/tools/spec-change-status.d.ts +6 -0
- package/dist/plugin/tools/spec-change-status.d.ts.map +1 -0
- package/dist/plugin/tools/spec-change-status.js +43 -0
- package/dist/plugin/tools/spec-change-status.js.map +1 -0
- package/dist/plugin/tools/spec-design-critique.d.ts +20 -0
- package/dist/plugin/tools/spec-design-critique.d.ts.map +1 -0
- package/dist/plugin/tools/spec-design-critique.js +412 -0
- package/dist/plugin/tools/spec-design-critique.js.map +1 -0
- package/dist/plugin/tools/spec-design-hifi.d.ts +119 -0
- package/dist/plugin/tools/spec-design-hifi.d.ts.map +1 -0
- package/dist/plugin/tools/spec-design-hifi.js +653 -0
- package/dist/plugin/tools/spec-design-hifi.js.map +1 -0
- package/dist/plugin/tools/spec-design-wireframe.d.ts +91 -0
- package/dist/plugin/tools/spec-design-wireframe.d.ts.map +1 -0
- package/dist/plugin/tools/spec-design-wireframe.js +357 -0
- package/dist/plugin/tools/spec-design-wireframe.js.map +1 -0
- package/dist/plugin/tools/spec-init.d.ts +9 -0
- package/dist/plugin/tools/spec-init.d.ts.map +1 -0
- package/dist/plugin/tools/spec-init.js +58 -0
- package/dist/plugin/tools/spec-init.js.map +1 -0
- package/dist/plugin/tools/spec-integrity-check.d.ts +6 -0
- package/dist/plugin/tools/spec-integrity-check.d.ts.map +1 -0
- package/dist/plugin/tools/spec-integrity-check.js +19 -0
- package/dist/plugin/tools/spec-integrity-check.js.map +1 -0
- package/dist/plugin/tools/spec-registry-update.d.ts +3 -0
- package/dist/plugin/tools/spec-registry-update.d.ts.map +1 -0
- package/dist/plugin/tools/spec-registry-update.js +34 -0
- package/dist/plugin/tools/spec-registry-update.js.map +1 -0
- package/dist/plugin/tools/spec-schema-list.d.ts +3 -0
- package/dist/plugin/tools/spec-schema-list.d.ts.map +1 -0
- package/dist/plugin/tools/spec-schema-list.js +28 -0
- package/dist/plugin/tools/spec-schema-list.js.map +1 -0
- package/dist/plugin/tools/spec-specs-apply.d.ts +7 -0
- package/dist/plugin/tools/spec-specs-apply.d.ts.map +1 -0
- package/dist/plugin/tools/spec-specs-apply.js +49 -0
- package/dist/plugin/tools/spec-specs-apply.js.map +1 -0
- package/dist/plugin/tools/spec-task-progress.d.ts +8 -0
- package/dist/plugin/tools/spec-task-progress.d.ts.map +1 -0
- package/dist/plugin/tools/spec-task-progress.js +96 -0
- package/dist/plugin/tools/spec-task-progress.js.map +1 -0
- package/dist/plugin/tools/spec-validate.d.ts +21 -0
- package/dist/plugin/tools/spec-validate.d.ts.map +1 -0
- package/dist/plugin/tools/spec-validate.js +182 -0
- package/dist/plugin/tools/spec-validate.js.map +1 -0
- package/dist/plugin/tools/spec-verify.d.ts +7 -0
- package/dist/plugin/tools/spec-verify.d.ts.map +1 -0
- package/dist/plugin/tools/spec-verify.js +50 -0
- package/dist/plugin/tools/spec-verify.js.map +1 -0
- package/dist/plugin/tools/util.d.ts +25 -0
- package/dist/plugin/tools/util.d.ts.map +1 -0
- package/dist/plugin/tools/util.js +33 -0
- package/dist/plugin/tools/util.js.map +1 -0
- package/package.json +61 -0
- package/src/agents/orchestrator.md +158 -0
- package/src/agents/spec-apply.md +114 -0
- package/src/agents/spec-archive.md +103 -0
- package/src/agents/spec-propose.md +120 -0
- package/src/agents/spec-verify.md +103 -0
- package/src/commands/spec-init.md +6 -0
- package/src/commands/spec-onboard.md +6 -0
- package/src/commands/spec-status.md +6 -0
- package/src/commands/spec-sync.md +6 -0
- package/src/schemas/hybrid.yaml +144 -0
- package/src/schemas/spec-driven.yaml +155 -0
- package/src/schemas/tdd.yaml +203 -0
- package/src/skills/playwright-cli/SKILL.md +388 -0
- package/src/skills/playwright-cli/references/element-attributes.md +23 -0
- package/src/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/src/skills/playwright-cli/references/request-mocking.md +87 -0
- package/src/skills/playwright-cli/references/running-code.md +241 -0
- package/src/skills/playwright-cli/references/session-management.md +225 -0
- package/src/skills/playwright-cli/references/spec-driven-testing.md +305 -0
- package/src/skills/playwright-cli/references/storage-state.md +275 -0
- package/src/skills/playwright-cli/references/test-generation.md +134 -0
- package/src/skills/playwright-cli/references/tracing.md +139 -0
- package/src/skills/playwright-cli/references/video-recording.md +143 -0
- package/src/skills/spec-init/SKILL.md +61 -0
- package/src/skills/spec-onboard/SKILL.md +178 -0
- package/src/skills/spec-status/SKILL.md +72 -0
- package/src/skills/spec-sync/SKILL.md +63 -0
- package/src/templates/config.yaml +14 -0
- package/src/templates/design-hifi.yaml +580 -0
- package/src/templates/design-tech.yaml +42 -0
- package/src/templates/design-wireframe.yaml +114 -0
- package/src/templates/proposal.yaml +43 -0
- package/src/templates/registry.yaml +3 -0
- package/src/templates/spec.yaml +56 -0
- package/src/templates/tasks.yaml +58 -0
|
@@ -0,0 +1,580 @@
|
|
|
1
|
+
# High-Fidelity Design Template
|
|
2
|
+
#
|
|
3
|
+
# Instructions:
|
|
4
|
+
# - Define the full design system specification
|
|
5
|
+
# - Use hex format (#RRGGBB) for all color values
|
|
6
|
+
# - Define a type scale covering h1-h6, body, body-small, caption
|
|
7
|
+
# - Include component variants with interactive states
|
|
8
|
+
# - Remove comment lines (starting with #) before saving
|
|
9
|
+
# - Keep the structure intact
|
|
10
|
+
|
|
11
|
+
id: <change-name>
|
|
12
|
+
schema: <schema-name>
|
|
13
|
+
|
|
14
|
+
agent:
|
|
15
|
+
context_files:
|
|
16
|
+
- <relevant files>
|
|
17
|
+
affected_paths:
|
|
18
|
+
- <paths affected>
|
|
19
|
+
|
|
20
|
+
body:
|
|
21
|
+
# ── Color Palette ────────────────────────────────────────────────
|
|
22
|
+
# Defines the complete color system. Use hex values (#RRGGBB).
|
|
23
|
+
# Each color group has a base value plus interactive states.
|
|
24
|
+
color_palette:
|
|
25
|
+
primary:
|
|
26
|
+
base: "#3B82F6"
|
|
27
|
+
hover: "#2563EB"
|
|
28
|
+
active: "#1D4ED8"
|
|
29
|
+
disabled: "#93C5FD"
|
|
30
|
+
contrast: "#FFFFFF"
|
|
31
|
+
secondary:
|
|
32
|
+
base: "#8B5CF6"
|
|
33
|
+
hover: "#7C3AED"
|
|
34
|
+
active: "#6D28D9"
|
|
35
|
+
disabled: "#C4B5FD"
|
|
36
|
+
contrast: "#FFFFFF"
|
|
37
|
+
accent:
|
|
38
|
+
base: "#F59E0B"
|
|
39
|
+
hover: "#D97706"
|
|
40
|
+
active: "#B45309"
|
|
41
|
+
disabled: "#FCD34D"
|
|
42
|
+
contrast: "#1F2937"
|
|
43
|
+
neutral:
|
|
44
|
+
base: "#6B7280"
|
|
45
|
+
hover: "#4B5563"
|
|
46
|
+
active: "#374151"
|
|
47
|
+
disabled: "#D1D5DB"
|
|
48
|
+
contrast: "#FFFFFF"
|
|
49
|
+
semantic:
|
|
50
|
+
success: "#10B981"
|
|
51
|
+
warning: "#F59E0B"
|
|
52
|
+
error: "#EF4444"
|
|
53
|
+
info: "#3B82F6"
|
|
54
|
+
surfaces:
|
|
55
|
+
background: "#F9FAFB"
|
|
56
|
+
foreground: "#111827"
|
|
57
|
+
card: "#FFFFFF"
|
|
58
|
+
border: "#E5E7EB"
|
|
59
|
+
muted: "#F3F4F6"
|
|
60
|
+
|
|
61
|
+
# ── Typography ────────────────────────────────────────────────────
|
|
62
|
+
# Define font families and a modular type scale.
|
|
63
|
+
# Families: list font stacks for heading, body, and monospace roles.
|
|
64
|
+
# Scale: exhaustive list of every type size used in the system.
|
|
65
|
+
typography:
|
|
66
|
+
families:
|
|
67
|
+
- name: inter
|
|
68
|
+
stack: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif"
|
|
69
|
+
role: heading
|
|
70
|
+
- name: inter
|
|
71
|
+
stack: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif"
|
|
72
|
+
role: body
|
|
73
|
+
- name: jetbrains-mono
|
|
74
|
+
stack: "'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace"
|
|
75
|
+
role: monospace
|
|
76
|
+
|
|
77
|
+
scale:
|
|
78
|
+
- name: h1
|
|
79
|
+
size: "2.5rem"
|
|
80
|
+
weight: 700
|
|
81
|
+
line_height: 1.2
|
|
82
|
+
letter_spacing: "-0.025em"
|
|
83
|
+
role: h1
|
|
84
|
+
- name: h2
|
|
85
|
+
size: "2rem"
|
|
86
|
+
weight: 700
|
|
87
|
+
line_height: 1.25
|
|
88
|
+
letter_spacing: "-0.02em"
|
|
89
|
+
role: h2
|
|
90
|
+
- name: h3
|
|
91
|
+
size: "1.5rem"
|
|
92
|
+
weight: 600
|
|
93
|
+
line_height: 1.3
|
|
94
|
+
letter_spacing: "-0.015em"
|
|
95
|
+
role: h3
|
|
96
|
+
- name: h4
|
|
97
|
+
size: "1.25rem"
|
|
98
|
+
weight: 600
|
|
99
|
+
line_height: 1.35
|
|
100
|
+
letter_spacing: "-0.01em"
|
|
101
|
+
role: h4
|
|
102
|
+
- name: h5
|
|
103
|
+
size: "1.125rem"
|
|
104
|
+
weight: 600
|
|
105
|
+
line_height: 1.4
|
|
106
|
+
letter_spacing: "0em"
|
|
107
|
+
role: h5
|
|
108
|
+
- name: h6
|
|
109
|
+
size: "1rem"
|
|
110
|
+
weight: 600
|
|
111
|
+
line_height: 1.45
|
|
112
|
+
letter_spacing: "0em"
|
|
113
|
+
role: h6
|
|
114
|
+
- name: body
|
|
115
|
+
size: "1rem"
|
|
116
|
+
weight: 400
|
|
117
|
+
line_height: 1.6
|
|
118
|
+
letter_spacing: "0em"
|
|
119
|
+
role: body
|
|
120
|
+
- name: body-small
|
|
121
|
+
size: "0.875rem"
|
|
122
|
+
weight: 400
|
|
123
|
+
line_height: 1.5
|
|
124
|
+
letter_spacing: "0em"
|
|
125
|
+
role: body-small
|
|
126
|
+
- name: caption
|
|
127
|
+
size: "0.75rem"
|
|
128
|
+
weight: 400
|
|
129
|
+
line_height: 1.4
|
|
130
|
+
letter_spacing: "0.025em"
|
|
131
|
+
role: caption
|
|
132
|
+
|
|
133
|
+
# ── Spacing System ────────────────────────────────────────────────
|
|
134
|
+
# base_unit: the atomic spacing unit in pixels
|
|
135
|
+
# scale: array of multipliers applied to base_unit (0 = 0px, 1 = base_unit, etc.)
|
|
136
|
+
spacing:
|
|
137
|
+
base_unit: 4
|
|
138
|
+
scale:
|
|
139
|
+
- 0
|
|
140
|
+
- 1
|
|
141
|
+
- 2
|
|
142
|
+
- 3
|
|
143
|
+
- 4
|
|
144
|
+
- 6
|
|
145
|
+
- 8
|
|
146
|
+
- 12
|
|
147
|
+
- 16
|
|
148
|
+
- 24
|
|
149
|
+
- 32
|
|
150
|
+
- 48
|
|
151
|
+
- 64
|
|
152
|
+
|
|
153
|
+
# ── Component Library ────────────────────────────────────────────
|
|
154
|
+
# Define every interactive component with its variants and states.
|
|
155
|
+
# Each component variant lists visual properties and per-state overrides.
|
|
156
|
+
component_library:
|
|
157
|
+
button:
|
|
158
|
+
- name: primary
|
|
159
|
+
description: |
|
|
160
|
+
Primary call-to-action button. Used for the most important
|
|
161
|
+
action on a page or section.
|
|
162
|
+
properties:
|
|
163
|
+
background: "{color_palette.primary.base}"
|
|
164
|
+
color: "{color_palette.primary.contrast}"
|
|
165
|
+
border: none
|
|
166
|
+
border_radius: "0.375rem"
|
|
167
|
+
padding: "0.5rem 1rem"
|
|
168
|
+
font_size: "0.875rem"
|
|
169
|
+
font_weight: 500
|
|
170
|
+
cursor: pointer
|
|
171
|
+
transition: "all 150ms ease"
|
|
172
|
+
states:
|
|
173
|
+
- name: default
|
|
174
|
+
properties:
|
|
175
|
+
background: "{color_palette.primary.base}"
|
|
176
|
+
- name: hover
|
|
177
|
+
properties:
|
|
178
|
+
background: "{color_palette.primary.hover}"
|
|
179
|
+
box_shadow: "0 1px 3px rgba(0,0,0,0.15)"
|
|
180
|
+
- name: active
|
|
181
|
+
properties:
|
|
182
|
+
background: "{color_palette.primary.active}"
|
|
183
|
+
transform: "translateY(0.5px)"
|
|
184
|
+
- name: disabled
|
|
185
|
+
properties:
|
|
186
|
+
background: "{color_palette.primary.disabled}"
|
|
187
|
+
cursor: not-allowed
|
|
188
|
+
opacity: 0.6
|
|
189
|
+
- name: focus
|
|
190
|
+
properties:
|
|
191
|
+
outline: "2px solid {color_palette.primary.base}"
|
|
192
|
+
outline_offset: 2
|
|
193
|
+
|
|
194
|
+
- name: secondary
|
|
195
|
+
description: |
|
|
196
|
+
Secondary action button. Used for supporting actions
|
|
197
|
+
that are less prominent than primary.
|
|
198
|
+
properties:
|
|
199
|
+
background: "{color_palette.secondary.base}"
|
|
200
|
+
color: "{color_palette.secondary.contrast}"
|
|
201
|
+
border: none
|
|
202
|
+
border_radius: "0.375rem"
|
|
203
|
+
padding: "0.5rem 1rem"
|
|
204
|
+
font_size: "0.875rem"
|
|
205
|
+
font_weight: 500
|
|
206
|
+
cursor: pointer
|
|
207
|
+
transition: "all 150ms ease"
|
|
208
|
+
states:
|
|
209
|
+
- name: default
|
|
210
|
+
properties:
|
|
211
|
+
background: "{color_palette.secondary.base}"
|
|
212
|
+
- name: hover
|
|
213
|
+
properties:
|
|
214
|
+
background: "{color_palette.secondary.hover}"
|
|
215
|
+
box_shadow: "0 1px 3px rgba(0,0,0,0.15)"
|
|
216
|
+
- name: active
|
|
217
|
+
properties:
|
|
218
|
+
background: "{color_palette.secondary.active}"
|
|
219
|
+
transform: "translateY(0.5px)"
|
|
220
|
+
- name: disabled
|
|
221
|
+
properties:
|
|
222
|
+
background: "{color_palette.secondary.disabled}"
|
|
223
|
+
cursor: not-allowed
|
|
224
|
+
opacity: 0.6
|
|
225
|
+
- name: focus
|
|
226
|
+
properties:
|
|
227
|
+
outline: "2px solid {color_palette.secondary.base}"
|
|
228
|
+
outline_offset: 2
|
|
229
|
+
|
|
230
|
+
- name: ghost
|
|
231
|
+
description: |
|
|
232
|
+
Ghost button. Minimal visual weight; used for tertiary
|
|
233
|
+
actions, toolbar items, or close buttons.
|
|
234
|
+
properties:
|
|
235
|
+
background: transparent
|
|
236
|
+
color: "{color_palette.neutral.base}"
|
|
237
|
+
border: none
|
|
238
|
+
border_radius: "0.375rem"
|
|
239
|
+
padding: "0.5rem 1rem"
|
|
240
|
+
font_size: "0.875rem"
|
|
241
|
+
font_weight: 500
|
|
242
|
+
cursor: pointer
|
|
243
|
+
transition: "all 150ms ease"
|
|
244
|
+
states:
|
|
245
|
+
- name: default
|
|
246
|
+
properties:
|
|
247
|
+
background: transparent
|
|
248
|
+
- name: hover
|
|
249
|
+
properties:
|
|
250
|
+
background: "{color_palette.surfaces.muted}"
|
|
251
|
+
- name: active
|
|
252
|
+
properties:
|
|
253
|
+
background: "{color_palette.surfaces.border}"
|
|
254
|
+
- name: disabled
|
|
255
|
+
properties:
|
|
256
|
+
opacity: 0.4
|
|
257
|
+
cursor: not-allowed
|
|
258
|
+
- name: focus
|
|
259
|
+
properties:
|
|
260
|
+
outline: "2px solid {color_palette.primary.base}"
|
|
261
|
+
outline_offset: 2
|
|
262
|
+
|
|
263
|
+
- name: outline
|
|
264
|
+
description: |
|
|
265
|
+
Outline button. Borders but no background fill.
|
|
266
|
+
Used for secondary CTAs alongside primary buttons.
|
|
267
|
+
properties:
|
|
268
|
+
background: transparent
|
|
269
|
+
color: "{color_palette.primary.base}"
|
|
270
|
+
border: "1px solid {color_palette.primary.base}"
|
|
271
|
+
border_radius: "0.375rem"
|
|
272
|
+
padding: "0.5rem 1rem"
|
|
273
|
+
font_size: "0.875rem"
|
|
274
|
+
font_weight: 500
|
|
275
|
+
cursor: pointer
|
|
276
|
+
transition: "all 150ms ease"
|
|
277
|
+
states:
|
|
278
|
+
- name: default
|
|
279
|
+
properties:
|
|
280
|
+
background: transparent
|
|
281
|
+
- name: hover
|
|
282
|
+
properties:
|
|
283
|
+
background: "{color_palette.primary.base}"
|
|
284
|
+
color: "{color_palette.primary.contrast}"
|
|
285
|
+
- name: active
|
|
286
|
+
properties:
|
|
287
|
+
background: "{color_palette.primary.active}"
|
|
288
|
+
color: "{color_palette.primary.contrast}"
|
|
289
|
+
- name: disabled
|
|
290
|
+
properties:
|
|
291
|
+
opacity: 0.4
|
|
292
|
+
cursor: not-allowed
|
|
293
|
+
border_color: "{color_palette.neutral.disabled}"
|
|
294
|
+
- name: focus
|
|
295
|
+
properties:
|
|
296
|
+
outline: "2px solid {color_palette.primary.base}"
|
|
297
|
+
outline_offset: 2
|
|
298
|
+
|
|
299
|
+
card:
|
|
300
|
+
- name: default
|
|
301
|
+
description: |
|
|
302
|
+
Standard content card with rounded corners and shadow.
|
|
303
|
+
Used for dashboards, feature grids, and content listings.
|
|
304
|
+
properties:
|
|
305
|
+
background: "{color_palette.surfaces.card}"
|
|
306
|
+
border: "1px solid {color_palette.surfaces.border}"
|
|
307
|
+
border_radius: "0.5rem"
|
|
308
|
+
box_shadow: "0 1px 3px rgba(0,0,0,0.08)"
|
|
309
|
+
padding: "1.5rem"
|
|
310
|
+
transition: "all 200ms ease"
|
|
311
|
+
states:
|
|
312
|
+
- name: default
|
|
313
|
+
properties:
|
|
314
|
+
box_shadow: "0 1px 3px rgba(0,0,0,0.08)"
|
|
315
|
+
- name: hover
|
|
316
|
+
properties:
|
|
317
|
+
box_shadow: "0 4px 12px rgba(0,0,0,0.12)"
|
|
318
|
+
transform: "translateY(-2px)"
|
|
319
|
+
- name: focus
|
|
320
|
+
properties:
|
|
321
|
+
outline: "2px solid {color_palette.primary.base}"
|
|
322
|
+
outline_offset: 2
|
|
323
|
+
|
|
324
|
+
- name: elevated
|
|
325
|
+
description: |
|
|
326
|
+
Elevated card with stronger shadow. Used for modals,
|
|
327
|
+
dropdowns, and content that should float above the page.
|
|
328
|
+
properties:
|
|
329
|
+
background: "{color_palette.surfaces.card}"
|
|
330
|
+
border: "1px solid {color_palette.surfaces.border}"
|
|
331
|
+
border_radius: "0.5rem"
|
|
332
|
+
box_shadow: "0 8px 24px rgba(0,0,0,0.15)"
|
|
333
|
+
padding: "1.5rem"
|
|
334
|
+
states:
|
|
335
|
+
- name: default
|
|
336
|
+
properties:
|
|
337
|
+
box_shadow: "0 8px 24px rgba(0,0,0,0.15)"
|
|
338
|
+
|
|
339
|
+
- name: interactive
|
|
340
|
+
description: |
|
|
341
|
+
Clickable card with hover lift. Used for navigation cards,
|
|
342
|
+
selection grids, and gallery items.
|
|
343
|
+
properties:
|
|
344
|
+
background: "{color_palette.surfaces.card}"
|
|
345
|
+
border: "1px solid {color_palette.surfaces.border}"
|
|
346
|
+
border_radius: "0.5rem"
|
|
347
|
+
box_shadow: "0 1px 3px rgba(0,0,0,0.08)"
|
|
348
|
+
padding: "1.5rem"
|
|
349
|
+
cursor: pointer
|
|
350
|
+
transition: "all 200ms ease"
|
|
351
|
+
states:
|
|
352
|
+
- name: default
|
|
353
|
+
properties:
|
|
354
|
+
border_color: "{color_palette.surfaces.border}"
|
|
355
|
+
- name: hover
|
|
356
|
+
properties:
|
|
357
|
+
border_color: "{color_palette.primary.base}"
|
|
358
|
+
box_shadow: "0 4px 12px rgba(0,0,0,0.12)"
|
|
359
|
+
transform: "translateY(-2px)"
|
|
360
|
+
- name: selected
|
|
361
|
+
properties:
|
|
362
|
+
border_color: "{color_palette.primary.base}"
|
|
363
|
+
background: "{color_palette.primary.base}10"
|
|
364
|
+
- name: disabled
|
|
365
|
+
properties:
|
|
366
|
+
opacity: 0.5
|
|
367
|
+
cursor: not-allowed
|
|
368
|
+
|
|
369
|
+
input:
|
|
370
|
+
- name: default
|
|
371
|
+
description: |
|
|
372
|
+
Standard text input field. Used for forms, search bars,
|
|
373
|
+
and data entry across the application.
|
|
374
|
+
properties:
|
|
375
|
+
background: "{color_palette.surfaces.card}"
|
|
376
|
+
color: "{color_palette.surfaces.foreground}"
|
|
377
|
+
border: "1px solid {color_palette.surfaces.border}"
|
|
378
|
+
border_radius: "0.375rem"
|
|
379
|
+
padding: "0.5rem 0.75rem"
|
|
380
|
+
font_size: "0.875rem"
|
|
381
|
+
font_weight: 400
|
|
382
|
+
line_height: 1.5
|
|
383
|
+
transition: "all 150ms ease"
|
|
384
|
+
width: "100%"
|
|
385
|
+
states:
|
|
386
|
+
- name: default
|
|
387
|
+
properties:
|
|
388
|
+
border_color: "{color_palette.surfaces.border}"
|
|
389
|
+
- name: hover
|
|
390
|
+
properties:
|
|
391
|
+
border_color: "{color_palette.neutral.base}"
|
|
392
|
+
- name: focus
|
|
393
|
+
properties:
|
|
394
|
+
border_color: "{color_palette.primary.base}"
|
|
395
|
+
box_shadow: "0 0 0 3px {color_palette.primary.base}20"
|
|
396
|
+
outline: none
|
|
397
|
+
- name: disabled
|
|
398
|
+
properties:
|
|
399
|
+
background: "{color_palette.surfaces.muted}"
|
|
400
|
+
cursor: not-allowed
|
|
401
|
+
opacity: 0.6
|
|
402
|
+
- name: error
|
|
403
|
+
properties:
|
|
404
|
+
border_color: "{color_palette.semantic.error}"
|
|
405
|
+
box_shadow: "0 0 0 3px {color_palette.semantic.error}20"
|
|
406
|
+
|
|
407
|
+
- name: textarea
|
|
408
|
+
description: |
|
|
409
|
+
Multi-line text input. Used for longer form responses,
|
|
410
|
+
descriptions, and comment fields.
|
|
411
|
+
properties:
|
|
412
|
+
background: "{color_palette.surfaces.card}"
|
|
413
|
+
color: "{color_palette.surfaces.foreground}"
|
|
414
|
+
border: "1px solid {color_palette.surfaces.border}"
|
|
415
|
+
border_radius: "0.375rem"
|
|
416
|
+
padding: "0.75rem"
|
|
417
|
+
font_size: "0.875rem"
|
|
418
|
+
font_weight: 400
|
|
419
|
+
line_height: 1.5
|
|
420
|
+
resize: vertical
|
|
421
|
+
min_height: "6rem"
|
|
422
|
+
transition: "all 150ms ease"
|
|
423
|
+
width: "100%"
|
|
424
|
+
states:
|
|
425
|
+
- name: default
|
|
426
|
+
properties:
|
|
427
|
+
border_color: "{color_palette.surfaces.border}"
|
|
428
|
+
- name: focus
|
|
429
|
+
properties:
|
|
430
|
+
border_color: "{color_palette.primary.base}"
|
|
431
|
+
box_shadow: "0 0 0 3px {color_palette.primary.base}20"
|
|
432
|
+
outline: none
|
|
433
|
+
- name: disabled
|
|
434
|
+
properties:
|
|
435
|
+
background: "{color_palette.surfaces.muted}"
|
|
436
|
+
cursor: not-allowed
|
|
437
|
+
opacity: 0.6
|
|
438
|
+
|
|
439
|
+
- name: select
|
|
440
|
+
description: |
|
|
441
|
+
Dropdown select field. Used for choosing from a predefined
|
|
442
|
+
list of options.
|
|
443
|
+
properties:
|
|
444
|
+
background: "{color_palette.surfaces.card}"
|
|
445
|
+
color: "{color_palette.surfaces.foreground}"
|
|
446
|
+
border: "1px solid {color_palette.surfaces.border}"
|
|
447
|
+
border_radius: "0.375rem"
|
|
448
|
+
padding: "0.5rem 2rem 0.5rem 0.75rem"
|
|
449
|
+
font_size: "0.875rem"
|
|
450
|
+
font_weight: 400
|
|
451
|
+
cursor: pointer
|
|
452
|
+
transition: "all 150ms ease"
|
|
453
|
+
width: "100%"
|
|
454
|
+
appearance: none
|
|
455
|
+
states:
|
|
456
|
+
- name: default
|
|
457
|
+
properties:
|
|
458
|
+
border_color: "{color_palette.surfaces.border}"
|
|
459
|
+
- name: hover
|
|
460
|
+
properties:
|
|
461
|
+
border_color: "{color_palette.neutral.base}"
|
|
462
|
+
- name: focus
|
|
463
|
+
properties:
|
|
464
|
+
border_color: "{color_palette.primary.base}"
|
|
465
|
+
box_shadow: "0 0 0 3px {color_palette.primary.base}20"
|
|
466
|
+
outline: none
|
|
467
|
+
|
|
468
|
+
navigation:
|
|
469
|
+
- name: navbar
|
|
470
|
+
description: |
|
|
471
|
+
Top-level horizontal navigation bar. Used for the main
|
|
472
|
+
application header and primary page navigation.
|
|
473
|
+
properties:
|
|
474
|
+
background: "{color_palette.surfaces.card}"
|
|
475
|
+
border_bottom: "1px solid {color_palette.surfaces.border}"
|
|
476
|
+
height: "3.5rem"
|
|
477
|
+
padding: "0 1.5rem"
|
|
478
|
+
display: flex
|
|
479
|
+
align_items: center
|
|
480
|
+
gap: "1.5rem"
|
|
481
|
+
states:
|
|
482
|
+
- name: default
|
|
483
|
+
properties:
|
|
484
|
+
background: "{color_palette.surfaces.card}"
|
|
485
|
+
|
|
486
|
+
- name: sidebar
|
|
487
|
+
description: |
|
|
488
|
+
Vertical side navigation panel. Used for secondary
|
|
489
|
+
navigation, settings menus, and dashboard sidebars.
|
|
490
|
+
properties:
|
|
491
|
+
background: "{color_palette.surfaces.background}"
|
|
492
|
+
border_right: "1px solid {color_palette.surfaces.border}"
|
|
493
|
+
width: "16rem"
|
|
494
|
+
padding: "1rem"
|
|
495
|
+
display: flex
|
|
496
|
+
flex_direction: column
|
|
497
|
+
gap: "0.25rem"
|
|
498
|
+
states:
|
|
499
|
+
- name: default
|
|
500
|
+
properties:
|
|
501
|
+
background: "{color_palette.surfaces.background}"
|
|
502
|
+
|
|
503
|
+
- name: tabs
|
|
504
|
+
description: |
|
|
505
|
+
Tab-based navigation. Used for switching between
|
|
506
|
+
related content sections without page navigation.
|
|
507
|
+
properties:
|
|
508
|
+
display: flex
|
|
509
|
+
gap: 0
|
|
510
|
+
border_bottom: "1px solid {color_palette.surfaces.border}"
|
|
511
|
+
states:
|
|
512
|
+
- name: default
|
|
513
|
+
properties:
|
|
514
|
+
border_bottom: "1px solid {color_palette.surfaces.border}"
|
|
515
|
+
- name: active
|
|
516
|
+
properties:
|
|
517
|
+
color: "{color_palette.primary.base}"
|
|
518
|
+
border_bottom: "2px solid {color_palette.primary.base}"
|
|
519
|
+
font_weight: 600
|
|
520
|
+
|
|
521
|
+
- name: breadcrumb
|
|
522
|
+
description: |
|
|
523
|
+
Breadcrumb trail navigation. Used to show the user's
|
|
524
|
+
current location within a hierarchy.
|
|
525
|
+
properties:
|
|
526
|
+
display: flex
|
|
527
|
+
align_items: center
|
|
528
|
+
gap: "0.5rem"
|
|
529
|
+
font_size: "0.875rem"
|
|
530
|
+
color: "{color_palette.neutral.base}"
|
|
531
|
+
states:
|
|
532
|
+
- name: default
|
|
533
|
+
properties:
|
|
534
|
+
color: "{color_palette.neutral.base}"
|
|
535
|
+
- name: active
|
|
536
|
+
properties:
|
|
537
|
+
color: "{color_palette.surfaces.foreground}"
|
|
538
|
+
font_weight: 500
|
|
539
|
+
|
|
540
|
+
# ── Responsive Breakpoints ────────────────────────────────────────
|
|
541
|
+
# Define the responsive grid system breakpoints.
|
|
542
|
+
# Each breakpoint defines where it activates (min_width), the column
|
|
543
|
+
# count for that viewport, and any layout rules that apply.
|
|
544
|
+
breakpoints:
|
|
545
|
+
- name: mobile
|
|
546
|
+
min_width: 0
|
|
547
|
+
columns: 4
|
|
548
|
+
rules:
|
|
549
|
+
- "Single-column layouts"
|
|
550
|
+
- "Collapse sidebar to drawer overlay"
|
|
551
|
+
- "Stack navigation vertically"
|
|
552
|
+
- "Reduce padding to 1rem"
|
|
553
|
+
|
|
554
|
+
- name: tablet
|
|
555
|
+
min_width: 640
|
|
556
|
+
columns: 8
|
|
557
|
+
rules:
|
|
558
|
+
- "Two-column grid layouts"
|
|
559
|
+
- "Show sidebar as collapsed icon bar"
|
|
560
|
+
- "Maintain horizontal nav with reduced labels"
|
|
561
|
+
- "Padding: 1.5rem"
|
|
562
|
+
|
|
563
|
+
- name: desktop
|
|
564
|
+
min_width: 1024
|
|
565
|
+
columns: 12
|
|
566
|
+
rules:
|
|
567
|
+
- "Full grid system"
|
|
568
|
+
- "Expanded sidebar with labels"
|
|
569
|
+
- "Multi-column content layouts"
|
|
570
|
+
- "Padding: 2rem"
|
|
571
|
+
- "Max content width: 1200px"
|
|
572
|
+
|
|
573
|
+
- name: wide
|
|
574
|
+
min_width: 1440
|
|
575
|
+
columns: 12
|
|
576
|
+
rules:
|
|
577
|
+
- "All desktop rules apply"
|
|
578
|
+
- "Max content width: 1440px"
|
|
579
|
+
- "Optional sidebar pinned open"
|
|
580
|
+
- "Extra whitespace around content areas"
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Design Template
|
|
2
|
+
#
|
|
3
|
+
# Instructions:
|
|
4
|
+
# - Focus on HOW to implement
|
|
5
|
+
# - Include alternatives considered
|
|
6
|
+
# - Only create if change is complex enough
|
|
7
|
+
|
|
8
|
+
id: <change-name>
|
|
9
|
+
schema: <schema-name>
|
|
10
|
+
|
|
11
|
+
agent:
|
|
12
|
+
context_files:
|
|
13
|
+
- <relevant files>
|
|
14
|
+
affected_paths:
|
|
15
|
+
- <paths affected>
|
|
16
|
+
|
|
17
|
+
body:
|
|
18
|
+
context: |
|
|
19
|
+
<Background, current state, constraints>
|
|
20
|
+
|
|
21
|
+
goals:
|
|
22
|
+
- <What this design achieves>
|
|
23
|
+
- <Another goal>
|
|
24
|
+
|
|
25
|
+
non_goals:
|
|
26
|
+
- <What's explicitly out of scope>
|
|
27
|
+
- <Another non-goal>
|
|
28
|
+
|
|
29
|
+
decisions:
|
|
30
|
+
- title: <decision title>
|
|
31
|
+
approach: |
|
|
32
|
+
<Chosen approach and rationale>
|
|
33
|
+
alternatives: |
|
|
34
|
+
<Alternatives considered and why not chosen>
|
|
35
|
+
|
|
36
|
+
- title: <another decision>
|
|
37
|
+
approach: |
|
|
38
|
+
<approach>
|
|
39
|
+
|
|
40
|
+
risks:
|
|
41
|
+
- <Risk and mitigation strategy>
|
|
42
|
+
- <Another risk>
|