@opendirectory.dev/skills 0.1.56 → 0.1.57

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendirectory.dev/skills",
3
- "version": "0.1.56",
3
+ "version": "0.1.57",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": {
package/registry.json CHANGED
@@ -116,6 +116,16 @@
116
116
  "version": "2.0",
117
117
  "path": "skills/google-trends-api-skills"
118
118
  },
119
+ {
120
+ "name": "graphic-case-study",
121
+ "description": "Generates a professionally designed case study PDF for B2B SaaS sales and marketing.",
122
+ "tags": [
123
+ "Marketing"
124
+ ],
125
+ "author": "OpenDirectory",
126
+ "version": "1.0.0",
127
+ "path": "skills/graphic-case-study"
128
+ },
119
129
  {
120
130
  "name": "graphic-slide-deck",
121
131
  "description": "Generates a professionally designed HTML slide deck from a brief or content.",
@@ -0,0 +1,121 @@
1
+ # graphic-case-study
2
+
3
+ Generate a professionally designed case study PDF for B2B SaaS sales and marketing. Structured around the challenge → solution → results → testimonial arc. Outputs a browser-ready HTML file + print-ready PDF. Supports 7 page section layouts and 9 business style presets.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npx "@opendirectory.dev/skills" install graphic-case-study --target claude
9
+ ```
10
+ ### Video Tutorial
11
+ Watch this quick video to see how it's done:
12
+
13
+ https://github.com/user-attachments/assets/ee98a1b5-ebc4-452f-bbfb-c434f2935067
14
+
15
+ ### Step 1: Download the skill from GitHub
16
+ 1. Copy the URL of this specific skill folder from your browser's address bar.
17
+ 2. Go to [download-directory.github.io](https://download-directory.github.io/).
18
+ 3. Paste the URL and click **Enter** to download.
19
+
20
+ ### Step 2: Install the Skill in Claude
21
+ 1. Open your **Claude desktop app**.
22
+ 2. Go to the sidebar on the left side and click on the **Customize** section.
23
+ 3. Click on the **Skills** tab, then click on the **+** (plus) icon button to create a new skill.
24
+ 4. Choose the option to **Upload a skill**, and drag and drop the `.zip` file (or you can extract it and drop the folder, both work).
25
+
26
+ > **Note:** Make sure you upload the folder that contains the `SKILL.md` file directly.
27
+
28
+ ---
29
+
30
+ ## What it does
31
+
32
+ - Asks the questions that determine how the case study should be structured
33
+ - Interviews you (or processes your notes) to extract customer story details
34
+ - Structures the narrative: customer context → challenge → solution → results → testimonial
35
+ - Generates a single self-contained HTML file -- opens in any browser, no build tools
36
+ - Splits into per-page HTML files for individual sharing or editing
37
+ - Exports a print-ready PDF via Playwright (A4 portrait, 1200×1697px)
38
+ - Supports 1-pager summary card, standard 2-pager, and detailed 4-pager formats
39
+
40
+ ## Example
41
+
42
+ > "Create a 2-page case study for Acme Corp. They were spending 20 hrs/week on manual reporting. We automated it. They saved 80% of that time and reduced errors by 95%. Use midnight-editorial style."
43
+
44
+ Output: 2-page PDF with cover, challenge/solution spread, results stat page, and closing CTA.
45
+
46
+ ---
47
+
48
+ ## Supported Styles
49
+
50
+ | Style | Best for |
51
+ |---|---|
52
+ | clean-slate | Enterprise B2B, sales teams, any audience that expects professionalism |
53
+ | midnight-editorial | Tech/AI companies, premium B2B, investor-grade materials |
54
+ | matt-gray | Board materials, internal reviews, professional mixed audiences |
55
+ | product-minimal | Product companies, design-forward B2B, design-savvy buyers |
56
+ | mint-pixel-corporate | SaaS sales, tech startups, growth-stage B2B |
57
+ | warm-earth | Agencies, consultancies, service businesses, health/education tech |
58
+ | brutalist | Standout sales materials, design-forward agencies, bold brands |
59
+ | magazine-red | Marketing agencies, brand-forward companies, editorial-style stories |
60
+ | soft-cloud | Onboarding materials, customer education, approachable SaaS |
61
+
62
+ ---
63
+
64
+ ## Supported Page Layouts
65
+
66
+ | Layout | Purpose |
67
+ |---|---|
68
+ | cover | Opening page -- customer name, headline result, logos |
69
+ | overview | At-a-glance: company profile, industry, use case |
70
+ | challenge | The problem -- context paragraph + pain points |
71
+ | solution | How your product solved it -- feature callouts |
72
+ | results | Key metrics in large stat format + supporting narrative |
73
+ | testimonial | Full-width pull quote with attribution |
74
+ | closing-cta | Vendor logo + contact info + next step CTA |
75
+
76
+ ---
77
+
78
+ ## Output
79
+
80
+ | File | What it is |
81
+ |---|---|
82
+ | `case-study/[slug]/index.html` | Full case study, browser-ready |
83
+ | `case-study/[slug]/page-01.html` ... | Per-page HTML files for individual sharing |
84
+ | `case-study/[slug].pdf` | Print-ready PDF (A4 portrait) |
85
+
86
+ Standard dimensions: 1200×1697px (A4 portrait). Landscape 4:3 (1200×900) available on request.
87
+
88
+ ---
89
+
90
+ ## Parameters
91
+
92
+ | Param | Required | Notes |
93
+ |---|---|---|
94
+ | customer_name | Yes | Company name (or "Anonymous Fortune 500 Retailer" to anonymize) |
95
+ | challenge | Yes | Core problem in 2-5 sentences |
96
+ | solution | Yes | What your product did |
97
+ | results | Yes | Measurable outcomes -- ideally 3 stats |
98
+ | customer_context | No | Industry, size, location (for overview page) |
99
+ | testimonial | No | Customer quote + name + title |
100
+ | page_count | No | 1 / 2 / 4 (default: 2) |
101
+ | customer_logo | No | Logo URL for cover page |
102
+ | your_company_name | No | Vendor name + logo URL for CTA page |
103
+ | style | No | One of 9 named presets or "show me options" (default: clean-slate) |
104
+ | orientation | No | A4 portrait (default) or landscape 4:3 |
105
+ | anonymize | No | Keep name or replace with industry descriptor |
106
+ | slug | No | Filename slug (derived from customer name if omitted) |
107
+
108
+ ---
109
+
110
+ ## Dependencies
111
+
112
+ This skill requires the `frontend-slides` skill files at:
113
+ `/Users/ksd/Desktop/Varnan_skills/frontend-slides/`
114
+
115
+ Specifically:
116
+ - `viewport-base.css` -- responsive page foundation (included verbatim in generated HTML)
117
+ - `scripts/export-pdf.sh` -- PDF export via Playwright (Node.js required, auto-installs; use `--portrait` flag for A4)
118
+
119
+ ## No API keys required
120
+
121
+ Pure AI skill. No external services, no scraping, no dependencies beyond the above.
@@ -0,0 +1,312 @@
1
+ ---
2
+ name: graphic-case-study
3
+ description: Generates a professionally designed case study PDF for B2B SaaS sales and marketing. Supports 7 page layouts, 9 style presets, 1-4 page output. Trigger when user says "create a case study", "write a customer story", "make a case study PDF", "design a success story", "turn this customer win into a PDF".
4
+ compatibility: [claude-code, gemini-cli, github-copilot]
5
+ author: OpenDirectory
6
+ version: 1.0.0
7
+ ---
8
+
9
+ # Graphic Case Study
10
+
11
+ Generate a professionally designed B2B case study PDF from customer story details. Output is a single self-contained HTML file (opens in any browser) plus a print-ready PDF. Supports 7 page section layouts and 9 style presets.
12
+
13
+ ---
14
+
15
+ **Critical rules -- non-negotiable:**
16
+
17
+ 1. Every page MUST fit within the A4 canvas (1200×1697px). No content overflow.
18
+ 2. ALL scalable font sizes use `clamp()`. Fixed px only for structural borders/lines.
19
+ 3. Single self-contained HTML: all CSS inline. Zero external dependencies except font CDN link.
20
+ 4. Never dump HTML in chat. Save to file, show summary only.
21
+ 5. Results stat numbers MUST be visually dominant -- at least 3× body text size.
22
+ 6. No generic AI slop: no Inter as display font, no purple gradient on white, no "Thank You" closing.
23
+
24
+ ---
25
+
26
+ ## Step 1: Brief Intake
27
+
28
+ Need four things to start. If all four present in the message: skip to Step 2.
29
+
30
+ If any missing, ask exactly:
31
+
32
+ > "To create your case study, I need four things:
33
+ > 1. **Customer name** -- company name (or a descriptor to anonymize: "Fortune 500 Retailer")
34
+ > 2. **Challenge** -- what problem did they have before using your product? (2-5 sentences)
35
+ > 3. **Solution** -- what did your product do to solve it? (features, approach)
36
+ > 4. **Results** -- measurable outcomes: ideally 3 stats (%, time saved, revenue impact, etc.)"
37
+
38
+ Wait for all four before continuing.
39
+
40
+ ---
41
+
42
+ ## Step 2: Complete Intake
43
+
44
+ Ask all questions in one message, grouped by category. User can skip any -- defaults apply.
45
+
46
+ > "A few questions before I start:
47
+ >
48
+ > **Content**
49
+ > 1. **Customer context** -- industry, company size, location? (optional, used for overview page)
50
+ > 2. **Testimonial** -- customer quote (40 words max) + speaker name + title? (or "I'll add later")
51
+ > 3. **Page count** -- 1-pager (summary card) / 2-pager (standard, default) / 4-pager (detailed)
52
+ > 4. **Customer logo** -- URL or "none"
53
+ >
54
+ > **Design**
55
+ > 5. **Your company name** -- vendor name for the CTA page (+ logo URL if available)
56
+ > 6. **Style** -- clean-slate / midnight-editorial / matt-gray / product-minimal / mint-pixel-corporate / warm-earth / brutalist / magazine-red / "show me options"
57
+ > 7. **Orientation** -- A4 portrait (default, 1200×1697) / landscape 4:3 (1200×900)
58
+ >
59
+ > **Output**
60
+ > 8. **Anonymize?** -- Keep company name / replace with industry descriptor
61
+ > 9. **Slug** -- filename slug (e.g. "acme-corp-2025"); I'll derive from customer name if skipped"
62
+
63
+ **Defaults if skipped:**
64
+
65
+ | Question | Default |
66
+ |---|---|
67
+ | Customer context | none |
68
+ | Testimonial | none |
69
+ | Page count | 2 |
70
+ | Customer logo | none |
71
+ | Your company name | derived from context |
72
+ | Style | clean-slate |
73
+ | Orientation | A4 portrait |
74
+ | Anonymize | keep name |
75
+ | Slug | kebab-case of customer name |
76
+
77
+ **If style = "show me options":**
78
+ Generate 3 single-page HTML previews (cover page only). Save to `.claude-design/previews/style-a.html`, `style-b.html`, `style-c.html`. Open each: `open .claude-design/previews/style-a.html` etc. Choose 3 style presets that match the case study context. Ask user to pick before Step 3.
79
+
80
+ ---
81
+
82
+ ## Step 2.5: Internal Page Architecture (not shown to user)
83
+
84
+ Derive internally before Step 3. Never ask the user.
85
+
86
+ **Hero metric identification:**
87
+ Scan results for the single most impressive number (largest %, biggest $, greatest multiplier). This metric gets accent-color treatment and maximum visual weight on the results page.
88
+
89
+ **Page count -> structure template:**
90
+
91
+ | Count | Page sequence |
92
+ |---|---|
93
+ | 1-pager | 1 page: [cover-compact] -- all content condensed into one page |
94
+ | 2-pager | Page 1: [cover] + [challenge-solution] stacked · Page 2: [results] + [testimonial-cta] stacked |
95
+ | 4-pager | Page 1: [cover] · Page 2: [overview] + [challenge] · Page 3: [solution] + [results] · Page 4: [testimonial] + [closing-cta] |
96
+
97
+ **Visual character** derived from style choice:
98
+ - clean-slate → professional authority, generous whitespace, enterprise-safe
99
+ - midnight-editorial → premium dark, editorial weight, tech/AI companies
100
+ - matt-gray → trusted neutral, operational, board-safe
101
+ - warm-earth → approachable warmth, consulting/agency/services
102
+ - brutalist → bold standout, design-forward, attention-commanding
103
+ - If not specified: default to clean-slate for B2B SaaS, midnight-editorial for technical companies.
104
+
105
+ ---
106
+
107
+ ## Step 3: Page Structure
108
+
109
+ Read `references/page-library.md` before planning.
110
+
111
+ Plan the full page sequence. Assign section types from the 7 in `references/page-library.md` to each page section. Multiple sections can stack within one page.
112
+
113
+ Output as numbered list with `[section-type]` labels per page. Example for 2-pager:
114
+
115
+ ```
116
+ Proposed structure (2 pages, clean-slate style):
117
+
118
+ Page 1:
119
+ [cover] -- Acme Corp cut reporting time by 80%
120
+ [challenge-solution] -- manual process / DataPulse automation
121
+
122
+ Page 2:
123
+ [results] -- 80% time saved, 95% error reduction, $200K saved
124
+ [closing-cta] -- Get in touch: hello@datapulse.io
125
+
126
+ Does this structure work, or should I adjust anything?
127
+ ```
128
+
129
+ Wait for confirmation before Step 4.
130
+
131
+ ---
132
+
133
+ ## Step 4: Content Draft
134
+
135
+ Write per-page-section copy. Plain text only -- no HTML yet.
136
+
137
+ **Copy rules per section:**
138
+
139
+ - `cover`: company name + headline result (12 words max, MUST lead with the number: "Acme cut reporting time by 80%") + optional category label ("Customer Success Story")
140
+ - `overview`: 4 facts only -- Industry / Company size / Location / Use case -- each value 4 words max
141
+ - `challenge`: context paragraph (2-3 sentences) + 3 pain points (1 sentence each, no bullet filler)
142
+ - `solution`: 2-3 feature callouts -- feature name (3 words max) + 1-sentence outcome description each
143
+ - `results`: 3 metrics (number + short label + 1-line context). Optional: 2-sentence narrative. ZERO body copy at same weight as the numbers.
144
+ - `testimonial`: exact quote (40 words max) + speaker name + title + company
145
+ - `closing-cta`: headline (5 words max) + CTA action text (3 words) + email + URL (both required)
146
+
147
+ **Forbidden words** (no exceptions): "powerful", "seamless", "game-changing", "leverage", "innovative", "revolutionary", "transform", "cutting-edge", "robust", "unlock", "scalable" (as filler adjective).
148
+
149
+ **Copy philosophy:** Numbers beat adjectives. Lead every section with the outcome, not the feature. Fragments are fine.
150
+
151
+ ---
152
+
153
+ ## Step 5: HTML Generation
154
+
155
+ Read ALL before generating any HTML:
156
+
157
+ **This skill's references:**
158
+ - `references/design-system.md`
159
+ - `references/page-library.md`
160
+ - `references/style-presets.md`
161
+
162
+ **frontend-slides cross-references (read this exact file):**
163
+ - `/Users/ksd/Desktop/Varnan_skills/frontend-slides/viewport-base.css` -- include FULL contents verbatim inside `<style>` block
164
+
165
+ **Generation rules:**
166
+
167
+ 1. Single self-contained HTML. All CSS inline. Font CDN `<link>` is the only external reference.
168
+ 2. Include the FULL verbatim contents of `viewport-base.css` inside the `<style>` block -- do not paraphrase or shorten it.
169
+ 3. After pasting viewport-base.css, add portrait A4 overrides:
170
+ ```css
171
+ /* A4 portrait overrides */
172
+ html { scroll-snap-type: none; scroll-behavior: auto; }
173
+ .slide {
174
+ width: 100vw;
175
+ height: 100vh;
176
+ height: 100dvh;
177
+ overflow: hidden;
178
+ display: flex;
179
+ flex-direction: column;
180
+ position: relative;
181
+ scroll-snap-align: none;
182
+ }
183
+ ```
184
+ 4. Every page section = `<section class="slide">` -- required for export-pdf.sh detection.
185
+ 5. Comment each page: `/* === PAGE N: SECTION-TYPES === */`
186
+ 6. Results stat numbers: `clamp(2.5rem, 7vw, 5rem)` minimum. Hero metric in accent color. Other metrics in secondary text color.
187
+ 7. No images provided -> CSS-generated visuals (geometric shapes, gradient backgrounds, icon-like CSS constructs). Never output visible placeholder boxes.
188
+ 8. No SlidePresentation JS. Include only a minimal IntersectionObserver for `.reveal` entrance animations (viewer experience; PDF export renders to final state automatically).
189
+ 9. For landscape 4:3 (if requested): use `clamp()` values from graphic-slide-deck proportions -- landscape 1200×900 means 1vw=12px, similar to portrait.
190
+
191
+ **Typography discipline (all clamp-based, tuned for 1200px A4 portrait):**
192
+ - Cover headline: `clamp(2rem, 5vw, 3.5rem)`
193
+ - Section heading: `clamp(1.25rem, 2.5vw, 2rem)`
194
+ - Body: `clamp(0.875rem, 1.25vw, 1.1rem)`
195
+ - Stat number (hero): `clamp(3rem, 8vw, 5.5rem)` in accent color
196
+ - Stat number (secondary): `clamp(2.5rem, 7vw, 5rem)` in secondary color
197
+ - Quote: `clamp(1.1rem, 2vw, 1.5rem)` italic
198
+ - Label/caption: `clamp(0.65rem, 0.9vw, 0.8rem)` uppercase
199
+
200
+ ---
201
+
202
+ ## Step 6: Self-QA
203
+
204
+ Check every item. Fix every failure -- do not skip.
205
+
206
+ **Layout and rendering:**
207
+ - [ ] Every `.slide` has `height:100vh; height:100dvh; overflow:hidden`
208
+ - [ ] ALL scalable font sizes use `clamp()`
209
+ - [ ] No content overflows at 1200×1697 viewport -- check each page's density against `references/page-library.md` limits
210
+ - [ ] CSS-generated visuals present for all image placeholder spots
211
+ - [ ] No `-clamp()`, `-min()`, `-max()` in CSS -- wrap negatives in `calc(-1 * ...)`
212
+
213
+ **Structure:**
214
+ - [ ] Page count matches Step 3 plan
215
+ - [ ] Every page uses `class="slide"`
216
+ - [ ] All content sections from Step 3 are present
217
+ - [ ] `class="slide"` only on `<section>` elements, not inner divs
218
+
219
+ **Design quality:**
220
+ - [ ] Hero metric visually dominant on results section -- accent color, largest size, no competing elements at equal weight
221
+ - [ ] Style preset tokens applied consistently (colors, fonts from `references/style-presets.md`)
222
+ - [ ] No slop patterns (check DO NOT USE list in `references/style-presets.md`)
223
+ - [ ] Typography hierarchy clear: cover headline >> section heading >> body (at least 2:1 ratio)
224
+
225
+ **Content:**
226
+ - [ ] No forbidden words in any copy
227
+ - [ ] Cover headline leads with a number or measurable result
228
+ - [ ] Testimonial quote is 40 words or fewer
229
+ - [ ] Closing CTA has headline + action + email + URL (all four)
230
+ - [ ] All stats in results section have labels (no naked numbers)
231
+
232
+ ---
233
+
234
+ ## Step 7: Output
235
+
236
+ **Save the main HTML:**
237
+
238
+ ```bash
239
+ mkdir -p case-study/[slug]
240
+ ```
241
+
242
+ Write to: `case-study/[slug]/index.html`
243
+
244
+ Open it: `open case-study/[slug]/index.html`
245
+
246
+ **Per-page HTML files (always generate these):**
247
+
248
+ Extract each `<section class="slide">` from the main HTML. For each one, create a standalone file with:
249
+ - The full `<style>` block from the main HTML (copied verbatim)
250
+ - The individual `<section class="slide">` wrapped in a minimal HTML shell
251
+ - No JS (static per-page viewing)
252
+
253
+ Write to: `case-study/[slug]/page-01.html`, `page-02.html`, etc.
254
+
255
+ **PDF export (always do this for A4 portrait):**
256
+
257
+ ```bash
258
+ bash /Users/ksd/Desktop/Varnan_skills/frontend-slides/scripts/export-pdf.sh \
259
+ case-study/[slug]/index.html \
260
+ case-study/[slug].pdf --portrait
261
+ ```
262
+
263
+ If landscape 4:3 was requested, omit `--portrait` and use `--compact` instead (1280×720).
264
+
265
+ Note: first run installs Playwright automatically (~30-60 seconds). Inform the user.
266
+
267
+ **Cleanup:** Delete `.claude-design/previews/` if style preview files were generated in Step 2.
268
+
269
+ ---
270
+
271
+ ## Step 8: Summary (no HTML in chat)
272
+
273
+ Present in chat:
274
+
275
+ ```
276
+ ## Case Study: [customer name]
277
+ Date: [today] | Style: [style] | Pages: [N] | Format: A4 portrait
278
+ Vendor: [your company] | Customer: [customer name]
279
+
280
+ ---
281
+
282
+ ### Files
283
+ Main: case-study/[slug]/index.html
284
+ Per-page: case-study/[slug]/page-01.html -> page-0N.html
285
+ PDF: case-study/[slug].pdf
286
+
287
+ ---
288
+
289
+ ### Case Study Checklist
290
+ - [ ] Replace [IMAGE: logo] placeholder with real logo file
291
+ - [ ] Verify all stats are accurate (page [results page number])
292
+ - [ ] Confirm customer has approved quote usage
293
+ - [ ] Proof company name spelling, speaker title accuracy
294
+ - [ ] Test PDF page count = [N] and no content clips
295
+ - [ ] Share PDF at case-study/[slug].pdf
296
+ ```
297
+
298
+ Do not print HTML in chat.
299
+
300
+ ---
301
+
302
+ ## Section Reference
303
+
304
+ | Section | Purpose |
305
+ |---|---|
306
+ | cover | Opening page -- customer name, headline result, logos |
307
+ | overview | At-a-glance profile -- industry, size, use case |
308
+ | challenge | The problem -- context + pain points |
309
+ | solution | How your product solved it -- feature callouts |
310
+ | results | Key metrics + supporting narrative |
311
+ | testimonial | Full-width pull quote from customer |
312
+ | closing-cta | Vendor logo + contact info + next step |
@@ -0,0 +1,35 @@
1
+ {
2
+ "skill_name": "graphic-case-study",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Create a 2-page case study for Acme Corp. They were spending 20 hours per week on manual reporting. We automated it. They saved 80% of that time and reduced reporting errors by 95%. Use midnight-editorial style.",
7
+ "expected_output": "All 4 required fields present -- skips Step 1. Asks 9 questions in Step 2. After answers: reads midnight-editorial tokens (Instrument Serif + Inter, #D8F90A accent, #111111 bg). Reads viewport-base.css verbatim, adds A4 portrait overrides. 2-page structure: Page 1 = [cover] + [challenge-solution]; Page 2 = [results] + [closing-cta]. Results page: hero stat '80%' in #D8F90A at clamp(3rem, 8vw, 5.5rem), '95%' as secondary stat at clamp(2.5rem, 7vw, 5rem) in secondary color. No forbidden words. IntersectionObserver for .reveal animations. Per-page HTML files written. PDF export called with --portrait flag. Summary shows file paths, page count, checklist.",
8
+ "files": []
9
+ },
10
+ {
11
+ "id": 2,
12
+ "prompt": "Make me some case study.",
13
+ "expected_output": "customer_name, challenge, solution, results all missing. Does NOT read any reference files. Does NOT generate any HTML, structure plan, or outline. Asks exactly: 'To create your case study, I need four things: 1. Customer name 2. Challenge 3. Solution 4. Results'. Stops and waits. After user provides all four, proceeds to Step 2 and asks all 9 grouped questions in one message.",
14
+ "files": []
15
+ },
16
+ {
17
+ "id": 3,
18
+ "prompt": "Create a 1-page case study summary card for Vertex IO. They had 3-day sales cycle delays due to manual qualification. DataPulse automated it. Result: 60% faster qualification, $1.2M additional pipeline closed in Q1. Style: clean-slate.",
19
+ "expected_output": "Skips Step 1. Asks 9 questions. 1-pager structure: single [cover-compact] page with all content condensed (headline + challenge 2 sentences + solution 2 sentences + 3 inline stats + CTA at bottom). clean-slate tokens: Plus Jakarta Sans 800, #0F172A accent, white bg, rounded cards 16px, badge pills (#E0F2FE). Hero stat '60%' in #0F172A at clamp(3rem, 8vw, 5.5rem). '$1.2M' as secondary stat. Viewport-base.css included verbatim. A4 portrait overrides applied. Per-page (just 1) HTML written. PDF export --portrait called. Summary shown with checklist.",
20
+ "files": []
21
+ },
22
+ {
23
+ "id": 4,
24
+ "prompt": "Build a 4-page detailed case study for Stride Labs. Industry: fintech. Challenge: manual compliance reporting took 40 hours/week. Solution: automated audit trail + real-time dashboards. Results: 40-hour reduction per week, 0 compliance failures in 18 months, 3x faster audits. Quote from their CFO: 'We went from dreading audits to sailing through them.' Style: warm-earth.",
25
+ "expected_output": "Skips Step 1. Asks 9 questions. Reads warm-earth preset tokens: Lora display font, Source Sans 3 body, #D4622A accent, #FDF6EF bg, #2C1A0E cover bg. 4-page structure: Page 1 [cover] | Page 2 [overview]+[challenge] | Page 3 [solution]+[results] | Page 4 [testimonial]+[closing-cta]. Challenge page has drop cap via ::first-letter on opening paragraph (Lora, clamp(3rem,7vw,5rem), #D4622A). Results: hero metric '40 hours/week' in #D4622A at hero stat size. '0 compliance failures' and '3x faster' as secondary stats. Testimonial: CFO quote quoted exactly, <=40 words. Closing CTA has email + URL. 4 per-page HTML files generated. PDF export --portrait called. Summary shown.",
26
+ "files": []
27
+ },
28
+ {
29
+ "id": 5,
30
+ "prompt": "Create a 2-page case study. Anonymize the customer -- just say 'Global Logistics Provider'. Challenge: supply chain visibility gaps causing $500K/month in delays. Solution: real-time tracking integration. Results: $400K/month savings, 87% reduction in delay incidents. Style: show me options.",
31
+ "expected_output": "Skips Step 1. Asks 9 questions. User answers style='show me options': generates 3 cover-page-only HTML previews saved to .claude-design/previews/style-a.html, style-b.html, style-c.html, opens each automatically, asks user to pick. After pick: reads chosen preset tokens from references/style-presets.md. Customer name used as 'Global Logistics Provider' throughout (anonymized per request). 2-page structure: Page 1 = [cover]+[challenge-solution]; Page 2 = [results]+[closing-cta] (no testimonial -- not provided). Hero metric '$400K/month' in accent color at hero stat size. '87%' as secondary stat. No testimonial section since not provided. .claude-design/previews/ deleted after generation. PDF export --portrait called. Summary shown.",
32
+ "files": []
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,104 @@
1
+ # Design System — graphic-case-study
2
+
3
+ Typography, spacing, and design rules for A4 portrait case study pages. All tokens tuned for 1200px viewport width (A4 portrait format via Playwright).
4
+
5
+ ---
6
+
7
+ ## Typography Scale
8
+
9
+ All values use `clamp()`. At 1200px viewport: 1vw = 12px.
10
+
11
+ ```
12
+ Cover headline: clamp(2rem, 5vw, 3.5rem) -- 60px at 1200px
13
+ Section heading (h2): clamp(1.25rem, 2.5vw, 2rem) -- 30px at 1200px
14
+ Body text: clamp(0.875rem, 1.25vw, 1.1rem) -- 15px at 1200px
15
+ Stat number (hero): clamp(3rem, 8vw, 5.5rem) -- 96px at 1200px | accent color
16
+ Stat number (support): clamp(2.5rem, 7vw, 5rem) -- 84px at 1200px | secondary color
17
+ Quote text: clamp(1.1rem, 2vw, 1.5rem) -- 24px at 1200px | italic, display font
18
+ Stat label: clamp(0.7rem, 1vw, 0.875rem) -- 12px | uppercase, 0.1em tracking
19
+ Caption / label: clamp(0.65rem, 0.9vw, 0.8rem) -- 10.8px | uppercase, 0.12em tracking
20
+ ```
21
+
22
+ **Why these differ from graphic-slide-deck:**
23
+ - Viewport is 1200px not 1920px -- vw values resolve smaller
24
+ - A4 is a reading document, not a projector slide -- body text minimum is higher
25
+ - Stat numbers cap at 5.5rem not 9rem -- A4 proportions, not stadium-screen scale
26
+ - Generous minimum clamp values ensure readability in print PDF export
27
+
28
+ **Letter spacing:**
29
+ - Cover/display headlines: `-0.03em`
30
+ - Section headings: `-0.02em`
31
+ - Body: `0` (no letter spacing -- readability first)
32
+ - Labels/captions: `+0.1em` to `+0.14em`
33
+
34
+ ---
35
+
36
+ ## Spacing Rhythm
37
+
38
+ Valid values: 8 / 16 / 24 / 32 / 48 / 64 / 96px. No arbitrary values.
39
+
40
+ ```
41
+ Page padding: clamp(2.5rem, 6%, 4.5rem) -- 40–72px
42
+ Section gap: clamp(1.5rem, 3%, 3rem) -- 24–48px
43
+ Content gap: clamp(0.875rem, 1.5%, 1.75rem) -- 14–28px
44
+ Element gap: clamp(0.5rem, 1%, 1rem) -- 8–16px
45
+ Column gap: clamp(1.5rem, 4%, 3rem) -- 24–48px
46
+ ```
47
+
48
+ ---
49
+
50
+ ## One Hero Metric Rule
51
+
52
+ Every results section has exactly ONE metric that is visually dominant:
53
+ - Hero metric: accent color, `clamp(3rem, 8vw, 5.5rem)`, full opacity
54
+ - Supporting metrics: secondary text color, `clamp(2.5rem, 7vw, 5rem)`, full opacity
55
+ - Context line below: body color, body size, max 12 words
56
+
57
+ **This is the single thing the reader remembers.** If two metrics fight for dominance, neither wins.
58
+
59
+ ---
60
+
61
+ ## Page Density Guide
62
+
63
+ Each page section has a natural density:
64
+
65
+ | Section | Density | Key rule |
66
+ |---|---|---|
67
+ | cover | Very open | Headline + company name only. Breathe. |
68
+ | overview | Moderate | 4 fact cells in a 2×2 grid. No paragraphs. |
69
+ | challenge | Moderate-dense | Context paragraph + 3 pain points. |
70
+ | solution | Moderate | 2-3 feature callouts. CSS icon shapes. |
71
+ | results | Very open | Numbers need space. Nothing competes. |
72
+ | testimonial | Very open | The quote fills the section. Nothing else. |
73
+ | closing-cta | Open | One action. Contact info. Done. |
74
+
75
+ **Stacking rule for 1-pager and 2-pager:** When multiple sections share a page, alternate dense sections with open ones. Never stack two dense sections. Never stack two open sections unless one is tiny (e.g., a 2-line testimonial after a big results block).
76
+
77
+ ---
78
+
79
+ ## Background Depth
80
+
81
+ Use subtle background variation to create visual rhythm across pages:
82
+ - Cover: style preset's primary background (often dark or richly styled)
83
+ - Overview / Challenge: slightly lighter/alternate background from preset
84
+ - Solution: main slide background
85
+ - Results: main slide background (never alter -- numbers need neutral ground)
86
+ - Testimonial: accent color at 5-8% opacity OR preset's alternate section bg
87
+ - Closing CTA: dark or full-accent background (inversion for finality)
88
+
89
+ ---
90
+
91
+ ## Slop Patterns to Avoid
92
+
93
+ | Pattern | Why it's wrong |
94
+ |---|---|
95
+ | Inter as display font | Generic -- no character at heading size |
96
+ | Every section same background | No visual rhythm across pages |
97
+ | Stat numbers at body text size | Defeats the results section entirely |
98
+ | Bullet list format for testimonial | A quote is a quote, not a list |
99
+ | "Thank You" as closing-cta headline | Wasted opportunity -- no action, no contact |
100
+ | Gradient on every section | Cheap depth signal, fights the editorial feel |
101
+ | Unstyled logo placeholder boxes | Looks unfinished -- use CSS initials or shape |
102
+ | Purple-to-blue gradient on white | Overused AI aesthetic -- signals no design thinking |
103
+ | Body text same color on every section | No hierarchy, no visual rhythm |
104
+ | Results stats smaller than section headings | Hierarchy inverted -- misses the point |
@@ -0,0 +1,333 @@
1
+ # Page Library — graphic-case-study
2
+
3
+ 7 page section types for A4 portrait case studies. Each section is a content block placed within a `<section class="slide">`. Multiple sections can stack vertically within a single page.
4
+
5
+ All dimensions assume: viewport 1200px wide × 1697px tall (A4 portrait).
6
+
7
+ ---
8
+
9
+ ## 1. cover
10
+
11
+ **Purpose:** Opening page -- customer name, headline result, logos
12
+ **Density:** Very open
13
+ **Content limits:** Headline 12 words max (leads with number), customer name, optional category label, logo placeholders
14
+
15
+ **HTML structure:**
16
+ ```html
17
+ <section class="slide page--cover">
18
+ <div class="page-inner">
19
+ <div class="cover-top">
20
+ <span class="cover-label reveal">Customer Success Story</span>
21
+ </div>
22
+ <div class="cover-body">
23
+ <h1 class="cover-headline reveal">[Headline result — leads with number]</h1>
24
+ <p class="cover-company reveal">[Customer name]</p>
25
+ </div>
26
+ <div class="cover-bottom">
27
+ <div class="logo-group reveal">
28
+ <div class="logo-box logo-customer">[CSS initials or img]</div>
29
+ <span class="logo-sep">×</span>
30
+ <div class="logo-box logo-vendor">[CSS initials or img]</div>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </section>
35
+ ```
36
+
37
+ **CSS approach:**
38
+ - `.page-inner`: `display: flex; flex-direction: column; justify-content: space-between; height: 100%; padding: var(--page-padding);`
39
+ - `.cover-headline`: `font-family: var(--font-display); font-size: clamp(2rem, 5vw, 3.5rem); letter-spacing: -0.03em; line-height: 1.1; max-width: 20ch;`
40
+ - `.cover-label`: uppercase, caption size, accent color or muted
41
+ - `.logo-box`: `width: clamp(48px, 6vw, 80px); height: clamp(48px, 6vw, 80px); display: flex; align-items: center; justify-content: center;` -- use CSS-generated initials when no logo URL provided
42
+
43
+ **Background:** Style preset's primary (often the most distinctive background of the preset -- dark, full-color, or richly styled). This is the first impression.
44
+
45
+ **Do NOT:** Put challenge/solution text here. Cover = one idea only.
46
+
47
+ ---
48
+
49
+ ## 2. overview
50
+
51
+ **Purpose:** At-a-glance customer profile
52
+ **Density:** Moderate
53
+ **Content limits:** 4 fact cells max (label + value each). No paragraph text.
54
+
55
+ **HTML structure:**
56
+ ```html
57
+ <div class="section--overview reveal">
58
+ <h2 class="section-label">At a Glance</h2>
59
+ <div class="overview-grid">
60
+ <div class="fact-cell">
61
+ <span class="fact-label">Industry</span>
62
+ <span class="fact-value">B2B SaaS</span>
63
+ </div>
64
+ <div class="fact-cell">
65
+ <span class="fact-label">Company size</span>
66
+ <span class="fact-value">200-500 employees</span>
67
+ </div>
68
+ <div class="fact-cell">
69
+ <span class="fact-label">Location</span>
70
+ <span class="fact-value">San Francisco, CA</span>
71
+ </div>
72
+ <div class="fact-cell">
73
+ <span class="fact-label">Use case</span>
74
+ <span class="fact-value">Revenue operations</span>
75
+ </div>
76
+ </div>
77
+ </div>
78
+ ```
79
+
80
+ **CSS approach:**
81
+ - `.overview-grid`: `display: grid; grid-template-columns: repeat(2, 1fr); gap: clamp(0.75rem, 2%, 1.5rem);`
82
+ - `.fact-cell`: preset card background + border, `border-radius: var(--card-radius); padding: clamp(0.75rem, 1.5%, 1.25rem);`
83
+ - `.fact-label`: caption size, muted color, uppercase, 0.1em tracking
84
+ - `.fact-value`: body size, primary text color, font-weight: 600
85
+
86
+ ---
87
+
88
+ ## 3. challenge
89
+
90
+ **Purpose:** The customer's problem before your product
91
+ **Density:** Moderate
92
+ **Content limits:** Context paragraph (2-3 sentences) + 3 pain points (1 sentence each)
93
+
94
+ **HTML structure:**
95
+ ```html
96
+ <div class="section--challenge">
97
+ <h2 class="section-heading reveal">The Challenge</h2>
98
+ <div class="challenge-body">
99
+ <p class="challenge-context reveal">[Context paragraph]</p>
100
+ <ul class="pain-list">
101
+ <li class="pain-item reveal">[Pain point 1]</li>
102
+ <li class="pain-item reveal">[Pain point 2]</li>
103
+ <li class="pain-item reveal">[Pain point 3]</li>
104
+ </ul>
105
+ </div>
106
+ </div>
107
+ ```
108
+
109
+ **CSS approach:**
110
+ - Two-column layout at full page: `display: grid; grid-template-columns: 1fr 1fr; gap: clamp(1.5rem, 4%, 3rem);` OR single-column if stacking with other sections
111
+ - `.pain-list`: no browser bullets -- use `list-style: none; display: flex; flex-direction: column; gap: clamp(0.5rem, 1%, 1rem);`
112
+ - `.pain-item::before`: `content: "—"; color: var(--accent); margin-right: 0.75em;`
113
+ - `.section-heading`: `clamp(1.25rem, 2.5vw, 2rem)` weight 700
114
+
115
+ **Signature element for warm-earth style:** Drop cap on opening paragraph:
116
+ ```css
117
+ .challenge-context::first-letter {
118
+ font-family: var(--font-display);
119
+ font-size: clamp(3rem, 7vw, 5rem);
120
+ float: left;
121
+ margin: 0.05em 0.12em 0 0;
122
+ color: var(--accent);
123
+ line-height: 0.8;
124
+ }
125
+ ```
126
+
127
+ ---
128
+
129
+ ## 4. solution
130
+
131
+ **Purpose:** How your product addressed the challenge
132
+ **Density:** Moderate
133
+ **Content limits:** 2-3 feature callouts (name 3 words max + 1-sentence description each)
134
+
135
+ **HTML structure:**
136
+ ```html
137
+ <div class="section--solution">
138
+ <h2 class="section-heading reveal">The Solution</h2>
139
+ <div class="feature-grid">
140
+ <div class="feature-card reveal">
141
+ <div class="feature-icon">[CSS shape]</div>
142
+ <div class="feature-name">Feature Name</div>
143
+ <p class="feature-desc">One sentence describing the outcome this feature delivers.</p>
144
+ </div>
145
+ <!-- repeat for 2-3 features -->
146
+ </div>
147
+ </div>
148
+ ```
149
+
150
+ **CSS approach:**
151
+ - `.feature-grid`: `display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: clamp(0.75rem, 2%, 1.5rem);`
152
+ - `.feature-card`: preset card background + border + border-radius, `padding: clamp(1rem, 2%, 1.75rem);`
153
+ - `.feature-icon`: CSS-generated shape (circle, square, hexagon outline) using `::before` or inline shape elements, 32–48px, accent color or accent-light fill
154
+ - `.feature-name`: `font-size: clamp(0.875rem, 1.25vw, 1rem); font-weight: 700; margin-bottom: 0.5em;`
155
+ - `.feature-desc`: body size, secondary color
156
+
157
+ **CSS icon patterns (no images needed):**
158
+ ```css
159
+ /* Circle icon */
160
+ .feature-icon {
161
+ width: clamp(32px, 3vw, 48px);
162
+ height: clamp(32px, 3vw, 48px);
163
+ border-radius: 50%;
164
+ background: rgba(var(--accent-rgb), 0.12);
165
+ border: 2px solid var(--accent);
166
+ margin-bottom: 1rem;
167
+ }
168
+ /* Or: filled square with rounded corner */
169
+ .feature-icon {
170
+ width: clamp(32px, 3vw, 48px);
171
+ height: clamp(32px, 3vw, 48px);
172
+ background: var(--accent);
173
+ border-radius: 6px;
174
+ margin-bottom: 1rem;
175
+ }
176
+ ```
177
+
178
+ ---
179
+
180
+ ## 5. results
181
+
182
+ **Purpose:** Measurable impact -- the most important section
183
+ **Density:** Open (numbers need space)
184
+ **Content limits:** 3 metrics (number + label + 1-line context each). Optional 2-sentence narrative.
185
+
186
+ **HTML structure:**
187
+ ```html
188
+ <div class="section--results">
189
+ <h2 class="section-heading reveal">The Results</h2>
190
+ <div class="stat-row">
191
+ <div class="stat-item stat-item--hero reveal" style="--i:0">
192
+ <div class="stat-number" data-count="80" data-suffix="%">0%</div>
193
+ <div class="stat-label">Time saved on reporting</div>
194
+ <div class="stat-context">Down from 20 hours per week</div>
195
+ </div>
196
+ <div class="stat-item reveal" style="--i:1">
197
+ <div class="stat-number" data-count="95" data-suffix="%">0%</div>
198
+ <div class="stat-label">Reduction in errors</div>
199
+ <div class="stat-context">Across all report types</div>
200
+ </div>
201
+ <div class="stat-item reveal" style="--i:2">
202
+ <div class="stat-number" data-prefix="$" data-count="200" data-suffix="K">$0K</div>
203
+ <div class="stat-label">Annual cost savings</div>
204
+ <div class="stat-context">Labor and tooling combined</div>
205
+ </div>
206
+ </div>
207
+ <!-- optional -->
208
+ <p class="results-narrative reveal">[2-sentence narrative]</p>
209
+ </div>
210
+ ```
211
+
212
+ **CSS approach:**
213
+ - `.stat-row`: `display: flex; gap: clamp(1.5rem, 4%, 3rem); align-items: flex-start;` (horizontal, 3 stats)
214
+ - `.stat-item`: `flex: 1; display: flex; flex-direction: column; gap: 0.5rem;`
215
+ - `.stat-number`: `font-family: var(--font-display); font-size: clamp(2.5rem, 7vw, 5rem); font-weight: 400; letter-spacing: -0.04em; line-height: 0.9; color: var(--text-secondary);`
216
+ - `.stat-item--hero .stat-number`: same but `color: var(--accent);` and `font-size: clamp(3rem, 8vw, 5.5rem);`
217
+ - `.stat-label`: `font-size: clamp(0.7rem, 1vw, 0.875rem); font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-secondary);`
218
+ - `.stat-context`: `font-size: clamp(0.65rem, 0.9vw, 0.8rem); color: var(--text-muted);`
219
+
220
+ **Stagger animation:**
221
+ ```css
222
+ .stat-item {
223
+ opacity: 0;
224
+ transform: translateY(20px);
225
+ transition: opacity 0.6s ease, transform 0.6s ease;
226
+ transition-delay: calc(var(--i) * 0.15s);
227
+ }
228
+ .slide.visible .stat-item { opacity: 1; transform: none; }
229
+ ```
230
+
231
+ **ZERO body copy competing with the numbers.** The optional narrative goes BELOW the stat row in smaller body text, clearly subordinate.
232
+
233
+ ---
234
+
235
+ ## 6. testimonial
236
+
237
+ **Purpose:** Customer voice -- builds trust
238
+ **Density:** Very open
239
+ **Content limits:** Quote 40 words max + name + title + company
240
+
241
+ **HTML structure:**
242
+ ```html
243
+ <div class="section--testimonial">
244
+ <blockquote class="testimonial-quote reveal">
245
+ <div class="quote-mark">"</div>
246
+ <p class="quote-text">[Customer quote, 40 words max]</p>
247
+ <footer class="quote-attribution">
248
+ <span class="attribution-name">[Name]</span>
249
+ <span class="attribution-role">[Title], [Company]</span>
250
+ </footer>
251
+ </blockquote>
252
+ </div>
253
+ ```
254
+
255
+ **CSS approach:**
256
+ - `.section--testimonial`: `display: flex; align-items: center; justify-content: center; padding: clamp(2rem, 5%, 4rem);`
257
+ - `.quote-mark`: `position: absolute; font-family: var(--font-display); font-size: clamp(4rem, 12vw, 8rem); opacity: 0.08; top: -0.2em; left: -0.1em; color: var(--accent); line-height: 1; pointer-events: none; user-select: none;`
258
+ - `.quote-text`: `font-family: var(--font-display); font-style: italic; font-size: clamp(1.1rem, 2vw, 1.5rem); line-height: 1.5; color: var(--text-primary);`
259
+ - `.attribution-name`: `font-weight: 700; font-size: var(--label-size);`
260
+ - `.attribution-role`: `color: var(--text-muted); font-size: var(--label-size);`
261
+ - Testimonial section background: subtle accent tint (accent at 4-6% opacity) or preset's alt section bg
262
+
263
+ **Do NOT:** Add bullet points, headings, or any other content inside a testimonial section.
264
+
265
+ ---
266
+
267
+ ## 7. closing-cta
268
+
269
+ **Purpose:** Clear next step -- drives action
270
+ **Density:** Open
271
+ **Content limits:** Headline 5 words max + CTA action text 3 words + email + URL (both required)
272
+
273
+ **HTML structure:**
274
+ ```html
275
+ <div class="section--cta">
276
+ <div class="cta-inner reveal">
277
+ <div class="cta-logo">[Vendor logo or CSS initials]</div>
278
+ <h2 class="cta-headline">[Headline -- 5 words max]</h2>
279
+ <p class="cta-sub">[Optional 1-sentence context]</p>
280
+ <div class="cta-contacts">
281
+ <a href="mailto:[email]" class="cta-email">[email]</a>
282
+ <a href="[url]" class="cta-url">[url]</a>
283
+ </div>
284
+ </div>
285
+ </div>
286
+ ```
287
+
288
+ **CSS approach:**
289
+ - `.section--cta`: preset's darkest or most distinctive background -- this is the closing statement
290
+ - `.cta-headline`: `font-family: var(--font-display); font-size: clamp(1.5rem, 4vw, 3rem); font-weight: var(--display-weight); color: var(--cta-text); letter-spacing: -0.02em;`
291
+ - `.cta-email`: `font-size: clamp(0.9rem, 1.5vw, 1.25rem); font-weight: 600;`
292
+ - `.cta-url`: `font-size: clamp(0.8rem, 1.2vw, 1rem); opacity: 0.7;`
293
+ - No bullet lists, no feature lists, no repetition of stats.
294
+
295
+ **One action only.** Email + URL -- both mandatory (fails QA if either missing).
296
+
297
+ ---
298
+
299
+ ## Standard Page Assemblies
300
+
301
+ ### 1-pager (1 page)
302
+ ```
303
+ <section class="slide page--cover-compact">
304
+ [cover section -- condensed version]
305
+ [challenge-inline -- 2 bullet lines max]
306
+ [solution-inline -- 1 sentence + 3 micro stats]
307
+ [results-inline -- 3 stats in smaller size]
308
+ [cta-inline -- email + url at bottom]
309
+ </section>
310
+ ```
311
+ 1-pager is a summary card. Every section is abbreviated. Nothing is full-depth.
312
+
313
+ ### 2-pager (2 pages)
314
+ ```
315
+ Page 1: <section class="slide">
316
+ [cover]
317
+ [challenge-solution stacked]
318
+ </section>
319
+
320
+ Page 2: <section class="slide">
321
+ [results]
322
+ [testimonial -- if available]
323
+ [closing-cta]
324
+ </section>
325
+ ```
326
+
327
+ ### 4-pager (4 pages)
328
+ ```
329
+ Page 1: <section class="slide">[cover]</section>
330
+ Page 2: <section class="slide">[overview] + [challenge]</section>
331
+ Page 3: <section class="slide">[solution] + [results]</section>
332
+ Page 4: <section class="slide">[testimonial] + [closing-cta]</section>
333
+ ```
@@ -0,0 +1,346 @@
1
+ # Style Presets — graphic-case-study
2
+
3
+ 9 business-oriented style presets. Each is fully self-contained -- complete CSS token set, no "derive from" chains.
4
+
5
+ Choose based on the vendor's brand and audience. When in doubt: clean-slate for enterprise B2B, midnight-editorial for tech/AI companies, warm-earth for agencies and services.
6
+
7
+ ---
8
+
9
+ ## 1. clean-slate
10
+
11
+ **Best for:** Enterprise B2B, sales teams, customer-facing materials, any audience that expects professionalism
12
+ **Feeling:** Trustworthy, clear, confident, enterprise-safe
13
+
14
+ ```
15
+ Background: #FFFFFF outer / #FFFFFF page / #F8F8F8 alt sections / #F4F4F4 footer
16
+ Text primary: #111111
17
+ Text secondary: #555555
18
+ Text muted: #999999
19
+ Accent: #0F172A (near-black navy)
20
+ Accent light: #E0F2FE (light blue for pill/badge backgrounds)
21
+ Accent text: #FFFFFF
22
+ Divider: #E8E8E8
23
+ Card border: #E0E0E0
24
+ Card radius: 16px
25
+ Card shadow: 0 2px 8px rgba(0, 0, 0, 0.06)
26
+
27
+ Display font: 'Plus Jakarta Sans', Arial, Helvetica, sans-serif
28
+ Body font: 'Plus Jakarta Sans', Arial, Helvetica, sans-serif
29
+ Google Fonts: https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;800&display=swap
30
+
31
+ Display weight: 800
32
+ Body weight: 400 / 500
33
+ ```
34
+
35
+ **Signature elements:**
36
+ - Rounded card containers (`border-radius: 16px`) on all fact cells, feature cards, stat containers
37
+ - Badge pills for category labels (`border-radius: 100px; background: #E0F2FE; color: #0F172A; padding: 0.2em 0.8em`)
38
+ - Generous whitespace -- push toward maximum clamp values
39
+ - Hero stat in dark `#0F172A` (high contrast, authoritative -- no color distraction)
40
+ - Cover background: `#0F172A` full dark (inversion for premium feel)
41
+ - Closing CTA: `#0F172A` full bg with white headline and white CTA
42
+
43
+ ---
44
+
45
+ ## 2. midnight-editorial
46
+
47
+ **Best for:** Tech, AI, developer-focused companies, premium B2B, thought leadership
48
+ **Feeling:** Editorial authority, premium, considered
49
+
50
+ ```
51
+ Background: #0A0A0A outer / #111111 page / #1A1A1A elevated cards / #080808 footer
52
+ Text primary: #F2F2F2
53
+ Text secondary: #AAAAAA
54
+ Text muted: #555555
55
+ Accent: #D8F90A (yellow-green)
56
+ Accent text: #0A0A0A (dark text on accent)
57
+ Divider: #2A2A2A
58
+ Card border: #222222
59
+
60
+ Display font: 'Instrument Serif', Georgia, 'Times New Roman', serif
61
+ Body font: Inter, Arial, Helvetica, sans-serif
62
+ Google Fonts: https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Inter:wght@400;500;600;700&display=swap
63
+
64
+ Display weight: 400
65
+ Body weight: 400 / 600
66
+ ```
67
+
68
+ **Signature elements:**
69
+ - Thin `<hr>` separators (`border: none; border-top: 1px solid #2A2A2A; width: 40px; margin: 0`)
70
+ - Oversized section numbers at `opacity: 0.06` as absolute background elements
71
+ - Instrument Serif italic on testimonial quotes (literary weight)
72
+ - Hero stat number in `#D8F90A` accent
73
+ - Cover: `#D8F90A` full-bg inversion with `#0A0A0A` text (unmissable)
74
+ - Closing CTA: `#D8F90A` full bg with `#0A0A0A` text
75
+
76
+ ---
77
+
78
+ ## 3. matt-gray
79
+
80
+ **Best for:** Internal business reviews, board materials, professional presentations to mixed audiences
81
+ **Feeling:** Safe, professional, accessible, clean
82
+
83
+ ```
84
+ Background: #F5F5F5 outer / #FFFFFF page / #EEEEEE section alt / #F8F8F8 footer
85
+ Text primary: #1A1A1A
86
+ Text secondary: #444444
87
+ Text muted: #888888
88
+ Accent: #2563EB (blue)
89
+ Accent text: #FFFFFF
90
+ Divider: #E5E5E5
91
+ Card border: #DDDDDD
92
+ Card shadow: 0 1px 3px rgba(0, 0, 0, 0.08)
93
+
94
+ Display font: 'DM Sans', Arial, Helvetica, sans-serif
95
+ Body font: 'DM Sans', Arial, Helvetica, sans-serif
96
+ Google Fonts: https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700;800&display=swap
97
+
98
+ Display weight: 700
99
+ Body weight: 400 / 500
100
+ ```
101
+
102
+ **Signature elements:**
103
+ - 4px left border on section headings and fact cells (`border-left: 4px solid #2563EB; padding-left: 1rem`)
104
+ - Subtle drop shadow on stat containers
105
+ - Hero stat in accent blue `#2563EB`
106
+ - Section headings use `#EEEEEE` alt background
107
+ - Closing CTA: `#1A1A1A` full dark bg with white text and blue button
108
+
109
+ ---
110
+
111
+ ## 4. brutalist
112
+
113
+ **Best for:** Standout sales materials, design-forward agencies, brands that want to be remembered
114
+ **Feeling:** Direct, raw, confident, uncompromising
115
+
116
+ ```
117
+ Background: #FFFFFF outer / #FFFFFF page
118
+ Text primary: #000000
119
+ Text secondary: #333333
120
+ Accent: #FF3300 (red) or #FFE500 (yellow)
121
+ Accent text: #000000
122
+ Divider: #000000 (solid black)
123
+ Border: 3px solid #000000 (heavy)
124
+ Border-radius: 0 (zero everywhere -- absolute rule)
125
+
126
+ Display font: 'Archivo Black', Arial Black, Arial, sans-serif
127
+ Body font: 'Space Grotesk', Arial, sans-serif
128
+ Google Fonts: https://fonts.googleapis.com/css2?family=Archivo+Black&family=Space+Grotesk:wght@400;500;700&display=swap
129
+
130
+ Display weight: 900
131
+ Body weight: 400 / 700
132
+ ```
133
+
134
+ **Signature elements:**
135
+ - Heavy borders everywhere: `border: 3px solid #000000` on ALL cards, tables, containers, page sections
136
+ - Zero border-radius on every element -- this is a hard rule, never soften
137
+ - Oversized section numbers fully visible (`opacity: 1`) in accent color
138
+ - Cover: accent color full bg (`#FF3300` or `#FFE500`) with `#000000` text
139
+ - Hero stat in accent color, extreme size
140
+ - Closing CTA: `#000000` full bg with white text and accent-color button/border
141
+
142
+ **DO NOT apply rounded corners, gradients, or drop shadows to brutalist case studies.**
143
+
144
+ ---
145
+
146
+ ## 5. mint-pixel-corporate
147
+
148
+ **Best for:** SaaS sales, product-focused companies, tech startups, growth-stage B2B
149
+ **Feeling:** Fresh, modern, startup-professional
150
+
151
+ ```
152
+ Background: #F0FAF7 outer / #FFFFFF page / #E8F5F0 alt sections / #F0FAF7 footer
153
+ Text primary: #1A2E2A
154
+ Text secondary: #4A6B62
155
+ Text muted: #7A9B92
156
+ Accent: #00B894 (mint)
157
+ Accent text: #1A2E2A
158
+ Divider: #D1E8E1
159
+ Card border: #C5DFD7
160
+ Card radius: 10px
161
+
162
+ Display font: 'Manrope', Arial, Helvetica, sans-serif
163
+ Body font: 'Manrope', Arial, Helvetica, sans-serif
164
+ Google Fonts: https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;700;800&display=swap
165
+
166
+ Display weight: 800
167
+ Body weight: 400 / 500
168
+ ```
169
+
170
+ **Signature elements:**
171
+ - Mint accent pills for feature labels and category tags (`border-radius: 100px; background: #00B894; color: #1A2E2A`)
172
+ - CSS `radial-gradient` dot pattern on cover background:
173
+ ```css
174
+ background-image: radial-gradient(circle, #00B894 1px, transparent 1px);
175
+ background-size: 24px 24px;
176
+ background-color: #1A2E2A;
177
+ ```
178
+ - Hero stat in mint `#00B894`
179
+ - Feature cards with mint border (`border: 2px solid #00B894`)
180
+ - Closing CTA: `#1A2E2A` dark bg with dot pattern + mint text and white button
181
+
182
+ ---
183
+
184
+ ## 6. product-minimal
185
+
186
+ **Best for:** Product companies, design-forward B2B, companies presenting to design-savvy buyers
187
+ **Feeling:** Maximum whitespace, purposeful restraint, design system precision
188
+
189
+ ```
190
+ Background: #FAFAFA outer / #FAFAFA page / #F4F4F4 alt / #F0F0F0 footer
191
+ Text primary: #18181B
192
+ Text secondary: #71717A
193
+ Text muted: #A1A1AA
194
+ Accent: #8B5CF6 (violet)
195
+ Accent text: #FFFFFF
196
+ Divider: #E4E4E7
197
+ Card shadow: 0 1px 3px rgba(0, 0, 0, 0.08)
198
+ Card radius: 12px
199
+
200
+ Display font: 'Syne', Arial, Helvetica, sans-serif
201
+ Body font: 'IBM Plex Sans', Arial, Helvetica, sans-serif
202
+ Google Fonts: https://fonts.googleapis.com/css2?family=Syne:wght@400;700;800&family=IBM+Plex+Sans:wght@400;500;600&display=swap
203
+
204
+ Display weight: 700-800
205
+ Body weight: 400 / 500
206
+ ```
207
+
208
+ **Signature elements:**
209
+ - Single accent element per section rule: violet appears in AT MOST ONE element per section
210
+ - Subtle CSS drop shadow on cards (`box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08)`)
211
+ - Very generous padding (use maximum clamp values everywhere)
212
+ - Hero stat in violet `#8B5CF6` with thin violet top-border on stat container
213
+ - Cover: `#18181B` full dark bg with Syne display font in white
214
+ - Closing CTA: violet background (`#8B5CF6`) with white text
215
+
216
+ ---
217
+
218
+ ## 7. magazine-red
219
+
220
+ **Best for:** Marketing agencies, bold companies, brand-forward case studies, attention-commanding materials
221
+ **Feeling:** Authoritative, editorial, high energy
222
+
223
+ ```
224
+ Background: #1A1A1A outer / #111111 page / #1E1E1E alt / #0D0D0D footer
225
+ Text primary: #FFFFFF
226
+ Text secondary: #CCCCCC
227
+ Text muted: #888888
228
+ Accent: #E63329 (red)
229
+ Divider: #2A2A2A
230
+
231
+ Display font: 'Fraunces', Georgia, 'Times New Roman', serif
232
+ Body font: 'Work Sans', Arial, Helvetica, sans-serif
233
+ Google Fonts: https://fonts.googleapis.com/css2?family=Fraunces:ital,wght@0,900;1,900&family=Work+Sans:wght@400;500;600&display=swap
234
+
235
+ Display weight: 900
236
+ Body weight: 400 / 500
237
+ ```
238
+
239
+ **Signature elements:**
240
+ - 8px full-width red band separator: `<div style="width:100%; height:8px; background:#E63329; margin: clamp(1rem, 2vw, 2rem) 0">`
241
+ - Editorial section numbers at `opacity: 0.25` in red
242
+ - Testimonial section inverted to white bg with dark text (only white section in the deck)
243
+ - Fraunces italic for quote text (extreme editorial weight)
244
+ - Hero stat in red `#E63329`, large
245
+ - Closing CTA: full red background (`#E63329`) with white text
246
+
247
+ ---
248
+
249
+ ## 8. soft-cloud
250
+
251
+ **Best for:** Onboarding materials, customer education, HR/people companies, approachable SaaS
252
+ **Feeling:** Friendly, accessible, soft, welcoming
253
+
254
+ ```
255
+ Background: #EEF2FF outer / #FFFFFF page / #F5F3FF alt / #EEF2FF footer
256
+ Text primary: #1E1B4B
257
+ Text secondary: #4C4A7B
258
+ Text muted: #9896C0
259
+ Accent: #6366F1 (indigo)
260
+ Accent light: #E0E7FF (light indigo for card backgrounds)
261
+ Accent text: #FFFFFF
262
+ Divider: #DDD6FE
263
+ Card radius: 24px
264
+ Card shadow: 0 4px 16px rgba(99, 102, 241, 0.08)
265
+
266
+ Display font: 'Outfit', Arial, Helvetica, sans-serif
267
+ Body font: 'Outfit', Arial, Helvetica, sans-serif
268
+ Google Fonts: https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap
269
+
270
+ Display weight: 700
271
+ Body weight: 400 / 500
272
+ ```
273
+
274
+ **Signature elements:**
275
+ - Generous border-radius (`border-radius: 24px`) on all cards, callout blocks, stat containers
276
+ - Gradient section backgrounds: `linear-gradient(135deg, #EEF2FF 0%, #E0E7FF 50%, #DDD6FE 100%)`
277
+ - Badge pills on key points (`border-radius: 100px; background: #E0E7FF; color: #6366F1`)
278
+ - Hero stat in indigo `#6366F1` on `#F5F3FF` elevated card bg
279
+ - Closing CTA: indigo gradient (`linear-gradient(135deg, #6366F1 0%, #8B5CF6 100%)`) with white text
280
+
281
+ ---
282
+
283
+ ## 9. warm-earth (case-study-exclusive)
284
+
285
+ **Best for:** Agencies, consultancies, service businesses, health/education tech, companies that sell on trust
286
+ **Feeling:** Trusted, grounded, human, warm authority
287
+
288
+ ```
289
+ Background: #FDF6EF outer / #FFFFFF page / #FAF0E4 alt sections / #F5EBD8 footer
290
+ Text primary: #2C1A0E
291
+ Text secondary: #6B4C30
292
+ Text muted: #A08060
293
+ Accent: #D4622A (burnt orange)
294
+ Accent light: #FDE8D8 (peach -- for pill/badge backgrounds)
295
+ Accent text: #FFFFFF
296
+ Divider: #E8D5BF
297
+ Card border: #E0C9A8
298
+ Card radius: 10px
299
+ Card shadow: 0 2px 8px rgba(44, 26, 14, 0.06)
300
+
301
+ Display font: 'Lora', Georgia, 'Times New Roman', serif
302
+ Body font: 'Source Sans 3', Arial, Helvetica, sans-serif
303
+ Google Fonts: https://fonts.googleapis.com/css2?family=Lora:wght@400;600;700&family=Source+Sans+3:wght@400;600&display=swap
304
+
305
+ Display weight: 700
306
+ Body weight: 400 / 600
307
+ ```
308
+
309
+ **Signature elements:**
310
+ - Warm off-white background (`#FDF6EF`) -- not pure white, not gray. The warmth starts with the canvas.
311
+ - Accent pills in peach (`background: #FDE8D8; color: #D4622A; border-radius: 100px`) for category labels
312
+ - **Drop cap on challenge page opening paragraph:**
313
+ ```css
314
+ .challenge-context::first-letter {
315
+ font-family: 'Lora', Georgia, serif;
316
+ font-size: clamp(3rem, 7vw, 5rem);
317
+ float: left;
318
+ margin: 0.05em 0.12em 0 0;
319
+ color: var(--accent);
320
+ line-height: 0.8;
321
+ }
322
+ ```
323
+ - Hero stat in burnt orange `#D4622A`
324
+ - Section headings: `border-left: 4px solid #D4622A; padding-left: 1rem` (no full-background inversion -- subtle accent)
325
+ - Cover: warm-dark background `#2C1A0E` with off-white text `#F5EBD8` and burnt-orange accent label
326
+ - Closing CTA: `#2C1A0E` full dark bg with `#FDE8D8` peach headline, white CTA button with burnt orange border
327
+
328
+ ---
329
+
330
+ ## DO NOT USE -- Style Slop Checklist
331
+
332
+ Before outputting any HTML, verify none of these are present:
333
+
334
+ | Pattern | Why it's wrong |
335
+ |---|---|
336
+ | Inter as display font | Zero typographic character -- reads as default AI output |
337
+ | Purple-to-blue gradient on white background | Most overused AI aesthetic -- immediately signals undesigned |
338
+ | Every section same background color | No visual rhythm -- the PDF reads as one flat block |
339
+ | Identical section layouts throughout | No typographic thinking -- copy-pasted template feel |
340
+ | `box-shadow` on everything | Overused "depth" signal with no real depth |
341
+ | `border-radius: 8px` on everything (especially brutalist) | Softening that fights the style's aesthetic intent |
342
+ | Accent color on 5+ elements per section | Over-branded, destroys scarcity = destroys premium feel |
343
+ | Helvetica Neue / Arial as display font | Generic -- no personality at display size |
344
+ | Stat numbers at body text size | Breaks the entire purpose of the results section |
345
+ | "Thank You" as closing-cta headline | No action, no contact info = completely wasted page |
346
+ | Logo placeholder box with no styling | Unfinished -- use CSS initials at minimum |