@phuc1403/musketeer 0.9.0 → 0.10.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 (163) hide show
  1. package/INSTALLATION.md +52 -52
  2. package/bin/musketeer.js +168 -168
  3. package/package.json +48 -48
  4. package/src/dotnet-scaffold-copier.js +79 -79
  5. package/src/provisioner/detect.js +93 -93
  6. package/src/self-update.js +77 -77
  7. package/template/.claude/agents/git-manager.md +18 -18
  8. package/template/.claude/agents/hallmark-auditor.md +78 -78
  9. package/template/.claude/agents/researcher.md +33 -33
  10. package/template/.claude/hooks/block-unsafe-adr-title.cjs +85 -85
  11. package/template/.claude/hooks/init-adr-dir.cjs +173 -173
  12. package/template/.claude/hooks/inject-adr-flags.cjs +94 -94
  13. package/template/.claude/hooks/lib/adr/command-scan.cjs +115 -115
  14. package/template/.claude/hooks/lib/characteristics/checker.cjs +357 -357
  15. package/template/.claude/hooks/lib/git-info-cache.cjs +191 -191
  16. package/template/.claude/hooks/sync-adr-toc.cjs +146 -146
  17. package/template/.claude/hooks/usage-quota-cache-refresh.cjs +166 -166
  18. package/template/.claude/hooks/validate-characteristics-hook.cjs +66 -66
  19. package/template/.claude/hooks/validate-cml-hook.js +145 -145
  20. package/template/.claude/skills/adr-writer/SKILL.md +48 -48
  21. package/template/.claude/skills/adr-writer/references/adr-example.md +35 -35
  22. package/template/.claude/skills/architecture-characteristic-writer/SKILL.md +215 -215
  23. package/template/.claude/skills/architecture-characteristic-writer/assets/worksheet-template.md +29 -29
  24. package/template/.claude/skills/architecture-characteristic-writer/references/characteristics-catalog.md +40 -40
  25. package/template/.claude/skills/architecture-characteristic-writer/scripts/ranking-table.cjs +171 -171
  26. package/template/.claude/skills/context-map/SKILL.md +80 -80
  27. package/template/.claude/skills/context-map/example.cml +106 -106
  28. package/template/.claude/skills/context-map/reference/Bounded Context/Bounded Context.md +40 -40
  29. package/template/.claude/skills/context-map/reference/Bounded Context/businessModel.md +5 -5
  30. package/template/.claude/skills/context-map/reference/Bounded Context/domainVisionStatement.md +2 -2
  31. package/template/.claude/skills/context-map/reference/Bounded Context/evolution.md +5 -5
  32. package/template/.claude/skills/context-map/reference/Bounded Context/implementationTechnology.md +1 -1
  33. package/template/.claude/skills/context-map/reference/Bounded Context/implements.md +1 -1
  34. package/template/.claude/skills/context-map/reference/Bounded Context/knowledgeLevel.md +4 -4
  35. package/template/.claude/skills/context-map/reference/Bounded Context/realizes.md +9 -9
  36. package/template/.claude/skills/context-map/reference/Bounded Context/refines.md +10 -10
  37. package/template/.claude/skills/context-map/reference/Bounded Context/responsibilities.md +26 -26
  38. package/template/.claude/skills/context-map/reference/Bounded Context/type.md +23 -23
  39. package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Anticorruption Layer.md +5 -5
  40. package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Bounded Context Relationship.md +12 -12
  41. package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Conformist.md +5 -5
  42. package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Customer-Supplier (C-S).md +22 -22
  43. package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Open Host Service.md +4 -4
  44. package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Partnership (P).md +13 -13
  45. package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Published Language.md +4 -4
  46. package/template/.claude/skills/context-map/reference/Bounded Context Relationship/Shared Kernel (SK).md +12 -12
  47. package/template/.claude/skills/context-map/reference/Context Map.md +62 -62
  48. package/template/.claude/skills/context-map/reference/Domain/Domain.md +30 -30
  49. package/template/.claude/skills/context-map/reference/Domain/supports.md +33 -33
  50. package/template/.claude/skills/context-map/reference/Domain/type.md +3 -3
  51. package/template/.claude/skills/context-map/reference/Semantic Rules.md +32 -32
  52. package/template/.claude/skills/hallmark/SKILL.md +552 -552
  53. package/template/.claude/skills/hallmark/references/anti-patterns.md +412 -412
  54. package/template/.claude/skills/hallmark/references/assets.md +406 -406
  55. package/template/.claude/skills/hallmark/references/color.md +95 -95
  56. package/template/.claude/skills/hallmark/references/component-cookbook.md +256 -256
  57. package/template/.claude/skills/hallmark/references/components/c1-outlined-chip.md +12 -12
  58. package/template/.claude/skills/hallmark/references/components/c2-inline-form-as-cta.md +16 -16
  59. package/template/.claude/skills/hallmark/references/components/c3-typographic-link.md +8 -8
  60. package/template/.claude/skills/hallmark/references/components/c4-sticky-bottom-bar.md +16 -16
  61. package/template/.claude/skills/hallmark/references/components/f1-bento-grid.md +20 -20
  62. package/template/.claude/skills/hallmark/references/components/f2-sticky-scroll-stack.md +20 -20
  63. package/template/.claude/skills/hallmark/references/components/f3-tabular-spec-sheet.md +11 -11
  64. package/template/.claude/skills/hallmark/references/components/f4-step-sequence.md +11 -11
  65. package/template/.claude/skills/hallmark/references/components/f5-annotated-screenshot.md +11 -11
  66. package/template/.claude/skills/hallmark/references/components/f6-product-card-grid.md +41 -41
  67. package/template/.claude/skills/hallmark/references/components/ft1-mast-headed.md +13 -13
  68. package/template/.claude/skills/hallmark/references/components/ft2-inline-rule-single-line.md +10 -10
  69. package/template/.claude/skills/hallmark/references/components/ft3-index-style-category-list.md +12 -12
  70. package/template/.claude/skills/hallmark/references/components/ft4-dense-typographic.md +10 -10
  71. package/template/.claude/skills/hallmark/references/components/ft5-statement.md +21 -21
  72. package/template/.claude/skills/hallmark/references/components/ft6-letter-close.md +19 -19
  73. package/template/.claude/skills/hallmark/references/components/ft7-newsletter-first.md +27 -27
  74. package/template/.claude/skills/hallmark/references/components/ft8-marquee-scroll.md +25 -25
  75. package/template/.claude/skills/hallmark/references/components/h1-marquee.md +15 -15
  76. package/template/.claude/skills/hallmark/references/components/h2-split-diptych.md +15 -15
  77. package/template/.claude/skills/hallmark/references/components/h3-quote-led.md +11 -11
  78. package/template/.claude/skills/hallmark/references/components/h4-stat-led.md +14 -14
  79. package/template/.claude/skills/hallmark/references/components/h5-letter-hero.md +11 -11
  80. package/template/.claude/skills/hallmark/references/components/h6-photographic-fold.md +16 -16
  81. package/template/.claude/skills/hallmark/references/components/h7-demo-video-clipped-by-viewport-edge.md +27 -27
  82. package/template/.claude/skills/hallmark/references/components/h8-mockup-split-browser-framed.md +23 -23
  83. package/template/.claude/skills/hallmark/references/components/h9-custom-illustration-centerpiece.md +27 -27
  84. package/template/.claude/skills/hallmark/references/components/n1-wordmark-2-links.md +12 -12
  85. package/template/.claude/skills/hallmark/references/components/n10-floating-on-scroll-morph.md +19 -19
  86. package/template/.claude/skills/hallmark/references/components/n2-floating-chip.md +14 -14
  87. package/template/.claude/skills/hallmark/references/components/n3-side-rail.md +14 -14
  88. package/template/.claude/skills/hallmark/references/components/n4-hidden-behind-k.md +9 -9
  89. package/template/.claude/skills/hallmark/references/components/n5-floating-pill.md +28 -28
  90. package/template/.claude/skills/hallmark/references/components/n6-newspaper-masthead.md +24 -24
  91. package/template/.claude/skills/hallmark/references/components/n7-brutal-slab.md +22 -22
  92. package/template/.claude/skills/hallmark/references/components/n8-terminal-command.md +21 -21
  93. package/template/.claude/skills/hallmark/references/components/n9-edge-aligned-minimal.md +17 -17
  94. package/template/.claude/skills/hallmark/references/components/s1-left-margin-numbered.md +15 -15
  95. package/template/.claude/skills/hallmark/references/components/s2-hanging.md +13 -13
  96. package/template/.claude/skills/hallmark/references/components/s3-sticky-pinned.md +19 -19
  97. package/template/.claude/skills/hallmark/references/components/s4-inline-no-break.md +11 -11
  98. package/template/.claude/skills/hallmark/references/components/s5-bottom-anchored.md +13 -13
  99. package/template/.claude/skills/hallmark/references/components/t1-pull-quote-with-marginalia.md +12 -12
  100. package/template/.claude/skills/hallmark/references/components/t2-logo-wall-hairline.md +19 -19
  101. package/template/.claude/skills/hallmark/references/components/t3-single-huge-quote.md +11 -11
  102. package/template/.claude/skills/hallmark/references/components/t4-numbered-stat-strip.md +14 -14
  103. package/template/.claude/skills/hallmark/references/contract.md +24 -24
  104. package/template/.claude/skills/hallmark/references/copy.md +182 -182
  105. package/template/.claude/skills/hallmark/references/custom-craft.md +626 -626
  106. package/template/.claude/skills/hallmark/references/custom-theme.md +329 -329
  107. package/template/.claude/skills/hallmark/references/design-md.md +116 -116
  108. package/template/.claude/skills/hallmark/references/export-formats.md +328 -328
  109. package/template/.claude/skills/hallmark/references/floating-nav.md +89 -89
  110. package/template/.claude/skills/hallmark/references/genres/atmospheric.md +65 -65
  111. package/template/.claude/skills/hallmark/references/genres/editorial.md +70 -70
  112. package/template/.claude/skills/hallmark/references/genres/modern-minimal.md +67 -67
  113. package/template/.claude/skills/hallmark/references/genres/playful.md +65 -65
  114. package/template/.claude/skills/hallmark/references/hero-enrichment.md +474 -474
  115. package/template/.claude/skills/hallmark/references/imagery-kit.md +170 -170
  116. package/template/.claude/skills/hallmark/references/interaction-and-states.md +207 -207
  117. package/template/.claude/skills/hallmark/references/layout-and-space.md +111 -111
  118. package/template/.claude/skills/hallmark/references/macrostructures/01-bento-grid.md +35 -35
  119. package/template/.claude/skills/hallmark/references/macrostructures/02-long-document.md +34 -34
  120. package/template/.claude/skills/hallmark/references/macrostructures/03-marquee-hero.md +31 -31
  121. package/template/.claude/skills/hallmark/references/macrostructures/04-stat-led.md +32 -32
  122. package/template/.claude/skills/hallmark/references/macrostructures/05-workbench.md +32 -32
  123. package/template/.claude/skills/hallmark/references/macrostructures/06-conversational-faq.md +33 -33
  124. package/template/.claude/skills/hallmark/references/macrostructures/07-manifesto.md +32 -32
  125. package/template/.claude/skills/hallmark/references/macrostructures/08-photographic.md +34 -34
  126. package/template/.claude/skills/hallmark/references/macrostructures/09-quote-led.md +32 -32
  127. package/template/.claude/skills/hallmark/references/macrostructures/10-specimen.md +32 -32
  128. package/template/.claude/skills/hallmark/references/macrostructures/11-catalogue.md +23 -23
  129. package/template/.claude/skills/hallmark/references/macrostructures/12-letter.md +23 -23
  130. package/template/.claude/skills/hallmark/references/macrostructures/13-index-first.md +23 -23
  131. package/template/.claude/skills/hallmark/references/macrostructures/14-narrative-workflow.md +23 -23
  132. package/template/.claude/skills/hallmark/references/macrostructures/15-split-studio.md +23 -23
  133. package/template/.claude/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -23
  134. package/template/.claude/skills/hallmark/references/macrostructures/17-type-specimen.md +23 -23
  135. package/template/.claude/skills/hallmark/references/macrostructures/18-portfolio-grid.md +23 -23
  136. package/template/.claude/skills/hallmark/references/macrostructures/19-map-diagram.md +23 -23
  137. package/template/.claude/skills/hallmark/references/macrostructures/20-ecosystem-index.md +23 -23
  138. package/template/.claude/skills/hallmark/references/macrostructures/21-component-playground.md +23 -23
  139. package/template/.claude/skills/hallmark/references/macrostructures.md +89 -89
  140. package/template/.claude/skills/hallmark/references/microinteractions.md +260 -260
  141. package/template/.claude/skills/hallmark/references/motion.md +109 -109
  142. package/template/.claude/skills/hallmark/references/preview-examples.md +49 -49
  143. package/template/.claude/skills/hallmark/references/responsive.md +138 -138
  144. package/template/.claude/skills/hallmark/references/slop-test.md +205 -205
  145. package/template/.claude/skills/hallmark/references/structure.md +164 -164
  146. package/template/.claude/skills/hallmark/references/study.md +511 -511
  147. package/template/.claude/skills/hallmark/references/typography.md +243 -243
  148. package/template/.claude/skills/hallmark/references/verbs/audit.md +25 -25
  149. package/template/.claude/skills/hallmark/references/verbs/redesign.md +269 -269
  150. package/template/.claude/skills/hallmark-loop/SKILL.md +105 -105
  151. package/template/.claude/skills/hallmark-loop/references/auditor-call.md +60 -60
  152. package/template/.claude/skills/hallmark-loop/references/capture.md +78 -78
  153. package/template/.claude/skills/hallmark-loop/references/loop-control.md +79 -79
  154. package/template/.claude/skills/handoff/SKILL.md +15 -15
  155. package/template/.claude/skills/knowledge-crunching/SKILL.md +94 -94
  156. package/template/.claude/skills/research/SKILL.md +69 -69
  157. package/template/.claude/skills/tdd/SKILL.md +142 -142
  158. package/template/.claude/skills/tdd/deep-modules.md +15 -15
  159. package/template/.claude/skills/tdd/interface-design.md +31 -31
  160. package/template/.claude/skills/tdd/mocking.md +59 -59
  161. package/template/.claude/skills/tdd/refactoring.md +10 -10
  162. package/template/.claude/skills/tdd/tests.md +61 -61
  163. package/template/.claude/statusline.cjs +100 -37
@@ -1,170 +1,170 @@
1
- # Imagery kit — curated abstract assets, hosted, ready
2
-
3
- A small set of pre-generated abstract / decorative imagery that any Hallmark output can pull from when a brief allows non-photographic imagery. The kit lives at:
4
-
5
- ```
6
- https://www.usehallmark.com/imagery/<category>/<file>
7
- ```
8
-
9
- The skill doesn't ship the binaries — it ships the manifest. References are absolute URLs. If the asset is missing (404), the skill falls back to source canon #2 in [`assets.md` § Placeholder strategy](assets.md) (hand-built SVG) without erroring.
10
-
11
- **Why this exists.** The v0.9.0 watercolor sprinkle was generated per-emit and was inconsistent. The kit recovers that aesthetic but as discrete, swappable, deliberately-composed assets. Compose with them like a senior frontend engineer: layered transparent PNG behind text, biased off-centre, intentionally large, mix-blend-mode where it earns its place. Not "abstract gradient on top of headline" — that's the AI default.
12
-
13
- ---
14
-
15
- ## Categories
16
-
17
- | Category | What | Format | Example uses |
18
- | --- | --- | --- | --- |
19
- | **watercolor** | Full-bleed soft-edge painterly fields. Warm + cool variants per palette family. | WebP | Section background accent; hero-half flood; behind-quote wash. |
20
- | **transparent** | Organic blob / brushstroke / stylized mark on transparent background. | PNG | Layered hero composition (large, off-centre, behind text). The masterclass move. |
21
- | **ornament** | Small hand-drawn stamps, plates, roman numerals, decorative flourishes. | SVG | Beside a quote; in the section-label gutter; closing a letter. |
22
- | **texture** | Subtle paper, weave, riso-dot, cross-hatch fields. Tile-able. | WebP | Body grain via `mix-blend-mode: multiply`; section-divider banding. |
23
- | **silhouette** | Abstract bottle / box / device / book / mug / card shapes. | PNG | Empty product slots before user uploads photos; comparison rows. |
24
- | **pattern** | Repeating motifs that read as fabric / paper / printed material. | WebP | Section-band texture; full-bleed fills behind decorative text. |
25
-
26
- **Naming:** `<category>-<palette-family>-<variant>.<ext>` — e.g. `watercolor-warm-01.webp`, `transparent-brush-cool-03.png`, `ornament-stamp-01.svg`, `texture-grain-paper-02.webp`. Palette families: `warm` · `cool` · `neutral` · `chromatic`.
27
-
28
- ---
29
-
30
- ## Manifest (placeholder until generation pass ships)
31
-
32
- When images land in `site/public/imagery/<category>/`, list them here as a key/value catalogue:
33
-
34
- ```
35
- watercolor-warm-01.webp 1600×900 warm orange · cream paper hero half-flood, atmospheric
36
- watercolor-cool-01.webp 1600×900 cool blue · greyscale quote-behind wash
37
- transparent-brush-warm-01 1200×1200 burnt orange brushstroke layered hero, off-centre
38
- transparent-blob-cool-01 1200×1200 cobalt organic shape layered hero, behind headline
39
- ornament-stamp-01.svg inline ink-only stamp w/ numeral label-gutter, letter close
40
- texture-grain-paper-01 512×512 cream paper grain (tileable) body grain, blend-multiply
41
- silhouette-bottle-01.png 600×900 abstract bottle, transparent empty product slot
42
- silhouette-card-01.png 900×600 abstract product card comparison row
43
- pattern-cross-warm-01 400×400 cross-hatch warm (tileable) section-band texture
44
- ```
45
-
46
- The skill picks an asset by matching the active theme's palette family + the brief's tone, then references it by absolute URL. Picking logic lives in Step 4 of [SKILL.md](../SKILL.md) — eyeball the manifest, choose the closest match, fall back if the file 404s.
47
-
48
- ---
49
-
50
- ## Usage patterns — how a senior engineer would compose these
51
-
52
- ### Layered hero composition (the masterclass move)
53
-
54
- A transparent abstract object behind hero text. The image is bigger than you think it should be — that's what makes it feel intentional, not decorative.
55
-
56
- ```css
57
- .hero { position: relative; isolation: isolate; }
58
-
59
- .hero__art {
60
- position: absolute;
61
- top: 50%;
62
- right: -10%;
63
- transform: translateY(-50%);
64
- width: clamp(60%, 80vh, 1400px);
65
- height: auto;
66
- z-index: 0;
67
- pointer-events: none;
68
- /* Optional warmth: */
69
- mix-blend-mode: multiply;
70
- opacity: 0.85;
71
- }
72
-
73
- .hero__art--bias-left { right: auto; left: -10%; }
74
-
75
- .hero > * { position: relative; z-index: 1; }
76
- ```
77
-
78
- Bias to one side (left or right, never centred). The text sits at `z-index: 1`, the art at `z-index: 0`. Test mobile: art may need to scale down or shift to avoid the headline at 320 px.
79
-
80
- ### Section background wash
81
-
82
- A watercolor file as a full-bleed section accent. One section per page, never global.
83
-
84
- ```css
85
- .section--wash { position: relative; isolation: isolate; }
86
- .section--wash::before {
87
- content: "";
88
- position: absolute;
89
- inset: 0;
90
- background: url("https://www.usehallmark.com/imagery/watercolor/watercolor-warm-01.webp") center / cover no-repeat;
91
- opacity: 0.6;
92
- z-index: -1;
93
- pointer-events: none;
94
- }
95
- ```
96
-
97
- ### Decoration
98
-
99
- Inline ornament beside a quote or in the section-label gutter. Small. No border, no shadow, no animation.
100
-
101
- ```html
102
- <p class="section-label">
103
- <span class="num">02</span>
104
- <img class="section-label__ornament" src="…/imagery/ornament/ornament-stamp-01.svg" alt="" aria-hidden="true" />
105
- <span>Examples</span>
106
- </p>
107
- ```
108
-
109
- ```css
110
- .section-label__ornament { width: 1.5em; height: auto; vertical-align: middle; }
111
- ```
112
-
113
- ### Texture overlay
114
-
115
- Grain over a solid colour. Always opacity-capped at `0.15`.
116
-
117
- ```css
118
- .texture-grain {
119
- background-image: url("…/imagery/texture/texture-grain-paper-01.webp"), var(--paper-fill);
120
- background-size: 256px 256px, cover;
121
- background-blend-mode: multiply;
122
- opacity: 1; /* the grain texture is at 0.15 in the source asset */
123
- }
124
- ```
125
-
126
- ### Empty state
127
-
128
- Generic silhouette in unfilled data slots, greyscale-tinted, with a "Replace with real photo" hint visible to the developer (HTML comment).
129
-
130
- ```html
131
- <!-- TODO: Replace with real product photo, target size: 600×900 -->
132
- <picture class="product-card__photo product-card__photo--empty">
133
- <img src="…/imagery/silhouette/silhouette-bottle-01.png" alt="Hand-poured ceramic vessel, studio lighting" />
134
- </picture>
135
- ```
136
-
137
- ---
138
-
139
- ## Anti-patterns
140
-
141
- - **Don't use kit imagery as the literal subject.** An abstract bottle is *not* a stand-in for an actual coffee-shop hero — those need photographic placeholders (Picsum / Unsplash). The kit is for atmosphere / composition / decoration, not subject replacement.
142
- - **Don't layer 3+ kit pieces on one page.** Restraint. One transparent object in the hero + one wash in a later section is the cap.
143
- - **Don't apply the same watercolor wash to multiple sections.** It's a section accent, not a global treatment.
144
- - **Don't use kit imagery in modern-minimal genre** (Stripe / Linear / ElevenLabs school). That genre's whole point is the absence of decorative imagery.
145
- - **Don't centre the layered hero art.** Centred behind text is the AI-default move. Bias to one side, off-axis.
146
- - **Don't use mix-blend-mode without testing on the active paper.** `multiply` over a dark canvas inverts; `screen` over light paper washes out. Eyeball the result per theme.
147
-
148
- ---
149
-
150
- ## Generation pipeline (out-of-band, one-time)
151
-
152
- The kit is generated once per palette family, post-processed, and committed to the marketing site's public folder:
153
-
154
- ```
155
- site/public/imagery/
156
- ├── watercolor/ ~6 files × 4 palette families = 24 WebPs
157
- ├── transparent/ ~6 files × 4 palette families = 24 PNGs
158
- ├── ornament/ ~8 SVGs (palette-agnostic, use currentColor)
159
- ├── texture/ ~6 tile-able WebPs
160
- ├── silhouette/ ~6 PNGs (palette-agnostic, transparent)
161
- └── pattern/ ~6 tile-able WebPs
162
- ```
163
-
164
- **Tooling.** Nanobanana 2 / Recraft V4 with reference images. Prompt seed-list per category lives at the top of each file's directory in a `prompts.md` (one-line prompts, results pinned by seed for reproducibility).
165
-
166
- **Post-processing.** Trim, transparent-background where applicable, colour-balance against Hallmark's OKLCH palette tokens, save as WebP for size + PNG where alpha matters. Ornaments as inline SVG so they inherit `currentColor`.
167
-
168
- **Total target weight.** ≤ 5 MB across all categories. Each individual file ≤ 200 KB. Lossy WebP at q=80 unless the image needs lossless (ornaments → SVG; transparents → PNG with `pngquant`).
169
-
170
- **Re-generation.** Treat the kit as a refreshable batch, not a one-off. When the palette catalogue changes (new theme, new accent hue), re-generate the relevant palette family. Manifest above is the spec; assets are the deliverable.
1
+ # Imagery kit — curated abstract assets, hosted, ready
2
+
3
+ A small set of pre-generated abstract / decorative imagery that any Hallmark output can pull from when a brief allows non-photographic imagery. The kit lives at:
4
+
5
+ ```
6
+ https://www.usehallmark.com/imagery/<category>/<file>
7
+ ```
8
+
9
+ The skill doesn't ship the binaries — it ships the manifest. References are absolute URLs. If the asset is missing (404), the skill falls back to source canon #2 in [`assets.md` § Placeholder strategy](assets.md) (hand-built SVG) without erroring.
10
+
11
+ **Why this exists.** The v0.9.0 watercolor sprinkle was generated per-emit and was inconsistent. The kit recovers that aesthetic but as discrete, swappable, deliberately-composed assets. Compose with them like a senior frontend engineer: layered transparent PNG behind text, biased off-centre, intentionally large, mix-blend-mode where it earns its place. Not "abstract gradient on top of headline" — that's the AI default.
12
+
13
+ ---
14
+
15
+ ## Categories
16
+
17
+ | Category | What | Format | Example uses |
18
+ | --- | --- | --- | --- |
19
+ | **watercolor** | Full-bleed soft-edge painterly fields. Warm + cool variants per palette family. | WebP | Section background accent; hero-half flood; behind-quote wash. |
20
+ | **transparent** | Organic blob / brushstroke / stylized mark on transparent background. | PNG | Layered hero composition (large, off-centre, behind text). The masterclass move. |
21
+ | **ornament** | Small hand-drawn stamps, plates, roman numerals, decorative flourishes. | SVG | Beside a quote; in the section-label gutter; closing a letter. |
22
+ | **texture** | Subtle paper, weave, riso-dot, cross-hatch fields. Tile-able. | WebP | Body grain via `mix-blend-mode: multiply`; section-divider banding. |
23
+ | **silhouette** | Abstract bottle / box / device / book / mug / card shapes. | PNG | Empty product slots before user uploads photos; comparison rows. |
24
+ | **pattern** | Repeating motifs that read as fabric / paper / printed material. | WebP | Section-band texture; full-bleed fills behind decorative text. |
25
+
26
+ **Naming:** `<category>-<palette-family>-<variant>.<ext>` — e.g. `watercolor-warm-01.webp`, `transparent-brush-cool-03.png`, `ornament-stamp-01.svg`, `texture-grain-paper-02.webp`. Palette families: `warm` · `cool` · `neutral` · `chromatic`.
27
+
28
+ ---
29
+
30
+ ## Manifest (placeholder until generation pass ships)
31
+
32
+ When images land in `site/public/imagery/<category>/`, list them here as a key/value catalogue:
33
+
34
+ ```
35
+ watercolor-warm-01.webp 1600×900 warm orange · cream paper hero half-flood, atmospheric
36
+ watercolor-cool-01.webp 1600×900 cool blue · greyscale quote-behind wash
37
+ transparent-brush-warm-01 1200×1200 burnt orange brushstroke layered hero, off-centre
38
+ transparent-blob-cool-01 1200×1200 cobalt organic shape layered hero, behind headline
39
+ ornament-stamp-01.svg inline ink-only stamp w/ numeral label-gutter, letter close
40
+ texture-grain-paper-01 512×512 cream paper grain (tileable) body grain, blend-multiply
41
+ silhouette-bottle-01.png 600×900 abstract bottle, transparent empty product slot
42
+ silhouette-card-01.png 900×600 abstract product card comparison row
43
+ pattern-cross-warm-01 400×400 cross-hatch warm (tileable) section-band texture
44
+ ```
45
+
46
+ The skill picks an asset by matching the active theme's palette family + the brief's tone, then references it by absolute URL. Picking logic lives in Step 4 of [SKILL.md](../SKILL.md) — eyeball the manifest, choose the closest match, fall back if the file 404s.
47
+
48
+ ---
49
+
50
+ ## Usage patterns — how a senior engineer would compose these
51
+
52
+ ### Layered hero composition (the masterclass move)
53
+
54
+ A transparent abstract object behind hero text. The image is bigger than you think it should be — that's what makes it feel intentional, not decorative.
55
+
56
+ ```css
57
+ .hero { position: relative; isolation: isolate; }
58
+
59
+ .hero__art {
60
+ position: absolute;
61
+ top: 50%;
62
+ right: -10%;
63
+ transform: translateY(-50%);
64
+ width: clamp(60%, 80vh, 1400px);
65
+ height: auto;
66
+ z-index: 0;
67
+ pointer-events: none;
68
+ /* Optional warmth: */
69
+ mix-blend-mode: multiply;
70
+ opacity: 0.85;
71
+ }
72
+
73
+ .hero__art--bias-left { right: auto; left: -10%; }
74
+
75
+ .hero > * { position: relative; z-index: 1; }
76
+ ```
77
+
78
+ Bias to one side (left or right, never centred). The text sits at `z-index: 1`, the art at `z-index: 0`. Test mobile: art may need to scale down or shift to avoid the headline at 320 px.
79
+
80
+ ### Section background wash
81
+
82
+ A watercolor file as a full-bleed section accent. One section per page, never global.
83
+
84
+ ```css
85
+ .section--wash { position: relative; isolation: isolate; }
86
+ .section--wash::before {
87
+ content: "";
88
+ position: absolute;
89
+ inset: 0;
90
+ background: url("https://www.usehallmark.com/imagery/watercolor/watercolor-warm-01.webp") center / cover no-repeat;
91
+ opacity: 0.6;
92
+ z-index: -1;
93
+ pointer-events: none;
94
+ }
95
+ ```
96
+
97
+ ### Decoration
98
+
99
+ Inline ornament beside a quote or in the section-label gutter. Small. No border, no shadow, no animation.
100
+
101
+ ```html
102
+ <p class="section-label">
103
+ <span class="num">02</span>
104
+ <img class="section-label__ornament" src="…/imagery/ornament/ornament-stamp-01.svg" alt="" aria-hidden="true" />
105
+ <span>Examples</span>
106
+ </p>
107
+ ```
108
+
109
+ ```css
110
+ .section-label__ornament { width: 1.5em; height: auto; vertical-align: middle; }
111
+ ```
112
+
113
+ ### Texture overlay
114
+
115
+ Grain over a solid colour. Always opacity-capped at `0.15`.
116
+
117
+ ```css
118
+ .texture-grain {
119
+ background-image: url("…/imagery/texture/texture-grain-paper-01.webp"), var(--paper-fill);
120
+ background-size: 256px 256px, cover;
121
+ background-blend-mode: multiply;
122
+ opacity: 1; /* the grain texture is at 0.15 in the source asset */
123
+ }
124
+ ```
125
+
126
+ ### Empty state
127
+
128
+ Generic silhouette in unfilled data slots, greyscale-tinted, with a "Replace with real photo" hint visible to the developer (HTML comment).
129
+
130
+ ```html
131
+ <!-- TODO: Replace with real product photo, target size: 600×900 -->
132
+ <picture class="product-card__photo product-card__photo--empty">
133
+ <img src="…/imagery/silhouette/silhouette-bottle-01.png" alt="Hand-poured ceramic vessel, studio lighting" />
134
+ </picture>
135
+ ```
136
+
137
+ ---
138
+
139
+ ## Anti-patterns
140
+
141
+ - **Don't use kit imagery as the literal subject.** An abstract bottle is *not* a stand-in for an actual coffee-shop hero — those need photographic placeholders (Picsum / Unsplash). The kit is for atmosphere / composition / decoration, not subject replacement.
142
+ - **Don't layer 3+ kit pieces on one page.** Restraint. One transparent object in the hero + one wash in a later section is the cap.
143
+ - **Don't apply the same watercolor wash to multiple sections.** It's a section accent, not a global treatment.
144
+ - **Don't use kit imagery in modern-minimal genre** (Stripe / Linear / ElevenLabs school). That genre's whole point is the absence of decorative imagery.
145
+ - **Don't centre the layered hero art.** Centred behind text is the AI-default move. Bias to one side, off-axis.
146
+ - **Don't use mix-blend-mode without testing on the active paper.** `multiply` over a dark canvas inverts; `screen` over light paper washes out. Eyeball the result per theme.
147
+
148
+ ---
149
+
150
+ ## Generation pipeline (out-of-band, one-time)
151
+
152
+ The kit is generated once per palette family, post-processed, and committed to the marketing site's public folder:
153
+
154
+ ```
155
+ site/public/imagery/
156
+ ├── watercolor/ ~6 files × 4 palette families = 24 WebPs
157
+ ├── transparent/ ~6 files × 4 palette families = 24 PNGs
158
+ ├── ornament/ ~8 SVGs (palette-agnostic, use currentColor)
159
+ ├── texture/ ~6 tile-able WebPs
160
+ ├── silhouette/ ~6 PNGs (palette-agnostic, transparent)
161
+ └── pattern/ ~6 tile-able WebPs
162
+ ```
163
+
164
+ **Tooling.** Nanobanana 2 / Recraft V4 with reference images. Prompt seed-list per category lives at the top of each file's directory in a `prompts.md` (one-line prompts, results pinned by seed for reproducibility).
165
+
166
+ **Post-processing.** Trim, transparent-background where applicable, colour-balance against Hallmark's OKLCH palette tokens, save as WebP for size + PNG where alpha matters. Ornaments as inline SVG so they inherit `currentColor`.
167
+
168
+ **Total target weight.** ≤ 5 MB across all categories. Each individual file ≤ 200 KB. Lossy WebP at q=80 unless the image needs lossless (ornaments → SVG; transparents → PNG with `pngquant`).
169
+
170
+ **Re-generation.** Treat the kit as a refreshable batch, not a one-off. When the palette catalogue changes (new theme, new accent hue), re-generate the relevant palette family. Manifest above is the spec; assets are the deliverable.