@opendirectory.dev/skills 0.1.57 → 0.1.59

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.
@@ -0,0 +1,153 @@
1
+ /* ===========================================
2
+ VIEWPORT FITTING: MANDATORY BASE STYLES
3
+ Include this ENTIRE file in every presentation.
4
+ These styles ensure slides fit exactly in the viewport.
5
+ =========================================== */
6
+
7
+ /* 1. Lock html/body to viewport */
8
+ html, body {
9
+ height: 100%;
10
+ overflow-x: hidden;
11
+ }
12
+
13
+ html {
14
+ scroll-snap-type: y mandatory;
15
+ scroll-behavior: smooth;
16
+ }
17
+
18
+ /* 2. Each slide = exact viewport height */
19
+ .slide {
20
+ width: 100vw;
21
+ height: 100vh;
22
+ height: 100dvh; /* Dynamic viewport height for mobile browsers */
23
+ overflow: hidden; /* CRITICAL: Prevent ANY overflow */
24
+ scroll-snap-align: start;
25
+ display: flex;
26
+ flex-direction: column;
27
+ position: relative;
28
+ }
29
+
30
+ /* 3. Content container with flex for centering */
31
+ .slide-content {
32
+ flex: 1;
33
+ display: flex;
34
+ flex-direction: column;
35
+ justify-content: center;
36
+ max-height: 100%;
37
+ overflow: hidden; /* Double-protection against overflow */
38
+ padding: var(--slide-padding);
39
+ }
40
+
41
+ /* 4. ALL typography uses clamp() for responsive scaling */
42
+ :root {
43
+ /* Titles scale from mobile to desktop */
44
+ --title-size: clamp(1.5rem, 5vw, 4rem);
45
+ --h2-size: clamp(1.25rem, 3.5vw, 2.5rem);
46
+ --h3-size: clamp(1rem, 2.5vw, 1.75rem);
47
+
48
+ /* Body text */
49
+ --body-size: clamp(0.75rem, 1.5vw, 1.125rem);
50
+ --small-size: clamp(0.65rem, 1vw, 0.875rem);
51
+
52
+ /* Spacing scales with viewport */
53
+ --slide-padding: clamp(1rem, 4vw, 4rem);
54
+ --content-gap: clamp(0.5rem, 2vw, 2rem);
55
+ --element-gap: clamp(0.25rem, 1vw, 1rem);
56
+ }
57
+
58
+ /* 5. Cards/containers use viewport-relative max sizes */
59
+ .card, .container, .content-box {
60
+ max-width: min(90vw, 1000px);
61
+ max-height: min(80vh, 700px);
62
+ }
63
+
64
+ /* 6. Lists auto-scale with viewport */
65
+ .feature-list, .bullet-list {
66
+ gap: clamp(0.4rem, 1vh, 1rem);
67
+ }
68
+
69
+ .feature-list li, .bullet-list li {
70
+ font-size: var(--body-size);
71
+ line-height: 1.4;
72
+ }
73
+
74
+ /* 7. Grids adapt to available space */
75
+ .grid {
76
+ display: grid;
77
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr));
78
+ gap: clamp(0.5rem, 1.5vw, 1rem);
79
+ }
80
+
81
+ /* 8. Images constrained to viewport */
82
+ img, .image-container {
83
+ max-width: 100%;
84
+ max-height: min(50vh, 400px);
85
+ object-fit: contain;
86
+ }
87
+
88
+ /* ===========================================
89
+ RESPONSIVE BREAKPOINTS
90
+ Aggressive scaling for smaller viewports
91
+ =========================================== */
92
+
93
+ /* Short viewports (< 700px height) */
94
+ @media (max-height: 700px) {
95
+ :root {
96
+ --slide-padding: clamp(0.75rem, 3vw, 2rem);
97
+ --content-gap: clamp(0.4rem, 1.5vw, 1rem);
98
+ --title-size: clamp(1.25rem, 4.5vw, 2.5rem);
99
+ --h2-size: clamp(1rem, 3vw, 1.75rem);
100
+ }
101
+ }
102
+
103
+ /* Very short viewports (< 600px height) */
104
+ @media (max-height: 600px) {
105
+ :root {
106
+ --slide-padding: clamp(0.5rem, 2.5vw, 1.5rem);
107
+ --content-gap: clamp(0.3rem, 1vw, 0.75rem);
108
+ --title-size: clamp(1.1rem, 4vw, 2rem);
109
+ --body-size: clamp(0.7rem, 1.2vw, 0.95rem);
110
+ }
111
+
112
+ /* Hide non-essential elements */
113
+ .nav-dots, .keyboard-hint, .decorative {
114
+ display: none;
115
+ }
116
+ }
117
+
118
+ /* Extremely short (landscape phones, < 500px height) */
119
+ @media (max-height: 500px) {
120
+ :root {
121
+ --slide-padding: clamp(0.4rem, 2vw, 1rem);
122
+ --title-size: clamp(1rem, 3.5vw, 1.5rem);
123
+ --h2-size: clamp(0.9rem, 2.5vw, 1.25rem);
124
+ --body-size: clamp(0.65rem, 1vw, 0.85rem);
125
+ }
126
+ }
127
+
128
+ /* Narrow viewports (< 600px width) */
129
+ @media (max-width: 600px) {
130
+ :root {
131
+ --title-size: clamp(1.25rem, 7vw, 2.5rem);
132
+ }
133
+
134
+ /* Stack grids vertically */
135
+ .grid {
136
+ grid-template-columns: 1fr;
137
+ }
138
+ }
139
+
140
+ /* ===========================================
141
+ REDUCED MOTION
142
+ Respect user preferences
143
+ =========================================== */
144
+ @media (prefers-reduced-motion: reduce) {
145
+ *, *::before, *::after {
146
+ animation-duration: 0.01ms !important;
147
+ transition-duration: 0.2s !important;
148
+ }
149
+
150
+ html {
151
+ scroll-behavior: auto;
152
+ }
153
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "skill_name": "graphic-ebook",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Create a 6-page ebook titled 'The B2B SaaS Guide to Reducing Churn'. Audience: Customer Success Managers at 50–500 person SaaS companies. CTA: book a demo. Style: clean-slate. Brand: DataPulse.",
7
+ "expected_output": "All 4 required fields present — skips Step 1. Asks 9 questions in Step 2. Reads clean-slate tokens (Plus Jakarta Sans, #0F172A accent, white bg, rounded cards 16px). Reads viewport-base.css verbatim. Adds `-webkit-print-color-adjust: exact` globally. 6-page structure: [cover] + [toc] + [chapter-intro] + [text-column] + [stat-grid] + [closing-cta]. Body text at clamp(0.875rem, 1.25vw, 1.05rem) with line-height 1.75, max-width min(65ch,100%). No 2 consecutive text-column pages. Chapter-intro has .chapter-number-deco (opacity 0.06). Every page except cover has .page-footer with page number + brand name. Per-page HTML files written (page-01.html → page-06.html). PDF export --portrait called. Summary with checklist shown.",
8
+ "files": []
9
+ },
10
+ {
11
+ "id": 2,
12
+ "prompt": "Make me an ebook.",
13
+ "expected_output": "topic, audience, desired_action, content all missing. Does NOT read any reference files. Does NOT generate any HTML, structure plan, or outline. Asks exactly: 'To create your ebook, I need four things: 1. Topic 2. Audience 3. Desired action 4. Content'. 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 3-page lead magnet ebook: '5 Signs Your RevOps Stack is Broken'. Target: RevOps Managers. CTA: download our RevOps audit template. Style: midnight-editorial. Draft from scratch.",
19
+ "expected_output": "Skips Step 1. Asks 9 questions. 3-page structure: [cover] + [stat-grid (5 signs as stats or stat-callout layout)] + [closing-cta]. midnight-editorial tokens: Instrument Serif display, Inter body, #D8F90A accent, #111111 bg. Cover title leads with tension ('5 Signs Your RevOps Stack is Broken' ≤10 words). No TOC (3 pages). Stats at clamp(2.5rem, 7vw, 5rem) min. No footer on cover, footer on pages 2–3. Closing CTA has email + URL (both required). Per-page HTML (3 files). PDF --portrait export. Summary shown.",
20
+ "files": []
21
+ },
22
+ {
23
+ "id": 4,
24
+ "prompt": "Build a 10-page deep dive ebook: 'The Complete Guide to Product-Led Growth'. Audience: SaaS founders and heads of product. Style: product-minimal. CTA: join our PLG community newsletter. Brand: Cortex.",
25
+ "expected_output": "Skips Step 1. Asks 9 questions. 10-page structure: [cover] + [toc] + 3× [chapter-intro + text-column or text-sidebar] + [quote-callout] + [key-takeaways] + [closing-cta]. product-minimal tokens: Syne display, IBM Plex Sans body, #8B5CF6 violet accent. Visual rhythm enforced: no 2 consecutive text-column pages. Body text max-width min(65ch,100%), line-height 1.75. Chapter numbers as .chapter-number-deco (opacity 0.06). Page footers on pages 2–10. Three-point CTA embedded (intro + mid + closing). 10 per-page HTML files. PDF --portrait export. Summary shown.",
26
+ "files": []
27
+ },
28
+ {
29
+ "id": 5,
30
+ "prompt": "Create a 6-page ebook about reducing customer onboarding time. Style: show me options. Audience: Head of Customer Success. CTA: book a demo.",
31
+ "expected_output": "Skips Step 1. Asks 9 questions. User answers style='show me options': generates 3 cover-page 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. 6-page structure: [cover] + [toc] + [chapter-intro] + [text-sidebar (with .callout--stat)] + [quote-callout] + [closing-cta]. text-sidebar uses typed callout class (not generic bold box). .claude-design/previews/ deleted after generation. PDF --portrait export. Summary shown.",
32
+ "files": []
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,241 @@
1
+ # Design System — graphic-ebook
2
+
3
+ A4 portrait reading document typography and spacing. Tuned for 1200px viewport where **1vw = 12px**.
4
+
5
+ ---
6
+
7
+ ## Why Different from graphic-slide-deck
8
+
9
+ | | graphic-slide-deck | graphic-ebook |
10
+ |---|---|---|
11
+ | Viewport | 1920×1080px | 1200×1697px |
12
+ | Primary medium | Display headlines | Body copy |
13
+ | Line-height | 1.2–1.4 | 1.75 |
14
+ | Body max-width | Full width OK | ≤65ch enforced |
15
+ | Stat numbers | Up to `clamp(3.5rem, 12vw, 9rem)` | `clamp(2.5rem, 7vw, 5rem)` |
16
+ | Purpose | Audience reads from distance | Reader reads at arm's length |
17
+
18
+ ---
19
+
20
+ ## Typography Scale
21
+
22
+ All values use `clamp(min, preferred-vw, max)`. At 1200px viewport, 1vw = 12px.
23
+
24
+ ```
25
+ Cover title: clamp(2rem, 5vw, 3.5rem) 60px at 1200px
26
+ Chapter heading (h2): clamp(1.5rem, 3.5vw, 2.8rem) 42px at 1200px
27
+ Section heading (h3): clamp(1rem, 1.8vw, 1.4rem) 21.6px at 1200px
28
+ Body text: clamp(0.875rem, 1.25vw, 1.05rem) 15px at 1200px
29
+ Sidebar body: clamp(0.8rem, 1.1vw, 0.95rem) 13.2px at 1200px
30
+ Stat number (hero): clamp(3rem, 8vw, 5.5rem) 96px at 1200px
31
+ Stat number (support): clamp(2.5rem, 7vw, 5rem) 84px at 1200px
32
+ Pull quote: clamp(1.2rem, 2.2vw, 1.75rem) 26.4px at 1200px (italic, display font)
33
+ TOC entry: clamp(0.875rem, 1.4vw, 1.1rem) 16.8px at 1200px
34
+ Caption / label: clamp(0.62rem, 0.9vw, 0.78rem) 10.8px at 1200px
35
+ Chapter number (deco): clamp(6rem, 18vw, 14rem) decorative, opacity 0.06–0.08
36
+ Callout label: clamp(0.58rem, 0.8vw, 0.68rem) uppercase, 0.12em tracking
37
+ Page footer: clamp(0.55rem, 0.75vw, 0.65rem) uppercase, 0.1em tracking
38
+ ```
39
+
40
+ ---
41
+
42
+ ## Line-Height
43
+
44
+ | Element | Line-height |
45
+ |---|---|
46
+ | Body text | 1.75 |
47
+ | Sidebar body | 1.65 |
48
+ | Chapter headings (h2) | 1.15 |
49
+ | Section headings (h3) | 1.2 |
50
+ | Pull quote | 1.4 |
51
+ | TOC entries | 1.3 |
52
+ | Cover title | 1.08 |
53
+ | Stat numbers | 0.9 |
54
+
55
+ ---
56
+
57
+ ## Letter-Spacing
58
+
59
+ | Element | Tracking |
60
+ |---|---|
61
+ | Cover title / headlines | `-0.03em` |
62
+ | Chapter headings | `-0.02em` |
63
+ | Body text | `0` |
64
+ | Labels / captions | `+0.10em` to `+0.14em` |
65
+ | Callout labels | `+0.12em` |
66
+ | Page footer | `+0.10em` |
67
+ | Stat labels | `+0.12em` |
68
+
69
+ ---
70
+
71
+ ## Body Copy Max-Width
72
+
73
+ Enforce max-width on all paragraph text — uncontrolled line length is the #1 readability failure in AI-generated ebooks.
74
+
75
+ | Layout | Max-width |
76
+ |---|---|
77
+ | text-column 1-col body | `min(65ch, 100%)` |
78
+ | text-column 2-col each column | natural (fills 50% minus gap) |
79
+ | text-sidebar main | natural (fills ~66% minus gap) |
80
+ | text-sidebar callout | natural (fills ~33% minus gap) |
81
+ | quote-callout | `max-width: 32ch` on the quote |
82
+ | stat-grid narrative | `max-width: 70ch` |
83
+ | key-takeaways items | natural |
84
+
85
+ ---
86
+
87
+ ## Spacing Rhythm
88
+
89
+ Valid spacing values: 8 / 16 / 24 / 32 / 48 / 64 / 96px only.
90
+
91
+ ```
92
+ Page padding: clamp(2.5rem, 6%, 4.5rem) 40–72px
93
+ Section gap: clamp(1.5rem, 3%, 3rem) 24–48px
94
+ Content gap: clamp(0.875rem, 1.5%, 1.75rem) 14–28px
95
+ Element gap: clamp(0.5rem, 1%, 1rem) 8–16px
96
+ Paragraph gap: clamp(0.875rem, 1.5%, 1.4rem) 14–22px
97
+ Column gap: clamp(2rem, 4%, 3.5rem) 32–56px
98
+ Callout padding: clamp(0.75rem, 1.5%, 1.1rem) 12–17px
99
+ Footer padding: clamp(0.5rem, 1%, 0.625rem) 8–10px
100
+ ```
101
+
102
+ ---
103
+
104
+ ## Page Footer
105
+
106
+ Every page except cover must have a footer. It is the single most common missing element in mediocre AI ebooks — its presence signals quality.
107
+
108
+ ```css
109
+ .page-footer {
110
+ position: absolute;
111
+ bottom: 0; left: 0; right: 0;
112
+ padding: clamp(0.5rem, 1%, 0.625rem) var(--page-padding);
113
+ display: flex;
114
+ justify-content: space-between;
115
+ align-items: center;
116
+ border-top: 1px solid var(--divider);
117
+ font-family: var(--font-body);
118
+ font-size: clamp(0.55rem, 0.75vw, 0.65rem);
119
+ font-weight: 600;
120
+ letter-spacing: 0.1em;
121
+ text-transform: uppercase;
122
+ color: var(--text-muted);
123
+ }
124
+ ```
125
+
126
+ HTML: `<div class="page-footer"><span>[Brand Name]</span><span>[Page Number]</span></div>`
127
+
128
+ Footer height is ~2.5–3rem. Account for this in the slide content area: add `padding-bottom: 3rem` to all non-cover `.slide` inner containers.
129
+
130
+ ---
131
+
132
+ ## Typed Callout System
133
+
134
+ 5 callout types, each with a unique color token. Never use a generic "just bold the box" approach — the type distinction is part of the design quality signal.
135
+
136
+ | Type | CSS class | Border color | Background tint |
137
+ |---|---|---|---|
138
+ | Pro Tip | `.callout--tip` | `#16A34A` (green) | `rgba(22, 163, 74, 0.07)` |
139
+ | Warning | `.callout--warning` | `#D97706` (amber) | `rgba(217, 119, 6, 0.07)` |
140
+ | Stat callout | `.callout--stat` | `var(--accent)` | `rgba(var(--accent-rgb), 0.07)` |
141
+ | Quote | `.callout--quote` | `var(--divider)` | `var(--bg-elevated)` |
142
+ | Checklist | `.callout--checklist` | `#0891B2` (teal) | `rgba(8, 145, 178, 0.07)` |
143
+
144
+ Base callout CSS:
145
+ ```css
146
+ .callout {
147
+ border-left: 3px solid;
148
+ border-radius: var(--card-radius, 4px);
149
+ padding: clamp(0.75rem, 1.5%, 1.1rem);
150
+ }
151
+ .callout-label {
152
+ font-size: clamp(0.58rem, 0.8vw, 0.68rem);
153
+ font-weight: 700;
154
+ letter-spacing: 0.12em;
155
+ text-transform: uppercase;
156
+ margin-bottom: 0.5em;
157
+ display: block;
158
+ }
159
+ .callout-body {
160
+ font-size: clamp(0.8rem, 1.1vw, 0.95rem);
161
+ line-height: 1.6;
162
+ color: var(--text-secondary);
163
+ }
164
+ ```
165
+
166
+ ---
167
+
168
+ ## Visual Rhythm Rule
169
+
170
+ **Never place 2+ text-column pages consecutively.**
171
+
172
+ At minimum, insert one of the following between any two text-column pages:
173
+ - `chapter-intro` (signals new section, very open)
174
+ - `quote-callout` (full-page visual break)
175
+ - `stat-grid` (numbers and space — contrast from body copy)
176
+ - `key-takeaways` (structured list, different visual weight)
177
+
178
+ Flat reading decks with no visual rhythm feel like Google Docs exports. The layout variety IS part of the design. The reader's eye needs contrast across pages to stay engaged.
179
+
180
+ ---
181
+
182
+ ## Body Copy Density Limits
183
+
184
+ At 1200×1697px with 40–72px page padding and a 3rem footer reserve:
185
+
186
+ | Layout | Word count | Notes |
187
+ |---|---|---|
188
+ | text-column 1-col | 180–250 words max | Split into 2 pages if over |
189
+ | text-column 2-col | 280–380 words (140–190 per col) | Dense reference content only |
190
+ | text-sidebar | 140–180 words main + ≤70 sidebar | Main col = 2/3 width |
191
+ | chapter-intro | 40–60 words | Teaser only — nothing else |
192
+ | quote-callout | 30–45 words | Quote only — nothing else |
193
+ | stat-grid | 3–6 metrics + optional 1-sentence narrative | No paragraphs |
194
+ | key-takeaways | 5–8 items × ≤15 words | Imperative phrasing |
195
+ | closing-cta | ≤30 words total | Headline + 1 sentence + contact |
196
+
197
+ ---
198
+
199
+ ## Three-Point CTA Architecture
200
+
201
+ For ebooks ≥ 6 pages, embed three CTA touchpoints — not just the closing page:
202
+
203
+ **1. Intro CTA (page 2 or 3):**
204
+ Subtle inline mention within the first body section or TOC page:
205
+ > "All templates referenced in this guide are at [url]"
206
+
207
+ **2. Mid-ebook CTA (after a stat-grid or chapter-intro):**
208
+ Small `.callout--stat` or `.callout--tip` box:
209
+ ```html
210
+ <div class="callout callout--tip">
211
+ <p class="callout-label">Next Step</p>
212
+ <p class="callout-body">See how [Brand] addresses this. 20-min demo at [url]</p>
213
+ </div>
214
+ ```
215
+
216
+ **3. Closing CTA (final page):**
217
+ Full-page `closing-cta` layout with email + URL. The primary conversion page.
218
+
219
+ ---
220
+
221
+ ## DO NOT USE — Slop Checklist
222
+
223
+ Before outputting any HTML, verify none of these are present:
224
+
225
+ | Pattern | Why wrong |
226
+ |---|---|
227
+ | Inter as display font | Zero typographic character — reads as default AI output |
228
+ | Body copy filling 100% page width | Unreadable — enforce `max-width: min(65ch, 100%)` |
229
+ | Same background on every page | No visual rhythm — reads as one flat wall of text |
230
+ | Stat numbers at body text size | Defeats the purpose of the stat-grid layout |
231
+ | Bullets for everything | Body paragraphs need real prose, not lists |
232
+ | Placeholder boxes for images | Never show `[IMAGE]` boxes — CSS-generated visuals only |
233
+ | "Thank You" on closing CTA | No action, no contact info = wasted page |
234
+ | Chapter numbers at body size | Must be oversized decorative element (opacity 0.06) |
235
+ | Identical column layout on all pages | No typographic thinking — visual rhythm is mandatory |
236
+ | Missing page footers | Immediately signals "AI template" — every real ebook has them |
237
+ | Generic callout boxes (no type distinction) | All-same-color sidebars = template output |
238
+ | Missing `-webkit-print-color-adjust: exact` | All background colors disappear in PDF export |
239
+ | Line-height < 1.65 on body text | Cramped — reading documents need room to breathe |
240
+ | `accent color on 5+ elements per section` | Kills scarcity — accent means important, not everywhere |
241
+ | Helvetica Neue / Arial as display font | Generic — no personality at display size |