@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 +1 -1
- package/registry.json +10 -0
- package/skills/graphic-case-study/README.md +121 -0
- package/skills/graphic-case-study/SKILL.md +312 -0
- package/skills/graphic-case-study/evals/evals.json +35 -0
- package/skills/graphic-case-study/references/design-system.md +104 -0
- package/skills/graphic-case-study/references/page-library.md +333 -0
- package/skills/graphic-case-study/references/style-presets.md +346 -0
package/package.json
CHANGED
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 |
|