lazyslides 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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -0
  3. package/_includes/slides/_nested-list.njk +26 -0
  4. package/_includes/slides/agenda.njk +17 -0
  5. package/_includes/slides/center.njk +16 -0
  6. package/_includes/slides/code.njk +15 -0
  7. package/_includes/slides/columns.njk +35 -0
  8. package/_includes/slides/comparison.njk +29 -0
  9. package/_includes/slides/content.njk +22 -0
  10. package/_includes/slides/footer.njk +58 -0
  11. package/_includes/slides/funnel.njk +30 -0
  12. package/_includes/slides/hero.njk +27 -0
  13. package/_includes/slides/image-overlay.njk +21 -0
  14. package/_includes/slides/metrics.njk +27 -0
  15. package/_includes/slides/quote.njk +17 -0
  16. package/_includes/slides/section.njk +6 -0
  17. package/_includes/slides/split-wide.njk +30 -0
  18. package/_includes/slides/split.njk +30 -0
  19. package/_includes/slides/table.njk +31 -0
  20. package/_includes/slides/timeline.njk +30 -0
  21. package/_includes/slides/title.njk +17 -0
  22. package/_layouts/default.njk +20 -0
  23. package/_layouts/presentation.njk +240 -0
  24. package/assets/css/themes/default.css +62 -0
  25. package/assets/css/vendor/glightbox.min.css +1 -0
  26. package/assets/js/vendor/glightbox.min.js +1 -0
  27. package/assets/reveal.js/LICENSE +19 -0
  28. package/assets/reveal.js/dist/reset.css +30 -0
  29. package/assets/reveal.js/dist/reveal.css +8 -0
  30. package/assets/reveal.js/dist/reveal.esm.js +9 -0
  31. package/assets/reveal.js/dist/reveal.esm.js.map +1 -0
  32. package/assets/reveal.js/dist/reveal.js +9 -0
  33. package/assets/reveal.js/dist/reveal.js.map +1 -0
  34. package/assets/reveal.js/dist/theme/beige.css +366 -0
  35. package/assets/reveal.js/dist/theme/black-contrast.css +362 -0
  36. package/assets/reveal.js/dist/theme/black.css +359 -0
  37. package/assets/reveal.js/dist/theme/blood.css +392 -0
  38. package/assets/reveal.js/dist/theme/dracula.css +385 -0
  39. package/assets/reveal.js/dist/theme/fonts/league-gothic/LICENSE +2 -0
  40. package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.css +10 -0
  41. package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.eot +0 -0
  42. package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.ttf +0 -0
  43. package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.woff +0 -0
  44. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/LICENSE +45 -0
  45. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.eot +0 -0
  46. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.ttf +0 -0
  47. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.woff +0 -0
  48. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.eot +0 -0
  49. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.ttf +0 -0
  50. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.woff +0 -0
  51. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.eot +0 -0
  52. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.ttf +0 -0
  53. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.woff +0 -0
  54. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.eot +0 -0
  55. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.ttf +0 -0
  56. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.woff +0 -0
  57. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro.css +39 -0
  58. package/assets/reveal.js/dist/theme/league.css +368 -0
  59. package/assets/reveal.js/dist/theme/moon.css +362 -0
  60. package/assets/reveal.js/dist/theme/night.css +360 -0
  61. package/assets/reveal.js/dist/theme/serif.css +363 -0
  62. package/assets/reveal.js/dist/theme/simple.css +362 -0
  63. package/assets/reveal.js/dist/theme/sky.css +370 -0
  64. package/assets/reveal.js/dist/theme/solarized.css +363 -0
  65. package/assets/reveal.js/dist/theme/white-contrast.css +362 -0
  66. package/assets/reveal.js/dist/theme/white.css +359 -0
  67. package/assets/reveal.js/dist/theme/white_contrast_compact_verbatim_headers.css +360 -0
  68. package/assets/reveal.js/plugin/highlight/highlight.esm.js +5 -0
  69. package/assets/reveal.js/plugin/highlight/highlight.js +5 -0
  70. package/assets/reveal.js/plugin/highlight/monokai.css +71 -0
  71. package/assets/reveal.js/plugin/highlight/plugin.js +439 -0
  72. package/assets/reveal.js/plugin/highlight/zenburn.css +80 -0
  73. package/assets/reveal.js/plugin/markdown/markdown.esm.js +7 -0
  74. package/assets/reveal.js/plugin/markdown/markdown.js +7 -0
  75. package/assets/reveal.js/plugin/markdown/plugin.js +491 -0
  76. package/assets/reveal.js/plugin/notes/notes.esm.js +1 -0
  77. package/assets/reveal.js/plugin/notes/notes.js +1 -0
  78. package/assets/reveal.js/plugin/notes/plugin.js +267 -0
  79. package/assets/reveal.js/plugin/notes/speaker-view.html +898 -0
  80. package/cli.js +80 -0
  81. package/data/site.json +3 -0
  82. package/index.js +153 -0
  83. package/lib/export-pdf.js +137 -0
  84. package/lib/init.js +154 -0
  85. package/lib/renumber.js +181 -0
  86. package/lib/validate.js +196 -0
  87. package/package.json +76 -0
  88. package/scaffold/CLAUDE.md +283 -0
  89. package/scaffold/README.md +29 -0
  90. package/scaffold/_template/index.md +78 -0
  91. package/scaffold/_template/outline.md +32 -0
  92. package/scaffold/claude-commands/add-slide.md +61 -0
  93. package/scaffold/claude-commands/create-outline.md +75 -0
  94. package/scaffold/claude-commands/new-presentation.md +218 -0
  95. package/scaffold/claude-commands/refine-slides.md +62 -0
  96. package/scaffold/claude-commands/research-topic.md +66 -0
  97. package/scaffold/claude-commands/validate.md +47 -0
  98. package/scaffold/claude-settings.json +7 -0
  99. package/scaffold/eleventy.config.js +11 -0
  100. package/scaffold/gitignore +5 -0
  101. package/scaffold/my-first-deck/index.md +26 -0
  102. package/scaffold/nvmrc +1 -0
  103. package/scaffold/package.json.tmpl +25 -0
  104. package/scaffold/presentations.11tydata.js +11 -0
  105. package/scaffold/styles.css +3 -0
  106. package/src/styles.css +2077 -0
package/src/styles.css ADDED
@@ -0,0 +1,2077 @@
1
+ @import "tailwindcss";
2
+
3
+ @source "../_includes/**/*.njk";
4
+ @source "../_layouts/**/*.njk";
5
+
6
+ @theme {
7
+ /* ============================================
8
+ LAZYSLIDES DESIGN TOKENS
9
+ Presentation Design System
10
+ ============================================ */
11
+
12
+ /* Typography */
13
+ --font-serif: 'Source Serif 4', Georgia, serif;
14
+ --font-sans: 'Plus Jakarta Sans', system-ui, sans-serif;
15
+ --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
16
+
17
+ /* Primary: Mauve (purple) */
18
+ --color-mauve-50: #faf7fd;
19
+ --color-mauve-100: #f4edfc;
20
+ --color-mauve-200: #ebdefa;
21
+ --color-mauve-300: #e4c1f9;
22
+ --color-mauve-400: #d49bf4;
23
+ --color-mauve-500: #c16feb;
24
+ --color-mauve-600: #a94ddb;
25
+ --color-mauve-700: #913bc0;
26
+
27
+ /* Success: Mint (green) */
28
+ --color-mint-50: #edfdf4;
29
+ --color-mint-100: #d4f9e4;
30
+ --color-mint-500: #45be7a;
31
+ --color-mint-600: #33a363;
32
+
33
+ /* Warning: Amber */
34
+ --color-amber-50: #fffbeb;
35
+ --color-amber-100: #fef4de;
36
+ --color-amber-500: #f0a324;
37
+ --color-amber-600: #db8316;
38
+
39
+ /* Destructive: Coral (red) */
40
+ --color-coral-50: #fef5f4;
41
+ --color-coral-100: #fee9e7;
42
+ --color-coral-500: #ed5f52;
43
+ --color-coral-600: #d94335;
44
+
45
+ /* Info: Icy Blue */
46
+ --color-icy-50: #f0f9ff;
47
+ --color-icy-100: #e3f4fb;
48
+ --color-icy-500: #3db0e8;
49
+ --color-icy-600: #2890c8;
50
+
51
+ /* Neutral: Slate */
52
+ --color-slate-50: #f8fafc;
53
+ --color-slate-100: #f1f5f9;
54
+ --color-slate-200: #e2e8f0;
55
+ --color-slate-300: #cbd5e1;
56
+ --color-slate-400: #94a3b8;
57
+ --color-slate-500: #64748b;
58
+ --color-slate-600: #475569;
59
+ --color-slate-700: #334155;
60
+ --color-slate-800: #1e293b;
61
+ --color-slate-900: #0f172a;
62
+
63
+ /* Themeable typography - these can be overridden per-theme */
64
+ --font-heading: var(--font-serif);
65
+ --font-body: var(--font-sans);
66
+
67
+ /* Themeable primary color scale - override these in theme files */
68
+ --color-primary-50: var(--color-mauve-50);
69
+ --color-primary-100: var(--color-mauve-100);
70
+ --color-primary-200: var(--color-mauve-200);
71
+ --color-primary-400: var(--color-mauve-400);
72
+ --color-primary-500: var(--color-mauve-500);
73
+ --color-primary-600: var(--color-mauve-600);
74
+ --color-primary-700: var(--color-mauve-700);
75
+
76
+ /* Footer branding - override in theme files */
77
+ --footer-brand-name: 'lazyslides';
78
+ /* --footer-logo-url: url('/path/to/logo.svg'); - set in theme to override default gradient */
79
+
80
+ /* Semantic mappings */
81
+ --color-background: #ffffff;
82
+ --color-surface: var(--color-slate-50);
83
+ --color-surface-alt: var(--color-slate-100);
84
+ --color-border: var(--color-slate-200);
85
+ --color-border-strong: var(--color-slate-300);
86
+
87
+ --color-text: var(--color-slate-700);
88
+ --color-text-heading: var(--color-slate-900);
89
+ --color-text-muted: var(--color-slate-500);
90
+ --color-text-subtle: var(--color-slate-400);
91
+
92
+ --color-primary: var(--color-primary-500);
93
+ --color-primary-hover: var(--color-primary-600);
94
+ --color-primary-dark: var(--color-primary-700);
95
+
96
+ --color-success: var(--color-mint-500);
97
+ --color-warning: var(--color-amber-500);
98
+ --color-error: var(--color-coral-500);
99
+ --color-info: var(--color-icy-500);
100
+ }
101
+
102
+ /* ============================================
103
+ BASE STYLES
104
+ Core layout for html/body (background set by theme)
105
+ ============================================ */
106
+
107
+ html, body {
108
+ margin: 0;
109
+ padding: 0;
110
+ width: 100%;
111
+ height: 100%;
112
+ }
113
+
114
+ /* ============================================
115
+ REVEAL.JS CORE VARIABLES
116
+ ============================================ */
117
+
118
+ .reveal {
119
+ /* Slides themselves are white cards on the theater background */
120
+ --r-background-color: transparent;
121
+ --r-main-color: var(--color-text);
122
+ --r-heading-color: var(--color-text-heading);
123
+
124
+ --r-main-font: var(--font-body);
125
+ --r-main-font-size: 14px;
126
+ --r-heading-font: var(--font-heading);
127
+ --r-code-font: var(--font-mono);
128
+
129
+ --r-link-color: var(--color-primary);
130
+ --r-link-color-hover: var(--color-primary-dark);
131
+
132
+ --r-selection-background-color: var(--color-primary);
133
+ --r-selection-color: white;
134
+
135
+ /* Slide padding */
136
+ --slide-padding: 40px;
137
+ }
138
+
139
+ /* Make the reveal viewport transparent so theater background shows */
140
+ .reveal-viewport {
141
+ background: transparent !important;
142
+ }
143
+
144
+ /* ============================================
145
+ SLIDE CARD STYLING
146
+ Each slide is a white card with rounded corners
147
+ and subtle shadow, floating on theater background
148
+ ============================================ */
149
+
150
+ .reveal .slides {
151
+ /* Reveal.js margin config handles viewport spacing */
152
+ }
153
+
154
+ .reveal .slides > section,
155
+ .reveal .slides > section > section {
156
+ /* White card background */
157
+ background: #ffffff;
158
+
159
+ /* Rounded corners */
160
+ border-radius: 6px;
161
+
162
+ /* Subtle border for crisp edge */
163
+ border: 1px solid var(--color-slate-200);
164
+
165
+ /* Soft shadow for depth */
166
+ box-shadow:
167
+ 0 2px 3px -1px rgba(0, 0, 0, 0.07),
168
+ 0 5px 10px -3px rgba(0, 0, 0, 0.05);
169
+
170
+ /* Clip content that overflows slide boundaries */
171
+ overflow: hidden;
172
+ }
173
+
174
+ /* ============================================
175
+ BASE TYPOGRAPHY
176
+ ============================================ */
177
+
178
+ .reveal h1,
179
+ .reveal h2,
180
+ .reveal h3,
181
+ .reveal h4 {
182
+ font-family: var(--font-heading);
183
+ font-weight: 600;
184
+ letter-spacing: -0.02em;
185
+ text-transform: none;
186
+ color: var(--color-text-heading);
187
+ line-height: 1.2;
188
+ margin: 0 0 0.5em 0;
189
+ }
190
+
191
+ .reveal h1 {
192
+ font-size: 36px;
193
+ font-weight: 700;
194
+ }
195
+
196
+ .reveal h2 {
197
+ font-size: 24px;
198
+ }
199
+
200
+ .reveal h3 {
201
+ font-size: 18px;
202
+ }
203
+
204
+ .reveal h4 {
205
+ font-size: 14px;
206
+ }
207
+
208
+ .reveal p,
209
+ .reveal li {
210
+ font-family: var(--font-body);
211
+ font-size: 13px;
212
+ line-height: 1.6;
213
+ color: var(--color-text);
214
+ }
215
+
216
+ .reveal ul {
217
+ display: block;
218
+ text-align: left;
219
+ margin: 0;
220
+ padding-left: 1.5em;
221
+ list-style-type: disc;
222
+ }
223
+
224
+ .reveal ol {
225
+ display: block;
226
+ text-align: left;
227
+ margin: 0;
228
+ padding-left: 1.5em;
229
+ list-style-type: decimal;
230
+ }
231
+
232
+ .reveal li {
233
+ margin-bottom: 8px;
234
+ }
235
+
236
+ .reveal ul li::marker {
237
+ color: var(--color-primary-500);
238
+ }
239
+
240
+ .reveal ol li::marker {
241
+ font-weight: 600;
242
+ color: var(--color-primary-600);
243
+ }
244
+
245
+ /* Nested lists */
246
+ .reveal ul ul {
247
+ margin-top: 6px;
248
+ margin-bottom: 0;
249
+ padding-left: 2em;
250
+ list-style-type: circle;
251
+ }
252
+
253
+ .reveal ul ul li {
254
+ font-size: 12px;
255
+ margin-bottom: 4px;
256
+ }
257
+
258
+ .reveal ul ul li::marker {
259
+ color: var(--color-slate-400);
260
+ }
261
+
262
+ .reveal strong {
263
+ font-weight: 600;
264
+ color: var(--color-text-heading);
265
+ }
266
+
267
+ .reveal em {
268
+ font-style: italic;
269
+ }
270
+
271
+ .reveal p {
272
+ margin-bottom: 12px;
273
+ }
274
+
275
+ /* ============================================
276
+ CODE BLOCKS
277
+ ============================================ */
278
+
279
+ .reveal pre {
280
+ width: 100%;
281
+ font-size: 11px;
282
+ margin: 12px 0;
283
+ box-shadow: none;
284
+ }
285
+
286
+ .reveal code {
287
+ font-family: var(--font-mono);
288
+ }
289
+
290
+ .reveal pre code {
291
+ padding: 12px;
292
+ max-height: 250px;
293
+ border-radius: 4px;
294
+ background: var(--color-slate-100);
295
+ border: 1px solid var(--color-slate-200);
296
+ }
297
+
298
+ .reveal p code,
299
+ .reveal li code {
300
+ background: var(--color-slate-100);
301
+ padding: 1px 4px;
302
+ border-radius: 2px;
303
+ font-size: 0.9em;
304
+ color: var(--color-primary-700);
305
+ }
306
+
307
+ /* ============================================
308
+ SLIDE: TITLE
309
+ Opening slide with logo, title, subtitle
310
+ ============================================ */
311
+
312
+ .reveal .slides section.slide-title {
313
+ display: flex !important;
314
+ flex-direction: column;
315
+ justify-content: center;
316
+ align-items: center;
317
+ text-align: center;
318
+ height: 100%;
319
+ padding: var(--slide-padding);
320
+ }
321
+
322
+ .reveal .slides section.slide-title .logo {
323
+ width: 36px;
324
+ height: 36px;
325
+ background: linear-gradient(135deg, var(--color-primary-500) 0%, var(--color-primary-600) 100%);
326
+ border-radius: 8px;
327
+ display: flex;
328
+ align-items: center;
329
+ justify-content: center;
330
+ margin-bottom: 20px;
331
+ box-shadow: 0 4px 12px rgba(193, 111, 235, 0.3);
332
+ }
333
+
334
+ .reveal .slides section.slide-title .logo svg {
335
+ width: 20px;
336
+ height: 20px;
337
+ color: white;
338
+ }
339
+
340
+ .reveal .slides section.slide-title h1 {
341
+ font-size: 36px;
342
+ margin-bottom: 8px;
343
+ }
344
+
345
+ .reveal .slides section.slide-title .subtitle {
346
+ font-family: var(--font-body);
347
+ font-size: 16px;
348
+ font-weight: 500;
349
+ color: var(--color-primary-600);
350
+ margin-bottom: 20px;
351
+ }
352
+
353
+ .reveal .slides section.slide-title .decorative-line {
354
+ width: 50px;
355
+ height: 2px;
356
+ background: linear-gradient(90deg, var(--color-primary-400), var(--color-primary-600));
357
+ border-radius: 1px;
358
+ margin-bottom: 20px;
359
+ }
360
+
361
+ .reveal .slides section.slide-title .author {
362
+ font-family: var(--font-body);
363
+ font-size: 10px;
364
+ color: var(--color-text-muted);
365
+ }
366
+
367
+ /* ============================================
368
+ SLIDE: SECTION
369
+ Chapter divider
370
+ ============================================ */
371
+
372
+ .reveal .slides section.slide-section {
373
+ display: flex !important;
374
+ flex-direction: column;
375
+ justify-content: center;
376
+ align-items: center;
377
+ text-align: center;
378
+ height: 100%;
379
+ padding: var(--slide-padding);
380
+ }
381
+
382
+ .reveal .slides section.slide-section h2 {
383
+ font-size: 32px;
384
+ color: var(--color-primary-700);
385
+ margin-bottom: 8px;
386
+ }
387
+
388
+ .reveal .slides section.slide-section .subtitle {
389
+ font-family: var(--font-body);
390
+ font-size: 14px;
391
+ color: var(--color-text-muted);
392
+ }
393
+
394
+ /* ============================================
395
+ SLIDE: CONTENT
396
+ Headline + bullet points
397
+ ============================================ */
398
+
399
+ .reveal .slides section.slide-content {
400
+ display: flex !important;
401
+ flex-direction: column;
402
+ justify-content: flex-start;
403
+ align-items: stretch;
404
+ text-align: left;
405
+ height: 100%;
406
+ padding: 0;
407
+ }
408
+
409
+ .reveal .slides section.slide-content .slide-body {
410
+ flex: 1;
411
+ padding: var(--slide-padding);
412
+ padding-bottom: 12px;
413
+ min-height: 0;
414
+ }
415
+
416
+ .reveal .slides section.slide-content .slide-header {
417
+ margin-bottom: 20px;
418
+ padding-bottom: 10px;
419
+ border-bottom: 2px solid var(--color-primary-500);
420
+ }
421
+
422
+ .reveal .slides section.slide-content .slide-header h2 {
423
+ margin-bottom: 0;
424
+ }
425
+
426
+ .reveal .slides section.slide-content .slide-header .lead {
427
+ font-size: 12px;
428
+ color: var(--color-text-muted);
429
+ margin-top: 6px;
430
+ }
431
+
432
+ .reveal .slides section.slide-content .slide-body ul,
433
+ .reveal .slides section.slide-content .slide-body ol {
434
+ flex: 1;
435
+ }
436
+
437
+ .reveal .slides section.slide-content li {
438
+ font-size: 14px;
439
+ margin-bottom: 10px;
440
+ line-height: 1.5;
441
+ }
442
+
443
+ /* Paragraph text in content slides (below list items) */
444
+ .reveal .slides section.slide-content .slide-body > p:not(.lead) {
445
+ font-size: 14px;
446
+ margin-top: 0;
447
+ margin-bottom: 12px;
448
+ }
449
+
450
+ /* ============================================
451
+ SLIDE: CENTER
452
+ Centered statement or image
453
+ ============================================ */
454
+
455
+ .reveal .slides section.slide-center {
456
+ display: flex !important;
457
+ flex-direction: column;
458
+ justify-content: flex-start;
459
+ align-items: stretch;
460
+ text-align: center;
461
+ height: 100%;
462
+ padding: 0;
463
+ }
464
+
465
+ .reveal .slides section.slide-center .slide-body {
466
+ flex: 1;
467
+ padding: var(--slide-padding);
468
+ padding-bottom: 12px;
469
+ display: flex;
470
+ flex-direction: column;
471
+ justify-content: center;
472
+ align-items: center;
473
+ overflow: hidden;
474
+ min-height: 0;
475
+ }
476
+
477
+ .reveal .slides section.slide-center h2 {
478
+ margin-bottom: 12px;
479
+ }
480
+
481
+ .reveal .slides section.slide-center p {
482
+ max-width: 450px;
483
+ font-size: 16px;
484
+ line-height: 1.6;
485
+ }
486
+
487
+ .reveal .slides section.slide-center img {
488
+ max-height: 100%;
489
+ max-width: 100%;
490
+ object-fit: contain;
491
+ border-radius: 6px;
492
+ margin-top: 16px;
493
+ flex-shrink: 1;
494
+ }
495
+
496
+ /* ============================================
497
+ SLIDE: HERO
498
+ Full-bleed background with overlay
499
+ Note: Hero slides break out of the card frame
500
+ ============================================ */
501
+
502
+ .reveal .slides section.slide-hero {
503
+ display: flex !important;
504
+ flex-direction: column;
505
+ justify-content: flex-start;
506
+ align-items: stretch;
507
+ text-align: center;
508
+ height: 100%;
509
+ padding: 0;
510
+ color: white;
511
+ /* Override card styling for full-bleed */
512
+ border-radius: 6px;
513
+ overflow: hidden;
514
+ /* Fallback background for slides without image */
515
+ background: var(--color-slate-600);
516
+ }
517
+
518
+ .reveal .slides section.slide-hero::before {
519
+ content: '';
520
+ position: absolute;
521
+ top: 0;
522
+ left: 0;
523
+ right: 0;
524
+ bottom: 0;
525
+ background: rgba(15, 23, 42, 0.6);
526
+ z-index: 1;
527
+ }
528
+
529
+ .reveal .slides section.slide-hero > * {
530
+ position: relative;
531
+ z-index: 2;
532
+ }
533
+
534
+ .reveal .slides section.slide-hero .slide-body {
535
+ flex: 1;
536
+ padding: var(--slide-padding);
537
+ padding-bottom: 12px;
538
+ display: flex;
539
+ flex-direction: column;
540
+ justify-content: center;
541
+ align-items: center;
542
+ min-height: 0;
543
+ }
544
+
545
+ .reveal .slides section.slide-hero h1 {
546
+ color: white;
547
+ text-shadow: 0 2px 10px rgba(0, 0, 0, 0.4);
548
+ margin-bottom: 12px;
549
+ }
550
+
551
+ .reveal .slides section.slide-hero p {
552
+ color: rgba(255, 255, 255, 0.9);
553
+ font-size: 16px;
554
+ max-width: 400px;
555
+ }
556
+
557
+ .reveal .slides section.slide-hero .text-box {
558
+ background: rgba(255, 255, 255, 0.97);
559
+ padding: 16px 20px;
560
+ border-radius: 6px;
561
+ text-align: left;
562
+ max-width: 300px;
563
+ margin-top: 20px;
564
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
565
+ border-left: 3px solid var(--color-primary-500);
566
+ }
567
+
568
+ .reveal .slides section.slide-hero .text-box h3 {
569
+ color: var(--color-primary-700);
570
+ font-size: 14px;
571
+ margin-bottom: 6px;
572
+ }
573
+
574
+ .reveal .slides section.slide-hero .text-box p,
575
+ .reveal .slides section.slide-hero .text-box li {
576
+ color: var(--color-text);
577
+ font-size: 11px;
578
+ }
579
+
580
+ /* ============================================
581
+ SLIDE: METRICS
582
+ Key statistics display
583
+ ============================================ */
584
+
585
+ .reveal .slides section.slide-metrics {
586
+ display: flex !important;
587
+ flex-direction: column;
588
+ justify-content: flex-start;
589
+ align-items: stretch;
590
+ height: 100%;
591
+ padding: 0;
592
+ }
593
+
594
+ .reveal .slides section.slide-metrics .slide-body {
595
+ flex: 1;
596
+ padding: var(--slide-padding);
597
+ padding-bottom: 12px;
598
+ min-height: 0;
599
+ }
600
+
601
+ .reveal .slides section.slide-metrics .slide-header {
602
+ text-align: center;
603
+ margin-bottom: 24px;
604
+ }
605
+
606
+ .reveal .slides section.slide-metrics .metrics-grid {
607
+ display: grid;
608
+ gap: 16px;
609
+ flex: 1;
610
+ align-content: center;
611
+ }
612
+
613
+ .reveal .slides section.slide-metrics .metrics-grid.cols-2 {
614
+ grid-template-columns: repeat(2, 1fr);
615
+ }
616
+
617
+ .reveal .slides section.slide-metrics .metrics-grid.cols-3 {
618
+ grid-template-columns: repeat(3, 1fr);
619
+ }
620
+
621
+ .reveal .slides section.slide-metrics .metrics-grid.cols-4 {
622
+ grid-template-columns: repeat(4, 1fr);
623
+ }
624
+
625
+ .reveal .slides section.slide-metrics .metric-card {
626
+ background: var(--color-slate-50);
627
+ border: 1px solid var(--color-slate-200);
628
+ border-radius: 8px;
629
+ padding: 24px 16px;
630
+ text-align: center;
631
+ }
632
+
633
+ .reveal .slides section.slide-metrics .metric-card .value {
634
+ font-family: var(--font-heading);
635
+ font-size: 32px;
636
+ font-weight: 700;
637
+ color: var(--color-slate-800);
638
+ line-height: 1;
639
+ margin-bottom: 10px;
640
+ }
641
+
642
+ .reveal .slides section.slide-metrics .metric-card .value.mint { color: var(--color-mint-500); }
643
+ .reveal .slides section.slide-metrics .metric-card .value.coral { color: var(--color-coral-500); }
644
+ .reveal .slides section.slide-metrics .metric-card .value.icy { color: var(--color-icy-500); }
645
+ .reveal .slides section.slide-metrics .metric-card .value.amber { color: var(--color-amber-500); }
646
+
647
+ .reveal .slides section.slide-metrics .metric-card .label {
648
+ font-family: var(--font-body);
649
+ font-size: 9px;
650
+ font-weight: 600;
651
+ color: var(--color-text-muted);
652
+ text-transform: uppercase;
653
+ letter-spacing: 0.08em;
654
+ }
655
+
656
+ .reveal .slides section.slide-metrics .metric-card .context {
657
+ font-family: var(--font-body);
658
+ font-size: 10px;
659
+ line-height: 1.5;
660
+ color: var(--color-text-subtle);
661
+ margin-top: 6px;
662
+ }
663
+
664
+ /* ============================================
665
+ SLIDE: COMPARISON
666
+ Before/after two-column table
667
+ ============================================ */
668
+
669
+ .reveal .slides section.slide-comparison {
670
+ display: flex !important;
671
+ flex-direction: column;
672
+ justify-content: flex-start;
673
+ align-items: stretch;
674
+ height: 100%;
675
+ padding: 0;
676
+ }
677
+
678
+ .reveal .slides section.slide-comparison .slide-body {
679
+ flex: 1;
680
+ padding: var(--slide-padding);
681
+ padding-bottom: 12px;
682
+ min-height: 0;
683
+ }
684
+
685
+ .reveal .slides section.slide-comparison .slide-header {
686
+ text-align: center;
687
+ margin-bottom: 20px;
688
+ }
689
+
690
+ .reveal .slides section.slide-comparison table {
691
+ width: 100%;
692
+ table-layout: fixed;
693
+ border-collapse: separate;
694
+ border-spacing: 0;
695
+ flex: 1;
696
+ }
697
+
698
+ .reveal .slides section.slide-comparison th {
699
+ width: 50%;
700
+ padding: 12px 16px;
701
+ font-family: var(--font-body);
702
+ font-size: 10px;
703
+ font-weight: 600;
704
+ text-transform: uppercase;
705
+ letter-spacing: 0.05em;
706
+ }
707
+
708
+ .reveal .slides section.slide-comparison th:first-child {
709
+ background: var(--color-slate-200);
710
+ color: var(--color-text-muted);
711
+ border-radius: 6px 0 0 0;
712
+ text-align: left;
713
+ }
714
+
715
+ .reveal .slides section.slide-comparison th:last-child {
716
+ background: var(--color-primary-600);
717
+ color: white;
718
+ border-radius: 0 6px 0 0;
719
+ text-align: left;
720
+ }
721
+
722
+ .reveal .slides section.slide-comparison td {
723
+ padding: 12px 16px;
724
+ font-family: var(--font-body);
725
+ font-size: 14px;
726
+ border-bottom: 1px solid var(--color-slate-200);
727
+ vertical-align: middle;
728
+ text-align: left;
729
+ }
730
+
731
+ .reveal .slides section.slide-comparison td:first-child {
732
+ background: var(--color-slate-50);
733
+ color: var(--color-text-muted);
734
+ }
735
+
736
+ .reveal .slides section.slide-comparison td:last-child {
737
+ background: var(--color-primary-50);
738
+ color: var(--color-text);
739
+ }
740
+
741
+ .reveal .slides section.slide-comparison tr:last-child td:first-child {
742
+ border-radius: 0 0 0 6px;
743
+ border-bottom: none;
744
+ }
745
+
746
+ .reveal .slides section.slide-comparison tr:last-child td:last-child {
747
+ border-radius: 0 0 6px 0;
748
+ border-bottom: none;
749
+ }
750
+
751
+ .reveal .slides section.slide-comparison .icon-bad {
752
+ color: var(--color-coral-500);
753
+ font-weight: 700;
754
+ margin-right: 6px;
755
+ }
756
+
757
+ .reveal .slides section.slide-comparison .icon-good {
758
+ color: var(--color-mint-500);
759
+ font-weight: 700;
760
+ margin-right: 6px;
761
+ }
762
+
763
+ /* Highlight left column instead of right */
764
+ .reveal .slides section.slide-comparison.highlight-left th:first-child {
765
+ background: var(--color-primary-600);
766
+ color: white;
767
+ }
768
+ .reveal .slides section.slide-comparison.highlight-left th:last-child {
769
+ background: var(--color-slate-200);
770
+ color: var(--color-text-muted);
771
+ }
772
+ .reveal .slides section.slide-comparison.highlight-left td:first-child {
773
+ background: var(--color-primary-50);
774
+ color: var(--color-text);
775
+ }
776
+ .reveal .slides section.slide-comparison.highlight-left td:last-child {
777
+ background: var(--color-slate-50);
778
+ color: var(--color-text-muted);
779
+ }
780
+
781
+ /* No highlight - neutral colors for both columns */
782
+ .reveal .slides section.slide-comparison.highlight-none th:first-child,
783
+ .reveal .slides section.slide-comparison.highlight-none th:last-child {
784
+ background: var(--color-slate-200);
785
+ color: var(--color-text-muted);
786
+ }
787
+ .reveal .slides section.slide-comparison.highlight-none td:first-child,
788
+ .reveal .slides section.slide-comparison.highlight-none td:last-child {
789
+ background: var(--color-slate-50);
790
+ color: var(--color-text);
791
+ }
792
+
793
+ /* ============================================
794
+ SLIDE: TABLE
795
+ Multi-column data table with neutral styling
796
+ ============================================ */
797
+
798
+ .reveal .slides section.slide-table {
799
+ display: flex !important;
800
+ flex-direction: column;
801
+ justify-content: flex-start;
802
+ align-items: stretch;
803
+ height: 100%;
804
+ padding: 0;
805
+ }
806
+
807
+ .reveal .slides section.slide-table .slide-body {
808
+ flex: 1;
809
+ padding: var(--slide-padding);
810
+ padding-bottom: 12px;
811
+ min-height: 0;
812
+ }
813
+
814
+ .reveal .slides section.slide-table .slide-header {
815
+ text-align: center;
816
+ margin-bottom: 20px;
817
+ }
818
+
819
+ .reveal .slides section.slide-table table {
820
+ width: 100%;
821
+ table-layout: fixed;
822
+ border-collapse: separate;
823
+ border-spacing: 0;
824
+ flex: 1;
825
+ }
826
+
827
+ .reveal .slides section.slide-table th {
828
+ padding: 10px 12px;
829
+ font-family: var(--font-body);
830
+ font-size: 10px;
831
+ font-weight: 600;
832
+ text-transform: uppercase;
833
+ letter-spacing: 0.05em;
834
+ background: var(--color-slate-200);
835
+ color: var(--color-text-heading);
836
+ text-align: left;
837
+ border-bottom: 2px solid var(--color-slate-300);
838
+ }
839
+
840
+ .reveal .slides section.slide-table th:first-child {
841
+ border-radius: 6px 0 0 0;
842
+ }
843
+
844
+ .reveal .slides section.slide-table th:last-child {
845
+ border-radius: 0 6px 0 0;
846
+ }
847
+
848
+ .reveal .slides section.slide-table td {
849
+ padding: 10px 12px;
850
+ font-family: var(--font-body);
851
+ font-size: 12px;
852
+ background: var(--color-slate-50);
853
+ color: var(--color-text);
854
+ border-bottom: 1px solid var(--color-slate-200);
855
+ vertical-align: middle;
856
+ text-align: left;
857
+ }
858
+
859
+ .reveal .slides section.slide-table tr:nth-child(even) td {
860
+ background: white;
861
+ }
862
+
863
+ .reveal .slides section.slide-table tr:last-child td {
864
+ border-bottom: none;
865
+ }
866
+
867
+ .reveal .slides section.slide-table tr:last-child td:first-child {
868
+ border-radius: 0 0 0 6px;
869
+ }
870
+
871
+ .reveal .slides section.slide-table tr:last-child td:last-child {
872
+ border-radius: 0 0 6px 0;
873
+ }
874
+
875
+ /* ============================================
876
+ SLIDE: COLUMNS
877
+ Two-column layout
878
+ ============================================ */
879
+
880
+ .reveal .slides section.slide-columns {
881
+ display: flex !important;
882
+ flex-direction: column;
883
+ justify-content: flex-start;
884
+ align-items: stretch;
885
+ height: 100%;
886
+ padding: 0;
887
+ text-align: left;
888
+ }
889
+
890
+ .reveal .slides section.slide-columns .slide-body {
891
+ flex: 1;
892
+ padding: var(--slide-padding);
893
+ padding-bottom: 12px;
894
+ min-height: 0;
895
+ }
896
+
897
+ .reveal .slides section.slide-columns .slide-header {
898
+ margin-bottom: 20px;
899
+ padding-bottom: 10px;
900
+ border-bottom: 2px solid var(--color-primary-500);
901
+ }
902
+
903
+ .reveal .slides section.slide-columns .columns {
904
+ display: grid;
905
+ grid-template-columns: 1fr 1fr;
906
+ gap: 32px;
907
+ flex: 1;
908
+ }
909
+
910
+ .reveal .slides section.slide-columns .column h3 {
911
+ color: var(--color-primary-700);
912
+ margin-bottom: 8px;
913
+ }
914
+
915
+ .reveal .slides section.slide-columns .column p {
916
+ margin-bottom: 10px;
917
+ }
918
+
919
+ /* ============================================
920
+ SLIDE: QUOTE
921
+ Testimonial or statement
922
+ ============================================ */
923
+
924
+ .reveal .slides section.slide-quote {
925
+ display: flex !important;
926
+ flex-direction: column;
927
+ justify-content: flex-start;
928
+ align-items: stretch;
929
+ text-align: center;
930
+ height: 100%;
931
+ padding: 0;
932
+ }
933
+
934
+ .reveal .slides section.slide-quote .slide-body {
935
+ flex: 1;
936
+ padding: var(--slide-padding);
937
+ padding-bottom: 12px;
938
+ display: flex;
939
+ flex-direction: column;
940
+ justify-content: center;
941
+ align-items: center;
942
+ min-height: 0;
943
+ }
944
+
945
+ .reveal .slides section.slide-quote .quote-mark {
946
+ font-family: var(--font-heading);
947
+ font-size: 100px;
948
+ color: var(--color-primary-200);
949
+ line-height: 0.5;
950
+ margin-bottom: 10px;
951
+ }
952
+
953
+ .reveal .slides section.slide-quote blockquote {
954
+ font-family: var(--font-heading);
955
+ font-size: 20px;
956
+ font-style: italic;
957
+ color: var(--color-text);
958
+ max-width: 450px;
959
+ line-height: 1.5;
960
+ margin: 0 0 16px 0;
961
+ }
962
+
963
+ .reveal .slides section.slide-quote .attribution {
964
+ font-family: var(--font-body);
965
+ font-size: 11px;
966
+ color: var(--color-text-muted);
967
+ }
968
+
969
+ .reveal .slides section.slide-quote .attribution strong {
970
+ color: var(--color-text-heading);
971
+ display: block;
972
+ margin-bottom: 4px;
973
+ }
974
+
975
+ /* ============================================
976
+ SLIDE: IMAGE OVERLAY
977
+ Background image with positioned text box
978
+ ============================================ */
979
+
980
+ .reveal .slides section.slide-image-overlay {
981
+ display: flex !important;
982
+ flex-direction: column;
983
+ height: 100%;
984
+ padding: 0;
985
+ border-radius: 6px;
986
+ overflow: hidden;
987
+ }
988
+
989
+ .reveal .slides section.slide-image-overlay::before {
990
+ content: '';
991
+ position: absolute;
992
+ top: 0;
993
+ left: 0;
994
+ right: 0;
995
+ bottom: 0;
996
+ background: rgba(15, 23, 42, 0.4);
997
+ z-index: 1;
998
+ }
999
+
1000
+ .reveal .slides section.slide-image-overlay .slide-body {
1001
+ flex: 1;
1002
+ position: relative;
1003
+ }
1004
+
1005
+ .reveal .slides section.slide-image-overlay .overlay-box {
1006
+ position: absolute;
1007
+ z-index: 2;
1008
+ background: rgba(255, 255, 255, 0.97);
1009
+ padding: 16px 20px;
1010
+ border-radius: 6px;
1011
+ max-width: 250px;
1012
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
1013
+ border-left: 3px solid var(--color-primary-500);
1014
+ }
1015
+
1016
+ .reveal .slides section.slide-image-overlay .overlay-box.top-left {
1017
+ top: 40px;
1018
+ left: 40px;
1019
+ }
1020
+
1021
+ .reveal .slides section.slide-image-overlay .overlay-box.top-right {
1022
+ top: 40px;
1023
+ right: 40px;
1024
+ }
1025
+
1026
+ .reveal .slides section.slide-image-overlay .overlay-box.bottom-left {
1027
+ bottom: 40px;
1028
+ left: 40px;
1029
+ }
1030
+
1031
+ .reveal .slides section.slide-image-overlay .overlay-box.bottom-right {
1032
+ bottom: 40px;
1033
+ right: 40px;
1034
+ }
1035
+
1036
+ .reveal .slides section.slide-image-overlay .overlay-box h3 {
1037
+ color: var(--color-primary-700);
1038
+ font-size: 16px;
1039
+ margin-bottom: 8px;
1040
+ }
1041
+
1042
+ .reveal .slides section.slide-image-overlay .overlay-box p {
1043
+ font-size: 11px;
1044
+ margin-bottom: 8px;
1045
+ }
1046
+
1047
+ .reveal .slides section.slide-image-overlay .overlay-box p:last-child {
1048
+ margin-bottom: 0;
1049
+ }
1050
+
1051
+ .reveal .slides section.slide-image-overlay .overlay-box li {
1052
+ font-size: 10px;
1053
+ }
1054
+
1055
+ /* ============================================
1056
+ SLIDE: CODE
1057
+ Code snippet display
1058
+ ============================================ */
1059
+
1060
+ .reveal .slides section.slide-code {
1061
+ display: flex !important;
1062
+ flex-direction: column;
1063
+ justify-content: flex-start;
1064
+ align-items: stretch;
1065
+ height: 100%;
1066
+ padding: 0;
1067
+ text-align: left;
1068
+ }
1069
+
1070
+ .reveal .slides section.slide-code .slide-body {
1071
+ flex: 1;
1072
+ padding: var(--slide-padding);
1073
+ padding-bottom: 12px;
1074
+ min-height: 0;
1075
+ }
1076
+
1077
+ .reveal .slides section.slide-code .slide-header {
1078
+ margin-bottom: 16px;
1079
+ }
1080
+
1081
+ .reveal .slides section.slide-code pre {
1082
+ flex: 1;
1083
+ margin: 0;
1084
+ }
1085
+
1086
+ .reveal .slides section.slide-code .caption {
1087
+ font-size: 9px;
1088
+ color: var(--color-text-muted);
1089
+ margin-top: 8px;
1090
+ text-align: center;
1091
+ }
1092
+
1093
+ /* ============================================
1094
+ SLIDE: TIMELINE
1095
+ Horizontal axis with alternating above/below event cards
1096
+ ============================================ */
1097
+
1098
+ .reveal .slides section.slide-timeline {
1099
+ display: flex !important;
1100
+ flex-direction: column;
1101
+ justify-content: flex-start;
1102
+ align-items: stretch;
1103
+ height: 100%;
1104
+ padding: 0;
1105
+ }
1106
+
1107
+ .reveal .slides section.slide-timeline .slide-body {
1108
+ flex: 1;
1109
+ padding: var(--slide-padding);
1110
+ padding-bottom: 12px;
1111
+ display: flex;
1112
+ flex-direction: column;
1113
+ min-height: 0;
1114
+ }
1115
+
1116
+ .reveal .slides section.slide-timeline .slide-header {
1117
+ margin-bottom: 20px;
1118
+ padding-bottom: 10px;
1119
+ border-bottom: 2px solid var(--color-primary-500);
1120
+ }
1121
+
1122
+ .reveal .slides section.slide-timeline .timeline-wrapper {
1123
+ flex: 1;
1124
+ position: relative;
1125
+ display: flex;
1126
+ flex-direction: column;
1127
+ justify-content: center;
1128
+ }
1129
+
1130
+ /* The horizontal axis line - centered vertically */
1131
+ .reveal .slides section.slide-timeline .timeline-axis {
1132
+ position: absolute;
1133
+ left: 0;
1134
+ right: 20px;
1135
+ top: 50%;
1136
+ height: 3px;
1137
+ background: var(--color-slate-200);
1138
+ transform: translateY(-50%);
1139
+ z-index: 1;
1140
+ }
1141
+
1142
+ /* Arrow at the end of axis */
1143
+ .reveal .slides section.slide-timeline .timeline-axis::after {
1144
+ content: '';
1145
+ position: absolute;
1146
+ right: -12px;
1147
+ top: 50%;
1148
+ transform: translateY(-50%);
1149
+ width: 0;
1150
+ height: 0;
1151
+ border-top: 8px solid transparent;
1152
+ border-bottom: 8px solid transparent;
1153
+ border-left: 12px solid var(--color-slate-300);
1154
+ }
1155
+
1156
+ /* Container for events - horizontal flex */
1157
+ .reveal .slides section.slide-timeline .timeline-events {
1158
+ display: flex;
1159
+ justify-content: space-around;
1160
+ align-items: stretch;
1161
+ height: 100%;
1162
+ padding: 0 10px;
1163
+ position: relative;
1164
+ z-index: 2;
1165
+ }
1166
+
1167
+ /* Individual event - positioned column */
1168
+ .reveal .slides section.slide-timeline .timeline-event {
1169
+ position: relative;
1170
+ flex: 1;
1171
+ max-width: 160px;
1172
+ display: flex;
1173
+ flex-direction: column;
1174
+ align-items: center;
1175
+ }
1176
+
1177
+ /* The dot - absolutely positioned at vertical center (on the axis) */
1178
+ .reveal .slides section.slide-timeline .event-dot {
1179
+ position: absolute;
1180
+ top: 50%;
1181
+ left: 50%;
1182
+ transform: translate(-50%, -50%);
1183
+ width: 14px;
1184
+ height: 14px;
1185
+ background: white;
1186
+ border: 3px solid var(--color-primary-500);
1187
+ border-radius: 50%;
1188
+ z-index: 3;
1189
+ }
1190
+
1191
+ /* Connector line from dot to card */
1192
+ .reveal .slides section.slide-timeline .event-connector {
1193
+ position: absolute;
1194
+ left: 50%;
1195
+ width: 2px;
1196
+ background: var(--color-slate-300);
1197
+ transform: translateX(-50%);
1198
+ z-index: 2;
1199
+ }
1200
+
1201
+ /* Card styling */
1202
+ .reveal .slides section.slide-timeline .event-card {
1203
+ position: absolute;
1204
+ left: 50%;
1205
+ transform: translateX(-50%);
1206
+ background: var(--color-slate-50);
1207
+ border: 1px solid var(--color-slate-200);
1208
+ border-radius: 6px;
1209
+ padding: 12px 14px;
1210
+ text-align: center;
1211
+ width: 140px;
1212
+ z-index: 4;
1213
+ }
1214
+
1215
+ /* ABOVE positioning (odd events: 1, 3, 5...) */
1216
+ .reveal .slides section.slide-timeline .timeline-event.above .event-connector {
1217
+ top: calc(50% - 7px);
1218
+ bottom: auto;
1219
+ height: 50px;
1220
+ transform: translateX(-50%) translateY(-100%);
1221
+ }
1222
+
1223
+ .reveal .slides section.slide-timeline .timeline-event.above .event-card {
1224
+ bottom: calc(50% + 50px + 7px);
1225
+ top: auto;
1226
+ }
1227
+
1228
+ /* BELOW positioning (even events: 2, 4, 6...) */
1229
+ .reveal .slides section.slide-timeline .timeline-event.below .event-connector {
1230
+ top: calc(50% + 7px);
1231
+ height: 50px;
1232
+ }
1233
+
1234
+ .reveal .slides section.slide-timeline .timeline-event.below .event-card {
1235
+ top: calc(50% + 50px + 7px);
1236
+ bottom: auto;
1237
+ }
1238
+
1239
+ /* Card content styling */
1240
+ .reveal .slides section.slide-timeline .event-date {
1241
+ font-size: 10px;
1242
+ font-weight: 600;
1243
+ color: var(--color-primary-600);
1244
+ text-transform: uppercase;
1245
+ letter-spacing: 0.5px;
1246
+ margin-bottom: 4px;
1247
+ }
1248
+
1249
+ .reveal .slides section.slide-timeline .event-title {
1250
+ font-family: var(--font-heading);
1251
+ font-size: 13px;
1252
+ font-weight: 600;
1253
+ color: var(--color-slate-900);
1254
+ margin-bottom: 4px;
1255
+ }
1256
+
1257
+ .reveal .slides section.slide-timeline .event-text {
1258
+ font-size: 10px;
1259
+ color: var(--color-text-muted);
1260
+ line-height: 1.4;
1261
+ }
1262
+
1263
+ /* ============================================
1264
+ SLIDE: FUNNEL
1265
+ Progressive narrowing stages with annotations
1266
+ ============================================ */
1267
+
1268
+ .reveal .slides section.slide-funnel {
1269
+ display: flex !important;
1270
+ flex-direction: column;
1271
+ justify-content: flex-start;
1272
+ align-items: stretch;
1273
+ height: 100%;
1274
+ padding: 0;
1275
+ }
1276
+
1277
+ .reveal .slides section.slide-funnel .slide-body {
1278
+ flex: 1;
1279
+ padding: var(--slide-padding);
1280
+ padding-bottom: 12px;
1281
+ display: flex;
1282
+ flex-direction: column;
1283
+ min-height: 0;
1284
+ }
1285
+
1286
+ .reveal .slides section.slide-funnel .slide-header {
1287
+ margin-bottom: 20px;
1288
+ padding-bottom: 10px;
1289
+ border-bottom: 2px solid var(--color-primary-500);
1290
+ }
1291
+
1292
+ .reveal .slides section.slide-funnel .funnel-wrapper {
1293
+ flex: 1;
1294
+ display: flex;
1295
+ flex-direction: column;
1296
+ }
1297
+
1298
+ /* Grid layout for matched rows */
1299
+ .reveal .slides section.slide-funnel .funnel-grid {
1300
+ flex: 1;
1301
+ display: flex;
1302
+ flex-direction: column;
1303
+ gap: 8px;
1304
+ }
1305
+
1306
+ /* Each row contains one stage + one annotation */
1307
+ .reveal .slides section.slide-funnel .funnel-row {
1308
+ display: grid;
1309
+ grid-template-columns: 40% 60%;
1310
+ gap: 20px;
1311
+ align-items: center;
1312
+ min-height: 48px;
1313
+ }
1314
+
1315
+ /* Wrapper to center the stage bar */
1316
+ .reveal .slides section.slide-funnel .funnel-stage-wrapper {
1317
+ display: flex;
1318
+ justify-content: center;
1319
+ }
1320
+
1321
+ /* The funnel stage bar itself */
1322
+ .reveal .slides section.slide-funnel .funnel-stage {
1323
+ display: flex;
1324
+ justify-content: center;
1325
+ align-items: center;
1326
+ height: 44px;
1327
+ border-radius: 4px;
1328
+ transition: transform 0.2s ease;
1329
+ }
1330
+
1331
+ .reveal .slides section.slide-funnel .funnel-stage:hover {
1332
+ transform: scale(1.02);
1333
+ }
1334
+
1335
+ .reveal .slides section.slide-funnel .stage-label {
1336
+ font-size: 11px;
1337
+ font-weight: 700;
1338
+ text-transform: uppercase;
1339
+ letter-spacing: 0.5px;
1340
+ }
1341
+
1342
+ /* Stage colors and widths - progressively narrowing */
1343
+ .reveal .slides section.slide-funnel .funnel-stage.stage-1 {
1344
+ background: var(--color-primary-100);
1345
+ color: var(--color-primary-700);
1346
+ width: 100%;
1347
+ }
1348
+
1349
+ .reveal .slides section.slide-funnel .funnel-stage.stage-2 {
1350
+ background: var(--color-primary-200);
1351
+ color: var(--color-primary-700);
1352
+ width: 85%;
1353
+ }
1354
+
1355
+ .reveal .slides section.slide-funnel .funnel-stage.stage-3 {
1356
+ background: var(--color-primary-400);
1357
+ color: white;
1358
+ width: 70%;
1359
+ }
1360
+
1361
+ .reveal .slides section.slide-funnel .funnel-stage.stage-4 {
1362
+ background: var(--color-primary-500);
1363
+ color: white;
1364
+ width: 55%;
1365
+ }
1366
+
1367
+ .reveal .slides section.slide-funnel .funnel-stage.stage-5 {
1368
+ background: var(--color-primary-600);
1369
+ color: white;
1370
+ width: 42%;
1371
+ }
1372
+
1373
+ .reveal .slides section.slide-funnel .funnel-stage.stage-6 {
1374
+ background: var(--color-primary-700);
1375
+ color: white;
1376
+ width: 30%;
1377
+ }
1378
+
1379
+ .reveal .slides section.slide-funnel .funnel-stage.stage-7 {
1380
+ background: var(--color-primary-800, #7a2fa0);
1381
+ color: white;
1382
+ width: 20%;
1383
+ }
1384
+
1385
+ /* Annotation styling */
1386
+ .reveal .slides section.slide-funnel .funnel-annotation {
1387
+ display: flex;
1388
+ align-items: center;
1389
+ gap: 12px;
1390
+ }
1391
+
1392
+ .reveal .slides section.slide-funnel .annotation-arrow {
1393
+ color: var(--color-primary-400);
1394
+ font-size: 18px;
1395
+ flex-shrink: 0;
1396
+ }
1397
+
1398
+ .reveal .slides section.slide-funnel .annotation-text {
1399
+ font-family: var(--font-sans);
1400
+ font-size: 13px;
1401
+ color: var(--color-text);
1402
+ line-height: 1.5;
1403
+ }
1404
+
1405
+ /* ============================================
1406
+ SLIDE: SPLIT
1407
+ 1/3 image + 2/3 content layout
1408
+ ============================================ */
1409
+
1410
+ .reveal .slides section.slide-split {
1411
+ display: flex !important;
1412
+ flex-direction: column;
1413
+ justify-content: flex-start;
1414
+ align-items: stretch;
1415
+ height: 100%;
1416
+ padding: 0;
1417
+ }
1418
+
1419
+ .reveal .slides section.slide-split .slide-body {
1420
+ flex: 1;
1421
+ padding: 0;
1422
+ min-height: 0;
1423
+ }
1424
+
1425
+ .reveal .slides section.slide-split .split-container {
1426
+ display: grid;
1427
+ grid-template-columns: 1fr 2fr;
1428
+ height: 100%;
1429
+ }
1430
+
1431
+ .reveal .slides section.slide-split .split-image {
1432
+ display: flex;
1433
+ align-items: center;
1434
+ justify-content: center;
1435
+ padding: 24px;
1436
+ background: var(--color-slate-50);
1437
+ border-right: 1px solid var(--color-slate-200);
1438
+ }
1439
+
1440
+ .reveal .slides section.slide-split .split-image img {
1441
+ max-width: 100%;
1442
+ max-height: 100%;
1443
+ object-fit: contain;
1444
+ border-radius: 4px;
1445
+ }
1446
+
1447
+ .reveal .slides section.slide-split .split-content {
1448
+ padding: var(--slide-padding);
1449
+ display: flex;
1450
+ flex-direction: column;
1451
+ justify-content: center;
1452
+ text-align: left;
1453
+ }
1454
+
1455
+ .reveal .slides section.slide-split .slide-header {
1456
+ margin-bottom: 16px;
1457
+ padding-bottom: 10px;
1458
+ border-bottom: 2px solid var(--color-primary-500);
1459
+ }
1460
+
1461
+ .reveal .slides section.slide-split .slide-header h2 {
1462
+ margin-bottom: 0;
1463
+ }
1464
+
1465
+ /* ============================================
1466
+ SLIDE: SPLIT-WIDE
1467
+ 1/3 content + 2/3 image layout (inverse of split)
1468
+ ============================================ */
1469
+
1470
+ .reveal .slides section.slide-split-wide {
1471
+ display: flex !important;
1472
+ flex-direction: column;
1473
+ justify-content: flex-start;
1474
+ align-items: stretch;
1475
+ height: 100%;
1476
+ padding: 0;
1477
+ }
1478
+
1479
+ .reveal .slides section.slide-split-wide .slide-body {
1480
+ flex: 1;
1481
+ padding: 0;
1482
+ min-height: 0;
1483
+ }
1484
+
1485
+ .reveal .slides section.slide-split-wide .split-wide-container {
1486
+ display: grid;
1487
+ grid-template-columns: 1fr 2fr;
1488
+ height: 100%;
1489
+ }
1490
+
1491
+ .reveal .slides section.slide-split-wide .split-wide-content {
1492
+ padding: var(--slide-padding);
1493
+ display: flex;
1494
+ flex-direction: column;
1495
+ justify-content: center;
1496
+ text-align: left;
1497
+ border-right: 1px solid var(--color-slate-200);
1498
+ }
1499
+
1500
+ .reveal .slides section.slide-split-wide .split-wide-content .slide-header {
1501
+ margin-bottom: 16px;
1502
+ padding-bottom: 10px;
1503
+ border-bottom: 2px solid var(--color-primary-500);
1504
+ }
1505
+
1506
+ .reveal .slides section.slide-split-wide .split-wide-content .slide-header h2 {
1507
+ margin-bottom: 0;
1508
+ font-size: 20px;
1509
+ }
1510
+
1511
+ .reveal .slides section.slide-split-wide .split-wide-content li {
1512
+ font-size: 12px;
1513
+ margin-bottom: 8px;
1514
+ }
1515
+
1516
+ .reveal .slides section.slide-split-wide .split-wide-image {
1517
+ display: flex;
1518
+ align-items: center;
1519
+ justify-content: center;
1520
+ padding: 24px;
1521
+ background: var(--color-slate-50);
1522
+ }
1523
+
1524
+ .reveal .slides section.slide-split-wide .split-wide-image img {
1525
+ max-width: 100%;
1526
+ max-height: 100%;
1527
+ object-fit: contain;
1528
+ border-radius: 4px;
1529
+ }
1530
+
1531
+ /* ============================================
1532
+ UTILITY CLASSES
1533
+ ============================================ */
1534
+
1535
+ .reveal .text-mauve { color: var(--color-mauve-600); }
1536
+ .reveal .text-mint { color: var(--color-mint-500); }
1537
+ .reveal .text-coral { color: var(--color-coral-500); }
1538
+ .reveal .text-amber { color: var(--color-amber-500); }
1539
+ .reveal .text-icy { color: var(--color-icy-500); }
1540
+ .reveal .text-muted { color: var(--color-text-muted); }
1541
+
1542
+ .reveal .bg-surface { background: var(--color-surface); }
1543
+ .reveal .bg-surface-alt { background: var(--color-surface-alt); }
1544
+
1545
+ /* ============================================
1546
+ CONTROLS & PROGRESS
1547
+ ============================================ */
1548
+
1549
+ .reveal .progress {
1550
+ background: var(--color-slate-300);
1551
+ color: var(--color-primary-500);
1552
+ height: 4px;
1553
+ transition: height 0.2s ease;
1554
+ }
1555
+
1556
+ /* Enlarge progress bar when hovering near bottom */
1557
+ .reveal:has(.section-progress-dots:hover) .progress {
1558
+ height: 20px; /* 5x the original 4px */
1559
+ }
1560
+
1561
+ .reveal .controls {
1562
+ color: var(--color-primary-500);
1563
+ }
1564
+
1565
+ .reveal .controls button {
1566
+ color: var(--color-primary-500);
1567
+ }
1568
+
1569
+ .reveal .controls button:hover {
1570
+ color: var(--color-primary-700);
1571
+ }
1572
+
1573
+ /* ============================================
1574
+ EXIT BUTTON
1575
+ ============================================ */
1576
+
1577
+ .exit-button {
1578
+ position: fixed;
1579
+ top: 10px;
1580
+ left: 10px;
1581
+ z-index: 100;
1582
+ display: flex;
1583
+ align-items: center;
1584
+ justify-content: center;
1585
+ width: 22px;
1586
+ height: 22px;
1587
+ background: white;
1588
+ border: 1px solid var(--color-slate-200);
1589
+ border-radius: 4px;
1590
+ color: var(--color-slate-500);
1591
+ text-decoration: none;
1592
+ transition: all 0.2s ease;
1593
+ opacity: 0.7;
1594
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
1595
+ }
1596
+
1597
+ .exit-button:hover {
1598
+ opacity: 1;
1599
+ color: var(--color-primary-600);
1600
+ border-color: var(--color-primary-200);
1601
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
1602
+ }
1603
+
1604
+ .exit-button svg {
1605
+ width: 10px;
1606
+ height: 10px;
1607
+ }
1608
+
1609
+ /* ============================================
1610
+ SPEAKER NOTES
1611
+ ============================================ */
1612
+
1613
+ .reveal aside.notes {
1614
+ display: none;
1615
+ }
1616
+
1617
+ /* ============================================
1618
+ SLIDE BODY WRAPPER
1619
+ Wraps content to push footer to bottom
1620
+ ============================================ */
1621
+
1622
+ .slide-body {
1623
+ flex: 1;
1624
+ display: flex;
1625
+ flex-direction: column;
1626
+ }
1627
+
1628
+ /* ============================================
1629
+ SLIDE FOOTER
1630
+ Three zones: slide number | logo + title | references
1631
+ ============================================ */
1632
+
1633
+ .slide-footer {
1634
+ position: relative;
1635
+ z-index: 10;
1636
+ height: 48px;
1637
+ padding: 0 40px;
1638
+ display: flex;
1639
+ align-items: center;
1640
+ justify-content: space-between;
1641
+ border-top: 1px solid var(--color-slate-200);
1642
+ background: var(--color-slate-50);
1643
+ font-family: var(--font-body);
1644
+ font-size: 12px;
1645
+ color: var(--color-slate-500);
1646
+ border-radius: 0 0 6px 6px;
1647
+ }
1648
+
1649
+ /* Left: Slide number */
1650
+ .footer-left {
1651
+ display: flex;
1652
+ align-items: center;
1653
+ gap: 8px;
1654
+ font-weight: 500;
1655
+ color: var(--color-slate-400);
1656
+ min-width: 80px;
1657
+ }
1658
+
1659
+ .footer-left .current {
1660
+ font-weight: 600;
1661
+ color: var(--color-primary-600);
1662
+ font-size: 14px;
1663
+ }
1664
+
1665
+ .footer-left .separator {
1666
+ color: var(--color-slate-300);
1667
+ }
1668
+
1669
+ .footer-left .total {
1670
+ color: var(--color-slate-400);
1671
+ }
1672
+
1673
+ /* Center: Logo + presentation name */
1674
+ .footer-center {
1675
+ display: flex;
1676
+ align-items: center;
1677
+ gap: 8px;
1678
+ color: var(--color-slate-500);
1679
+ font-weight: 500;
1680
+ }
1681
+
1682
+ .footer-center .logo-small {
1683
+ width: 16px;
1684
+ height: 16px;
1685
+ background: var(--footer-logo-url, linear-gradient(135deg, var(--color-primary-500) 0%, var(--color-primary-600) 100%));
1686
+ border-radius: 3px;
1687
+ display: flex;
1688
+ align-items: center;
1689
+ justify-content: center;
1690
+ background-size: contain;
1691
+ background-repeat: no-repeat;
1692
+ background-position: center;
1693
+ }
1694
+
1695
+ .footer-center .logo-small .default-logo {
1696
+ width: 10px;
1697
+ height: 10px;
1698
+ color: white;
1699
+ }
1700
+
1701
+ /* Brand name from CSS custom property */
1702
+ .footer-center .footer-brand-name::before {
1703
+ content: var(--footer-brand-name);
1704
+ }
1705
+
1706
+ /* Right: References */
1707
+ .footer-right {
1708
+ display: flex;
1709
+ align-items: center;
1710
+ gap: 12px;
1711
+ min-width: 80px;
1712
+ justify-content: flex-end;
1713
+ }
1714
+
1715
+ .footer-right a {
1716
+ color: var(--color-slate-400);
1717
+ text-decoration: none;
1718
+ transition: color 0.15s ease;
1719
+ }
1720
+
1721
+ .footer-right a:hover {
1722
+ color: var(--color-primary-600);
1723
+ }
1724
+
1725
+ .footer-right .ref-label {
1726
+ color: var(--color-slate-400);
1727
+ font-size: 10px;
1728
+ text-transform: uppercase;
1729
+ letter-spacing: 0.05em;
1730
+ }
1731
+
1732
+ .footer-right .ref-link {
1733
+ color: var(--color-primary-500);
1734
+ font-weight: 500;
1735
+ }
1736
+
1737
+ /* ============================================
1738
+ FOOTER VARIANT: MINIMAL
1739
+ ============================================ */
1740
+
1741
+ .slide-footer.minimal {
1742
+ background: transparent;
1743
+ border-top: none;
1744
+ }
1745
+
1746
+ /* ============================================
1747
+ FOOTER IN HERO/IMAGE-OVERLAY SLIDES
1748
+ ============================================ */
1749
+
1750
+ .reveal .slides section.slide-hero .slide-footer,
1751
+ .reveal .slides section.slide-image-overlay .slide-footer {
1752
+ position: relative;
1753
+ z-index: 2;
1754
+ }
1755
+
1756
+ /* ============================================
1757
+ CITATION PILL
1758
+ ============================================ */
1759
+
1760
+ .citation {
1761
+ display: flex;
1762
+ align-items: center;
1763
+ gap: 6px;
1764
+ padding: 4px 10px;
1765
+ background: var(--color-slate-100);
1766
+ border-radius: 4px;
1767
+ font-size: 11px;
1768
+ }
1769
+
1770
+ .citation-number {
1771
+ width: 16px;
1772
+ height: 16px;
1773
+ background: var(--color-primary-500);
1774
+ color: white;
1775
+ border-radius: 50%;
1776
+ display: flex;
1777
+ align-items: center;
1778
+ justify-content: center;
1779
+ font-size: 10px;
1780
+ font-weight: 600;
1781
+ }
1782
+
1783
+ .citation-text {
1784
+ color: var(--color-slate-500);
1785
+ }
1786
+
1787
+ .citation a.citation-text {
1788
+ color: var(--color-primary-500);
1789
+ text-decoration: none;
1790
+ transition: color 0.15s ease;
1791
+ }
1792
+
1793
+ .citation a.citation-text:hover {
1794
+ color: var(--color-primary-600);
1795
+ }
1796
+
1797
+ /* ============================================
1798
+ SOURCES FLYOUT
1799
+ ============================================ */
1800
+
1801
+ .sources-flyout {
1802
+ position: relative;
1803
+ }
1804
+
1805
+ .sources-trigger {
1806
+ display: flex;
1807
+ align-items: center;
1808
+ gap: 0.25rem;
1809
+ padding: 0.25rem 0.5rem;
1810
+ font-size: 0.65rem;
1811
+ background: var(--color-surface-muted, var(--color-slate-100));
1812
+ border: 1px solid var(--color-border);
1813
+ border-radius: 4px;
1814
+ cursor: pointer;
1815
+ opacity: 0.7;
1816
+ transition: opacity 0.2s;
1817
+ font-family: var(--font-body);
1818
+ }
1819
+
1820
+ .sources-trigger:hover {
1821
+ opacity: 1;
1822
+ }
1823
+
1824
+ .source-count {
1825
+ background: var(--color-primary);
1826
+ color: white;
1827
+ padding: 0 0.35rem;
1828
+ border-radius: 9999px;
1829
+ font-size: 0.6rem;
1830
+ }
1831
+
1832
+ .sources-panel {
1833
+ position: absolute;
1834
+ bottom: 100%;
1835
+ right: 0;
1836
+ margin-bottom: 0.5rem;
1837
+ min-width: 280px;
1838
+ max-width: 400px;
1839
+ background: var(--color-surface, var(--color-slate-50));
1840
+ border: 1px solid var(--color-border);
1841
+ border-radius: 8px;
1842
+ box-shadow: 0 -4px 20px rgba(0,0,0,0.15);
1843
+ opacity: 0;
1844
+ visibility: hidden;
1845
+ transform: translateY(10px);
1846
+ transition: all 0.2s ease;
1847
+ }
1848
+
1849
+ .sources-flyout.open .sources-panel {
1850
+ opacity: 1;
1851
+ visibility: visible;
1852
+ transform: translateY(0);
1853
+ }
1854
+
1855
+ .sources-header {
1856
+ padding: 0.5rem 0.75rem;
1857
+ font-weight: 600;
1858
+ font-size: 0.7rem;
1859
+ border-bottom: 1px solid var(--color-border);
1860
+ color: var(--color-text-muted);
1861
+ }
1862
+
1863
+ .sources-list {
1864
+ list-style: none;
1865
+ padding: 0.5rem 0;
1866
+ margin: 0;
1867
+ }
1868
+
1869
+ .sources-list li {
1870
+ padding: 0.35rem 0.75rem;
1871
+ font-size: 0.65rem;
1872
+ display: flex;
1873
+ gap: 0.5rem;
1874
+ }
1875
+
1876
+ .sources-list a {
1877
+ color: var(--color-primary);
1878
+ text-decoration: none;
1879
+ }
1880
+
1881
+ .sources-list a:hover {
1882
+ text-decoration: underline;
1883
+ }
1884
+
1885
+ .source-number {
1886
+ color: var(--color-text-muted);
1887
+ min-width: 1rem;
1888
+ }
1889
+
1890
+ /* ============================================
1891
+ PRINT / PDF EXPORT
1892
+ ============================================ */
1893
+
1894
+ @media print {
1895
+ html, body {
1896
+ background: white !important;
1897
+ }
1898
+
1899
+ .exit-button {
1900
+ display: none;
1901
+ }
1902
+
1903
+ .reveal .slides > section,
1904
+ .reveal .slides > section > section {
1905
+ box-shadow: none;
1906
+ border: 1px solid #ddd;
1907
+ }
1908
+
1909
+ .reveal .slides section {
1910
+ page-break-after: always;
1911
+ }
1912
+ }
1913
+
1914
+ /* PDF export mode — triggered by ?pdf query param */
1915
+ .pdf-export {
1916
+ background: white !important;
1917
+ }
1918
+
1919
+ .pdf-export .exit-button,
1920
+ .pdf-export .section-progress-dots,
1921
+ .pdf-export .reveal .controls,
1922
+ .pdf-export .reveal .progress {
1923
+ display: none !important;
1924
+ }
1925
+
1926
+ .pdf-export .reveal .slides > section,
1927
+ .pdf-export .reveal .slides > section > section {
1928
+ border-radius: 0;
1929
+ border: none;
1930
+ box-shadow: none;
1931
+ }
1932
+
1933
+ /* ============================================
1934
+ IMAGE LIGHTBOX
1935
+ Click-to-enlarge for split and center slides
1936
+ ============================================ */
1937
+
1938
+ .reveal .slides section .glightbox {
1939
+ cursor: zoom-in;
1940
+ display: block;
1941
+ }
1942
+
1943
+ .reveal .slides section .glightbox img {
1944
+ transition: transform 0.2s ease;
1945
+ }
1946
+
1947
+ .reveal .slides section .glightbox:hover img {
1948
+ transform: scale(1.02);
1949
+ }
1950
+
1951
+ /* ============================================
1952
+ SLIDE: AGENDA
1953
+ Clickable table of contents for sections
1954
+ ============================================ */
1955
+
1956
+ .reveal .slides section.slide-agenda {
1957
+ display: flex !important;
1958
+ flex-direction: column;
1959
+ justify-content: flex-start;
1960
+ align-items: stretch;
1961
+ height: 100%;
1962
+ padding: 0;
1963
+ text-align: left;
1964
+ }
1965
+
1966
+ .reveal .slides section.slide-agenda .slide-body {
1967
+ flex: 1;
1968
+ padding: var(--slide-padding);
1969
+ padding-bottom: 12px;
1970
+ min-height: 0;
1971
+ }
1972
+
1973
+ .reveal .slides section.slide-agenda .slide-header {
1974
+ text-align: center;
1975
+ margin-bottom: 24px;
1976
+ padding-bottom: 12px;
1977
+ border-bottom: 2px solid var(--color-primary-500);
1978
+ }
1979
+
1980
+ .reveal .slides section.slide-agenda .slide-header h2 {
1981
+ margin-bottom: 0;
1982
+ }
1983
+
1984
+ .reveal .slides section.slide-agenda .agenda-list {
1985
+ list-style: decimal;
1986
+ padding-left: 1.5em;
1987
+ margin: 0;
1988
+ }
1989
+
1990
+ .reveal .slides section.slide-agenda .agenda-list li {
1991
+ font-family: var(--font-body);
1992
+ font-size: 14px;
1993
+ line-height: 1.4;
1994
+ margin-bottom: 8px;
1995
+ color: var(--color-text);
1996
+ }
1997
+
1998
+ .reveal .slides section.slide-agenda .agenda-list li::marker {
1999
+ font-weight: 600;
2000
+ color: var(--color-primary-600);
2001
+ }
2002
+
2003
+ .reveal .slides section.slide-agenda .agenda-list a {
2004
+ color: var(--color-text-heading);
2005
+ text-decoration: none;
2006
+ }
2007
+
2008
+ .reveal .slides section.slide-agenda .agenda-list a:hover {
2009
+ color: var(--color-primary-600);
2010
+ }
2011
+
2012
+ /* ============================================
2013
+ SECTION PROGRESS DOTS
2014
+ Integrated into the Reveal.js progress bar
2015
+ ============================================ */
2016
+
2017
+ .section-progress-dots {
2018
+ position: absolute;
2019
+ bottom: 0;
2020
+ left: 0;
2021
+ right: 0;
2022
+ height: 40px; /* Large hover zone for easier mouse targeting */
2023
+ z-index: 11; /* Above progress bar (z-index: 10) */
2024
+ pointer-events: auto; /* Enable hover detection on container */
2025
+ }
2026
+
2027
+ .section-progress-dots .section-dot {
2028
+ position: absolute;
2029
+ bottom: 0;
2030
+ width: 4px;
2031
+ height: 4px;
2032
+ background: white;
2033
+ cursor: pointer;
2034
+ pointer-events: auto;
2035
+ transform: translateX(-50%); /* Center dot on position */
2036
+ transition: all 0.2s ease;
2037
+ box-shadow: 0 1px 3px rgba(0,0,0,0.2);
2038
+ }
2039
+
2040
+ /* Enlarge dots when hovering near bottom */
2041
+ .section-progress-dots:hover .section-dot {
2042
+ width: 20px;
2043
+ height: 20px;
2044
+ }
2045
+
2046
+ .section-progress-dots .section-dot:hover {
2047
+ background: var(--color-primary-400);
2048
+ transform: translateX(-50%) scale(1.3);
2049
+ }
2050
+
2051
+ .section-progress-dots .section-dot.active {
2052
+ background: var(--color-primary-500);
2053
+ border-color: var(--color-primary-200);
2054
+ }
2055
+
2056
+ .section-progress-dots .section-dot::after {
2057
+ content: attr(data-tooltip);
2058
+ position: absolute;
2059
+ bottom: 100%;
2060
+ left: 50%;
2061
+ transform: translateX(-50%);
2062
+ padding: 6px 12px;
2063
+ background: var(--color-slate-800);
2064
+ color: white;
2065
+ font-size: 12px;
2066
+ font-family: var(--font-body);
2067
+ white-space: nowrap;
2068
+ border-radius: 4px;
2069
+ opacity: 0;
2070
+ pointer-events: none;
2071
+ transition: opacity 0.15s ease;
2072
+ margin-bottom: 8px;
2073
+ }
2074
+
2075
+ .section-progress-dots .section-dot:hover::after {
2076
+ opacity: 1;
2077
+ }