@kadal/theme-ocean 0.0.0-stage → 0.4.1

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 +113 -0
  4. package/package.json +99 -4
  5. package/style.css +754 -0
package/style.css ADDED
@@ -0,0 +1,754 @@
1
+ /* ─────────────────────────────────────────────────────────────────────────────
2
+ Ocean — Kadal's own theme. Kadal is Tamil for the sea, and the palette is the one kadal.cc
3
+ dives through: sunlit shallows in the light scheme (foam, sky, deep-sea ink), midnight water
4
+ in the dark one (twilight blue sinking to the abyss, bioluminescent cyan, lure amber).
5
+ Calm gradients for the ground, Catamaran for type, Night Owl for code.
6
+
7
+ Everything is scoped under .theme-ocean; dark is .theme-ocean[data-color-scheme="dark"].
8
+ themeConfig: `accent` (--theme-accent) and `accentDark` (--theme-accent-dark) recolour the
9
+ accent per scheme; `waves: false` (--theme-waves: 0) hides the swells on covers.
10
+ ───────────────────────────────────────────────────────────────────────────── */
11
+
12
+ .theme-ocean {
13
+ /* colour — sunlit */
14
+ --deck-bg: #f2f8fc;
15
+ --deck-fg: #0e2238;
16
+ --deck-muted: #3b5670;
17
+ --deck-accent: var(--theme-accent, #1d63a8);
18
+ --deck-accent-2: #13908e;
19
+ --deck-surface: rgba(255, 255, 255, 0.74);
20
+ --deck-border: rgba(14, 34, 56, 0.13);
21
+ --deck-live: var(--theme-accent, #1d63a8);
22
+ --deck-controls-color: var(--deck-accent);
23
+ /* the ground: open water under a high sun */
24
+ --ocean-ground:
25
+ radial-gradient(120% 70% at 12% -10%, rgba(255, 255, 255, 0.95), transparent 60%),
26
+ radial-gradient(90% 60% at 100% 110%, rgba(63, 210, 207, 0.16), transparent 70%),
27
+ linear-gradient(172deg, #f6fbff 0%, #ebf5fc 48%, #dceef5 100%);
28
+ --ocean-heading: linear-gradient(100deg, #0e2238 10%, #1d63a8 70%, #13908e 100%);
29
+ --ocean-coral: #c43a30;
30
+ --ocean-good: #13795b;
31
+ --ocean-warn: #a35b00;
32
+ --ocean-wave-1: rgba(29, 99, 168, 0.12);
33
+ --ocean-wave-2: rgba(19, 144, 142, 0.14);
34
+ --ocean-wave-3: rgba(29, 99, 168, 0.2);
35
+ --ocean-shadow: 0 18px 48px -22px rgba(10, 40, 80, 0.35);
36
+ /* type */
37
+ --deck-heading-font: "Catamaran", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
38
+ --deck-body-font: "Catamaran", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
39
+ --deck-mono-font: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;
40
+ --deck-serif-font: ui-serif, Georgia, Cambria, "Times New Roman", serif;
41
+ --deck-base-size: 36px;
42
+ /* code: Night Owl Light */
43
+ --deck-code-bg: #fbfdff;
44
+ --deck-code-fg: #403f53;
45
+ --deck-code-active: rgba(29, 99, 168, 0.1);
46
+ /* shape */
47
+ --deck-radius: 18px;
48
+ --deck-pad: 96px;
49
+ --deck-transition: 550ms;
50
+ }
51
+ .theme-ocean[data-color-scheme="dark"] {
52
+ /* colour — midnight water */
53
+ --deck-bg: #071a3a;
54
+ --deck-fg: #e6f2ff;
55
+ --deck-muted: #9fb7d4;
56
+ /* an accent set in themeConfig, lifted for deep water; invalid (so skipped) when unset */
57
+ --ocean-accent-lifted: color-mix(in oklab, var(--theme-accent) 55%, white);
58
+ --deck-accent: var(--theme-accent-dark, var(--ocean-accent-lifted, #5ff7ff));
59
+ --deck-accent-2: #ffd46b;
60
+ --deck-surface: rgba(140, 200, 255, 0.07);
61
+ --deck-border: rgba(95, 247, 255, 0.17);
62
+ --deck-live: var(--deck-accent);
63
+ --ocean-ground:
64
+ radial-gradient(90% 55% at 50% -18%, rgba(95, 247, 255, 0.13), transparent 70%),
65
+ radial-gradient(60% 50% at 95% 105%, rgba(255, 98, 212, 0.07), transparent 70%),
66
+ linear-gradient(178deg, #0d3466 0%, #0a2550 34%, #071a3a 72%, #041128 100%);
67
+ --ocean-heading: linear-gradient(100deg, #e6f2ff 15%, #5ff7ff 75%, #7dffa0 105%);
68
+ --ocean-coral: #ff8a80;
69
+ --ocean-good: #7dffa0;
70
+ --ocean-warn: #ffd46b;
71
+ --ocean-wave-1: rgba(95, 247, 255, 0.07);
72
+ --ocean-wave-2: rgba(95, 247, 255, 0.1);
73
+ --ocean-wave-3: rgba(2, 6, 15, 0.45);
74
+ --ocean-shadow: 0 22px 60px -26px rgba(0, 0, 0, 0.7);
75
+ --deck-code-bg: #011627;
76
+ --deck-code-fg: #d6deeb;
77
+ --deck-code-active: rgba(95, 247, 255, 0.1);
78
+ color-scheme: dark;
79
+ }
80
+
81
+ /* ── the ground: every place a slide's page is painted ───────────────────── */
82
+ .theme-ocean :is(
83
+ .deck-backgrounds,
84
+ .deck-print-page,
85
+ .deck-overview-tile,
86
+ .deck-scroll-sticky,
87
+ .deck-thumbnail-capture
88
+ ),
89
+ .theme-ocean .deck-background[data-color-scheme],
90
+ .theme-ocean.deck-background[data-color-scheme] {
91
+ background: var(--ocean-ground);
92
+ background-color: var(--deck-bg);
93
+ }
94
+
95
+ /* ── type ──────────────────────────────────────────────────────────────── */
96
+ .theme-ocean .deck-slide {
97
+ line-height: 1.45;
98
+ }
99
+ .theme-ocean .deck-slide :is(h1, h2, h3, h4) {
100
+ font-weight: 800;
101
+ letter-spacing: -0.025em;
102
+ line-height: 1.04;
103
+ color: var(--deck-fg);
104
+ }
105
+ .theme-ocean .deck-slide h1 {
106
+ font-size: 3em;
107
+ }
108
+ .theme-ocean .deck-slide h2 {
109
+ font-size: 2em;
110
+ margin-bottom: 0.55em;
111
+ }
112
+ .theme-ocean .deck-slide h3 {
113
+ font-size: 1.3em;
114
+ font-weight: 700;
115
+ letter-spacing: -0.01em;
116
+ }
117
+ .theme-ocean .deck-slide h4 {
118
+ font-size: 0.8em;
119
+ font-weight: 700;
120
+ letter-spacing: 0.14em;
121
+ text-transform: uppercase;
122
+ color: var(--deck-accent);
123
+ }
124
+ .theme-ocean .deck-slide :is(p, li) {
125
+ text-wrap: pretty;
126
+ }
127
+ .theme-ocean .deck-slide ul > li::marker {
128
+ color: var(--deck-accent);
129
+ font-size: 1.1em;
130
+ }
131
+ .theme-ocean .deck-slide ol > li::marker {
132
+ color: var(--deck-accent);
133
+ font-weight: 700;
134
+ font-variant-numeric: tabular-nums;
135
+ }
136
+ .theme-ocean .deck-slide li {
137
+ padding-inline-start: 0.15em;
138
+ }
139
+ .theme-ocean .deck-slide strong {
140
+ font-weight: 800;
141
+ }
142
+ .theme-ocean .deck-slide em {
143
+ color: var(--deck-accent);
144
+ font-style: normal;
145
+ font-weight: 600;
146
+ }
147
+ .theme-ocean .deck-slide a {
148
+ color: var(--deck-accent);
149
+ text-decoration-thickness: 0.07em;
150
+ text-underline-offset: 0.18em;
151
+ text-decoration-color: color-mix(in oklab, var(--deck-accent) 45%, transparent);
152
+ }
153
+ .theme-ocean .deck-slide a:hover {
154
+ text-decoration-color: currentColor;
155
+ }
156
+ .theme-ocean .deck-slide blockquote {
157
+ position: relative;
158
+ margin: 0.6em 0;
159
+ padding: 0.15em 0 0.15em 1.1em;
160
+ border: 0;
161
+ border-radius: 0;
162
+ background: none;
163
+ color: var(--deck-fg);
164
+ font-size: 1.12em;
165
+ font-weight: 500;
166
+ line-height: 1.35;
167
+ }
168
+ .theme-ocean .deck-slide blockquote::before {
169
+ content: "";
170
+ position: absolute;
171
+ inset: 0 auto 0 0;
172
+ width: 0.2em;
173
+ border-radius: 999px;
174
+ background: linear-gradient(180deg, var(--deck-accent), var(--deck-accent-2));
175
+ }
176
+ .theme-ocean .deck-slide blockquote p:last-child {
177
+ margin-bottom: 0;
178
+ }
179
+ .theme-ocean .deck-slide hr {
180
+ border-top: 2px solid var(--deck-border);
181
+ margin: 0.9em 0;
182
+ }
183
+ .theme-ocean .deck-slide table {
184
+ font-size: 0.74em;
185
+ border-radius: 14px;
186
+ overflow: hidden;
187
+ background: var(--deck-surface);
188
+ outline: 1px solid var(--deck-border);
189
+ }
190
+ .theme-ocean .deck-slide th {
191
+ color: var(--deck-accent);
192
+ font-size: 0.68em;
193
+ letter-spacing: 0.12em;
194
+ font-weight: 700;
195
+ border-bottom: 2px solid color-mix(in oklab, var(--deck-accent) 55%, transparent);
196
+ background: color-mix(in oklab, var(--deck-accent) 7%, transparent);
197
+ }
198
+ .theme-ocean .deck-slide :is(th, td) {
199
+ padding: 0.5em 0.85em;
200
+ }
201
+ .theme-ocean .deck-slide tbody tr:nth-child(even) td {
202
+ background: color-mix(in oklab, var(--deck-accent) 4%, transparent);
203
+ }
204
+ .theme-ocean .deck-slide tbody tr:last-child td {
205
+ border-bottom: 0;
206
+ }
207
+ .theme-ocean .deck-slide :not(pre) > code {
208
+ font-size: 0.8em;
209
+ padding: 0.12em 0.42em;
210
+ border-radius: 8px;
211
+ color: var(--deck-fg);
212
+ background: color-mix(in oklab, var(--deck-accent) 10%, transparent);
213
+ border: 1px solid color-mix(in oklab, var(--deck-accent) 18%, transparent);
214
+ }
215
+ .theme-ocean .deck-kbd {
216
+ border-color: color-mix(in oklab, var(--deck-accent) 30%, var(--deck-border));
217
+ background: var(--deck-surface);
218
+ }
219
+ .theme-ocean .deck-slide img,
220
+ .theme-ocean .deck-slide video {
221
+ border-radius: var(--deck-radius);
222
+ }
223
+
224
+ /* ── code ──────────────────────────────────────────────────────────────── */
225
+ .theme-ocean .deck-code-block {
226
+ border-radius: var(--deck-radius);
227
+ border: 1px solid var(--deck-border);
228
+ box-shadow: var(--ocean-shadow);
229
+ }
230
+ .theme-ocean .deck-code-title {
231
+ padding: 0.6em 1.2em;
232
+ font-size: 0.5em;
233
+ letter-spacing: 0.02em;
234
+ color: var(--deck-muted);
235
+ background: color-mix(in oklab, var(--deck-accent) 6%, transparent);
236
+ border-bottom-color: var(--deck-border);
237
+ }
238
+ .theme-ocean .deck-code-title-dot {
239
+ width: 0.7em;
240
+ height: 0.7em;
241
+ background: linear-gradient(135deg, var(--deck-accent), var(--deck-accent-2));
242
+ }
243
+ .theme-ocean pre.deck-code {
244
+ padding: 0.9em 0;
245
+ font-size: 0.62em;
246
+ line-height: 1.65;
247
+ }
248
+ .theme-ocean pre.deck-code .line {
249
+ padding: 0 1.5em;
250
+ }
251
+ .theme-ocean pre.deck-code .line.is-active {
252
+ background: var(--deck-code-active);
253
+ box-shadow: inset 0.22em 0 0 var(--deck-accent);
254
+ }
255
+ .theme-ocean pre.deck-code .line.is-dim {
256
+ opacity: 0.3;
257
+ }
258
+ .theme-ocean pre.deck-code.has-lines .line::before {
259
+ color: var(--deck-muted);
260
+ opacity: 0.55;
261
+ }
262
+ .theme-ocean .shiki-magic-move-wrap {
263
+ padding: 0.9em 1.5em;
264
+ font-size: 0.62em;
265
+ line-height: 1.65;
266
+ }
267
+ .theme-ocean .deck-code-copy {
268
+ border-radius: 8px;
269
+ }
270
+
271
+ /* ── components ────────────────────────────────────────────────────────── */
272
+ .theme-ocean .deck-callout {
273
+ position: relative;
274
+ padding: 0.75em 1.1em 0.75em 1.25em;
275
+ border-radius: var(--deck-radius);
276
+ border: 1px solid var(--deck-border);
277
+ border-inline-start-width: 1px;
278
+ background: var(--deck-surface);
279
+ box-shadow: var(--ocean-shadow);
280
+ font-size: 0.82em;
281
+ --ocean-kind: var(--deck-accent);
282
+ }
283
+ .theme-ocean .deck-callout::before {
284
+ content: "";
285
+ position: absolute;
286
+ inset: 0.7em auto 0.7em 0;
287
+ width: 0.2em;
288
+ border-radius: 0 999px 999px 0;
289
+ background: var(--ocean-kind);
290
+ }
291
+ .theme-ocean .deck-callout.kind-tip {
292
+ --ocean-kind: var(--ocean-good);
293
+ }
294
+ .theme-ocean .deck-callout.kind-warn {
295
+ --ocean-kind: var(--ocean-warn);
296
+ }
297
+ .theme-ocean .deck-callout.kind-danger {
298
+ --ocean-kind: var(--ocean-coral);
299
+ }
300
+ .theme-ocean .deck-callout.kind-note {
301
+ --ocean-kind: var(--deck-muted);
302
+ }
303
+ .theme-ocean .deck-callout-title {
304
+ color: var(--ocean-kind);
305
+ font-size: 0.78em;
306
+ font-weight: 800;
307
+ letter-spacing: 0.1em;
308
+ text-transform: uppercase;
309
+ margin-bottom: 0.3em;
310
+ }
311
+ .theme-ocean .deck-callout > div > :last-child {
312
+ margin-bottom: 0;
313
+ }
314
+ .theme-ocean .deck-badge {
315
+ border-color: var(--deck-border);
316
+ background: var(--deck-surface);
317
+ letter-spacing: 0.1em;
318
+ }
319
+ .theme-ocean .deck-badge.tone-accent {
320
+ color: var(--deck-accent);
321
+ border-color: color-mix(in oklab, var(--deck-accent) 40%, transparent);
322
+ background: color-mix(in oklab, var(--deck-accent) 10%, transparent);
323
+ }
324
+ .theme-ocean .deck-badge.tone-good {
325
+ color: var(--ocean-good);
326
+ }
327
+ .theme-ocean .deck-badge.tone-warn {
328
+ color: var(--ocean-warn);
329
+ }
330
+ .theme-ocean .deck-badge.tone-bad {
331
+ color: var(--ocean-coral);
332
+ }
333
+ .theme-ocean .deck-toc {
334
+ counter-reset: ocean-toc;
335
+ }
336
+ .theme-ocean .deck-toc li {
337
+ margin: 0.3em 0;
338
+ }
339
+ .theme-ocean .deck-toc li.level-1 {
340
+ counter-increment: ocean-toc;
341
+ font-weight: 700;
342
+ }
343
+ .theme-ocean .deck-toc li.level-1 > a::before {
344
+ content: counter(ocean-toc, decimal-leading-zero);
345
+ display: inline-block;
346
+ min-width: 2.2em;
347
+ font: 600 0.62em var(--deck-mono-font);
348
+ letter-spacing: 0.05em;
349
+ color: var(--deck-accent);
350
+ vertical-align: 0.2em;
351
+ }
352
+ .theme-ocean .deck-toc li:is(.level-2, .level-3) {
353
+ padding-inline-start: 2.2em;
354
+ font-weight: 500;
355
+ color: var(--deck-muted);
356
+ }
357
+ .theme-ocean .deck-toc li.is-current > a {
358
+ color: var(--deck-accent);
359
+ }
360
+ .theme-ocean .deck-counter {
361
+ font-weight: 800;
362
+ }
363
+ .theme-ocean .deck-mark {
364
+ --mark-color: var(--deck-accent);
365
+ }
366
+
367
+ /* ── chrome ────────────────────────────────────────────────────────────── */
368
+ .theme-ocean .deck-progress {
369
+ height: 5px;
370
+ background: color-mix(in oklab, var(--deck-accent) 12%, transparent);
371
+ }
372
+ .theme-ocean .deck-progress span {
373
+ background: linear-gradient(90deg, var(--deck-accent), var(--deck-accent-2));
374
+ border-radius: 0 999px 999px 0;
375
+ }
376
+ .theme-ocean .deck-slide-number {
377
+ font: 600 13px var(--deck-mono-font);
378
+ letter-spacing: 0.06em;
379
+ color: var(--deck-muted);
380
+ background: var(--deck-surface);
381
+ border: 1px solid var(--deck-border);
382
+ border-radius: 999px;
383
+ padding: 4px 11px;
384
+ backdrop-filter: blur(8px);
385
+ }
386
+
387
+ /* ── layouts ───────────────────────────────────────────────────────────── */
388
+ .theme-ocean .deck-layout-default > :is(h1, h2):first-child {
389
+ margin-top: 0.1em;
390
+ }
391
+ .theme-ocean .deck-layout-center {
392
+ gap: 0.2em;
393
+ }
394
+ .theme-ocean :is(.deck-layout-cover, .deck-layout-intro, .deck-layout-end, .deck-layout-waves) :is(h1, h2) {
395
+ background: var(--ocean-heading);
396
+ -webkit-background-clip: text;
397
+ background-clip: text;
398
+ color: transparent;
399
+ /* a background-clipped line needs room below for descenders */
400
+ padding-bottom: 0.06em;
401
+ }
402
+ .theme-ocean .deck-layout-cover {
403
+ align-items: flex-start;
404
+ justify-content: center;
405
+ padding-bottom: 1.6em;
406
+ }
407
+ .theme-ocean .deck-layout-cover h1 {
408
+ font-size: 4.1em;
409
+ max-width: 13ch;
410
+ margin-bottom: 0.3em;
411
+ }
412
+ .theme-ocean .deck-layout-cover > p {
413
+ font-size: 1.1em;
414
+ max-width: 34ch;
415
+ color: var(--deck-muted);
416
+ }
417
+ /* the cover's waves: three still swells along the bottom edge (the `waves` layout moves them),
418
+ on the slide rather than the layout so they never count as the layout's overflow */
419
+ .theme-ocean .deck-slide.layout-cover::after {
420
+ content: "";
421
+ position: absolute;
422
+ left: 0;
423
+ right: 0;
424
+ bottom: 0;
425
+ height: 32%;
426
+ pointer-events: none;
427
+ opacity: var(--theme-waves, 1);
428
+ background:
429
+ radial-gradient(60% 120% at 20% 120%, var(--ocean-wave-3), transparent 70%),
430
+ radial-gradient(70% 140% at 85% 130%, var(--ocean-wave-2), transparent 70%),
431
+ radial-gradient(90% 100% at 50% 140%, var(--ocean-wave-1), transparent 75%);
432
+ }
433
+ .theme-ocean .deck-layout-intro {
434
+ align-items: flex-start;
435
+ }
436
+ .theme-ocean .deck-layout-intro::before,
437
+ .theme-ocean .deck-layout-section::before {
438
+ content: "";
439
+ display: block;
440
+ width: 2.6em;
441
+ height: 0.5em;
442
+ margin-bottom: 0.9em;
443
+ background: linear-gradient(90deg, var(--deck-accent), var(--deck-accent-2));
444
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 52 10'%3E%3Cpath d='M1 5c4.3-4 8.7-4 13 0s8.7 4 13 0 8.7-4 13 0 8.7 4 11 2' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E")
445
+ center / 100% 100% no-repeat;
446
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 52 10'%3E%3Cpath d='M1 5c4.3-4 8.7-4 13 0s8.7 4 13 0 8.7-4 13 0 8.7 4 11 2' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E")
447
+ center / 100% 100% no-repeat;
448
+ }
449
+ .theme-ocean .deck-layout-intro h1 {
450
+ font-size: 3.4em;
451
+ max-width: 16ch;
452
+ }
453
+ .theme-ocean .deck-layout-intro > p {
454
+ max-width: 40ch;
455
+ color: var(--deck-muted);
456
+ }
457
+ .theme-ocean .deck-layout-section {
458
+ align-items: flex-start;
459
+ }
460
+ .theme-ocean .deck-layout-section :is(h1, h2) {
461
+ font-size: 3.5em;
462
+ max-width: 15ch;
463
+ }
464
+ .theme-ocean .deck-layout-section > p {
465
+ color: var(--deck-muted);
466
+ font-size: 1.05em;
467
+ max-width: 40ch;
468
+ }
469
+ .theme-ocean .deck-layout-end :is(h1, h2) {
470
+ font-size: 3.8em;
471
+ }
472
+ .theme-ocean .deck-layout-end > p {
473
+ color: var(--deck-muted);
474
+ }
475
+ .theme-ocean .deck-layout-fact > :is(h1, h2, p, .deck-counter):first-child {
476
+ font-size: 4.6em;
477
+ font-weight: 800;
478
+ letter-spacing: -0.04em;
479
+ line-height: 1;
480
+ margin-bottom: 0.15em;
481
+ background: var(--ocean-heading);
482
+ -webkit-background-clip: text;
483
+ background-clip: text;
484
+ color: transparent;
485
+ }
486
+ .theme-ocean .deck-layout-fact > :not(:first-child) {
487
+ font-size: 1.05em;
488
+ font-weight: 500;
489
+ color: var(--deck-muted);
490
+ }
491
+ .theme-ocean .deck-layout-quote {
492
+ padding-inline: 9%;
493
+ font-style: normal;
494
+ font-size: 1.35em;
495
+ font-weight: 600;
496
+ line-height: 1.3;
497
+ }
498
+ .theme-ocean .deck-layout-quote::before {
499
+ content: "\201C";
500
+ display: block;
501
+ height: 0.5em;
502
+ margin-bottom: 0.15em;
503
+ font: 800 3.4em/1 var(--deck-heading-font);
504
+ color: var(--deck-accent);
505
+ }
506
+ .theme-ocean .deck-layout-quote blockquote {
507
+ padding: 0;
508
+ font-size: 1em;
509
+ font-weight: 600;
510
+ }
511
+ .theme-ocean .deck-layout-quote blockquote::before {
512
+ display: none;
513
+ }
514
+ .theme-ocean .deck-layout-quote :is(p:last-child:not(:first-child), cite, footer) {
515
+ margin-top: 0.7em;
516
+ font-size: 0.6em;
517
+ font-weight: 600;
518
+ font-style: normal;
519
+ letter-spacing: 0.08em;
520
+ text-transform: uppercase;
521
+ color: var(--deck-muted);
522
+ }
523
+ .theme-ocean .deck-layout-statement :is(h1, h2) {
524
+ font-size: 3.3em;
525
+ max-width: 18ch;
526
+ margin-inline: auto;
527
+ }
528
+ .theme-ocean .deck-layout-statement > p {
529
+ color: var(--deck-muted);
530
+ max-width: 44ch;
531
+ }
532
+ .theme-ocean .deck-layout-full {
533
+ padding: 0;
534
+ }
535
+ .theme-ocean .deck-layout-two-cols {
536
+ column-gap: 2.6em;
537
+ }
538
+ .theme-ocean .deck-layout-two-cols > .deck-slot-default > :first-child,
539
+ .theme-ocean .deck-layout-two-cols > .deck-slot-right > :first-child {
540
+ margin-top: 0;
541
+ }
542
+ .theme-ocean .deck-layout-two-cols-header {
543
+ column-gap: 2.6em;
544
+ }
545
+ .theme-ocean .deck-layout-two-cols-header > .deck-slot-default {
546
+ position: relative;
547
+ padding-bottom: 0.55em;
548
+ margin-bottom: 0.45em;
549
+ }
550
+ .theme-ocean .deck-layout-two-cols-header > .deck-slot-default::after {
551
+ content: "";
552
+ position: absolute;
553
+ left: 0;
554
+ right: 0;
555
+ bottom: 0;
556
+ height: 2px;
557
+ background: linear-gradient(90deg, var(--deck-accent), var(--deck-accent-2) 40%, transparent);
558
+ }
559
+ .theme-ocean .deck-layout-two-cols-header > :is(.deck-slot-left, .deck-slot-right) {
560
+ padding: 0.75em 1em;
561
+ border-radius: var(--deck-radius);
562
+ border: 1px solid var(--deck-border);
563
+ background: var(--deck-surface);
564
+ }
565
+ .theme-ocean .deck-layout-two-cols-header > :is(.deck-slot-left, .deck-slot-right) > :last-child {
566
+ margin-bottom: 0;
567
+ }
568
+ .theme-ocean .deck-layout-image .deck-layout-image-content {
569
+ padding-bottom: calc(var(--deck-pad) * 0.8);
570
+ background: linear-gradient(180deg, transparent, rgba(4, 17, 40, 0.82));
571
+ }
572
+ .theme-ocean .deck-layout-image .deck-layout-image-content :is(h1, h2) {
573
+ color: #fff;
574
+ }
575
+ .theme-ocean :is(.deck-layout-image-left, .deck-layout-image-right) .deck-layout-image-content {
576
+ padding: calc(var(--deck-pad) * 0.9);
577
+ }
578
+ .theme-ocean .deck-layout-image-pane {
579
+ background-color: color-mix(in oklab, var(--deck-accent) 12%, var(--deck-bg));
580
+ }
581
+ .theme-ocean .deck-layout-image-left .deck-layout-image-pane {
582
+ border-radius: 0 28px 28px 0;
583
+ }
584
+ .theme-ocean .deck-layout-image-right .deck-layout-image-pane {
585
+ border-radius: 28px 0 0 28px;
586
+ }
587
+ .theme-ocean :is(.deck-layout-iframe, .deck-layout-iframe-left, .deck-layout-iframe-right) .deck-frame.deck-layout-iframe-pane {
588
+ border-radius: 20px;
589
+ border-color: var(--deck-border);
590
+ box-shadow: var(--ocean-shadow);
591
+ }
592
+ .theme-ocean :is(.deck-layout-iframe-left, .deck-layout-iframe-right) .deck-layout-iframe-content {
593
+ padding-inline: calc(var(--deck-pad) * 0.4);
594
+ }
595
+
596
+ /* ── the theme's own layouts (index.tsx) ───────────────────────────────── */
597
+ /* waves: the cover with the sea moving along the bottom */
598
+ .theme-ocean .deck-layout-waves {
599
+ justify-content: center;
600
+ align-items: flex-start;
601
+ padding-bottom: 2.2em;
602
+ }
603
+ .theme-ocean .deck-layout-waves.is-center {
604
+ align-items: center;
605
+ text-align: center;
606
+ }
607
+ .theme-ocean .deck-layout-waves h1 {
608
+ font-size: 4.2em;
609
+ max-width: 13ch;
610
+ margin-bottom: 0.3em;
611
+ }
612
+ .theme-ocean .deck-layout-waves.is-center h1 {
613
+ margin-inline: auto;
614
+ }
615
+ .theme-ocean .deck-layout-waves > .ocean-waves-body > p {
616
+ font-size: 1.1em;
617
+ max-width: 36ch;
618
+ color: var(--deck-muted);
619
+ }
620
+ .theme-ocean .deck-layout-waves.is-center > .ocean-waves-body > p {
621
+ margin-inline: auto;
622
+ }
623
+ .theme-ocean .ocean-waves-body {
624
+ position: relative;
625
+ z-index: 1;
626
+ }
627
+ .theme-ocean .ocean-waves {
628
+ position: absolute;
629
+ left: calc(var(--deck-pad) * -1);
630
+ right: calc(var(--deck-pad) * -1);
631
+ bottom: calc(var(--deck-pad) * -1);
632
+ height: 34%;
633
+ overflow: hidden;
634
+ pointer-events: none;
635
+ opacity: var(--theme-waves, 1);
636
+ }
637
+ .theme-ocean .ocean-waves svg {
638
+ position: absolute;
639
+ left: 0;
640
+ bottom: 0;
641
+ width: 200%;
642
+ height: 100%;
643
+ }
644
+ .theme-ocean .ocean-waves .ocean-swell-1 {
645
+ fill: var(--ocean-wave-1);
646
+ animation: ocean-drift 26s linear infinite;
647
+ }
648
+ .theme-ocean .ocean-waves .ocean-swell-2 {
649
+ fill: var(--ocean-wave-2);
650
+ animation: ocean-drift 19s linear infinite reverse;
651
+ }
652
+ .theme-ocean .ocean-waves .ocean-swell-3 {
653
+ fill: var(--ocean-wave-3);
654
+ animation: ocean-drift 14s linear infinite;
655
+ }
656
+ @keyframes ocean-drift {
657
+ to {
658
+ transform: translateX(-50%);
659
+ }
660
+ }
661
+ /* depth: a section opener with its number and a sounding line down the side */
662
+ .theme-ocean .deck-layout-depth {
663
+ display: grid;
664
+ grid-template-columns: auto 1fr;
665
+ column-gap: 1.4em;
666
+ align-content: center;
667
+ align-items: center;
668
+ }
669
+ .theme-ocean .ocean-depth-number {
670
+ font: 800 6.4em/0.9 var(--deck-heading-font);
671
+ letter-spacing: -0.05em;
672
+ background: var(--ocean-heading);
673
+ -webkit-background-clip: text;
674
+ background-clip: text;
675
+ color: transparent;
676
+ font-variant-numeric: tabular-nums;
677
+ }
678
+ .theme-ocean .ocean-depth-body :is(h1, h2) {
679
+ font-size: 2.8em;
680
+ max-width: 16ch;
681
+ margin-bottom: 0.25em;
682
+ }
683
+ .theme-ocean .ocean-depth-body > p {
684
+ color: var(--deck-muted);
685
+ max-width: 42ch;
686
+ }
687
+ .theme-ocean .ocean-depth-meta {
688
+ display: block;
689
+ margin-bottom: 0.6em;
690
+ font: 600 0.5em var(--deck-mono-font);
691
+ letter-spacing: 0.16em;
692
+ text-transform: uppercase;
693
+ color: var(--deck-accent);
694
+ }
695
+ .theme-ocean .ocean-depth-gauge {
696
+ position: absolute;
697
+ top: 4%;
698
+ bottom: 12%;
699
+ right: calc(var(--deck-pad) * -0.45);
700
+ width: 0.5em;
701
+ display: flex;
702
+ flex-direction: column;
703
+ justify-content: space-between;
704
+ align-items: flex-end;
705
+ }
706
+ .theme-ocean .ocean-depth-gauge span {
707
+ display: block;
708
+ width: 0.5em;
709
+ height: 2px;
710
+ background: var(--deck-border);
711
+ }
712
+ .theme-ocean .ocean-depth-gauge span:nth-child(5n + 1) {
713
+ width: 1em;
714
+ background: color-mix(in oklab, var(--deck-muted) 60%, transparent);
715
+ }
716
+ .theme-ocean .ocean-depth-gauge span.is-here {
717
+ width: 1.4em;
718
+ height: 4px;
719
+ border-radius: 999px;
720
+ background: var(--deck-accent);
721
+ }
722
+ /* Wave: a divider, a single swell drawn across the column */
723
+ .theme-ocean .ocean-wave {
724
+ display: block;
725
+ width: 100%;
726
+ height: 0.7em;
727
+ margin: 0.5em 0 0.7em;
728
+ color: var(--deck-accent);
729
+ }
730
+ .theme-ocean .ocean-wave path {
731
+ stroke: currentColor;
732
+ }
733
+
734
+ /* ── still copies: print, export, thumbnails ───────────────────────────── */
735
+ .theme-ocean .deck-print-page :is(.deck-code-block, .deck-callout, .deck-frame),
736
+ .theme-ocean .deck-slide.is-print :is(.deck-code-block, .deck-callout, .deck-frame) {
737
+ box-shadow: none;
738
+ }
739
+ .theme-ocean .deck-slide:is(.is-print, .is-tile) .ocean-waves :is(.ocean-swell-1, .ocean-swell-2, .ocean-swell-3) {
740
+ animation: none;
741
+ }
742
+ @media print {
743
+ .theme-ocean :is(.deck-code-block, .deck-callout, .deck-frame) {
744
+ box-shadow: none;
745
+ }
746
+ .theme-ocean .ocean-waves :is(.ocean-swell-1, .ocean-swell-2, .ocean-swell-3) {
747
+ animation: none;
748
+ }
749
+ }
750
+ @media (prefers-reduced-motion: reduce) {
751
+ .theme-ocean .ocean-waves :is(.ocean-swell-1, .ocean-swell-2, .ocean-swell-3) {
752
+ animation: none;
753
+ }
754
+ }