orz-markdown 1.0.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 (94) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +132 -0
  3. package/dist/index.d.ts +18 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +159 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/plugins/attrs.d.ts +3 -0
  8. package/dist/plugins/attrs.d.ts.map +1 -0
  9. package/dist/plugins/attrs.js +60 -0
  10. package/dist/plugins/attrs.js.map +1 -0
  11. package/dist/plugins/emoji.d.ts +2 -0
  12. package/dist/plugins/emoji.d.ts.map +1 -0
  13. package/dist/plugins/emoji.js +51 -0
  14. package/dist/plugins/emoji.js.map +1 -0
  15. package/dist/plugins/markdown-include.d.ts +3 -0
  16. package/dist/plugins/markdown-include.d.ts.map +1 -0
  17. package/dist/plugins/markdown-include.js +44 -0
  18. package/dist/plugins/markdown-include.js.map +1 -0
  19. package/dist/plugins/mermaid.d.ts +2 -0
  20. package/dist/plugins/mermaid.d.ts.map +1 -0
  21. package/dist/plugins/mermaid.js +18 -0
  22. package/dist/plugins/mermaid.js.map +1 -0
  23. package/dist/plugins/nyml.d.ts +2 -0
  24. package/dist/plugins/nyml.d.ts.map +1 -0
  25. package/dist/plugins/nyml.js +21 -0
  26. package/dist/plugins/nyml.js.map +1 -0
  27. package/dist/plugins/nyml_parser.d.ts +32 -0
  28. package/dist/plugins/nyml_parser.d.ts.map +1 -0
  29. package/dist/plugins/nyml_parser.js +236 -0
  30. package/dist/plugins/nyml_parser.js.map +1 -0
  31. package/dist/plugins/qrcode.d.ts +2 -0
  32. package/dist/plugins/qrcode.d.ts.map +1 -0
  33. package/dist/plugins/qrcode.js +21 -0
  34. package/dist/plugins/qrcode.js.map +1 -0
  35. package/dist/plugins/smiles.d.ts +2 -0
  36. package/dist/plugins/smiles.d.ts.map +1 -0
  37. package/dist/plugins/smiles.js +19 -0
  38. package/dist/plugins/smiles.js.map +1 -0
  39. package/dist/plugins/space.d.ts +2 -0
  40. package/dist/plugins/space.d.ts.map +1 -0
  41. package/dist/plugins/space.js +15 -0
  42. package/dist/plugins/space.js.map +1 -0
  43. package/dist/plugins/span.d.ts +3 -0
  44. package/dist/plugins/span.d.ts.map +1 -0
  45. package/dist/plugins/span.js +18 -0
  46. package/dist/plugins/span.js.map +1 -0
  47. package/dist/plugins/test.d.ts +2 -0
  48. package/dist/plugins/test.d.ts.map +1 -0
  49. package/dist/plugins/test.js +14 -0
  50. package/dist/plugins/test.js.map +1 -0
  51. package/dist/plugins/toc.d.ts +3 -0
  52. package/dist/plugins/toc.d.ts.map +1 -0
  53. package/dist/plugins/toc.js +62 -0
  54. package/dist/plugins/toc.js.map +1 -0
  55. package/dist/plugins/yaml.d.ts +2 -0
  56. package/dist/plugins/yaml.d.ts.map +1 -0
  57. package/dist/plugins/yaml.js +12 -0
  58. package/dist/plugins/yaml.js.map +1 -0
  59. package/dist/plugins/youtube.d.ts +2 -0
  60. package/dist/plugins/youtube.d.ts.map +1 -0
  61. package/dist/plugins/youtube.js +19 -0
  62. package/dist/plugins/youtube.js.map +1 -0
  63. package/dist/prepare-sources.d.ts +10 -0
  64. package/dist/prepare-sources.d.ts.map +1 -0
  65. package/dist/prepare-sources.js +31 -0
  66. package/dist/prepare-sources.js.map +1 -0
  67. package/dist/registry.d.ts +10 -0
  68. package/dist/registry.d.ts.map +1 -0
  69. package/dist/registry.js +24 -0
  70. package/dist/registry.js.map +1 -0
  71. package/dist/rules/block-dispatcher.d.ts +9 -0
  72. package/dist/rules/block-dispatcher.d.ts.map +1 -0
  73. package/dist/rules/block-dispatcher.js +108 -0
  74. package/dist/rules/block-dispatcher.js.map +1 -0
  75. package/dist/rules/inline-dispatcher.d.ts +9 -0
  76. package/dist/rules/inline-dispatcher.d.ts.map +1 -0
  77. package/dist/rules/inline-dispatcher.js +62 -0
  78. package/dist/rules/inline-dispatcher.js.map +1 -0
  79. package/dist/runtime.d.ts +3 -0
  80. package/dist/runtime.d.ts.map +1 -0
  81. package/dist/runtime.js +128 -0
  82. package/dist/runtime.js.map +1 -0
  83. package/package.json +70 -0
  84. package/themes/beige-decent-1.css +559 -0
  85. package/themes/beige-decent-2.css +578 -0
  86. package/themes/common.css +178 -0
  87. package/themes/dark-elegant-1.css +729 -0
  88. package/themes/dark-elegant-2.css +1376 -0
  89. package/themes/light-academic-1.css +541 -0
  90. package/themes/light-academic-2.css +462 -0
  91. package/themes/light-neat-1.css +1244 -0
  92. package/themes/light-neat-2.css +1185 -0
  93. package/themes/light-playful-1.css +493 -0
  94. package/themes/light-playful-2.css +494 -0
@@ -0,0 +1,1376 @@
1
+ /* ==========================================================================
2
+ Dark Elegant Theme 2 — markdown-it-customize
3
+ Google Fonts: Sora (headings) · Vollkorn / Source Sans 3 / Caveat / Fira Code (body options)
4
+
5
+ Optional modifiers on <body> or .markdown-body:
6
+ - .font-serif
7
+ - .font-sans
8
+ - .font-handwritten
9
+ - .font-typewrite
10
+ - .size-xs | .size-sm | .size-lg | .size-xl
11
+ ========================================================================== */
12
+
13
+ @import url('https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700;800&family=Source+Sans+3:wght@400;500;600;700&family=Vollkorn:ital,wght@0,400;0,600;0,700;1,400&family=Caveat:wght@500;600;700&family=Fira+Code:wght@400;500;600&display=swap');
14
+ @import './common.css';
15
+
16
+ /* --------------------------------------------------------------------------
17
+ Theme tokens
18
+ -------------------------------------------------------------------------- */
19
+ :root {
20
+ color-scheme: dark;
21
+
22
+ /* palette */
23
+ --bg: #071018;
24
+ --bg-ambient: #09161f;
25
+ --surface: rgba(12, 21, 29, 0.92);
26
+ --surface-2: rgba(18, 31, 41, 0.96);
27
+ --surface-3: #172733;
28
+ --surface-soft: rgba(255, 255, 255, 0.03);
29
+ --border: rgba(122, 165, 185, 0.24);
30
+ --border-strong: rgba(122, 165, 185, 0.42);
31
+ --border-soft: rgba(122, 165, 185, 0.12);
32
+
33
+ --text: #deebf2;
34
+ --text-soft: #a3bac7;
35
+ --text-muted: #6f8796;
36
+ --heading: #f5fbff;
37
+
38
+ --accent: #e07c4a;
39
+ --accent-2: #f09d70;
40
+ --accent-deep: #a9492a;
41
+ --accent-warm: #b08dcf;
42
+ --accent-warm-soft: rgba(176, 141, 207, 0.18);
43
+ --accent-glow: rgba(224, 124, 74, 0.18);
44
+ --accent-grid: rgba(224, 124, 74, 0.06);
45
+
46
+ --link: #e0aa8a;
47
+ --link-hover: #f5cdb0;
48
+ --link-visited: #c1b0ff;
49
+
50
+ /* code */
51
+ --code-bg: #0b1620;
52
+ --code-bg-elevated: #0d1b26;
53
+ --code-border: rgba(101, 151, 188, 0.28);
54
+ --code-text: #d2ebff;
55
+ --inline-code: #f8c884;
56
+
57
+ /* semantics */
58
+ --success-bg: rgba(26, 83, 64, 0.24);
59
+ --success-border: rgba(100, 212, 156, 0.46);
60
+ --success-text: #7de4ad;
61
+
62
+ --info-bg: rgba(24, 76, 114, 0.24);
63
+ --info-border: rgba(92, 193, 255, 0.42);
64
+ --info-text: #8bdcff;
65
+
66
+ --note-bg: rgba(50, 63, 126, 0.24);
67
+ --note-border: rgba(150, 164, 255, 0.4);
68
+ --note-text: #b8c4ff;
69
+
70
+ --warning-bg: rgba(109, 72, 22, 0.28);
71
+ --warning-border: rgba(255, 198, 94, 0.44);
72
+ --warning-text: #ffd279;
73
+
74
+ --danger-bg: rgba(117, 39, 48, 0.26);
75
+ --danger-border: rgba(255, 123, 135, 0.44);
76
+ --danger-text: #ff9ca6;
77
+
78
+ --span-red: #ff8f9a;
79
+ --span-yellow: #ffd779;
80
+ --span-green: #7de4ad;
81
+ --span-blue: #8bdcff;
82
+
83
+ /* typography */
84
+ --font-heading: 'Sora', system-ui, 'Noto Sans SC', 'Noto Sans TC', sans-serif;
85
+ --font-body: 'Vollkorn', Georgia, 'Noto Serif SC', 'Noto Serif TC', serif;
86
+ --font-code: 'Fira Code', 'JetBrains Mono', monospace;
87
+ --base-size: 1rem;
88
+ --line-height: 1.78;
89
+ --font-scale: 1;
90
+ --lh-copy: var(--line-height);
91
+ --lh-tight: 1.22;
92
+
93
+ --fs-50: calc(0.78 * var(--base-size) * var(--font-scale));
94
+ --fs-75: calc(0.875 * var(--base-size) * var(--font-scale));
95
+ --fs-100: calc(var(--base-size) * var(--font-scale));
96
+ --fs-200: calc(1.125 * var(--base-size) * var(--font-scale));
97
+ --fs-300: calc(1.25 * var(--base-size) * var(--font-scale));
98
+ --fs-400: calc(1.5 * var(--base-size) * var(--font-scale));
99
+ --fs-500: calc(1.85 * var(--base-size) * var(--font-scale));
100
+ --fs-600: calc(2.35 * var(--base-size) * var(--font-scale));
101
+
102
+ /* rhythm */
103
+ --space-1: 0.375rem;
104
+ --space-2: 0.65rem;
105
+ --space-3: 0.95rem;
106
+ --space-4: 1.35rem;
107
+ --space-5: 1.9rem;
108
+ --space-6: 2.8rem;
109
+
110
+ /* shape + motion */
111
+ --radius-sm: 8px;
112
+ --radius: 16px;
113
+ --radius-lg: 26px;
114
+ --shadow: 0 26px 60px rgba(0, 0, 0, 0.42);
115
+ --shadow-soft: 0 10px 30px rgba(0, 0, 0, 0.18);
116
+ --transition: 180ms ease;
117
+
118
+ /* markdown body container toggles */
119
+ --markdown-body-max-width: 920px;
120
+ --markdown-body-padding: clamp(1.5rem, 4vw, 3.5rem);
121
+ --markdown-body-border: 1px solid var(--border);
122
+ --markdown-body-radius: var(--radius-lg);
123
+ --markdown-body-shadow: var(--shadow);
124
+ --markdown-body-decorations-display: block;
125
+ }
126
+
127
+ /* --------------------------------------------------------------------------
128
+ Font modifiers
129
+ -------------------------------------------------------------------------- */
130
+ body.font-serif,
131
+ .markdown-body.font-serif {
132
+ --font-body: 'Vollkorn', Georgia, 'Noto Serif SC', 'Noto Serif TC', serif;
133
+ --lh-copy: 1.85;
134
+ }
135
+
136
+ body.font-sans,
137
+ .markdown-body.font-sans {
138
+ --font-body: 'Source Sans 3', system-ui, 'Noto Sans SC', 'Noto Sans TC', sans-serif;
139
+ }
140
+
141
+ body.font-handwritten,
142
+ .markdown-body.font-handwritten {
143
+ --font-body: 'Hanzi Pen TC', 'Hanzi Pen SC', 'Caveat', 'Segoe Print', cursive;
144
+ --lh-copy: 1.9;
145
+ }
146
+
147
+ body.font-typewrite,
148
+ .markdown-body.font-typewrite {
149
+ --font-body: 'Fira Code', monospace;
150
+ --lh-copy: 1.82;
151
+ }
152
+
153
+ body.size-xs,
154
+ .markdown-body.size-xs {
155
+ --font-scale: 0.9;
156
+ }
157
+
158
+ body.size-sm,
159
+ .markdown-body.size-sm {
160
+ --font-scale: 0.96;
161
+ }
162
+
163
+ body.size-lg,
164
+ .markdown-body.size-lg {
165
+ --font-scale: 1.08;
166
+ }
167
+
168
+ body.size-xl,
169
+ .markdown-body.size-xl {
170
+ --font-scale: 1.16;
171
+ }
172
+
173
+ /* --------------------------------------------------------------------------
174
+ Reset + base
175
+ -------------------------------------------------------------------------- */
176
+ *, *::before, *::after {
177
+ box-sizing: border-box;
178
+ }
179
+
180
+ html {
181
+ font-size: var(--base-size);
182
+ scroll-behavior: smooth;
183
+ -webkit-text-size-adjust: 100%;
184
+ }
185
+
186
+ body {
187
+ margin: 0;
188
+ min-height: 100vh;
189
+ padding: clamp(1.25rem, 3vw, 2.5rem);
190
+ background:
191
+ radial-gradient(circle at top left, rgba(224, 124, 74, 0.08), transparent 28%),
192
+ radial-gradient(circle at top right, rgba(176, 141, 207, 0.06), transparent 22%),
193
+ linear-gradient(180deg, var(--bg-ambient) 0%, var(--bg) 58%, #050b10 100%);
194
+ color: var(--text);
195
+ font-family: var(--font-body);
196
+ font-size: var(--fs-100);
197
+ line-height: var(--lh-copy);
198
+ }
199
+
200
+ ::selection {
201
+ background: rgba(224, 124, 74, 0.25);
202
+ color: var(--heading);
203
+ }
204
+
205
+ /* --------------------------------------------------------------------------
206
+ Scrollbars
207
+ -------------------------------------------------------------------------- */
208
+ ::-webkit-scrollbar {
209
+ width: 10px;
210
+ height: 10px;
211
+ }
212
+
213
+ ::-webkit-scrollbar-track {
214
+ background: rgba(255, 255, 255, 0.04);
215
+ }
216
+
217
+ ::-webkit-scrollbar-thumb {
218
+ background: rgba(122, 165, 185, 0.36);
219
+ border-radius: 999px;
220
+ border: 2px solid rgba(7, 16, 24, 0.8);
221
+ }
222
+
223
+ ::-webkit-scrollbar-thumb:hover {
224
+ background: rgba(224, 124, 74, 0.48);
225
+ }
226
+
227
+ /* --------------------------------------------------------------------------
228
+ Article wrapper
229
+ -------------------------------------------------------------------------- */
230
+ .markdown-body {
231
+ position: relative;
232
+ max-width: var(--markdown-body-max-width);
233
+ margin: 0 auto;
234
+ padding: var(--markdown-body-padding);
235
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.02), var(--surface-2) 16%, var(--surface) 100%);
236
+ border: var(--markdown-body-border);
237
+ border-radius: var(--markdown-body-radius);
238
+ box-shadow: var(--markdown-body-shadow);
239
+ overflow: hidden;
240
+ isolation: isolate;
241
+ }
242
+
243
+ .markdown-body::before {
244
+ display: var(--markdown-body-decorations-display);
245
+ content: '';
246
+ position: absolute;
247
+ inset: 0;
248
+ background:
249
+ linear-gradient(90deg, transparent 0, transparent 11px, var(--accent-grid) 11px, transparent 12px),
250
+ linear-gradient(var(--accent-grid) 1px, transparent 1px);
251
+ background-size: 12px 12px;
252
+ mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.12), transparent 18%);
253
+ opacity: 0.45;
254
+ pointer-events: none;
255
+ z-index: -1;
256
+ }
257
+
258
+ .markdown-body::after {
259
+ display: var(--markdown-body-decorations-display);
260
+ content: '';
261
+ position: absolute;
262
+ inset: 0 auto auto 0;
263
+ width: 100%;
264
+ height: 3px;
265
+ background: linear-gradient(90deg, var(--accent-warm), var(--accent), transparent 84%);
266
+ opacity: 0.6;
267
+ pointer-events: none;
268
+ }
269
+
270
+ .markdown-body > :first-child {
271
+ margin-top: 0;
272
+ }
273
+
274
+ /* --------------------------------------------------------------------------
275
+ Headings + anchors
276
+ -------------------------------------------------------------------------- */
277
+ h1, h2, h3, h4, h5, h6 {
278
+ clear: both;
279
+ position: relative;
280
+ margin: 2.2em 0 0.7em;
281
+ color: var(--heading);
282
+ font-family: var(--font-heading);
283
+ line-height: var(--lh-tight);
284
+ font-weight: 700;
285
+ letter-spacing: -0.03em;
286
+ scroll-margin-top: 4rem;
287
+ }
288
+
289
+ h1:first-child,
290
+ h2:first-child,
291
+ h3:first-child {
292
+ margin-top: 0;
293
+ }
294
+
295
+ h1 {
296
+ display: block;
297
+ width: fit-content;
298
+ margin-bottom: 0.8em;
299
+ padding: 0.35em 1.1rem 0.5em;
300
+ font-size: clamp(2rem, 4.5vw, 3.15rem);
301
+ background: rgba(224, 124, 74, 0.08);
302
+ border: 1px solid rgba(122, 165, 185, 0.18);
303
+ border-radius: 18px;
304
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
305
+ }
306
+
307
+ h1::after {
308
+ content: '';
309
+ position: absolute;
310
+ left: 1.1rem;
311
+ right: 1.1rem;
312
+ bottom: 0.18rem;
313
+ height: 2px;
314
+ background: linear-gradient(90deg, var(--accent), transparent);
315
+ border-radius: 999px;
316
+ }
317
+
318
+ h2 {
319
+ font-size: clamp(1.55rem, 3vw, 2.15rem);
320
+ padding-bottom: 0.32em;
321
+ border-bottom: 1px solid var(--border-strong);
322
+ }
323
+
324
+ h3 {
325
+ font-size: var(--fs-400);
326
+ padding-left: 0;
327
+ }
328
+
329
+ h3::before {
330
+ content: '◆';
331
+ display: inline-block;
332
+ font-size: 0.45em;
333
+ margin-right: 0.55em;
334
+ vertical-align: 0.2em;
335
+ color: var(--accent);
336
+ opacity: 0.85;
337
+ }
338
+
339
+ h4 {
340
+ font-size: var(--fs-300);
341
+ color: #d8f7ff;
342
+ }
343
+
344
+ h5 {
345
+ font-size: var(--fs-200);
346
+ color: #bfdce6;
347
+ }
348
+
349
+ h6 {
350
+ font-size: var(--fs-100);
351
+ text-transform: uppercase;
352
+ letter-spacing: 0.12em;
353
+ color: var(--text-soft);
354
+ }
355
+
356
+ .header-anchor {
357
+ float: left;
358
+ margin-left: -1.3em;
359
+ padding-right: 0.35em;
360
+ color: var(--accent);
361
+ text-decoration: none;
362
+ opacity: 0;
363
+ transform: translateX(0.15em);
364
+ transition: opacity var(--transition), transform var(--transition), color var(--transition);
365
+ }
366
+
367
+ h1:hover .header-anchor,
368
+ h2:hover .header-anchor,
369
+ h3:hover .header-anchor,
370
+ h4:hover .header-anchor,
371
+ h5:hover .header-anchor,
372
+ h6:hover .header-anchor {
373
+ opacity: 0.7;
374
+ transform: translateX(0);
375
+ }
376
+
377
+ .header-anchor:hover {
378
+ color: var(--accent-2);
379
+ }
380
+
381
+ /* --------------------------------------------------------------------------
382
+ Copy blocks
383
+ -------------------------------------------------------------------------- */
384
+ p,
385
+ ul,
386
+ ol,
387
+ blockquote,
388
+ pre,
389
+ table,
390
+ .toc-wrapper,
391
+ details.spoil,
392
+ .tabs,
393
+ .cols,
394
+ .youtube-embed,
395
+ .mermaid,
396
+ .smiles-render {
397
+ margin: 0 0 var(--space-5);
398
+ }
399
+
400
+ p:last-child,
401
+ ul:last-child,
402
+ ol:last-child,
403
+ blockquote:last-child,
404
+ pre:last-child,
405
+ table:last-child {
406
+ margin-bottom: 0;
407
+ }
408
+
409
+ /* --------------------------------------------------------------------------
410
+ Links + inline text elements
411
+ -------------------------------------------------------------------------- */
412
+ a {
413
+ color: var(--link);
414
+ text-decoration-thickness: 1.5px;
415
+ text-decoration-color: rgba(143, 223, 247, 0.32);
416
+ text-underline-offset: 0.18em;
417
+ transition: color var(--transition), text-decoration-color var(--transition), text-shadow var(--transition);
418
+ }
419
+
420
+ a:hover {
421
+ color: var(--link-hover);
422
+ text-decoration-color: rgba(195, 242, 255, 0.72);
423
+ text-shadow: 0 0 18px rgba(224, 124, 74, 0.18);
424
+ }
425
+
426
+ a:visited {
427
+ color: var(--link-visited);
428
+ }
429
+
430
+ strong {
431
+ color: var(--heading);
432
+ font-weight: 700;
433
+ }
434
+
435
+ em {
436
+ color: #d7eef4;
437
+ }
438
+
439
+ s,
440
+ del {
441
+ color: var(--text-muted);
442
+ text-decoration-color: rgba(255, 149, 149, 0.42);
443
+ }
444
+
445
+ mark {
446
+ padding: 0.08em 0.3em;
447
+ background: linear-gradient(180deg, rgba(241, 183, 106, 0.28), rgba(241, 183, 106, 0.18));
448
+ color: #fff0cf;
449
+ border-radius: 999px;
450
+ }
451
+
452
+ ins {
453
+ color: var(--accent-2);
454
+ text-decoration: underline wavy rgba(224, 124, 74, 0.72) 1.5px;
455
+ text-underline-offset: 0.18em;
456
+ }
457
+
458
+ sub,
459
+ sup {
460
+ font-size: 0.72em;
461
+ color: var(--text-soft);
462
+ }
463
+
464
+ /* --------------------------------------------------------------------------
465
+ Code
466
+ -------------------------------------------------------------------------- */
467
+ code {
468
+ font-family: var(--font-code);
469
+ font-size: 0.9em;
470
+ color: var(--inline-code);
471
+ background: rgba(255, 255, 255, 0.025);
472
+ border: 1px solid var(--code-border);
473
+ border-radius: 10px;
474
+ padding: 0.18em 0.46em;
475
+ }
476
+
477
+ pre {
478
+ position: relative;
479
+ overflow-x: auto;
480
+ padding: 1.25rem 1.35rem;
481
+ background: linear-gradient(180deg, var(--code-bg) 0%, var(--code-bg-elevated) 100%);
482
+ border: 1px solid var(--code-border);
483
+ border-radius: 18px;
484
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), var(--shadow-soft);
485
+ }
486
+
487
+ pre::before {
488
+ content: '';
489
+ position: absolute;
490
+ inset: 0 auto auto 0;
491
+ width: 100%;
492
+ height: 3px;
493
+ background: linear-gradient(90deg, var(--accent), rgba(255, 255, 255, 0));
494
+ opacity: 0.45;
495
+ }
496
+
497
+ pre code {
498
+ display: block;
499
+ padding: 0;
500
+ border: 0;
501
+ background: transparent;
502
+ color: var(--code-text);
503
+ font-size: var(--fs-75);
504
+ line-height: 1.72;
505
+ }
506
+
507
+ /* --------------------------------------------------------------------------
508
+ Blockquote
509
+ -------------------------------------------------------------------------- */
510
+ blockquote {
511
+ position: relative;
512
+ padding: 1.15rem 1.35rem 1.15rem 1.65rem;
513
+ color: #c6d8e2;
514
+ background: rgba(224, 124, 74, 0.05);
515
+ border: 1px solid rgba(224, 124, 74, 0.16);
516
+ border-radius: 20px;
517
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03);
518
+ }
519
+
520
+ blockquote::before {
521
+ content: '“';
522
+ position: absolute;
523
+ left: 0.75rem;
524
+ top: 0.15rem;
525
+ font-family: Georgia, 'Noto Serif SC', 'Noto Serif TC', serif;
526
+ font-size: 2.8rem;
527
+ line-height: 1;
528
+ color: rgba(224, 124, 74, 0.42);
529
+ }
530
+
531
+ blockquote > *:last-child {
532
+ margin-bottom: 0;
533
+ }
534
+
535
+ blockquote blockquote {
536
+ margin-top: var(--space-4);
537
+ background: rgba(255, 255, 255, 0.03);
538
+ }
539
+
540
+ /* --------------------------------------------------------------------------
541
+ Lists + task lists
542
+ -------------------------------------------------------------------------- */
543
+ ul,
544
+ ol {
545
+ padding-left: 1.45rem;
546
+ }
547
+
548
+ li {
549
+ margin-bottom: 0.45rem;
550
+ }
551
+
552
+ li > ul,
553
+ li > ol {
554
+ margin-top: 0.45rem;
555
+ margin-bottom: 0;
556
+ }
557
+
558
+ ul {
559
+ list-style: none;
560
+ }
561
+
562
+ ul > li {
563
+ position: relative;
564
+ }
565
+
566
+ ul > li::before {
567
+ content: '';
568
+ position: absolute;
569
+ left: -1.05rem;
570
+ top: 0.7em;
571
+ width: 0.42rem;
572
+ height: 0.42rem;
573
+ border-radius: 999px;
574
+ background: linear-gradient(135deg, var(--accent-warm), var(--accent));
575
+ box-shadow: 0 0 8px rgba(224, 124, 74, 0.18);
576
+ }
577
+
578
+ ol {
579
+ list-style: decimal;
580
+ }
581
+
582
+ .task-list-item {
583
+ list-style: none;
584
+ padding-left: 0;
585
+ }
586
+
587
+ .task-list-item::before {
588
+ display: none;
589
+ }
590
+
591
+ .task-list-item-checkbox,
592
+ .task-list-item input[type='checkbox'] {
593
+ appearance: none;
594
+ -webkit-appearance: none;
595
+ position: relative;
596
+ width: 1.05rem;
597
+ height: 1.05rem;
598
+ margin: 0 0.55rem 0 0;
599
+ vertical-align: -0.14em;
600
+ border: 1px solid rgba(143, 223, 247, 0.45);
601
+ border-radius: 6px;
602
+ background: rgba(255, 255, 255, 0.04);
603
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
604
+ }
605
+
606
+ .task-list-item-checkbox:checked,
607
+ .task-list-item input[type='checkbox']:checked {
608
+ background: linear-gradient(180deg, var(--accent), #41a9a7);
609
+ border-color: var(--accent-2);
610
+ }
611
+
612
+ .task-list-item-checkbox:checked::after,
613
+ .task-list-item input[type='checkbox']:checked::after {
614
+ content: '';
615
+ position: absolute;
616
+ left: 0.29rem;
617
+ top: 0.08rem;
618
+ width: 0.25rem;
619
+ height: 0.5rem;
620
+ border: solid #061117;
621
+ border-width: 0 2px 2px 0;
622
+ transform: rotate(45deg);
623
+ }
624
+
625
+ /* --------------------------------------------------------------------------
626
+ Tables
627
+ -------------------------------------------------------------------------- */
628
+ .markdown-body > table,
629
+ .markdown-body td table {
630
+ width: max-content;
631
+ max-width: 100%;
632
+ }
633
+
634
+ table {
635
+ display: block;
636
+ overflow-x: auto;
637
+ border-collapse: separate;
638
+ border-spacing: 0;
639
+ border: 1px solid var(--border);
640
+ border-radius: 18px;
641
+ background: rgba(255, 255, 255, 0.015);
642
+ box-shadow: var(--shadow-soft);
643
+ }
644
+
645
+ thead th {
646
+ padding: 0.82rem 1rem;
647
+ border-bottom: 1px solid var(--border-strong);
648
+ background: rgba(224, 124, 74, 0.06);
649
+ color: var(--heading);
650
+ font-size: var(--fs-75);
651
+ font-weight: 700;
652
+ text-transform: uppercase;
653
+ letter-spacing: 0.08em;
654
+ text-align: left;
655
+ white-space: nowrap;
656
+ }
657
+
658
+ tbody td {
659
+ padding: 0.88rem 1rem;
660
+ border-bottom: 1px solid var(--border-soft);
661
+ color: var(--text);
662
+ vertical-align: top;
663
+ }
664
+
665
+ tbody tr:nth-child(even) td {
666
+ background: rgba(255, 255, 255, 0.018);
667
+ }
668
+
669
+ tbody tr:hover td {
670
+ background: rgba(224, 124, 74, 0.06);
671
+ }
672
+
673
+ tbody tr:last-child td {
674
+ border-bottom: 0;
675
+ }
676
+
677
+ /* --------------------------------------------------------------------------
678
+ Rule + media
679
+ -------------------------------------------------------------------------- */
680
+ hr {
681
+ height: 1px;
682
+ margin: var(--space-6) 0;
683
+ border: 0;
684
+ background: linear-gradient(90deg, transparent, rgba(224, 124, 74, 0.45), rgba(176, 141, 207, 0.4), transparent);
685
+ }
686
+
687
+ img {
688
+ margin: 0 auto;
689
+ border: 1px solid rgba(143, 223, 247, 0.14);
690
+ border-radius: 18px;
691
+ box-shadow: var(--shadow-soft);
692
+ }
693
+
694
+ p > img {
695
+ display: inline;
696
+ margin: 0;
697
+ border-radius: 10px;
698
+ }
699
+
700
+ /* --------------------------------------------------------------------------
701
+ Footnotes
702
+ -------------------------------------------------------------------------- */
703
+ .footnote-ref {
704
+ font-size: 0.85em;
705
+ }
706
+
707
+ .footnote-ref a,
708
+ .footnote-backref {
709
+ color: var(--accent-2);
710
+ text-decoration: none;
711
+ }
712
+
713
+ .footnotes-sep {
714
+ margin: var(--space-6) 0 var(--space-4);
715
+ }
716
+
717
+ .footnotes {
718
+ padding-top: var(--space-3);
719
+ border-top: 1px solid var(--border-soft);
720
+ color: var(--text-soft);
721
+ font-size: var(--fs-75);
722
+ }
723
+
724
+ .footnotes ol {
725
+ margin-bottom: 0;
726
+ }
727
+
728
+ .footnotes li {
729
+ margin-bottom: 0.7rem;
730
+ }
731
+
732
+ /* --------------------------------------------------------------------------
733
+ KaTeX
734
+ -------------------------------------------------------------------------- */
735
+ .katex {
736
+ color: #f5fbff;
737
+ font-size: 1.08em;
738
+ }
739
+
740
+ .katex-display {
741
+ overflow-x: auto;
742
+ overflow-y: hidden;
743
+ padding: 0.85rem 1rem;
744
+ background: rgba(255, 255, 255, 0.02);
745
+ border: 1px solid var(--border-soft);
746
+ border-radius: 18px;
747
+ }
748
+
749
+ .katex-error {
750
+ display: inline-block;
751
+ padding: 0.2em 0.5em;
752
+ color: var(--danger-text);
753
+ background: var(--danger-bg);
754
+ border: 1px solid var(--danger-border);
755
+ border-radius: 10px;
756
+ font-family: var(--font-code);
757
+ font-size: var(--fs-75);
758
+ }
759
+
760
+ /* --------------------------------------------------------------------------
761
+ Semantic containers
762
+ -------------------------------------------------------------------------- */
763
+ div.success,
764
+ div.note,
765
+ div.info,
766
+ div.warning,
767
+ div.danger {
768
+ position: relative;
769
+ overflow: hidden;
770
+ isolation: isolate;
771
+ margin-bottom: var(--space-5);
772
+ padding: 1rem 1.1rem 1rem 1.25rem;
773
+ border: 1px solid;
774
+ border-radius: 18px;
775
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.03), var(--shadow-soft);
776
+ }
777
+
778
+ div.success::before,
779
+ div.note::before,
780
+ div.info::before,
781
+ div.warning::before,
782
+ div.danger::before {
783
+ content: '';
784
+ position: absolute;
785
+ left: 1.15rem;
786
+ right: 3.75rem;
787
+ top: 0;
788
+ height: 2px;
789
+ border-radius: 0 0 999px 999px;
790
+ opacity: 0.75;
791
+ pointer-events: none;
792
+ z-index: 0;
793
+ }
794
+
795
+ div.success::after,
796
+ div.note::after,
797
+ div.info::after,
798
+ div.warning::after,
799
+ div.danger::after {
800
+ content: '';
801
+ position: absolute;
802
+ top: 0.82rem;
803
+ right: 0.88rem;
804
+ width: 1rem;
805
+ height: 1rem;
806
+ border-top: 1.5px solid currentColor;
807
+ border-right: 1.5px solid currentColor;
808
+ opacity: 0.38;
809
+ pointer-events: none;
810
+ z-index: 0;
811
+ }
812
+
813
+ div.success > *,
814
+ div.note > *,
815
+ div.info > *,
816
+ div.warning > *,
817
+ div.danger > * {
818
+ position: relative;
819
+ z-index: 1;
820
+ }
821
+
822
+ div.success {
823
+ background:
824
+ linear-gradient(180deg, rgba(125, 228, 173, 0.08), rgba(125, 228, 173, 0) 26%),
825
+ linear-gradient(135deg, rgba(8, 24, 20, 0.96), rgba(14, 38, 30, 0.9));
826
+ border-color: var(--success-border);
827
+ }
828
+
829
+ div.success::before {
830
+ background: linear-gradient(90deg, rgba(156, 241, 195, 0.88), rgba(156, 241, 195, 0) 72%);
831
+ }
832
+
833
+ div.note {
834
+ background:
835
+ linear-gradient(180deg, rgba(184, 196, 255, 0.08), rgba(184, 196, 255, 0) 26%),
836
+ linear-gradient(135deg, rgba(11, 18, 35, 0.96), rgba(20, 30, 60, 0.9));
837
+ border-color: var(--note-border);
838
+ }
839
+
840
+ div.note::before {
841
+ background: linear-gradient(90deg, rgba(216, 224, 255, 0.9), rgba(216, 224, 255, 0) 72%);
842
+ }
843
+
844
+ div.info {
845
+ background:
846
+ linear-gradient(180deg, rgba(139, 220, 255, 0.08), rgba(139, 220, 255, 0) 26%),
847
+ linear-gradient(135deg, rgba(7, 22, 33, 0.96), rgba(12, 39, 57, 0.9));
848
+ border-color: var(--info-border);
849
+ }
850
+
851
+ div.info::before {
852
+ background: linear-gradient(90deg, rgba(181, 238, 255, 0.9), rgba(181, 238, 255, 0) 72%);
853
+ }
854
+
855
+ div.warning {
856
+ background:
857
+ linear-gradient(180deg, rgba(255, 210, 121, 0.08), rgba(255, 210, 121, 0) 26%),
858
+ linear-gradient(135deg, rgba(28, 21, 10, 0.96), rgba(47, 34, 12, 0.9));
859
+ border-color: var(--warning-border);
860
+ }
861
+
862
+ div.warning::before {
863
+ background: linear-gradient(90deg, rgba(255, 227, 159, 0.92), rgba(255, 227, 159, 0) 72%);
864
+ }
865
+
866
+ div.danger {
867
+ background:
868
+ linear-gradient(180deg, rgba(255, 156, 166, 0.08), rgba(255, 156, 166, 0) 26%),
869
+ linear-gradient(135deg, rgba(31, 12, 17, 0.96), rgba(53, 18, 25, 0.9));
870
+ border-color: var(--danger-border);
871
+ }
872
+
873
+ div.danger::before {
874
+ background: linear-gradient(90deg, rgba(255, 190, 196, 0.9), rgba(255, 190, 196, 0) 72%);
875
+ }
876
+
877
+ div.success > p:first-child > strong:first-child,
878
+ div.success > p:first-child > b:first-child {
879
+ color: var(--success-text);
880
+ }
881
+
882
+ div.note > p:first-child > strong:first-child,
883
+ div.note > p:first-child > b:first-child {
884
+ color: var(--note-text);
885
+ }
886
+
887
+ div.info > p:first-child > strong:first-child,
888
+ div.info > p:first-child > b:first-child {
889
+ color: var(--info-text);
890
+ }
891
+
892
+ div.warning > p:first-child > strong:first-child,
893
+ div.warning > p:first-child > b:first-child {
894
+ color: var(--warning-text);
895
+ }
896
+
897
+ div.danger > p:first-child > strong:first-child,
898
+ div.danger > p:first-child > b:first-child {
899
+ color: var(--danger-text);
900
+ }
901
+
902
+ div.success > *:last-child,
903
+ div.note > *:last-child,
904
+ div.info > *:last-child,
905
+ div.warning > *:last-child,
906
+ div.danger > *:last-child {
907
+ margin-bottom: 0;
908
+ }
909
+
910
+ /* --------------------------------------------------------------------------
911
+ Layout containers
912
+ -------------------------------------------------------------------------- */
913
+ .left {
914
+ float: left;
915
+ max-width: min(44%, 22rem);
916
+ padding: 0.85rem 0.95rem;
917
+ background: rgba(255, 255, 255, 0.025);
918
+ border: 1px solid var(--border-soft);
919
+ border-radius: 16px;
920
+ margin: 0 var(--space-5) var(--space-4) 0;
921
+ }
922
+
923
+ .right {
924
+ text-align: right;
925
+ margin: 0 0 var(--space-4);
926
+ }
927
+
928
+ .center {
929
+ margin: 0 auto var(--space-5);
930
+ text-align: center;
931
+ max-width: min(100%, 42rem);
932
+ }
933
+
934
+ /* --------------------------------------------------------------------------
935
+ Spoiler
936
+ -------------------------------------------------------------------------- */
937
+ details.spoil {
938
+ overflow: hidden;
939
+ border: 1px solid var(--border);
940
+ border-radius: 18px;
941
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.03), rgba(255, 255, 255, 0));
942
+ }
943
+
944
+ details.spoil > summary {
945
+ display: flex;
946
+ align-items: center;
947
+ gap: 0.7rem;
948
+ padding: 0.95rem 1.1rem;
949
+ cursor: pointer;
950
+ list-style: none;
951
+ user-select: none;
952
+ color: var(--heading);
953
+ font-weight: 600;
954
+ background: rgba(255, 255, 255, 0.02);
955
+ transition: background var(--transition), color var(--transition);
956
+ }
957
+
958
+ details.spoil > summary::-webkit-details-marker {
959
+ display: none;
960
+ }
961
+
962
+ details.spoil > summary::before {
963
+ content: '▸';
964
+ display: inline-grid;
965
+ place-items: center;
966
+ width: 1.5rem;
967
+ height: 1.5rem;
968
+ border-radius: 999px;
969
+ background: rgba(224, 124, 74, 0.14);
970
+ color: var(--accent-2);
971
+ transition: transform var(--transition), background var(--transition);
972
+ }
973
+
974
+ details.spoil[open] > summary::before {
975
+ transform: rotate(90deg);
976
+ }
977
+
978
+ details.spoil > summary:hover {
979
+ background: rgba(224, 124, 74, 0.08);
980
+ }
981
+
982
+ details.spoil[open] > summary {
983
+ border-bottom: 1px solid var(--border-soft);
984
+ }
985
+
986
+ details.spoil > :not(summary) {
987
+ padding: 1rem 1.1rem 1.1rem;
988
+ }
989
+
990
+ /* --------------------------------------------------------------------------
991
+ Tabs
992
+ -------------------------------------------------------------------------- */
993
+ .tabs {
994
+ overflow: hidden;
995
+ border: 1px solid var(--border);
996
+ border-radius: 20px;
997
+ background: rgba(255, 255, 255, 0.02);
998
+ }
999
+
1000
+ .tabs-bar {
1001
+ display: flex;
1002
+ gap: 0.35rem;
1003
+ padding: 0.5rem;
1004
+ overflow-x: auto;
1005
+ background: rgba(255, 255, 255, 0.02);
1006
+ border-bottom: 1px solid var(--border-soft);
1007
+ scrollbar-width: none;
1008
+ }
1009
+
1010
+ .tabs-bar::-webkit-scrollbar {
1011
+ display: none;
1012
+ }
1013
+
1014
+ .tabs-bar-btn {
1015
+ border: 0;
1016
+ border-radius: 999px;
1017
+ padding: 0.58rem 0.95rem;
1018
+ background: transparent;
1019
+ color: var(--text-soft);
1020
+ font: 600 var(--fs-75)/1.2 var(--font-heading);
1021
+ cursor: pointer;
1022
+ white-space: nowrap;
1023
+ transition: background var(--transition), color var(--transition), box-shadow var(--transition);
1024
+ }
1025
+
1026
+ .tabs-bar-btn:hover {
1027
+ color: var(--heading);
1028
+ background: rgba(255, 255, 255, 0.045);
1029
+ }
1030
+
1031
+ .tabs-bar-btn.active {
1032
+ color: #041116;
1033
+ background: linear-gradient(135deg, var(--accent-2), var(--accent));
1034
+ box-shadow: 0 8px 20px rgba(224, 124, 74, 0.28);
1035
+ }
1036
+
1037
+ .tab {
1038
+ display: none;
1039
+ padding: 1.15rem 1.2rem 1.25rem;
1040
+ }
1041
+
1042
+ .tab.active {
1043
+ display: block;
1044
+ }
1045
+
1046
+ .tabs:not([data-js]) .tab {
1047
+ display: block;
1048
+ }
1049
+
1050
+ .tabs:not([data-js]) .tab + .tab {
1051
+ border-top: 1px solid var(--border-soft);
1052
+ }
1053
+
1054
+ /* --------------------------------------------------------------------------
1055
+ Columns
1056
+ -------------------------------------------------------------------------- */
1057
+ .cols {
1058
+ display: grid;
1059
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
1060
+ gap: 1rem;
1061
+ align-items: start;
1062
+ }
1063
+
1064
+ .col {
1065
+ min-width: 0;
1066
+ height: 100%;
1067
+ padding: 1rem 1.05rem;
1068
+ background: rgba(255, 255, 255, 0.025);
1069
+ border: 1px solid var(--border-soft);
1070
+ border-radius: 18px;
1071
+ }
1072
+
1073
+ .col > *:last-child {
1074
+ margin-bottom: 0;
1075
+ }
1076
+
1077
+ /* --------------------------------------------------------------------------
1078
+ TOC
1079
+ -------------------------------------------------------------------------- */
1080
+ .toc-wrapper {
1081
+ position: relative;
1082
+ }
1083
+
1084
+ nav.toc,
1085
+ .toc-list {
1086
+ padding: 1rem 1.15rem;
1087
+ background: rgba(224, 124, 74, 0.045);
1088
+ border: 1px solid var(--border);
1089
+ border-radius: 20px;
1090
+ }
1091
+
1092
+ nav.toc ul,
1093
+ .toc-list ul {
1094
+ margin: 0;
1095
+ padding-left: 1.1rem;
1096
+ }
1097
+
1098
+ nav.toc li,
1099
+ .toc-list li {
1100
+ margin-bottom: 0.28rem;
1101
+ }
1102
+
1103
+ nav.toc li::before,
1104
+ .toc-list li::before {
1105
+ display: none;
1106
+ }
1107
+
1108
+ nav.toc a,
1109
+ .toc-list a {
1110
+ color: var(--text-soft);
1111
+ text-decoration: none;
1112
+ }
1113
+
1114
+ nav.toc a:hover,
1115
+ .toc-list a:hover {
1116
+ color: var(--accent-2);
1117
+ }
1118
+
1119
+ /* --------------------------------------------------------------------------
1120
+ Span colour + badge helpers
1121
+ -------------------------------------------------------------------------- */
1122
+ span.red {
1123
+ color: var(--span-red);
1124
+ }
1125
+
1126
+ span.yellow {
1127
+ color: var(--span-yellow);
1128
+ }
1129
+
1130
+ span.green {
1131
+ color: var(--span-green);
1132
+ }
1133
+
1134
+ span.blue {
1135
+ color: var(--span-blue);
1136
+ }
1137
+
1138
+ span.success,
1139
+ span.info,
1140
+ span.warning,
1141
+ span.danger {
1142
+ position: relative;
1143
+ gap: 0;
1144
+ padding: 0.2em 0.62em;
1145
+ border-radius: 999px;
1146
+ border: 1px solid;
1147
+ font-size: 0.82em;
1148
+ font-weight: 700;
1149
+ vertical-align: middle;
1150
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
1151
+ }
1152
+
1153
+ span.success::before,
1154
+ span.info::before,
1155
+ span.warning::before,
1156
+ span.danger::before {
1157
+ content: none;
1158
+ }
1159
+
1160
+ span.success {
1161
+ background: rgba(125, 228, 173, 0.12);
1162
+ color: var(--success-text);
1163
+ border-color: var(--success-border);
1164
+ }
1165
+
1166
+ span.info {
1167
+ background: rgba(139, 220, 255, 0.12);
1168
+ color: var(--info-text);
1169
+ border-color: var(--info-border);
1170
+ }
1171
+
1172
+ span.warning {
1173
+ background: rgba(255, 210, 121, 0.12);
1174
+ color: var(--warning-text);
1175
+ border-color: var(--warning-border);
1176
+ }
1177
+
1178
+ span.danger {
1179
+ background: rgba(255, 156, 166, 0.12);
1180
+ color: var(--danger-text);
1181
+ border-color: var(--danger-border);
1182
+ }
1183
+
1184
+ /* --------------------------------------------------------------------------
1185
+ Custom plugin outputs
1186
+ -------------------------------------------------------------------------- */
1187
+ div.test-block {
1188
+ padding: 0.85rem 1rem;
1189
+ margin-bottom: var(--space-5);
1190
+ background: rgba(224, 124, 74, 0.06);
1191
+ border: 1px dashed rgba(224, 124, 74, 0.4);
1192
+ border-radius: 16px;
1193
+ color: var(--accent-2);
1194
+ font-family: var(--font-code);
1195
+ font-size: var(--fs-75);
1196
+ }
1197
+
1198
+ span.test-inline {
1199
+ display: inline-block;
1200
+ padding: 0.12em 0.4em;
1201
+ border-radius: 8px;
1202
+ border: 1px dashed rgba(224, 124, 74, 0.4);
1203
+ color: var(--accent-2);
1204
+ background: rgba(224, 124, 74, 0.12);
1205
+ font-family: var(--font-code);
1206
+ font-size: 0.88em;
1207
+ }
1208
+
1209
+ div.youtube-embed {
1210
+ position: relative;
1211
+ overflow: hidden;
1212
+ height: 0;
1213
+ padding-bottom: 56.25%;
1214
+ border: 1px solid var(--border);
1215
+ border-radius: 20px;
1216
+ background: #05090c;
1217
+ box-shadow: var(--shadow-soft);
1218
+ }
1219
+
1220
+ div.youtube-embed iframe {
1221
+ position: absolute;
1222
+ inset: 0;
1223
+ width: 100%;
1224
+ height: 100%;
1225
+ border: 0;
1226
+ }
1227
+
1228
+ div.mermaid {
1229
+ padding: 1.25rem;
1230
+ border: 1px solid var(--border);
1231
+ border-radius: 20px;
1232
+ background: rgba(255, 255, 255, 0.02);
1233
+ overflow-x: auto;
1234
+ text-align: center;
1235
+ }
1236
+
1237
+ div.mermaid svg {
1238
+ max-width: 100%;
1239
+ height: auto;
1240
+ }
1241
+
1242
+ div.smiles-render {
1243
+ }
1244
+
1245
+ div.smiles-render canvas,
1246
+ canvas[data-smiles] {
1247
+ border-radius: 0;
1248
+ box-shadow: none;
1249
+ }
1250
+
1251
+ span.qrcode {
1252
+ padding: 6px;
1253
+ vertical-align: middle;
1254
+ background: #ffffff;
1255
+ border-radius: 12px;
1256
+ box-shadow: 0 6px 24px rgba(0, 0, 0, 0.18);
1257
+ }
1258
+
1259
+ /* --------------------------------------------------------------------------
1260
+ Focus indicators
1261
+ -------------------------------------------------------------------------- */
1262
+ a:focus-visible,
1263
+ .tabs-bar-btn:focus-visible,
1264
+ details.spoil > summary:focus-visible {
1265
+ outline: 2px solid var(--accent);
1266
+ outline-offset: 3px;
1267
+ border-radius: var(--radius-sm);
1268
+ text-decoration: none;
1269
+ }
1270
+ .task-list-item-checkbox:focus-visible,
1271
+ .task-list-item input[type='checkbox']:focus-visible {
1272
+ outline: 2px solid var(--accent);
1273
+ outline-offset: 2px;
1274
+ }
1275
+
1276
+ /* --------------------------------------------------------------------------
1277
+ Responsive adjustments
1278
+ -------------------------------------------------------------------------- */
1279
+ @media (max-width: 720px) {
1280
+ body {
1281
+ padding: 0.75rem;
1282
+ }
1283
+
1284
+ .markdown-body {
1285
+ padding: 1.15rem;
1286
+ border-radius: 20px;
1287
+ }
1288
+
1289
+ .left {
1290
+ float: none;
1291
+ max-width: 100%;
1292
+ margin: 0 0 var(--space-4);
1293
+ }
1294
+
1295
+ .cols {
1296
+ grid-template-columns: 1fr;
1297
+ }
1298
+
1299
+ .header-anchor {
1300
+ margin-left: -1.05em;
1301
+ }
1302
+ }
1303
+
1304
+ /* --------------------------------------------------------------------------
1305
+ Print
1306
+ -------------------------------------------------------------------------- */
1307
+ @media print {
1308
+ :root {
1309
+ color-scheme: light;
1310
+ }
1311
+
1312
+ body {
1313
+ padding: 0;
1314
+ background: #ffffff;
1315
+ color: #111111;
1316
+ }
1317
+
1318
+ .markdown-body {
1319
+ max-width: 100%;
1320
+ padding: 0;
1321
+ background: #ffffff;
1322
+ color: #111111;
1323
+ border: 0;
1324
+ box-shadow: none;
1325
+ }
1326
+
1327
+ .markdown-body::before,
1328
+ .markdown-body::after,
1329
+ .header-anchor,
1330
+ .tabs-bar,
1331
+ div.youtube-embed {
1332
+ display: none !important;
1333
+ }
1334
+
1335
+ a {
1336
+ color: #0b57d0;
1337
+ text-decoration-color: currentColor;
1338
+ }
1339
+
1340
+ pre,
1341
+ code,
1342
+ blockquote,
1343
+ .success,
1344
+ .note,
1345
+ .info,
1346
+ .warning,
1347
+ .danger,
1348
+ nav.toc,
1349
+ .toc-list,
1350
+ .col,
1351
+ details.spoil,
1352
+ div.mermaid,
1353
+ div.smiles-render {
1354
+ background: #ffffff !important;
1355
+ color: #111111 !important;
1356
+ border-color: #cfcfcf !important;
1357
+ box-shadow: none !important;
1358
+ }
1359
+
1360
+ span.success,
1361
+ span.info,
1362
+ span.warning,
1363
+ span.danger {
1364
+ border-color: #bdbdbd !important;
1365
+ color: #111111 !important;
1366
+ }
1367
+
1368
+ tr,
1369
+ iframe,
1370
+ video,
1371
+ pre,
1372
+ blockquote {
1373
+ break-inside: avoid;
1374
+ page-break-inside: avoid;
1375
+ }
1376
+ }