pneuma-skills 2.4.8 → 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.
- package/modes/slide/skill/SKILL.md +34 -13
- package/modes/slide/skill/references/design-guide.md +533 -0
- package/modes/slide/skill/references/refinement.md +113 -0
- package/package.json +1 -1
- package/modes/slide/skill/style_reference.md +0 -261
- /package/modes/slide/skill/{design_outline_template.md → references/design-outline.md} +0 -0
- /package/modes/slide/skill/{layout_patterns.md → references/layout-patterns.md} +0 -0
|
@@ -16,10 +16,11 @@ 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. **
|
|
20
|
-
3. **
|
|
21
|
-
4. **
|
|
22
|
-
5. **
|
|
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
|
+
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
|
+
4. **Content fits canvas**: Every slide is {{slideWidth}}×{{slideHeight}}px — unlike web pages, slides have no scroll, so overflow content is simply invisible
|
|
22
|
+
5. **Precision over speed**: Get each slide right in one pass; avoid iterative "let me try again" loops
|
|
23
|
+
6. **Act, don't ask**: For straightforward edits, just do them. Only ask for clarification on ambiguous requests
|
|
23
24
|
|
|
24
25
|
## File Architecture
|
|
25
26
|
|
|
@@ -96,15 +97,15 @@ Before writing any slide HTML, create `design_outline.md`:
|
|
|
96
97
|
|
|
97
98
|
1. **Understand the brief**: What is the presentation about? Who is the audience? What tone?
|
|
98
99
|
2. **Gather information**: Read any source files the user provides (documents, data, links)
|
|
99
|
-
3. **Write the outline**: Create `design_outline.md` — reference `{SKILL_PATH}/
|
|
100
|
+
3. **Write the outline**: Create `design_outline.md` — reference `{SKILL_PATH}/references/design-outline.md` for the full template structure
|
|
100
101
|
|
|
101
102
|
4. **Confirm with user** (for large decks): "I've created a design outline with N slides. Ready to generate?"
|
|
102
103
|
|
|
103
104
|
### Phase 2: Theme Setup
|
|
104
105
|
|
|
105
|
-
If the user's workspace has no `theme.css`, create one.
|
|
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:
|
|
106
107
|
- Color palette (light/dark mode, primary/accent colors)
|
|
107
|
-
- Typography (heading and body fonts) — **must include CJK system fonts** in `--font-sans` for multilingual support
|
|
108
|
+
- Typography (heading and body fonts) — **must include CJK system fonts** in `--font-sans` for multilingual support
|
|
108
109
|
- Spacing scale
|
|
109
110
|
|
|
110
111
|
### Phase 3: Scaffold All Slides
|
|
@@ -187,7 +188,7 @@ The viewer's export and print features capture a single-frame snapshot of each s
|
|
|
187
188
|
|
|
188
189
|
### Height Calculation Rules
|
|
189
190
|
|
|
190
|
-
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}/
|
|
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:
|
|
191
192
|
|
|
192
193
|
1. **Text height** = `font-size × line-height × number-of-lines`
|
|
193
194
|
- Example: 24px × 1.5 × 3 lines = 108px
|
|
@@ -213,6 +214,8 @@ Overflow is the #1 quality issue because slides are fixed-viewport — there's n
|
|
|
213
214
|
- **Alignment**: Consistent alignment within and across slides
|
|
214
215
|
- **Information density**: One key idea per slide. If a slide feels crowded, split it
|
|
215
216
|
|
|
217
|
+
For deeper guidance on typography selection, color theory, and visual hierarchy, read `{SKILL_PATH}/references/design-guide.md`.
|
|
218
|
+
|
|
216
219
|
---
|
|
217
220
|
|
|
218
221
|
## Operations Reference
|
|
@@ -330,6 +333,23 @@ cd {SKILL_PATH} && node scripts/generate_image.mjs \
|
|
|
330
333
|
|
|
331
334
|
---
|
|
332
335
|
|
|
336
|
+
## Refinement Workflow
|
|
337
|
+
|
|
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
|
+
|
|
340
|
+
| Request | Practice | What It Does |
|
|
341
|
+
|---------|----------|-------------|
|
|
342
|
+
| "polish this" / "clean it up" | **Polish** | Fix alignment, spacing, typography consistency, optical adjustments |
|
|
343
|
+
| "review this" / "critique" | **Critique** | Evaluate design effectiveness — hierarchy, consistency, emotional resonance, AI slop check |
|
|
344
|
+
| "simplify" / "too crowded" | **Distill** | Strip unnecessary complexity, one idea per slide, increase whitespace |
|
|
345
|
+
| "make it more impactful" / "too bland" | **Bolder** | Amplify scale, weight contrast, palette confidence, asymmetry |
|
|
346
|
+
| "tone it down" / "too busy" | **Quieter** | Reduce saturation, font weight, decorations. Refined, not boring. |
|
|
347
|
+
| "add more color" / "too gray" | **Colorize** | Strategic color introduction — tinted neutrals, accent data, section coding |
|
|
348
|
+
|
|
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
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
333
353
|
## Quality Checklist
|
|
334
354
|
|
|
335
355
|
Before considering a slide "done", verify:
|
|
@@ -392,9 +412,10 @@ The script checks:
|
|
|
392
412
|
|
|
393
413
|
## Supporting Reference Documents
|
|
394
414
|
|
|
395
|
-
For detailed guidance, read these files from the skill directory:
|
|
415
|
+
For detailed guidance, read these files from the skill directory on demand:
|
|
396
416
|
|
|
397
|
-
- `{SKILL_PATH}/
|
|
398
|
-
- `{SKILL_PATH}/
|
|
399
|
-
- `{SKILL_PATH}/
|
|
400
|
-
- `{SKILL_PATH}/
|
|
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.
|
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
# Slide Design Guide
|
|
2
|
+
|
|
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
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Design Direction
|
|
8
|
+
|
|
9
|
+
### Every Deck Needs a Point of View
|
|
10
|
+
|
|
11
|
+
Before writing theme.css, decide what this deck should *feel like*. Not "professional" (that's the minimum), but what kind of professional? What kind of energy?
|
|
12
|
+
|
|
13
|
+
- **Who is the audience?** Investors, engineers, designers, executives, students — each responds to different visual language
|
|
14
|
+
- **What's the emotional arc?** A sales pitch builds excitement. A postmortem demands sobriety. A tech talk rewards clarity.
|
|
15
|
+
- **What makes this deck THIS deck?** If you swapped the content for a different topic, would the design still feel specific — or could it be anything?
|
|
16
|
+
|
|
17
|
+
Commit to a direction and follow through. The worst decks are the ones that try to be everything — a little playful, a little serious, a little bold, a little restrained — and end up being nothing.
|
|
18
|
+
|
|
19
|
+
### Intentionality Over Formula
|
|
20
|
+
|
|
21
|
+
There's no single "good" aesthetic. What matters is that every choice has a reason:
|
|
22
|
+
|
|
23
|
+
- Chose dark mode? Because the content is visual and the dark background makes images pop — not because dark looks "modern."
|
|
24
|
+
- Chose Inter? Because the content is dense technical documentation and the font should disappear — not because it was the default.
|
|
25
|
+
- Chose bright red accent? Because this is a sales deck and urgency matters — not because red "pops."
|
|
26
|
+
- Chose zero decoration? Because the data speaks for itself — not because minimalism is trendy.
|
|
27
|
+
|
|
28
|
+
**The worst outcome** is not an ugly deck. It's a deck that looks like it was made without thinking.
|
|
29
|
+
|
|
30
|
+
### Recognizing Unintentional Patterns
|
|
31
|
+
|
|
32
|
+
When you catch yourself reaching for the same solution every time, stop. Some patterns that become autopilot:
|
|
33
|
+
|
|
34
|
+
- Dark background + neon accent for every topic
|
|
35
|
+
- 3-4 identical cards in a row for every list
|
|
36
|
+
- Gradient text for every heading
|
|
37
|
+
- Icon + heading + description repeated identically
|
|
38
|
+
- The same sans-serif font regardless of content
|
|
39
|
+
- Purple-to-blue for every gradient
|
|
40
|
+
|
|
41
|
+
These aren't bad in themselves — they're bad when they're the default rather than a deliberate choice. If you chose dark mode because THIS deck needs it, that's fine. If every deck you make is dark mode, something is off.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Typography
|
|
46
|
+
|
|
47
|
+
### Choosing Fonts with Intention
|
|
48
|
+
|
|
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
|
+
|
|
51
|
+
| Quality | Font Direction | Examples (Google Fonts) | Example Context |
|
|
52
|
+
|---------|---------------|------------------------|----------------|
|
|
53
|
+
| Authority, tradition | Serif, high-contrast | Playfair Display, Lora, Newsreader | Legal, finance, academic |
|
|
54
|
+
| Modern, clean | Geometric sans | Plus Jakarta Sans, Outfit, Urbanist | Tech product, startup |
|
|
55
|
+
| Warm, approachable | Humanist sans, rounded | Nunito Sans, Figtree, DM Sans | Education, healthcare, community |
|
|
56
|
+
| Technical, precise | Monospace, tabular | JetBrains Mono, IBM Plex Mono, Space Mono | Engineering, data, code |
|
|
57
|
+
| Editorial, storytelling | Transitional serif, mixed pairs | Source Serif 4, Fraunces, Instrument Serif | Narrative decks, case studies |
|
|
58
|
+
| Playful, creative | Display, variable-width | Space Grotesk, Syne, Instrument Sans | Design, consumer brand, event |
|
|
59
|
+
| Confident, sharp | Neo-grotesque, tight tracking | Onest, Geist, Inter Tight | Pitch, product launch |
|
|
60
|
+
| Luxury, refined | Didone, thin serif | Cormorant, Bodoni Moda | Fashion, premium brand |
|
|
61
|
+
|
|
62
|
+
These are starting points, not a definitive list. Google Fonts has 1600+ options — it's worth spending five minutes browsing [fonts.google.com](https://fonts.google.com) to find something that genuinely matches the content, rather than picking from the same short list every time.
|
|
63
|
+
|
|
64
|
+
**The default font problem**: Using Inter/Roboto/system-ui is fine when the font should be invisible (dense data, technical content). It's a missed opportunity when the deck has personality to express. Know when you're choosing "neutral" intentionally vs. choosing it because you didn't think about it.
|
|
65
|
+
|
|
66
|
+
**Pairing**: You often don't need a second font — one family in multiple weights creates clean hierarchy. When you do pair, contrast on multiple axes (serif + sans, display + text, condensed + regular). Never pair fonts that are similar-but-not-identical — they create tension without clear hierarchy.
|
|
67
|
+
|
|
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.
|
|
69
|
+
|
|
70
|
+
### Default Font Stack
|
|
71
|
+
|
|
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
|
+
```
|
|
76
|
+
|
|
77
|
+
### Type Scale
|
|
78
|
+
|
|
79
|
+
Use fewer sizes with more contrast. The gap between title and body should feel decisive, not incremental.
|
|
80
|
+
|
|
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 |
|
|
91
|
+
|
|
92
|
+
### Typographic Details
|
|
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
|
|
96
|
+
- **Weight contrast**: Use enough gap between heading and body weight that the difference is obvious, not subtle
|
|
97
|
+
- **Letter spacing**: -0.02em for headings, default for body. Tighter tracking on large headings often looks more polished.
|
|
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`
|
|
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.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Color
|
|
105
|
+
|
|
106
|
+
### Color as Communication
|
|
107
|
+
|
|
108
|
+
Color in slides serves three purposes: **hierarchy** (what to look at first), **grouping** (what belongs together), and **emotion** (how the audience should feel). Decoration is not one of them.
|
|
109
|
+
|
|
110
|
+
Before choosing colors, ask:
|
|
111
|
+
- What's the dominant mood? (Warm/cool, energetic/calm, serious/playful)
|
|
112
|
+
- Is there a brand palette to work with or extend?
|
|
113
|
+
- Light or dark base — and why? (Dark isn't inherently modern. Light isn't inherently corporate. Choose based on content and context.)
|
|
114
|
+
|
|
115
|
+
Mood–hue associations as a starting intuition (not rules):
|
|
116
|
+
|
|
117
|
+
| Mood / Context | Hue Range (OKLCH) | Feeling |
|
|
118
|
+
|---------------|------------------|---------|
|
|
119
|
+
| Trust, professionalism | 220-250 (blue) | Calm, reliable |
|
|
120
|
+
| Growth, health | 140-170 (green) | Natural, positive |
|
|
121
|
+
| Urgency, energy | 20-40 (red-orange) | Intense, action-oriented |
|
|
122
|
+
| Creativity, imagination | 280-320 (purple) | Mysterious, premium |
|
|
123
|
+
| Warmth, friendliness | 60-90 (yellow-orange) | Approachable, vibrant |
|
|
124
|
+
| Neutral, technical | Any hue, low chroma | Restrained, function-first |
|
|
125
|
+
|
|
126
|
+
### Building Palettes
|
|
127
|
+
|
|
128
|
+
**OKLCH** is worth learning — it's perceptually uniform, meaning equal steps in lightness *look* equal. This makes it easier to generate consistent shade scales. But hex, HSL, or any other format is fine if you're achieving the result you want. The tool matters less than the intention.
|
|
129
|
+
|
|
130
|
+
```css
|
|
131
|
+
/* OKLCH: lightness (0-100%), chroma (0-0.4+), hue (0-360) */
|
|
132
|
+
--color-primary: oklch(60% 0.15 250);
|
|
133
|
+
--color-primary-light: oklch(85% 0.08 250); /* lighter → reduce chroma */
|
|
134
|
+
--color-primary-dark: oklch(35% 0.12 250);
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Key insight regardless of color space**: As colors approach white or black, reduce saturation. High saturation at extreme lightness looks garish.
|
|
138
|
+
|
|
139
|
+
### Default Palettes
|
|
140
|
+
|
|
141
|
+
Sensible defaults when the user has no explicit color preferences. Adapt or replace entirely to match the deck's direction.
|
|
142
|
+
|
|
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
|
+
```
|
|
156
|
+
|
|
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
|
+
```
|
|
170
|
+
|
|
171
|
+
### Color Proportion
|
|
172
|
+
|
|
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).
|
|
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
|
+
|
|
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.
|
|
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
|
+
|
|
195
|
+
### Dark and Light Decks
|
|
196
|
+
|
|
197
|
+
Dark and light aren't just color swaps — they have different physics:
|
|
198
|
+
|
|
199
|
+
| Light Base | Dark Base |
|
|
200
|
+
|------------|-----------|
|
|
201
|
+
| Shadows create depth | Lighter surfaces create depth (shadows disappear on dark) |
|
|
202
|
+
| Bold text weights work | Reduce text weight slightly — light-on-dark appears heavier |
|
|
203
|
+
| Full saturation accents | Consider slight desaturation — bright on dark can be harsh |
|
|
204
|
+
| White backgrounds OK | Avoid pure black unless it's intentional (OLED, high-contrast editorial) — most dark UIs use 10-18% lightness |
|
|
205
|
+
|
|
206
|
+
### Readability Pitfalls
|
|
207
|
+
|
|
208
|
+
These commonly fail regardless of aesthetic direction:
|
|
209
|
+
- Light gray text on white backgrounds
|
|
210
|
+
- Gray text on colored backgrounds — gray looks washed out on color. Use a shade of the background color instead.
|
|
211
|
+
- Red on green or vice versa — 8% of men have difficulty distinguishing these
|
|
212
|
+
- Thin light text on photographic backgrounds — use an overlay to guarantee contrast
|
|
213
|
+
- Heavy use of alpha/transparency — creates unpredictable contrast. Define explicit colors when possible.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Visual Hierarchy
|
|
218
|
+
|
|
219
|
+
### The Squint Test
|
|
220
|
+
|
|
221
|
+
Blur your eyes (or mentally defocus) looking at a slide. Can you still identify:
|
|
222
|
+
- The most important element?
|
|
223
|
+
- The second most important?
|
|
224
|
+
- Clear groupings?
|
|
225
|
+
|
|
226
|
+
If everything looks the same weight blurred, there's a hierarchy problem. On a slide, hierarchy is even more critical than on the web — the audience has seconds, not minutes.
|
|
227
|
+
|
|
228
|
+
### Building Hierarchy
|
|
229
|
+
|
|
230
|
+
Don't rely on a single dimension. The strongest hierarchy combines multiple signals:
|
|
231
|
+
|
|
232
|
+
| Tool | Creates Hierarchy When... |
|
|
233
|
+
|------|--------------------------|
|
|
234
|
+
| **Size** | The ratio is decisive (2x+), not incremental |
|
|
235
|
+
| **Weight** | The gap between weights is visible at a glance |
|
|
236
|
+
| **Color** | Accent draws the eye because the rest is calm |
|
|
237
|
+
| **Position** | Primary content sits where the eye naturally starts |
|
|
238
|
+
| **Space** | Important elements have room to breathe; secondary content is denser |
|
|
239
|
+
|
|
240
|
+
The specific values depend on the deck's aesthetic — a bold deck might use 4x size ratios, a refined one might use 2x. What matters is that the hierarchy is unambiguous.
|
|
241
|
+
|
|
242
|
+
A concrete example — same content, weak vs strong hierarchy:
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
Weak (everything similar): Strong (clear priority):
|
|
246
|
+
┌────────────────────┐ ┌────────────────────┐
|
|
247
|
+
│ Overview (22px/600) │ │ │
|
|
248
|
+
│ │ │ Revenue grew 40% │
|
|
249
|
+
│ Revenue: $2.4M │ │ (48px/800) │
|
|
250
|
+
│ Growth: 40% │ │ │
|
|
251
|
+
│ Users: 15,000 │ │ $2.4M │ 15K users│
|
|
252
|
+
│ Target: Q3 │ │ (20px/400, muted) │
|
|
253
|
+
│ │ │ │
|
|
254
|
+
└────────────────────┘ └────────────────────┘
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Left: title and data are close in size — nothing stands out. Right: 40% is the core message of this slide, everything else recedes.
|
|
258
|
+
|
|
259
|
+
### Layout Diversity
|
|
260
|
+
|
|
261
|
+
Some things to watch for:
|
|
262
|
+
- **Identical card grids** on every slide — if three slides in a row use the same icon + heading + text card layout, the deck feels templated. Vary the treatment.
|
|
263
|
+
- **Cards aren't always needed** — spacing and alignment create visual grouping naturally. Use cards when items need clear boundaries or comparison, not as the default container for everything.
|
|
264
|
+
- **Nesting containers** (cards inside cards, boxes inside boxes) — adds visual complexity without information. Use spacing, typography, and dividers for hierarchy within.
|
|
265
|
+
|
|
266
|
+
### Whitespace
|
|
267
|
+
|
|
268
|
+
On slides, whitespace is as important as content. A slide with generous margins communicates confidence. A crowded slide communicates "I couldn't edit this down."
|
|
269
|
+
|
|
270
|
+
- More space around an element = more visual importance
|
|
271
|
+
- If a slide feels cramped, the answer is usually "split into two slides" not "make everything smaller"
|
|
272
|
+
- Empty space is not wasted space — it directs attention to what remains
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Spacing
|
|
277
|
+
|
|
278
|
+
### Slide Padding
|
|
279
|
+
|
|
280
|
+
```css
|
|
281
|
+
--slide-padding: 64px; /* Default content page padding */
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
- **Cover pages**: 0px or custom (full-bleed backgrounds)
|
|
285
|
+
- **Content pages**: 64px all sides → 1152×592px available area (for 1280×720 canvas)
|
|
286
|
+
|
|
287
|
+
### Gap Scale
|
|
288
|
+
|
|
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 |
|
|
296
|
+
|
|
297
|
+
### Margin Patterns
|
|
298
|
+
|
|
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
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## Visual Elements
|
|
307
|
+
|
|
308
|
+
### Cards
|
|
309
|
+
|
|
310
|
+
```css
|
|
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 */
|
|
317
|
+
}
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Tags / Badges
|
|
321
|
+
|
|
322
|
+
```css
|
|
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;
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Dividers
|
|
335
|
+
|
|
336
|
+
```css
|
|
337
|
+
.divider {
|
|
338
|
+
height: 1px;
|
|
339
|
+
background: var(--color-border);
|
|
340
|
+
margin: 24px 0;
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Icons
|
|
345
|
+
|
|
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)`
|
|
350
|
+
|
|
351
|
+
### Charts (ECharts)
|
|
352
|
+
|
|
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
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
## Layout Templates
|
|
363
|
+
|
|
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
|
+
```
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## Presentation Writing
|
|
444
|
+
|
|
445
|
+
Every word on a slide should earn its place. Presentations are a spoken medium — the slides support the speaker, they don't replace them.
|
|
446
|
+
|
|
447
|
+
### Core Rules
|
|
448
|
+
|
|
449
|
+
- **One idea per slide** — if you can't summarize the slide's point in one sentence, it's trying to do too much
|
|
450
|
+
- **Bullet points**: Max 5-6 per slide, max 8-10 words each. If bullets are full sentences, they're paragraphs pretending to be bullets.
|
|
451
|
+
- **Headings are statements, not labels**: "Revenue grew 40% YoY" beats "Revenue Overview". The heading should deliver the takeaway.
|
|
452
|
+
- **Cut, then cut again**: Write your text, cut it in half, then cut it in half again. What remains is what matters.
|
|
453
|
+
- **Active voice**: "We launched in 12 markets" not "The product was launched in 12 markets"
|
|
454
|
+
|
|
455
|
+
### Consistency
|
|
456
|
+
|
|
457
|
+
- Pick one capitalization style (Title Case or Sentence case) and stick with it across all slides
|
|
458
|
+
- Use consistent terminology — don't alternate between "users," "customers," and "clients" unless they mean different things
|
|
459
|
+
- Punctuation: either all bullets end with periods, or none do
|
|
460
|
+
|
|
461
|
+
### Data Storytelling
|
|
462
|
+
|
|
463
|
+
- Lead with the insight, not the data: "3x faster" is a headline, the chart is the evidence
|
|
464
|
+
- Round numbers for impact: "~2 million users" beats "1,987,432 users"
|
|
465
|
+
- Highlight the one number that matters — if everything is highlighted, nothing is
|
|
466
|
+
|
|
467
|
+
{{#imageGenEnabled}}
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
## Using Generated Images
|
|
471
|
+
|
|
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.
|
|
473
|
+
|
|
474
|
+
### The Finishing Touch, Not the Filler
|
|
475
|
+
|
|
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.
|
|
477
|
+
|
|
478
|
+
**Worth generating**:
|
|
479
|
+
|
|
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.
|
|
484
|
+
|
|
485
|
+
**Not worth generating**:
|
|
486
|
+
|
|
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
|
|
490
|
+
|
|
491
|
+
### Image × CSS Integration
|
|
492
|
+
|
|
493
|
+
Generated images don't exist in isolation — they need CSS to blend into the slide's design language. Practical combinations:
|
|
494
|
+
|
|
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.
|
|
503
|
+
|
|
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
|
+
```
|
|
512
|
+
|
|
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.
|
|
514
|
+
|
|
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.
|
|
516
|
+
|
|
517
|
+
### Style Coherence Across a Deck
|
|
518
|
+
|
|
519
|
+
When multiple generated images appear in the same deck, they must look like they belong to the same world:
|
|
520
|
+
|
|
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.
|
|
524
|
+
|
|
525
|
+
### Restraint
|
|
526
|
+
|
|
527
|
+
Image generation is a powerful tool, but overuse turns a deck into an AI art gallery. Some rules of thumb:
|
|
528
|
+
|
|
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.
|
|
532
|
+
|
|
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,261 +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
|
-
---
|
|
6
|
-
|
|
7
|
-
## Default Design Philosophy
|
|
8
|
-
|
|
9
|
-
**Apple HIG-inspired minimalism**: Clean, professional, spacious. Content speaks for itself.
|
|
10
|
-
|
|
11
|
-
- Generous whitespace over dense layouts
|
|
12
|
-
- Clear visual hierarchy via size, weight, and color
|
|
13
|
-
- Subtle depth via shadows and surface colors (not gradients)
|
|
14
|
-
- Consistent spacing scale throughout
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Color Palettes
|
|
19
|
-
|
|
20
|
-
### Dark Mode (Default)
|
|
21
|
-
|
|
22
|
-
```css
|
|
23
|
-
:root {
|
|
24
|
-
--color-bg: #0f0f0f;
|
|
25
|
-
--color-fg: #e8e6df;
|
|
26
|
-
--color-primary: #6ea8fe; /* Blue accent */
|
|
27
|
-
--color-secondary: #a78bfa; /* Purple secondary */
|
|
28
|
-
--color-accent: #34d399; /* Green accent */
|
|
29
|
-
--color-muted: #6b7280; /* Gray for secondary text */
|
|
30
|
-
--color-surface: #1a1a1a; /* Card/container background */
|
|
31
|
-
--color-border: #2a2a2a; /* Subtle borders */
|
|
32
|
-
}
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Light Mode
|
|
36
|
-
|
|
37
|
-
```css
|
|
38
|
-
:root {
|
|
39
|
-
--color-bg: #ffffff;
|
|
40
|
-
--color-fg: #1e293b; /* Slate-800 */
|
|
41
|
-
--color-primary: #2563eb; /* Blue-600 */
|
|
42
|
-
--color-secondary: #64748b; /* Slate-500 */
|
|
43
|
-
--color-accent: #0ea5e9; /* Sky-500 */
|
|
44
|
-
--color-muted: #94a3b8; /* Slate-400 */
|
|
45
|
-
--color-surface: #f8fafc; /* Slate-50 */
|
|
46
|
-
--color-border: #e2e8f0; /* Slate-200 */
|
|
47
|
-
}
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Color Usage Rules
|
|
51
|
-
|
|
52
|
-
| Role | Usage | Proportion |
|
|
53
|
-
|------|-------|-----------|
|
|
54
|
-
| Background | Slide background, large areas | 60-70% |
|
|
55
|
-
| Foreground | Primary text, headings | 20-25% |
|
|
56
|
-
| Primary | Accent elements, links, key highlights | 5-10% |
|
|
57
|
-
| Muted | Secondary text, captions, metadata | 5-10% |
|
|
58
|
-
| Surface | Cards, containers, code blocks | As needed |
|
|
59
|
-
| Border | Dividers, card borders | Minimal |
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## Typography
|
|
64
|
-
|
|
65
|
-
### Font Stack
|
|
66
|
-
|
|
67
|
-
```css
|
|
68
|
-
--font-sans: "Inter", "SF Pro Display", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, sans-serif;
|
|
69
|
-
--font-mono: "JetBrains Mono", "SF Mono", "Fira Code", monospace;
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
**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.
|
|
73
|
-
|
|
74
|
-
### Size Scale
|
|
75
|
-
|
|
76
|
-
| Element | Size | Weight | Line Height | Use |
|
|
77
|
-
|---------|------|--------|-------------|-----|
|
|
78
|
-
| Slide title (h1) | 48px (3rem) | 700 | 1.2 | Cover page main title |
|
|
79
|
-
| Page heading (h1) | 36px (2.25rem) | 700 | 1.2 | Content page title |
|
|
80
|
-
| Section header (h2) | 28px (1.75rem) | 600 | 1.3 | Subsections |
|
|
81
|
-
| Subheading (h3) | 22px (1.375rem) | 600 | 1.4 | Card headers, labels |
|
|
82
|
-
| Body text (p) | 20px (1.25rem) | 400 | 1.7 | Paragraphs, descriptions |
|
|
83
|
-
| List items (li) | 20px (1.25rem) | 400 | 1.8 | Bullet points |
|
|
84
|
-
| Caption/label | 14-16px | 500 | 1.5 | Tags, metadata, footnotes |
|
|
85
|
-
| Small text | 12-14px | 400 | 1.5 | Barely used — minimum readable |
|
|
86
|
-
|
|
87
|
-
### Typography Rules
|
|
88
|
-
|
|
89
|
-
- **Minimum body text**: 18px — anything smaller is hard to read on projected slides
|
|
90
|
-
- **Maximum title**: 56px — larger titles on cover pages only
|
|
91
|
-
- **Letter spacing**: -0.02em for headings, default for body
|
|
92
|
-
- **Font smoothing**: Always use `-webkit-font-smoothing: antialiased`
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Spacing System
|
|
97
|
-
|
|
98
|
-
### Slide Padding
|
|
99
|
-
|
|
100
|
-
```css
|
|
101
|
-
--slide-padding: 64px; /* Default content page padding */
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
- **Cover pages**: 0px or custom (full-bleed backgrounds)
|
|
105
|
-
- **Content pages**: 64px all sides → 1152×592px available area (for 1280×720 canvas)
|
|
106
|
-
|
|
107
|
-
### Gap Scale
|
|
108
|
-
|
|
109
|
-
| Token | Size | Use |
|
|
110
|
-
|-------|------|-----|
|
|
111
|
-
| xs | 8px | Between related inline items |
|
|
112
|
-
| sm | 16px | Between list items, tight groups |
|
|
113
|
-
| md | 24px | Between content sections |
|
|
114
|
-
| lg | 32px | Between major blocks |
|
|
115
|
-
| xl | 48px | Between split columns, hero spacing |
|
|
116
|
-
|
|
117
|
-
### Margin Patterns
|
|
118
|
-
|
|
119
|
-
- Between heading and first content: 16-24px
|
|
120
|
-
- Between content paragraphs: 12-16px
|
|
121
|
-
- Between cards in a grid: 16-24px
|
|
122
|
-
- Between major sections: 32-48px
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Visual Elements
|
|
127
|
-
|
|
128
|
-
### Cards
|
|
129
|
-
|
|
130
|
-
```css
|
|
131
|
-
.card {
|
|
132
|
-
background: var(--color-surface);
|
|
133
|
-
border: 1px solid var(--color-border);
|
|
134
|
-
border-radius: 12px; /* rounded-lg */
|
|
135
|
-
padding: 24px;
|
|
136
|
-
/* Optional shadow for depth: */
|
|
137
|
-
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Tags / Badges
|
|
142
|
-
|
|
143
|
-
```css
|
|
144
|
-
.tag {
|
|
145
|
-
display: inline-block;
|
|
146
|
-
padding: 4px 12px;
|
|
147
|
-
border-radius: 6px; /* rounded-md */
|
|
148
|
-
font-size: 13px;
|
|
149
|
-
font-weight: 500;
|
|
150
|
-
background: var(--color-primary);
|
|
151
|
-
color: white;
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### Dividers
|
|
156
|
-
|
|
157
|
-
```css
|
|
158
|
-
.divider {
|
|
159
|
-
height: 1px;
|
|
160
|
-
background: var(--color-border);
|
|
161
|
-
margin: 24px 0;
|
|
162
|
-
}
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
### Icon Usage
|
|
166
|
-
|
|
167
|
-
- Use **Lucide icons** (CDN) or **inline SVG** for consistency
|
|
168
|
-
- Icon size: 20-24px for inline, 32-48px for feature icons
|
|
169
|
-
- **Never use emoji** for professional presentations
|
|
170
|
-
- Color icons with `var(--color-primary)` or `var(--color-muted)`
|
|
171
|
-
|
|
172
|
-
### Chart Guidelines (ECharts)
|
|
173
|
-
|
|
174
|
-
When including data visualizations:
|
|
175
|
-
- Initialize with explicit width/height matching the container
|
|
176
|
-
- Use the deck's color palette for chart colors
|
|
177
|
-
- Include clear axis labels and legends
|
|
178
|
-
- Prefer bar/line charts for trends, pie/donut for composition
|
|
179
|
-
- Add a `<div id="chart-{n}" style="width: 100%; height: Xpx;"></div>` container
|
|
180
|
-
- Initialize with `<script>` at the end of the slide fragment
|
|
181
|
-
|
|
182
|
-
---
|
|
183
|
-
|
|
184
|
-
## Layout Templates
|
|
185
|
-
|
|
186
|
-
### Cover Page
|
|
187
|
-
|
|
188
|
-
Full-canvas, centered, minimal:
|
|
189
|
-
```
|
|
190
|
-
┌──────────────────────────────────────────┐
|
|
191
|
-
│ │
|
|
192
|
-
│ [Tag/Label] │
|
|
193
|
-
│ │
|
|
194
|
-
│ Main Title (48px) │
|
|
195
|
-
│ │
|
|
196
|
-
│ Subtitle (20px, muted) │
|
|
197
|
-
│ │
|
|
198
|
-
│ │
|
|
199
|
-
└──────────────────────────────────────────┘
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
### Single Column Content
|
|
203
|
-
|
|
204
|
-
Standard for text-heavy slides:
|
|
205
|
-
```
|
|
206
|
-
┌──────────────────────────────────────────┐
|
|
207
|
-
│ Page Heading (h2) │
|
|
208
|
-
│ │
|
|
209
|
-
│ • Bullet point one │
|
|
210
|
-
│ • Bullet point two │
|
|
211
|
-
│ • Bullet point three │
|
|
212
|
-
│ • Bullet point four │
|
|
213
|
-
│ │
|
|
214
|
-
│ │
|
|
215
|
-
└──────────────────────────────────────────┘
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
### Two-Column Split
|
|
219
|
-
|
|
220
|
-
For comparison, feature + detail, or text + image:
|
|
221
|
-
```
|
|
222
|
-
┌──────────────────────────────────────────┐
|
|
223
|
-
│ Page Heading (h2) │
|
|
224
|
-
│ │
|
|
225
|
-
│ ┌──────────────┐ ┌──────────────┐ │
|
|
226
|
-
│ │ Left Column │ │ Right Column │ │
|
|
227
|
-
│ │ Text/list │ │ Image/chart │ │
|
|
228
|
-
│ │ │ │ │ │
|
|
229
|
-
│ └──────────────┘ └──────────────┘ │
|
|
230
|
-
│ │
|
|
231
|
-
└──────────────────────────────────────────┘
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
### Card Grid
|
|
235
|
-
|
|
236
|
-
For 3-4 equal items (features, team, metrics):
|
|
237
|
-
```
|
|
238
|
-
┌──────────────────────────────────────────┐
|
|
239
|
-
│ Page Heading (h2) │
|
|
240
|
-
│ │
|
|
241
|
-
│ ┌──────┐ ┌──────┐ ┌──────┐ │
|
|
242
|
-
│ │ Card │ │ Card │ │ Card │ │
|
|
243
|
-
│ │ 1 │ │ 2 │ │ 3 │ │
|
|
244
|
-
│ └──────┘ └──────┘ └──────┘ │
|
|
245
|
-
│ │
|
|
246
|
-
└──────────────────────────────────────────┘
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
### Full Visual
|
|
250
|
-
|
|
251
|
-
Image or chart dominates, minimal text:
|
|
252
|
-
```
|
|
253
|
-
┌──────────────────────────────────────────┐
|
|
254
|
-
│ ┌──────────────────────────────────┐ │
|
|
255
|
-
│ │ │ │
|
|
256
|
-
│ │ Large Image/Chart │ │
|
|
257
|
-
│ │ │ │
|
|
258
|
-
│ └──────────────────────────────────┘ │
|
|
259
|
-
│ Caption or source (small, muted) │
|
|
260
|
-
└──────────────────────────────────────────┘
|
|
261
|
-
```
|
|
File without changes
|
|
File without changes
|