@strategicnerds/slide-nerds 0.1.0

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.
Files changed (101) hide show
  1. package/dist/cli/commands/analytics.d.ts +6 -0
  2. package/dist/cli/commands/analytics.d.ts.map +1 -0
  3. package/dist/cli/commands/analytics.js +44 -0
  4. package/dist/cli/commands/analytics.js.map +1 -0
  5. package/dist/cli/commands/create.d.ts +4 -0
  6. package/dist/cli/commands/create.d.ts.map +1 -0
  7. package/dist/cli/commands/create.js +87 -0
  8. package/dist/cli/commands/create.js.map +1 -0
  9. package/dist/cli/commands/export.d.ts +6 -0
  10. package/dist/cli/commands/export.d.ts.map +1 -0
  11. package/dist/cli/commands/export.js +109 -0
  12. package/dist/cli/commands/export.js.map +1 -0
  13. package/dist/cli/index.d.ts +3 -0
  14. package/dist/cli/index.d.ts.map +1 -0
  15. package/dist/cli/index.js +12 -0
  16. package/dist/cli/index.js.map +1 -0
  17. package/dist/cli/template-path.d.ts +4 -0
  18. package/dist/cli/template-path.d.ts.map +1 -0
  19. package/dist/cli/template-path.js +13 -0
  20. package/dist/cli/template-path.js.map +1 -0
  21. package/dist/runtime/export-api.d.ts +15 -0
  22. package/dist/runtime/export-api.d.ts.map +1 -0
  23. package/dist/runtime/export-api.js +21 -0
  24. package/dist/runtime/export-api.js.map +1 -0
  25. package/dist/runtime/index.d.ts +12 -0
  26. package/dist/runtime/index.d.ts.map +1 -0
  27. package/dist/runtime/index.js +8 -0
  28. package/dist/runtime/index.js.map +1 -0
  29. package/dist/runtime/light-table.d.ts +8 -0
  30. package/dist/runtime/light-table.d.ts.map +1 -0
  31. package/dist/runtime/light-table.js +104 -0
  32. package/dist/runtime/light-table.js.map +1 -0
  33. package/dist/runtime/presenter-view.d.ts +7 -0
  34. package/dist/runtime/presenter-view.d.ts.map +1 -0
  35. package/dist/runtime/presenter-view.js +62 -0
  36. package/dist/runtime/presenter-view.js.map +1 -0
  37. package/dist/runtime/slide-context.d.ts +16 -0
  38. package/dist/runtime/slide-context.d.ts.map +1 -0
  39. package/dist/runtime/slide-context.js +18 -0
  40. package/dist/runtime/slide-context.js.map +1 -0
  41. package/dist/runtime/slide-controls.d.ts +3 -0
  42. package/dist/runtime/slide-controls.d.ts.map +1 -0
  43. package/dist/runtime/slide-controls.js +177 -0
  44. package/dist/runtime/slide-controls.js.map +1 -0
  45. package/dist/runtime/slide-dom.d.ts +17 -0
  46. package/dist/runtime/slide-dom.d.ts.map +1 -0
  47. package/dist/runtime/slide-dom.js +89 -0
  48. package/dist/runtime/slide-dom.js.map +1 -0
  49. package/dist/runtime/slide-runtime.d.ts +7 -0
  50. package/dist/runtime/slide-runtime.d.ts.map +1 -0
  51. package/dist/runtime/slide-runtime.js +125 -0
  52. package/dist/runtime/slide-runtime.js.map +1 -0
  53. package/dist/runtime/slide-shape.d.ts +21 -0
  54. package/dist/runtime/slide-shape.d.ts.map +1 -0
  55. package/dist/runtime/slide-shape.js +115 -0
  56. package/dist/runtime/slide-shape.js.map +1 -0
  57. package/dist/runtime/types.d.ts +150 -0
  58. package/dist/runtime/types.d.ts.map +1 -0
  59. package/dist/runtime/types.js +38 -0
  60. package/dist/runtime/types.js.map +1 -0
  61. package/dist/runtime/use-presenter-mode.d.ts +14 -0
  62. package/dist/runtime/use-presenter-mode.d.ts.map +1 -0
  63. package/dist/runtime/use-presenter-mode.js +52 -0
  64. package/dist/runtime/use-presenter-mode.js.map +1 -0
  65. package/dist/runtime/use-slide-navigation.d.ts +13 -0
  66. package/dist/runtime/use-slide-navigation.d.ts.map +1 -0
  67. package/dist/runtime/use-slide-navigation.js +230 -0
  68. package/dist/runtime/use-slide-navigation.js.map +1 -0
  69. package/package.json +64 -0
  70. package/skills/accessibility/SKILL.md +236 -0
  71. package/skills/advanced-layouts/SKILL.md +429 -0
  72. package/skills/analytics/SKILL.md +97 -0
  73. package/skills/animation/SKILL.md +364 -0
  74. package/skills/brand/SKILL.md +200 -0
  75. package/skills/data-visualization/SKILL.md +533 -0
  76. package/skills/deck-templates/SKILL.md +93 -0
  77. package/skills/diagrams/SKILL.md +395 -0
  78. package/skills/export/SKILL.md +119 -0
  79. package/skills/interactive/SKILL.md +292 -0
  80. package/skills/layout/SKILL.md +178 -0
  81. package/skills/narrative-frameworks/SKILL.md +250 -0
  82. package/skills/react-component-embeds/SKILL.md +73 -0
  83. package/skills/slide-types/SKILL.md +384 -0
  84. package/skills/slidenerds-runtime/SKILL.md +163 -0
  85. package/skills/speaker-notes/SKILL.md +128 -0
  86. package/skills/strategic-frameworks/SKILL.md +392 -0
  87. package/skills/visual-design/SKILL.md +373 -0
  88. package/templates/analytics/custom.tsx.tmpl +20 -0
  89. package/templates/analytics/ga4.tsx.tmpl +15 -0
  90. package/templates/analytics/gtm.tsx.tmpl +9 -0
  91. package/templates/analytics/plausible.tsx.tmpl +10 -0
  92. package/templates/analytics/posthog.tsx.tmpl +14 -0
  93. package/templates/next-app/CLAUDE.md.tmpl +574 -0
  94. package/templates/next-app/README.md.tmpl +35 -0
  95. package/templates/next-app/app/globals.css.tmpl +274 -0
  96. package/templates/next-app/app/layout.tsx.tmpl +31 -0
  97. package/templates/next-app/app/page.tsx.tmpl +38 -0
  98. package/templates/next-app/brand.config.ts.tmpl +32 -0
  99. package/templates/next-app/package.json.tmpl +25 -0
  100. package/templates/next-app/postcss.config.mjs.tmpl +8 -0
  101. package/templates/next-app/tsconfig.json.tmpl +21 -0
@@ -0,0 +1,392 @@
1
+ ---
2
+ name: strategic-frameworks
3
+ description: SWOT, 2x2 matrix, TAM/SAM/SOM, pricing comparison, risk matrix, pyramid, and other consulting-style slide patterns
4
+ ---
5
+
6
+ # Strategic frameworks skill
7
+
8
+ Use this skill when a slide needs a structured analytical framework. These are the standard visual formats used in consulting, board, strategy, and executive presentations. Each pattern here is a complete slide recipe using HTML/CSS and Tailwind.
9
+
10
+ ## SWOT matrix
11
+
12
+ Use for: situational analysis, strategic planning, competitive assessment.
13
+
14
+ A 2x2 grid with color-coded quadrants. Strengths and opportunities are positive (accent). Weaknesses and threats are cautionary (muted).
15
+
16
+ ```tsx
17
+ <section data-slide="">
18
+ <div className="flex flex-col justify-center w-full min-h-screen"
19
+ style={{ padding: '4rem 6rem' }}>
20
+ <p className="section-label mb-3">Analysis</p>
21
+ <h2 className="text-[2.5rem] font-bold mb-10">SWOT analysis</h2>
22
+ <div className="grid grid-cols-2 gap-3" style={{ maxWidth: 900 }}>
23
+ {[
24
+ { title: 'Strengths', items: ['5-minute deploys', 'Best-in-class API', '98% retention'], color: 'var(--color-accent)', bg: 'var(--color-accent-dim)' },
25
+ { title: 'Weaknesses', items: ['Small sales team', 'No enterprise tier', 'US-only'], color: 'var(--color-text-secondary)', bg: 'var(--color-surface)' },
26
+ { title: 'Opportunities', items: ['EU expansion', 'Partner channel', 'AI integration'], color: 'var(--color-accent)', bg: 'var(--color-accent-dim)' },
27
+ { title: 'Threats', items: ['AWS building competitor', 'Price pressure', 'Talent market'], color: 'var(--color-text-secondary)', bg: 'var(--color-surface)' },
28
+ ].map((q) => (
29
+ <div key={q.title} data-step="" className="step-fade rounded-xl p-5"
30
+ style={{ background: q.bg, border: '1px solid var(--color-border)' }}>
31
+ <p className="text-sm font-semibold mb-3" style={{ color: q.color }}>{q.title}</p>
32
+ <ul className="space-y-1.5">
33
+ {q.items.map((item) => (
34
+ <li key={item} className="text-sm" style={{ color: 'var(--color-text-secondary)' }}>
35
+ {item}
36
+ </li>
37
+ ))}
38
+ </ul>
39
+ </div>
40
+ ))}
41
+ </div>
42
+ </div>
43
+ </section>
44
+ ```
45
+
46
+ ### SWOT rules
47
+
48
+ - 3-4 items per quadrant. More is noise.
49
+ - Strengths and Opportunities use accent color. Weaknesses and Threats use muted color.
50
+ - Reveal quadrants one at a time with `data-step`.
51
+ - Items are short phrases, not sentences.
52
+
53
+ ## Generic 2x2 matrix
54
+
55
+ Use for: effort/impact analysis, urgency/importance, build vs buy.
56
+
57
+ ```tsx
58
+ <section data-slide="">
59
+ <div className="flex flex-col justify-center items-center w-full min-h-screen"
60
+ style={{ padding: '4rem 6rem' }}>
61
+ <h2 className="text-[2.5rem] font-bold mb-10">Prioritization matrix</h2>
62
+ <div className="relative" style={{ width: 600, height: 500 }}>
63
+ {/* Axis labels */}
64
+ <p className="absolute -left-16 top-1/2 -translate-y-1/2 -rotate-90 text-xs font-semibold tracking-[0.15em] uppercase"
65
+ style={{ color: 'var(--color-text-tertiary)' }}>Impact</p>
66
+ <p className="absolute bottom-[-2rem] left-1/2 -translate-x-1/2 text-xs font-semibold tracking-[0.15em] uppercase"
67
+ style={{ color: 'var(--color-text-tertiary)' }}>Effort</p>
68
+
69
+ {/* Grid lines */}
70
+ <div className="absolute left-1/2 top-0 bottom-0 w-px" style={{ background: 'var(--color-border)' }} />
71
+ <div className="absolute top-1/2 left-0 right-0 h-px" style={{ background: 'var(--color-border)' }} />
72
+
73
+ {/* Quadrant labels */}
74
+ <p className="absolute top-4 left-4 text-xs font-semibold"
75
+ style={{ color: 'var(--color-accent)' }}>Quick wins</p>
76
+ <p className="absolute top-4 right-4 text-xs font-semibold"
77
+ style={{ color: 'var(--color-text-tertiary)' }}>Big bets</p>
78
+ <p className="absolute bottom-4 left-4 text-xs font-semibold"
79
+ style={{ color: 'var(--color-text-tertiary)' }}>Fill-ins</p>
80
+ <p className="absolute bottom-4 right-4 text-xs font-semibold"
81
+ style={{ color: 'var(--color-text-tertiary)', opacity: 0.5 }}>Avoid</p>
82
+
83
+ {/* Positioned items */}
84
+ <div className="absolute" style={{ left: '15%', top: '15%' }}>
85
+ <div data-step="" className="step-scale-in card-surface px-3 py-1.5 text-xs font-medium"
86
+ style={{ border: '1px solid var(--color-accent)' }}>SSO integration</div>
87
+ </div>
88
+ <div className="absolute" style={{ left: '60%', top: '20%' }}>
89
+ <div data-step="" className="step-scale-in card-surface px-3 py-1.5 text-xs font-medium">EU expansion</div>
90
+ </div>
91
+ {/* More items positioned by their effort/impact coordinates */}
92
+ </div>
93
+ </div>
94
+ </section>
95
+ ```
96
+
97
+ ### 2x2 rules
98
+
99
+ - Position items as absolutely-placed elements using percentage coordinates.
100
+ - Use `card-surface` pills for item labels.
101
+ - Highlight the "Quick wins" quadrant with accent color.
102
+ - Axis labels on the outside edges.
103
+ - The quadrant lines use `var(--color-border)` at default opacity.
104
+
105
+ ## TAM / SAM / SOM
106
+
107
+ Use for: market sizing in investor pitches and strategy decks.
108
+
109
+ Concentric circles with the largest (TAM) on the outside:
110
+
111
+ ```tsx
112
+ <section data-slide="">
113
+ <div className="flex items-center justify-center w-full min-h-screen"
114
+ style={{ padding: '4rem 6rem' }}>
115
+ <div className="flex items-center gap-16">
116
+ <div className="relative" style={{ width: 400, height: 400 }}>
117
+ {[
118
+ { label: 'TAM', value: '$24B', size: 380, opacity: 0.08 },
119
+ { label: 'SAM', value: '$4.8B', size: 260, opacity: 0.12 },
120
+ { label: 'SOM', value: '$240M', size: 140, opacity: 0.2 },
121
+ ].map((ring, i) => (
122
+ <div key={ring.label} data-step="" className="step-scale-in absolute rounded-full flex items-center justify-center"
123
+ style={{
124
+ width: ring.size,
125
+ height: ring.size,
126
+ top: (400 - ring.size) / 2,
127
+ left: (400 - ring.size) / 2,
128
+ background: `rgba(245,158,11,${ring.opacity})`,
129
+ border: '1px solid var(--color-accent)',
130
+ borderColor: `rgba(245,158,11,${ring.opacity + 0.15})`,
131
+ }}>
132
+ {i === 2 && (
133
+ <div className="text-center">
134
+ <p className="text-2xl font-bold" style={{ color: 'var(--color-accent)' }}>{ring.value}</p>
135
+ <p className="text-xs mt-1" style={{ color: 'var(--color-text-tertiary)' }}>{ring.label}</p>
136
+ </div>
137
+ )}
138
+ </div>
139
+ ))}
140
+ </div>
141
+ <div className="space-y-6">
142
+ {[
143
+ { label: 'TAM', value: '$24B', desc: 'Total developer tools market' },
144
+ { label: 'SAM', value: '$4.8B', desc: 'Cloud deployment automation segment' },
145
+ { label: 'SOM', value: '$240M', desc: 'SMB + mid-market, US + EU' },
146
+ ].map((item) => (
147
+ <div key={item.label} data-step="" className="step-fade">
148
+ <p className="text-sm font-semibold" style={{ color: 'var(--color-accent)' }}>{item.label}: {item.value}</p>
149
+ <p className="text-sm" style={{ color: 'var(--color-text-secondary)' }}>{item.desc}</p>
150
+ </div>
151
+ ))}
152
+ </div>
153
+ </div>
154
+ </div>
155
+ </section>
156
+ ```
157
+
158
+ ## Pricing comparison (3-tier)
159
+
160
+ Use for: plan comparison, product editions, service tiers.
161
+
162
+ See the advanced-layouts skill for the full three-option comparison pattern. Key additions for pricing:
163
+
164
+ - Center column is taller and has an accent border.
165
+ - "Most popular" or "Recommended" badge on the center.
166
+ - Price is the largest text in each card.
167
+ - Feature list uses checkmarks in accent color.
168
+ - CTA button at the bottom of each card (optional for internal decks).
169
+
170
+ ## Process chevrons
171
+
172
+ Use for: linear processes, sales stages, implementation phases.
173
+
174
+ ```tsx
175
+ <section data-slide="">
176
+ <div className="flex flex-col justify-center items-center w-full min-h-screen"
177
+ style={{ padding: '4rem 6rem' }}>
178
+ <h2 className="text-[2.5rem] font-bold mb-14">Sales process</h2>
179
+ <div className="flex items-center">
180
+ {['Prospect', 'Qualify', 'Demo', 'Proposal', 'Close'].map((stage, i) => (
181
+ <div key={stage} data-step="" className="step-fade flex items-center">
182
+ <div className="relative px-8 py-4 text-center"
183
+ style={{
184
+ background: i === 0 ? 'var(--color-accent)' : 'var(--color-surface)',
185
+ clipPath: 'polygon(0 0, calc(100% - 16px) 0, 100% 50%, calc(100% - 16px) 100%, 0 100%, 16px 50%)',
186
+ marginLeft: i === 0 ? 0 : -8,
187
+ color: i === 0 ? 'var(--color-primary)' : 'var(--color-text)',
188
+ }}>
189
+ <p className="text-sm font-semibold">{stage}</p>
190
+ </div>
191
+ </div>
192
+ ))}
193
+ </div>
194
+ </div>
195
+ </section>
196
+ ```
197
+
198
+ The first chevron is accent-colored (current stage). The rest are surface-colored. Use `clipPath: polygon()` to create the arrow shape.
199
+
200
+ ## Pyramid / hierarchy
201
+
202
+ Use for: Maslow-style hierarchies, market tiers, brand pyramid.
203
+
204
+ ```tsx
205
+ <div className="flex flex-col items-center gap-1">
206
+ {[
207
+ { label: 'Enterprise', width: '30%' },
208
+ { label: 'Mid-market', width: '50%' },
209
+ { label: 'SMB', width: '70%' },
210
+ { label: 'Self-serve', width: '90%' },
211
+ ].map((tier, i) => (
212
+ <div key={tier.label} data-step="" className="step-fade text-center py-3 rounded-lg"
213
+ style={{
214
+ width: tier.width,
215
+ background: `rgba(245,158,11,${0.3 - i * 0.06})`,
216
+ border: '1px solid var(--color-border)',
217
+ }}>
218
+ <p className="text-sm font-semibold">{tier.label}</p>
219
+ </div>
220
+ ))}
221
+ </div>
222
+ ```
223
+
224
+ ### Pyramid rules
225
+
226
+ - 3-5 levels. More becomes illegible.
227
+ - Narrowest at top (highest value / smallest segment).
228
+ - Each level is a percentage width of its parent container.
229
+ - Use decreasing accent opacity from top (strongest) to bottom (lightest).
230
+
231
+ ## Competitive positioning map
232
+
233
+ Use for: market positioning, competitive landscape, portfolio analysis.
234
+
235
+ This is a scatter plot on two strategic axes. Use the Recharts ScatterChart from the data-visualization skill, with custom labels for each competitor:
236
+
237
+ ```tsx
238
+ const competitors = [
239
+ { name: 'Acme', x: 85, y: 90, size: 16 },
240
+ { name: 'Competitor A', x: 60, y: 40, size: 10 },
241
+ { name: 'Competitor B', x: 30, y: 70, size: 10 },
242
+ { name: 'Legacy', x: 20, y: 20, size: 8 },
243
+ ]
244
+ ```
245
+
246
+ - X-axis: one strategic dimension (e.g., "Ease of use").
247
+ - Y-axis: another strategic dimension (e.g., "Enterprise readiness").
248
+ - Acme is the largest dot, in accent color.
249
+ - Competitors are smaller, muted.
250
+ - Label each dot with the company name.
251
+
252
+ ## Risk matrix
253
+
254
+ Use for: risk assessment, compliance review, project planning.
255
+
256
+ A 5x5 or 3x3 grid with color-coded cells (green = low, yellow = medium, red = high).
257
+
258
+ ```tsx
259
+ <section data-slide="">
260
+ <div className="flex flex-col justify-center w-full min-h-screen"
261
+ style={{ padding: '4rem 6rem' }}>
262
+ <p className="section-label mb-3">Risk</p>
263
+ <h2 className="text-[2.5rem] font-bold mb-10">Risk assessment</h2>
264
+ <div className="card-surface overflow-hidden" style={{ maxWidth: 600 }}>
265
+ <div className="grid grid-cols-4 text-center text-xs">
266
+ <div className="p-2" />
267
+ <div className="p-2 font-semibold" style={{ color: 'var(--color-text-tertiary)' }}>Low impact</div>
268
+ <div className="p-2 font-semibold" style={{ color: 'var(--color-text-tertiary)' }}>Med impact</div>
269
+ <div className="p-2 font-semibold" style={{ color: 'var(--color-text-tertiary)' }}>High impact</div>
270
+ {['High likelihood', 'Med likelihood', 'Low likelihood'].map((row) => (
271
+ <React.Fragment key={row}>
272
+ <div className="p-2 font-semibold text-right pr-3" style={{ color: 'var(--color-text-tertiary)' }}>{row}</div>
273
+ {[
274
+ row === 'High likelihood' ? ['#f59e0b', '#ef4444', '#ef4444'] :
275
+ row === 'Med likelihood' ? ['#22c55e', '#f59e0b', '#ef4444'] :
276
+ ['#22c55e', '#22c55e', '#f59e0b']
277
+ ][0].map((color, i) => (
278
+ <div key={i} className="p-3 m-0.5 rounded"
279
+ style={{ background: color, opacity: 0.2 }} />
280
+ ))}
281
+ </React.Fragment>
282
+ ))}
283
+ </div>
284
+ </div>
285
+ </div>
286
+ </section>
287
+ ```
288
+
289
+ Place risk items as labels inside the relevant cells.
290
+
291
+ ## Pros and cons
292
+
293
+ Use for: decision support, options analysis, trade-off visualization.
294
+
295
+ ```tsx
296
+ <section data-slide="">
297
+ <div className="grid grid-cols-2 gap-8 items-start w-full min-h-screen"
298
+ style={{ padding: '4rem 6rem' }}>
299
+ <div>
300
+ <p className="text-sm font-semibold mb-6" style={{ color: '#22c55e' }}>Pros</p>
301
+ <ul className="space-y-3">
302
+ {['5x faster deploys', 'Zero-config scaling', '10x cost reduction'].map((item) => (
303
+ <li key={item} data-step="" className="step-fade flex items-start gap-3 text-base">
304
+ <span style={{ color: '#22c55e' }}>+</span>
305
+ <span>{item}</span>
306
+ </li>
307
+ ))}
308
+ </ul>
309
+ </div>
310
+ <div>
311
+ <p className="text-sm font-semibold mb-6" style={{ color: '#ef4444' }}>Cons</p>
312
+ <ul className="space-y-3">
313
+ {['6-month migration', 'Team retraining', 'Vendor lock-in risk'].map((item) => (
314
+ <li key={item} data-step="" className="step-fade flex items-start gap-3 text-base">
315
+ <span style={{ color: '#ef4444' }}>-</span>
316
+ <span>{item}</span>
317
+ </li>
318
+ ))}
319
+ </ul>
320
+ </div>
321
+ </div>
322
+ </section>
323
+ ```
324
+
325
+ ## Maturity model
326
+
327
+ Use for: capability assessment, digital transformation stages, process maturity.
328
+
329
+ ```tsx
330
+ <div className="flex items-end gap-2">
331
+ {[
332
+ { level: 1, label: 'Ad hoc', active: false },
333
+ { level: 2, label: 'Defined', active: false },
334
+ { level: 3, label: 'Managed', active: true },
335
+ { level: 4, label: 'Measured', active: false },
336
+ { level: 5, label: 'Optimized', active: false },
337
+ ].map((stage) => (
338
+ <div key={stage.level} data-step="" className="step-move-up flex-1 text-center">
339
+ <div className="rounded-t-lg py-4"
340
+ style={{
341
+ height: 60 + stage.level * 30,
342
+ background: stage.active ? 'var(--color-accent)' : 'var(--color-surface)',
343
+ border: stage.active ? '2px solid var(--color-accent)' : '1px solid var(--color-border)',
344
+ display: 'flex',
345
+ alignItems: 'center',
346
+ justifyContent: 'center',
347
+ }}>
348
+ <p className="text-lg font-bold"
349
+ style={{ color: stage.active ? 'var(--color-primary)' : 'var(--color-text-tertiary)' }}>
350
+ {stage.level}
351
+ </p>
352
+ </div>
353
+ <p className="mt-2 text-xs font-semibold"
354
+ style={{ color: stage.active ? 'var(--color-accent)' : 'var(--color-text-tertiary)' }}>
355
+ {stage.label}
356
+ </p>
357
+ </div>
358
+ ))}
359
+ </div>
360
+ ```
361
+
362
+ The active stage is highlighted in accent color. Bars increase in height left to right.
363
+
364
+ ## Concentric circles
365
+
366
+ Use for: ecosystem layers, strategic fit, layers of value.
367
+
368
+ Same technique as TAM/SAM/SOM but with different labels. Use absolutely-positioned circles within a relative container. Reveal from outside in (largest first) using `data-step`.
369
+
370
+ ## Framework selection guide
371
+
372
+ | Framework | Use when |
373
+ |---|---|
374
+ | SWOT | Situational analysis, strategic review, competitive assessment |
375
+ | 2x2 matrix | Prioritizing options on two dimensions |
376
+ | TAM/SAM/SOM | Market sizing for investor decks |
377
+ | Process chevrons | Showing a linear workflow or sales stages |
378
+ | Pyramid | Showing hierarchy, market tiers, or value layers |
379
+ | Positioning map | Competitive landscape on two strategic axes |
380
+ | Risk matrix | Risk assessment with likelihood and impact |
381
+ | Pros/cons | Decision support, trade-off analysis |
382
+ | Pricing comparison | Plan/tier selection (see advanced-layouts skill) |
383
+ | Maturity model | Capability assessment, readiness scoring |
384
+ | Concentric circles | Ecosystem layers, strategic fit rings |
385
+
386
+ ## Common mistakes
387
+
388
+ - Filling every cell of a SWOT with 8+ items. Keep it to 3-4 per quadrant.
389
+ - Centering items in a 2x2 instead of positioning them meaningfully by their coordinates.
390
+ - Using raw numbers for TAM without showing the methodology or source.
391
+ - Making all process chevrons the same color. Highlight the current or focus stage.
392
+ - Not revealing framework elements progressively. A full SWOT shown at once overwhelms.