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,1185 @@
1
+ /* ==========================================================================
2
+ Light Neat Theme 2 — markdown-it-customize
3
+ Epilogue (headings) · Literata / 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=Epilogue:wght@500;600;700&family=Literata:opsz,wght@7..72,400;7..72,500;7..72,600;7..72,700&family=Source+Sans+3:wght@400;500;600;700&family=Caveat:wght@500;600;700&family=Fira+Code:wght@400;500;600&display=swap');
14
+ @import './common.css';
15
+
16
+ :root {
17
+ color-scheme: light;
18
+
19
+ --bg: #f7f7f2;
20
+ --bg-soft: #fbfbf8;
21
+ --surface: #fffdfa;
22
+ --surface-2: #f8f6f1;
23
+ --surface-3: #f1eee7;
24
+ --border: #ddd8cd;
25
+ --border-strong: #c9c1b1;
26
+ --border-soft: #ece8de;
27
+
28
+ --text: #2d322f;
29
+ --text-soft: #62685f;
30
+ --text-muted: #8a8f87;
31
+ --heading: #181c1b;
32
+
33
+ --accent: #167a72;
34
+ --accent-2: #2f9f96;
35
+ --accent-ink: #175651;
36
+ --accent-warm: #d48f41;
37
+ --accent-dust: #8ca0ca;
38
+ --rule: rgba(22, 122, 114, 0.16);
39
+
40
+ --link: #0f6a85;
41
+ --link-hover: #0a4d60;
42
+ --link-visited: #5f6da9;
43
+
44
+ --code-bg: #f4f1eb;
45
+ --code-bg-2: #eeebe4;
46
+ --code-border: #d8d1c5;
47
+ --code-text: #36433d;
48
+ --inline-code: #8b4d1a;
49
+
50
+ --success-bg: rgba(95, 173, 120, 0.1);
51
+ --success-border: #b8dabf;
52
+ --success-text: #2e7a45;
53
+
54
+ --note-bg: rgba(137, 153, 213, 0.1);
55
+ --note-border: #ccd3f3;
56
+ --note-text: #52639e;
57
+
58
+ --info-bg: rgba(69, 150, 191, 0.1);
59
+ --info-border: #b8d8ea;
60
+ --info-text: #1e668d;
61
+
62
+ --warning-bg: rgba(228, 177, 72, 0.13);
63
+ --warning-border: #ecd39c;
64
+ --warning-text: #916516;
65
+
66
+ --danger-bg: rgba(211, 105, 105, 0.11);
67
+ --danger-border: #e9b8b8;
68
+ --danger-text: #994545;
69
+
70
+ --span-red: #b34a4a;
71
+ --span-yellow: #8f6711;
72
+ --span-green: #2f7c49;
73
+ --span-blue: #21698a;
74
+
75
+ --font-heading: 'Epilogue', system-ui, 'Noto Sans SC', 'Noto Sans TC', sans-serif;
76
+ --font-body: 'Literata', Georgia, 'Noto Serif SC', 'Noto Serif TC', serif;
77
+ --font-code: 'Fira Code', 'JetBrains Mono', monospace;
78
+ --base-size: 1rem;
79
+ --line-height: 1.82;
80
+ --font-scale: 1;
81
+ --lh-copy: var(--line-height);
82
+ --lh-tight: 1.2;
83
+
84
+ --fs-50: calc(0.78 * var(--base-size) * var(--font-scale));
85
+ --fs-75: calc(0.9 * var(--base-size) * var(--font-scale));
86
+ --fs-100: calc(var(--base-size) * var(--font-scale));
87
+ --fs-200: calc(1.12 * var(--base-size) * var(--font-scale));
88
+ --fs-300: calc(1.26 * var(--base-size) * var(--font-scale));
89
+ --fs-400: calc(1.48 * var(--base-size) * var(--font-scale));
90
+ --fs-500: calc(1.9 * var(--base-size) * var(--font-scale));
91
+ --fs-600: calc(2.45 * var(--base-size) * var(--font-scale));
92
+
93
+ --space-1: 0.35rem;
94
+ --space-2: 0.64rem;
95
+ --space-3: 0.94rem;
96
+ --space-4: 1.35rem;
97
+ --space-5: 1.9rem;
98
+ --space-6: 2.7rem;
99
+
100
+ --radius-sm: 6px;
101
+ --radius: 14px;
102
+ --radius-lg: 22px;
103
+ --shadow: 0 16px 32px rgba(166, 155, 137, 0.16), 0 4px 12px rgba(166, 155, 137, 0.1);
104
+ --shadow-soft: 0 10px 22px rgba(190, 181, 166, 0.14), 0 2px 8px rgba(190, 181, 166, 0.08);
105
+ --transition: 180ms ease;
106
+
107
+ --markdown-body-max-width: 920px;
108
+ --markdown-body-padding: clamp(1.25rem, 3.4vw, 3rem);
109
+ --markdown-body-border: 1px solid var(--border-strong);
110
+ --markdown-body-radius: var(--radius-lg);
111
+ --markdown-body-shadow: var(--shadow);
112
+ --markdown-body-decorations-display: block;
113
+ }
114
+
115
+ body.font-serif,
116
+ .markdown-body.font-serif {
117
+ --font-body: 'Literata', Georgia, 'Noto Serif SC', 'Noto Serif TC', serif;
118
+ --lh-copy: 1.84;
119
+ }
120
+
121
+ body.font-sans,
122
+ .markdown-body.font-sans {
123
+ --font-body: 'Source Sans 3', system-ui, 'Noto Sans SC', 'Noto Sans TC', sans-serif;
124
+ --lh-copy: 1.72;
125
+ }
126
+
127
+ body.font-handwritten,
128
+ .markdown-body.font-handwritten {
129
+ --font-body: 'Hanzi Pen TC', 'Hanzi Pen SC', 'Caveat', 'Segoe Print', cursive;
130
+ --lh-copy: 1.9;
131
+ }
132
+
133
+ body.font-typewrite,
134
+ .markdown-body.font-typewrite {
135
+ --font-body: 'Fira Code', monospace;
136
+ --lh-copy: 1.78;
137
+ }
138
+
139
+ body.size-xs,
140
+ .markdown-body.size-xs {
141
+ --font-scale: 0.9;
142
+ }
143
+
144
+ body.size-sm,
145
+ .markdown-body.size-sm {
146
+ --font-scale: 0.96;
147
+ }
148
+
149
+ body.size-lg,
150
+ .markdown-body.size-lg {
151
+ --font-scale: 1.08;
152
+ }
153
+
154
+ body.size-xl,
155
+ .markdown-body.size-xl {
156
+ --font-scale: 1.16;
157
+ }
158
+
159
+ *, *::before, *::after {
160
+ box-sizing: border-box;
161
+ }
162
+
163
+ html {
164
+ font-size: var(--base-size);
165
+ scroll-behavior: smooth;
166
+ -webkit-text-size-adjust: 100%;
167
+ }
168
+
169
+ body {
170
+ margin: 0;
171
+ min-height: 100vh;
172
+ padding: clamp(0.9rem, 2.5vw, 1.8rem);
173
+ background:
174
+ linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0.15)),
175
+ linear-gradient(90deg, transparent 0, transparent 27px, rgba(22, 122, 114, 0.03) 27px, transparent 28px),
176
+ linear-gradient(180deg, var(--bg-soft) 0%, var(--bg) 100%);
177
+ color: var(--text);
178
+ font-family: var(--font-body);
179
+ font-size: var(--fs-100);
180
+ line-height: var(--lh-copy);
181
+ }
182
+
183
+ ::selection {
184
+ background: rgba(47, 159, 150, 0.18);
185
+ color: var(--heading);
186
+ }
187
+
188
+ ::-webkit-scrollbar {
189
+ width: 10px;
190
+ height: 10px;
191
+ }
192
+
193
+ ::-webkit-scrollbar-track {
194
+ background: rgba(255, 255, 255, 0.55);
195
+ }
196
+
197
+ ::-webkit-scrollbar-thumb {
198
+ background: rgba(22, 122, 114, 0.2);
199
+ border-radius: 999px;
200
+ border: 2px solid rgba(255, 255, 255, 0.75);
201
+ }
202
+
203
+ ::-webkit-scrollbar-thumb:hover {
204
+ background: rgba(22, 122, 114, 0.34);
205
+ }
206
+
207
+ .markdown-body {
208
+ display: flow-root;
209
+ position: relative;
210
+ max-width: var(--markdown-body-max-width);
211
+ margin: 0 auto;
212
+ padding: var(--markdown-body-padding);
213
+ background: var(--surface);
214
+ border: var(--markdown-body-border);
215
+ border-radius: var(--markdown-body-radius);
216
+ box-shadow: var(--markdown-body-shadow);
217
+ }
218
+
219
+ .markdown-body::before {
220
+ display: var(--markdown-body-decorations-display);
221
+ content: '';
222
+ position: absolute;
223
+ inset: 0.9rem;
224
+ border: 1px solid rgba(22, 122, 114, 0.08);
225
+ border-radius: calc(var(--radius-lg) - 8px);
226
+ pointer-events: none;
227
+ }
228
+
229
+ .markdown-body::after {
230
+ display: var(--markdown-body-decorations-display);
231
+ content: '';
232
+ position: absolute;
233
+ left: 1.2rem;
234
+ right: 1.2rem;
235
+ top: 1rem;
236
+ height: 1px;
237
+ background: repeating-linear-gradient(90deg, var(--rule) 0 8px, transparent 8px 16px);
238
+ pointer-events: none;
239
+ }
240
+
241
+ .markdown-body > :first-child {
242
+ margin-top: 0;
243
+ }
244
+
245
+ h1, h2, h3, h4, h5, h6 {
246
+ clear: both;
247
+ position: relative;
248
+ margin: 2.15em 0 0.72em;
249
+ color: var(--heading);
250
+ font-family: var(--font-heading);
251
+ line-height: var(--lh-tight);
252
+ font-weight: 700;
253
+ letter-spacing: -0.03em;
254
+ scroll-margin-top: 4rem;
255
+ }
256
+
257
+ h1:first-child,
258
+ h2:first-child,
259
+ h3:first-child {
260
+ margin-top: 0;
261
+ }
262
+
263
+ h1 {
264
+ padding: 0.3em 0 0.48em;
265
+ font-size: clamp(2rem, 4.2vw, 3rem);
266
+ border-bottom: 2px solid var(--border-strong);
267
+ }
268
+
269
+ h1::before {
270
+ content: '';
271
+ display: block;
272
+ width: 3rem;
273
+ height: 3px;
274
+ background: var(--accent);
275
+ margin-bottom: 0.5rem;
276
+ border-radius: 999px;
277
+ }
278
+
279
+ h1::after {
280
+ content: '';
281
+ position: absolute;
282
+ left: 0;
283
+ bottom: -2px;
284
+ width: 6rem;
285
+ height: 4px;
286
+ background: var(--accent);
287
+ }
288
+
289
+ h2 {
290
+ font-size: clamp(1.5rem, 3vw, 2.05rem);
291
+ padding-bottom: 0.3em;
292
+ border-bottom: 2px solid var(--border-strong);
293
+ }
294
+
295
+ h2::before {
296
+ display: none;
297
+ }
298
+
299
+ h3 {
300
+ display: block;
301
+ width: fit-content;
302
+ font-size: var(--fs-400);
303
+ padding: 0.18em 0.7rem 0.28em;
304
+ background: var(--surface-2);
305
+ border: 1px solid var(--border);
306
+ border-radius: 999px;
307
+ }
308
+
309
+ h4 {
310
+ font-size: var(--fs-300);
311
+ color: #274542;
312
+ }
313
+
314
+ h5 {
315
+ font-size: var(--fs-200);
316
+ color: #4b625f;
317
+ }
318
+
319
+ h6 {
320
+ font-size: var(--fs-100);
321
+ text-transform: uppercase;
322
+ letter-spacing: 0.12em;
323
+ color: var(--text-soft);
324
+ }
325
+
326
+ .header-anchor {
327
+ float: left;
328
+ margin-left: -1.25em;
329
+ padding-right: 0.3em;
330
+ color: var(--accent);
331
+ text-decoration: none;
332
+ opacity: 0;
333
+ transition: opacity var(--transition), color var(--transition);
334
+ }
335
+
336
+ h1:hover .header-anchor,
337
+ h2:hover .header-anchor,
338
+ h3:hover .header-anchor,
339
+ h4:hover .header-anchor,
340
+ h5:hover .header-anchor,
341
+ h6:hover .header-anchor {
342
+ opacity: 0.7;
343
+ }
344
+
345
+ .header-anchor:hover {
346
+ color: var(--accent-ink);
347
+ }
348
+
349
+ p,
350
+ ul,
351
+ ol,
352
+ blockquote,
353
+ pre,
354
+ table,
355
+ .toc-wrapper,
356
+ details.spoil,
357
+ .tabs,
358
+ .cols,
359
+ .youtube-embed,
360
+ .mermaid,
361
+ .smiles-render {
362
+ margin: 0 0 var(--space-5);
363
+ }
364
+
365
+ p:last-child,
366
+ ul:last-child,
367
+ ol:last-child,
368
+ blockquote:last-child,
369
+ pre:last-child,
370
+ table:last-child {
371
+ margin-bottom: 0;
372
+ }
373
+
374
+ a {
375
+ color: var(--link);
376
+ text-decoration-thickness: 1.4px;
377
+ text-decoration-style: solid;
378
+ text-decoration-color: rgba(15, 106, 133, 0.3);
379
+ text-underline-offset: 0.18em;
380
+ transition: color var(--transition), text-decoration-color var(--transition);
381
+ }
382
+
383
+ a:hover {
384
+ color: var(--link-hover);
385
+ text-decoration-color: rgba(10, 77, 96, 0.55);
386
+ }
387
+
388
+ a:visited {
389
+ color: var(--link-visited);
390
+ }
391
+
392
+ strong {
393
+ color: var(--heading);
394
+ font-weight: 700;
395
+ }
396
+
397
+ em {
398
+ color: #4f5953;
399
+ }
400
+
401
+ s,
402
+ del {
403
+ color: var(--text-muted);
404
+ text-decoration-color: rgba(153, 69, 69, 0.3);
405
+ }
406
+
407
+ mark {
408
+ padding: 0.08em 0.3em;
409
+ color: #68460d;
410
+ background: rgba(228, 177, 72, 0.22);
411
+ border-radius: 0.25rem;
412
+ }
413
+
414
+ ins {
415
+ color: var(--accent-ink);
416
+ text-decoration: underline dotted rgba(22, 122, 114, 0.7) 2px;
417
+ text-underline-offset: 0.16em;
418
+ }
419
+
420
+ sub,
421
+ sup {
422
+ font-size: 0.72em;
423
+ color: var(--text-soft);
424
+ }
425
+
426
+ code {
427
+ font-family: var(--font-code);
428
+ font-size: 0.9em;
429
+ color: var(--inline-code);
430
+ background: var(--code-bg);
431
+ border: 1px solid var(--code-border);
432
+ border-radius: 7px;
433
+ padding: 0.16em 0.42em;
434
+ }
435
+
436
+ pre {
437
+ position: relative;
438
+ overflow-x: auto;
439
+ padding: 2rem 1.25rem 1.18rem;
440
+ background: linear-gradient(180deg, var(--code-bg) 0%, var(--code-bg-2) 100%);
441
+ border: 1px solid var(--code-border);
442
+ border-radius: 16px;
443
+ box-shadow: var(--shadow-soft);
444
+ }
445
+
446
+ pre::before {
447
+ content: '';
448
+ position: absolute;
449
+ left: 1rem;
450
+ top: 0.75rem;
451
+ width: 0.6rem;
452
+ height: 0.6rem;
453
+ border-radius: 999px;
454
+ background: #f0c060;
455
+ box-shadow: 1rem 0 0 #90c878, 2rem 0 0 #80b4e0;
456
+ }
457
+
458
+ pre code {
459
+ display: block;
460
+ padding: 0;
461
+ border: 0;
462
+ background: transparent;
463
+ color: var(--code-text);
464
+ font-size: var(--fs-75);
465
+ line-height: 1.72;
466
+ }
467
+
468
+ blockquote {
469
+ position: relative;
470
+ padding: 1.15rem 1.25rem 1.15rem 1.55rem;
471
+ color: #49534f;
472
+ background: var(--surface-2);
473
+ border: 1px solid var(--border);
474
+ border-radius: 16px;
475
+ box-shadow: var(--shadow-soft);
476
+ }
477
+
478
+ blockquote::before {
479
+ content: '❝';
480
+ position: absolute;
481
+ left: 0.7rem;
482
+ top: 0.35rem;
483
+ color: rgba(22, 122, 114, 0.26);
484
+ font-size: 2rem;
485
+ line-height: 1;
486
+ }
487
+
488
+ blockquote blockquote {
489
+ margin-top: var(--space-4);
490
+ background: #fff;
491
+ }
492
+
493
+ blockquote > *:last-child {
494
+ margin-bottom: 0;
495
+ }
496
+
497
+ ul,
498
+ ol {
499
+ padding-left: 1.45rem;
500
+ }
501
+
502
+ li {
503
+ margin-bottom: 0.45rem;
504
+ }
505
+
506
+ li > ul,
507
+ li > ol {
508
+ margin-top: 0.42rem;
509
+ margin-bottom: 0;
510
+ }
511
+
512
+ ul {
513
+ list-style: none;
514
+ }
515
+
516
+ ul > li {
517
+ position: relative;
518
+ }
519
+
520
+ ul > li::before {
521
+ content: '';
522
+ position: absolute;
523
+ left: -1.05rem;
524
+ top: 0.76em;
525
+ width: 0.42rem;
526
+ height: 0.42rem;
527
+ background: var(--accent);
528
+ transform: rotate(45deg);
529
+ }
530
+
531
+ ol {
532
+ list-style: decimal;
533
+ }
534
+
535
+ .task-list-item {
536
+ list-style: none;
537
+ padding-left: 0;
538
+ }
539
+
540
+ .task-list-item::before {
541
+ display: none;
542
+ }
543
+
544
+ .task-list-item-checkbox,
545
+ .task-list-item input[type='checkbox'] {
546
+ appearance: none;
547
+ -webkit-appearance: none;
548
+ position: relative;
549
+ width: 1.06rem;
550
+ height: 1.06rem;
551
+ margin: 0 0.55rem 0 0;
552
+ vertical-align: -0.12em;
553
+ border: 1px solid var(--border-strong);
554
+ border-radius: 4px;
555
+ background: #fff;
556
+ }
557
+
558
+ .task-list-item-checkbox:checked,
559
+ .task-list-item input[type='checkbox']:checked {
560
+ background: var(--accent);
561
+ border-color: var(--accent);
562
+ }
563
+
564
+ .task-list-item-checkbox:checked::after,
565
+ .task-list-item input[type='checkbox']:checked::after {
566
+ content: '';
567
+ position: absolute;
568
+ left: 0.28rem;
569
+ top: 0.07rem;
570
+ width: 0.24rem;
571
+ height: 0.5rem;
572
+ border: solid #fff;
573
+ border-width: 0 2px 2px 0;
574
+ transform: rotate(45deg);
575
+ }
576
+
577
+ .markdown-body > table,
578
+ .markdown-body td table {
579
+ width: max-content;
580
+ max-width: 100%;
581
+ }
582
+
583
+ table {
584
+ border-collapse: separate;
585
+ border-spacing: 0;
586
+ border: 1px solid var(--border-strong);
587
+ border-radius: 16px;
588
+ background: var(--surface);
589
+ box-shadow: var(--shadow-soft);
590
+ }
591
+
592
+ thead th {
593
+ padding: 0.8rem 1rem;
594
+ background: var(--surface-3);
595
+ border-bottom: 1px solid var(--border-strong);
596
+ color: var(--heading);
597
+ font-size: var(--fs-75);
598
+ font-weight: 700;
599
+ text-transform: uppercase;
600
+ letter-spacing: 0.08em;
601
+ text-align: left;
602
+ white-space: nowrap;
603
+ }
604
+
605
+ tbody td {
606
+ padding: 0.86rem 1rem;
607
+ border-bottom: 1px solid var(--border-soft);
608
+ vertical-align: top;
609
+ }
610
+
611
+ tbody tr:nth-child(even) td {
612
+ background: rgba(0, 0, 0, 0.015);
613
+ }
614
+
615
+ tbody tr:last-child td {
616
+ border-bottom: 0;
617
+ }
618
+
619
+ hr {
620
+ height: 1px;
621
+ margin: var(--space-6) 0;
622
+ border: 0;
623
+ background: repeating-linear-gradient(90deg, transparent 0 12px, rgba(22, 122, 114, 0.28) 12px 24px, transparent 24px 36px);
624
+ }
625
+
626
+ img {
627
+ margin: 0 auto;
628
+ border: 1px solid var(--border);
629
+ border-radius: 16px;
630
+ box-shadow: var(--shadow-soft);
631
+ }
632
+
633
+ p > img {
634
+ display: inline;
635
+ margin: 0;
636
+ border-radius: 10px;
637
+ }
638
+
639
+ .footnote-ref {
640
+ font-size: 0.85em;
641
+ }
642
+
643
+ .footnote-ref a,
644
+ .footnote-backref {
645
+ color: var(--accent-ink);
646
+ text-decoration: none;
647
+ }
648
+
649
+ .footnotes-sep {
650
+ margin: var(--space-6) 0 var(--space-4);
651
+ }
652
+
653
+ .footnotes {
654
+ padding-top: var(--space-3);
655
+ border-top: 1px dashed var(--border-strong);
656
+ color: var(--text-soft);
657
+ font-size: var(--fs-75);
658
+ }
659
+
660
+ .footnotes ol {
661
+ margin-bottom: 0;
662
+ }
663
+
664
+ .footnotes li {
665
+ margin-bottom: 0.65rem;
666
+ }
667
+
668
+ .katex {
669
+ color: #23322f;
670
+ font-size: 1.05em;
671
+ }
672
+
673
+ .katex-display {
674
+ overflow-x: auto;
675
+ overflow-y: hidden;
676
+ padding: 0.85rem 1rem;
677
+ background: #fbfaf7;
678
+ border: 1px solid var(--border);
679
+ border-radius: 14px;
680
+ }
681
+
682
+ .katex-error {
683
+ display: inline-block;
684
+ padding: 0.2em 0.46em;
685
+ color: var(--danger-text);
686
+ background: rgba(211, 105, 105, 0.12);
687
+ border: 1px solid var(--danger-border);
688
+ border-radius: 8px;
689
+ font-family: var(--font-code);
690
+ font-size: var(--fs-75);
691
+ }
692
+
693
+ div.success,
694
+ div.note,
695
+ div.info,
696
+ div.warning,
697
+ div.danger {
698
+ position: relative;
699
+ margin-bottom: var(--space-5);
700
+ padding: 1rem 1.1rem;
701
+ border: 1px solid;
702
+ border-radius: 14px;
703
+ box-shadow: var(--shadow-soft);
704
+ }
705
+
706
+ div.success::before,
707
+ div.note::before,
708
+ div.info::before,
709
+ div.warning::before,
710
+ div.danger::before {
711
+ content: '';
712
+ position: absolute;
713
+ top: 0.72rem;
714
+ right: 0.72rem;
715
+ width: 0.95rem;
716
+ height: 0.95rem;
717
+ border: 1px solid currentColor;
718
+ opacity: 0.35;
719
+ }
720
+
721
+ div.success {
722
+ color: var(--success-text);
723
+ background: var(--success-bg);
724
+ border-color: var(--success-border);
725
+ }
726
+
727
+ div.note {
728
+ color: var(--note-text);
729
+ background: var(--note-bg);
730
+ border-color: var(--note-border);
731
+ }
732
+
733
+ div.info {
734
+ color: var(--info-text);
735
+ background: var(--info-bg);
736
+ border-color: var(--info-border);
737
+ }
738
+
739
+ div.warning {
740
+ color: var(--warning-text);
741
+ background: var(--warning-bg);
742
+ border-color: var(--warning-border);
743
+ }
744
+
745
+ div.danger {
746
+ color: var(--danger-text);
747
+ background: var(--danger-bg);
748
+ border-color: var(--danger-border);
749
+ }
750
+
751
+ div.success > :not(code):not(pre),
752
+ div.note > :not(code):not(pre),
753
+ div.info > :not(code):not(pre),
754
+ div.warning > :not(code):not(pre),
755
+ div.danger > :not(code):not(pre) {
756
+ color: inherit;
757
+ }
758
+
759
+ div.success > *:last-child,
760
+ div.note > *:last-child,
761
+ div.info > *:last-child,
762
+ div.warning > *:last-child,
763
+ div.danger > *:last-child {
764
+ margin-bottom: 0;
765
+ }
766
+
767
+ .left {
768
+ float: left;
769
+ max-width: min(44%, 22rem);
770
+ padding: 0.85rem 0.95rem;
771
+ background: var(--surface-2);
772
+ border: 1px solid var(--border);
773
+ border-radius: 14px;
774
+ box-shadow: var(--shadow-soft);
775
+ margin: 0 var(--space-5) var(--space-4) 0;
776
+ }
777
+
778
+ .right {
779
+ text-align: right;
780
+ margin: 0 0 var(--space-5);
781
+ }
782
+
783
+ .center {
784
+ margin: 0 auto var(--space-5);
785
+ text-align: center;
786
+ max-width: min(100%, 42rem);
787
+ }
788
+
789
+ details.spoil {
790
+ overflow: hidden;
791
+ border: 1px solid var(--border-strong);
792
+ border-radius: 16px;
793
+ background: var(--surface-2);
794
+ box-shadow: var(--shadow-soft);
795
+ }
796
+
797
+ details.spoil > summary {
798
+ display: flex;
799
+ align-items: center;
800
+ gap: 0.75rem;
801
+ padding: 0.95rem 1.05rem;
802
+ cursor: pointer;
803
+ list-style: none;
804
+ user-select: none;
805
+ color: var(--heading);
806
+ font-weight: 700;
807
+ background: rgba(22, 122, 114, 0.06);
808
+ }
809
+
810
+ details.spoil > summary::-webkit-details-marker {
811
+ display: none;
812
+ }
813
+
814
+ details.spoil > summary::before {
815
+ content: '▣';
816
+ color: var(--accent);
817
+ font-size: 0.95rem;
818
+ }
819
+
820
+ details.spoil[open] > summary {
821
+ border-bottom: 1px dashed var(--border-strong);
822
+ }
823
+
824
+ details.spoil > :not(summary) {
825
+ padding: 1rem 1.05rem 1.1rem;
826
+ }
827
+
828
+ .tabs {
829
+ overflow: hidden;
830
+ border: 1px solid var(--border-strong);
831
+ border-radius: 16px;
832
+ background: var(--surface);
833
+ box-shadow: var(--shadow-soft);
834
+ }
835
+
836
+ .tabs-bar {
837
+ display: flex;
838
+ gap: 0;
839
+ overflow-x: auto;
840
+ background: var(--surface-3);
841
+ border-bottom: 1px solid var(--border);
842
+ scrollbar-width: none;
843
+ }
844
+
845
+ .tabs-bar::-webkit-scrollbar {
846
+ display: none;
847
+ }
848
+
849
+ .tabs-bar-btn {
850
+ border: 0;
851
+ border-right: 1px solid var(--border);
852
+ padding: 0.72rem 1rem;
853
+ background: transparent;
854
+ color: var(--text-soft);
855
+ font: 700 var(--fs-75)/1.2 var(--font-heading);
856
+ cursor: pointer;
857
+ white-space: nowrap;
858
+ transition: color var(--transition), background var(--transition);
859
+ }
860
+
861
+ .tabs-bar-btn:last-child {
862
+ border-right: 0;
863
+ }
864
+
865
+ .tabs-bar-btn:hover {
866
+ color: var(--heading);
867
+ background: rgba(255, 255, 255, 0.45);
868
+ }
869
+
870
+ .tabs-bar-btn.active {
871
+ color: #fff;
872
+ background: var(--accent);
873
+ }
874
+
875
+ .tab {
876
+ display: none;
877
+ padding: 1.08rem 1.12rem 1.22rem;
878
+ }
879
+
880
+ .tab.active {
881
+ display: block;
882
+ }
883
+
884
+ .tabs:not([data-js]) .tab {
885
+ display: block;
886
+ }
887
+
888
+ .tabs:not([data-js]) .tab + .tab {
889
+ border-top: 1px dashed var(--border-strong);
890
+ }
891
+
892
+ .cols {
893
+ display: grid;
894
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
895
+ gap: 1rem;
896
+ align-items: start;
897
+ }
898
+
899
+ .col {
900
+ min-width: 0;
901
+ padding: 1rem 1.02rem;
902
+ background: var(--surface-2);
903
+ border: 1px solid var(--border);
904
+ border-radius: 14px;
905
+ box-shadow: var(--shadow-soft);
906
+ }
907
+
908
+ .col > *:last-child {
909
+ margin-bottom: 0;
910
+ }
911
+
912
+ .toc-wrapper {
913
+ position: relative;
914
+ }
915
+
916
+ nav.toc,
917
+ .toc-list {
918
+ padding: 1rem 1.12rem;
919
+ background: var(--surface-2);
920
+ border: 1px solid var(--border-strong);
921
+ border-radius: 16px;
922
+ box-shadow: var(--shadow-soft);
923
+ }
924
+
925
+ nav.toc ul,
926
+ .toc-list ul {
927
+ margin: 0;
928
+ padding-left: 1.05rem;
929
+ }
930
+
931
+ nav.toc li,
932
+ .toc-list li {
933
+ margin-bottom: 0.28rem;
934
+ }
935
+
936
+ nav.toc li::before,
937
+ .toc-list li::before {
938
+ display: none;
939
+ }
940
+
941
+ nav.toc a,
942
+ .toc-list a {
943
+ color: var(--text-soft);
944
+ text-decoration: none;
945
+ }
946
+
947
+ nav.toc a:hover,
948
+ .toc-list a:hover {
949
+ color: var(--accent-ink);
950
+ }
951
+
952
+ span.red {
953
+ color: var(--span-red);
954
+ }
955
+
956
+ span.yellow {
957
+ color: var(--span-yellow);
958
+ }
959
+
960
+ span.green {
961
+ color: var(--span-green);
962
+ }
963
+
964
+ span.blue {
965
+ color: var(--span-blue);
966
+ }
967
+
968
+ span.success,
969
+ span.info,
970
+ span.warning,
971
+ span.danger {
972
+ padding: 0.18em 0.58em;
973
+ border: 1px solid;
974
+ border-radius: 7px;
975
+ font-size: 0.8em;
976
+ font-weight: 700;
977
+ letter-spacing: 0.04em;
978
+ text-transform: uppercase;
979
+ vertical-align: middle;
980
+ }
981
+
982
+ span.success {
983
+ background: rgba(95, 173, 120, 0.13);
984
+ color: var(--success-text);
985
+ border-color: var(--success-border);
986
+ }
987
+
988
+ span.info {
989
+ background: rgba(69, 150, 191, 0.12);
990
+ color: var(--info-text);
991
+ border-color: var(--info-border);
992
+ }
993
+
994
+ span.warning {
995
+ background: rgba(228, 177, 72, 0.15);
996
+ color: var(--warning-text);
997
+ border-color: var(--warning-border);
998
+ }
999
+
1000
+ span.danger {
1001
+ background: rgba(211, 105, 105, 0.14);
1002
+ color: var(--danger-text);
1003
+ border-color: var(--danger-border);
1004
+ }
1005
+
1006
+ div.test-block {
1007
+ padding: 0.85rem 1rem;
1008
+ margin-bottom: var(--space-5);
1009
+ background: rgba(22, 122, 114, 0.08);
1010
+ border: 1px dashed rgba(22, 122, 114, 0.3);
1011
+ border-radius: 14px;
1012
+ color: var(--accent-ink);
1013
+ font-family: var(--font-code);
1014
+ font-size: var(--fs-75);
1015
+ }
1016
+
1017
+ span.test-inline {
1018
+ display: inline-block;
1019
+ padding: 0.12em 0.38em;
1020
+ border-radius: 6px;
1021
+ border: 1px dashed rgba(22, 122, 114, 0.3);
1022
+ color: var(--accent-ink);
1023
+ background: rgba(22, 122, 114, 0.1);
1024
+ font-family: var(--font-code);
1025
+ font-size: 0.88em;
1026
+ }
1027
+
1028
+ div.youtube-embed {
1029
+ position: relative;
1030
+ overflow: hidden;
1031
+ height: 0;
1032
+ padding-bottom: 56.25%;
1033
+ border: 1px solid var(--border-strong);
1034
+ border-radius: 16px;
1035
+ background: #ece7dd;
1036
+ box-shadow: var(--shadow-soft);
1037
+ }
1038
+
1039
+ div.youtube-embed iframe {
1040
+ position: absolute;
1041
+ inset: 0;
1042
+ width: 100%;
1043
+ height: 100%;
1044
+ border: 0;
1045
+ }
1046
+
1047
+ div.mermaid {
1048
+ padding: 1.2rem;
1049
+ border: 1px solid var(--border);
1050
+ border-radius: 16px;
1051
+ background: var(--surface-2);
1052
+ overflow-x: auto;
1053
+ text-align: center;
1054
+ box-shadow: var(--shadow-soft);
1055
+ }
1056
+
1057
+ div.mermaid svg {
1058
+ max-width: 100%;
1059
+ height: auto;
1060
+ }
1061
+
1062
+ div.smiles-render {
1063
+ box-shadow: none;
1064
+ }
1065
+
1066
+ div.smiles-render canvas,
1067
+ canvas[data-smiles] {
1068
+ border-radius: 0;
1069
+ box-shadow: none;
1070
+ }
1071
+
1072
+ span.qrcode {
1073
+ padding: 6px;
1074
+ vertical-align: middle;
1075
+ background: #fff;
1076
+ border-radius: 10px;
1077
+ box-shadow: var(--shadow-soft);
1078
+ }
1079
+
1080
+ /* --------------------------------------------------------------------------
1081
+ Focus indicators
1082
+ -------------------------------------------------------------------------- */
1083
+ a:focus-visible,
1084
+ .tabs-bar-btn:focus-visible,
1085
+ details.spoil > summary:focus-visible {
1086
+ outline: 2px solid var(--accent);
1087
+ outline-offset: 3px;
1088
+ border-radius: var(--radius-sm);
1089
+ text-decoration: none;
1090
+ }
1091
+ .task-list-item-checkbox:focus-visible,
1092
+ .task-list-item input[type='checkbox']:focus-visible {
1093
+ outline: 2px solid var(--accent);
1094
+ outline-offset: 2px;
1095
+ }
1096
+
1097
+ @media (max-width: 720px) {
1098
+ body {
1099
+ padding: 0.7rem;
1100
+ }
1101
+
1102
+ .markdown-body {
1103
+ padding: 1.05rem;
1104
+ box-shadow: 0 10px 22px rgba(166, 155, 137, 0.14), 0 3px 8px rgba(166, 155, 137, 0.08);
1105
+ }
1106
+
1107
+ .left {
1108
+ float: none;
1109
+ max-width: 100%;
1110
+ margin: 0 0 var(--space-4);
1111
+ }
1112
+
1113
+ .cols {
1114
+ grid-template-columns: 1fr;
1115
+ }
1116
+
1117
+ .header-anchor {
1118
+ margin-left: -1.05em;
1119
+ }
1120
+ }
1121
+
1122
+ @media print {
1123
+ body {
1124
+ padding: 0;
1125
+ background: #fff;
1126
+ color: #111;
1127
+ }
1128
+
1129
+ .markdown-body {
1130
+ max-width: 100%;
1131
+ padding: 0;
1132
+ border: 0;
1133
+ box-shadow: none;
1134
+ }
1135
+
1136
+ .markdown-body::before,
1137
+ .markdown-body::after,
1138
+ .header-anchor,
1139
+ .tabs-bar,
1140
+ div.youtube-embed {
1141
+ display: none !important;
1142
+ }
1143
+
1144
+ a {
1145
+ color: #0b57d0;
1146
+ text-decoration-color: currentColor;
1147
+ }
1148
+
1149
+ pre,
1150
+ code,
1151
+ blockquote,
1152
+ .success,
1153
+ .note,
1154
+ .info,
1155
+ .warning,
1156
+ .danger,
1157
+ nav.toc,
1158
+ .toc-list,
1159
+ .col,
1160
+ details.spoil,
1161
+ div.mermaid,
1162
+ div.smiles-render {
1163
+ background: #fff !important;
1164
+ color: #111 !important;
1165
+ border-color: #d0d0d0 !important;
1166
+ box-shadow: none !important;
1167
+ }
1168
+
1169
+ span.success,
1170
+ span.info,
1171
+ span.warning,
1172
+ span.danger {
1173
+ border-color: #bdbdbd !important;
1174
+ color: #111 !important;
1175
+ }
1176
+
1177
+ tr,
1178
+ iframe,
1179
+ video,
1180
+ pre,
1181
+ blockquote {
1182
+ break-inside: avoid;
1183
+ page-break-inside: avoid;
1184
+ }
1185
+ }