@kadal/theme-swiss 0.0.0-stage → 0.4.3

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 +70 -2
  3. package/index.tsx +114 -0
  4. package/package.json +101 -4
  5. package/style.css +723 -0
package/style.css ADDED
@@ -0,0 +1,723 @@
1
+ /* ─────────────────────────────────────────────────────────────────────────────
2
+ Swiss — the International Typographic Style for design talks. Huge grotesk headings set tight
3
+ and flush left, a strict grid (twelve columns, a gutter of one em), black hairlines and heavy
4
+ rules, and one signal colour used sparingly: a square, a number, a rule. Asymmetric on
5
+ purpose: facts, statements and quotes sit flush left, not centred.
6
+
7
+ Inter Tight for display, Inter for text, JetBrains Mono for code. Scoped under .theme-swiss;
8
+ dark is .theme-swiss[data-color-scheme="dark"] (white on black, the signal brighter).
9
+ themeConfig: `signal` / `signalDark` (--theme-signal, --theme-signal-dark); `header: false`
10
+ hides the running header the layer draws.
11
+ ───────────────────────────────────────────────────────────────────────────── */
12
+
13
+ .theme-swiss {
14
+ --deck-bg: #f4f4ef;
15
+ --deck-fg: #111111;
16
+ --deck-muted: #575752;
17
+ --deck-accent: var(--theme-signal, #d70017);
18
+ --deck-accent-2: #111111;
19
+ --deck-surface: #e8e8e1;
20
+ --deck-border: #c9c9c1;
21
+ --deck-live: var(--theme-signal, #d70017);
22
+ --deck-controls-color: var(--deck-fg);
23
+ --swiss-ink: #111111;
24
+ --swiss-on-signal: #ffffff;
25
+ --swiss-col: calc((100% - 11em) / 12);
26
+ --deck-heading-font: "Inter Tight", "Helvetica Neue", Helvetica, Arial, sans-serif;
27
+ --deck-body-font: "Inter", "Helvetica Neue", Helvetica, Arial, sans-serif;
28
+ --deck-mono-font: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;
29
+ --deck-serif-font: ui-serif, Georgia, Cambria, "Times New Roman", serif;
30
+ --deck-base-size: 34px;
31
+ --deck-code-bg: #e8e8e1;
32
+ --deck-code-fg: #111111;
33
+ --deck-code-active: rgba(215, 0, 23, 0.1);
34
+ /* the section's ground: white text on it stays above 4.5:1 in either scheme */
35
+ --swiss-signal-ground: var(--theme-signal, #d70017);
36
+ --deck-radius: 0px;
37
+ --deck-pad: 88px;
38
+ --deck-transition: 380ms;
39
+ }
40
+ .theme-swiss[data-color-scheme="dark"] {
41
+ --deck-bg: #0e0e0e;
42
+ --deck-fg: #f4f4ef;
43
+ --deck-muted: #a6a6a0;
44
+ /* a signal set in themeConfig, lifted for the dark ground; invalid (so skipped) when unset */
45
+ --swiss-signal-lifted: color-mix(in oklab, var(--theme-signal) 80%, white);
46
+ --deck-accent: var(--theme-signal-dark, var(--swiss-signal-lifted, #ff3b2f));
47
+ --deck-accent-2: #f4f4ef;
48
+ --deck-surface: #1b1b1b;
49
+ --deck-border: #3a3a38;
50
+ --deck-live: var(--deck-accent);
51
+ --swiss-ink: #f4f4ef;
52
+ --deck-code-bg: #161616;
53
+ --deck-code-fg: #f4f4ef;
54
+ --deck-code-active: rgba(255, 59, 47, 0.16);
55
+ color-scheme: dark;
56
+ }
57
+
58
+ /* ── type ──────────────────────────────────────────────────────────────── */
59
+ .theme-swiss .deck-slide {
60
+ line-height: 1.38;
61
+ font-feature-settings: "ss01", "cv11", "tnum";
62
+ }
63
+ .theme-swiss .deck-slide :is(h1, h2, h3) {
64
+ font-weight: 800;
65
+ letter-spacing: -0.038em;
66
+ word-spacing: 0.06em;
67
+ line-height: 0.95;
68
+ text-wrap: balance;
69
+ }
70
+ .theme-swiss .deck-slide h1 {
71
+ font-size: 4em;
72
+ }
73
+ .theme-swiss .deck-slide h2 {
74
+ font-size: 2.6em;
75
+ margin-bottom: 0.5em;
76
+ }
77
+ .theme-swiss .deck-slide h3 {
78
+ font-size: 1.25em;
79
+ font-weight: 700;
80
+ letter-spacing: -0.02em;
81
+ line-height: 1.1;
82
+ margin-bottom: 0.4em;
83
+ }
84
+ .theme-swiss .deck-slide h4 {
85
+ font-family: var(--deck-body-font);
86
+ font-size: 0.6em;
87
+ font-weight: 700;
88
+ letter-spacing: 0.04em;
89
+ text-transform: uppercase;
90
+ color: var(--deck-fg);
91
+ margin-bottom: 0.9em;
92
+ }
93
+ .theme-swiss .deck-slide h4::before {
94
+ content: "";
95
+ display: inline-block;
96
+ width: 0.8em;
97
+ height: 0.8em;
98
+ margin-right: 0.6em;
99
+ vertical-align: -0.08em;
100
+ background: var(--deck-accent);
101
+ }
102
+ .theme-swiss .deck-layout-default > :is(p, ul, ol) {
103
+ max-width: calc(var(--swiss-col) * 8 + 7em);
104
+ }
105
+ .theme-swiss .deck-slide ul {
106
+ list-style: none;
107
+ padding-inline-start: 1.1em;
108
+ }
109
+ .theme-swiss .deck-slide ul > li {
110
+ position: relative;
111
+ }
112
+ .theme-swiss .deck-slide ul > li::before {
113
+ content: "";
114
+ position: absolute;
115
+ left: -1.1em;
116
+ top: 0.5em;
117
+ width: 0.36em;
118
+ height: 0.36em;
119
+ background: var(--deck-accent);
120
+ }
121
+ .theme-swiss .deck-slide ul ul > li::before {
122
+ background: var(--deck-fg);
123
+ width: 0.3em;
124
+ height: 2px;
125
+ top: 0.68em;
126
+ }
127
+ .theme-swiss .deck-slide ol {
128
+ padding-inline-start: 1.6em;
129
+ }
130
+ .theme-swiss .deck-slide ol > li::marker {
131
+ font-weight: 700;
132
+ color: var(--deck-accent);
133
+ }
134
+ .theme-swiss .deck-slide strong {
135
+ font-weight: 700;
136
+ }
137
+ .theme-swiss .deck-slide em {
138
+ font-style: normal;
139
+ color: var(--deck-accent);
140
+ }
141
+ .theme-swiss .deck-slide a {
142
+ color: inherit;
143
+ text-decoration-color: var(--deck-accent);
144
+ text-decoration-thickness: 0.12em;
145
+ text-underline-offset: 0.12em;
146
+ }
147
+ .theme-swiss .deck-slide a:hover {
148
+ color: var(--deck-accent);
149
+ }
150
+ .theme-swiss .deck-slide blockquote {
151
+ position: relative;
152
+ margin: 0.6em 0;
153
+ padding: 0 0 0 1.1em;
154
+ border: 0;
155
+ border-radius: 0;
156
+ background: none;
157
+ color: var(--deck-fg);
158
+ font-size: 1.15em;
159
+ font-weight: 500;
160
+ letter-spacing: -0.015em;
161
+ line-height: 1.25;
162
+ }
163
+ .theme-swiss .deck-slide blockquote::before {
164
+ content: "\201C";
165
+ position: absolute;
166
+ left: -0.05em;
167
+ top: -0.12em;
168
+ font-weight: 800;
169
+ font-size: 1.6em;
170
+ line-height: 1;
171
+ color: var(--deck-accent);
172
+ }
173
+ .theme-swiss .deck-slide blockquote p:last-child {
174
+ margin-bottom: 0;
175
+ }
176
+ .theme-swiss .deck-slide hr {
177
+ border-top: 3px solid var(--swiss-ink);
178
+ margin: 0.8em 0;
179
+ }
180
+ .theme-swiss .deck-slide table {
181
+ font-size: 0.72em;
182
+ border-top: 3px solid var(--swiss-ink);
183
+ }
184
+ .theme-swiss .deck-slide th {
185
+ color: var(--deck-fg);
186
+ font-weight: 700;
187
+ font-size: 0.78em;
188
+ letter-spacing: 0.02em;
189
+ border-bottom: 1px solid var(--swiss-ink);
190
+ }
191
+ .theme-swiss .deck-slide :is(th, td) {
192
+ padding: 0.5em 1em 0.5em 0;
193
+ }
194
+ .theme-swiss .deck-slide td {
195
+ border-bottom-color: var(--deck-border);
196
+ }
197
+ .theme-swiss .deck-slide :not(pre) > code {
198
+ font-size: 0.8em;
199
+ padding: 0.06em 0.3em;
200
+ border-radius: 0;
201
+ background: var(--deck-surface);
202
+ color: var(--deck-fg);
203
+ }
204
+ .theme-swiss .deck-kbd {
205
+ border-radius: 0;
206
+ border-color: var(--swiss-ink);
207
+ border-bottom-width: 2px;
208
+ }
209
+ .theme-swiss .deck-slide :is(img, video) {
210
+ border-radius: 0;
211
+ }
212
+
213
+ /* ── code ──────────────────────────────────────────────────────────────── */
214
+ .theme-swiss .deck-code-block {
215
+ border-radius: 0;
216
+ border: 0;
217
+ border-top: 3px solid var(--swiss-ink);
218
+ }
219
+ .theme-swiss .deck-code-title {
220
+ font: 700 0.46em var(--deck-body-font);
221
+ letter-spacing: 0.04em;
222
+ text-transform: uppercase;
223
+ color: var(--deck-fg);
224
+ padding: 0.7em 1.2em;
225
+ border-bottom: 1px solid var(--deck-border);
226
+ }
227
+ .theme-swiss .deck-code-title-dot {
228
+ border-radius: 0;
229
+ width: 0.75em;
230
+ height: 0.75em;
231
+ background: var(--deck-accent);
232
+ }
233
+ .theme-swiss pre.deck-code,
234
+ .theme-swiss .shiki-magic-move-wrap {
235
+ font-size: 0.58em;
236
+ line-height: 1.65;
237
+ }
238
+ .theme-swiss pre.deck-code {
239
+ padding: 0.9em 0;
240
+ }
241
+ .theme-swiss pre.deck-code .line {
242
+ padding: 0 1.3em;
243
+ }
244
+ .theme-swiss .shiki-magic-move-wrap {
245
+ padding: 0.9em 1.3em;
246
+ }
247
+ .theme-swiss pre.deck-code .line.is-active {
248
+ box-shadow: inset 0.3em 0 0 var(--deck-accent);
249
+ }
250
+ .theme-swiss pre.deck-code .line.is-dim {
251
+ opacity: 0.28;
252
+ }
253
+ .theme-swiss .deck-code-copy {
254
+ border-radius: 0;
255
+ }
256
+
257
+ /* ── components ────────────────────────────────────────────────────────── */
258
+ .theme-swiss .deck-callout {
259
+ padding: 0.6em 0.9em 0.7em;
260
+ border: 0;
261
+ border-top: 0.32em solid var(--swiss-kind, var(--swiss-ink));
262
+ border-radius: 0;
263
+ background: var(--deck-surface);
264
+ font-size: 0.8em;
265
+ --swiss-kind: var(--swiss-ink);
266
+ }
267
+ .theme-swiss .deck-callout:is(.kind-danger, .kind-warn) {
268
+ --swiss-kind: var(--deck-accent);
269
+ }
270
+ .theme-swiss .deck-callout.kind-note {
271
+ --swiss-kind: var(--deck-muted);
272
+ }
273
+ .theme-swiss .deck-callout-title {
274
+ font-size: 0.72em;
275
+ font-weight: 800;
276
+ letter-spacing: 0.04em;
277
+ text-transform: uppercase;
278
+ margin-bottom: 0.3em;
279
+ }
280
+ .theme-swiss .deck-callout.kind-danger .deck-callout-title {
281
+ color: var(--deck-accent);
282
+ }
283
+ .theme-swiss .deck-callout > div > :last-child {
284
+ margin-bottom: 0;
285
+ }
286
+ .theme-swiss .deck-badge {
287
+ border-radius: 0;
288
+ border: 2px solid currentColor;
289
+ font-weight: 800;
290
+ letter-spacing: 0.04em;
291
+ }
292
+ .theme-swiss .deck-toc {
293
+ counter-reset: swiss-toc;
294
+ }
295
+ .theme-swiss .deck-toc li {
296
+ margin: 0;
297
+ padding: 0.28em 0;
298
+ border-top: 1px solid var(--deck-border);
299
+ }
300
+ .theme-swiss .deck-toc li.level-1 {
301
+ counter-increment: swiss-toc;
302
+ font-weight: 700;
303
+ letter-spacing: -0.01em;
304
+ }
305
+ .theme-swiss .deck-toc li.level-1 > a::before {
306
+ content: counter(swiss-toc, decimal-leading-zero);
307
+ display: inline-block;
308
+ width: 2.4em;
309
+ font-weight: 700;
310
+ color: var(--deck-accent);
311
+ font-variant-numeric: tabular-nums;
312
+ }
313
+ .theme-swiss .deck-toc li:is(.level-2, .level-3) {
314
+ padding-inline-start: 2.4em;
315
+ font-weight: 400;
316
+ }
317
+ .theme-swiss .deck-toc li.is-current > a {
318
+ color: var(--deck-accent);
319
+ }
320
+ .theme-swiss .deck-mark {
321
+ --mark-color: var(--deck-accent);
322
+ }
323
+
324
+ /* ── chrome ────────────────────────────────────────────────────────────── */
325
+ .theme-swiss .deck-progress {
326
+ height: 6px;
327
+ background: transparent;
328
+ }
329
+ .theme-swiss .deck-progress span {
330
+ background: var(--deck-accent);
331
+ }
332
+ .theme-swiss .deck-slide-number {
333
+ font: 700 14px var(--deck-body-font);
334
+ font-variant-numeric: tabular-nums;
335
+ color: var(--deck-fg);
336
+ background: none;
337
+ border-radius: 0;
338
+ padding: 4px 6px;
339
+ }
340
+
341
+ /* ── the running header (index.tsx's slide-top layer) ─────────────────── */
342
+ .theme-swiss .swiss-header {
343
+ position: absolute;
344
+ top: calc(var(--deck-pad) * 0.42);
345
+ left: var(--deck-pad);
346
+ right: var(--deck-pad);
347
+ display: grid;
348
+ grid-template-columns: repeat(12, 1fr);
349
+ column-gap: 1em;
350
+ padding-top: 0.35em;
351
+ border-top: 2px solid var(--swiss-ink);
352
+ font: 700 0.42em/1.2 var(--deck-body-font);
353
+ letter-spacing: 0.02em;
354
+ color: var(--deck-fg);
355
+ }
356
+ .theme-swiss .swiss-header-title {
357
+ grid-column: 1 / span 6;
358
+ overflow: hidden;
359
+ white-space: nowrap;
360
+ text-overflow: ellipsis;
361
+ }
362
+ .theme-swiss .swiss-header-section {
363
+ grid-column: 7 / span 4;
364
+ color: var(--deck-muted);
365
+ overflow: hidden;
366
+ white-space: nowrap;
367
+ text-overflow: ellipsis;
368
+ }
369
+ .theme-swiss .swiss-header-page {
370
+ grid-column: 11 / span 2;
371
+ text-align: end;
372
+ font-variant-numeric: tabular-nums;
373
+ }
374
+ .theme-swiss .swiss-header-page b {
375
+ color: var(--deck-accent);
376
+ }
377
+ /* ── layouts ───────────────────────────────────────────────────────────── */
378
+ .theme-swiss .deck-layout-center :is(h1, h2) {
379
+ letter-spacing: -0.04em;
380
+ }
381
+ .theme-swiss .deck-layout-cover {
382
+ justify-content: flex-end;
383
+ align-items: flex-start;
384
+ }
385
+ .theme-swiss .deck-layout-cover::before {
386
+ content: "";
387
+ position: absolute;
388
+ top: 0;
389
+ left: 0;
390
+ width: 1.4em;
391
+ height: 1.4em;
392
+ background: var(--deck-accent);
393
+ }
394
+ .theme-swiss .deck-layout-cover::after {
395
+ content: "";
396
+ position: absolute;
397
+ top: 0;
398
+ left: calc(var(--swiss-col) * 6 + 6em);
399
+ right: 0;
400
+ border-top: 3px solid var(--swiss-ink);
401
+ }
402
+ .theme-swiss .deck-layout-cover h1 {
403
+ font-size: 7em;
404
+ letter-spacing: -0.055em;
405
+ line-height: 0.86;
406
+ margin-bottom: 0.18em;
407
+ max-width: 10ch;
408
+ }
409
+ .theme-swiss .deck-layout-cover > p {
410
+ max-width: calc(var(--swiss-col) * 7 + 6em);
411
+ font-size: 1.05em;
412
+ font-weight: 500;
413
+ color: var(--deck-fg);
414
+ }
415
+ .theme-swiss .deck-layout-cover h4 {
416
+ margin-bottom: 1.2em;
417
+ }
418
+ .theme-swiss .deck-layout-intro {
419
+ justify-content: flex-end;
420
+ align-items: flex-start;
421
+ }
422
+ .theme-swiss .deck-layout-intro h1 {
423
+ font-size: 4.6em;
424
+ max-width: 12ch;
425
+ }
426
+ .theme-swiss .deck-layout-intro > p {
427
+ max-width: calc(var(--swiss-col) * 7 + 6em);
428
+ }
429
+ /* a section is the signal colour, edge to edge: painted on the slide itself, so the layout keeps
430
+ its own box (a ground hung past it read as overflow to the auto-fit) */
431
+ .theme-swiss .deck-slide.layout-section::before {
432
+ content: "";
433
+ position: absolute;
434
+ inset: 0;
435
+ background: var(--swiss-signal-ground);
436
+ pointer-events: none;
437
+ }
438
+ .theme-swiss .deck-layout-section {
439
+ justify-content: flex-end;
440
+ align-items: flex-start;
441
+ color: var(--swiss-on-signal);
442
+ }
443
+ .theme-swiss .deck-layout-section :is(h1, h2) {
444
+ font-size: 6em;
445
+ letter-spacing: -0.06em;
446
+ line-height: 0.88;
447
+ max-width: 9ch;
448
+ color: var(--swiss-on-signal);
449
+ }
450
+ .theme-swiss .deck-layout-section > p {
451
+ max-width: calc(var(--swiss-col) * 6 + 5em);
452
+ font-weight: 500;
453
+ }
454
+ .theme-swiss .deck-layout-section :not(pre) > code {
455
+ background: rgba(255, 255, 255, 0.18);
456
+ color: inherit;
457
+ }
458
+ .theme-swiss .deck-layout-end {
459
+ align-items: flex-start;
460
+ justify-content: flex-end;
461
+ text-align: start;
462
+ }
463
+ .theme-swiss .deck-layout-end :is(h1, h2) {
464
+ font-size: 7em;
465
+ letter-spacing: -0.06em;
466
+ line-height: 0.86;
467
+ }
468
+ .theme-swiss .deck-layout-end > p {
469
+ font-weight: 700;
470
+ }
471
+ .theme-swiss .deck-layout-end > p::before {
472
+ content: "";
473
+ display: inline-block;
474
+ width: 0.7em;
475
+ height: 0.7em;
476
+ margin-right: 0.5em;
477
+ background: var(--deck-accent);
478
+ }
479
+ .theme-swiss .deck-layout-fact {
480
+ align-items: flex-start;
481
+ text-align: start;
482
+ justify-content: flex-end;
483
+ }
484
+ .theme-swiss .deck-layout-fact > :is(h1, h2, p, .deck-counter):first-child {
485
+ font-family: var(--deck-heading-font);
486
+ font-size: 9em;
487
+ font-weight: 800;
488
+ letter-spacing: -0.07em;
489
+ line-height: 0.8;
490
+ margin-bottom: 0.12em;
491
+ color: var(--deck-accent);
492
+ }
493
+ .theme-swiss .deck-layout-fact > :not(:first-child) {
494
+ max-width: calc(var(--swiss-col) * 6 + 5em);
495
+ font-size: 1.1em;
496
+ font-weight: 500;
497
+ }
498
+ .theme-swiss .deck-layout-quote {
499
+ padding-inline: 0 calc(var(--swiss-col) * 3 + 3em);
500
+ justify-content: center;
501
+ font-style: normal;
502
+ font-size: 1em;
503
+ }
504
+ .theme-swiss .deck-layout-quote blockquote {
505
+ padding-left: 0;
506
+ font-size: 2.3em;
507
+ font-weight: 700;
508
+ letter-spacing: -0.035em;
509
+ line-height: 1.04;
510
+ }
511
+ .theme-swiss .deck-layout-quote blockquote::before {
512
+ position: static;
513
+ display: block;
514
+ font-size: 1.8em;
515
+ line-height: 0.8;
516
+ height: 0.45em;
517
+ }
518
+ .theme-swiss .deck-layout-quote > p {
519
+ margin-top: 0.9em;
520
+ font-weight: 700;
521
+ }
522
+ .theme-swiss .deck-layout-quote > p::before {
523
+ content: "\2014\2009";
524
+ color: var(--deck-accent);
525
+ }
526
+ .theme-swiss .deck-layout-statement {
527
+ align-items: flex-start;
528
+ text-align: start;
529
+ }
530
+ .theme-swiss .deck-layout-statement :is(h1, h2) {
531
+ font-size: 5em;
532
+ letter-spacing: -0.055em;
533
+ line-height: 0.92;
534
+ max-width: 13ch;
535
+ }
536
+ .theme-swiss .deck-layout-full {
537
+ padding: 0;
538
+ }
539
+ .theme-swiss .deck-layout-two-cols {
540
+ column-gap: 2em;
541
+ }
542
+ .theme-swiss .deck-layout-two-cols > :is(.deck-slot-default, .deck-slot-right) {
543
+ padding-top: 0.5em;
544
+ border-top: 3px solid var(--swiss-ink);
545
+ }
546
+ .theme-swiss .deck-layout-two-cols > :is(.deck-slot-default, .deck-slot-right) > :first-child {
547
+ margin-top: 0;
548
+ }
549
+ .theme-swiss .deck-layout-two-cols :is(h2) {
550
+ font-size: 1.9em;
551
+ }
552
+ .theme-swiss .deck-layout-two-cols-header {
553
+ column-gap: 2em;
554
+ }
555
+ .theme-swiss .deck-layout-two-cols-header > .deck-slot-default {
556
+ margin-bottom: 0.4em;
557
+ }
558
+ .theme-swiss .deck-layout-two-cols-header > :is(.deck-slot-left, .deck-slot-right) {
559
+ padding-top: 0.45em;
560
+ border-top: 3px solid var(--swiss-ink);
561
+ }
562
+ .theme-swiss .deck-layout-two-cols-header > .deck-slot-left {
563
+ border-top-color: var(--deck-accent);
564
+ }
565
+ .theme-swiss .deck-layout-image .deck-layout-image-content {
566
+ background: linear-gradient(180deg, transparent 30%, rgba(0, 0, 0, 0.72));
567
+ }
568
+ .theme-swiss .deck-layout-image .deck-layout-image-content :is(h1, h2) {
569
+ font-size: 3.4em;
570
+ max-width: 12ch;
571
+ }
572
+ .theme-swiss :is(.deck-layout-image-left, .deck-layout-image-right) .deck-layout-image-content {
573
+ padding: var(--deck-pad);
574
+ justify-content: flex-end;
575
+ }
576
+ .theme-swiss :is(.deck-layout-image-left, .deck-layout-image-right) .deck-layout-image-content :is(h1, h2) {
577
+ font-size: 2.4em;
578
+ }
579
+ .theme-swiss .deck-layout-image-pane {
580
+ background-color: var(--deck-surface);
581
+ }
582
+ .theme-swiss :is(.deck-layout-iframe, .deck-layout-iframe-left, .deck-layout-iframe-right) .deck-frame.deck-layout-iframe-pane {
583
+ border-radius: 0;
584
+ border: 3px solid var(--swiss-ink);
585
+ box-shadow: none;
586
+ }
587
+ .theme-swiss :is(.deck-layout-iframe-left, .deck-layout-iframe-right) .deck-layout-iframe-content {
588
+ padding-inline: calc(var(--deck-pad) * 0.4);
589
+ }
590
+
591
+ /* ── the theme's own layouts (index.tsx) ───────────────────────────────── */
592
+ /* poster: one word or number, as large as the slide allows, and a line of small print */
593
+ .theme-swiss .deck-layout-poster {
594
+ justify-content: flex-end;
595
+ align-items: flex-start;
596
+ }
597
+ .theme-swiss .deck-layout-poster :is(h1, h2) {
598
+ font-size: var(--swiss-poster-size, 18em);
599
+ letter-spacing: -0.075em;
600
+ line-height: 0.78;
601
+ margin: 0 0 0.05em -0.06em;
602
+ max-width: none;
603
+ white-space: nowrap;
604
+ }
605
+ .theme-swiss .deck-layout-poster.is-signal :is(h1, h2) {
606
+ color: var(--deck-accent);
607
+ }
608
+ .theme-swiss .deck-layout-poster > :not(h1, h2) {
609
+ max-width: calc(var(--swiss-col) * 6 + 5em);
610
+ font-weight: 500;
611
+ }
612
+ .theme-swiss .deck-layout-poster .deck-slot-meta {
613
+ position: absolute;
614
+ top: 0;
615
+ right: 0;
616
+ width: calc(var(--swiss-col) * 4 + 3em);
617
+ padding-top: 0.4em;
618
+ border-top: 3px solid var(--swiss-ink);
619
+ font-size: 0.62em;
620
+ font-weight: 600;
621
+ }
622
+ /* index: a numbered list set as a grid of cells, each with its rule and number */
623
+ .theme-swiss .deck-layout-index :is(ol, ul) {
624
+ display: grid;
625
+ grid-template-columns: repeat(var(--swiss-index-cols, 3), 1fr);
626
+ column-gap: 1em;
627
+ row-gap: 1em;
628
+ list-style: none;
629
+ padding: 0;
630
+ margin: 0.4em 0 0;
631
+ counter-reset: swiss-index;
632
+ }
633
+ .theme-swiss .deck-layout-index :is(ol, ul) > li {
634
+ counter-increment: swiss-index;
635
+ margin: 0;
636
+ padding-top: 0.4em;
637
+ border-top: 3px solid var(--swiss-ink);
638
+ font-size: 0.82em;
639
+ font-weight: 500;
640
+ line-height: 1.3;
641
+ }
642
+ .theme-swiss .deck-layout-index :is(ol, ul) > li::before {
643
+ content: counter(swiss-index, decimal-leading-zero);
644
+ position: static;
645
+ display: block;
646
+ width: auto;
647
+ height: auto;
648
+ background: none;
649
+ margin-bottom: 0.35em;
650
+ font: 800 2em/1 var(--deck-heading-font);
651
+ letter-spacing: -0.04em;
652
+ color: var(--deck-accent);
653
+ }
654
+ .theme-swiss .deck-layout-index :is(ol, ul) > li strong {
655
+ display: block;
656
+ font-size: 1.1em;
657
+ margin-bottom: 0.15em;
658
+ }
659
+ /* grid: a header across, then each slot a column under a heavy rule */
660
+ .theme-swiss .deck-layout-grid {
661
+ display: grid;
662
+ grid-template-columns: repeat(var(--swiss-grid-cols, 3), minmax(0, 1fr));
663
+ column-gap: 1em;
664
+ row-gap: 0.6em;
665
+ align-content: start;
666
+ }
667
+ .theme-swiss .deck-layout-grid > .deck-slot-default {
668
+ grid-column: 1 / -1;
669
+ }
670
+ /* as many columns as the slide has slots, two to five */
671
+ .theme-swiss .deck-layout-grid:has(> .deck-slot-default + .deck-slot + .deck-slot:last-child) {
672
+ --swiss-grid-cols: 2;
673
+ }
674
+ .theme-swiss .deck-layout-grid:has(> .deck-slot-default + .deck-slot + .deck-slot + .deck-slot + .deck-slot:last-child) {
675
+ --swiss-grid-cols: 4;
676
+ }
677
+ .theme-swiss .deck-layout-grid:has(> .deck-slot-default + .deck-slot + .deck-slot + .deck-slot + .deck-slot + .deck-slot:last-child) {
678
+ --swiss-grid-cols: 5;
679
+ }
680
+ .theme-swiss .deck-layout-grid > .deck-slot:not(.deck-slot-default) {
681
+ padding-top: 0.4em;
682
+ border-top: 3px solid var(--swiss-ink);
683
+ font-size: 0.82em;
684
+ }
685
+ .theme-swiss .deck-layout-grid > .deck-slot:not(.deck-slot-default) > :first-child {
686
+ margin-top: 0;
687
+ }
688
+ .theme-swiss .deck-layout-grid > .deck-slot:nth-child(2) {
689
+ border-top-color: var(--deck-accent);
690
+ }
691
+ /* Rule: a heavy rule, with a label */
692
+ .theme-swiss .swiss-rule {
693
+ display: flex;
694
+ align-items: baseline;
695
+ gap: 1em;
696
+ margin: 0.7em 0;
697
+ padding-top: 0.3em;
698
+ border-top: 3px solid var(--swiss-ink);
699
+ font-size: 0.55em;
700
+ font-weight: 700;
701
+ letter-spacing: 0.03em;
702
+ text-transform: uppercase;
703
+ }
704
+ .theme-swiss .swiss-rule.is-signal {
705
+ border-top-color: var(--deck-accent);
706
+ }
707
+ .theme-swiss .swiss-rule span:last-child {
708
+ margin-left: auto;
709
+ color: var(--deck-muted);
710
+ }
711
+
712
+ /* ── narrow screens (the scroll view on a phone) ──────────────────────── */
713
+ @media (max-width: 640px) {
714
+ .theme-swiss .deck-slide.is-scroll .deck-layout-index :is(ol, ul),
715
+ .theme-swiss .deck-slide.is-scroll .deck-layout-grid {
716
+ grid-template-columns: 1fr;
717
+ }
718
+ }
719
+ @media (prefers-reduced-motion: reduce) {
720
+ .theme-swiss .deck-progress span {
721
+ transition: none;
722
+ }
723
+ }