get-shit-pretty 0.6.2 → 0.7.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 (161) hide show
  1. package/README.md +7 -12
  2. package/bin/install.js +125 -84
  3. package/gsp/agents/gsp-accessibility-auditor.md +4 -4
  4. package/gsp/agents/gsp-ascii-artist.md +2 -2
  5. package/gsp/agents/gsp-brand-auditor.md +3 -3
  6. package/gsp/agents/gsp-brand-engineer.md +131 -0
  7. package/gsp/agents/gsp-brand-strategist.md +3 -3
  8. package/gsp/agents/gsp-brand-syncer.md +8 -7
  9. package/gsp/agents/gsp-builder.md +49 -6
  10. package/gsp/agents/gsp-campaign-director.md +3 -4
  11. package/gsp/agents/gsp-creative-director.md +80 -0
  12. package/gsp/agents/gsp-critic.md +100 -18
  13. package/gsp/agents/gsp-designer.md +52 -5
  14. package/gsp/agents/gsp-project-researcher.md +4 -4
  15. package/gsp/agents/gsp-researcher.md +5 -5
  16. package/gsp/agents/gsp-reviewer.md +3 -3
  17. package/gsp/agents/gsp-scoper.md +3 -3
  18. package/gsp/hooks/hooks.json +5 -5
  19. package/gsp/skills/get-shit-pretty/SKILL.md +10 -9
  20. package/gsp/skills/gsp-accessibility/SKILL.md +12 -12
  21. package/gsp/skills/gsp-accessibility-audit/SKILL.md +8 -9
  22. package/gsp/skills/gsp-add-reference/SKILL.md +6 -1
  23. package/gsp/skills/gsp-art/SKILL.md +6 -1
  24. package/gsp/skills/gsp-brand-audit/SKILL.md +5 -5
  25. package/gsp/skills/gsp-brand-guidelines/SKILL.md +233 -0
  26. package/gsp/skills/gsp-brand-guidelines/token-mapping.md +329 -0
  27. package/gsp/skills/gsp-brand-identity/SKILL.md +29 -20
  28. package/gsp/skills/gsp-brand-refine/SKILL.md +30 -23
  29. package/gsp/skills/gsp-brand-research/SKILL.md +4 -4
  30. package/gsp/{references → skills/gsp-brand-research}/design-trends.md +4 -4
  31. package/gsp/skills/gsp-brand-strategy/SKILL.md +7 -7
  32. package/gsp/skills/gsp-brand-sync/SKILL.md +10 -10
  33. package/gsp/skills/gsp-brand-sync/chunk-format.md +79 -0
  34. package/gsp/skills/gsp-color/SKILL.md +73 -0
  35. package/gsp/skills/gsp-color/chunk-format.md +79 -0
  36. package/gsp/skills/{gsp-palette/SKILL.md → gsp-color/domains/palette.md} +31 -101
  37. package/gsp/skills/gsp-color/domains/system.md +123 -0
  38. package/gsp/skills/gsp-design-system/SKILL.md +9 -4
  39. package/gsp/skills/gsp-doctor/SKILL.md +25 -18
  40. package/gsp/skills/gsp-help/SKILL.md +30 -29
  41. package/gsp/skills/gsp-icons/SKILL.md +108 -0
  42. package/gsp/skills/gsp-icons/chunk-format.md +79 -0
  43. package/gsp/skills/gsp-launch/SKILL.md +3 -4
  44. package/gsp/skills/gsp-logo/SKILL.md +173 -0
  45. package/gsp/skills/gsp-logo/chunk-format.md +79 -0
  46. package/gsp/skills/gsp-phase-transition/SKILL.md +124 -0
  47. package/gsp/skills/gsp-pretty/SKILL.md +2 -2
  48. package/gsp/skills/gsp-progress/SKILL.md +20 -20
  49. package/gsp/skills/gsp-project-brief/SKILL.md +8 -9
  50. package/gsp/skills/gsp-project-build/SKILL.md +30 -25
  51. package/gsp/skills/gsp-project-critique/SKILL.md +17 -18
  52. package/gsp/{references → skills/gsp-project-critique}/visual-taste.md +1 -1
  53. package/gsp/skills/gsp-project-design/SKILL.md +18 -18
  54. package/gsp/skills/gsp-project-research/SKILL.md +6 -7
  55. package/gsp/skills/gsp-project-review/SKILL.md +8 -10
  56. package/gsp/skills/gsp-scaffold/SKILL.md +3 -3
  57. package/gsp/skills/gsp-start/SKILL.md +15 -15
  58. package/gsp/{references → skills/gsp-start}/questioning.md +1 -1
  59. package/gsp/skills/gsp-style/SKILL.md +43 -45
  60. package/gsp/skills/gsp-style/chunk-format.md +79 -0
  61. package/gsp/skills/gsp-style/style-preset-schema.md +124 -0
  62. package/gsp/skills/gsp-style/styles/INDEX.yml +1 -1
  63. package/gsp/skills/gsp-style/styles/academia.yml +80 -0
  64. package/gsp/skills/gsp-style/styles/art-deco.yml +81 -0
  65. package/gsp/skills/gsp-style/styles/bauhaus.yml +78 -0
  66. package/gsp/skills/gsp-style/styles/bold-typography.yml +73 -0
  67. package/gsp/skills/gsp-style/styles/botanical.yml +78 -0
  68. package/gsp/skills/gsp-style/styles/claymorphism.yml +84 -0
  69. package/gsp/skills/gsp-style/styles/cyberpunk.yml +87 -0
  70. package/gsp/skills/gsp-style/styles/enterprise.yml +81 -0
  71. package/gsp/skills/gsp-style/styles/flat-design.yml +67 -0
  72. package/gsp/skills/gsp-style/styles/fluent.yml +82 -0
  73. package/gsp/skills/gsp-style/styles/glassmorphism.yml +83 -0
  74. package/gsp/skills/gsp-style/styles/humanist-literary.yml +74 -0
  75. package/gsp/skills/gsp-style/styles/industrial.yml +82 -0
  76. package/gsp/skills/gsp-style/styles/kinetic.yml +94 -0
  77. package/gsp/skills/gsp-style/styles/liquid-glass.yml +91 -0
  78. package/gsp/skills/gsp-style/styles/luxury.yml +83 -0
  79. package/gsp/skills/gsp-style/styles/material.yml +83 -0
  80. package/gsp/skills/gsp-style/styles/maximalism.yml +92 -0
  81. package/gsp/skills/gsp-style/styles/minimal-dark.yml +75 -0
  82. package/gsp/skills/gsp-style/styles/modern-dark.yml +88 -0
  83. package/gsp/skills/gsp-style/styles/monochrome.yml +68 -0
  84. package/gsp/skills/gsp-style/styles/neubrutalism.yml +83 -0
  85. package/gsp/skills/gsp-style/styles/neumorphism.yml +77 -0
  86. package/gsp/skills/gsp-style/styles/newsprint.yml +81 -0
  87. package/gsp/skills/gsp-style/styles/organic.yml +77 -0
  88. package/gsp/skills/gsp-style/styles/playful-geometric.yml +90 -0
  89. package/gsp/skills/gsp-style/styles/professional.yml +67 -0
  90. package/gsp/skills/gsp-style/styles/retro.yml +85 -0
  91. package/gsp/skills/gsp-style/styles/saas.yml +83 -0
  92. package/gsp/skills/gsp-style/styles/sketch.yml +86 -0
  93. package/gsp/skills/gsp-style/styles/swiss-minimalist.yml +69 -0
  94. package/gsp/skills/gsp-style/styles/terminal.yml +83 -0
  95. package/gsp/skills/gsp-style/styles/vaporwave.yml +84 -0
  96. package/gsp/skills/gsp-style/styles/web3.yml +82 -0
  97. package/gsp/skills/gsp-typography/SKILL.md +70 -0
  98. package/gsp/skills/gsp-typography/chunk-format.md +79 -0
  99. package/gsp/skills/gsp-typography/domains/pairing.md +109 -0
  100. package/gsp/skills/gsp-typography/domains/scale.md +227 -0
  101. package/gsp/skills/gsp-typography/domains/system.md +108 -0
  102. package/gsp/skills/gsp-update/SKILL.md +1 -2
  103. package/gsp/skills/gsp-visuals/SKILL.md +82 -0
  104. package/gsp/skills/gsp-visuals/chunk-format.md +79 -0
  105. package/gsp/skills/gsp-visuals/domains/3d.md +127 -0
  106. package/gsp/skills/gsp-visuals/domains/imagery.md +145 -0
  107. package/gsp/skills/gsp-visuals/domains/textures.md +138 -0
  108. package/gsp/skills/gsp-visuals/domains/video.md +107 -0
  109. package/gsp/templates/branding/config.json +1 -1
  110. package/gsp/templates/branding/roadmap.md +9 -9
  111. package/gsp/templates/exports-index.md +8 -8
  112. package/gsp/templates/phases/brief.md +1 -1
  113. package/gsp/templates/phases/build.md +1 -1
  114. package/gsp/templates/phases/critique.md +1 -1
  115. package/gsp/templates/phases/design.md +2 -2
  116. package/gsp/templates/phases/discover.md +1 -1
  117. package/gsp/templates/phases/identity.md +1 -1
  118. package/gsp/templates/phases/launch.md +1 -1
  119. package/gsp/templates/phases/patterns.md +60 -71
  120. package/gsp/templates/phases/research.md +1 -1
  121. package/gsp/templates/phases/review.md +1 -1
  122. package/gsp/templates/phases/strategy.md +1 -1
  123. package/gsp/templates/phases/style.md +158 -0
  124. package/gsp/templates/projects/config.json +1 -1
  125. package/gsp/templates/projects/roadmap.md +7 -7
  126. package/gsp/templates/projects/state.md +1 -1
  127. package/package.json +1 -2
  128. package/.claude-plugin/plugin.json +0 -24
  129. package/gsp/agents/gsp-identity-designer.md +0 -74
  130. package/gsp/agents/gsp-pattern-architect.md +0 -189
  131. package/gsp/prompts/01-design-system-architect.md +0 -19
  132. package/gsp/prompts/02-brand-identity-creator.md +0 -16
  133. package/gsp/prompts/03-ui-ux-pattern-master.md +0 -21
  134. package/gsp/prompts/04-marketing-asset-factory.md +0 -14
  135. package/gsp/prompts/05-implementation-spec-expert.md +0 -15
  136. package/gsp/prompts/06-design-critique-partner.md +0 -14
  137. package/gsp/prompts/07-design-trend-synthesizer.md +0 -3
  138. package/gsp/prompts/08-accessibility-auditor.md +0 -23
  139. package/gsp/prompts/09-design-to-code-translator.md +0 -49
  140. package/gsp/prompts/10-project-scoper.md +0 -17
  141. package/gsp/prompts/11-deliverable-reviewer.md +0 -18
  142. package/gsp/prompts/12-project-researcher.md +0 -18
  143. package/gsp/references/phase-transitions.md +0 -132
  144. package/gsp/references/style-preset-schema.md +0 -63
  145. package/gsp/skills/gsp-brand-patterns/SKILL.md +0 -240
  146. package/gsp/skills/gsp-typescale/SKILL.md +0 -234
  147. /package/gsp/{references → skills/gsp-accessibility-audit}/wcag-checklist.md +0 -0
  148. /package/gsp/{references → skills/gsp-art}/terminal-art.md +0 -0
  149. /package/gsp/{references → skills/gsp-brand-audit}/chunk-format.md +0 -0
  150. /package/gsp/{references → skills/gsp-brand-guidelines}/design-tokens.md +0 -0
  151. /package/gsp/{references → skills/gsp-brand-strategy}/brand-archetypes.md +0 -0
  152. /package/gsp/{references → skills/gsp-brand-strategy}/brand-prism.md +0 -0
  153. /package/gsp/{references → skills/gsp-brand-strategy}/positioning-frameworks.md +0 -0
  154. /package/gsp/{references → skills/gsp-brand-strategy}/voice-tone.md +0 -0
  155. /package/gsp/{references → skills/gsp-color/references}/color-composition.md +0 -0
  156. /package/gsp/{references → skills/gsp-project-build}/visual-effects.md +0 -0
  157. /package/gsp/{references → skills/gsp-project-critique}/anti-patterns.md +0 -0
  158. /package/gsp/{references → skills/gsp-project-critique}/nielsen-heuristics.md +0 -0
  159. /package/gsp/{references → skills/gsp-project-design}/apple-hig-patterns.md +0 -0
  160. /package/gsp/{references → skills/gsp-project-design}/block-patterns.md +0 -0
  161. /package/gsp/{references → skills/gsp-typography/references}/typography-scales.md +0 -0
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: project-review
2
+ name: gsp-project-review
3
3
  description: QA review — validate implementation against designs
4
4
  user-invocable: true
5
5
  model: opus
@@ -28,7 +28,6 @@ QA validate the codebase implementation against design intent.
28
28
  </objective>
29
29
 
30
30
  <execution_context>
31
- @${CLAUDE_SKILL_DIR}/../../prompts/11-deliverable-reviewer.md
32
31
  @${CLAUDE_SKILL_DIR}/../../templates/phases/review.md
33
32
  </execution_context>
34
33
 
@@ -43,7 +42,7 @@ Read `{PROJECT_PATH}/brand.ref` → set `BRAND_PATH`.
43
42
 
44
43
  Read `{PROJECT_PATH}/config.json` to get `implementation_target`, `design_scope`, `codebase_type`.
45
44
 
46
- **Prior code accessibility audit:** Check if `{PROJECT_PATH}/review/accessibility-audit.md` exists from a prior `/gsp:accessibility --code` run. If yes, load it — the reviewer will reference these findings instead of performing inline a11y checks.
45
+ **Prior code accessibility audit:** Check if `{PROJECT_PATH}/review/accessibility-audit.md` exists from a prior `/gsp-accessibility --code` run. If yes, load it — the reviewer will reference these findings instead of performing inline a11y checks.
47
46
 
48
47
  ### Load all artifacts
49
48
 
@@ -56,7 +55,7 @@ Read `{PROJECT_PATH}/config.json` to get `implementation_target`, `design_scope`
56
55
  **Design:** Read `{PROJECT_PATH}/design/INDEX.md` → load all screen chunks.
57
56
 
58
57
  **Brand patterns:** Read `{BRAND_PATH}/patterns/INDEX.md` → load foundation + component chunks.
59
- Also read `{BRAND_PATH}/patterns/tokens.json`.
58
+ Also read `{BRAND_PATH}/patterns/{brand-name}.yml` (the brand's token/style source of truth).
60
59
 
61
60
  **Brand identity (selective):** Read `{BRAND_PATH}/identity/imagery-style.md` (if exists) — needed for imagery audit.
62
61
 
@@ -76,7 +75,7 @@ Also read `{BRAND_PATH}/patterns/tokens.json`.
76
75
  3. Write `{PROJECT_PATH}/review/INDEX.md`
77
76
  4. Update `{PROJECT_PATH}/exports/INDEX.md` between `<!-- BEGIN:review -->` and `<!-- END:review -->` with populated table
78
77
  5. Update `{PROJECT_PATH}/STATE.md` — set Phase 6 (Review) to `complete` or `needs-revision`
79
- 6. Route: display verdict and suggest `/gsp:launch` or re-run `/gsp:project-review`
78
+ 6. Route: display verdict and suggest `/gsp-launch` or re-run `/gsp-project-review`
80
79
  7. **Stop here**
81
80
 
82
81
  ## Step 2: Spawn reviewer
@@ -86,14 +85,13 @@ Spawn the `gsp-reviewer` agent with:
86
85
  - Actual codebase file paths (from BUILD-LOG.md)
87
86
  - `git diff` output
88
87
  - Design chunks
89
- - Brand system chunks + tokens.json
88
+ - Brand system chunks + `{brand-name}.yml`
90
89
  - Brief chunks
91
90
  - Critique fixes (to verify resolution)
92
91
  - `.design/system/COMPONENTS.md` (when exists — to verify existing components weren't broken)
93
92
  - MANIFEST.md (when exists — to verify build claims match reality)
94
93
  - `codebase_type` from config.json
95
- - The Deliverable Reviewer prompt (11)
96
- - The review output template
94
+ - Review output template (from execution_context)
97
95
  - **Output path:** `{PROJECT_PATH}/review/`
98
96
  - Prior code accessibility findings (if `{PROJECT_PATH}/review/accessibility-audit.md` exists — tell reviewer to reference these instead of performing inline a11y checks; reviewer keeps inline checks as fallback if no prior audit exists)
99
97
  - **Clear instruction:** "Review actual codebase files, not `.design/build/` specs. Use Grep to search for hardcoded values. Use `git diff` to verify changes. Reference actual file paths in issues."
@@ -173,7 +171,7 @@ If verdict is **Fail**:
173
171
 
174
172
  ## Step 6: Phase transition output
175
173
 
176
- Render phase transition (see `references/phase-transitions.md`). This phase has pass/fail variants — the reference covers both.
174
+ Invoke `/gsp-phase-transition` with phase `review` and output directory `{PROJECT_PATH}/review/`.
177
175
 
178
- If review identified brand-level issues (token values that don't work in context), note: "Some issues are brand-level — run `/gsp:brand-refine` to adjust tokens without re-running identity."
176
+ If review identified brand-level issues (token values that don't work in context), note: "Some issues are brand-level — run `/gsp-brand-refine` to adjust tokens without re-running identity."
179
177
  </process>
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: scaffold
2
+ name: gsp-scaffold
3
3
  description: Deterministic stack setup — install deps, create configs, verify build compiles
4
4
  user-invocable: true
5
5
  model: sonnet
@@ -16,8 +16,8 @@ Composable stack setup skill. No agent — all inline Bash commands. Determinist
16
16
  Reads project config and stack state, installs dependencies, creates config files, installs component library primitives, and verifies the build compiles. Produces `SCAFFOLD-LOG.md`.
17
17
 
18
18
  Works two ways:
19
- 1. **Standalone** — user runs `/gsp:scaffold` directly to set up a project's stack
20
- 2. **As a building block** — `/gsp:project-build` invokes this as Phase 1 before spawning builder agents
19
+ 1. **Standalone** — user runs `/gsp-scaffold` directly to set up a project's stack
20
+ 2. **As a building block** — `/gsp-project-build` invokes this as Phase 1 before spawning builder agents
21
21
  </context>
22
22
 
23
23
  <objective>
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: start
2
+ name: gsp-start
3
3
  description: Start here — picks up where you left off
4
4
  user-invocable: true
5
5
  model: sonnet
@@ -30,7 +30,7 @@ Through a sequential one-question-at-a-time conversation, gather a complete brie
30
30
  </objective>
31
31
 
32
32
  <execution_context>
33
- @${CLAUDE_SKILL_DIR}/../../references/questioning.md
33
+ @${CLAUDE_SKILL_DIR}/questioning.md
34
34
  </execution_context>
35
35
 
36
36
  <rules>
@@ -64,7 +64,7 @@ Scan `.design/` for existing brands and projects:
64
64
 
65
65
  ### Step 1b: Run design system scan (background)
66
66
 
67
- Spawn `/gsp:design-system` as a background agent (`run_in_background: true`, `subagent_type: "general-purpose"`). It writes to `.design/system/` — don't wait for it. Store the task reference for the brand essence questions or Step 4.
67
+ Spawn `/gsp-design-system` as a background agent (`run_in_background: true`, `subagent_type: "general-purpose"`). It writes to `.design/system/` — don't wait for it. Store the task reference for the brand essence questions or Step 4.
68
68
 
69
69
  ### Step 1c: Greet
70
70
 
@@ -80,7 +80,7 @@ Adapt the greeting based on what the scan revealed. Use plain text with Unicode
80
80
  - **Summary box:** `┌──┐│└──┘` border with key-value pairs inside
81
81
 
82
82
  **Fresh start (no `.design/`):**
83
- Show ` /gsp: ◇◇\n looks like a fresh start.` (append codebase scanning note if `package.json` exists). Use `AskUserQuestion` with: Brand identity, Design project, Both (brand + project), Quick project.
83
+ Show ` /gsp- ◇◇\n looks like a fresh start.` (append codebase scanning note if `package.json` exists). Use `AskUserQuestion` with: Brand identity, Design project, Both (brand + project), Quick project.
84
84
 
85
85
  **Legacy `.design/` detected (flat structure, pre-0.4.0):**
86
86
  Acknowledge the legacy project. Use `AskUserQuestion`: Start fresh brand, Start design project, Keep working.
@@ -98,7 +98,7 @@ Show compact brand (single-line if complete) + full project pipeline flow. Then
98
98
  When codebase has been scanned (`.design/system/STACK.md` exists), show a Summary Box using data from STACK.md and COMPONENTS.md:
99
99
  ```
100
100
  ┌──────────────────────────────────────────┐
101
- │ /gsp: ◆◈ │
101
+ │ /gsp- ◆◈ │
102
102
  │ │
103
103
  │ framework Next.js 14 │
104
104
  │ styling Tailwind + shadcn/ui │
@@ -118,7 +118,7 @@ From the greeting exchange, determine which flow to run:
118
118
  - **Design project** → Check for brands first. If none exist, explain they need a brand first. Offer to create one, then auto-transition to project flow.
119
119
  - **Full design (brand + project)** → Brand flow (Step 3), with E2E flag so brand completion auto-transitions to project flow (Step 4)
120
120
  - **Quick project** → Quick flow (Step 5)
121
- - **Continue existing work** → route to `/gsp:progress`
121
+ - **Continue existing work** → route to `/gsp-progress`
122
122
 
123
123
  ## Step 3: Brand flow
124
124
 
@@ -196,10 +196,10 @@ Skip any question you can already answer from prior context. Don't over-ask.
196
196
 
197
197
  6. Route using `AskUserQuestion` — always offer Continue / Stop here / What happens next:
198
198
 
199
- - **Brand-only, new →** continue to `/gsp:brand-research`
200
- - **Brand-only, evolve →** continue to `/gsp:brand-audit`
201
- - **E2E, new →** continue to `/gsp:brand-research` (complete the entire brand pipeline first — research → strategy → identity → patterns — then auto-transition to Step 4 for project setup). Set `"e2e": true` in config.json so brand-patterns knows to route to project flow after completion.
202
- - **E2E, evolve →** continue to `/gsp:brand-audit` (complete full brand pipeline, then auto-transition to Step 4). Set `"e2e": true` in config.json.
199
+ - **Brand-only, new →** continue to `/gsp-brand-research`
200
+ - **Brand-only, evolve →** continue to `/gsp-brand-audit`
201
+ - **E2E, new →** continue to `/gsp-brand-research` (complete the entire brand pipeline first — research → strategy → identity → patterns — then auto-transition to Step 4 for project setup). Set `"e2e": true` in config.json so brand-patterns knows to route to project flow after completion.
202
+ - **E2E, evolve →** continue to `/gsp-brand-audit` (complete full brand pipeline, then auto-transition to Step 4). Set `"e2e": true` in config.json.
203
203
 
204
204
  ## Step 4: Project flow
205
205
 
@@ -258,8 +258,8 @@ Skip any question you can already answer from the codebase scan. Don't over-ask.
258
258
  - `.design/projects/{name}/exports/INDEX.md` from `${CLAUDE_SKILL_DIR}/../../templates/exports-index.md`
259
259
 
260
260
  9. Route using `AskUserQuestion`: "Project set up! Ready to scope what you're building?"
261
- - **Continue to scoping** — "Scope the project now" → invoke `/gsp:project-brief` via Skill tool
262
- - **Stop here** — "I'll come back later" → confirm files are saved, show how to resume with `/gsp:start`
261
+ - **Continue to scoping** — "Scope the project now" → invoke `/gsp-project-brief` via Skill tool
262
+ - **Stop here** — "I'll come back later" → confirm files are saved, show how to resume with `/gsp-start`
263
263
  - **What happens next?** — "Explain the scoping phase" → explain what project-brief does (screen list, component adaptations, gap analysis) and how it uses the brief
264
264
 
265
265
  ## Step 5: Quick project flow
@@ -279,8 +279,8 @@ Read `${CLAUDE_SKILL_DIR}/../../skills/gsp-style/styles/INDEX.yml` and present s
279
279
  mkdir -p .design/branding/_style-{preset}/patterns/
280
280
  ```
281
281
 
282
- 2. Invoke `/gsp:style {preset}` via Skill tool — this writes:
283
- - `tokens.json` (W3C design tokens)
282
+ 2. Invoke `/gsp-style {preset}` via Skill tool — this writes:
283
+ - `{preset}.yml` (brand style preset)
284
284
  - Foundation chunks (color, typography, spacing, elevation, radius)
285
285
  - `INDEX.md`
286
286
 
@@ -324,7 +324,7 @@ Continue directly to Step 4 (project flow) with these modifications:
324
324
  ### Upgrade path
325
325
 
326
326
  If a user later wants full branding, they can:
327
- 1. Run `/gsp:start` → "Brand identity" to create a real brand
327
+ 1. Run `/gsp-start` → "Brand identity" to create a real brand
328
328
  2. Full diamond produces identity + patterns with real tokens
329
329
  3. Update the project's `brand.ref` to point to the new brand
330
330
  4. Re-run build phases — they pick up the new tokens automatically
@@ -1,7 +1,7 @@
1
1
  # Brief-Gathering Techniques
2
2
 
3
3
  ## Purpose
4
- Guide brief-gathering conversations — used by `/gsp:start` for both brand briefs and project briefs.
4
+ Guide brief-gathering conversations — used by `/gsp-start` for both brand briefs and project briefs.
5
5
 
6
6
  ---
7
7
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: style
2
+ name: gsp-style
3
3
  description: Apply a design style — get tokens and foundations without the branding diamond
4
4
  user-invocable: true
5
5
  model: sonnet
@@ -12,10 +12,10 @@ allowed-tools:
12
12
  - Grep
13
13
  ---
14
14
  <context>
15
- You are a GSP style applicator. You produce W3C Design Tokens (`tokens.json`) and foundation chunks from style presets — bypassing the full branding diamond (discover → strategy → identity → system). Downstream agents (designer, builder) consume `tokens.json` regardless of how it was produced.
15
+ You are a GSP style applicator. You produce a brand `.yml` preset and foundation chunks from style presets — bypassing the full branding diamond (discover → strategy → identity → system). Downstream agents (designer, builder) consume the `.yml` preset regardless of how it was produced.
16
16
 
17
17
  This is a standalone composable skill. It works two ways:
18
- 1. **Standalone** — user runs `/gsp:style cyberpunk` directly, gets visual preview + tokens
18
+ 1. **Standalone** — user runs `/gsp-style cyberpunk` directly, gets visual preview + tokens
19
19
  2. **As a building block** — agents invoke this skill during workflows, getting tokens only
20
20
  </context>
21
21
 
@@ -23,21 +23,21 @@ This is a standalone composable skill. It works two ways:
23
23
  Apply a named style preset to produce production-ready design tokens and foundation chunks.
24
24
 
25
25
  **Input:** Style name(s), optional flags (`--list`, `--preview`)
26
- **Output:** `tokens.json` + 5 foundation chunks + `INDEX.md` in the target system directory
26
+ **Output:** `{preset-name}.yml` + `STYLE.md` + `INDEX.md` in the target system directory
27
27
  **Agent:** None — token expansion from YAML presets is handled inline
28
28
  </objective>
29
29
 
30
30
  <execution_context>
31
31
  @${CLAUDE_SKILL_DIR}/styles/INDEX.yml
32
- @${CLAUDE_SKILL_DIR}/../../references/design-tokens.md
33
- @${CLAUDE_SKILL_DIR}/../../references/chunk-format.md
32
+ @${CLAUDE_SKILL_DIR}/../gsp-brand-guidelines/design-tokens.md
33
+ @${CLAUDE_SKILL_DIR}/chunk-format.md
34
34
  @${CLAUDE_SKILL_DIR}/../../templates/phases/patterns.md
35
35
  </execution_context>
36
36
 
37
37
  <rules>
38
38
  - Always use `AskUserQuestion` for user interaction — never prompt via plain text
39
39
  - One decision per question — never batch multiple questions in a single message
40
- - `tokens.json` follows W3C Design Tokens format from `references/design-tokens.md`
40
+ - Token values in `.yml` presets follow W3C Design Tokens format from `gsp-brand-guidelines/design-tokens.md`
41
41
  - When mixing styles, later style values override earlier ones (last-wins precedence)
42
42
  - Never mix clashing styles — check the compatibility matrix first
43
43
  </rules>
@@ -49,11 +49,11 @@ Read the user's input to determine the mode:
49
49
 
50
50
  | Input | Mode |
51
51
  |-------|------|
52
- | `/gsp:style --list` | List all available presets |
53
- | `/gsp:style --preview cyberpunk` | Show tokens without writing files |
54
- | `/gsp:style cyberpunk` | Apply single style |
55
- | `/gsp:style cyberpunk + neubrutalism` | Mix styles (check compatibility) |
56
- | `/gsp:style` (no args) | Interactive — browse and pick |
52
+ | `/gsp-style --list` | List all available presets |
53
+ | `/gsp-style --preview cyberpunk` | Show tokens without writing files |
54
+ | `/gsp-style cyberpunk` | Apply single style |
55
+ | `/gsp-style cyberpunk + neubrutalism` | Mix styles (check compatibility) |
56
+ | `/gsp-style` (no args) | Interactive — browse and pick |
57
57
 
58
58
  ## Step 1: List mode (`--list`)
59
59
 
@@ -120,51 +120,49 @@ If invoked from a project context (`.design/projects/{project}/`):
120
120
 
121
121
  If `--preview`, display expanded tokens grouped by section (Color, Typography, Shape, Elevation, Motion) as key-value pairs. Footer: usage hint to apply. Stop here — do not write any files.
122
122
 
123
- ## Step 6: Expand tokens to W3C format
123
+ ## Step 6: Copy preset as brand style
124
124
 
125
- Transform the YAML preset tokens into the full W3C Design Tokens JSON structure.
125
+ Copy the preset `.yml` to the output path as the brand's style source:
126
+ - If within a brand: `{OUTPUT_PATH}/{preset-name}.yml`
127
+ - If standalone: `{OUTPUT_PATH}/_style-{preset-name}.yml`
126
128
 
127
- ### Token expansion mapping
129
+ If a `.yml` already exists at the output path, use `AskUserQuestion`: "A style preset already exists — overwrite?" with options **Overwrite** and **Cancel**. If cancelled, skip and proceed.
128
130
 
129
- Transform each YAML preset section into W3C Design Tokens JSON with `$value` and `$type` fields:
131
+ The `.yml` IS the token source of truth no separate `tokens.json` needed. The builder generates CSS variables from it at build time using `gsp-brand-guidelines/token-mapping.md`.
130
132
 
131
- | Preset section | Token path | $type | Notes |
132
- |---------------|------------|-------|-------|
133
- | `color.*` | `color.brand.{key}`, `color.semantic.{key}` | `color` | Split into brand (primary, secondary, accent) and semantic (background, surface, on-primary, on-background, error, success, warning, info) |
134
- | `typography.*` | `font.family.{primary,mono}` | `fontFamily` | — |
135
- | `typography.*` | `typography.{level}` | `typography` | Composite: fontFamily, fontSize, fontWeight, lineHeight, letterSpacing. 9 levels: display, heading-1 through heading-3, body-large, body, body-small, caption, overline |
136
- | `spacing.*` | `spacing.{xs,sm,md,lg,xl,2xl,3xl,4xl}` | `dimension` | — |
137
- | `elevation.*` | `shadow.{sm,md,lg,xl}` | `shadow` | Parse CSS shadow shorthand into structured format |
138
- | `shape.*` | `radius.{none,sm,md,lg,full}` | `dimension` | `full` = 9999px |
139
- | `motion.*` | `motion.duration.{fast,normal}`, `motion.easing.default` | `duration`, `cubicBezier` | — |
133
+ ## Step 7: Write STYLE.md
140
134
 
141
- **Style-specific tokens:** If preset has extra groups (e.g., `glass`, `glow`, `gradient`, `syntax`), include under `$extensions.gsp-style-specific`.
135
+ Read the style template from `${CLAUDE_SKILL_DIR}/../../templates/phases/style.md`.
142
136
 
143
- **Dark mode:** If preset has `dark_mode` section, include under `$extensions.dark` with semantic color overrides.
137
+ Read BOTH source files:
138
+ - `styles/{name}.yml` — structured data (tokens, intensity, patterns, constraints, effects)
139
+ - `styles/{name}.md` — prose companion (design philosophy, CSS code hints, component styling, textures). Skip the `<role>` block — start from `<design-system>`.
144
140
 
145
- **Extensions metadata:** Always include `$extensions.gsp-style` with the preset name.
141
+ If the `.md` companion doesn't exist, render STYLE.md from `.yml` data only (thinner but functional).
146
142
 
147
- ## Step 7: Write tokens.json
143
+ Render into the template sections:
148
144
 
149
- If `{OUTPUT_PATH}/tokens.json` already exists, use `AskUserQuestion`: "tokens.json already exists — overwrite with style preset? Existing component-level tokens will be replaced." with options **Overwrite** and **Cancel**. If cancelled, skip writing tokens.json and proceed to the next step.
145
+ - **Intensity** from `.yml` `intensity:` block
146
+ - **Philosophy** — extract from `.md` companion's Design Philosophy section. Condense to 2-4 sentences capturing the emotional DNA and cultural references.
147
+ - **Patterns** — from `.yml` `patterns:` block, rendered as tables per component
148
+ - **Constraints** — from `.yml` `constraints:` block, rendered as never/always bullet lists
149
+ - **Effects** — from `.yml` `effects:` block, rendered as interaction vocabulary + state tables
150
+ - **Bold Bets** — extract from `.md` companion's "Non-Genericness" or "Bold Factor" section. Pick 3-5 most distinctive techniques with implementation specifics.
151
+ - **Implementation** — extract from `.md` companion's component stylings and CSS code:
152
+ - **Component Code Hints** — Tailwind/CSS patterns beyond the Patterns tables
153
+ - **Textures & Surfaces** — CSS for noise, halftone, grain (skip if style has none)
154
+ - **Typography Treatments** — text-stroke, tracking overrides (skip if standard)
155
+ - **Animation Recipes** — keyframes, transitions (skip if effects vocabulary is sufficient)
150
156
 
151
- Write the complete W3C Design Tokens JSON to `{OUTPUT_PATH}/tokens.json`.
157
+ Write to `{OUTPUT_PATH}/STYLE.md`.
152
158
 
153
- ## Step 8: Write foundation chunks
159
+ ## Step 8: Write INDEX.md
154
160
 
155
- Write 5 foundation chunks to `{OUTPUT_PATH}/foundations/`, each following `references/chunk-format.md`:
161
+ Write `{OUTPUT_PATH}/INDEX.md` header with phase/style/date, applied style name + description, file table ({preset-name}.yml, STYLE.md).
156
162
 
157
- - **color-system.md**brand colors, semantic colors, dark mode mapping, WCAG contrast notes
158
- - **typography.md** — 9-level type scale, font family details + Google Fonts link, weight rationale
159
- - **spacing.md** — spacing scale with base unit and usage guidelines
160
- - **elevation.md** — shadow scale with use cases per level + style-specific notes
161
- - **border-radius.md** — radius token scale + style-specific shape notes
163
+ Foundation chunks (color-system.md, typography.md, etc.) are NOT written in the quick path the `.yml` has the token values, STYLE.md has the composition rules. Foundation chunks are only produced by the full branding diamond where the brand-engineer adds deeper analysis (WCAG ratios, font loading, semantic rationale).
162
164
 
163
- ## Step 9: Write INDEX.md
164
-
165
- Write `{OUTPUT_PATH}/INDEX.md` — header with phase/style/date, applied style name + description, foundations table (chunk name, file link, ~lines), tokens table (tokens.json link).
166
-
167
- ## Step 10: Update state
165
+ ## Step 9: Update state
168
166
 
169
167
  If a brand STATE.md exists at the brand path:
170
168
  - Set patterns phase status to `complete`
@@ -174,7 +172,7 @@ If a brand STATE.md exists at the brand path:
174
172
  If a project config.json exists:
175
173
  - Add `"style_preset": "{name}"` to preferences
176
174
 
177
- ## Step 11: Completion output
175
+ ## Step 10: Completion output
178
176
 
179
- Show: header (`/gsp:style — {name} applied`), file tree (foundations/ + tokens.json + INDEX.md). Then `AskUserQuestion`: Start a project → `/gsp:project-brief`, Build components → `/gsp:brand-patterns`, Preview tokens, Try a different style → restart Step 2.
177
+ Show: header (`/gsp-style — {name} applied`), file tree ({name}.yml + STYLE.md + INDEX.md). Then `AskUserQuestion`: Start a project → `/gsp-project-brief`, Build components → `/gsp-brand-guidelines`, Preview tokens, Try a different style → restart Step 2.
180
178
  </process>
@@ -0,0 +1,79 @@
1
+ # Chunk Format Reference
2
+
3
+ Standard format for all GSP phase output files. Chunks are the primary output — agents write chunks directly, not monoliths.
4
+
5
+ ## File Format
6
+
7
+ Every chunk follows this structure:
8
+
9
+ # {Section/Component/Screen Name}
10
+
11
+ > Phase: {phase} | Brand/Project: {name} | Generated: {DATE}
12
+
13
+ ---
14
+
15
+ {Content for this chunk}
16
+
17
+ ---
18
+
19
+ ## Related
20
+
21
+ - [{Related chunk name}]({relative-path-to-related-chunk})
22
+
23
+ ## Naming Conventions
24
+
25
+ - **Singular, kebab-case, lowercase:** "Buttons" → `button.md`, "Date Picker" → `date-picker.md`
26
+ - **Screen files:** `screen-{NN}-{kebab-case-name}.md` (e.g., `screen-01-home.md`)
27
+
28
+ ## INDEX.md Format
29
+
30
+ Each phase directory gets an INDEX.md manifest:
31
+
32
+ # {Phase Name}
33
+ > Phase: {phase} | Brand/Project: {name} | Generated: {DATE}
34
+
35
+ | Chunk | File | ~Lines |
36
+ |-------|------|--------|
37
+ | {Section} | [{filename}](./{filename}) | ~{N} |
38
+
39
+ Lightweight — just a lookup table. No prose.
40
+
41
+ ## Rules
42
+
43
+ - **Chunks are primary output** — agents write chunks directly to the phase directory
44
+ - **No monoliths** — do not write a single large file then re-chunk it
45
+ - **Size target:** 50-200 lines per chunk
46
+ - **Self-contained:** each chunk must be understandable without loading other chunks
47
+ - **Cross-references:** `## Related` section uses relative paths to related chunks
48
+ - **Idempotent:** re-running a phase regenerates all chunks in that phase directory
49
+
50
+ ## Output Budgets
51
+
52
+ Context is finite. Every line in a chunk is consumed by downstream agents. Budget accordingly.
53
+
54
+ ### Per-chunk budgets
55
+
56
+ | Chunk type | Target | Hard max | Notes |
57
+ |-----------|--------|----------|-------|
58
+ | Phase chunk (design, research, etc.) | 50-150 lines | 200 lines | Self-contained, one concept per chunk |
59
+ | INDEX.md | 10-30 lines | 50 lines | Lookup table only, no prose |
60
+ | BUILD-LOG.md | 50-100 lines | 150 lines | Summary + tables, not narrative |
61
+ | Component spec | 30-80 lines | 120 lines | Props, states, behavior — not full implementation |
62
+ | Screen spec | 80-150 lines | 200 lines | Layout, components, interactions, states |
63
+
64
+ ### Per-phase budgets (total across all chunks)
65
+
66
+ | Phase | Target total | Hard max | Typical chunks |
67
+ |-------|-------------|----------|----------------|
68
+ | Brief | 100-200 lines | 300 lines | 2-4 |
69
+ | Research | 200-400 lines | 600 lines | 5-8 |
70
+ | Design | 300-600 lines | 800 lines | 6-12 |
71
+ | Critique | 100-200 lines | 300 lines | 2-4 |
72
+ | Build log | 50-100 lines | 150 lines | 1 |
73
+ | Review | 100-200 lines | 300 lines | 2-4 |
74
+
75
+ ### Terminal output (inline skills)
76
+
77
+ - **Diagnostic** (doctor, progress): uncapped — user needs to see it, does not persist in agent context
78
+ - **Greeting/status** (start): 20-40 lines
79
+ - **Phase transitions**: 10-20 lines
@@ -0,0 +1,124 @@
1
+ # Style Preset YAML Schema
2
+
3
+ Template for brand-derived style preset files (`{brand-name}.yml`). All token values must trace to foundation chunks. See any preset in `styles/` for a complete example.
4
+
5
+ ```yaml
6
+ name: {brand-slug}
7
+ description: {one-line brand aesthetic summary}
8
+ tags: [5-8 fuzzy-match tags for style discovery]
9
+ source: brand # marks this as brand-derived, not a GSP preset
10
+
11
+ tokens:
12
+ color:
13
+ primary: "{hex}" # from identity/color-system.md
14
+ secondary: "{hex}"
15
+ accent: "{hex}"
16
+ background: "{hex}"
17
+ surface: "{hex}"
18
+ on-primary: "{hex}"
19
+ on-background: "{hex}"
20
+ error: "{hex}"
21
+ success: "{hex}"
22
+ warning: "{hex}"
23
+ info: "{hex}"
24
+ muted: "{hex}"
25
+
26
+ typography:
27
+ font-family-primary: "{font stack}" # from identity/typography.md
28
+ font-family-mono: "{font stack}"
29
+ font-weight-heading: {number}
30
+ font-weight-body: {number}
31
+ font-size-base: "{px}"
32
+ line-height-base: {number}
33
+
34
+ shape:
35
+ border-radius-sm: "{px}" # from patterns/component specs
36
+ border-radius-md: "{px}"
37
+ border-radius-lg: "{px}"
38
+ border-width: "{px}"
39
+ border-color: "{hex}"
40
+
41
+ elevation:
42
+ shadow-sm: "{value}"
43
+ shadow-md: "{value}"
44
+ shadow-lg: "{value}"
45
+ shadow-xl: "{value}"
46
+
47
+ spacing:
48
+ base: {number}
49
+ scale: [{values}]
50
+
51
+ motion:
52
+ duration-fast: "{ms}"
53
+ duration-normal: "{ms}"
54
+ easing: "{value}"
55
+
56
+ dark_mode:
57
+ color:
58
+ background: "{hex}"
59
+ surface: "{hex}"
60
+ on-background: "{hex}"
61
+ border-color: "{hex}"
62
+ muted: "{hex}"
63
+
64
+ intensity:
65
+ variance: {1-10} # layout creativity — 1=strict grid, 10=experimental
66
+ motion: {1-10} # animation energy — 1=instant/none, 10=cinematic
67
+ density: {1-10} # content packing — 1=airy/spacious, 10=dense/compact
68
+
69
+ patterns:
70
+ card:
71
+ border: "{spec}"
72
+ shadow: "{spec}"
73
+ radius: "{spec}"
74
+ background: "{spec}"
75
+ padding: "{spec}"
76
+ button-primary:
77
+ background: "{spec}"
78
+ border: "{spec}"
79
+ text: "{spec}"
80
+ radius: "{spec}"
81
+ button-secondary:
82
+ background: "{spec}"
83
+ border: "{spec}"
84
+ text: "{spec}"
85
+ radius: "{spec}"
86
+ input:
87
+ border: "{spec}"
88
+ radius: "{spec}"
89
+ background: "{spec}"
90
+ focus: "{spec}"
91
+ badge:
92
+ shape: "{spec}"
93
+ text: "{spec}"
94
+ nav:
95
+ style: "{spec}"
96
+ links: "{spec}"
97
+ layout:
98
+ archetype: "{name}" # centered, asymmetric-grid, sidebar, dashboard, editorial
99
+ max-width: "{class}"
100
+ section-spacing: "{spec}"
101
+ grid-gap: "{spec}"
102
+ surfaces: "{spec}" # background treatments (grid, dots, gradient, clean)
103
+ decoration: "{spec}" # decorative elements (shapes, lines, labels)
104
+
105
+ constraints:
106
+ never:
107
+ - "{thing to never do — hard boundary}"
108
+ always:
109
+ - "{thing to always do — non-negotiable}"
110
+
111
+ effects:
112
+ interaction-vocabulary: [{named-techniques}]
113
+ hover:
114
+ card: "{technique + spec}"
115
+ button: "{technique + spec}"
116
+ active:
117
+ button: "{technique + spec}"
118
+ focus:
119
+ general: "{technique + spec}"
120
+ transition: "{duration + easing spec}"
121
+
122
+ compatibility: [] # leave empty for brand styles
123
+ clashes: [] # leave empty for brand styles
124
+ ```
@@ -1,6 +1,6 @@
1
1
  # Style Preset Index
2
2
  # 34 styles — sourced from designprompts.dev, GSP trend references, and original presets
3
- # Tags enable fuzzy matching: /gsp:style "something dark and techy" → cyberpunk, terminal, modern-dark
3
+ # Tags enable fuzzy matching: /gsp-style "something dark and techy" → cyberpunk, terminal, modern-dark
4
4
 
5
5
  styles:
6
6
  # ── Minimal ─────────────────────────
@@ -62,5 +62,85 @@ dark_mode:
62
62
  surface: "#251E19"
63
63
  on-background: "#E8DFD4"
64
64
 
65
+ intensity:
66
+ variance: 3 # classical symmetry with occasional 60/40 splits, mostly balanced
67
+ motion: 3 # dignified and deliberate — sepia reveals, brass shimmer, no playfulness
68
+ density: 4 # ornamental but restrained — flourishes, dividers, textures fill space with purpose
69
+
70
+ patterns:
71
+ card:
72
+ border: "{shape.border-width} solid {shape.border-color}"
73
+ shadow: "none resting, {elevation.shadow-lg} on hover — warm depth"
74
+ radius: "{shape.border-radius-md}"
75
+ background: "one layer above page — aged oak surface"
76
+ decoration: "brass corner flourishes (24px L-brackets) at opposing corners, opacity 0.6→1.0 on hover"
77
+ button-primary:
78
+ background: "{brass.gradient}"
79
+ border: "none"
80
+ shadow: "inset highlights + depth shadow, brass glow on hover"
81
+ text: "uppercase, tracking-[0.15em], {typography.font-family-display}, engraved text-shadow"
82
+ radius: "{shape.border-radius-md}"
83
+ button-secondary:
84
+ background: "transparent"
85
+ border: "2px solid {color.accent}"
86
+ text: "uppercase, tracking-[0.15em], {color.accent}"
87
+ radius: "{shape.border-radius-md}"
88
+ hover: "fills crimson — border + bg shift to accentSecondary, text inverts"
89
+ input:
90
+ border: "{shape.border-width} solid {shape.border-color}"
91
+ radius: "{shape.border-radius-md}"
92
+ background: "aged oak surface"
93
+ focus: "border-{color.accent}, ring-2 ring-{color.accent}/30 ring-offset-2"
94
+ placeholder: "italic serif, faded ink color"
95
+ badge:
96
+ shape: "circular — crimson wax seal with radial gradient and inset shadows"
97
+ text: "centered icon (star), no text — visual accent"
98
+ nav:
99
+ style: "classical horizontal with brass accent links"
100
+ links: "serif, hover shifts to brass with tracking increase (0.2em→0.25em)"
101
+ layout:
102
+ archetype: "classical-symmetric"
103
+ max-width: "max-w-6xl"
104
+ section-spacing: "py-24 to py-32 — contemplative breathing room"
105
+ grid-gap: "gap-8 to gap-12"
106
+ surfaces: "paper texture (3% opacity noise, overlay blend) + vignette darkening edges"
107
+ decoration: "ornate dividers with centered glyphs, arch-topped images (40% 40% 0 0 / 20% 20% 0 0), Roman numeral volume labels"
108
+
109
+ constraints:
110
+ never:
111
+ - "sans-serif fonts in headings — serif typography only (Cormorant, Crimson, Cinzel)"
112
+ - "bright saturated colors — everything aged and warm-toned"
113
+ - "pure black (#000000) or pure white (#FFFFFF) — warm mahogany and parchment"
114
+ - "bouncy or elastic animations — dignified motion only, like turning heavy pages"
115
+ - "sharp geometric decorations — favor architectural curves (arch-tops, flourishes)"
116
+ - "cold tones mixing with warm palette — exclusively warm throughout"
117
+ - "flat backgrounds without texture — paper grain and vignette are essential"
118
+ - "playful or whimsical elements — scholarly gravitas at all times"
119
+ always:
120
+ - "sepia filter (0.6) on all images by default, full color reveals on hover (700ms)"
121
+ - "brass (#C9A962) for ALL interactive elements — buttons, links, focus rings, hover states"
122
+ - "Roman numerals (Volume I, II, III) for section numbering"
123
+ - "arch-topped images (40% 40% 0 0 / 20% 20% 0 0 border-radius)"
124
+ - "paper texture overlay (3% opacity) + vignette radial gradient"
125
+ - "corner flourishes on major containers (brass L-brackets)"
126
+ - "ornate dividers with decorative glyphs between sections"
127
+ - "drop caps on introductory paragraphs (Cinzel, text-7xl, brass)"
128
+
129
+ effects:
130
+ interaction-vocabulary: [brass-shimmer, sepia-reveal, dignified-lift, flourish-brighten]
131
+ hover:
132
+ card: "dignified-lift — shadow appears (0→lg), border shifts brass, flourish-brighten on corners"
133
+ button-primary: "brass-shimmer — brightness increases to 110%, glow shadow appears"
134
+ button-secondary: "crimson transform — border + bg shift to crimson, text inverts to parchment"
135
+ image: "sepia-reveal — sepia(0.6)→sepia(0), scale-105 over 700ms"
136
+ link: "brass-shimmer — color shifts to brass, tracking widens slightly"
137
+ active:
138
+ button: "deeper inset shadow — pressed-into-metal feel"
139
+ focus:
140
+ general: "ring-2 ring-{color.accent} ring-offset-2 ring-offset-background"
141
+ transition: "duration-300 to duration-700, ease-out"
142
+ ambient:
143
+ - "brass-breathe — subtle brightness oscillation on brass buttons (100%→110%, 2s cycle)"
144
+
65
145
  compatibility: [swiss-minimalist, monochrome]
66
146
  clashes: [cyberpunk, vaporwave, retro]