hd-garden 0.3.13 → 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 (60) hide show
  1. package/.agents/skills/garden-interactive-chart/SKILL.md +6 -6
  2. package/.agents/skills/garden-ui/SKILL.md +4 -4
  3. package/app/a2/[slug]/page.tsx +61 -0
  4. package/app/a2/page.tsx +27 -0
  5. package/app/blog/[...path]/page.tsx +32 -22
  6. package/app/blog/page.tsx +6 -7
  7. package/app/columns/[column]/[...path]/page.tsx +32 -25
  8. package/app/columns/page.tsx +38 -52
  9. package/app/components/ArticleMeasure.tsx +95 -0
  10. package/app/components/ArticleTitle.tsx +20 -0
  11. package/app/components/BlogArchive.tsx +106 -102
  12. package/app/components/MarkdownArticle.tsx +145 -66
  13. package/app/components/MermaidDiagram.tsx +44 -71
  14. package/app/components/SiteFooter.tsx +3 -7
  15. package/app/components/SiteHeader.tsx +55 -41
  16. package/app/components/TableOfContents.tsx +3 -2
  17. package/app/components/TagIndex.tsx +97 -0
  18. package/app/components/garden/GardenBlock.tsx +45 -0
  19. package/app/components/garden/blocks.tsx +530 -0
  20. package/app/components/garden/chrome.tsx +350 -0
  21. package/app/components/garden/sandbox-message.ts +16 -0
  22. package/app/garden-modules.d.ts +2 -0
  23. package/app/globals.css +17 -12
  24. package/app/layout.tsx +9 -0
  25. package/app/lib/a2-meta.ts +22 -0
  26. package/app/lib/a2-preview.ts +50 -0
  27. package/app/lib/content.ts +52 -6
  28. package/app/lib/markdown-plugins.ts +2 -0
  29. package/app/lib/remark-a2.mjs +208 -0
  30. package/app/lib/remark-garden.mjs +88 -0
  31. package/app/page.tsx +122 -93
  32. package/app/styles/a2.css +1383 -0
  33. package/app/styles/shell.css +438 -0
  34. package/app/styles/tokens.css +111 -0
  35. package/app/tags/page.tsx +28 -0
  36. package/app/ui-parity/page.tsx +3 -2
  37. package/package.json +1 -1
  38. package/scripts/build-content.mjs +11 -1
  39. package/scripts/check-post.mjs +18 -4
  40. package/scripts/new-post.mjs +3 -0
  41. package/site.config.yaml +1 -1
  42. package/templates/garden-blocks.md +128 -0
  43. package/templates/garden-snippets.plist +121 -0
  44. package/ui/garden/catalog.mjs +196 -0
  45. package/ui/garden/check.mjs +103 -0
  46. package/ui/garden/enhance.mjs +89 -0
  47. package/ui/garden/parse.mjs +198 -0
  48. package/ui/garden/snippets.mjs +109 -0
  49. package/ui/garden/title.mjs +37 -0
  50. package/ui/garden/word-count.mjs +266 -0
  51. package/ui/host.mjs +45 -28
  52. package/ui/parity-fixtures.mjs +1 -1
  53. package/ui/preview/dist/garden-ui.css +81 -77
  54. package/ui/preview/dist/garden-ui.esm.js +124 -89
  55. package/ui/preview/dist/garden-ui.iife.js +124 -89
  56. package/ui/prompt/rules.md +17 -1
  57. package/ui/react/CatalogPage.tsx +12 -0
  58. package/ui/react/components/display.tsx +1 -1
  59. package/ui/react/components/media.tsx +2 -2
  60. package/ui/react/ui.css +81 -77
@@ -0,0 +1,1383 @@
1
+ /* A2 article, shell and component chrome. Loaded after globals.css so these win. */
2
+
3
+ body {
4
+ background: var(--paper);
5
+ color: var(--text);
6
+ font: 400 var(--fs-body) / 1.75 var(--sans);
7
+ font-kerning: normal;
8
+ }
9
+
10
+ .site-header {
11
+ position: sticky;
12
+ top: 0;
13
+ background: var(--paper);
14
+ border-bottom: 1px solid transparent;
15
+ }
16
+
17
+ .header-inner {
18
+ width: min(var(--shell), calc(100% - 64px));
19
+ min-height: var(--hdr);
20
+ height: var(--hdr);
21
+ gap: 28px;
22
+ }
23
+
24
+ .brand {
25
+ gap: 0;
26
+ font: 600 var(--fs-lead) / 1 var(--serif);
27
+ color: var(--ink);
28
+ }
29
+
30
+ .brand-mark,
31
+ .brand small {
32
+ display: none;
33
+ }
34
+
35
+ .brand strong {
36
+ font: 600 var(--fs-lead) / 1 var(--serif);
37
+ letter-spacing: 0;
38
+ color: var(--ink);
39
+ }
40
+
41
+ .main-nav {
42
+ margin-left: auto;
43
+ gap: 4px;
44
+ }
45
+
46
+ .main-nav a {
47
+ color: var(--soft);
48
+ font-size: 15px;
49
+ font-weight: 400;
50
+ padding: 8px 12px;
51
+ border-radius: var(--r);
52
+ }
53
+
54
+ .main-nav a + a::before {
55
+ content: none;
56
+ }
57
+
58
+ .main-nav a:hover,
59
+ .main-nav a:focus-visible {
60
+ color: var(--ink);
61
+ background: var(--tint);
62
+ text-decoration: none;
63
+ }
64
+
65
+ .icon-button,
66
+ .search-panel,
67
+ .column-feature,
68
+ .archive-card,
69
+ .thought-card,
70
+ .markdown-body pre,
71
+ .markdown-body blockquote,
72
+ .toc,
73
+ .g-stat,
74
+ .g-cmp,
75
+ .g-card,
76
+ .g-timeline,
77
+ .g-sandbox,
78
+ .g-html,
79
+ .g-figure {
80
+ box-shadow: none;
81
+ }
82
+
83
+ .page-shell,
84
+ .index-page,
85
+ .reading-page {
86
+ font-family: var(--sans);
87
+ }
88
+
89
+ .page-intro h1,
90
+ .sh-head h1 {
91
+ font: 700 var(--fs-display) / 1.2 var(--sans);
92
+ color: var(--ink);
93
+ letter-spacing: 0;
94
+ }
95
+
96
+ /* ----- article ----- */
97
+
98
+ .post-reading-page,
99
+ .column-reading-page {
100
+ padding-top: 0;
101
+ }
102
+
103
+ .column-reading-page {
104
+ width: min(1340px, calc(100% - 64px));
105
+ }
106
+
107
+ .post-reading-page {
108
+ width: min(1340px, 100%);
109
+ padding-right: 32px;
110
+ padding-left: 32px;
111
+ }
112
+
113
+ .post-reading-page .article-summary-row.hero,
114
+ .column-reading-page .article-header.hero {
115
+ display: flex;
116
+ flex-direction: column;
117
+ align-items: stretch;
118
+ width: 100%;
119
+ max-width: none;
120
+ margin: 0;
121
+ padding: 56px 0 0;
122
+ border-bottom: 0;
123
+ text-align: center;
124
+ }
125
+
126
+ .hero h1,
127
+ .article-header h1 {
128
+ font: 700 var(--fs-hero) / 1.22 var(--sans);
129
+ color: var(--ink);
130
+ letter-spacing: 0;
131
+ width: 100%;
132
+ max-width: 1200px;
133
+ margin: 0 auto;
134
+ text-wrap: balance;
135
+ }
136
+
137
+ @media (min-width: 1240px) {
138
+ .hero h1:not(.h1-br),
139
+ .article-header h1:not(.h1-br) {
140
+ white-space: nowrap;
141
+ max-width: none;
142
+ }
143
+ }
144
+
145
+ .hero h1.h1-br {
146
+ white-space: normal;
147
+ max-width: 1040px;
148
+ }
149
+
150
+ .h1-line {
151
+ display: block;
152
+ text-wrap: balance;
153
+ word-break: keep-all;
154
+ overflow-wrap: break-word;
155
+ }
156
+
157
+ .vh {
158
+ position: absolute !important;
159
+ width: 1px;
160
+ height: 1px;
161
+ overflow: hidden;
162
+ clip: rect(0 0 0 0);
163
+ white-space: nowrap;
164
+ }
165
+
166
+ @media (min-width: 768px) {
167
+ .hero h1.h1-br {
168
+ max-width: none;
169
+ font-size: min(var(--fs-hero), calc(min(100vw - 80px, 1276px) / var(--l)));
170
+ }
171
+
172
+ .h1-line {
173
+ white-space: nowrap;
174
+ }
175
+ }
176
+
177
+ .article-meta,
178
+ .hero .meta {
179
+ justify-content: center;
180
+ margin-top: 20px;
181
+ gap: 6px 24px;
182
+ font-size: var(--fs-small);
183
+ line-height: 1.5;
184
+ color: var(--muted);
185
+ }
186
+
187
+ .hero .meta a.orig {
188
+ color: var(--blue);
189
+ text-decoration: none;
190
+ border-bottom: 1px solid var(--blue-line);
191
+ font-size: var(--fs-meta);
192
+ }
193
+
194
+ .cover-card.cover-img,
195
+ .article-hero.article-cover {
196
+ width: 100%;
197
+ max-width: 880px;
198
+ margin: 48px auto 0;
199
+ aspect-ratio: auto;
200
+ background: none;
201
+ padding: 0;
202
+ display: block;
203
+ overflow: hidden;
204
+ border-radius: var(--r-lg);
205
+ box-shadow: none;
206
+ }
207
+
208
+ .cover-img img,
209
+ .article-hero img {
210
+ display: block;
211
+ width: 100%;
212
+ height: auto;
213
+ max-height: 70vh;
214
+ object-fit: contain;
215
+ border-radius: inherit;
216
+ }
217
+
218
+ .column-feature-cover,
219
+ .archive-cover {
220
+ display: block;
221
+ width: auto;
222
+ max-width: 100%;
223
+ height: auto;
224
+ max-height: 70vh;
225
+ object-fit: contain;
226
+ border-radius: inherit;
227
+ }
228
+
229
+ .post-reading-page .article-reading-layout {
230
+ --rail: 200px;
231
+ --gap: 72px;
232
+ display: grid;
233
+ grid-template-columns: minmax(0, var(--rail)) minmax(0, var(--col)) var(--rail);
234
+ column-gap: var(--gap);
235
+ justify-content: center;
236
+ align-items: start;
237
+ margin-top: 64px;
238
+ }
239
+
240
+ .post-reading-page .article-reading-column {
241
+ grid-column: 2;
242
+ grid-row: 1;
243
+ min-width: 0;
244
+ max-width: var(--col);
245
+ }
246
+
247
+ .post-reading-page .article-reading-layout > .toc {
248
+ grid-column: 3;
249
+ grid-row: 1;
250
+ margin-top: 0;
251
+ border-left: 0;
252
+ padding: 4px 0 24px;
253
+ color: var(--grey);
254
+ }
255
+
256
+ .lead {
257
+ font-size: var(--fs-lead);
258
+ line-height: 1.65;
259
+ color: var(--soft);
260
+ margin: 0 0 36px;
261
+ }
262
+
263
+ .post-reading-page .e-content,
264
+ .column-reading-page .e-content {
265
+ --qa-bar: #e2e4e8;
266
+ --qa-text: #737069;
267
+ }
268
+
269
+ :root[data-theme="dark"] .post-reading-page .e-content,
270
+ :root[data-theme="dark"] .column-reading-page .e-content,
271
+ html[data-theme="dark"] .post-reading-page .e-content,
272
+ html[data-theme="dark"] .column-reading-page .e-content {
273
+ --qa-bar: #3a3833;
274
+ --qa-text: #a39e94;
275
+ }
276
+
277
+ .lead.quote-plain {
278
+ margin: 0 0 32px;
279
+ padding: 2px 0 2px 24px;
280
+ border-left: 3px solid var(--qa-bar, #e2e4e8);
281
+ border-radius: 0;
282
+ background: none;
283
+ color: var(--qa-text, #737069);
284
+ font-size: var(--fs-body);
285
+ line-height: 1.75;
286
+ }
287
+
288
+ .markdown-body.prose {
289
+ font: 400 var(--fs-body) / 1.75 var(--sans);
290
+ color: var(--text);
291
+ }
292
+
293
+ .markdown-body h2 {
294
+ font: 700 var(--fs-h2) / 1.4 var(--sans);
295
+ color: var(--ink);
296
+ letter-spacing: 0;
297
+ margin: 64px 0 20px;
298
+ }
299
+
300
+ .markdown-body h2::before {
301
+ content: none;
302
+ }
303
+
304
+ .markdown-body h3 {
305
+ font: 600 var(--fs-lead) / 1.5 var(--sans);
306
+ color: var(--ink);
307
+ letter-spacing: 0;
308
+ margin: 44px 0 12px;
309
+ }
310
+
311
+ .markdown-body h2 + h3 {
312
+ margin-top: 28px;
313
+ }
314
+
315
+ .sec-no {
316
+ color: var(--blue);
317
+ font-variant-numeric: tabular-nums;
318
+ margin-right: 0.45em;
319
+ }
320
+
321
+ .markdown-body p {
322
+ margin: 0 0 22px;
323
+ }
324
+
325
+ .markdown-body strong {
326
+ font-weight: 600;
327
+ color: var(--ink);
328
+ }
329
+
330
+ .markdown-body a {
331
+ text-decoration: underline;
332
+ text-decoration-thickness: 1px;
333
+ text-underline-offset: 4px;
334
+ text-decoration-color: rgb(27 26 24 / 28%);
335
+ }
336
+
337
+ .markdown-body a.ext {
338
+ text-decoration-style: dotted;
339
+ text-decoration-thickness: 1.5px;
340
+ text-decoration-color: rgb(27 26 24 / 45%);
341
+ padding-right: 0.8em;
342
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath d='M3 1.5h5.5V7M8.5 1.5 1.5 8.5' fill='none' stroke='%238A867E' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") right 0.1em top 50% / 0.6em no-repeat;
343
+ }
344
+
345
+ html[data-theme="dark"] .markdown-body a.ext {
346
+ text-decoration-color: rgb(238 236 231 / 45%);
347
+ }
348
+
349
+ .markdown-body a.ext:hover {
350
+ text-decoration-style: solid;
351
+ text-decoration-color: var(--ink);
352
+ }
353
+
354
+ .markdown-body :not(pre) > code {
355
+ font: 400 var(--fs-small) / 1 var(--mono);
356
+ color: var(--ink);
357
+ background: var(--tint);
358
+ padding: 3px 6px;
359
+ border-radius: 5px;
360
+ }
361
+
362
+ .markdown-body pre.code,
363
+ .prose pre.code {
364
+ margin: 28px 0;
365
+ padding: 18px 22px;
366
+ background: var(--well);
367
+ border-radius: 8px;
368
+ border: 0;
369
+ box-shadow: none;
370
+ overflow-x: auto;
371
+ }
372
+
373
+ .markdown-body pre.code code,
374
+ .prose pre.code code {
375
+ display: block;
376
+ background: none;
377
+ padding: 0;
378
+ font-size: var(--fs-small);
379
+ line-height: 1.6;
380
+ color: var(--ink);
381
+ }
382
+
383
+ .markdown-body.prose {
384
+ --al-note: #2c55b4;
385
+ --al-note-bg: #eef3fc;
386
+ --al-note-line: rgba(44, 85, 180, 0.22);
387
+ --al-tip: #2d6a3e;
388
+ --al-tip-bg: #edf5ef;
389
+ --al-tip-line: rgba(45, 106, 62, 0.22);
390
+ --al-important: #6a3fb5;
391
+ --al-important-bg: #f3effa;
392
+ --al-important-line: rgba(106, 63, 181, 0.22);
393
+ --al-warning: #8a5300;
394
+ --al-warning-bg: #fbf3e5;
395
+ --al-warning-line: rgba(176, 108, 0, 0.26);
396
+ --al-caution: #b4213a;
397
+ --al-caution-bg: #fbeef0;
398
+ --al-caution-line: rgba(216, 45, 72, 0.28);
399
+ }
400
+
401
+ :root[data-theme="dark"] .markdown-body.prose,
402
+ :root[data-theme="dark"] .prose,
403
+ html[data-theme="dark"] .markdown-body.prose,
404
+ html[data-theme="dark"] .prose {
405
+ --al-note: #93b2f4;
406
+ --al-note-bg: rgba(147, 178, 244, 0.09);
407
+ --al-note-line: rgba(147, 178, 244, 0.28);
408
+ --al-tip: #8fcb9f;
409
+ --al-tip-bg: rgba(143, 203, 159, 0.08);
410
+ --al-tip-line: rgba(143, 203, 159, 0.26);
411
+ --al-important: #bfa5f0;
412
+ --al-important-bg: rgba(191, 165, 240, 0.09);
413
+ --al-important-line: rgba(191, 165, 240, 0.28);
414
+ --al-warning: #e6b566;
415
+ --al-warning-bg: rgba(230, 181, 102, 0.08);
416
+ --al-warning-line: rgba(230, 181, 102, 0.28);
417
+ --al-caution: #f2909f;
418
+ --al-caution-bg: rgba(242, 144, 159, 0.08);
419
+ --al-caution-line: rgba(242, 144, 159, 0.28);
420
+ }
421
+
422
+ .markdown-body blockquote:not(.markdown-alert) {
423
+ margin: 28px 0;
424
+ padding: 16px 22px 18px;
425
+ background: var(--well);
426
+ border: 0;
427
+ border-radius: var(--r);
428
+ box-shadow: none;
429
+ color: var(--ink);
430
+ }
431
+
432
+ .markdown-body .markdown-alert {
433
+ --al: var(--al-note);
434
+ --al-bg: var(--al-note-bg);
435
+ --al-line: var(--al-note-line);
436
+ margin: 28px 0;
437
+ padding: 16px 20px 18px;
438
+ border: 1px solid var(--al-line);
439
+ border-radius: 12px;
440
+ background: var(--al-bg);
441
+ box-shadow: none;
442
+ color: var(--text);
443
+ font-size: inherit;
444
+ line-height: inherit;
445
+ }
446
+
447
+ .markdown-body .markdown-alert-tip {
448
+ --al: var(--al-tip);
449
+ --al-bg: var(--al-tip-bg);
450
+ --al-line: var(--al-tip-line);
451
+ }
452
+
453
+ .markdown-body .markdown-alert-important {
454
+ --al: var(--al-important);
455
+ --al-bg: var(--al-important-bg);
456
+ --al-line: var(--al-important-line);
457
+ }
458
+
459
+ .markdown-body .markdown-alert-warning {
460
+ --al: var(--al-warning);
461
+ --al-bg: var(--al-warning-bg);
462
+ --al-line: var(--al-warning-line);
463
+ }
464
+
465
+ .markdown-body .markdown-alert-caution {
466
+ --al: var(--al-caution);
467
+ --al-bg: var(--al-caution-bg);
468
+ --al-line: var(--al-caution-line);
469
+ }
470
+
471
+ .markdown-body .markdown-alert .markdown-alert-title {
472
+ display: flex;
473
+ align-items: center;
474
+ gap: 8px;
475
+ margin: 0 0 6px;
476
+ font-size: 14px;
477
+ font-weight: 600;
478
+ line-height: 1.5;
479
+ color: var(--al);
480
+ }
481
+
482
+ .markdown-body .markdown-alert .markdown-alert-title svg {
483
+ width: 16px;
484
+ height: 16px;
485
+ flex: none;
486
+ fill: none;
487
+ stroke: currentColor;
488
+ stroke-width: 1.5;
489
+ stroke-linecap: round;
490
+ stroke-linejoin: round;
491
+ }
492
+
493
+ .markdown-body .markdown-alert > :last-child {
494
+ margin-bottom: 0;
495
+ }
496
+
497
+ .markdown-body .markdown-alert p {
498
+ margin: 0;
499
+ }
500
+
501
+ .markdown-body .markdown-alert p + p,
502
+ .markdown-body .markdown-alert p + ul,
503
+ .markdown-body .markdown-alert p + ol,
504
+ .markdown-body .markdown-alert ul + p,
505
+ .markdown-body .markdown-alert ol + p {
506
+ margin-top: 10px;
507
+ }
508
+
509
+ .markdown-body .markdown-alert ul,
510
+ .markdown-body .markdown-alert ol {
511
+ margin: 8px 0 0;
512
+ padding-left: 1.4em;
513
+ }
514
+
515
+ .markdown-body .markdown-alert li {
516
+ margin: 4px 0;
517
+ }
518
+
519
+ .markdown-body .markdown-alert strong {
520
+ color: var(--ink);
521
+ font-weight: 600;
522
+ }
523
+
524
+ .markdown-body .markdown-alert code {
525
+ background: rgba(27, 26, 24, 0.06);
526
+ }
527
+
528
+ :root[data-theme="dark"] .markdown-body .markdown-alert code,
529
+ html[data-theme="dark"] .markdown-body .markdown-alert code {
530
+ background: var(--tint);
531
+ }
532
+
533
+ .markdown-body .markdown-alert a {
534
+ text-decoration-color: color-mix(in srgb, var(--al) 45%, transparent);
535
+ }
536
+
537
+ .markdown-body .markdown-alert a:hover {
538
+ text-decoration-color: var(--al);
539
+ }
540
+
541
+ @media (max-width: 640px) {
542
+ .markdown-body .markdown-alert {
543
+ padding: 14px 16px 16px;
544
+ }
545
+ }
546
+
547
+ .markdown-image-trigger {
548
+ display: block;
549
+ max-width: 100%;
550
+ margin: 28px 0;
551
+ padding: 0;
552
+ border: 0;
553
+ background: none;
554
+ }
555
+
556
+ .markdown-body img,
557
+ .markdown-image-trigger img {
558
+ display: block;
559
+ width: auto;
560
+ max-width: 100%;
561
+ height: auto;
562
+ }
563
+
564
+ .markdown-body .fig {
565
+ margin: 36px 0;
566
+ }
567
+
568
+ .markdown-body .fig-card {
569
+ background: var(--card);
570
+ border: 1px solid var(--rule);
571
+ border-radius: 16px;
572
+ padding: 12px;
573
+ }
574
+
575
+ .markdown-body .fig-card .markdown-image-trigger {
576
+ margin: 0;
577
+ width: 100%;
578
+ }
579
+
580
+ .markdown-body .fig-card img {
581
+ width: 100%;
582
+ border-radius: 8px;
583
+ }
584
+
585
+ .markdown-body .fig figcaption {
586
+ margin-top: 12px;
587
+ font-size: var(--fs-small);
588
+ line-height: 1.6;
589
+ color: var(--muted);
590
+ text-align: center;
591
+ }
592
+
593
+ @media (max-width: 640px) {
594
+ .markdown-body .fig-card {
595
+ padding: 8px;
596
+ border-radius: 12px;
597
+ }
598
+
599
+ .markdown-body .fig-card img {
600
+ border-radius: 6px;
601
+ }
602
+ }
603
+
604
+ .table-wrap {
605
+ margin: 32px 0;
606
+ border: 1px solid var(--rule);
607
+ border-radius: var(--r);
608
+ overflow-x: auto;
609
+ background: transparent;
610
+ box-shadow: none;
611
+ }
612
+
613
+ .table-wrap table {
614
+ border-collapse: collapse;
615
+ width: 100%;
616
+ font-size: var(--fs-small);
617
+ line-height: 1.6;
618
+ }
619
+
620
+ .table-wrap th,
621
+ .table-wrap td {
622
+ padding: 10px 14px;
623
+ text-align: left;
624
+ vertical-align: top;
625
+ border-bottom: 1px solid var(--rule);
626
+ }
627
+
628
+ .table-wrap th {
629
+ font-weight: 600;
630
+ color: var(--ink);
631
+ background: transparent;
632
+ }
633
+
634
+ @media (min-width: 900px) {
635
+ .ux-wide {
636
+ margin-left: calc(-1 * var(--wl, 0px)) !important;
637
+ margin-right: calc(-1 * var(--wr, 0px)) !important;
638
+ max-width: none !important;
639
+ width: auto !important;
640
+ }
641
+ }
642
+
643
+ .toc {
644
+ font-size: var(--fs-small);
645
+ line-height: 1.5;
646
+ color: var(--grey);
647
+ transition: transform 0.3s ease;
648
+ }
649
+
650
+ .toc a {
651
+ color: var(--grey);
652
+ }
653
+
654
+ .toc a[aria-current="location"],
655
+ .toc li.active > .toc-item-row > a {
656
+ color: var(--ink);
657
+ font-weight: 500;
658
+ }
659
+
660
+ @media (min-width: 1200px) {
661
+ html[data-toc-yield] .toc {
662
+ transform: translateX(var(--tocshift, 0px));
663
+ }
664
+
665
+ html[data-toc-yield][data-toc-hide] .toc {
666
+ visibility: hidden;
667
+ transition: transform 0.3s ease, visibility 0s 0.3s;
668
+ }
669
+ }
670
+
671
+ @media (prefers-reduced-motion: reduce) {
672
+ .toc,
673
+ .h1-line,
674
+ .ux-btn {
675
+ transition: none;
676
+ }
677
+ }
678
+
679
+ .katex-display {
680
+ margin: 28px 0;
681
+ padding: 20px 24px;
682
+ background: transparent;
683
+ border: 1px solid var(--rule);
684
+ border-radius: var(--r);
685
+ overflow-x: auto;
686
+ }
687
+
688
+ /* ----- components ----- */
689
+
690
+ .g-card,
691
+ .g-stat,
692
+ .g-cmp,
693
+ .g-timeline,
694
+ .g-chart,
695
+ .g-figure,
696
+ .g-explore,
697
+ .g-html,
698
+ .g-idea,
699
+ .g-legacy,
700
+ .g-unknown {
701
+ margin: 0 0 1.2em;
702
+ box-shadow: none;
703
+ }
704
+
705
+ .g-explore {
706
+ border: 1px solid var(--rule);
707
+ border-radius: var(--r);
708
+ padding: 12px 14px 14px;
709
+ background: var(--card);
710
+ max-width: 100%;
711
+ }
712
+
713
+ .g-explore [role="tablist"] {
714
+ display: flex;
715
+ flex-wrap: wrap;
716
+ gap: 6px;
717
+ margin: 0;
718
+ padding: 0;
719
+ }
720
+
721
+ .g-explore [role="tab"] {
722
+ font: 500 14px / 1 var(--sans);
723
+ padding: 9px 12px;
724
+ min-height: 44px;
725
+ border-radius: 999px;
726
+ border: 1px solid var(--rule);
727
+ background: transparent;
728
+ color: var(--soft);
729
+ cursor: pointer;
730
+ }
731
+
732
+ .g-explore [role="tab"][aria-selected="true"] {
733
+ border-color: var(--blue);
734
+ color: var(--blue);
735
+ background: var(--blue-tint);
736
+ }
737
+
738
+ .dx-wrap {
739
+ overflow: visible;
740
+ margin-top: 10px;
741
+ max-width: 100%;
742
+ }
743
+
744
+ .dx-wrap svg {
745
+ display: block;
746
+ width: 100%;
747
+ max-width: 100%;
748
+ height: auto;
749
+ }
750
+
751
+ .g-explore:not([data-sel="all"]) .dx-wrap [data-p]:not(.on),
752
+ .g-explore:not([data-sel="all"]) .dx-wrap text:not(.on) {
753
+ opacity: 0.22;
754
+ }
755
+
756
+ .g-explore .on {
757
+ opacity: 1;
758
+ }
759
+
760
+ .dx-exp p {
761
+ margin: 10px 0 0;
762
+ }
763
+
764
+ .g-explore figcaption {
765
+ font-size: 13px;
766
+ color: var(--muted);
767
+ margin-top: 8px;
768
+ text-align: left;
769
+ }
770
+
771
+ .g-sandbox,
772
+ .g-play,
773
+ .g-html,
774
+ .g-explore,
775
+ .dx-wrap {
776
+ max-width: 100%;
777
+ }
778
+
779
+ .g-card,
780
+ .g-stat,
781
+ .g-cmp,
782
+ .g-timeline,
783
+ .g-figure,
784
+ .g-html {
785
+ border: 1px solid var(--rule);
786
+ border-radius: var(--r);
787
+ background: var(--card);
788
+ }
789
+
790
+ .g-card,
791
+ .g-cmp,
792
+ .g-html,
793
+ .g-figure {
794
+ padding: 14px 16px;
795
+ }
796
+
797
+ .g-stats {
798
+ display: grid;
799
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
800
+ gap: 12px;
801
+ }
802
+
803
+ .g-stat {
804
+ padding: 14px 16px;
805
+ background: transparent;
806
+ }
807
+
808
+ .g-stat-n {
809
+ font: 700 32px / 1.1 var(--sans);
810
+ color: var(--ink);
811
+ font-variant-numeric: tabular-nums;
812
+ }
813
+
814
+ .g-stat-n small {
815
+ font-size: 15px;
816
+ font-weight: 600;
817
+ margin-left: 4px;
818
+ color: var(--soft);
819
+ }
820
+
821
+ .g-stat-l,
822
+ .g-stat-c {
823
+ margin-top: 6px;
824
+ font-size: 14px;
825
+ line-height: 1.5;
826
+ color: var(--muted);
827
+ }
828
+
829
+ .g-compare {
830
+ display: grid;
831
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
832
+ gap: 12px;
833
+ }
834
+
835
+ .g-cmp h4 {
836
+ margin: 0 0 8px;
837
+ font: 600 16px / 1.4 var(--sans);
838
+ color: var(--ink);
839
+ }
840
+
841
+ .g-cmp p,
842
+ .g-card p,
843
+ .g-tl-x {
844
+ margin: 0;
845
+ font-size: 14px;
846
+ line-height: 1.6;
847
+ color: var(--text);
848
+ }
849
+
850
+ .g-timeline {
851
+ padding: 18px 20px;
852
+ }
853
+
854
+ .g-timeline ol {
855
+ list-style: none;
856
+ margin: 0;
857
+ padding: 0;
858
+ }
859
+
860
+ .g-timeline li {
861
+ position: relative;
862
+ padding: 0 0 16px 22px;
863
+ border-left: 2px solid var(--rule);
864
+ margin-left: 6px;
865
+ }
866
+
867
+ .g-timeline li::before {
868
+ content: "";
869
+ position: absolute;
870
+ left: -6px;
871
+ top: 6px;
872
+ width: 10px;
873
+ height: 10px;
874
+ border-radius: 50%;
875
+ background: var(--card);
876
+ border: 2px solid var(--blue);
877
+ }
878
+
879
+ .g-tl-d {
880
+ font-size: 13px;
881
+ color: var(--muted);
882
+ margin: 0;
883
+ }
884
+
885
+ .g-tl-t {
886
+ font-weight: 600;
887
+ color: var(--ink);
888
+ margin: 2px 0 0;
889
+ }
890
+
891
+ .g-bar {
892
+ display: grid;
893
+ grid-template-columns: 64px minmax(0, 1fr) 60px;
894
+ gap: 10px;
895
+ align-items: center;
896
+ margin: 8px 0;
897
+ font-size: 14px;
898
+ }
899
+
900
+ .g-bar-track {
901
+ height: 14px;
902
+ border-radius: 4px;
903
+ background: var(--well);
904
+ }
905
+
906
+ .g-bar-fill {
907
+ display: block;
908
+ height: 100%;
909
+ border-radius: 4px;
910
+ background: var(--blue);
911
+ min-width: 3px;
912
+ }
913
+
914
+ .g-figure svg,
915
+ .g-mermaid svg,
916
+ .dx-svg {
917
+ display: block;
918
+ width: 100%;
919
+ max-width: 100%;
920
+ height: auto;
921
+ }
922
+
923
+ .g-figure:not([data-sel="all"]) [data-p]:not(.on),
924
+ .g-figure:not([data-sel="all"]) text:not(.on) {
925
+ opacity: 0.22;
926
+ }
927
+
928
+ .g-figure [data-p].on,
929
+ .g-figure text.on {
930
+ opacity: 1;
931
+ }
932
+
933
+ .g-mermaid {
934
+ margin: 28px 0;
935
+ padding: 16px;
936
+ border: 1px solid var(--rule);
937
+ border-radius: var(--r);
938
+ overflow-x: auto;
939
+ text-align: center;
940
+ background: transparent;
941
+ }
942
+
943
+ .g-mermaid svg {
944
+ max-width: 100% !important;
945
+ max-height: none;
946
+ height: auto;
947
+ display: inline-block;
948
+ }
949
+
950
+ .g-mermaid.ok > pre {
951
+ display: none;
952
+ }
953
+
954
+ .g-mermaid pre.code {
955
+ margin: 0;
956
+ text-align: left;
957
+ white-space: pre;
958
+ }
959
+
960
+ .g-codediff {
961
+ background: var(--well);
962
+ border-radius: 8px;
963
+ margin: 28px 0;
964
+ overflow: hidden;
965
+ }
966
+
967
+ .g-codediff > [role="tablist"] {
968
+ display: flex;
969
+ gap: 4px;
970
+ position: relative;
971
+ margin: 0;
972
+ padding: 4px 10px 0;
973
+ border-bottom: 1px solid var(--rule);
974
+ }
975
+
976
+ .g-codediff > [role="tablist"]:has(> .ux-copy) {
977
+ padding-right: 46px;
978
+ }
979
+
980
+ .g-codediff [role="tab"] {
981
+ font: 500 13px / 1 var(--sans);
982
+ color: var(--muted);
983
+ background: none;
984
+ border: 0;
985
+ border-bottom: 2px solid transparent;
986
+ padding: 8px 10px;
987
+ min-height: 40px;
988
+ cursor: pointer;
989
+ }
990
+
991
+ .g-codediff [role="tab"][aria-selected="true"] {
992
+ color: var(--ink);
993
+ border-bottom-color: var(--blue);
994
+ }
995
+
996
+ .g-codediff pre.code {
997
+ margin: 0;
998
+ border-radius: 0;
999
+ background: transparent;
1000
+ }
1001
+
1002
+ .ux-btn {
1003
+ display: inline-grid;
1004
+ place-items: center;
1005
+ width: 32px;
1006
+ height: 32px;
1007
+ padding: 0;
1008
+ border: 1px solid var(--rule);
1009
+ border-radius: 8px;
1010
+ background: var(--card);
1011
+ color: var(--muted);
1012
+ cursor: pointer;
1013
+ font: 500 12px / 1 var(--sans);
1014
+ box-shadow: none;
1015
+ }
1016
+
1017
+ .ux-btn svg {
1018
+ width: 16px;
1019
+ height: 16px;
1020
+ fill: none;
1021
+ stroke: currentColor;
1022
+ stroke-width: 1.6;
1023
+ stroke-linecap: round;
1024
+ stroke-linejoin: round;
1025
+ }
1026
+
1027
+ .ux-btn.ux-done {
1028
+ width: auto;
1029
+ padding: 0 10px;
1030
+ color: var(--blue);
1031
+ border-color: var(--blue-line);
1032
+ }
1033
+
1034
+ @media (pointer: coarse) {
1035
+ .ux-btn:not(.ux-copy) {
1036
+ position: relative;
1037
+ }
1038
+
1039
+ .ux-btn::before {
1040
+ content: "";
1041
+ position: absolute;
1042
+ left: 50%;
1043
+ top: 50%;
1044
+ width: 44px;
1045
+ height: 44px;
1046
+ transform: translate(-50%, -50%);
1047
+ }
1048
+ }
1049
+
1050
+ .ux-cb {
1051
+ position: relative;
1052
+ }
1053
+
1054
+ .ux-cb > .ux-copy,
1055
+ .g-codediff > [role="tablist"] > .ux-copy {
1056
+ position: absolute;
1057
+ top: 8px;
1058
+ right: 8px;
1059
+ z-index: 2;
1060
+ }
1061
+
1062
+ .g-codediff > [role="tablist"] > .ux-copy {
1063
+ top: 50%;
1064
+ transform: translateY(-50%);
1065
+ }
1066
+
1067
+ @media (hover: hover) {
1068
+ .ux-copy {
1069
+ opacity: 0;
1070
+ }
1071
+
1072
+ .ux-cb:hover > .ux-copy,
1073
+ .ux-cb:focus-within > .ux-copy,
1074
+ .g-codediff:hover .ux-copy,
1075
+ .g-codediff:focus-within .ux-copy,
1076
+ .ux-copy.ux-done {
1077
+ opacity: 1;
1078
+ }
1079
+ }
1080
+
1081
+ .ux-fs {
1082
+ position: relative;
1083
+ background: transparent;
1084
+ }
1085
+
1086
+ .ux-fs > .ux-fsbar {
1087
+ position: absolute;
1088
+ top: 8px;
1089
+ right: 8px;
1090
+ z-index: 3;
1091
+ display: flex;
1092
+ margin: 0;
1093
+ }
1094
+
1095
+ .ux-fs:not(.g-sandbox) > .ux-fsbar + * {
1096
+ padding-right: 44px;
1097
+ }
1098
+
1099
+ .ux-fs:not(.g-sandbox) > .ux-fsbar + .g-explore {
1100
+ padding-right: 14px;
1101
+ }
1102
+
1103
+ .ux-fs:not(.g-sandbox) > .ux-fsbar + .g-sandbox {
1104
+ padding-right: 0;
1105
+ }
1106
+
1107
+ .ux-fs:not(.g-sandbox) > .ux-fsbar + .g-explore > [role="tablist"] {
1108
+ padding-right: 44px;
1109
+ box-sizing: border-box;
1110
+ }
1111
+
1112
+ .ux-fs:fullscreen,
1113
+ .ux-fs.ux-fs-on {
1114
+ background: var(--paper);
1115
+ overflow: auto;
1116
+ max-width: none;
1117
+ width: 100%;
1118
+ margin: 0;
1119
+ border-radius: 0;
1120
+ }
1121
+
1122
+ .ux-fs:fullscreen {
1123
+ padding: 20px max(20px, calc(50vw - 560px));
1124
+ }
1125
+
1126
+ .ux-fs.ux-fs-on {
1127
+ position: fixed;
1128
+ inset: 0;
1129
+ z-index: 2147483000;
1130
+ padding: 16px;
1131
+ border: 0;
1132
+ }
1133
+
1134
+ html.ux-lock,
1135
+ html.ux-lock body {
1136
+ overflow: hidden;
1137
+ }
1138
+
1139
+ .ux-live {
1140
+ position: absolute !important;
1141
+ width: 1px;
1142
+ height: 1px;
1143
+ overflow: hidden;
1144
+ clip: rect(0 0 0 0);
1145
+ white-space: nowrap;
1146
+ }
1147
+
1148
+ .g-sandbox iframe,
1149
+ .g-html iframe {
1150
+ display: block;
1151
+ width: 100%;
1152
+ border: 0;
1153
+ background: transparent;
1154
+ overflow: hidden;
1155
+ }
1156
+
1157
+ .g-idea,
1158
+ .g-legacy,
1159
+ .g-unknown {
1160
+ font-size: var(--fs-small);
1161
+ color: var(--muted);
1162
+ }
1163
+
1164
+ .garden-author-catalog {
1165
+ margin: 0 0 28px;
1166
+ padding: 16px 18px;
1167
+ border: 1px solid var(--rule);
1168
+ border-radius: var(--r);
1169
+ }
1170
+
1171
+ .garden-author-catalog h2 {
1172
+ margin: 0 0 8px;
1173
+ font: 700 20px / 1.4 var(--sans);
1174
+ }
1175
+
1176
+ .garden-author-catalog ul {
1177
+ margin: 12px 0 0;
1178
+ padding-left: 1.2em;
1179
+ }
1180
+
1181
+ .hljs-keyword,
1182
+ .hljs-built_in,
1183
+ .hljs-type,
1184
+ .hljs-meta .hljs-keyword {
1185
+ color: #2c55b4;
1186
+ }
1187
+
1188
+ .hljs-string,
1189
+ .hljs-regexp {
1190
+ color: #2d6a3e;
1191
+ }
1192
+
1193
+ .hljs-comment,
1194
+ .hljs-quote {
1195
+ color: #6e6b64;
1196
+ font-style: normal;
1197
+ }
1198
+
1199
+ .hljs-number,
1200
+ .hljs-literal {
1201
+ color: #8a5300;
1202
+ }
1203
+
1204
+ .hljs-title,
1205
+ .hljs-title.function_,
1206
+ .hljs-title.class_ {
1207
+ color: #6a3fb5;
1208
+ }
1209
+
1210
+ .hljs-attr,
1211
+ .hljs-variable,
1212
+ .hljs-params {
1213
+ color: #1b1a18;
1214
+ }
1215
+
1216
+ html[data-theme="dark"] .hljs-keyword,
1217
+ html[data-theme="dark"] .hljs-built_in,
1218
+ html[data-theme="dark"] .hljs-type {
1219
+ color: #93b2f4;
1220
+ }
1221
+
1222
+ html[data-theme="dark"] .hljs-string {
1223
+ color: #8fd1a0;
1224
+ }
1225
+
1226
+ html[data-theme="dark"] .hljs-comment {
1227
+ color: #a09b91;
1228
+ }
1229
+
1230
+ html[data-theme="dark"] .hljs-number,
1231
+ html[data-theme="dark"] .hljs-literal {
1232
+ color: #e8b86a;
1233
+ }
1234
+
1235
+ html[data-theme="dark"] .hljs-title,
1236
+ html[data-theme="dark"] .hljs-title.function_,
1237
+ html[data-theme="dark"] .hljs-title.class_ {
1238
+ color: #c4a8f0;
1239
+ }
1240
+
1241
+ html[data-theme="dark"] .hljs-attr,
1242
+ html[data-theme="dark"] .hljs-variable,
1243
+ html[data-theme="dark"] .hljs-params {
1244
+ color: #eeece7;
1245
+ }
1246
+
1247
+ @media (max-width: 1199px) {
1248
+ .post-reading-page .article-reading-layout {
1249
+ display: block;
1250
+ margin-top: 48px;
1251
+ }
1252
+
1253
+ .post-reading-page .article-reading-column {
1254
+ max-width: var(--col);
1255
+ margin-inline: auto;
1256
+ }
1257
+ }
1258
+
1259
+ @media (max-width: 640px) {
1260
+ .header-inner {
1261
+ width: calc(100% - 32px);
1262
+ min-height: auto;
1263
+ height: auto;
1264
+ padding: 12px 0;
1265
+ }
1266
+
1267
+ .column-reading-page {
1268
+ width: min(1340px, calc(100% - 40px));
1269
+ }
1270
+
1271
+ .post-reading-page {
1272
+ width: 100%;
1273
+ padding-right: 20px;
1274
+ padding-left: 20px;
1275
+ }
1276
+
1277
+ .lead.quote-plain {
1278
+ padding-left: 18px;
1279
+ }
1280
+
1281
+ .hero,
1282
+ .post-reading-page .article-summary-row.hero {
1283
+ padding: 28px 0 0;
1284
+ }
1285
+
1286
+ .cover-card,
1287
+ .article-hero.article-cover {
1288
+ border-radius: 16px;
1289
+ margin-top: 28px;
1290
+ }
1291
+ }
1292
+
1293
+ .sh-row .archive-meta { font-variant-numeric: tabular-nums; }
1294
+ .sh-row .archive-copy { display: contents; }
1295
+ .sh-row .archive-cover { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
1296
+
1297
+ .t-no,
1298
+ .sec-no {
1299
+ color: var(--blue);
1300
+ font-variant-numeric: tabular-nums;
1301
+ margin-right: 0.45em;
1302
+ }
1303
+
1304
+ .g-tabs [role="tablist"] { display: flex; gap: 4px; border-bottom: 1px solid var(--rule); overflow-x: auto; }
1305
+ .g-tabs [role="tab"] { font: 500 15px/1 var(--sans); color: var(--muted); background: none; border: 0; border-bottom: 2px solid transparent; padding: 12px 12px 10px; margin-bottom: -1px; cursor: pointer; white-space: nowrap; min-height: 44px; }
1306
+ .g-tabs [role="tab"][aria-selected="true"] { color: var(--ink); border-bottom-color: var(--blue); }
1307
+ .g-tabs [role="tabpanel"] { padding-top: 16px; }
1308
+ .g-steps { list-style: none; counter-reset: s; padding: 0; margin: 24px 0; }
1309
+ .g-steps > li { counter-increment: s; position: relative; padding: 0 0 18px 44px; margin: 0; }
1310
+ .g-steps > li::before { content: counter(s); position: absolute; left: 0; top: 1px; width: 28px; height: 28px; border-radius: 50%; border: 1px solid var(--blue-line); color: var(--blue); font: 600 14px/26px var(--sans); text-align: center; background: var(--paper); }
1311
+ .g-steps > li:not(:last-child)::after { content: ""; position: absolute; left: 14px; top: 34px; bottom: 4px; width: 1px; background: var(--rule); }
1312
+ .g-step-t { margin: 0 0 2px; font-weight: 600; color: var(--ink); }
1313
+ .g-steps > li > p { margin: 0 0 8px; }
1314
+ .g-faq details { border-bottom: 1px solid var(--rule); }
1315
+ .g-faq details:first-child { border-top: 1px solid var(--rule); }
1316
+ .g-faq summary { cursor: pointer; padding: 12px 28px 12px 0; font-weight: 600; color: var(--ink); list-style: none; position: relative; }
1317
+ .g-faq summary::-webkit-details-marker { display: none; }
1318
+ .g-faq summary::after { content: "+"; position: absolute; right: 4px; top: 10px; color: var(--muted); font-weight: 400; font-size: 20px; }
1319
+ .g-faq details[open] summary::after { content: "−"; }
1320
+ .g-faq details > div { padding: 0 0 12px; }
1321
+ .g-quiz { margin: 28px 0; }
1322
+ .g-quiz fieldset { border: 1px solid var(--rule); border-radius: var(--r); padding: 12px 16px; margin: 0; }
1323
+ .g-quiz legend { font-weight: 600; color: var(--ink); padding: 0 6px; }
1324
+ .g-quiz-tag { display: block; font-size: 12px; font-weight: 600; color: var(--blue); margin-bottom: 2px; }
1325
+ .g-quiz label { display: flex; gap: 10px; align-items: center; padding: 8px 0; cursor: pointer; min-height: 44px; }
1326
+ .g-quiz input { accent-color: var(--blue); width: 18px; height: 18px; margin: 0; }
1327
+ .g-quiz-row { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-top: 12px; }
1328
+ .g-quiz button { font: 600 14px/1 var(--sans); padding: 11px 16px; border-radius: 8px; border: 1px solid var(--rule-strong); background: var(--card); color: var(--ink); cursor: pointer; min-height: 44px; }
1329
+ .g-quiz-out { margin: 0; font-size: 14px; }
1330
+ .g-quiz-out.ok { color: #2d6a3e; }
1331
+ .g-quiz-out.no { color: #b4213a; }
1332
+ html[data-theme="dark"] .g-quiz-out.ok { color: #8fd1a0; }
1333
+ html[data-theme="dark"] .g-quiz-out.no { color: #f29aab; }
1334
+ .g-quiz-ex { margin-top: 8px; font-size: 15px; color: var(--soft); }
1335
+ .g-play { border: 1px solid var(--rule); border-radius: var(--r); padding: 14px 16px; margin: 24px 0; background: var(--card); }
1336
+ .g-play-f { margin: 0 0 10px; font-size: 14px; color: var(--soft); }
1337
+ .g-range { display: grid; grid-template-columns: 110px minmax(0, 1fr) 64px; gap: 12px; align-items: center; font-size: 14px; color: var(--muted); margin: 6px 0; }
1338
+ .g-range input { width: 100%; accent-color: var(--blue); min-height: 32px; }
1339
+ .g-range output { text-align: right; color: var(--ink); font-variant-numeric: tabular-nums; }
1340
+ .g-play-out { margin: 10px 0 0; font-size: 15px; }
1341
+ .g-play-out b { font-size: 28px; color: var(--ink); font-variant-numeric: tabular-nums; }
1342
+ .g-play-note { margin: 2px 0 0; font-size: 13px; color: var(--muted); }
1343
+ .kv-seg { border: 0; margin: 12px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
1344
+ .kv-seg legend { float: left; font-size: 14px; color: var(--soft); margin-right: 10px; min-width: 3.2em; padding: 0; }
1345
+ .kv-seg label { position: relative; cursor: pointer; }
1346
+ .kv-seg input { position: absolute; opacity: 0; inset: 0; }
1347
+ .kv-seg span { display: inline-flex; align-items: center; min-height: 44px; padding: 5px 10px; border: 1px solid var(--rule-strong); border-radius: 8px; font-size: 14px; background: var(--card); }
1348
+ .kv-seg input:checked + span { border-color: var(--blue); background: var(--blue-tint); color: var(--blue); }
1349
+ .kv-seg input:focus-visible + span { outline: 2px solid var(--blue); outline-offset: 2px; }
1350
+ .dx-tok { font: 500 14px ui-monospace, Menlo, monospace; fill: var(--ink); }
1351
+ .dx-l { font: 600 13px var(--sans); fill: var(--ink); }
1352
+ .dx-cap { font: 12px var(--sans); fill: var(--muted); }
1353
+ .dx-k, .dx-v, .dx-q, .dx-o { fill: var(--card); stroke: var(--rule-strong); }
1354
+ .dx-k, .dx-v { fill: var(--blue-tint); stroke: var(--blue-line); }
1355
+ .dx-new { fill: var(--card); stroke: var(--blue); stroke-dasharray: 4 3; }
1356
+ .dx-cache { fill: none; stroke: var(--blue); stroke-width: 1.5; stroke-dasharray: 6 4; }
1357
+ .dx-attn line { stroke: var(--muted); stroke-width: 1; }
1358
+ .dx-q { stroke: var(--blue); stroke-width: 2; }
1359
+ .g-flow .fl-group { fill: none; stroke: var(--rule-strong); stroke-dasharray: 5 4; }
1360
+ .g-flow .fl-n { fill: var(--card); stroke: var(--rule-strong); stroke-width: 1.2; }
1361
+ .g-flow .fl-m { fill: var(--blue-tint); stroke: var(--blue-line); }
1362
+ .g-flow .fl-e line, .g-flow .fl-e1 { stroke: var(--muted); stroke-width: 1.3; fill: none; }
1363
+ .g-flow .fl-ah { fill: var(--muted); }
1364
+ .g-flow .gc-stw { fill: rgba(180, 33, 58, 0.08); stroke: rgba(180, 33, 58, 0.45); }
1365
+ .prose .link-cards { list-style: none; padding: 0; margin: 24px 0 32px; display: grid; gap: 12px; }
1366
+ .prose .link-cards li { margin: 0; padding: 0; }
1367
+ .link-card { display: flex; gap: 20px; align-items: stretch; padding: 16px; border: 1px solid var(--rule); border-radius: 12px; color: inherit; text-decoration: none; }
1368
+ .prose a.link-card { text-decoration: none; }
1369
+ .lc-body { display: flex; flex-direction: column; gap: 4px; min-width: 0; flex: 1; }
1370
+ .lc-site { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--muted); }
1371
+ .lc-sitename { color: var(--soft); font-weight: 600; }
1372
+ .lc-host { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1373
+ .lc-arrow { width: 10px; height: 10px; margin-left: auto; background: var(--muted); mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 10'%3E%3Cpath d='M3 1.5h5.5V7M8.5 1.5 1.5 8.5' fill='none' stroke='black' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
1374
+ .lc-title { font-weight: 600; font-size: 16px; line-height: 1.45; color: var(--ink); }
1375
+ .mono { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
1376
+ .g-chart-t { margin: 0 0 12px; font-weight: 600; color: var(--ink); font-size: 15px; }
1377
+ .g-bars { display: grid; grid-template-columns: fit-content(40%) minmax(0, 1fr) max-content; gap: 8px 10px; align-items: center; }
1378
+ .g-bars > .g-bar { display: contents; }
1379
+ .g-bar-k { color: var(--muted); }
1380
+ .g-bar-v { text-align: right; color: var(--ink); font-variant-numeric: tabular-nums; white-space: nowrap; }
1381
+ @media (max-width: 640px) {
1382
+ .g-range { grid-template-columns: 84px minmax(0, 1fr) 54px; gap: 8px; }
1383
+ }