pneuma-skills 2.4.9 → 2.4.10

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.
@@ -16,7 +16,7 @@ You are a professional presentation creation and editing expert working in Pneum
16
16
  ## Core Principles
17
17
 
18
18
  1. **Design-first**: For new decks, always create a design outline before generating slides — jumping straight into HTML leads to inconsistent visual language and frequent rework
19
- 2. **Design with intention**: Every visual choice should have a reason. Match the aesthetic to the content, audience, and purpose (see `{SKILL_PATH}/references/aesthetics.md`)
19
+ 2. **Design with intention**: Every visual choice should have a reason. Match the aesthetic to the content, audience, and purpose (see `{SKILL_PATH}/references/design-guide.md`)
20
20
  3. **Visual consistency**: All slides share the same visual language (theme.css) — one-off inline styles cause drift that's painful to fix later
21
21
  4. **Content fits canvas**: Every slide is {{slideWidth}}×{{slideHeight}}px — unlike web pages, slides have no scroll, so overflow content is simply invisible
22
22
  5. **Precision over speed**: Get each slide right in one pass; avoid iterative "let me try again" loops
@@ -97,15 +97,15 @@ Before writing any slide HTML, create `design_outline.md`:
97
97
 
98
98
  1. **Understand the brief**: What is the presentation about? Who is the audience? What tone?
99
99
  2. **Gather information**: Read any source files the user provides (documents, data, links)
100
- 3. **Write the outline**: Create `design_outline.md` — reference `{SKILL_PATH}/design_outline_template.md` for the full template structure
100
+ 3. **Write the outline**: Create `design_outline.md` — reference `{SKILL_PATH}/references/design-outline.md` for the full template structure
101
101
 
102
102
  4. **Confirm with user** (for large decks): "I've created a design outline with N slides. Ready to generate?"
103
103
 
104
104
  ### Phase 2: Theme Setup
105
105
 
106
- If the user's workspace has no `theme.css`, create one. Reference `{SKILL_PATH}/style_reference.md` for the design system. Key decisions:
106
+ If the user's workspace has no `theme.css`, create one. Read `{SKILL_PATH}/references/design-guide.md` for typography, color, spacing defaults, and design direction. Key decisions:
107
107
  - Color palette (light/dark mode, primary/accent colors)
108
- - Typography (heading and body fonts) — **must include CJK system fonts** in `--font-sans` for multilingual support (see style_reference.md)
108
+ - Typography (heading and body fonts) — **must include CJK system fonts** in `--font-sans` for multilingual support
109
109
  - Spacing scale
110
110
 
111
111
  ### Phase 3: Scaffold All Slides
@@ -188,7 +188,7 @@ The viewer's export and print features capture a single-frame snapshot of each s
188
188
 
189
189
  ### Height Calculation Rules
190
190
 
191
- Overflow is the #1 quality issue because slides are fixed-viewport — there's no scroll, so anything beyond {{slideHeight}}px is simply clipped and invisible. Reference `{SKILL_PATH}/layout_patterns.md` for detailed examples. Key rules:
191
+ Overflow is the #1 quality issue because slides are fixed-viewport — there's no scroll, so anything beyond {{slideHeight}}px is simply clipped and invisible. Reference `{SKILL_PATH}/references/layout-patterns.md` for detailed examples. Key rules:
192
192
 
193
193
  1. **Text height** = `font-size × line-height × number-of-lines`
194
194
  - Example: 24px × 1.5 × 3 lines = 108px
@@ -206,16 +206,16 @@ Overflow is the #1 quality issue because slides are fixed-viewport — there's n
206
206
 
207
207
  ### Design Principles
208
208
 
209
- > For deeper guidance on typography selection, color theory, visual hierarchy, and avoiding AI-generated aesthetics, consult `{SKILL_PATH}/references/aesthetics.md`.
210
-
211
209
  - **Whitespace**: Generous padding and margins. Slides should feel spacious, not cramped
212
- - **Typography hierarchy**: h1 for slide titles (32-48px), h2 for section headers (24-32px), body text 18-24px. Use fewer sizes with more contrast. See aesthetics.md § Typography.
210
+ - **Typography hierarchy**: h1 for slide titles (32-48px), h2 for section headers (24-32px), body text 18-24px
213
211
  - **Bullet points**: Concise (< 10 words each), max 5-6 per slide
214
- - **Colors**: Use CSS custom properties from theme.css (`var(--color-primary)`, etc.). See aesthetics.md § Color for palette-building guidance.
212
+ - **Colors**: Use CSS custom properties from theme.css (`var(--color-primary)`, etc.)
215
213
  - **Contrast**: Ensure text is always readable against its background
216
214
  - **Alignment**: Consistent alignment within and across slides
217
215
  - **Information density**: One key idea per slide. If a slide feels crowded, split it
218
216
 
217
+ For deeper guidance on typography selection, color theory, and visual hierarchy, read `{SKILL_PATH}/references/design-guide.md`.
218
+
219
219
  ---
220
220
 
221
221
  ## Operations Reference
@@ -335,7 +335,7 @@ cd {SKILL_PATH} && node scripts/generate_image.mjs \
335
335
 
336
336
  ## Refinement Workflow
337
337
 
338
- When the user asks to improve, polish, refine, or critique a deck, follow the practices in `{SKILL_PATH}/references/aesthetics.md` § Refinement Practices. The available refinement approaches are:
338
+ When the user asks to improve, polish, refine, or critique a deck, follow the practices in `{SKILL_PATH}/references/refinement.md`. The available refinement approaches are:
339
339
 
340
340
  | Request | Practice | What It Does |
341
341
  |---------|----------|-------------|
@@ -346,7 +346,7 @@ When the user asks to improve, polish, refine, or critique a deck, follow the pr
346
346
  | "tone it down" / "too busy" | **Quieter** | Reduce saturation, font weight, decorations. Refined, not boring. |
347
347
  | "add more color" / "too gray" | **Colorize** | Strategic color introduction — tinted neutrals, accent data, section coding |
348
348
 
349
- **Process**: Read the corresponding section in aesthetics.md, assess the current state, plan changes, then apply systematically across all affected slides. For deck-wide refinement, read all slides first (via manifest.json) to ensure consistent application.
349
+ **Process**: Read the corresponding section in refinement.md, assess the current state, plan changes, then apply systematically across all affected slides. For deck-wide refinement, read all slides first (via manifest.json) to ensure consistent application.
350
350
 
351
351
  ---
352
352
 
@@ -412,10 +412,10 @@ The script checks:
412
412
 
413
413
  ## Supporting Reference Documents
414
414
 
415
- For detailed guidance, read these files from the skill directory:
415
+ For detailed guidance, read these files from the skill directory on demand:
416
416
 
417
- - `{SKILL_PATH}/references/aesthetics.md` — **Design intelligence**: typography selection, OKLCH color, visual hierarchy, AI slop avoidance, and refinement practices (polish, critique, distill, bolder, quieter, colorize)
418
- - `{SKILL_PATH}/design_outline_template.md` — Full template for creating design outlines
419
- - `{SKILL_PATH}/style_reference.md` — Design system reference (colors, typography, spacing, visual patterns)
420
- - `{SKILL_PATH}/layout_patterns.md` — Common layout patterns with height calculations and examples
421
- - `{SKILL_PATH}/layout_check.js` — Overflow detection script for browser-based validation
417
+ - `{SKILL_PATH}/references/design-guide.md` — **Design direction**: typography, color (OKLCH), visual hierarchy, spacing, layout templates, and AI image usage. Read when creating themes or making design decisions.
418
+ - `{SKILL_PATH}/references/refinement.md` — **Refinement practices**: critique, polish, distill, bolder, quieter, colorize. Read when the user wants to improve a completed deck.
419
+ - `{SKILL_PATH}/references/design-outline.md` — Full template for creating design outlines. Read during Phase 1.
420
+ - `{SKILL_PATH}/references/layout-patterns.md` — Common layout patterns with height calculations and examples. Read when dealing with overflow or complex layouts.
421
+ - `{SKILL_PATH}/layout_check.js` — Overflow detection script for browser-based validation.
@@ -1,6 +1,6 @@
1
- # Presentation Aesthetics
1
+ # Slide Design Guide
2
2
 
3
- Design thinking for slide decks. These are tools for making intentional choices — not rules for a specific look. A cold minimalist deck, a loud maximalist pitch, a warm editorial narrative, and a stark brutalist manifesto can all be excellent. The goal is coherence and intentionality, not convergence on one aesthetic.
3
+ Design thinking and default values for slide decks. These are tools for making intentional choices — not rules for a specific look. A cold minimalist deck, a loud maximalist pitch, a warm editorial narrative, and a stark brutalist manifesto can all be excellent. The goal is coherence and intentionality, not convergence on one aesthetic.
4
4
 
5
5
  ---
6
6
 
@@ -42,14 +42,12 @@ These aren't bad in themselves — they're bad when they're the default rather t
42
42
 
43
43
  ---
44
44
 
45
- ## Typography for Presentations
45
+ ## Typography
46
46
 
47
47
  ### Choosing Fonts with Intention
48
48
 
49
49
  The question isn't "which font is best?" — it's "what does this deck need to communicate, and which font carries that tone?"
50
50
 
51
- Consider what a font signals:
52
-
53
51
  | Quality | Font Direction | Examples (Google Fonts) | Example Context |
54
52
  |---------|---------------|------------------------|----------------|
55
53
  | Authority, tradition | Serif, high-contrast | Playfair Display, Lora, Newsreader | Legal, finance, academic |
@@ -69,31 +67,41 @@ These are starting points, not a definitive list. Google Fonts has 1600+ options
69
67
 
70
68
  **CJK requirement**: Always include CJK system fonts (`"PingFang SC"`, `"Noto Sans CJK SC"`, `"Microsoft YaHei"`) before `sans-serif` in your font stack. Without them, Chinese/Japanese/Korean text will be invisible in exported PDFs.
71
69
 
72
- ### Hierarchy Through Scale
70
+ ### Default Font Stack
73
71
 
74
- The common mistake: too many font sizes that are too close together (24px, 22px, 20px, 18px). This creates muddy hierarchy where nothing stands out.
72
+ ```css
73
+ --font-sans: "Inter", "SF Pro Display", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, sans-serif;
74
+ --font-mono: "JetBrains Mono", "SF Mono", "Fira Code", monospace;
75
+ ```
75
76
 
76
- **Use fewer sizes with more contrast.** On a slide, you typically need only 3-4 sizes. The gap between title and body should feel decisive, not incremental.
77
+ ### Type Scale
77
78
 
78
- | Role | Range | Purpose |
79
- |------|-------|---------|
80
- | Title | 36-56px | One per slide, unmistakable primary |
81
- | Subtitle/Section | 24-32px | Structure and grouping |
82
- | Body | 18-24px | Content text, readable at distance |
83
- | Caption | 14-16px | Metadata, footnotes, sparingly |
79
+ Use fewer sizes with more contrast. The gap between title and body should feel decisive, not incremental.
84
80
 
85
- **Minimum readable size**: 18px for body text projected on screen. Anything smaller is decoration, not content.
81
+ | Element | Size | Weight | Line Height | Use |
82
+ |---------|------|--------|-------------|-----|
83
+ | Slide title (h1) | 48px (3rem) | 700 | 1.2 | Cover page main title |
84
+ | Page heading (h1) | 36px (2.25rem) | 700 | 1.2 | Content page title |
85
+ | Section header (h2) | 28px (1.75rem) | 600 | 1.3 | Subsections |
86
+ | Subheading (h3) | 22px (1.375rem) | 600 | 1.4 | Card headers, labels |
87
+ | Body text (p) | 20px (1.25rem) | 400 | 1.7 | Paragraphs, descriptions |
88
+ | List items (li) | 20px (1.25rem) | 400 | 1.8 | Bullet points |
89
+ | Caption/label | 14-16px | 500 | 1.5 | Tags, metadata, footnotes |
90
+ | Small text | 12-14px | 400 | 1.5 | Barely used — minimum readable |
86
91
 
87
92
  ### Typographic Details
88
93
 
94
+ - **Minimum body text**: 18px — anything smaller is hard to read on projected slides
95
+ - **Maximum title**: 56px — larger titles on cover pages only
89
96
  - **Weight contrast**: Use enough gap between heading and body weight that the difference is obvious, not subtle
90
- - **Letter spacing**: Tighter tracking on large headings often looks more polished; default tracking on body text is usually best
97
+ - **Letter spacing**: -0.02em for headings, default for body. Tighter tracking on large headings often looks more polished.
91
98
  - **Line height**: Tighter for headings (1.1-1.2), looser for body (1.5-1.8). Light text on dark backgrounds benefits from slightly more line height.
99
+ - **Font smoothing**: Always use `-webkit-font-smoothing: antialiased`
92
100
  - **OpenType features**: `font-variant-numeric: tabular-nums` makes numbers align in data slides. `font-variant-caps: all-small-caps` works for elegant labels when it fits the aesthetic.
93
101
 
94
102
  ---
95
103
 
96
- ## Color for Presentations
104
+ ## Color
97
105
 
98
106
  ### Color as Communication
99
107
 
@@ -128,21 +136,62 @@ Mood–hue associations as a starting intuition (not rules):
128
136
 
129
137
  **Key insight regardless of color space**: As colors approach white or black, reduce saturation. High saturation at extreme lightness looks garish.
130
138
 
131
- ### Neutral Colors
139
+ ### Default Palettes
132
140
 
133
- Neutrals (grays, near-whites, near-blacks) occupy the most area in most decks. Two valid approaches:
141
+ Sensible defaults when the user has no explicit color preferences. Adapt or replace entirely to match the deck's direction.
134
142
 
135
- 1. **Pure neutrals**: Clean, no-nonsense, lets content and accent colors do all the talking. Good for data-heavy or multi-brand contexts.
136
- 2. **Tinted neutrals**: Add a tiny hint of your brand hue (chroma ~0.01 in OKLCH). Creates subtle warmth or coolness that feels cohesive. Good for narrative or branded decks.
143
+ **Dark mode (default):**
144
+ ```css
145
+ :root {
146
+ --color-bg: #0f0f0f;
147
+ --color-fg: #e8e6df;
148
+ --color-primary: #6ea8fe; /* Blue accent */
149
+ --color-secondary: #a78bfa; /* Purple secondary */
150
+ --color-accent: #34d399; /* Green accent */
151
+ --color-muted: #6b7280; /* Gray for secondary text */
152
+ --color-surface: #1a1a1a; /* Card/container background */
153
+ --color-border: #2a2a2a; /* Subtle borders */
154
+ }
155
+ ```
137
156
 
138
- Neither is "better." Pure gray is a legitimate choice when neutrality IS the design intent. Tinted gray is a tool for when you want subconscious cohesion.
157
+ **Light mode:**
158
+ ```css
159
+ :root {
160
+ --color-bg: #ffffff;
161
+ --color-fg: #1e293b; /* Slate-800 */
162
+ --color-primary: #2563eb; /* Blue-600 */
163
+ --color-secondary: #64748b; /* Slate-500 */
164
+ --color-accent: #0ea5e9; /* Sky-500 */
165
+ --color-muted: #94a3b8; /* Slate-400 */
166
+ --color-surface: #f8fafc; /* Slate-50 */
167
+ --color-border: #e2e8f0; /* Slate-200 */
168
+ }
169
+ ```
139
170
 
140
171
  ### Color Proportion
141
172
 
142
173
  A useful mental model (not a rigid rule): most of the visual area should be calm (background, whitespace), a moderate portion carries the content (text, secondary elements), and a small portion draws attention (accent, key data).
143
174
 
175
+ | Role | Usage | Proportion |
176
+ |------|-------|-----------|
177
+ | Background | Slide background, large areas | 60-70% |
178
+ | Foreground | Primary text, headings | 20-25% |
179
+ | Primary | Accent elements, key highlights | 5-10% |
180
+ | Muted | Secondary text, captions, metadata | 5-10% |
181
+ | Surface | Cards, containers, code blocks | As needed |
182
+ | Border | Dividers, card borders | Minimal |
183
+
144
184
  The common mistake: using the accent color everywhere because it's "the brand color." Accent colors work because they're rare. The more you use them, the less power they have.
145
185
 
186
+ ### Neutral Colors
187
+
188
+ Neutrals (grays, near-whites, near-blacks) occupy the most area in most decks. Two valid approaches:
189
+
190
+ 1. **Pure neutrals**: Clean, no-nonsense, lets content and accent colors do all the talking. Good for data-heavy or multi-brand contexts.
191
+ 2. **Tinted neutrals**: Add a tiny hint of your brand hue (chroma ~0.01 in OKLCH). Creates subtle warmth or coolness that feels cohesive. Good for narrative or branded decks.
192
+
193
+ Neither is "better." Pure gray is a legitimate choice when neutrality IS the design intent. Tinted gray is a tool for when you want subconscious cohesion.
194
+
146
195
  ### Dark and Light Decks
147
196
 
148
197
  Dark and light aren't just color swaps — they have different physics:
@@ -165,7 +214,7 @@ These commonly fail regardless of aesthetic direction:
165
214
 
166
215
  ---
167
216
 
168
- ## Visual Hierarchy for Slides
217
+ ## Visual Hierarchy
169
218
 
170
219
  ### The Squint Test
171
220
 
@@ -222,73 +271,172 @@ On slides, whitespace is as important as content. A slide with generous margins
222
271
  - If a slide feels cramped, the answer is usually "split into two slides" not "make everything smaller"
223
272
  - Empty space is not wasted space — it directs attention to what remains
224
273
 
225
- {{#imageGenEnabled}}
226
274
  ---
227
275
 
228
- ## Using Generated Images
276
+ ## Spacing
229
277
 
230
- CSS and SVG handle geometric shapes, gradients, icons, and simple charts better than images — code is more controllable and resolution-independent. But some things code can't do well. That's where generated images become a real weapon.
278
+ ### Slide Padding
231
279
 
232
- ### The Finishing Touch, Not the Filler
280
+ ```css
281
+ --slide-padding: 64px; /* Default content page padding */
282
+ ```
233
283
 
234
- An image earns its place the same way a word does — not because there's empty space to fill, but because the slide genuinely needs it.
284
+ - **Cover pages**: 0px or custom (full-bleed backgrounds)
285
+ - **Content pages**: 64px all sides → 1152×592px available area (for 1280×720 canvas)
235
286
 
236
- **Worth generating**:
287
+ ### Gap Scale
237
288
 
238
- - **Mood-setting hero images on cover/divider slides.** A full-bleed background photo that matches the topic establishes atmosphere faster than any CSS gradient. A deck about ocean conservation with a single deep-sea light-and-shadow image puts the audience in the right headspace within the first second.
239
- - **Making abstract concepts tangible.** "Consistency in distributed systems" takes three paragraphs to explain in text. A carefully generated visual metaphor — a row of clocks all pointing to the same time — communicates it in one glance.
240
- - **Grounding data with reality.** A deck about user growth has numbers and charts, but a realistic scene — a crowded coffee shop where everyone is using your product — creates emotional impact that no bar chart can match.
241
- - **Textures and qualities that SVG can't reach.** Hand-drawn illustration styles, watercolor textures, photographic lighting, complex 3D renders — these are CSS and SVG's blind spots.
289
+ | Token | Size | Use |
290
+ |-------|------|-----|
291
+ | xs | 8px | Between related inline items |
292
+ | sm | 16px | Between list items, tight groups |
293
+ | md | 24px | Between content sections |
294
+ | lg | 32px | Between major blocks |
295
+ | xl | 48px | Between split columns, hero spacing |
242
296
 
243
- **Not worth generating**:
297
+ ### Margin Patterns
244
298
 
245
- - Purely decorative geometric patterns — CSS does this better and it's easier to tweak
246
- - An image on every single slide — this isn't a photo album. Data-heavy and process slides work fine with just typography and layout.
247
- - Generic stock-photo-style images — a person in a suit standing at a whiteboard adds nothing to any deck
299
+ - Between heading and first content: 16-24px
300
+ - Between content paragraphs: 12-16px
301
+ - Between cards in a grid: 16-24px
302
+ - Between major sections: 32-48px
248
303
 
249
- ### Image × CSS Integration
304
+ ---
250
305
 
251
- Generated images don't exist in isolation — they need CSS to blend into the slide's design language. Practical combinations:
306
+ ## Visual Elements
307
+
308
+ ### Cards
252
309
 
253
- **Gradient overlay for text readability.** Image as background, CSS gradient on top to control brightness and ensure text contrast.
254
310
  ```css
255
- .slide-hero {
256
- background: linear-gradient(to right, rgba(0,0,0,0.7) 40%, transparent), url('assets/hero.jpg');
257
- background-size: cover;
311
+ .card {
312
+ background: var(--color-surface);
313
+ border: 1px solid var(--color-border);
314
+ border-radius: 12px;
315
+ padding: 24px;
316
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1); /* optional */
258
317
  }
259
318
  ```
260
- Text goes on the dark left side; the image bleeds through on the right. Far more readable than text placed directly over an uncontrolled image.
261
319
 
262
- **Non-rectangular cropping.** `clip-path` or creative `border-radius` breaks the rectangle monotony. `object-fit: cover` + `object-position` controls the focal point.
320
+ ### Tags / Badges
321
+
263
322
  ```css
264
- .feature-image {
265
- clip-path: polygon(10% 0, 100% 0, 100% 100%, 0 100%);
266
- object-fit: cover;
267
- object-position: center 30%; /* keep the face in upper third */
323
+ .tag {
324
+ display: inline-block;
325
+ padding: 4px 12px;
326
+ border-radius: 6px;
327
+ font-size: 13px;
328
+ font-weight: 500;
329
+ background: var(--color-primary);
330
+ color: white;
268
331
  }
269
332
  ```
270
333
 
271
- **Blend modes for color unity.** `mix-blend-mode` and `filter` make any image harmonize with the slide's palette. A desaturated image + `multiply` blend mode + brand-colored background = highly unified visual.
334
+ ### Dividers
272
335
 
273
- **Subtle texture backgrounds.** Generate a texture (paper grain, noise, fabric) and use it as a `background-image` with low `opacity`. Gives flat-color backgrounds a tactile quality that CSS noise patterns can approximate but rarely match.
336
+ ```css
337
+ .divider {
338
+ height: 1px;
339
+ background: var(--color-border);
340
+ margin: 24px 0;
341
+ }
342
+ ```
274
343
 
275
- ### Style Coherence Across a Deck
344
+ ### Icons
276
345
 
277
- When multiple generated images appear in the same deck, they must look like they belong to the same world:
346
+ - Use **Lucide icons** (CDN) or **inline SVG** for consistency
347
+ - Icon size: 20-24px for inline, 32-48px for feature icons
348
+ - **Never use emoji** for professional presentations
349
+ - Color icons with `var(--color-primary)` or `var(--color-muted)`
278
350
 
279
- - **Consistent style descriptors in prompts**: If the first image uses "flat illustration, muted earth tones, thick outlines," every subsequent image should carry the same style language.
280
- - **Color temperature consistency**: A warm-toned deck with one cold-toned image looks like a collage, not a design.
281
- - **Don't mix rendering styles**: Photorealistic and illustration shouldn't coexist in the same deck unless the contrast itself is the design intent.
351
+ ### Charts (ECharts)
282
352
 
283
- ### Restraint
353
+ - Initialize with explicit width/height matching the container
354
+ - Use the deck's color palette for chart colors
355
+ - Include clear axis labels and legends
356
+ - Prefer bar/line charts for trends, pie/donut for composition
357
+ - Add a `<div id="chart-{n}" style="width: 100%; height: Xpx;"></div>` container
358
+ - Initialize with `<script>` at the end of the slide fragment
284
359
 
285
- Image generation is a powerful tool, but overuse turns a deck into an AI art gallery. Some rules of thumb:
360
+ ---
286
361
 
287
- - **In most decks, the majority of slides don't need images.** Data slides, process slides, comparison slides — typography and charts carry these.
288
- - **One great image beats three filler images.** When you think "an image here would look nice," ask: would removing it make the slide communicate worse? If not, skip it.
289
- - **Fewer images = more weight per image.** In a 20-slide deck with 3 images, every image gets remembered. With 20 images, none of them do.
362
+ ## Layout Templates
290
363
 
291
- {{/imageGenEnabled}}
364
+ ### Cover Page
365
+
366
+ Full-canvas, centered, minimal:
367
+ ```
368
+ ┌──────────────────────────────────────────┐
369
+ │ │
370
+ │ [Tag/Label] │
371
+ │ │
372
+ │ Main Title (48px) │
373
+ │ │
374
+ │ Subtitle (20px, muted) │
375
+ │ │
376
+ │ │
377
+ └──────────────────────────────────────────┘
378
+ ```
379
+
380
+ ### Single Column Content
381
+
382
+ Standard for text-heavy slides:
383
+ ```
384
+ ┌──────────────────────────────────────────┐
385
+ │ Page Heading (h2) │
386
+ │ │
387
+ │ • Bullet point one │
388
+ │ • Bullet point two │
389
+ │ • Bullet point three │
390
+ │ • Bullet point four │
391
+ │ │
392
+ │ │
393
+ └──────────────────────────────────────────┘
394
+ ```
395
+
396
+ ### Two-Column Split
397
+
398
+ For comparison, feature + detail, or text + image:
399
+ ```
400
+ ┌──────────────────────────────────────────┐
401
+ │ Page Heading (h2) │
402
+ │ │
403
+ │ ┌──────────────┐ ┌──────────────┐ │
404
+ │ │ Left Column │ │ Right Column │ │
405
+ │ │ Text/list │ │ Image/chart │ │
406
+ │ │ │ │ │ │
407
+ │ └──────────────┘ └──────────────┘ │
408
+ │ │
409
+ └──────────────────────────────────────────┘
410
+ ```
411
+
412
+ ### Card Grid
413
+
414
+ For 3-4 equal items (features, team, metrics):
415
+ ```
416
+ ┌──────────────────────────────────────────┐
417
+ │ Page Heading (h2) │
418
+ │ │
419
+ │ ┌──────┐ ┌──────┐ ┌──────┐ │
420
+ │ │ Card │ │ Card │ │ Card │ │
421
+ │ │ 1 │ │ 2 │ │ 3 │ │
422
+ │ └──────┘ └──────┘ └──────┘ │
423
+ │ │
424
+ └──────────────────────────────────────────┘
425
+ ```
426
+
427
+ ### Full Visual
428
+
429
+ Image or chart dominates, minimal text:
430
+ ```
431
+ ┌──────────────────────────────────────────┐
432
+ │ ┌──────────────────────────────────┐ │
433
+ │ │ │ │
434
+ │ │ Large Image/Chart │ │
435
+ │ │ │ │
436
+ │ └──────────────────────────────────┘ │
437
+ │ Caption or source (small, muted) │
438
+ └──────────────────────────────────────────┘
439
+ ```
292
440
 
293
441
  ---
294
442
 
@@ -316,106 +464,70 @@ Every word on a slide should earn its place. Presentations are a spoken medium
316
464
  - Round numbers for impact: "~2 million users" beats "1,987,432 users"
317
465
  - Highlight the one number that matters — if everything is highlighted, nothing is
318
466
 
467
+ {{#imageGenEnabled}}
319
468
  ---
320
469
 
321
- ## Refinement Practices
322
-
323
- When a deck is functionally complete and the user wants to improve its quality, apply these practices. They're ordered from broad to specific — start with critique, then refine.
324
-
325
- ### Critique: Evaluate Design Effectiveness
326
-
327
- Step back and evaluate the deck as a whole. Think like a design director giving feedback.
328
-
329
- **Process**:
330
- 1. **Intentionality check** (first): Can you articulate the design direction? Does every major choice (color, font, layout, tone) serve that direction? Or does the deck feel like a collection of defaults?
331
- 2. **Visual hierarchy**: On each slide, is it immediately obvious what matters most? Can you spot the key point in 2 seconds?
332
- 3. **Consistency**: Do all slides feel like they belong to the same deck? Same fonts, colors, spacing patterns?
333
- 4. **Composition**: Does each slide feel balanced? Is whitespace intentional or leftover?
334
- 5. **Emotional resonance**: What emotion does this deck evoke? Is that the right one for the audience and content?
335
- 6. **Flow**: Does the deck tell a story? Does the visual energy build, peak, and resolve?
336
-
337
- **Output**: Identify the top 3-5 issues, ordered by impact. For each: what's wrong, why it matters, and how to fix it.
338
-
339
- ### Polish: The Final Quality Pass
340
-
341
- Fix the details that separate good from great. Only do this after the deck is content-complete.
342
-
343
- **Checklist**:
344
- - [ ] **Alignment**: All elements snap to a consistent grid. No random offsets.
345
- - [ ] **Spacing consistency**: All gaps follow the spacing scale. No arbitrary values.
346
- - [ ] **Typography hierarchy**: Same-role text uses same size/weight across all slides
347
- - [ ] **Widows**: No single words sitting alone on the last line of a heading or bullet
348
- - [ ] **Color token usage**: No hard-coded colors — everything uses CSS custom properties
349
- - [ ] **Icon consistency**: All icons from the same family, same size, same stroke weight
350
- - [ ] **Image treatment**: Consistent border-radius, shadow, and sizing for images across slides
351
- - [ ] **Capitalization**: Consistent across all headings, labels, and bullets
352
- - [ ] **Content fit**: Re-verify no slide overflows (mental height calculation or layout_check.js)
353
-
354
- **Optical adjustments**:
355
- - Text aligned to padding may look indented due to letterform whitespace — adjust visually if needed
356
- - Icons next to text may need slight vertical offset for optical alignment
357
- - Centered text groups may need slight upward offset to feel visually centered (mathematical center ≠ optical center)
358
-
359
- ### Distill: Simplify Overcrowded Slides
470
+ ## Using Generated Images
360
471
 
361
- Strip unnecessary complexity to reveal what actually matters.
472
+ CSS and SVG handle geometric shapes, gradients, icons, and simple charts better than images — code is more controllable and resolution-independent. But some things code can't do well. That's where generated images become a real weapon.
362
473
 
363
- **When to apply**: A slide feels cramped, has too many elements competing for attention, or tries to communicate multiple ideas at once.
474
+ ### The Finishing Touch, Not the Filler
364
475
 
365
- **Process**:
366
- 1. **Identify the ONE key message** of the slide. If you can't, it needs splitting.
367
- 2. **Remove elements** that don't serve the message — ornamental shapes, redundant icons, background patterns that add noise
368
- 3. **Reduce variety** — fewer colors, fewer font sizes, fewer visual treatments per slide
369
- 4. **Flatten structure** — remove wrapper elements that don't create meaningful grouping
370
- 5. **Shorten text** — cut every line in half. Then do it again.
371
- 6. **Add space** — let what remains breathe
476
+ An image earns its place the same way a word does — not because there's empty space to fill, but because the slide genuinely needs it.
372
477
 
373
- **The test**: Cover half the slide with your hand. Does the other half still communicate the message? If not, the slide is too spread out. If yes, the covered half may be unnecessary.
478
+ **Worth generating**:
374
479
 
375
- ### Bolder: Amplify Visual Impact
480
+ - **Mood-setting hero images on cover/divider slides.** A full-bleed background photo that matches the topic establishes atmosphere faster than any CSS gradient. A deck about ocean conservation with a single deep-sea light-and-shadow image puts the audience in the right headspace within the first second.
481
+ - **Making abstract concepts tangible.** "Consistency in distributed systems" takes three paragraphs to explain in text. A carefully generated visual metaphor — a row of clocks all pointing to the same time — communicates it in one glance.
482
+ - **Grounding data with reality.** A deck about user growth has numbers and charts, but a realistic scene — a crowded coffee shop where everyone is using your product — creates emotional impact that no bar chart can match.
483
+ - **Textures and qualities that SVG can't reach.** Hand-drawn illustration styles, watercolor textures, photographic lighting, complex 3D renders — these are CSS and SVG's blind spots.
376
484
 
377
- Make a flat or forgettable deck more visually memorable.
485
+ **Not worth generating**:
378
486
 
379
- **When to apply**: The deck is technically correct but feels generic, safe, or like every other deck on the same topic.
487
+ - Purely decorative geometric patterns CSS does this better and it's easier to tweak
488
+ - An image on every single slide — this isn't a photo album. Data-heavy and process slides work fine with just typography and layout.
489
+ - Generic stock-photo-style images — a person in a suit standing at a whiteboard adds nothing to any deck
380
490
 
381
- **Think about**:
382
- - **Scale contrast**: Is the difference between heading and body dramatic enough to feel intentional?
383
- - **Weight contrast**: Are you using enough range in font weight to create clear levels?
384
- - **Color confidence**: Is the palette committed to something, or hedging with muted everything?
385
- - **Composition**: Is every slide centered and symmetrical? Could asymmetry or unexpected proportions (70/30, 80/20 splits) create more visual interest?
386
- - **Negative space**: Could dramatic whitespace — leaving 30-40% of a slide empty — make the content feel more important, not less?
387
- - **Full-bleed**: Could hero images or colored backgrounds extend to the edges for impact?
491
+ ### Image × CSS Integration
388
492
 
389
- **The key question**: Does this deck look like it has an opinion? Or could it be about anything?
493
+ Generated images don't exist in isolation they need CSS to blend into the slide's design language. Practical combinations:
390
494
 
391
- ### Quieter: Refine and Restrain
495
+ **Gradient overlay for text readability.** Image as background, CSS gradient on top to control brightness and ensure text contrast.
496
+ ```css
497
+ .slide-hero {
498
+ background: linear-gradient(to right, rgba(0,0,0,0.7) 40%, transparent), url('assets/hero.jpg');
499
+ background-size: cover;
500
+ }
501
+ ```
502
+ Text goes on the dark left side; the image bleeds through on the right. Far more readable than text placed directly over an uncontrolled image.
392
503
 
393
- Tone down overly aggressive or visually noisy decks.
504
+ **Non-rectangular cropping.** `clip-path` or creative `border-radius` breaks the rectangle monotony. `object-fit: cover` + `object-position` controls the focal point.
505
+ ```css
506
+ .feature-image {
507
+ clip-path: polygon(10% 0, 100% 0, 100% 100%, 0 100%);
508
+ object-fit: cover;
509
+ object-position: center 30%; /* keep the face in upper third */
510
+ }
511
+ ```
394
512
 
395
- **When to apply**: The deck is overstimulating too many colors, too much contrast, too many effects, elements competing for attention.
513
+ **Blend modes for color unity.** `mix-blend-mode` and `filter` make any image harmonize with the slide's palette. A desaturated image + `multiply` blend mode + brand-colored background = highly unified visual.
396
514
 
397
- **Think about**:
398
- - **Saturation**: Could shifting to 70-85% of current saturation feel more sophisticated?
399
- - **Weight**: Could lighter heading weights create elegance instead of force?
400
- - **Decoration**: Is every gradient, shadow, and pattern earning its place? Remove those that don't.
401
- - **Space**: Could more whitespace reduce visual tension?
402
- - **Color count**: Could fewer colors, used more intentionally, have more impact?
515
+ **Subtle texture backgrounds.** Generate a texture (paper grain, noise, fabric) and use it as a `background-image` with low `opacity`. Gives flat-color backgrounds a tactile quality that CSS noise patterns can approximate but rarely match.
403
516
 
404
- **The key question**: Does the design feel confident or anxious? Quiet design doesn't shout — it doesn't need to.
517
+ ### Style Coherence Across a Deck
405
518
 
406
- **Watch out**: Don't strip so far that the deck loses personality. Quiet boring. Refined generic. Hierarchy still matters — some things should stand out.
519
+ When multiple generated images appear in the same deck, they must look like they belong to the same world:
407
520
 
408
- ### Colorize: Add Strategic Color
521
+ - **Consistent style descriptors in prompts**: If the first image uses "flat illustration, muted earth tones, thick outlines," every subsequent image should carry the same style language.
522
+ - **Color temperature consistency**: A warm-toned deck with one cold-toned image looks like a collage, not a design.
523
+ - **Don't mix rendering styles**: Photorealistic and illustration shouldn't coexist in the same deck unless the contrast itself is the design intent.
409
524
 
410
- Introduce color to monochromatic or visually flat decks.
525
+ ### Restraint
411
526
 
412
- **When to apply**: The deck feels too gray, too cold, or visually monotonous.
527
+ Image generation is a powerful tool, but overuse turns a deck into an AI art gallery. Some rules of thumb:
413
528
 
414
- **Think about**:
415
- - **Purpose**: What should color *do* here? Draw attention to key data? Create section identity? Add warmth? Reinforce a brand?
416
- - **Where, not how much**: Coloring the one number or word that carries the slide's message is worth more than coloring every heading
417
- - **Backgrounds**: Subtle background tints can separate sections or add warmth without adding noise
418
- - **Chart and data colors**: Should match the deck's palette, not the charting library's defaults
419
- - **Neutral warmth**: Even without accent colors, shifting from pure gray to warm or cool tinted neutrals can make a deck feel less sterile
529
+ - **In most decks, the majority of slides don't need images.** Data slides, process slides, comparison slides — typography and charts carry these.
530
+ - **One great image beats three filler images.** When you think "an image here would look nice," ask: would removing it make the slide communicate worse? If not, skip it.
531
+ - **Fewer images = more weight per image.** In a 20-slide deck with 3 images, every image gets remembered. With 20 images, none of them do.
420
532
 
421
- **The key question**: Is the lack of color a deliberate choice (and working well), or is it an oversight that's making the deck feel lifeless?
533
+ {{/imageGenEnabled}}
@@ -0,0 +1,113 @@
1
+ # Refinement Practices
2
+
3
+ When a deck is functionally complete and the user wants to improve its quality, apply these practices. They're ordered from broad to specific — start with critique, then refine.
4
+
5
+ ---
6
+
7
+ ## Critique: Evaluate Design Effectiveness
8
+
9
+ Step back and evaluate the deck as a whole. Think like a design director giving feedback.
10
+
11
+ **Process**:
12
+ 1. **Intentionality check** (first): Can you articulate the design direction? Does every major choice (color, font, layout, tone) serve that direction? Or does the deck feel like a collection of defaults?
13
+ 2. **Visual hierarchy**: On each slide, is it immediately obvious what matters most? Can you spot the key point in 2 seconds?
14
+ 3. **Consistency**: Do all slides feel like they belong to the same deck? Same fonts, colors, spacing patterns?
15
+ 4. **Composition**: Does each slide feel balanced? Is whitespace intentional or leftover?
16
+ 5. **Emotional resonance**: What emotion does this deck evoke? Is that the right one for the audience and content?
17
+ 6. **Flow**: Does the deck tell a story? Does the visual energy build, peak, and resolve?
18
+
19
+ **Output**: Identify the top 3-5 issues, ordered by impact. For each: what's wrong, why it matters, and how to fix it.
20
+
21
+ ---
22
+
23
+ ## Polish: The Final Quality Pass
24
+
25
+ Fix the details that separate good from great. Only do this after the deck is content-complete.
26
+
27
+ **Checklist**:
28
+ - [ ] **Alignment**: All elements snap to a consistent grid. No random offsets.
29
+ - [ ] **Spacing consistency**: All gaps follow the spacing scale. No arbitrary values.
30
+ - [ ] **Typography hierarchy**: Same-role text uses same size/weight across all slides
31
+ - [ ] **Widows**: No single words sitting alone on the last line of a heading or bullet
32
+ - [ ] **Color token usage**: No hard-coded colors — everything uses CSS custom properties
33
+ - [ ] **Icon consistency**: All icons from the same family, same size, same stroke weight
34
+ - [ ] **Image treatment**: Consistent border-radius, shadow, and sizing for images across slides
35
+ - [ ] **Capitalization**: Consistent across all headings, labels, and bullets
36
+ - [ ] **Content fit**: Re-verify no slide overflows (mental height calculation or layout_check.js)
37
+
38
+ **Optical adjustments**:
39
+ - Text aligned to padding may look indented due to letterform whitespace — adjust visually if needed
40
+ - Icons next to text may need slight vertical offset for optical alignment
41
+ - Centered text groups may need slight upward offset to feel visually centered (mathematical center ≠ optical center)
42
+
43
+ ---
44
+
45
+ ## Distill: Simplify Overcrowded Slides
46
+
47
+ Strip unnecessary complexity to reveal what actually matters.
48
+
49
+ **When to apply**: A slide feels cramped, has too many elements competing for attention, or tries to communicate multiple ideas at once.
50
+
51
+ **Process**:
52
+ 1. **Identify the ONE key message** of the slide. If you can't, it needs splitting.
53
+ 2. **Remove elements** that don't serve the message — ornamental shapes, redundant icons, background patterns that add noise
54
+ 3. **Reduce variety** — fewer colors, fewer font sizes, fewer visual treatments per slide
55
+ 4. **Flatten structure** — remove wrapper elements that don't create meaningful grouping
56
+ 5. **Shorten text** — cut every line in half. Then do it again.
57
+ 6. **Add space** — let what remains breathe
58
+
59
+ **The test**: Cover half the slide with your hand. Does the other half still communicate the message? If not, the slide is too spread out. If yes, the covered half may be unnecessary.
60
+
61
+ ---
62
+
63
+ ## Bolder: Amplify Visual Impact
64
+
65
+ Make a flat or forgettable deck more visually memorable.
66
+
67
+ **When to apply**: The deck is technically correct but feels generic, safe, or like every other deck on the same topic.
68
+
69
+ **Think about**:
70
+ - **Scale contrast**: Is the difference between heading and body dramatic enough to feel intentional?
71
+ - **Weight contrast**: Are you using enough range in font weight to create clear levels?
72
+ - **Color confidence**: Is the palette committed to something, or hedging with muted everything?
73
+ - **Composition**: Is every slide centered and symmetrical? Could asymmetry or unexpected proportions (70/30, 80/20 splits) create more visual interest?
74
+ - **Negative space**: Could dramatic whitespace — leaving 30-40% of a slide empty — make the content feel more important, not less?
75
+ - **Full-bleed**: Could hero images or colored backgrounds extend to the edges for impact?
76
+
77
+ **The key question**: Does this deck look like it has an opinion? Or could it be about anything?
78
+
79
+ ---
80
+
81
+ ## Quieter: Refine and Restrain
82
+
83
+ Tone down overly aggressive or visually noisy decks.
84
+
85
+ **When to apply**: The deck is overstimulating — too many colors, too much contrast, too many effects, elements competing for attention.
86
+
87
+ **Think about**:
88
+ - **Saturation**: Could shifting to 70-85% of current saturation feel more sophisticated?
89
+ - **Weight**: Could lighter heading weights create elegance instead of force?
90
+ - **Decoration**: Is every gradient, shadow, and pattern earning its place? Remove those that don't.
91
+ - **Space**: Could more whitespace reduce visual tension?
92
+ - **Color count**: Could fewer colors, used more intentionally, have more impact?
93
+
94
+ **The key question**: Does the design feel confident or anxious? Quiet design doesn't shout — it doesn't need to.
95
+
96
+ **Watch out**: Don't strip so far that the deck loses personality. Quiet ≠ boring. Refined ≠ generic. Hierarchy still matters — some things should stand out.
97
+
98
+ ---
99
+
100
+ ## Colorize: Add Strategic Color
101
+
102
+ Introduce color to monochromatic or visually flat decks.
103
+
104
+ **When to apply**: The deck feels too gray, too cold, or visually monotonous.
105
+
106
+ **Think about**:
107
+ - **Purpose**: What should color *do* here? Draw attention to key data? Create section identity? Add warmth? Reinforce a brand?
108
+ - **Where, not how much**: Coloring the one number or word that carries the slide's message is worth more than coloring every heading
109
+ - **Backgrounds**: Subtle background tints can separate sections or add warmth without adding noise
110
+ - **Chart and data colors**: Should match the deck's palette, not the charting library's defaults
111
+ - **Neutral warmth**: Even without accent colors, shifting from pure gray to warm or cool tinted neutrals can make a deck feel less sterile
112
+
113
+ **The key question**: Is the lack of color a deliberate choice (and working well), or is it an oversight that's making the deck feel lifeless?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pneuma-skills",
3
- "version": "2.4.9",
3
+ "version": "2.4.10",
4
4
  "type": "module",
5
5
  "description": "Co-creation infrastructure for humans and code agents — visual environment, skills, continuous learning, and distribution.",
6
6
  "license": "MIT",
@@ -1,267 +0,0 @@
1
- # Style Reference — Slide Design System
2
-
3
- Default design system for Pneuma Slide Mode presentations. Use these conventions when the user has no explicit style preferences.
4
-
5
- > **For aesthetic principles** — font selection philosophy, OKLCH color theory, visual hierarchy techniques, and refinement practices — see `{SKILL_PATH}/references/aesthetics.md`.
6
-
7
- ---
8
-
9
- ## Default Design Philosophy
10
-
11
- **Intentional and coherent.** The default values below are a starting point, not a destination. Adapt them to match the deck's purpose, audience, and personality.
12
-
13
- - Generous whitespace over dense layouts
14
- - Clear visual hierarchy via multiple dimensions — size, weight, color, space (see aesthetics.md § Visual Hierarchy)
15
- - Consistent spacing scale throughout
16
- - Every visual choice should be deliberate (see aesthetics.md § Design Direction)
17
-
18
- ---
19
-
20
- ## Color Palettes
21
-
22
- ### Dark Mode (Default)
23
-
24
- These are sensible defaults. See aesthetics.md § Color for guidance on building palettes intentionally — including when to use OKLCH, how to handle neutrals, and dark vs light considerations.
25
-
26
- ```css
27
- :root {
28
- --color-bg: #0f0f0f;
29
- --color-fg: #e8e6df;
30
- --color-primary: #6ea8fe; /* Blue accent */
31
- --color-secondary: #a78bfa; /* Purple secondary */
32
- --color-accent: #34d399; /* Green accent */
33
- --color-muted: #6b7280; /* Gray for secondary text */
34
- --color-surface: #1a1a1a; /* Card/container background */
35
- --color-border: #2a2a2a; /* Subtle borders */
36
- }
37
- ```
38
-
39
- ### Light Mode
40
-
41
- ```css
42
- :root {
43
- --color-bg: #ffffff;
44
- --color-fg: #1e293b; /* Slate-800 */
45
- --color-primary: #2563eb; /* Blue-600 */
46
- --color-secondary: #64748b; /* Slate-500 */
47
- --color-accent: #0ea5e9; /* Sky-500 */
48
- --color-muted: #94a3b8; /* Slate-400 */
49
- --color-surface: #f8fafc; /* Slate-50 */
50
- --color-border: #e2e8f0; /* Slate-200 */
51
- }
52
- ```
53
-
54
- ### Color Usage Rules
55
-
56
- | Role | Usage | Proportion |
57
- |------|-------|-----------|
58
- | Background | Slide background, large areas | 60-70% |
59
- | Foreground | Primary text, headings | 20-25% |
60
- | Primary | Accent elements, links, key highlights | 5-10% |
61
- | Muted | Secondary text, captions, metadata | 5-10% |
62
- | Surface | Cards, containers, code blocks | As needed |
63
- | Border | Dividers, card borders | Minimal |
64
-
65
- ---
66
-
67
- ## Typography
68
-
69
- ### Font Stack
70
-
71
- The default stack below is a safe starting point. See aesthetics.md § Typography for guidance on choosing fonts that match the deck's specific character.
72
-
73
- ```css
74
- --font-sans: "Inter", "SF Pro Display", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, sans-serif;
75
- --font-mono: "JetBrains Mono", "SF Mono", "Fira Code", monospace;
76
- ```
77
-
78
- **CJK support**: Always include CJK system fonts (`"PingFang SC"` for macOS, `"Noto Sans CJK SC"` for Linux, `"Microsoft YaHei"` for Windows) **before** generic families (`sans-serif`). Without them, Chrome's print renderer cannot fall back to CJK glyphs and Chinese/Japanese/Korean text will be invisible in exported PDFs.
79
-
80
- ### Size Scale
81
-
82
- | Element | Size | Weight | Line Height | Use |
83
- |---------|------|--------|-------------|-----|
84
- | Slide title (h1) | 48px (3rem) | 700 | 1.2 | Cover page main title |
85
- | Page heading (h1) | 36px (2.25rem) | 700 | 1.2 | Content page title |
86
- | Section header (h2) | 28px (1.75rem) | 600 | 1.3 | Subsections |
87
- | Subheading (h3) | 22px (1.375rem) | 600 | 1.4 | Card headers, labels |
88
- | Body text (p) | 20px (1.25rem) | 400 | 1.7 | Paragraphs, descriptions |
89
- | List items (li) | 20px (1.25rem) | 400 | 1.8 | Bullet points |
90
- | Caption/label | 14-16px | 500 | 1.5 | Tags, metadata, footnotes |
91
- | Small text | 12-14px | 400 | 1.5 | Barely used — minimum readable |
92
-
93
- ### Typography Rules
94
-
95
- - **Minimum body text**: 18px — anything smaller is hard to read on projected slides
96
- - **Maximum title**: 56px — larger titles on cover pages only
97
- - **Letter spacing**: -0.02em for headings, default for body
98
- - **Font smoothing**: Always use `-webkit-font-smoothing: antialiased`
99
-
100
- ---
101
-
102
- ## Spacing System
103
-
104
- ### Slide Padding
105
-
106
- ```css
107
- --slide-padding: 64px; /* Default content page padding */
108
- ```
109
-
110
- - **Cover pages**: 0px or custom (full-bleed backgrounds)
111
- - **Content pages**: 64px all sides → 1152×592px available area (for 1280×720 canvas)
112
-
113
- ### Gap Scale
114
-
115
- | Token | Size | Use |
116
- |-------|------|-----|
117
- | xs | 8px | Between related inline items |
118
- | sm | 16px | Between list items, tight groups |
119
- | md | 24px | Between content sections |
120
- | lg | 32px | Between major blocks |
121
- | xl | 48px | Between split columns, hero spacing |
122
-
123
- ### Margin Patterns
124
-
125
- - Between heading and first content: 16-24px
126
- - Between content paragraphs: 12-16px
127
- - Between cards in a grid: 16-24px
128
- - Between major sections: 32-48px
129
-
130
- ---
131
-
132
- ## Visual Elements
133
-
134
- ### Cards
135
-
136
- ```css
137
- .card {
138
- background: var(--color-surface);
139
- border: 1px solid var(--color-border);
140
- border-radius: 12px; /* rounded-lg */
141
- padding: 24px;
142
- /* Optional shadow for depth: */
143
- box-shadow: 0 1px 3px rgba(0,0,0,0.1);
144
- }
145
- ```
146
-
147
- ### Tags / Badges
148
-
149
- ```css
150
- .tag {
151
- display: inline-block;
152
- padding: 4px 12px;
153
- border-radius: 6px; /* rounded-md */
154
- font-size: 13px;
155
- font-weight: 500;
156
- background: var(--color-primary);
157
- color: white;
158
- }
159
- ```
160
-
161
- ### Dividers
162
-
163
- ```css
164
- .divider {
165
- height: 1px;
166
- background: var(--color-border);
167
- margin: 24px 0;
168
- }
169
- ```
170
-
171
- ### Icon Usage
172
-
173
- - Use **Lucide icons** (CDN) or **inline SVG** for consistency
174
- - Icon size: 20-24px for inline, 32-48px for feature icons
175
- - **Never use emoji** for professional presentations
176
- - Color icons with `var(--color-primary)` or `var(--color-muted)`
177
-
178
- ### Chart Guidelines (ECharts)
179
-
180
- When including data visualizations:
181
- - Initialize with explicit width/height matching the container
182
- - Use the deck's color palette for chart colors
183
- - Include clear axis labels and legends
184
- - Prefer bar/line charts for trends, pie/donut for composition
185
- - Add a `<div id="chart-{n}" style="width: 100%; height: Xpx;"></div>` container
186
- - Initialize with `<script>` at the end of the slide fragment
187
-
188
- ---
189
-
190
- ## Layout Templates
191
-
192
- ### Cover Page
193
-
194
- Full-canvas, centered, minimal:
195
- ```
196
- ┌──────────────────────────────────────────┐
197
- │ │
198
- │ [Tag/Label] │
199
- │ │
200
- │ Main Title (48px) │
201
- │ │
202
- │ Subtitle (20px, muted) │
203
- │ │
204
- │ │
205
- └──────────────────────────────────────────┘
206
- ```
207
-
208
- ### Single Column Content
209
-
210
- Standard for text-heavy slides:
211
- ```
212
- ┌──────────────────────────────────────────┐
213
- │ Page Heading (h2) │
214
- │ │
215
- │ • Bullet point one │
216
- │ • Bullet point two │
217
- │ • Bullet point three │
218
- │ • Bullet point four │
219
- │ │
220
- │ │
221
- └──────────────────────────────────────────┘
222
- ```
223
-
224
- ### Two-Column Split
225
-
226
- For comparison, feature + detail, or text + image:
227
- ```
228
- ┌──────────────────────────────────────────┐
229
- │ Page Heading (h2) │
230
- │ │
231
- │ ┌──────────────┐ ┌──────────────┐ │
232
- │ │ Left Column │ │ Right Column │ │
233
- │ │ Text/list │ │ Image/chart │ │
234
- │ │ │ │ │ │
235
- │ └──────────────┘ └──────────────┘ │
236
- │ │
237
- └──────────────────────────────────────────┘
238
- ```
239
-
240
- ### Card Grid
241
-
242
- For 3-4 equal items (features, team, metrics):
243
- ```
244
- ┌──────────────────────────────────────────┐
245
- │ Page Heading (h2) │
246
- │ │
247
- │ ┌──────┐ ┌──────┐ ┌──────┐ │
248
- │ │ Card │ │ Card │ │ Card │ │
249
- │ │ 1 │ │ 2 │ │ 3 │ │
250
- │ └──────┘ └──────┘ └──────┘ │
251
- │ │
252
- └──────────────────────────────────────────┘
253
- ```
254
-
255
- ### Full Visual
256
-
257
- Image or chart dominates, minimal text:
258
- ```
259
- ┌──────────────────────────────────────────┐
260
- │ ┌──────────────────────────────────┐ │
261
- │ │ │ │
262
- │ │ Large Image/Chart │ │
263
- │ │ │ │
264
- │ └──────────────────────────────────┘ │
265
- │ Caption or source (small, muted) │
266
- └──────────────────────────────────────────┘
267
- ```