@kadal/theme-neon 0.0.0-stage → 0.4.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 (5) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +64 -2
  3. package/index.tsx +57 -0
  4. package/package.json +102 -4
  5. package/style.css +718 -0
package/style.css ADDED
@@ -0,0 +1,718 @@
1
+ /* ─────────────────────────────────────────────────────────────────────────────
2
+ Neon — a dark synthwave theme for meetups and launches. Midnight violet, a striped sunset sun
3
+ over a grid that runs to the horizon, Orbitron for display, Space Grotesk for text, the
4
+ Synthwave '84 code colours. The glows are kept legible on purpose: the letters stay near
5
+ white and only their halo takes the colour, so body text reads at full contrast.
6
+
7
+ Dark only (`colorScheme: "dark"`): the tokens sit on .theme-neon itself. Every glow, blur and
8
+ animation is dropped on a still copy — the print view, an export, an overview tile — so a
9
+ PDF gets solid colour and clean edges rather than grey halos.
10
+ themeConfig: `primary` (--theme-primary, magenta), `secondary` (--theme-secondary, cyan),
11
+ `grid: false` (--theme-grid: 0) hides the floor grid.
12
+ ───────────────────────────────────────────────────────────────────────────── */
13
+
14
+ .theme-neon {
15
+ --neon-pink: var(--theme-primary, #ff3ec8);
16
+ --neon-cyan: var(--theme-secondary, #2de2e6);
17
+ --neon-amber: #ffd319;
18
+ --neon-violet: #8c1eff;
19
+ --neon-ink: #fff5fd;
20
+ --deck-bg: #0d0221;
21
+ --deck-fg: #f4ecff;
22
+ --deck-muted: #b9a8dc;
23
+ --deck-accent: var(--neon-pink);
24
+ --deck-accent-2: var(--neon-cyan);
25
+ --deck-surface: rgba(255, 255, 255, 0.05);
26
+ --deck-border: color-mix(in oklab, var(--neon-pink) 32%, transparent);
27
+ --deck-live: var(--neon-cyan);
28
+ --deck-controls-color: var(--neon-cyan);
29
+ --neon-glow-pink: 0 0 0.08em color-mix(in oklab, var(--neon-pink) 85%, transparent),
30
+ 0 0 0.4em color-mix(in oklab, var(--neon-pink) 45%, transparent);
31
+ --neon-glow-cyan: 0 0 0.08em color-mix(in oklab, var(--neon-cyan) 85%, transparent),
32
+ 0 0 0.4em color-mix(in oklab, var(--neon-cyan) 45%, transparent);
33
+ --neon-box-glow: 0 0 0 1px color-mix(in oklab, var(--neon-pink) 30%, transparent),
34
+ 0 0 28px -6px color-mix(in oklab, var(--neon-pink) 45%, transparent);
35
+ --neon-sunset: linear-gradient(180deg, #ffd319 0%, #ff8c2b 30%, #ff2975 62%, #c21fd8 100%);
36
+ --neon-ground:
37
+ radial-gradient(70% 45% at 50% 108%, color-mix(in oklab, var(--neon-pink) 22%, transparent), transparent 70%),
38
+ linear-gradient(180deg, #0a011a 0%, #120430 55%, #1f0b45 100%);
39
+ --deck-heading-font: "Orbitron", "Audiowide", ui-sans-serif, system-ui, sans-serif;
40
+ --deck-body-font: "Space Grotesk", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
41
+ --deck-mono-font: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;
42
+ --deck-serif-font: ui-serif, Georgia, Cambria, "Times New Roman", serif;
43
+ --deck-base-size: 34px;
44
+ --deck-code-bg: #1a1233;
45
+ --deck-code-fg: #f0e6ff;
46
+ --deck-code-active: color-mix(in oklab, var(--neon-cyan) 13%, transparent);
47
+ --deck-radius: 12px;
48
+ --deck-pad: 84px;
49
+ --deck-transition: 500ms;
50
+ color-scheme: dark;
51
+ }
52
+ /* One scheme: a viewer's light toggle changes nothing, Shiki colours included. */
53
+ .theme-neon[data-color-scheme] .shiki,
54
+ .theme-neon[data-color-scheme] .shiki span {
55
+ color: var(--shiki-dark, inherit);
56
+ }
57
+
58
+ /* ── the ground ────────────────────────────────────────────────────────── */
59
+ .theme-neon :is(
60
+ .deck-backgrounds,
61
+ .deck-print-page,
62
+ .deck-overview-tile,
63
+ .deck-scroll-sticky,
64
+ .deck-thumbnail-capture
65
+ ),
66
+ .theme-neon .deck-background[data-color-scheme],
67
+ .theme-neon.deck-background[data-color-scheme] {
68
+ background: var(--neon-ground);
69
+ background-color: var(--deck-bg);
70
+ }
71
+
72
+ /* ── type ──────────────────────────────────────────────────────────────── */
73
+ .theme-neon .deck-slide {
74
+ line-height: 1.48;
75
+ }
76
+ .theme-neon .deck-slide :is(h1, h2, h3) {
77
+ font-weight: 700;
78
+ letter-spacing: 0.01em;
79
+ line-height: 1.12;
80
+ color: var(--neon-ink);
81
+ }
82
+ .theme-neon .deck-slide h1 {
83
+ font-size: 2.6em;
84
+ text-shadow: var(--neon-glow-pink);
85
+ }
86
+ .theme-neon .deck-slide h2 {
87
+ font-size: 1.6em;
88
+ margin-bottom: 0.7em;
89
+ text-shadow: var(--neon-glow-pink);
90
+ }
91
+ .theme-neon .deck-slide h3 {
92
+ font-family: var(--deck-body-font);
93
+ font-size: 1.15em;
94
+ letter-spacing: 0;
95
+ color: var(--neon-cyan);
96
+ }
97
+ .theme-neon .deck-slide h4 {
98
+ font-family: var(--deck-mono-font);
99
+ font-size: 0.6em;
100
+ font-weight: 500;
101
+ letter-spacing: 0.22em;
102
+ text-transform: uppercase;
103
+ color: var(--neon-cyan);
104
+ text-shadow: var(--neon-glow-cyan);
105
+ }
106
+ .theme-neon .deck-layout-default > :is(p, ul, ol) {
107
+ max-width: 36em;
108
+ }
109
+ .theme-neon .deck-slide ul {
110
+ list-style: none;
111
+ padding-inline-start: 1.2em;
112
+ }
113
+ .theme-neon .deck-slide ul > li {
114
+ position: relative;
115
+ }
116
+ .theme-neon .deck-slide ul > li::before {
117
+ content: "";
118
+ position: absolute;
119
+ left: -1.05em;
120
+ top: 0.5em;
121
+ width: 0.42em;
122
+ height: 0.42em;
123
+ transform: rotate(45deg);
124
+ background: var(--neon-cyan);
125
+ box-shadow: 0 0 10px var(--neon-cyan);
126
+ }
127
+ .theme-neon .deck-slide ul ul > li::before {
128
+ background: transparent;
129
+ border: 2px solid var(--neon-pink);
130
+ box-sizing: border-box;
131
+ box-shadow: none;
132
+ }
133
+ .theme-neon .deck-slide ol > li::marker {
134
+ font-family: var(--deck-mono-font);
135
+ color: var(--neon-cyan);
136
+ }
137
+ .theme-neon .deck-slide strong {
138
+ font-weight: 700;
139
+ color: var(--neon-ink);
140
+ }
141
+ .theme-neon .deck-slide em {
142
+ font-style: normal;
143
+ color: var(--neon-amber);
144
+ }
145
+ .theme-neon .deck-slide a {
146
+ color: var(--neon-cyan);
147
+ text-decoration-thickness: 0.07em;
148
+ text-underline-offset: 0.2em;
149
+ }
150
+ .theme-neon .deck-slide a:hover {
151
+ text-shadow: var(--neon-glow-cyan);
152
+ }
153
+ .theme-neon .deck-slide blockquote {
154
+ margin: 0.6em 0;
155
+ padding: 0.5em 1em;
156
+ border: 0;
157
+ border-inline-start: 3px solid var(--neon-pink);
158
+ border-radius: 0 var(--deck-radius) var(--deck-radius) 0;
159
+ background: linear-gradient(90deg, color-mix(in oklab, var(--neon-pink) 12%, transparent), transparent);
160
+ color: var(--deck-fg);
161
+ box-shadow: -6px 0 18px -8px var(--neon-pink);
162
+ }
163
+ .theme-neon .deck-slide blockquote p:last-child {
164
+ margin-bottom: 0;
165
+ }
166
+ .theme-neon .deck-slide hr {
167
+ border: 0;
168
+ height: 2px;
169
+ background: linear-gradient(90deg, transparent, var(--neon-pink), var(--neon-cyan), transparent);
170
+ }
171
+ .theme-neon .deck-slide table {
172
+ font-size: 0.72em;
173
+ border: 1px solid var(--deck-border);
174
+ border-radius: var(--deck-radius);
175
+ border-collapse: separate;
176
+ border-spacing: 0;
177
+ overflow: hidden;
178
+ background: rgba(13, 2, 33, 0.55);
179
+ }
180
+ .theme-neon .deck-slide th {
181
+ font: 600 0.72em var(--deck-mono-font);
182
+ letter-spacing: 0.14em;
183
+ color: var(--neon-cyan);
184
+ background: color-mix(in oklab, var(--neon-cyan) 8%, transparent);
185
+ border-bottom: 1px solid color-mix(in oklab, var(--neon-cyan) 45%, transparent);
186
+ }
187
+ .theme-neon .deck-slide :is(th, td) {
188
+ padding: 0.55em 0.95em;
189
+ }
190
+ .theme-neon .deck-slide td {
191
+ border-bottom-color: rgba(255, 255, 255, 0.08);
192
+ }
193
+ .theme-neon .deck-slide tbody tr:last-child td {
194
+ border-bottom: 0;
195
+ }
196
+ .theme-neon .deck-slide :not(pre) > code {
197
+ font-size: 0.8em;
198
+ padding: 0.1em 0.4em;
199
+ border-radius: 6px;
200
+ color: var(--neon-amber);
201
+ background: rgba(255, 211, 25, 0.08);
202
+ border: 1px solid rgba(255, 211, 25, 0.25);
203
+ }
204
+ .theme-neon .deck-kbd {
205
+ color: var(--neon-ink);
206
+ border-color: color-mix(in oklab, var(--neon-cyan) 50%, transparent);
207
+ background: rgba(45, 226, 230, 0.08);
208
+ }
209
+ .theme-neon .deck-slide :is(img, video) {
210
+ border-radius: var(--deck-radius);
211
+ }
212
+
213
+ /* ── code ──────────────────────────────────────────────────────────────── */
214
+ .theme-neon .deck-code-block {
215
+ border: 1px solid var(--deck-border);
216
+ border-radius: var(--deck-radius);
217
+ box-shadow: var(--neon-box-glow);
218
+ }
219
+ .theme-neon .deck-code-title {
220
+ font: 500 0.48em var(--deck-mono-font);
221
+ letter-spacing: 0.06em;
222
+ color: var(--deck-muted);
223
+ padding: 0.6em 1.2em;
224
+ background: linear-gradient(90deg, color-mix(in oklab, var(--neon-pink) 14%, transparent), color-mix(in oklab, var(--neon-cyan) 10%, transparent));
225
+ border-bottom: 1px solid var(--deck-border);
226
+ }
227
+ .theme-neon .deck-code-title-dot {
228
+ background: var(--neon-cyan);
229
+ box-shadow: 0 0 8px var(--neon-cyan);
230
+ }
231
+ .theme-neon pre.deck-code,
232
+ .theme-neon .shiki-magic-move-wrap {
233
+ font-size: 0.6em;
234
+ line-height: 1.7;
235
+ }
236
+ .theme-neon pre.deck-code .line.is-active {
237
+ box-shadow: inset 0.22em 0 0 var(--neon-cyan);
238
+ }
239
+ .theme-neon pre.deck-code .line.is-dim {
240
+ opacity: 0.3;
241
+ }
242
+
243
+ /* ── components ────────────────────────────────────────────────────────── */
244
+ .theme-neon .deck-callout {
245
+ padding: 0.65em 1em;
246
+ border: 1px solid color-mix(in oklab, var(--neon-kind) 55%, transparent);
247
+ border-radius: var(--deck-radius);
248
+ background: color-mix(in oklab, var(--neon-kind) 8%, rgba(13, 2, 33, 0.6));
249
+ box-shadow: 0 0 22px -8px var(--neon-kind);
250
+ font-size: 0.8em;
251
+ --neon-kind: var(--neon-cyan);
252
+ }
253
+ .theme-neon .deck-callout.kind-tip {
254
+ --neon-kind: #4dff9a;
255
+ }
256
+ .theme-neon .deck-callout.kind-warn {
257
+ --neon-kind: var(--neon-amber);
258
+ }
259
+ .theme-neon .deck-callout.kind-danger {
260
+ --neon-kind: var(--neon-pink);
261
+ }
262
+ .theme-neon .deck-callout.kind-note {
263
+ --neon-kind: #b9a8dc;
264
+ }
265
+ .theme-neon .deck-callout-title {
266
+ font: 600 0.72em var(--deck-mono-font);
267
+ letter-spacing: 0.16em;
268
+ text-transform: uppercase;
269
+ color: var(--neon-kind);
270
+ margin-bottom: 0.3em;
271
+ }
272
+ .theme-neon .deck-callout > div > :last-child {
273
+ margin-bottom: 0;
274
+ }
275
+ .theme-neon .deck-badge {
276
+ font-family: var(--deck-mono-font);
277
+ letter-spacing: 0.14em;
278
+ border-color: color-mix(in oklab, currentColor 60%, transparent);
279
+ }
280
+ .theme-neon .deck-badge.tone-accent {
281
+ color: var(--neon-pink);
282
+ }
283
+ .theme-neon .deck-badge.tone-good {
284
+ color: #4dff9a;
285
+ }
286
+ .theme-neon .deck-badge.tone-warn {
287
+ color: var(--neon-amber);
288
+ }
289
+ .theme-neon .deck-badge.tone-bad {
290
+ color: #ff5c7a;
291
+ }
292
+ .theme-neon .deck-toc {
293
+ counter-reset: neon-toc;
294
+ }
295
+ .theme-neon .deck-toc li {
296
+ margin: 0.3em 0;
297
+ }
298
+ .theme-neon .deck-toc li.level-1 {
299
+ counter-increment: neon-toc;
300
+ }
301
+ .theme-neon .deck-toc li.level-1 > a::before {
302
+ content: counter(neon-toc, decimal-leading-zero);
303
+ display: inline-block;
304
+ min-width: 2.2em;
305
+ font: 600 0.7em var(--deck-mono-font);
306
+ letter-spacing: 0.08em;
307
+ color: var(--neon-cyan);
308
+ }
309
+ .theme-neon .deck-toc li:is(.level-2, .level-3) {
310
+ padding-inline-start: 2em;
311
+ color: var(--deck-muted);
312
+ }
313
+ .theme-neon .deck-toc li.is-current > a {
314
+ color: var(--neon-pink);
315
+ text-shadow: var(--neon-glow-pink);
316
+ }
317
+ .theme-neon .deck-mark {
318
+ --mark-color: var(--neon-cyan);
319
+ }
320
+
321
+ /* ── chrome ────────────────────────────────────────────────────────────── */
322
+ .theme-neon .deck-progress {
323
+ height: 4px;
324
+ background: rgba(255, 255, 255, 0.06);
325
+ }
326
+ .theme-neon .deck-progress span {
327
+ background: linear-gradient(90deg, var(--neon-pink), var(--neon-cyan));
328
+ box-shadow: 0 0 12px var(--neon-pink);
329
+ }
330
+ .theme-neon .deck-slide-number {
331
+ font: 500 13px var(--deck-mono-font);
332
+ letter-spacing: 0.1em;
333
+ color: var(--neon-cyan);
334
+ background: rgba(13, 2, 33, 0.7);
335
+ border: 1px solid color-mix(in oklab, var(--neon-cyan) 40%, transparent);
336
+ }
337
+
338
+ /* ── the sun and the grid (cover, end, launch, horizon) ────────────────── */
339
+ .theme-neon .neon-sun,
340
+ .theme-neon .deck-slide:is(.layout-cover, .layout-end)::before {
341
+ content: "";
342
+ position: absolute;
343
+ left: 50%;
344
+ bottom: 30%;
345
+ width: 7.5em;
346
+ height: 7.5em;
347
+ margin-left: -3.75em;
348
+ border-radius: 50%;
349
+ background:
350
+ linear-gradient(
351
+ 180deg,
352
+ transparent 0 55%,
353
+ #170635 55% 58%,
354
+ transparent 58% 65%,
355
+ #170635 65% 69.5%,
356
+ transparent 69.5% 76%,
357
+ #170635 76% 81.5%,
358
+ transparent 81.5% 87%,
359
+ #170635 87% 94%,
360
+ transparent 94%
361
+ ),
362
+ var(--neon-sunset);
363
+ box-shadow: 0 0 80px -10px rgba(255, 41, 117, 0.6);
364
+ z-index: -1;
365
+ pointer-events: none;
366
+ }
367
+ .theme-neon .neon-floor,
368
+ .theme-neon .deck-slide:is(.layout-cover, .layout-end)::after {
369
+ content: "";
370
+ position: absolute;
371
+ left: calc(var(--deck-pad) * -2);
372
+ right: calc(var(--deck-pad) * -2);
373
+ bottom: calc(var(--deck-pad) * -1);
374
+ height: calc(30% + var(--deck-pad));
375
+ z-index: -1;
376
+ pointer-events: none;
377
+ opacity: var(--theme-grid, 1);
378
+ background:
379
+ linear-gradient(180deg, #170635 0%, transparent 40%),
380
+ linear-gradient(color-mix(in oklab, var(--neon-pink) 70%, transparent) 2px, transparent 2px) 0 0 / 100% 2.2em,
381
+ linear-gradient(90deg, color-mix(in oklab, var(--neon-pink) 55%, transparent) 2px, transparent 2px) 50% 0 / 2.6em 100%,
382
+ linear-gradient(180deg, #170635, #2b0d55);
383
+ transform: perspective(14em) rotateX(58deg);
384
+ transform-origin: 50% 0;
385
+ animation: neon-run 2.6s linear infinite;
386
+ }
387
+ @keyframes neon-run {
388
+ to {
389
+ background-position:
390
+ 0 0,
391
+ 0 2.2em,
392
+ 50% 0,
393
+ 0 0;
394
+ }
395
+ }
396
+ /* The cover's and the last slide's sun and floor are painted on the slide itself, outside the
397
+ layout's box (decoration hung past the layout read as overflow to the auto-fit); the theme's
398
+ own layouts draw theirs as placed elements (index.tsx). Either way, behind the words. */
399
+ .theme-neon :is(.deck-layout-launch, .deck-layout-horizon),
400
+ .theme-neon .deck-slide:is(.layout-cover, .layout-end) {
401
+ isolation: isolate;
402
+ }
403
+
404
+ /* ── layouts ───────────────────────────────────────────────────────────── */
405
+ .theme-neon .deck-layout-cover {
406
+ justify-content: flex-start;
407
+ align-items: center;
408
+ text-align: center;
409
+ padding-top: 0.6em;
410
+ }
411
+ .theme-neon .deck-layout-cover h1,
412
+ .theme-neon .deck-layout-launch h1 {
413
+ font-size: 3.6em;
414
+ font-weight: 900;
415
+ letter-spacing: 0.02em;
416
+ text-transform: uppercase;
417
+ background: linear-gradient(180deg, #ffffff 0%, #ffe3fb 42%, var(--neon-pink) 58%, var(--neon-violet) 100%);
418
+ -webkit-background-clip: text;
419
+ background-clip: text;
420
+ color: transparent;
421
+ text-shadow: none;
422
+ filter: drop-shadow(0 0 0.08em color-mix(in oklab, var(--neon-pink) 90%, transparent))
423
+ drop-shadow(0 0 0.35em color-mix(in oklab, var(--neon-pink) 45%, transparent));
424
+ margin-bottom: 0.2em;
425
+ padding-bottom: 0.05em;
426
+ }
427
+ .theme-neon .deck-layout-cover > p {
428
+ max-width: 32em;
429
+ margin-inline: auto;
430
+ color: var(--deck-fg);
431
+ }
432
+ .theme-neon .deck-slide.layout-cover::before {
433
+ bottom: 26%;
434
+ width: 8.4em;
435
+ height: 8.4em;
436
+ margin-left: -4.2em;
437
+ }
438
+ .theme-neon .deck-slide:is(.layout-cover, .layout-end)::after {
439
+ bottom: 0;
440
+ height: 26%;
441
+ }
442
+ .theme-neon .deck-layout-intro {
443
+ align-items: flex-start;
444
+ }
445
+ .theme-neon .deck-layout-intro h1 {
446
+ font-size: 2.6em;
447
+ }
448
+ .theme-neon .deck-layout-intro > p {
449
+ max-width: 32em;
450
+ color: var(--deck-muted);
451
+ }
452
+ .theme-neon .deck-layout-section {
453
+ align-items: flex-start;
454
+ }
455
+ .theme-neon .deck-layout-section :is(h1, h2) {
456
+ font-size: 3em;
457
+ text-transform: uppercase;
458
+ text-shadow: var(--neon-glow-pink);
459
+ max-width: 16ch;
460
+ }
461
+ .theme-neon .deck-layout-section :is(h1, h2)::after {
462
+ content: "";
463
+ display: block;
464
+ width: 3em;
465
+ height: 0.08em;
466
+ margin-top: 0.35em;
467
+ background: linear-gradient(90deg, var(--neon-pink), var(--neon-cyan));
468
+ box-shadow: 0 0 14px var(--neon-pink);
469
+ }
470
+ .theme-neon .deck-layout-section > p {
471
+ color: var(--deck-muted);
472
+ max-width: 32em;
473
+ }
474
+ .theme-neon .deck-layout-end {
475
+ justify-content: flex-start;
476
+ padding-top: 1.2em;
477
+ }
478
+ .theme-neon .deck-layout-end :is(h1, h2) {
479
+ font-size: 3em;
480
+ text-transform: uppercase;
481
+ }
482
+ .theme-neon .deck-layout-end > p {
483
+ color: var(--deck-muted);
484
+ }
485
+ .theme-neon .deck-slide.layout-end::before {
486
+ bottom: 26%;
487
+ width: 5em;
488
+ height: 5em;
489
+ margin-left: -2.5em;
490
+ }
491
+ .theme-neon .deck-layout-fact > :is(h1, h2, p, .deck-counter):first-child {
492
+ font-family: var(--deck-heading-font);
493
+ font-size: 4.8em;
494
+ font-weight: 900;
495
+ line-height: 1;
496
+ background: var(--neon-sunset);
497
+ -webkit-background-clip: text;
498
+ background-clip: text;
499
+ color: transparent;
500
+ text-shadow: none;
501
+ filter: drop-shadow(0 0 0.12em rgba(255, 41, 117, 0.55));
502
+ margin-bottom: 0.15em;
503
+ }
504
+ .theme-neon .deck-layout-fact > :not(:first-child) {
505
+ font-size: 1em;
506
+ font-weight: 400;
507
+ letter-spacing: 0;
508
+ color: var(--deck-muted);
509
+ max-width: 30em;
510
+ }
511
+ .theme-neon .deck-layout-quote {
512
+ padding-inline: 10%;
513
+ font-style: normal;
514
+ font-size: 1.2em;
515
+ }
516
+ .theme-neon .deck-layout-quote blockquote {
517
+ padding: 0;
518
+ border: 0;
519
+ background: none;
520
+ box-shadow: none;
521
+ font-size: 1.1em;
522
+ font-weight: 500;
523
+ color: var(--neon-ink);
524
+ }
525
+ .theme-neon .deck-layout-quote blockquote::before {
526
+ content: "\201C";
527
+ display: block;
528
+ height: 0.5em;
529
+ font: 900 2.6em/1 var(--deck-heading-font);
530
+ color: var(--neon-cyan);
531
+ text-shadow: var(--neon-glow-cyan);
532
+ }
533
+ .theme-neon .deck-layout-quote > p {
534
+ margin-top: 0.7em;
535
+ font: 500 0.55em var(--deck-mono-font);
536
+ letter-spacing: 0.18em;
537
+ text-transform: uppercase;
538
+ color: var(--neon-pink);
539
+ }
540
+ .theme-neon .deck-layout-statement :is(h1, h2) {
541
+ font-size: 2.6em;
542
+ max-width: 20ch;
543
+ margin-inline: auto;
544
+ text-transform: uppercase;
545
+ }
546
+ .theme-neon .deck-layout-full {
547
+ padding: 0;
548
+ }
549
+ .theme-neon .deck-layout-two-cols {
550
+ column-gap: 2.2em;
551
+ }
552
+ .theme-neon .deck-layout-two-cols > :is(.deck-slot-default, .deck-slot-right) > :first-child {
553
+ margin-top: 0;
554
+ }
555
+ .theme-neon .deck-layout-two-cols-header {
556
+ column-gap: 1.4em;
557
+ }
558
+ .theme-neon .deck-layout-two-cols-header > .deck-slot-default {
559
+ padding-bottom: 0.5em;
560
+ margin-bottom: 0.3em;
561
+ border-bottom: 1px solid transparent;
562
+ border-image: linear-gradient(90deg, var(--neon-pink), var(--neon-cyan) 50%, transparent) 1;
563
+ }
564
+ .theme-neon .deck-layout-two-cols-header > :is(.deck-slot-left, .deck-slot-right) {
565
+ padding: 0.7em 0.95em;
566
+ border: 1px solid color-mix(in oklab, var(--neon-cyan) 35%, transparent);
567
+ border-radius: var(--deck-radius);
568
+ background: rgba(13, 2, 33, 0.5);
569
+ }
570
+ .theme-neon .deck-layout-two-cols-header > .deck-slot-left {
571
+ border-color: color-mix(in oklab, var(--neon-pink) 40%, transparent);
572
+ }
573
+ .theme-neon .deck-layout-two-cols-header > :is(.deck-slot-left, .deck-slot-right) > :last-child {
574
+ margin-bottom: 0;
575
+ }
576
+ .theme-neon .deck-layout-image .deck-layout-image-content {
577
+ background: linear-gradient(180deg, transparent, rgba(13, 2, 33, 0.88));
578
+ }
579
+ .theme-neon :is(.deck-layout-image-left, .deck-layout-image-right) .deck-layout-image-content {
580
+ padding: calc(var(--deck-pad) * 0.9);
581
+ }
582
+ .theme-neon .deck-layout-image-pane {
583
+ background-color: #1a0838;
584
+ }
585
+ .theme-neon .deck-layout-image-left .deck-layout-image-pane {
586
+ box-shadow: 1px 0 0 var(--neon-pink), 6px 0 24px -6px var(--neon-pink);
587
+ }
588
+ .theme-neon .deck-layout-image-right .deck-layout-image-pane {
589
+ box-shadow: -1px 0 0 var(--neon-cyan), -6px 0 24px -6px var(--neon-cyan);
590
+ }
591
+ .theme-neon :is(.deck-layout-iframe, .deck-layout-iframe-left, .deck-layout-iframe-right) .deck-frame.deck-layout-iframe-pane {
592
+ border: 1px solid var(--deck-border);
593
+ border-radius: var(--deck-radius);
594
+ box-shadow: var(--neon-box-glow);
595
+ }
596
+ .theme-neon :is(.deck-layout-iframe-left, .deck-layout-iframe-right) .deck-layout-iframe-content {
597
+ padding-inline: calc(var(--deck-pad) * 0.4);
598
+ }
599
+
600
+ /* ── the theme's own layouts and components (index.tsx) ───────────────── */
601
+ /* launch: the title over the sun, a date chip, the grid running */
602
+ .theme-neon .deck-layout-launch {
603
+ justify-content: flex-start;
604
+ align-items: center;
605
+ text-align: center;
606
+ padding-top: 0.2em;
607
+ }
608
+ .theme-neon .deck-layout-launch .neon-sun {
609
+ bottom: 20%;
610
+ width: 9em;
611
+ height: 9em;
612
+ margin-left: -4.5em;
613
+ }
614
+ .theme-neon .deck-layout-launch .neon-floor {
615
+ height: calc(20% + var(--deck-pad));
616
+ }
617
+ .theme-neon .deck-layout-launch h1 {
618
+ font-size: 4.2em;
619
+ }
620
+ .theme-neon .deck-layout-launch > p {
621
+ max-width: 30em;
622
+ margin-inline: auto;
623
+ }
624
+ .theme-neon .neon-chip {
625
+ display: inline-flex;
626
+ align-items: center;
627
+ gap: 0.6em;
628
+ margin-bottom: 0.8em;
629
+ padding: 0.3em 0.9em;
630
+ font: 600 0.55em var(--deck-mono-font);
631
+ letter-spacing: 0.24em;
632
+ text-transform: uppercase;
633
+ color: var(--neon-cyan);
634
+ border: 1px solid color-mix(in oklab, var(--neon-cyan) 60%, transparent);
635
+ border-radius: 999px;
636
+ background: rgba(13, 2, 33, 0.7);
637
+ box-shadow: 0 0 18px -6px var(--neon-cyan);
638
+ }
639
+ .theme-neon .neon-chip::before {
640
+ content: "";
641
+ width: 0.6em;
642
+ height: 0.6em;
643
+ border-radius: 50%;
644
+ background: var(--neon-pink);
645
+ box-shadow: 0 0 8px var(--neon-pink);
646
+ animation: neon-pulse 1.6s ease-in-out infinite;
647
+ }
648
+ @keyframes neon-pulse {
649
+ 50% {
650
+ opacity: 0.35;
651
+ }
652
+ }
653
+ /* horizon: an ordinary content slide with the grid along its foot */
654
+ .theme-neon .deck-layout-horizon .neon-floor {
655
+ height: calc(16% + var(--deck-pad));
656
+ opacity: calc(var(--theme-grid, 1) * 0.7);
657
+ }
658
+ .theme-neon .deck-layout-horizon > :not(.neon-floor) {
659
+ position: relative;
660
+ }
661
+ /* Glow: a word in neon */
662
+ .theme-neon .neon-glow {
663
+ color: var(--neon-ink);
664
+ text-shadow: var(--neon-glow-pink);
665
+ }
666
+ .theme-neon .neon-glow.tone-cyan {
667
+ text-shadow: var(--neon-glow-cyan);
668
+ }
669
+ .theme-neon .neon-glow.tone-amber {
670
+ text-shadow:
671
+ 0 0 0.08em rgba(255, 211, 25, 0.85),
672
+ 0 0 0.4em rgba(255, 211, 25, 0.45);
673
+ }
674
+
675
+ /* ── still copies: solid colour, no glow, no motion ─────────────────────
676
+ A print page (?print-pdf, an export) and an overview tile hold still copies of the slides. */
677
+ .theme-neon :is(.deck-print-page, .deck-slide.is-print, .deck-slide.is-tile) :is(h1, h2, h3, h4, a, .neon-glow, .deck-toc li > a) {
678
+ text-shadow: none;
679
+ }
680
+ .theme-neon :is(.deck-print-page, .deck-slide.is-print, .deck-slide.is-tile) :is(.deck-layout-cover h1, .deck-layout-launch h1, .deck-layout-fact > :first-child) {
681
+ filter: none;
682
+ }
683
+ .theme-neon :is(.deck-print-page, .deck-slide.is-print, .deck-slide.is-tile) :is(.deck-code-block, .deck-callout, blockquote, .deck-frame, .neon-chip, .neon-sun, .deck-progress span) {
684
+ box-shadow: none;
685
+ }
686
+ .theme-neon .deck-slide:is(.is-print, .is-tile):is(.layout-cover, .layout-end)::before,
687
+ .theme-neon :is(.deck-print-page, .deck-slide.is-print, .deck-slide.is-tile) ul > li::before {
688
+ box-shadow: none;
689
+ }
690
+ .theme-neon :is(.deck-print-page, .deck-slide.is-print, .deck-slide.is-tile) .neon-floor,
691
+ .theme-neon .deck-slide:is(.is-print, .is-tile):is(.layout-cover, .layout-end)::after,
692
+ .theme-neon :is(.deck-print-page, .deck-slide.is-print, .deck-slide.is-tile) .neon-chip::before {
693
+ animation: none;
694
+ }
695
+ @media print {
696
+ .theme-neon * {
697
+ text-shadow: none !important;
698
+ animation: none !important;
699
+ }
700
+ .theme-neon :is(.deck-code-block, .deck-callout, blockquote, .deck-frame, .neon-chip, .neon-sun) {
701
+ box-shadow: none !important;
702
+ }
703
+ .theme-neon :is(h1, .deck-layout-fact > :first-child) {
704
+ filter: none !important;
705
+ }
706
+ }
707
+ @media (prefers-reduced-motion: reduce) {
708
+ .theme-neon .neon-floor,
709
+ .theme-neon .deck-slide:is(.layout-cover, .layout-end)::after,
710
+ .theme-neon .neon-chip::before {
711
+ animation: none;
712
+ }
713
+ }
714
+
715
+ /* centred: the built-in placement, in this theme's rhythm */
716
+ .theme-neon .deck-layout-center > :is(h1, h2) {
717
+ margin-bottom: 0.3em;
718
+ }