hd-garden 0.13.3 → 0.14.2

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 (218) hide show
  1. package/.agents/skills/garden-compose/SKILL.md +24 -0
  2. package/.agents/skills/garden-compose/references/colors.md +11 -0
  3. package/.agents/skills/garden-compose/references/composition-patterns.md +162 -0
  4. package/.agents/skills/garden-compose/references/examples.md +55 -0
  5. package/.agents/skills/garden-compose/references/frames.md +7 -0
  6. package/.agents/skills/garden-compose/references/layout-recipes.md +84 -0
  7. package/.agents/skills/garden-compose/references/rendering-model.md +120 -0
  8. package/.agents/skills/garden-compose/references/static-play.md +19 -0
  9. package/.agents/skills/garden-compose/references/visual-selection.md +38 -0
  10. package/.agents/skills/garden-compose/references/workflow.md +27 -0
  11. package/.agents/skills/garden-compose/scripts/_cli.mjs +12 -0
  12. package/.agents/skills/garden-compose/scripts/apply.mjs +2 -0
  13. package/.agents/skills/garden-compose/scripts/check.mjs +2 -0
  14. package/.agents/skills/garden-compose/scripts/prompt.mjs +2 -0
  15. package/.agents/skills/garden-compose/scripts/scan.mjs +2 -0
  16. package/.agents/skills/garden-post-review/SKILL.md +5 -16
  17. package/Makefile +12 -3
  18. package/README.en.md +10 -5
  19. package/README.md +10 -5
  20. package/app/admin/preview/[...path]/page.tsx +4 -16
  21. package/app/api/admin/ui/blocks/route.ts +1 -1
  22. package/app/components/AdminUiPanels.tsx +6 -3
  23. package/app/components/GardenContentGuide.tsx +7 -8
  24. package/app/components/MarkdownArticle.tsx +2 -0
  25. package/app/components/UiStudio.tsx +29 -32
  26. package/app/components/garden/AuthorRich.tsx +5 -0
  27. package/app/components/garden/ComposePreview.tsx +9 -0
  28. package/app/components/garden/GardenBlock.tsx +12 -10
  29. package/app/components/garden/GardenFile.tsx +1 -1
  30. package/app/components/garden/blocks.tsx +9 -197
  31. package/app/components/garden/file-icons.tsx +1 -1
  32. package/app/components/garden/patterns.tsx +7 -65
  33. package/app/lib/rehype-garden-blocks.mjs +30 -0
  34. package/app/lib/remark-garden.mjs +0 -4
  35. package/app/lib/ui-model.ts +8 -9
  36. package/app/styles/a2.css +17 -1
  37. package/bin/garden.mjs +34 -35
  38. package/docs/handbook/ai-writing.md +19 -22
  39. package/docs/handbook/components/compose.md +16 -7
  40. package/docs/handbook/components/image.md +1 -1
  41. package/docs/handbook/components/link-card.md +2 -2
  42. package/docs/handbook/components.md +5 -213
  43. package/docs/handbook/deploy.md +11 -0
  44. package/docs/handbook/en/ai-writing.md +17 -20
  45. package/docs/handbook/en/components/compose.md +15 -6
  46. package/docs/handbook/en/components/image.md +1 -1
  47. package/docs/handbook/en/components/link-card.md +2 -2
  48. package/docs/handbook/en/components.md +7 -215
  49. package/docs/handbook/en/deploy.md +11 -0
  50. package/docs/handbook/en/index.md +29 -53
  51. package/docs/handbook/en/reference/compose.md +77 -148
  52. package/docs/handbook/en/reference.md +6 -22
  53. package/docs/handbook/en/start.md +1 -1
  54. package/docs/handbook/en/workflow.md +21 -17
  55. package/docs/handbook/en/writing.md +3 -3
  56. package/docs/handbook/index.md +26 -47
  57. package/docs/handbook/reference/compose.md +79 -148
  58. package/docs/handbook/reference.md +6 -22
  59. package/docs/handbook/start.md +1 -1
  60. package/docs/handbook/workflow.md +21 -17
  61. package/docs/handbook/writing.md +3 -3
  62. package/editors/dist/typora/main.js +324 -330
  63. package/editors/dist/typora/style.css +4299 -11
  64. package/editors/dist/vscode/garden-ui-0.14.2.vsix +0 -0
  65. package/eslint.config.mjs +3 -0
  66. package/package.json +5 -3
  67. package/public/images/compose-resources/resource-015b41eb0f32.svg +1 -0
  68. package/public/images/compose-resources/resource-ecee6b47f015.svg +1 -0
  69. package/public/images/compose-resources/resource-fd51121b5e8c.svg +1 -0
  70. package/scripts/build-content.mjs +40 -131
  71. package/scripts/build-ui-preview.mjs +7 -5
  72. package/scripts/check-post.mjs +10 -106
  73. package/scripts/check-site.mjs +80 -0
  74. package/scripts/compose-style-reference.mjs +22 -0
  75. package/scripts/editor-preview-css.mjs +14 -0
  76. package/scripts/file-preview.mjs +1 -1
  77. package/scripts/file-sizes.mjs +7 -7
  78. package/scripts/generated-cache.mjs +36 -0
  79. package/scripts/handbook-facts.mjs +10 -3
  80. package/scripts/image-sizes.mjs +6 -12
  81. package/scripts/link-assets.mjs +35 -10
  82. package/scripts/managed-skills.mjs +56 -0
  83. package/scripts/pack-editors.mjs +12 -1
  84. package/scripts/prepare-pages-output.mjs +1 -1
  85. package/scripts/site-guide.mjs +19 -0
  86. package/scripts/sync-editor-version.mjs +28 -0
  87. package/scripts/ui-cli.mjs +26 -33
  88. package/templates/garden-blocks.md +4 -180
  89. package/templates/garden-snippets.plist +2 -183
  90. package/templates/site/AGENTS.en.md +89 -0
  91. package/templates/site/AGENTS.md +72 -0
  92. package/templates/site/Makefile +12 -3
  93. package/templates/site/Makefile.en +12 -3
  94. package/templates/site/README.en.md +6 -1
  95. package/templates/site/README.md +6 -1
  96. package/templates/skills-en/garden-compose/SKILL.md +24 -0
  97. package/templates/skills-en/garden-post-review/SKILL.md +5 -16
  98. package/templates/workflows/pages.en.yml +11 -0
  99. package/templates/workflows/pages.yml +11 -0
  100. package/ui/compose/compose.css +54 -14
  101. package/ui/compose/contracts.mjs +16 -0
  102. package/ui/compose/dil.mjs +109 -48
  103. package/ui/compose/distribution.mjs +7 -0
  104. package/ui/compose/features.mjs +90 -0
  105. package/ui/compose/icons.mjs +8 -0
  106. package/ui/compose/index.mjs +2 -0
  107. package/ui/compose/inspect.mjs +11 -0
  108. package/ui/compose/markup.mjs +80 -23
  109. package/ui/compose/preview.mjs +13 -0
  110. package/ui/compose/prompt-catalog.mjs +15 -3
  111. package/ui/compose/render.mjs +46 -11
  112. package/ui/compose/scenes.mjs +10 -0
  113. package/ui/core/apply.mjs +12 -45
  114. package/ui/core/catalog.mjs +22 -32
  115. package/ui/core/cli-locale.mjs +8 -18
  116. package/ui/core/color.mjs +34 -0
  117. package/ui/core/compile.mjs +1 -8
  118. package/ui/core/demos.mjs +138 -108
  119. package/ui/core/fence.mjs +14 -70
  120. package/ui/core/fix-prompt.mjs +1 -3
  121. package/ui/core/garden-fence.mjs +3 -63
  122. package/ui/core/index.mjs +3 -5
  123. package/ui/core/parse.mjs +22 -8
  124. package/ui/core/scan.mjs +31 -43
  125. package/ui/core/starters.mjs +3 -3
  126. package/ui/core/static.mjs +36 -6
  127. package/ui/core/transform.mjs +64 -149
  128. package/ui/core/validate.mjs +20 -9
  129. package/ui/garden/article-content.mjs +98 -0
  130. package/ui/garden/catalog.mjs +21 -427
  131. package/ui/garden/check.mjs +18 -60
  132. package/ui/garden/file-block.mjs +1 -1
  133. package/ui/garden/file-paths.mjs +8 -6
  134. package/ui/garden/parse.mjs +19 -182
  135. package/ui/garden/relations.mjs +1 -1
  136. package/ui/garden/snippets.mjs +12 -153
  137. package/ui/garden/source-icon.mjs +17 -9
  138. package/ui/garden/word-count.mjs +16 -85
  139. package/ui/index.mjs +1 -5
  140. package/ui/preview/dist/garden-ui.css +4300 -11
  141. package/ui/preview/dist/garden-ui.esm.js +446 -418
  142. package/ui/preview/dist/garden-ui.iife.js +446 -418
  143. package/ui/preview/index.tsx +31 -98
  144. package/ui/preview/site-config.ts +4 -0
  145. package/ui/prompt/build.mjs +1 -4
  146. package/ui/prompt/recipes/code-walkthrough.md +17 -12
  147. package/ui/prompt/recipes/compare.md +14 -10
  148. package/ui/prompt/recipes/compose.md +3 -3
  149. package/ui/prompt/recipes/converter.md +17 -14
  150. package/ui/prompt/recipes/data-chart.md +9 -8
  151. package/ui/prompt/recipes/inspect-grid.md +9 -8
  152. package/ui/prompt/recipes/param-bench.md +17 -12
  153. package/ui/prompt/recipes/plan.md +4 -3
  154. package/ui/prompt/recipes/stepper.md +18 -16
  155. package/ui/prompt/recipes/trace.md +20 -18
  156. package/ui/prompt/rules.md +26 -133
  157. package/ui/prompt/studio.md +3 -18
  158. package/ui/react/CatalogPage.tsx +19 -21
  159. package/ui/react/recipes.ts +3 -3
  160. package/ui/react/runtime.tsx +23 -2
  161. package/ui/react/ui.css +17 -11
  162. package/vite.config.ts +16 -3
  163. package/.agents/skills/garden-interactive-chart/SKILL.md +0 -84
  164. package/.agents/skills/garden-interactive-chart/references/shell.html +0 -49
  165. package/.agents/skills/garden-interactive-chart/references/style.md +0 -61
  166. package/.agents/skills/garden-ui/SKILL.md +0 -125
  167. package/app/components/UiBlock.tsx +0 -23
  168. package/app/components/WidgetChart.tsx +0 -224
  169. package/app/lib/generated-content.ts +0 -385
  170. package/docs/handbook/components/card.md +0 -67
  171. package/docs/handbook/components/chart.md +0 -38
  172. package/docs/handbook/components/choice.md +0 -42
  173. package/docs/handbook/components/compare.md +0 -53
  174. package/docs/handbook/components/file.md +0 -29
  175. package/docs/handbook/components/html.md +0 -49
  176. package/docs/handbook/components/interactive.md +0 -48
  177. package/docs/handbook/components/list.md +0 -65
  178. package/docs/handbook/components/relations.md +0 -95
  179. package/docs/handbook/components/stat.md +0 -39
  180. package/docs/handbook/components/timeline.md +0 -37
  181. package/docs/handbook/en/components/card.md +0 -67
  182. package/docs/handbook/en/components/chart.md +0 -38
  183. package/docs/handbook/en/components/choice.md +0 -42
  184. package/docs/handbook/en/components/compare.md +0 -53
  185. package/docs/handbook/en/components/file.md +0 -29
  186. package/docs/handbook/en/components/html.md +0 -49
  187. package/docs/handbook/en/components/interactive.md +0 -44
  188. package/docs/handbook/en/components/list.md +0 -65
  189. package/docs/handbook/en/components/relations.md +0 -95
  190. package/docs/handbook/en/components/stat.md +0 -39
  191. package/docs/handbook/en/components/timeline.md +0 -37
  192. package/docs/handbook/en/reference/card.md +0 -85
  193. package/docs/handbook/en/reference/chart.md +0 -68
  194. package/docs/handbook/en/reference/choice.md +0 -69
  195. package/docs/handbook/en/reference/compare.md +0 -59
  196. package/docs/handbook/en/reference/file.md +0 -50
  197. package/docs/handbook/en/reference/html.md +0 -62
  198. package/docs/handbook/en/reference/interactive.md +0 -71
  199. package/docs/handbook/en/reference/list.md +0 -72
  200. package/docs/handbook/en/reference/relations.md +0 -113
  201. package/docs/handbook/en/reference/stat.md +0 -60
  202. package/docs/handbook/en/reference/timeline.md +0 -56
  203. package/docs/handbook/reference/card.md +0 -85
  204. package/docs/handbook/reference/chart.md +0 -68
  205. package/docs/handbook/reference/choice.md +0 -69
  206. package/docs/handbook/reference/compare.md +0 -59
  207. package/docs/handbook/reference/file.md +0 -50
  208. package/docs/handbook/reference/html.md +0 -62
  209. package/docs/handbook/reference/interactive.md +0 -71
  210. package/docs/handbook/reference/list.md +0 -72
  211. package/docs/handbook/reference/relations.md +0 -113
  212. package/docs/handbook/reference/stat.md +0 -60
  213. package/docs/handbook/reference/timeline.md +0 -56
  214. package/editors/dist/vscode/garden-ui-0.1.1.vsix +0 -0
  215. package/templates/skills-en/garden-interactive-chart/SKILL.md +0 -84
  216. package/templates/skills-en/garden-interactive-chart/references/shell.html +0 -49
  217. package/templates/skills-en/garden-interactive-chart/references/style.md +0 -61
  218. package/templates/skills-en/garden-ui/SKILL.md +0 -125
@@ -149,9 +149,9 @@
149
149
  border-radius: 8px;
150
150
  background: transparent;
151
151
  color: var(--gui-text);
152
- font-family: var(--gui-font);
153
- font-size: 16px;
154
- line-height: 26px;
152
+ font-family: inherit;
153
+ font-size: inherit;
154
+ line-height: inherit;
155
155
  letter-spacing: normal;
156
156
  -webkit-font-smoothing: antialiased;
157
157
  }
@@ -196,8 +196,8 @@
196
196
 
197
197
  :where(.garden-ui) p,
198
198
  :where(.garden-ui) li {
199
- font-size: 16px;
200
- line-height: 26px;
199
+ font-size: inherit;
200
+ line-height: inherit;
201
201
  }
202
202
 
203
203
  :where(.garden-ui) strong { font-weight: 600; }
@@ -774,7 +774,7 @@
774
774
  max-width: 100%;
775
775
  }
776
776
 
777
- .garden-ui-table { width: 100%; border-collapse: collapse; font-size: 14px; font-weight: 400; line-height: 20px; color: #0d0d0d; }
777
+ .garden-ui-table { width: 100%; border-collapse: collapse; font-size: inherit; font-weight: 400; line-height: 20px; color: #0d0d0d; }
778
778
  .garden-ui-flow { align-items: center; text-align: center; gap: 8px; }
779
779
  .garden-ui-card.garden-ui-flow { gap: 8px; }
780
780
  .garden-ui-flow p { margin: 0; color: #0d0d0d; font-size: 16px; font-weight: 400; line-height: 26px; text-align: center; }
@@ -1146,7 +1146,7 @@
1146
1146
  .garden-ui .garden-ui-body li { margin: 0; font-family: inherit; }
1147
1147
  .garden-ui .garden-ui-body p:not([class]),
1148
1148
  .garden-ui .garden-ui-body ul:not([class]) > li,
1149
- .garden-ui .garden-ui-body ol:not([class]) > li { color: inherit; font-size: 16px; line-height: 26px; }
1149
+ .garden-ui .garden-ui-body ol:not([class]) > li { color: inherit; font-size: inherit; line-height: inherit; }
1150
1150
  .garden-ui .garden-ui-body p,
1151
1151
  .garden-ui .garden-ui-card-title,
1152
1152
  .garden-ui > figcaption { text-align: start; }
@@ -1226,15 +1226,15 @@
1226
1226
  .garden-ui .garden-ui-pie .garden-ui-legend { justify-content: center; }
1227
1227
  .garden-ui .garden-ui-checklist li { margin: 0; padding: 5px 0; }
1228
1228
  .garden-ui .garden-ui-checklist-detailed li { padding: 12px 0; }
1229
- .garden-ui table.garden-ui-table { display: table; width: 100%; margin: 0; border: 0; font-size: 14px; }
1229
+ .garden-ui table.garden-ui-table { display: table; width: 100%; margin: 0; border: 0; font-size: inherit; }
1230
1230
  .garden-ui table.garden-ui-grid { display: table; width: auto; margin: 0; border: 0; border-collapse: separate; border-spacing: 4px; font-size: 12px; }
1231
1231
  .garden-ui .garden-ui-grid tr { border: 0; background: none; }
1232
1232
  .garden-ui .garden-ui-table tr { border: 0; border-bottom: 1px solid rgba(0, 0, 0, 0.05); background: none; }
1233
1233
  .garden-ui .garden-ui-table tr:last-child { border-bottom: 0; }
1234
1234
  .garden-ui .garden-ui-table th,
1235
- .garden-ui .garden-ui-table td { padding: 8px 8px 8px 0; border: 0; background: none; color: #0d0d0d; font-size: 14px; font-weight: 400; line-height: 20px; }
1236
- .garden-ui .garden-ui-table thead th { color: #0d0d0d; font-size: 14px; font-weight: 600; }
1237
- .garden-ui .garden-ui-table tbody th { color: #0d0d0d; font-size: 14px; font-weight: 400; }
1235
+ .garden-ui .garden-ui-table td { padding: 8px 8px 8px 0; border: 0; background: none; color: #0d0d0d; font-size: inherit; font-weight: 400; line-height: 20px; }
1236
+ .garden-ui .garden-ui-table thead th { color: #0d0d0d; font-size: inherit; font-weight: 600; }
1237
+ .garden-ui .garden-ui-table tbody th { color: #0d0d0d; font-size: inherit; font-weight: 400; }
1238
1238
  .garden-ui .garden-ui-table td:not(.garden-ui-tone-plain) { background: none; color: var(--gui-tone-text); }
1239
1239
  .garden-ui .garden-ui-table:has(tr[data-tone="row"]) th:first-child,
1240
1240
  .garden-ui .garden-ui-table:has(tr[data-tone="row"]) td:first-child { padding-left: 14px; }
@@ -1259,6 +1259,4294 @@
1259
1259
  .garden-ui figcaption,
1260
1260
  .garden-ui > figcaption { margin: 0; border: 0; text-align: start; }
1261
1261
 
1262
+ /* Explicit author text color inherits through component typography; nested colors override the variable. */
1263
+ .g-compose [data-custom-color], .g-compose [data-custom-color] *,
1264
+ .garden-ui-color-scope[data-custom-color], .garden-ui-color-scope[data-custom-color] * { color: var(--compose-color); }
1265
+ .garden-ui-color-scope { display: contents; }
1266
+ .garden-ui-color-scope[data-custom-background] > * { background-color: var(--compose-background); }
1267
+
1268
+ /* Compose diagrams. Color comes only from Garden theme tokens, so light and
1269
+ dark follow `data-theme` without a second palette. */
1270
+
1271
+ .g-compose {
1272
+ position: relative;
1273
+ box-sizing: border-box;
1274
+ max-width: 100%;
1275
+ min-width: 0;
1276
+ margin: 1.25em 0;
1277
+ padding: 18px 18px 14px;
1278
+ border: 1px solid color-mix(in srgb, var(--rule-strong) 72%, var(--paper));
1279
+ border-radius: 8px;
1280
+ background: var(--paper);
1281
+ box-shadow: none;
1282
+ color: var(--ink);
1283
+ font-family: inherit;
1284
+ font-size: inherit;
1285
+ line-height: inherit;
1286
+ overflow: hidden;
1287
+ overflow-wrap: break-word;
1288
+ }
1289
+
1290
+ .g-compose-host {
1291
+ display: contents;
1292
+ }
1293
+
1294
+ .g-compose p,
1295
+ .markdown-body .g-compose p {
1296
+ margin: 0;
1297
+ }
1298
+
1299
+ .g-compose-head {
1300
+ margin: 0 0 14px;
1301
+ }
1302
+
1303
+ .g-compose-title {
1304
+ color: var(--ink);
1305
+ font: 600 18px/1.4 var(--sans);
1306
+ }
1307
+
1308
+ .g-compose-h {
1309
+ color: var(--ink);
1310
+ font: inherit;
1311
+ font-weight: 600;
1312
+ line-height: 1.4;
1313
+ }
1314
+
1315
+ .g-compose-caption {
1316
+ margin-top: 4px;
1317
+ color: var(--muted);
1318
+ font-size: 14px;
1319
+ line-height: 1.5;
1320
+ }
1321
+
1322
+ .g-compose-body {
1323
+ display: flex;
1324
+ flex-direction: column;
1325
+ gap: 8px;
1326
+ }
1327
+
1328
+ .g-compose-body,
1329
+ .g-compose-stack,
1330
+ .g-compose-row,
1331
+ .g-compose-steps,
1332
+ .g-compose-compare,
1333
+ .g-compose-card,
1334
+ .g-compose-step {
1335
+ min-width: 0;
1336
+ max-width: 100%;
1337
+ }
1338
+
1339
+ .g-compose-stack {
1340
+ display: flex;
1341
+ flex-direction: column;
1342
+ }
1343
+
1344
+ .g-compose-stack[data-gap="0"] { gap: 0; }
1345
+ .g-compose-stack[data-gap="1"] { gap: 4px; }
1346
+ .g-compose-stack[data-gap="2"] { gap: 8px; }
1347
+ .g-compose-stack[data-gap="3"] { gap: 12px; }
1348
+ .g-compose-stack[data-gap="4"] { gap: 16px; }
1349
+ .g-compose-stack[style*="--gc-gap"] { gap: var(--gc-gap); }
1350
+
1351
+ .g-compose-row {
1352
+ display: flex;
1353
+ flex-wrap: wrap;
1354
+ align-items: stretch;
1355
+ gap: var(--gc-gap, 8px);
1356
+ }
1357
+ .g-compose-row[data-wrap="nowrap"] { flex-wrap: nowrap; }
1358
+ .g-compose-row[data-justify="center"] { justify-content: center; }
1359
+ .g-compose-row[data-justify="end"] { justify-content: flex-end; }
1360
+ .g-compose-row[data-justify="between"] { justify-content: space-between; }
1361
+ .g-compose-row[data-justify="around"] { justify-content: space-around; }
1362
+ .g-compose-row[data-align="center"] { align-items: center; }
1363
+ .g-compose-row[data-align="end"] { align-items: flex-end; }
1364
+ .g-compose-row[data-align="stretch"] { align-items: stretch; }
1365
+
1366
+ .g-compose-row > .g-compose-card,
1367
+ .g-compose-row > .g-compose-disclosure,
1368
+ .g-compose-row > .g-compose-stack,
1369
+ .g-compose-row > .g-compose-h,
1370
+ .g-compose-row > .g-compose-text {
1371
+ flex: 1 1 0;
1372
+ min-width: 0;
1373
+ }
1374
+
1375
+ /* Legend / between rows: content-sized leaves so space-between pins tip to the right edge */
1376
+ .g-compose-row[data-justify="between"] > .g-compose-text,
1377
+ .g-compose-row[data-justify="between"] > .g-compose-caption-inline,
1378
+ .g-compose-row[data-justify="between"] > .g-compose-h,
1379
+ .g-compose-row[data-justify="around"] > .g-compose-text,
1380
+ .g-compose-row[data-justify="around"] > .g-compose-caption-inline,
1381
+ .g-compose-row[data-justify="around"] > .g-compose-h {
1382
+ flex: 0 0 auto;
1383
+ min-width: 0;
1384
+ }
1385
+
1386
+ .g-compose-row > .g-compose-badge {
1387
+ flex: 0 0 auto;
1388
+ }
1389
+
1390
+ .g-compose-stack[data-align="center"] {
1391
+ align-items: center;
1392
+ text-align: center;
1393
+ }
1394
+
1395
+ .g-compose-stack[data-align="center"] > .g-compose-card:not([data-frame="text"]):not([data-frame="pill"]),
1396
+ .g-compose-stack[data-align="center"] > .g-compose-row,
1397
+ .g-compose-stack[data-align="center"] > .g-compose-fan,
1398
+ .g-compose-stack[data-align="center"] > .g-compose-join,
1399
+ .g-compose-stack[data-align="center"] > .g-compose-lanes,
1400
+ .g-compose-stack[data-align="center"] > .g-compose-text {
1401
+ align-self: stretch;
1402
+ }
1403
+
1404
+ .g-compose-stack[data-align="center"] > .g-compose-card[data-frame="pill"],
1405
+ .g-compose-stack[data-align="center"] > .g-compose-card[data-frame="text"] {
1406
+ align-self: center;
1407
+ width: auto;
1408
+ }
1409
+
1410
+ .g-compose-row[data-align="center"] {
1411
+ justify-content: center;
1412
+ text-align: center;
1413
+ }
1414
+
1415
+ .g-compose-h[data-align="center"],
1416
+ .g-compose-text[data-align="center"],
1417
+ .g-compose-caption-inline[data-align="center"] {
1418
+ text-align: center;
1419
+ }
1420
+ .g-compose-h[data-align="end"],
1421
+ .g-compose-text[data-align="end"],
1422
+ .g-compose-caption-inline[data-align="end"] {
1423
+ text-align: end;
1424
+ }
1425
+
1426
+ .g-compose-stack[data-align="center"] > .g-compose-h[data-align="start"],
1427
+ .g-compose-stack[data-align="center"] > .g-compose-text[data-align="start"] {
1428
+ align-self: stretch;
1429
+ width: 100%;
1430
+ text-align: start;
1431
+ }
1432
+
1433
+ .g-compose-text[data-tone="muted"] {
1434
+ color: var(--muted);
1435
+ line-height: inherit;
1436
+ }
1437
+
1438
+ .g-compose-card > .g-compose-row,
1439
+ .g-compose-card > .g-compose-text,
1440
+ .g-compose-card > .g-compose-h {
1441
+ align-self: stretch;
1442
+ width: 100%;
1443
+ }
1444
+
1445
+ .g-compose-card > .g-compose-row:has(.g-compose-badge) {
1446
+ align-self: center;
1447
+ width: auto;
1448
+ gap: 6px;
1449
+ justify-content: center;
1450
+ }
1451
+
1452
+ .g-compose-compare {
1453
+ display: grid;
1454
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 11rem), 1fr));
1455
+ gap: 12px;
1456
+ align-items: stretch;
1457
+ }
1458
+
1459
+ .g-compose-steps {
1460
+ display: flex;
1461
+ flex-direction: column;
1462
+ align-items: stretch;
1463
+ gap: 2px;
1464
+ }
1465
+
1466
+ .g-compose-steps[data-dir="row"] {
1467
+ flex-direction: row;
1468
+ align-items: stretch;
1469
+ gap: 8px;
1470
+ }
1471
+
1472
+ .g-compose-steps[data-dir="row"] > .g-compose-step {
1473
+ flex: 1 1 0;
1474
+ }
1475
+
1476
+ .g-compose-card,
1477
+ .g-compose-step {
1478
+ display: flex;
1479
+ flex-direction: column;
1480
+ align-items: flex-start;
1481
+ gap: 8px;
1482
+ box-sizing: border-box;
1483
+ padding: 14px 16px;
1484
+ border: 1px solid var(--rule-strong);
1485
+ border-radius: var(--r, 12px);
1486
+ background: transparent;
1487
+ color: var(--ink);
1488
+ font: inherit;
1489
+ text-align: start;
1490
+ text-decoration: none;
1491
+ user-select: text;
1492
+ /* Keep fill + border continuous at the radius (no square child bleed at corners). */
1493
+ overflow: hidden;
1494
+ background-clip: padding-box;
1495
+ }
1496
+
1497
+ .g-compose-disclosure {
1498
+ min-width: 0;
1499
+ max-width: 100%;
1500
+ border: 1px solid color-mix(in srgb, var(--rule-strong) 72%, var(--paper));
1501
+ border-radius: 8px;
1502
+ background: transparent;
1503
+ }
1504
+
1505
+ .g-compose-disclosure > summary {
1506
+ position: relative;
1507
+ list-style: none;
1508
+ cursor: pointer;
1509
+ padding: 10px 36px 10px 14px;
1510
+ border: 0;
1511
+ border-radius: 0;
1512
+ background: transparent;
1513
+ box-shadow: none;
1514
+ }
1515
+
1516
+ .g-compose-disclosure > summary.g-compose-step,
1517
+ .g-compose-disclosure > summary.g-compose-card {
1518
+ border: 0;
1519
+ border-radius: 0;
1520
+ background: transparent;
1521
+ box-shadow: none;
1522
+ }
1523
+
1524
+ .g-compose-disclosure > summary::-webkit-details-marker {
1525
+ display: none;
1526
+ }
1527
+
1528
+ .g-compose-disclosure > summary::marker {
1529
+ content: "";
1530
+ }
1531
+
1532
+ .g-compose-disclosure > summary::after {
1533
+ content: "";
1534
+ position: absolute;
1535
+ top: 16px;
1536
+ right: 16px;
1537
+ width: 8px;
1538
+ height: 8px;
1539
+ border-right: 1.5px solid var(--muted);
1540
+ border-bottom: 1.5px solid var(--muted);
1541
+ transform: translateY(-2px) rotate(45deg);
1542
+ }
1543
+
1544
+ .g-compose-disclosure[open] > summary {
1545
+ border: 0;
1546
+ border-bottom: 1px solid color-mix(in srgb, var(--rule) 70%, var(--paper));
1547
+ background: transparent;
1548
+ }
1549
+
1550
+ .g-compose-disclosure[open] > summary::after {
1551
+ transform: translateY(2px) rotate(225deg);
1552
+ }
1553
+
1554
+ .g-compose-disclosure > .g-compose-note {
1555
+ margin-top: 0;
1556
+ padding: 8px 14px 12px;
1557
+ border: 0;
1558
+ border-radius: 0;
1559
+ background: transparent;
1560
+ }
1561
+
1562
+ .g-compose-card[data-tone="accent"],
1563
+ .g-compose-step[data-tone="accent"] {
1564
+ background: color-mix(in srgb, var(--flow) 8%, var(--paper));
1565
+ border-color: color-mix(in srgb, var(--flow) 28%, var(--paper));
1566
+ }
1567
+
1568
+ .g-compose-card[data-tone="tip"],
1569
+ .g-compose-step[data-tone="tip"] {
1570
+ background: color-mix(in srgb, var(--flow-back) 10%, var(--paper));
1571
+ border-color: color-mix(in srgb, var(--flow-back) 32%, var(--paper));
1572
+ }
1573
+
1574
+ .g-compose-card[data-tone="muted"],
1575
+ .g-compose-step[data-tone="muted"] {
1576
+ background: color-mix(in srgb, var(--ink) 6%, var(--paper));
1577
+ border-color: color-mix(in srgb, var(--ink) 16%, var(--paper));
1578
+ color: var(--ink);
1579
+ }
1580
+
1581
+ .g-compose-card[data-align="center"] {
1582
+ align-items: center;
1583
+ text-align: center;
1584
+ }
1585
+
1586
+ .g-compose-card[data-frame="text"] {
1587
+ border: 0;
1588
+ background: transparent;
1589
+ padding: 4px 8px;
1590
+ box-shadow: none;
1591
+ }
1592
+
1593
+ .g-compose-card[data-frame="band"] {
1594
+ width: 100%;
1595
+ padding: 12px 18px;
1596
+ border: 0;
1597
+ background: var(--well);
1598
+ }
1599
+
1600
+ .g-compose-row > .g-compose-stack {
1601
+ padding-top: 12px;
1602
+ }
1603
+
1604
+ .g-compose-row > .g-compose-stack > .g-compose-h {
1605
+ margin: 0;
1606
+ }
1607
+
1608
+ .g-compose-card[data-frame="band"][data-tone="accent"] {
1609
+ background: color-mix(in srgb, var(--flow) 8%, var(--paper));
1610
+ }
1611
+
1612
+ .g-compose-card[data-frame="band"][data-tone="tip"] {
1613
+ background: color-mix(in srgb, var(--flow-back) 10%, var(--paper));
1614
+ }
1615
+
1616
+ .g-compose-card[data-frame="band"][data-tone="muted"] {
1617
+ background: color-mix(in srgb, var(--ink) 6%, var(--paper));
1618
+ }
1619
+
1620
+ .g-compose-card[data-frame="band"] > .g-compose-card-text,
1621
+ .g-compose-card[data-frame="text"] > .g-compose-card-text {
1622
+ color: var(--muted);
1623
+ }
1624
+
1625
+ .g-compose-card[data-frame="pill"] {
1626
+ width: auto;
1627
+ align-self: center;
1628
+ border-radius: 5px;
1629
+ padding: 8px 16px;
1630
+ background: transparent;
1631
+ border-color: var(--rule-strong);
1632
+ box-shadow: none;
1633
+ }
1634
+
1635
+ .g-compose-card[data-frame="pill"][data-tone="accent"] {
1636
+ background: color-mix(in srgb, var(--flow) 8%, var(--paper));
1637
+ border-color: color-mix(in srgb, var(--flow) 22%, var(--paper));
1638
+ }
1639
+
1640
+ .g-compose-card[data-frame="pill"][data-tone="tip"] {
1641
+ background: color-mix(in srgb, var(--flow-back) 9%, var(--paper));
1642
+ border-color: color-mix(in srgb, var(--flow-back) 24%, var(--paper));
1643
+ }
1644
+
1645
+ .g-compose-card[data-frame="pill"][data-tone="muted"] {
1646
+ background: color-mix(in srgb, var(--ink) 7%, var(--card));
1647
+ border-color: color-mix(in srgb, var(--ink) 20%, var(--card));
1648
+ color: var(--ink);
1649
+ box-shadow: none;
1650
+ }
1651
+
1652
+ .g-compose-card-line {
1653
+ display: inline-flex;
1654
+ align-items: center;
1655
+ justify-content: center;
1656
+ gap: 6px;
1657
+ max-width: 100%;
1658
+ }
1659
+
1660
+ .g-compose-card[data-align="start"] .g-compose-card-line,
1661
+ .g-compose-card:not([data-align]) .g-compose-card-line {
1662
+ justify-content: flex-start;
1663
+ }
1664
+
1665
+ .g-compose-index {
1666
+ color: var(--ink);
1667
+ font: 600 15px/1 var(--sans);
1668
+ }
1669
+
1670
+ .g-compose-mark {
1671
+ display: inline-block;
1672
+ margin-right: 6px;
1673
+ color: var(--ink);
1674
+ vertical-align: -2px;
1675
+ }
1676
+
1677
+ .g-compose-fan {
1678
+ display: grid;
1679
+ grid-template-columns: repeat(var(--n, 3), minmax(0, 1fr));
1680
+ gap: 8px;
1681
+ width: 100%;
1682
+ margin-block: -3px;
1683
+ }
1684
+
1685
+ .g-compose-fan .g-compose-arrow {
1686
+ margin: 0 auto;
1687
+ }
1688
+
1689
+ .g-compose-fan[data-n="2"] { --n: 2; }
1690
+ .g-compose-fan[data-n="3"] { --n: 3; }
1691
+ .g-compose-fan[data-n="4"] { --n: 4; }
1692
+
1693
+ .g-compose-join {
1694
+ display: grid;
1695
+ width: 100%;
1696
+ margin: 2px 0 8px;
1697
+ color: var(--ink);
1698
+ }
1699
+
1700
+ .g-compose-join-svg,
1701
+ .g-compose-join-label {
1702
+ grid-area: 1 / 1;
1703
+ }
1704
+
1705
+ .g-compose-join-svg {
1706
+ display: block;
1707
+ width: 100%;
1708
+ height: auto;
1709
+ aspect-ratio: 600 / 72;
1710
+ color: var(--flow);
1711
+ }
1712
+
1713
+ .g-compose-join-label {
1714
+ position: relative;
1715
+ top: 11.1%;
1716
+ justify-self: center;
1717
+ align-self: start;
1718
+ width: max-content;
1719
+ max-width: 72%;
1720
+ margin: 0;
1721
+ padding: 0;
1722
+ background: transparent;
1723
+ color: var(--ink);
1724
+ font: 700 16px/1.15 var(--sans);
1725
+ white-space: nowrap;
1726
+ text-align: center;
1727
+ z-index: 1;
1728
+ }
1729
+
1730
+ .g-compose-lanes {
1731
+ --lane-gap: 40px;
1732
+ --lane: var(--ink);
1733
+ width: 100%;
1734
+ }
1735
+
1736
+ .g-compose-lanes-head,
1737
+ .g-compose-lane-row {
1738
+ display: grid;
1739
+ grid-template-columns: repeat(var(--cols), minmax(0, 1fr));
1740
+ column-gap: var(--lane-gap);
1741
+ }
1742
+
1743
+ .g-compose-lane-pill {
1744
+ justify-self: center;
1745
+ width: max-content;
1746
+ max-width: 100%;
1747
+ margin: 0 0 8px;
1748
+ padding: 5px 16px;
1749
+ border: 1px solid var(--rule-strong);
1750
+ border-radius: 12px;
1751
+ background: transparent;
1752
+ color: var(--ink);
1753
+ font: 600 14px/1.3 var(--sans);
1754
+ text-align: center;
1755
+ }
1756
+
1757
+ .g-compose-lanes-stage {
1758
+ position: relative;
1759
+ display: grid;
1760
+ row-gap: 16px;
1761
+ padding: 8px 0 2px;
1762
+ }
1763
+
1764
+ .g-compose-lane-life {
1765
+ position: absolute;
1766
+ top: 0;
1767
+ bottom: 0;
1768
+ left: calc(
1769
+ var(--i) * ((100% - (var(--cols) - 1) * var(--lane-gap)) / var(--cols) + var(--lane-gap))
1770
+ + (100% - (var(--cols) - 1) * var(--lane-gap)) / var(--cols) / 2
1771
+ );
1772
+ border-left: 1px dashed var(--rule-strong);
1773
+ pointer-events: none;
1774
+ }
1775
+
1776
+ .g-compose-lane-msg {
1777
+ --lane-half: calc((100% - (var(--span, 2) - 1) * var(--lane-gap)) / var(--span, 2) / 2);
1778
+ position: relative;
1779
+ z-index: 1;
1780
+ display: flex;
1781
+ flex-direction: column;
1782
+ align-items: stretch;
1783
+ gap: 1px;
1784
+ min-width: 0;
1785
+ color: var(--ink);
1786
+ }
1787
+
1788
+ .g-compose-lane-msg[data-tone="forward"] {
1789
+ --lane: var(--flow);
1790
+ }
1791
+
1792
+ .g-compose-lane-msg[data-tone="back"] {
1793
+ --lane: var(--flow-back);
1794
+ }
1795
+
1796
+ .g-compose-lane-label {
1797
+ align-self: start;
1798
+ width: max-content;
1799
+ max-width: calc(100% - var(--lane-half));
1800
+ margin: 0 0 0 var(--lane-half);
1801
+ padding: 0;
1802
+ background: transparent;
1803
+ color: var(--ink);
1804
+ font: 600 13px/1.25 var(--sans);
1805
+ text-align: start;
1806
+ white-space: nowrap;
1807
+ }
1808
+
1809
+ .g-compose-lane-route {
1810
+ display: none;
1811
+ }
1812
+
1813
+ .g-compose-lane-shaft {
1814
+ position: relative;
1815
+ display: block;
1816
+ height: 8px;
1817
+ margin-top: 0;
1818
+ margin-left: var(--lane-half);
1819
+ margin-right: var(--lane-half);
1820
+ background: linear-gradient(var(--lane), var(--lane)) left center / calc(100% - 2px) 1.6px no-repeat;
1821
+ }
1822
+
1823
+ .g-compose-lane-shaft::after {
1824
+ content: "";
1825
+ position: absolute;
1826
+ top: 0;
1827
+ width: 0;
1828
+ height: 0;
1829
+ border-style: solid;
1830
+ }
1831
+
1832
+ .g-compose-lane-msg[data-way="right"] .g-compose-lane-shaft {
1833
+ margin-right: calc(var(--lane-half) - 6px);
1834
+ background-position: left center;
1835
+ }
1836
+
1837
+ .g-compose-lane-msg[data-way="right"] .g-compose-lane-shaft::after {
1838
+ right: 0;
1839
+ border-width: 4px 0 4px 8px;
1840
+ border-color: transparent transparent transparent var(--lane);
1841
+ }
1842
+
1843
+ .g-compose-lane-msg[data-way="left"] .g-compose-lane-shaft {
1844
+ margin-left: calc(var(--lane-half) - 6px);
1845
+ background-position: right center;
1846
+ }
1847
+
1848
+ .g-compose-lane-msg[data-way="left"] .g-compose-lane-shaft::after {
1849
+ left: 0;
1850
+ border-width: 4px 8px 4px 0;
1851
+ border-color: transparent var(--lane) transparent transparent;
1852
+ }
1853
+
1854
+ .g-compose-card-title,
1855
+ .g-compose-step-title,
1856
+ .g-compose-note-k {
1857
+ color: var(--ink);
1858
+ font: inherit;
1859
+ font-weight: 600;
1860
+ line-height: 1.4;
1861
+ }
1862
+
1863
+ .g-compose-card-text,
1864
+ .g-compose-step-text,
1865
+ .g-compose-text,
1866
+ .g-compose-note-text {
1867
+ color: var(--text, var(--ink));
1868
+ font: inherit;
1869
+ font-weight: 400;
1870
+ }
1871
+
1872
+ .g-compose-card[data-tone="muted"] .g-compose-card-text,
1873
+ .g-compose-step[data-tone="muted"] .g-compose-step-text {
1874
+ color: var(--muted);
1875
+ }
1876
+
1877
+ .g-compose-badge {
1878
+ display: inline-flex;
1879
+ align-items: center;
1880
+ padding: 1px 8px;
1881
+ border-radius: 999px;
1882
+ background: var(--well);
1883
+ color: var(--ink);
1884
+ font: 600 12px/1.5 var(--sans);
1885
+ }
1886
+
1887
+ .g-compose-badge[data-tone="muted"] {
1888
+ color: var(--muted);
1889
+ }
1890
+
1891
+ .g-compose-card[data-tone="accent"] .g-compose-badge,
1892
+ .g-compose-step[data-tone="accent"] .g-compose-badge,
1893
+ .g-compose-card[data-tone="tip"] .g-compose-badge,
1894
+ .g-compose-step[data-tone="tip"] .g-compose-badge,
1895
+ .g-compose-card[data-frame="band"] .g-compose-badge {
1896
+ background: var(--paper);
1897
+ border: 1px solid var(--rule-strong);
1898
+ }
1899
+
1900
+ .g-compose-kpi {
1901
+ display: flex;
1902
+ flex-wrap: wrap;
1903
+ align-items: baseline;
1904
+ gap: 6px;
1905
+ }
1906
+
1907
+ .g-compose-kpi-value {
1908
+ color: var(--ink);
1909
+ font: 700 28px/1.1 var(--sans);
1910
+ font-variant-numeric: tabular-nums;
1911
+ }
1912
+
1913
+ .g-compose-kpi-unit,
1914
+ .g-compose-kpi-label {
1915
+ color: var(--muted);
1916
+ font-size: 13px;
1917
+ }
1918
+
1919
+ .g-compose-arrow {
1920
+ display: block;
1921
+ flex: 0 0 auto;
1922
+ align-self: center;
1923
+ width: 10px;
1924
+ height: 8px;
1925
+ margin: 0 auto;
1926
+ color: var(--muted);
1927
+ }
1928
+
1929
+ .g-compose-stack > .g-compose-arrow,
1930
+ .g-compose-body > .g-compose-arrow {
1931
+ margin-block: -2px;
1932
+ }
1933
+
1934
+ .g-compose-arrow[data-dir="right"] {
1935
+ transform: rotate(-90deg);
1936
+ }
1937
+
1938
+ .g-compose-note {
1939
+ padding: 12px 14px;
1940
+ border: 1px solid var(--rule);
1941
+ border-radius: var(--r, 12px);
1942
+ background: var(--well);
1943
+ }
1944
+
1945
+ .g-compose-note + .g-compose-note {
1946
+ margin-top: 8px;
1947
+ }
1948
+
1949
+ .g-compose-note-k {
1950
+ margin-bottom: 4px;
1951
+ }
1952
+
1953
+ .g-compose-callout {
1954
+ padding: 12px 14px;
1955
+ border: 1px solid var(--rule);
1956
+ border-radius: var(--r, 12px);
1957
+ background: var(--well);
1958
+ color: var(--text, var(--ink));
1959
+ }
1960
+
1961
+ .g-compose-callout[data-tone="tip"] {
1962
+ background: transparent;
1963
+ border-color: var(--rule-strong);
1964
+ }
1965
+
1966
+ .g-compose-callout[data-tone="warn"] {
1967
+ border-color: var(--ink);
1968
+ }
1969
+
1970
+ /* `.markdown-body hr` is margin 54px 0 at specificity 0,1,1. These two selectors win. */
1971
+ .g-compose hr,
1972
+ .markdown-body .g-compose hr,
1973
+ .g-compose-divider {
1974
+ width: 100%;
1975
+ height: 0;
1976
+ margin: 16px 0 10px;
1977
+ border: 0;
1978
+ border-top: 1px solid color-mix(in srgb, var(--rule) 70%, var(--paper));
1979
+ }
1980
+
1981
+ .g-compose-h {
1982
+ margin-bottom: 2px;
1983
+ }
1984
+
1985
+
1986
+ /* —— Design tokens (Claude paper surfaces, 4px spacing) —— */
1987
+
1988
+ .g-compose-card[style*="--gc-pad"],
1989
+ .g-compose-stack[style*="--gc-pad"],
1990
+ .g-compose-row[style*="--gc-pad"],
1991
+ .g-compose-grid[style*="--gc-pad"],
1992
+ .g-compose-grid-item[style*="--gc-pad"] {
1993
+ padding: var(--gc-pad);
1994
+ }
1995
+
1996
+ .g-compose-card[data-pad="0"],
1997
+ .g-compose-grid-item[data-pad="0"] { padding: 0; }
1998
+ .g-compose-card[data-pad="1"],
1999
+ .g-compose-grid-item[data-pad="1"] { padding: 4px; }
2000
+ .g-compose-card[data-pad="2"],
2001
+ .g-compose-grid-item[data-pad="2"] { padding: 8px; }
2002
+ .g-compose-card[data-pad="3"],
2003
+ .g-compose-grid-item[data-pad="3"] { padding: 12px; }
2004
+ .g-compose-card[data-pad="4"],
2005
+ .g-compose-grid-item[data-pad="4"] { padding: 16px; }
2006
+
2007
+ .g-compose-card[data-radius="none"],
2008
+ .g-compose-grid-item[data-radius="none"] { border-radius: 0; }
2009
+ .g-compose-card[data-radius="sm"],
2010
+ .g-compose-grid-item[data-radius="sm"] { border-radius: 6px; }
2011
+ .g-compose-card[data-radius="md"],
2012
+ .g-compose-grid-item[data-radius="md"] { border-radius: 10px; }
2013
+ .g-compose-card[data-radius="lg"],
2014
+ .g-compose-grid-item[data-radius="lg"] { border-radius: 14px; }
2015
+ .g-compose-card[data-radius="xl"],
2016
+ .g-compose-grid-item[data-radius="xl"] { border-radius: 18px; }
2017
+ .g-compose-card[data-radius="full"],
2018
+ .g-compose-grid-item[data-radius="full"] { border-radius: 999px; }
2019
+
2020
+ .g-compose-card[data-border="none"],
2021
+ .g-compose-card[data-border="false"] { border-color: transparent; border-width: 0; }
2022
+ .g-compose-card[data-border="subtle"] { border-color: color-mix(in srgb, var(--rule) 70%, var(--paper)); }
2023
+ .g-compose-card[data-border="strong"],
2024
+ .g-compose-card[data-border="true"] { border-color: var(--rule-strong); }
2025
+
2026
+ .g-compose-card[data-bg="surface"],
2027
+ .g-compose-card[data-bg="paper"],
2028
+ .g-compose-grid-item[data-bg="surface"],
2029
+ .g-compose-grid-item[data-bg="paper"] {
2030
+ background: var(--paper);
2031
+ }
2032
+ .g-compose-card[data-bg="surface-secondary"],
2033
+ .g-compose-card[data-bg="well"],
2034
+ .g-compose-grid-item[data-bg="surface-secondary"],
2035
+ .g-compose-grid-item[data-bg="well"] {
2036
+ background: var(--well);
2037
+ }
2038
+ .g-compose-card[data-bg="surface-accent"],
2039
+ .g-compose-grid-item[data-bg="surface-accent"] {
2040
+ background: color-mix(in srgb, var(--flow) 12%, var(--paper));
2041
+ }
2042
+ .g-compose-card[data-bg="surface-tip"],
2043
+ .g-compose-grid-item[data-bg="surface-tip"] {
2044
+ background: color-mix(in srgb, var(--flow-back) 14%, var(--paper));
2045
+ }
2046
+ .g-compose-card[data-bg="surface-muted"],
2047
+ .g-compose-grid-item[data-bg="surface-muted"] {
2048
+ background: color-mix(in srgb, var(--ink) 5%, var(--paper));
2049
+ }
2050
+ .g-compose-card[data-bg="transparent"],
2051
+ .g-compose-grid-item[data-bg="transparent"] {
2052
+ background: transparent;
2053
+ }
2054
+
2055
+ .g-compose-card[data-size="sm"] {
2056
+ padding: 4px 6px;
2057
+ gap: 2px;
2058
+ min-width: 2.75rem;
2059
+ border-radius: 8px;
2060
+ }
2061
+ .g-compose-card[data-size="sm"][data-frame="text"] {
2062
+ /* still flex:1 with siblings; lighter pad so empty days don't look like pills */
2063
+ min-width: 0;
2064
+ padding: 4px 2px;
2065
+ }
2066
+ .g-compose-card[data-size="lg"] { padding: 16px 20px; gap: 10px; }
2067
+ .g-compose-card[data-size="xl"] { padding: 20px 24px; gap: 12px; }
2068
+
2069
+ /*
2070
+ * Day-chip rows (4-day AND 7-day): every sm cell equal-stretches edge-to-edge,
2071
+ * including empty frame=text days. Full banner width is the lock — do not
2072
+ * content-size empty days. Legend rows use justify=between separately.
2073
+ */
2074
+ .g-compose-row[data-wrap="nowrap"] > .g-compose-card[data-size="sm"] {
2075
+ flex: 1 1 0;
2076
+ width: auto;
2077
+ min-width: 0;
2078
+ align-items: center;
2079
+ text-align: center;
2080
+ }
2081
+ .g-compose-row[data-wrap="nowrap"] > .g-compose-card[data-size="sm"] > .g-compose-text,
2082
+ .g-compose-row[data-wrap="nowrap"] > .g-compose-card[data-size="sm"] > .g-compose-caption-inline,
2083
+ .g-compose-row[data-wrap="nowrap"] > .g-compose-card[data-size="sm"] > .g-compose-h {
2084
+ text-align: center;
2085
+ width: 100%;
2086
+ }
2087
+
2088
+ .g-compose-h[data-size="sm"] {
2089
+ font-size: .875em;
2090
+ font-weight: 600;
2091
+ line-height: 1.3;
2092
+ }
2093
+ .g-compose-text[data-size="sm"] { font-size: .875em; font-weight: 400; line-height: 1.5; }
2094
+ .g-compose-caption-inline[data-size="sm"] { font-size: 11px; font-weight: 400; line-height: 1.35; }
2095
+ .g-compose-text[data-tone="tip"] {
2096
+ color: color-mix(in srgb, var(--flow-back) 78%, var(--ink));
2097
+ }
2098
+ .g-compose-text[data-tone="accent"] {
2099
+ color: color-mix(in srgb, var(--flow) 72%, var(--ink));
2100
+ }
2101
+ .g-compose-h[data-size="lg"] { font-size: 1.125em; }
2102
+ .g-compose-h[data-size="xl"] { font-size: 1.25em; }
2103
+ .g-compose-text[data-size="lg"] { font-size: 1.125em; }
2104
+ .g-compose-text[data-size="xl"] { font-size: 1.25em; }
2105
+ .g-compose-caption-inline[data-size="lg"] { font-size: 16px; }
2106
+
2107
+ .g-compose-caption-inline {
2108
+ color: var(--muted);
2109
+ font: 400 12px/1.35 var(--sans);
2110
+ margin: 0;
2111
+ }
2112
+
2113
+ .g-compose-grid {
2114
+ display: grid;
2115
+ grid-template-columns: repeat(var(--gc-cols, 2), minmax(0, 1fr));
2116
+ gap: var(--gc-gap, 12px);
2117
+ width: 100%;
2118
+ }
2119
+ .g-compose-grid[data-cols="1"] { --gc-cols: 1; }
2120
+ .g-compose-grid[data-cols="2"] { --gc-cols: 2; }
2121
+ .g-compose-grid[data-cols="3"] { --gc-cols: 3; }
2122
+ .g-compose-grid[data-cols="4"] { --gc-cols: 4; }
2123
+ .g-compose-grid[data-cols="5"] { --gc-cols: 5; }
2124
+ .g-compose-grid[data-cols="6"] { --gc-cols: 6; }
2125
+
2126
+ .g-compose-grid-item {
2127
+ min-width: 0;
2128
+ display: flex;
2129
+ flex-direction: column;
2130
+ gap: var(--gc-gap, 8px);
2131
+ }
2132
+ .g-compose-grid-item[data-span="2"] { grid-column: span 2; }
2133
+ .g-compose-grid-item[data-span="3"] { grid-column: span 3; }
2134
+ .g-compose-grid-item[data-span="4"] { grid-column: span 4; }
2135
+
2136
+ .g-compose-icon {
2137
+ display: inline-block;
2138
+ flex: 0 0 auto;
2139
+ width: 15px;
2140
+ height: 15px;
2141
+ color: var(--ink);
2142
+ vertical-align: -2px;
2143
+ }
2144
+ .g-compose-icon[data-size="sm"] { width: 13px; height: 13px; }
2145
+ .g-compose-icon[data-size="lg"] { width: 18px; height: 18px; }
2146
+ .g-compose-icon[data-size="xl"] { width: 22px; height: 22px; }
2147
+ .g-compose-card[data-size="sm"] > .g-compose-icon {
2148
+ width: 14px;
2149
+ height: 14px;
2150
+ margin: 1px 0 0;
2151
+ }
2152
+ .g-compose-icon[data-inline="true"] {
2153
+ margin-right: 6px;
2154
+ }
2155
+
2156
+ .g-compose-card > .g-compose-icon,
2157
+ .g-compose-stack > .g-compose-icon {
2158
+ align-self: center;
2159
+ }
2160
+
2161
+ .g-compose-arrow[data-dir="left"] {
2162
+ transform: rotate(90deg);
2163
+ }
2164
+ .g-compose-arrow[data-dir="up"] {
2165
+ transform: rotate(180deg);
2166
+ }
2167
+
2168
+ .g-compose-body,
2169
+ .g-compose-stack,
2170
+ .g-compose-row,
2171
+ .g-compose-steps,
2172
+ .g-compose-compare,
2173
+ .g-compose-card,
2174
+ .g-compose-step,
2175
+ .g-compose-grid,
2176
+ .g-compose-grid-item {
2177
+ min-width: 0;
2178
+ max-width: 100%;
2179
+ }
2180
+
2181
+ .g-compose-pair {
2182
+ display: grid;
2183
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
2184
+ gap: 16px;
2185
+ align-items: start;
2186
+ margin: 1.25em 0 1.75em;
2187
+ }
2188
+
2189
+ .g-compose-pair-k {
2190
+ margin: 0 0 8px;
2191
+ color: var(--muted);
2192
+ font: 600 13px/1.4 var(--sans);
2193
+ }
2194
+
2195
+ .g-compose-pair-ref,
2196
+ .g-compose-pair-live {
2197
+ min-width: 0;
2198
+ margin: 0;
2199
+ }
2200
+
2201
+ .g-compose-pair-ref img {
2202
+ display: block;
2203
+ width: 100%;
2204
+ height: auto;
2205
+ border: 1px solid var(--rule);
2206
+ border-radius: 8px;
2207
+ background: var(--card);
2208
+ }
2209
+
2210
+ .g-compose-pair .g-compose {
2211
+ margin: 0;
2212
+ }
2213
+
2214
+
2215
+
2216
+ /* —— Expanded catalog widgets (static snapshots) —— */
2217
+
2218
+ .g-compose-button {
2219
+ display: inline-flex;
2220
+ align-items: center;
2221
+ justify-content: center;
2222
+ gap: 6px;
2223
+ padding: 6px 12px;
2224
+ border-radius: 8px;
2225
+ border: 1px solid color-mix(in srgb, var(--rule) 70%, var(--paper));
2226
+ background: color-mix(in srgb, var(--flow) 12%, var(--paper));
2227
+ color: var(--ink);
2228
+ font: 500 13px/1.2 var(--sans);
2229
+ white-space: nowrap;
2230
+ }
2231
+ .g-compose-button[data-tone="muted"] { background: color-mix(in srgb, var(--ink) 5%, var(--paper)); }
2232
+ .g-compose-button[data-tone="tip"] { background: color-mix(in srgb, var(--flow-back) 14%, var(--paper)); }
2233
+ .g-compose-button[data-size="sm"] { padding: 4px 8px; font-size: 12px; }
2234
+ .g-compose-button[data-size="lg"] { padding: 8px 16px; font-size: 14px; }
2235
+
2236
+ .g-compose-slider,
2237
+ .g-compose-progress,
2238
+ .g-compose-meter {
2239
+ display: flex;
2240
+ flex-direction: column;
2241
+ gap: 4px;
2242
+ width: 100%;
2243
+ min-width: 8rem;
2244
+ }
2245
+ .g-compose-widget-label {
2246
+ color: var(--muted);
2247
+ font: 400 12px/1.3 var(--sans);
2248
+ }
2249
+ .g-compose-widget-value {
2250
+ color: var(--ink);
2251
+ font: 500 12px/1.3 var(--sans);
2252
+ }
2253
+ .g-compose-slider-track,
2254
+ .g-compose-meter-track {
2255
+ position: relative;
2256
+ height: 6px;
2257
+ border-radius: 999px;
2258
+ background: color-mix(in srgb, var(--ink) 8%, var(--paper));
2259
+ overflow: visible;
2260
+ }
2261
+ .g-compose-slider-track > i,
2262
+ .g-compose-meter-track > i {
2263
+ display: block;
2264
+ height: 100%;
2265
+ border-radius: inherit;
2266
+ background: color-mix(in srgb, var(--flow) 55%, var(--ink));
2267
+ }
2268
+ .g-compose-slider-track > b {
2269
+ position: absolute;
2270
+ top: 50%;
2271
+ width: 12px;
2272
+ height: 12px;
2273
+ margin: -6px 0 0 -6px;
2274
+ border-radius: 50%;
2275
+ background: var(--paper);
2276
+ border: 2px solid color-mix(in srgb, var(--flow) 55%, var(--ink));
2277
+ box-sizing: border-box;
2278
+ }
2279
+
2280
+ .g-compose-checkbox,
2281
+ .g-compose-radio,
2282
+ .g-compose-toggle {
2283
+ display: inline-flex;
2284
+ align-items: center;
2285
+ gap: 6px;
2286
+ font: 400 13px/1.3 var(--sans);
2287
+ color: var(--ink);
2288
+ }
2289
+ .g-compose-checkbox > i,
2290
+ .g-compose-radio > i {
2291
+ width: 1.1em;
2292
+ text-align: center;
2293
+ color: var(--muted);
2294
+ }
2295
+ .g-compose-checkbox[data-checked="true"] > i,
2296
+ .g-compose-radio[data-checked="true"] > i { color: var(--ink); }
2297
+ .g-compose-toggle > i {
2298
+ width: 28px;
2299
+ height: 16px;
2300
+ border-radius: 999px;
2301
+ background: color-mix(in srgb, var(--ink) 18%, var(--paper));
2302
+ position: relative;
2303
+ display: inline-block;
2304
+ }
2305
+ .g-compose-toggle > i::after {
2306
+ content: "";
2307
+ position: absolute;
2308
+ top: 2px;
2309
+ left: 2px;
2310
+ width: 12px;
2311
+ height: 12px;
2312
+ border-radius: 50%;
2313
+ background: var(--paper);
2314
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--ink) 20%, var(--paper));
2315
+ }
2316
+ .g-compose-toggle[data-checked="true"] > i {
2317
+ background: color-mix(in srgb, var(--flow) 45%, var(--ink));
2318
+ }
2319
+ .g-compose-toggle[data-checked="true"] > i::after { left: 14px; }
2320
+
2321
+ .g-compose-field-static {
2322
+ display: flex;
2323
+ flex-direction: column;
2324
+ gap: 4px;
2325
+ width: 100%;
2326
+ }
2327
+ .g-compose-input-face,
2328
+ .g-compose-select-face,
2329
+ .g-compose-textarea-face {
2330
+ display: block;
2331
+ padding: 6px 10px;
2332
+ border-radius: 8px;
2333
+ border: 1px solid color-mix(in srgb, var(--rule) 70%, var(--paper));
2334
+ background: var(--paper);
2335
+ color: var(--ink);
2336
+ font: 400 13px/1.35 var(--sans);
2337
+ min-height: 1.35em;
2338
+ }
2339
+ .g-compose-textarea-face { min-height: 3.2em; white-space: pre-wrap; }
2340
+
2341
+ .g-compose-tabs { display: flex; flex-direction: column; gap: 8px; width: 100%; }
2342
+ .g-compose-tablist {
2343
+ display: flex;
2344
+ flex-wrap: wrap;
2345
+ gap: 4px;
2346
+ border-bottom: 1px solid color-mix(in srgb, var(--rule) 70%, var(--paper));
2347
+ padding-bottom: 4px;
2348
+ }
2349
+ .g-compose-tab-h {
2350
+ padding: 4px 10px;
2351
+ border-radius: 6px 6px 0 0;
2352
+ color: var(--muted);
2353
+ font: 500 13px/1.3 var(--sans);
2354
+ }
2355
+ .g-compose-tab-h[data-active="true"] {
2356
+ color: var(--ink);
2357
+ background: color-mix(in srgb, var(--ink) 5%, var(--paper));
2358
+ }
2359
+ .g-compose-tabpanel { min-width: 0; }
2360
+
2361
+ .g-compose-list {
2362
+ margin: 0;
2363
+ padding-left: 1.2em;
2364
+ display: flex;
2365
+ flex-direction: column;
2366
+ gap: 4px;
2367
+ font: inherit;
2368
+ }
2369
+ .g-compose-table {
2370
+ width: 100%;
2371
+ border-collapse: collapse;
2372
+ font: inherit;
2373
+ }
2374
+ .g-compose-table th,
2375
+ .g-compose-table td {
2376
+ border: 1px solid color-mix(in srgb, var(--rule) 70%, var(--paper));
2377
+ padding: 6px 8px;
2378
+ text-align: start;
2379
+ vertical-align: top;
2380
+ }
2381
+ .g-compose-table th {
2382
+ background: color-mix(in srgb, var(--ink) 4%, var(--paper));
2383
+ font-weight: 600;
2384
+ }
2385
+
2386
+ .g-compose-code {
2387
+ margin: 0;
2388
+ padding: 10px 12px;
2389
+ border-radius: 8px;
2390
+ background: color-mix(in srgb, var(--ink) 5%, var(--paper));
2391
+ border: 1px solid color-mix(in srgb, var(--rule) 60%, var(--paper));
2392
+ overflow: auto;
2393
+ font: 400 12px/1.45 var(--mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
2394
+ }
2395
+ .g-compose-kbd {
2396
+ display: inline-block;
2397
+ padding: 1px 6px;
2398
+ border-radius: 4px;
2399
+ border: 1px solid color-mix(in srgb, var(--rule) 80%, var(--paper));
2400
+ background: color-mix(in srgb, var(--ink) 4%, var(--paper));
2401
+ font: 500 12px/1.3 var(--mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
2402
+ }
2403
+ .g-compose-link {
2404
+ color: var(--ink);
2405
+ text-decoration: underline;
2406
+ text-underline-offset: 2px;
2407
+ }
2408
+ .g-compose-label {
2409
+ color: var(--muted);
2410
+ font: 500 12px/1.3 var(--sans);
2411
+ margin: 0;
2412
+ }
2413
+ .g-compose-avatar {
2414
+ display: inline-flex;
2415
+ align-items: center;
2416
+ justify-content: center;
2417
+ width: 28px;
2418
+ height: 28px;
2419
+ border-radius: 999px;
2420
+ background: color-mix(in srgb, var(--flow) 14%, var(--paper));
2421
+ color: var(--ink);
2422
+ font: 600 11px/1 var(--sans);
2423
+ text-transform: uppercase;
2424
+ }
2425
+ .g-compose-avatar[data-size="sm"] { width: 22px; height: 22px; font-size: 10px; }
2426
+ .g-compose-avatar[data-size="lg"] { width: 36px; height: 36px; font-size: 13px; }
2427
+ .g-compose-image {
2428
+ display: block;
2429
+ max-width: 100%;
2430
+ height: auto;
2431
+ border-radius: 8px;
2432
+ }
2433
+ .g-compose-spacer[data-gap="1"] { height: 4px; }
2434
+ .g-compose-spacer[data-gap="2"] { height: 8px; }
2435
+ .g-compose-spacer[data-gap="3"] { height: 12px; }
2436
+ .g-compose-spacer[data-gap="4"] { height: 16px; }
2437
+ .g-compose-empty {
2438
+ padding: 16px;
2439
+ text-align: center;
2440
+ color: var(--muted);
2441
+ font: 400 13px/1.4 var(--sans);
2442
+ border: 1px dashed color-mix(in srgb, var(--rule) 70%, var(--paper));
2443
+ border-radius: 8px;
2444
+ }
2445
+ .g-compose-group,
2446
+ .g-compose-field,
2447
+ .g-compose-header,
2448
+ .g-compose-footer,
2449
+ .g-compose-figure,
2450
+ .g-compose-prose {
2451
+ display: flex;
2452
+ flex-direction: column;
2453
+ gap: var(--gc-gap, 8px);
2454
+ min-width: 0;
2455
+ width: 100%;
2456
+ }
2457
+ .g-compose-option {
2458
+ display: inline-flex;
2459
+ padding: 4px 10px;
2460
+ border-radius: 999px;
2461
+ border: 1px solid color-mix(in srgb, var(--rule) 70%, var(--paper));
2462
+ font: 400 12px/1.3 var(--sans);
2463
+ }
2464
+ .g-compose-option[data-selected="true"] {
2465
+ background: color-mix(in srgb, var(--flow) 12%, var(--paper));
2466
+ border-color: color-mix(in srgb, var(--flow) 35%, var(--rule));
2467
+ }
2468
+
2469
+ /* Timeline chips: empty day = no fill, just date + dash */
2470
+ .g-compose-card[data-frame="text"][data-size="sm"] {
2471
+ border-color: transparent;
2472
+ background: transparent;
2473
+ padding: 2px 2px;
2474
+ min-width: 2.1rem;
2475
+ max-width: 2.8rem;
2476
+ }
2477
+ .g-compose-card[data-size="sm"] > .g-compose-icon {
2478
+ width: 12px;
2479
+ height: 12px;
2480
+ }
2481
+
2482
+ @media (max-width: 800px) {
2483
+ .g-compose {
2484
+ padding: 14px 12px 12px;
2485
+ }
2486
+
2487
+ .g-compose-row:not([data-wrap="nowrap"]),
2488
+ .g-compose-compare,
2489
+ .g-compose-steps[data-dir="row"],
2490
+ .g-compose-grid {
2491
+ flex-direction: column;
2492
+ grid-template-columns: 1fr;
2493
+ }
2494
+
2495
+ .g-compose-row[data-wrap="nowrap"] {
2496
+ flex-direction: row;
2497
+ flex-wrap: nowrap;
2498
+ overflow-x: auto;
2499
+ -webkit-overflow-scrolling: touch;
2500
+ gap: 4px;
2501
+ }
2502
+ .g-compose-row[data-wrap="nowrap"] > .g-compose-card,
2503
+ .g-compose-row[data-wrap="nowrap"] > .g-compose-card[data-size="sm"] {
2504
+ flex: 1 1 0;
2505
+ width: auto;
2506
+ min-width: 2.2rem;
2507
+ }
2508
+ .g-compose-row[data-wrap="nowrap"][data-justify="between"] > .g-compose-text,
2509
+ .g-compose-row[data-wrap="nowrap"][data-justify="between"] > .g-compose-caption-inline,
2510
+ .g-compose-row[data-wrap="nowrap"][data-justify="around"] > .g-compose-text,
2511
+ .g-compose-row[data-wrap="nowrap"][data-justify="around"] > .g-compose-caption-inline {
2512
+ flex: 0 0 auto;
2513
+ min-width: 0;
2514
+ }
2515
+
2516
+ .g-compose-grid-item[data-span="2"],
2517
+ .g-compose-grid-item[data-span="3"],
2518
+ .g-compose-grid-item[data-span="4"] {
2519
+ grid-column: auto;
2520
+ }
2521
+
2522
+ .g-compose-row:not([data-wrap="nowrap"]) > .g-compose-card,
2523
+ .g-compose-row:not([data-wrap="nowrap"]) > .g-compose-disclosure,
2524
+ .g-compose-row:not([data-wrap="nowrap"]) > .g-compose-stack,
2525
+ .g-compose-row:not([data-wrap="nowrap"]) > .g-compose-h,
2526
+ .g-compose-row:not([data-wrap="nowrap"]) > .g-compose-text,
2527
+ .g-compose-steps[data-dir="row"] > .g-compose-step,
2528
+ .g-compose-steps[data-dir="row"] > .g-compose-disclosure {
2529
+ flex: none;
2530
+ width: 100%;
2531
+ min-width: 0;
2532
+ }
2533
+
2534
+ .g-compose-arrow[data-dir="right"] {
2535
+ transform: none;
2536
+ }
2537
+
2538
+ .g-compose-fan .g-compose-arrow ~ .g-compose-arrow {
2539
+ display: none;
2540
+ }
2541
+
2542
+ .g-compose-join-svg {
2543
+ display: none;
2544
+ }
2545
+
2546
+ .g-compose-join {
2547
+ min-height: 0;
2548
+ }
2549
+
2550
+ .g-compose-join-label {
2551
+ position: static;
2552
+ top: auto;
2553
+ width: auto;
2554
+ max-width: none;
2555
+ margin: 0;
2556
+ white-space: normal;
2557
+ }
2558
+
2559
+ .g-compose-lane-label {
2560
+ white-space: normal;
2561
+ margin-left: 0;
2562
+ max-width: none;
2563
+ }
2564
+
2565
+ .g-compose-lanes-head,
2566
+ .g-compose-lane-row {
2567
+ display: flex;
2568
+ flex-direction: column;
2569
+ }
2570
+
2571
+ .g-compose-lane-life,
2572
+ .g-compose-lane-shaft {
2573
+ display: none;
2574
+ }
2575
+
2576
+ .g-compose-lane-msg {
2577
+ display: block;
2578
+ }
2579
+
2580
+ .g-compose-lane-route {
2581
+ display: block;
2582
+ margin-bottom: 2px;
2583
+ color: var(--muted);
2584
+ font-size: 13px;
2585
+ text-align: center;
2586
+ }
2587
+
2588
+ .g-compose-lane-pill {
2589
+ width: 100%;
2590
+ margin: 0 0 8px;
2591
+ box-sizing: border-box;
2592
+ }
2593
+
2594
+ .g-compose-pair {
2595
+ grid-template-columns: 1fr;
2596
+ }
2597
+ }
2598
+
2599
+ /* Explicit author text color inherits through component typography; nested colors override the variable. */
2600
+ .g-compose [data-custom-color], .g-compose [data-custom-color] *,
2601
+ .garden-ui-color-scope[data-custom-color], .garden-ui-color-scope[data-custom-color] * { color: var(--compose-color); }
2602
+ .garden-ui-color-scope { display: contents; }
2603
+ .garden-ui-color-scope[data-custom-background] > * { background-color: var(--compose-background); }
2604
+
2605
+ /* Scene framing is independent of card/box frames. Keep normal document flow. */
2606
+ .g-compose[data-frame="none"] {
2607
+ border: 0;
2608
+ border-radius: 0;
2609
+ background: transparent;
2610
+ padding: 0;
2611
+ box-shadow: none;
2612
+ }
2613
+
2614
+ /* Article content islands keep real block structure within the surrounding layout. */
2615
+ .g-compose-content { min-width: 0; max-width: 100%; font: inherit; overflow-wrap: break-word; }
2616
+ .g-compose .g-compose-content p { margin: 0 0 1em; font: inherit; }
2617
+ .g-compose-content > :first-child { margin-top: 0; }
2618
+ .g-compose-content > :last-child { margin-bottom: 0; }
2619
+ .g-compose-content pre, .g-compose-content table { max-width: 100%; overflow-x: auto; }
2620
+ .g-compose-content img { max-width: 100%; height: auto; }
2621
+
2622
+ /* Native semantic scenes share the surrounding article's body typography.
2623
+ Graph labels, metric values, captions and controls retain semantic sizing. */
2624
+ .markdown-body .g-compose :is(.g-choice-x, .g-tl-x, .g-stat-t, .g-cmp p, .g-verdict p, .g-entity-list p),
2625
+ .markdown-body .g-compose .g-entity-b > p:not(.g-entity-m) {
2626
+ font-size: inherit;
2627
+ font-family: inherit;
2628
+ }
2629
+ .markdown-body .g-compose :is(.g-choice-h, .g-choice-v, .g-choice-l, .g-list-h, .g-rel-t, .g-rel-x, .g-rel-detail-t, .g-rel-detail-x, .g-tl-t, .g-entity-t, .g-entity-lt, .g-entity-m, .g-stat-l, .g-stat-n, .g-stat-c, .g-verdict h4, .g-cmp h4) {
2630
+ font-family: inherit;
2631
+ }
2632
+
2633
+ /* A2 tokens. One source for the site, the article, and every component. */
2634
+
2635
+ .garden-ui-preview,
2636
+ .garden-ui-preview[data-theme="light"] {
2637
+ --paper: #faf9f5;
2638
+ --paper-deep: #f0eee6;
2639
+ --card: #ffffff;
2640
+ --ink: #1b1a18;
2641
+ --ink-soft: #2d2c29;
2642
+ --text: #2d2c29;
2643
+ --soft: #4a4844;
2644
+ --muted: #6e6b64;
2645
+ --grey: #737069;
2646
+ --faint: #737069;
2647
+ --rule: #e6e3dc;
2648
+ --rule-strong: #d6d2c9;
2649
+ --line: #e6e3dc;
2650
+ --line-strong: #d6d2c9;
2651
+ --well: #f0eee6;
2652
+ --tint: rgb(27 26 24 / 5.5%);
2653
+ /* "blue" is the accent slot; the accent is now ink, there is no blue. */
2654
+ --blue: #30302e;
2655
+ --blue-tint: #f0eee6;
2656
+ --blue-line: rgb(20 20 19 / 22%);
2657
+ --cover: #c2c0b6;
2658
+ --chip: #f0eee6;
2659
+ --chip-hover: #e8e5db;
2660
+ --chip-on: #30302e;
2661
+ --chip-on-text: #faf9f5;
2662
+ --card-hover: #f5f4ed;
2663
+ --card-shadow: 0 1px 2px rgb(20 20 19 / 4%), 0 4px 14px rgb(20 20 19 / 5%);
2664
+ --accent: var(--blue);
2665
+ --accent-soft: var(--blue-tint);
2666
+ --selection: #e8e5db;
2667
+ --hl: #ffe58f;
2668
+ /* Two lane-arrow emphases. Same hues as the note and tip callouts, not a second palette. */
2669
+ --flow: #2c55b4;
2670
+ --flow-back: #2d6a3e;
2671
+ --red: #d82d48;
2672
+ --red-text: #c2263f;
2673
+ --red-tint: #fbeef0;
2674
+ --sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Noto Sans SC", "Noto Sans CJK SC", "Microsoft YaHei", "Segoe UI", system-ui, sans-serif;
2675
+ --serif: "Source Han Serif SC", "Noto Serif SC", "Noto Serif CJK SC", "Songti SC", "STSong", "Source Serif 4", Georgia, serif;
2676
+ --mono: "JetBrains Mono", "SF Mono", ui-monospace, Menlo, Consolas, "Noto Sans Mono CJK SC", monospace;
2677
+ --font-mono: var(--mono);
2678
+ --fs-display: 46px;
2679
+ --fs-hero: 52px;
2680
+ --fs-h2: 26px;
2681
+ --fs-lead: 20px;
2682
+ --fs-small: 14px;
2683
+ --fs-meta: 13px;
2684
+ --r: 12px;
2685
+ --r-lg: 24px;
2686
+ --col: 740px;
2687
+ --rail: 232px;
2688
+ --gap: 48px;
2689
+ --content: var(--col);
2690
+ --wide: 1200px;
2691
+ --shell: 1200px;
2692
+ --hdr: 64px;
2693
+ color-scheme: light;
2694
+ }
2695
+
2696
+ .garden-ui-preview[data-theme="dark"],
2697
+ html[data-theme="dark"] {
2698
+ /* Light backing under article images and link icons, so dark-on-transparent
2699
+ artwork stays legible. */
2700
+ --image-backing: #faf9f5;
2701
+ --paper: #1f1e1d;
2702
+ --paper-deep: #262624;
2703
+ --card: #262624;
2704
+ --ink: #eeece7;
2705
+ --ink-soft: #dcd9d2;
2706
+ --text: #dcd9d2;
2707
+ --soft: #bdb9b0;
2708
+ --muted: #a09b91;
2709
+ --grey: #a09b91;
2710
+ --faint: #a09b91;
2711
+ --rule: #3d3d3a;
2712
+ --rule-strong: #4d4c48;
2713
+ --line: #3d3d3a;
2714
+ --line-strong: #4d4c48;
2715
+ --well: #262624;
2716
+ --tint: rgb(238 236 231 / 7%);
2717
+ --blue: #eeece7;
2718
+ --blue-tint: #30302e;
2719
+ --blue-line: rgb(238 236 231 / 25%);
2720
+ --cover: #4d4c48;
2721
+ --chip: #30302e;
2722
+ --chip-hover: #3d3d3a;
2723
+ --chip-on: #eeece7;
2724
+ --chip-on-text: #1f1e1d;
2725
+ --card-hover: #30302e;
2726
+ --card-shadow: 0 1px 2px rgb(0 0 0 / 18%);
2727
+ --accent: var(--blue);
2728
+ --accent-soft: var(--blue-tint);
2729
+ --selection: rgb(238 236 231 / 18%);
2730
+ --hl: #5e4e17;
2731
+ --flow: #93b2f4;
2732
+ --flow-back: #8fcb9f;
2733
+ --red: #f29aab;
2734
+ --red-text: #f29aab;
2735
+ --red-tint: rgb(242 154 171 / 12%);
2736
+ color-scheme: dark;
2737
+ }
2738
+
2739
+ @media (min-width: 1400px) {
2740
+ .garden-ui-preview,
2741
+ .garden-ui-preview[data-theme="light"],
2742
+ .garden-ui-preview[data-theme="dark"],
2743
+ html[data-theme="dark"] { --fs-hero: 56px; }
2744
+ }
2745
+
2746
+ @media (max-width: 1239px) {
2747
+ .garden-ui-preview,
2748
+ .garden-ui-preview[data-theme="light"],
2749
+ .garden-ui-preview[data-theme="dark"],
2750
+ html[data-theme="dark"] { --fs-hero: 44px; }
2751
+ }
2752
+
2753
+ @media (max-width: 640px) {
2754
+ .garden-ui-preview,
2755
+ .garden-ui-preview[data-theme="light"],
2756
+ .garden-ui-preview[data-theme="dark"],
2757
+ html[data-theme="dark"] {
2758
+ --fs-hero: 30px;
2759
+ --fs-h2: 23px;
2760
+ --fs-lead: 18px;
2761
+ }
2762
+ }
2763
+
2764
+ /* A2 article, shell and component chrome. Loaded after globals.css so these win. */
2765
+
2766
+ .garden-ui-preview body {
2767
+ background: var(--paper);
2768
+ color: var(--text);
2769
+ font: 400 var(--fs-body) / 1.75 var(--sans);
2770
+ font-kerning: normal;
2771
+ }
2772
+
2773
+ .garden-ui-preview .site-header {
2774
+ position: sticky;
2775
+ top: 0;
2776
+ background: var(--paper);
2777
+ border-bottom: 1px solid transparent;
2778
+ }
2779
+
2780
+ .garden-ui-preview .header-inner {
2781
+ width: min(var(--shell), calc(100% - 64px));
2782
+ min-height: var(--hdr);
2783
+ height: var(--hdr);
2784
+ gap: 28px;
2785
+ }
2786
+
2787
+ .garden-ui-preview .brand {
2788
+ gap: 0;
2789
+ font: 600 var(--fs-lead) / 1 var(--serif);
2790
+ color: var(--ink);
2791
+ }
2792
+
2793
+ .garden-ui-preview .brand small {
2794
+ display: none;
2795
+ }
2796
+
2797
+ .garden-ui-preview .brand strong {
2798
+ font: 600 var(--fs-lead) / 1 var(--serif);
2799
+ letter-spacing: 0;
2800
+ color: var(--ink);
2801
+ }
2802
+
2803
+ .garden-ui-preview .main-nav {
2804
+ margin-left: auto;
2805
+ gap: 4px;
2806
+ }
2807
+
2808
+ .garden-ui-preview .main-nav a {
2809
+ color: var(--soft);
2810
+ font-size: 15px;
2811
+ font-weight: 400;
2812
+ padding: 8px 12px;
2813
+ border-radius: var(--r);
2814
+ }
2815
+
2816
+ .garden-ui-preview .main-nav a + a::before {
2817
+ content: none;
2818
+ }
2819
+
2820
+ .garden-ui-preview .main-nav a:hover,
2821
+ .garden-ui-preview .main-nav a:focus-visible {
2822
+ color: var(--ink);
2823
+ background: var(--tint);
2824
+ text-decoration: none;
2825
+ }
2826
+
2827
+ .garden-ui-preview .icon-button,
2828
+ .garden-ui-preview .column-feature,
2829
+ .garden-ui-preview .archive-card,
2830
+ .garden-ui-preview .thought-card,
2831
+ .garden-ui-preview .markdown-body pre,
2832
+ .garden-ui-preview .markdown-body blockquote,
2833
+ .garden-ui-preview .toc,
2834
+ .garden-ui-preview .g-stat,
2835
+ .garden-ui-preview .g-cmp,
2836
+ .garden-ui-preview .g-card,
2837
+ .garden-ui-preview .g-timeline,
2838
+ .garden-ui-preview .g-sandbox,
2839
+ .garden-ui-preview .g-html {
2840
+ box-shadow: none;
2841
+ }
2842
+
2843
+ .garden-ui-preview .page-shell,
2844
+ .garden-ui-preview .index-page,
2845
+ .garden-ui-preview .reading-page {
2846
+ font-family: var(--sans);
2847
+ }
2848
+
2849
+ .garden-ui-preview .page-intro h1,
2850
+ .garden-ui-preview .sh-head h1 {
2851
+ font: 700 var(--fs-display) / 1.2 var(--sans);
2852
+ color: var(--ink);
2853
+ letter-spacing: 0;
2854
+ }
2855
+
2856
+ /* ----- article ----- */
2857
+
2858
+ .garden-ui-preview .post-reading-page,
2859
+ .garden-ui-preview .column-reading-page {
2860
+ padding-top: 0;
2861
+ }
2862
+
2863
+ .garden-ui-preview .column-reading-page {
2864
+ width: min(1340px, calc(100% - 64px));
2865
+ }
2866
+
2867
+ .garden-ui-preview .post-reading-page {
2868
+ /* rail + gap + 740px column + gap + rail, plus side padding */
2869
+ width: min(1360px, 100%);
2870
+ padding-right: 32px;
2871
+ padding-left: 32px;
2872
+ }
2873
+
2874
+ .garden-ui-preview .post-reading-page .article-summary-row.hero,
2875
+ .garden-ui-preview .column-reading-page .article-header.hero {
2876
+ display: flex;
2877
+ flex-direction: column;
2878
+ align-items: stretch;
2879
+ width: 100%;
2880
+ max-width: none;
2881
+ margin: 0;
2882
+ padding: 56px 0 0;
2883
+ border-bottom: 0;
2884
+ text-align: center;
2885
+ }
2886
+
2887
+ .garden-ui-preview .hero h1,
2888
+ .garden-ui-preview .article-header h1 {
2889
+ font: 700 var(--fs-hero) / 1.22 var(--sans);
2890
+ color: var(--ink);
2891
+ letter-spacing: 0;
2892
+ width: 100%;
2893
+ max-width: 1200px;
2894
+ margin: 0 auto;
2895
+ text-wrap: balance;
2896
+ /* Titles wrap; an English word only breaks if it alone cannot fit. */
2897
+ overflow-wrap: break-word;
2898
+ }
2899
+
2900
+ @media (min-width: 1240px) {
2901
+ .garden-ui-preview .hero h1:not(.h1-br),
2902
+ .garden-ui-preview .article-header h1:not(.h1-br) {
2903
+ max-width: none;
2904
+ }
2905
+ }
2906
+
2907
+ .garden-ui-preview .hero h1.h1-br {
2908
+ white-space: normal;
2909
+ max-width: 1040px;
2910
+ }
2911
+
2912
+ .garden-ui-preview .h1-line {
2913
+ display: block;
2914
+ text-wrap: balance;
2915
+ overflow-wrap: break-word;
2916
+ }
2917
+
2918
+ .garden-ui-preview .vh {
2919
+ position: absolute !important;
2920
+ width: 1px;
2921
+ height: 1px;
2922
+ overflow: hidden;
2923
+ clip: rect(0 0 0 0);
2924
+ white-space: nowrap;
2925
+ }
2926
+
2927
+ @media (min-width: 768px) {
2928
+ .garden-ui-preview .hero h1.h1-br {
2929
+ max-width: none;
2930
+ font-size: min(var(--fs-hero), calc(min(100vw - 80px, 1276px) / var(--l)));
2931
+ }
2932
+ }
2933
+
2934
+ .garden-ui-preview .article-meta,
2935
+ .garden-ui-preview .hero .meta {
2936
+ justify-content: center;
2937
+ margin-top: 20px;
2938
+ gap: 6px 24px;
2939
+ font-size: var(--fs-small);
2940
+ line-height: 1.5;
2941
+ color: var(--muted);
2942
+ }
2943
+
2944
+ .garden-ui-preview .hero .meta a.orig {
2945
+ color: var(--blue);
2946
+ text-decoration: none;
2947
+ border-bottom: 1px solid var(--blue-line);
2948
+ font-size: var(--fs-meta);
2949
+ }
2950
+
2951
+ .garden-ui-preview .article-tagrow {
2952
+ display: flex;
2953
+ flex-wrap: wrap;
2954
+ justify-content: center;
2955
+ gap: 8px;
2956
+ margin: 14px 0 0;
2957
+ padding: 0;
2958
+ list-style: none;
2959
+ }
2960
+
2961
+ .garden-ui-preview .article-tagrow li {
2962
+ margin: 0;
2963
+ padding: 0;
2964
+ }
2965
+
2966
+ .garden-ui-preview .article-tagrow .tag-chip {
2967
+ position: relative;
2968
+ display: inline-block;
2969
+ padding: 2px 10px;
2970
+ border-radius: 999px;
2971
+ background: var(--chip);
2972
+ color: var(--soft);
2973
+ font-size: var(--fs-meta);
2974
+ line-height: 1.6;
2975
+ text-decoration: none;
2976
+ white-space: nowrap;
2977
+ }
2978
+
2979
+ /* 44px tall hit area without enlarging the chip */
2980
+ .garden-ui-preview .article-tagrow .tag-chip::after {
2981
+ content: "";
2982
+ position: absolute;
2983
+ left: 0;
2984
+ right: 0;
2985
+ top: 50%;
2986
+ height: 44px;
2987
+ transform: translateY(-50%);
2988
+ }
2989
+
2990
+ .garden-ui-preview .article-tagrow .tag-chip:hover {
2991
+ background: var(--chip-hover);
2992
+ color: var(--ink);
2993
+ }
2994
+
2995
+ .garden-ui-preview .article-tagrow .tag-chip:focus-visible {
2996
+ outline: 2px solid var(--blue);
2997
+ outline-offset: 2px;
2998
+ }
2999
+
3000
+ .garden-ui-preview .cover-card.cover-img,
3001
+ .garden-ui-preview .article-hero.article-cover {
3002
+ width: 100%;
3003
+ /* Column plus half a gutter each side: centred, and clear of the TOC rail. */
3004
+ max-width: calc(var(--col) + 72px);
3005
+ margin: 48px auto 0;
3006
+ aspect-ratio: auto;
3007
+ background: none;
3008
+ padding: 0;
3009
+ display: block;
3010
+ overflow: hidden;
3011
+ border-radius: var(--r-lg);
3012
+ box-shadow: none;
3013
+ }
3014
+
3015
+ .garden-ui-preview .cover-img img,
3016
+ .garden-ui-preview .article-hero img {
3017
+ display: block;
3018
+ width: 100%;
3019
+ height: auto;
3020
+ max-height: 70vh;
3021
+ object-fit: contain;
3022
+ border-radius: inherit;
3023
+ }
3024
+
3025
+ .garden-ui-preview .column-feature-cover,
3026
+ .garden-ui-preview .archive-cover {
3027
+ display: block;
3028
+ width: auto;
3029
+ max-width: 100%;
3030
+ height: auto;
3031
+ max-height: 70vh;
3032
+ object-fit: contain;
3033
+ border-radius: inherit;
3034
+ }
3035
+
3036
+ .garden-ui-preview .post-reading-page .article-reading-layout {
3037
+ --rail: 200px;
3038
+ --gap: 72px;
3039
+ display: grid;
3040
+ grid-template-columns: minmax(0, var(--rail)) minmax(0, var(--col)) var(--rail);
3041
+ column-gap: var(--gap);
3042
+ justify-content: center;
3043
+ align-items: start;
3044
+ margin-top: 64px;
3045
+ }
3046
+
3047
+ .garden-ui-preview .post-reading-page .article-reading-column {
3048
+ grid-column: 2;
3049
+ grid-row: 1;
3050
+ min-width: 0;
3051
+ max-width: var(--col);
3052
+ }
3053
+
3054
+ /* The compare post puts two wide diagrams side by side. */
3055
+ @media (min-width: 1260px) {
3056
+ .garden-ui-preview .post-reading-page:has(.g-compose-pair) .article-reading-layout {
3057
+ grid-template-columns: 24px minmax(0, 1fr) var(--rail);
3058
+ }
3059
+
3060
+ .garden-ui-preview .post-reading-page:has(.g-compose-pair) .article-reading-column {
3061
+ max-width: none;
3062
+ }
3063
+ }
3064
+
3065
+ .garden-ui-preview .post-reading-page .article-reading-layout > .toc {
3066
+ grid-column: 3;
3067
+ grid-row: 1;
3068
+ margin-top: 0;
3069
+ border-left: 0;
3070
+ padding: 4px 0 24px;
3071
+ color: var(--grey);
3072
+ }
3073
+
3074
+ .garden-ui-preview .lead {
3075
+ font-size: var(--fs-lead);
3076
+ line-height: 1.65;
3077
+ color: var(--soft);
3078
+ margin: 0 0 36px;
3079
+ }
3080
+
3081
+ .garden-ui-preview .post-reading-page .e-content,
3082
+ .garden-ui-preview .column-reading-page .e-content {
3083
+ --qa-bar: #e8e6dc;
3084
+ --qa-text: #737069;
3085
+ }
3086
+
3087
+ .garden-ui-preview :root[data-theme="dark"] .post-reading-page .e-content,
3088
+ .garden-ui-preview :root[data-theme="dark"] .column-reading-page .e-content,
3089
+ .garden-ui-preview html[data-theme="dark"] .post-reading-page .e-content,
3090
+ .garden-ui-preview html[data-theme="dark"] .column-reading-page .e-content {
3091
+ --qa-bar: #3a3833;
3092
+ --qa-text: #a39e94;
3093
+ }
3094
+
3095
+ .garden-ui-preview .lead.quote-plain {
3096
+ margin: 0 0 32px;
3097
+ padding: 2px 0 2px 24px;
3098
+ border-left: 3px solid var(--qa-bar, #e8e6dc);
3099
+ border-radius: 0;
3100
+ background: none;
3101
+ color: var(--qa-text, #737069);
3102
+ font-size: var(--fs-body);
3103
+ line-height: 1.75;
3104
+ }
3105
+
3106
+ .garden-ui-preview .markdown-body.prose {
3107
+ font: 400 var(--fs-body) / 1.75 var(--sans);
3108
+ color: var(--text);
3109
+ }
3110
+
3111
+ .garden-ui-preview .markdown-body h2 {
3112
+ font: 700 var(--fs-h2) / 1.4 var(--sans);
3113
+ color: var(--ink);
3114
+ letter-spacing: 0;
3115
+ margin: 64px 0 20px;
3116
+ }
3117
+
3118
+ .garden-ui-preview .markdown-body h2::before {
3119
+ content: none;
3120
+ }
3121
+
3122
+ .garden-ui-preview .markdown-body h3 {
3123
+ font: 600 var(--fs-lead) / 1.5 var(--sans);
3124
+ color: var(--ink);
3125
+ letter-spacing: 0;
3126
+ margin: 44px 0 12px;
3127
+ }
3128
+
3129
+ .garden-ui-preview .markdown-body h2 + h3 {
3130
+ margin-top: 28px;
3131
+ }
3132
+
3133
+ /* H4 sits below H3: same sans family, smaller size, still bold. */
3134
+ .garden-ui-preview .markdown-body h4 {
3135
+ font: 600 var(--fs-body) / 1.55 var(--sans);
3136
+ color: var(--ink);
3137
+ letter-spacing: 0;
3138
+ margin: 28px 0 10px;
3139
+ }
3140
+
3141
+ .garden-ui-preview .markdown-body h3 + h4 {
3142
+ margin-top: 18px;
3143
+ }
3144
+
3145
+ .garden-ui-preview .sec-no {
3146
+ color: var(--blue);
3147
+ font-variant-numeric: tabular-nums;
3148
+ margin-right: 0.45em;
3149
+ }
3150
+
3151
+ .garden-ui-preview .markdown-body p {
3152
+ margin: 0 0 22px;
3153
+ }
3154
+
3155
+ .garden-ui-preview .markdown-body > :is(ul, ol) + p {
3156
+ margin-top: 22px;
3157
+ }
3158
+
3159
+ .garden-ui-preview .markdown-body strong {
3160
+ font-weight: 600;
3161
+ color: var(--ink);
3162
+ }
3163
+
3164
+ .garden-ui-preview .markdown-body a {
3165
+ text-decoration: underline;
3166
+ text-decoration-thickness: 1px;
3167
+ text-underline-offset: 4px;
3168
+ text-decoration-color: color-mix(in srgb, var(--ink) 35%, transparent);
3169
+ transition: text-decoration-color 0.15s ease;
3170
+ }
3171
+
3172
+ .garden-ui-preview .markdown-body a:hover {
3173
+ text-decoration-color: var(--ink);
3174
+ text-decoration-thickness: 2px;
3175
+ }
3176
+
3177
+ /* A heading's own anchor link reads as the heading: no underline in any
3178
+ state. Links inside the heading (a.ext) keep their own underline. */
3179
+ .garden-ui-preview .markdown-body .h-anchor,
3180
+ .garden-ui-preview .markdown-body .h-anchor:hover,
3181
+ .garden-ui-preview .markdown-body .h-anchor:active {
3182
+ color: inherit;
3183
+ text-decoration: none;
3184
+ }
3185
+
3186
+ /* Keyboard focus rings the heading, not the anchor, so a heading split
3187
+ around a link shows one ring. */
3188
+ .garden-ui-preview .markdown-body .h-anchor:focus-visible {
3189
+ outline: none;
3190
+ }
3191
+
3192
+ .garden-ui-preview .markdown-body :is(h2, h3, h4):has(.h-anchor:focus-visible) {
3193
+ outline: 2px solid var(--blue);
3194
+ outline-offset: 2px;
3195
+ border-radius: 2px;
3196
+ }
3197
+
3198
+ /* A heading with a link in it has one self-link (its first stretch of text),
3199
+ stretched over the whole heading; the link inside sits above it. */
3200
+ .garden-ui-preview .markdown-body .h-split {
3201
+ position: relative;
3202
+ }
3203
+
3204
+ .garden-ui-preview .markdown-body .h-split .h-anchor::after {
3205
+ content: "";
3206
+ position: absolute;
3207
+ inset: 0;
3208
+ }
3209
+
3210
+ .garden-ui-preview .markdown-body .h-split a:not(.h-anchor) {
3211
+ position: relative;
3212
+ z-index: 1;
3213
+ }
3214
+
3215
+ .garden-ui-preview .markdown-body a.ext {
3216
+ text-decoration-style: dotted;
3217
+ text-decoration-thickness: 1.5px;
3218
+ text-decoration-color: rgb(27 26 24 / 45%);
3219
+ padding-right: 0.8em;
3220
+ 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;
3221
+ }
3222
+
3223
+ .garden-ui-preview html[data-theme="dark"] .markdown-body a.ext {
3224
+ text-decoration-color: rgb(238 236 231 / 45%);
3225
+ }
3226
+
3227
+ .garden-ui-preview .markdown-body a.ext:hover {
3228
+ text-decoration-style: solid;
3229
+ text-decoration-color: var(--ink);
3230
+ text-decoration-thickness: 2px;
3231
+ }
3232
+
3233
+ /* Site favicon before an external link, downloaded at build time. */
3234
+ .garden-ui-preview .markdown-body a.ext img.fav {
3235
+ display: inline-block;
3236
+ width: 14px;
3237
+ height: 14px;
3238
+ margin: 0 5px 0 0;
3239
+ border-radius: 3px;
3240
+ vertical-align: -2px;
3241
+ object-fit: contain;
3242
+ }
3243
+
3244
+ /* Only the icon and the first word stay together; the rest of a long link,
3245
+ a bare URL included, wraps when the line runs out. */
3246
+ .garden-ui-preview .markdown-body a.ext {
3247
+ overflow-wrap: break-word;
3248
+ }
3249
+
3250
+ .garden-ui-preview .markdown-body a.ext .fav-keep {
3251
+ white-space: nowrap;
3252
+ }
3253
+
3254
+ /* Many icons are black on transparent; give them a light backing in dark mode. */
3255
+ .garden-ui-preview html[data-theme="dark"] .markdown-body img.fav {
3256
+ padding: 1px;
3257
+ box-sizing: border-box;
3258
+ background: var(--image-backing);
3259
+ }
3260
+
3261
+ .garden-ui-preview .markdown-body .table-wrap a.ext img.fav,
3262
+ .garden-ui-preview .markdown-body h2 a.ext img.fav,
3263
+ .garden-ui-preview .markdown-body h3 a.ext img.fav {
3264
+ display: none;
3265
+ }
3266
+
3267
+ .garden-ui-preview .markdown-body :not(pre) > code {
3268
+ font: 400 var(--fs-small) / 1 var(--mono);
3269
+ color: var(--ink);
3270
+ background: var(--tint);
3271
+ padding: 3px 6px;
3272
+ border-radius: 5px;
3273
+ }
3274
+
3275
+ .garden-ui-preview .markdown-body pre.code,
3276
+ .garden-ui-preview .prose pre.code {
3277
+ margin: 28px 0;
3278
+ padding: 18px 22px;
3279
+ background: var(--well);
3280
+ border-radius: 8px;
3281
+ border: 0;
3282
+ box-shadow: none;
3283
+ overflow-x: auto;
3284
+ }
3285
+
3286
+ .garden-ui-preview .markdown-body pre.code code,
3287
+ .garden-ui-preview .prose pre.code code {
3288
+ display: block;
3289
+ background: none;
3290
+ padding: 0;
3291
+ font-size: var(--fs-small);
3292
+ line-height: 1.6;
3293
+ color: var(--ink);
3294
+ }
3295
+
3296
+ .garden-ui-preview .markdown-body.prose {
3297
+ --al-note: #2c55b4;
3298
+ --al-note-bg: #eef3fc;
3299
+ --al-note-line: rgba(44, 85, 180, 0.22);
3300
+ --al-tip: #2d6a3e;
3301
+ --al-tip-bg: #edf5ef;
3302
+ --al-tip-line: rgba(45, 106, 62, 0.22);
3303
+ --al-important: #6a3fb5;
3304
+ --al-important-bg: #f3effa;
3305
+ --al-important-line: rgba(106, 63, 181, 0.22);
3306
+ --al-warning: #8a5300;
3307
+ --al-warning-bg: #fbf3e5;
3308
+ --al-warning-line: rgba(176, 108, 0, 0.26);
3309
+ --al-caution: #b4213a;
3310
+ --al-caution-bg: #fbeef0;
3311
+ --al-caution-line: rgba(216, 45, 72, 0.28);
3312
+ }
3313
+
3314
+ .garden-ui-preview :root[data-theme="dark"] .markdown-body.prose,
3315
+ .garden-ui-preview :root[data-theme="dark"] .prose,
3316
+ .garden-ui-preview html[data-theme="dark"] .markdown-body.prose,
3317
+ .garden-ui-preview html[data-theme="dark"] .prose {
3318
+ --al-note: #93b2f4;
3319
+ --al-note-bg: rgba(147, 178, 244, 0.09);
3320
+ --al-note-line: rgba(147, 178, 244, 0.28);
3321
+ --al-tip: #8fcb9f;
3322
+ --al-tip-bg: rgba(143, 203, 159, 0.08);
3323
+ --al-tip-line: rgba(143, 203, 159, 0.26);
3324
+ --al-important: #bfa5f0;
3325
+ --al-important-bg: rgba(191, 165, 240, 0.09);
3326
+ --al-important-line: rgba(191, 165, 240, 0.28);
3327
+ --al-warning: #e6b566;
3328
+ --al-warning-bg: rgba(230, 181, 102, 0.08);
3329
+ --al-warning-line: rgba(230, 181, 102, 0.28);
3330
+ --al-caution: #f2909f;
3331
+ --al-caution-bg: rgba(242, 144, 159, 0.08);
3332
+ --al-caution-line: rgba(242, 144, 159, 0.28);
3333
+ }
3334
+
3335
+ .garden-ui-preview .markdown-body blockquote:not(.markdown-alert) {
3336
+ margin: 28px 0;
3337
+ padding: 16px 22px 18px;
3338
+ background: var(--well);
3339
+ border: 0;
3340
+ border-radius: var(--r);
3341
+ box-shadow: none;
3342
+ color: var(--ink);
3343
+ }
3344
+
3345
+ .garden-ui-preview .markdown-body .markdown-alert {
3346
+ --al: var(--al-note);
3347
+ --al-bg: var(--al-note-bg);
3348
+ --al-line: var(--al-note-line);
3349
+ margin: 28px 0;
3350
+ padding: 16px 20px 18px;
3351
+ border: 1px solid var(--al-line);
3352
+ border-radius: 12px;
3353
+ background: var(--al-bg);
3354
+ box-shadow: none;
3355
+ color: var(--text);
3356
+ font-size: inherit;
3357
+ line-height: inherit;
3358
+ }
3359
+
3360
+ .garden-ui-preview .markdown-body .markdown-alert-tip {
3361
+ --al: var(--al-tip);
3362
+ --al-bg: var(--al-tip-bg);
3363
+ --al-line: var(--al-tip-line);
3364
+ }
3365
+
3366
+ .garden-ui-preview .markdown-body .markdown-alert-important {
3367
+ --al: var(--al-important);
3368
+ --al-bg: var(--al-important-bg);
3369
+ --al-line: var(--al-important-line);
3370
+ }
3371
+
3372
+ .garden-ui-preview .markdown-body .markdown-alert-warning {
3373
+ --al: var(--al-warning);
3374
+ --al-bg: var(--al-warning-bg);
3375
+ --al-line: var(--al-warning-line);
3376
+ }
3377
+
3378
+ .garden-ui-preview .markdown-body .markdown-alert-caution {
3379
+ --al: var(--al-caution);
3380
+ --al-bg: var(--al-caution-bg);
3381
+ --al-line: var(--al-caution-line);
3382
+ }
3383
+
3384
+ .garden-ui-preview .markdown-body .markdown-alert .markdown-alert-title {
3385
+ display: flex;
3386
+ align-items: center;
3387
+ gap: 8px;
3388
+ margin: 0 0 6px;
3389
+ font-size: 14px;
3390
+ font-weight: 600;
3391
+ line-height: 1.5;
3392
+ color: var(--al);
3393
+ }
3394
+
3395
+ .garden-ui-preview .markdown-body .markdown-alert .markdown-alert-title svg {
3396
+ width: 16px;
3397
+ height: 16px;
3398
+ flex: none;
3399
+ fill: none;
3400
+ stroke: currentColor;
3401
+ stroke-width: 1.5;
3402
+ stroke-linecap: round;
3403
+ stroke-linejoin: round;
3404
+ }
3405
+
3406
+ .garden-ui-preview .markdown-body .markdown-alert > :last-child {
3407
+ margin-bottom: 0;
3408
+ }
3409
+
3410
+ .garden-ui-preview .markdown-body .markdown-alert p {
3411
+ margin: 0;
3412
+ }
3413
+
3414
+ .garden-ui-preview .markdown-body .markdown-alert p + p,
3415
+ .garden-ui-preview .markdown-body .markdown-alert p + ul,
3416
+ .garden-ui-preview .markdown-body .markdown-alert p + ol,
3417
+ .garden-ui-preview .markdown-body .markdown-alert ul + p,
3418
+ .garden-ui-preview .markdown-body .markdown-alert ol + p {
3419
+ margin-top: 10px;
3420
+ }
3421
+
3422
+ .garden-ui-preview .markdown-body .markdown-alert ul,
3423
+ .garden-ui-preview .markdown-body .markdown-alert ol {
3424
+ margin: 8px 0 0;
3425
+ padding-left: 1.4em;
3426
+ }
3427
+
3428
+ .garden-ui-preview .markdown-body .markdown-alert li {
3429
+ margin: 4px 0;
3430
+ }
3431
+
3432
+ .garden-ui-preview .markdown-body .markdown-alert strong {
3433
+ color: var(--ink);
3434
+ font-weight: 600;
3435
+ }
3436
+
3437
+ .garden-ui-preview .markdown-body .markdown-alert code {
3438
+ background: rgba(27, 26, 24, 0.06);
3439
+ }
3440
+
3441
+ .garden-ui-preview :root[data-theme="dark"] .markdown-body .markdown-alert code,
3442
+ .garden-ui-preview html[data-theme="dark"] .markdown-body .markdown-alert code {
3443
+ background: var(--tint);
3444
+ }
3445
+
3446
+ .garden-ui-preview .markdown-body .markdown-alert a {
3447
+ text-decoration-color: color-mix(in srgb, var(--al) 45%, transparent);
3448
+ }
3449
+
3450
+ .garden-ui-preview .markdown-body .markdown-alert a:hover {
3451
+ text-decoration-color: var(--al);
3452
+ }
3453
+
3454
+ @media (max-width: 640px) {
3455
+ .garden-ui-preview .markdown-body .markdown-alert {
3456
+ padding: 14px 16px 16px;
3457
+ }
3458
+ }
3459
+
3460
+ .garden-ui-preview .markdown-image-trigger {
3461
+ display: block;
3462
+ max-width: 100%;
3463
+ margin: 28px 0;
3464
+ padding: 0;
3465
+ border: 0;
3466
+ background: none;
3467
+ }
3468
+
3469
+ .garden-ui-preview .markdown-body img,
3470
+ .garden-ui-preview .markdown-image-trigger img {
3471
+ display: block;
3472
+ width: auto;
3473
+ max-width: 100%;
3474
+ height: auto;
3475
+ }
3476
+
3477
+ /* Dark mode: article images sit on the light paper colour, so a transparent
3478
+ image (black lines on nothing, like most SVG diagrams) stays legible and an
3479
+ opaque one looks the same. The backing is the image's own background, so it
3480
+ takes the image's own corner radius; no padding, no filters. Favicons, link
3481
+ card thumbnails, covers, avatars and the logo are not article images. */
3482
+ .garden-ui-preview html[data-theme="dark"] .markdown-image-trigger img,
3483
+ .garden-ui-preview html[data-theme="dark"] .markdown-image-lightbox-content img,
3484
+ .garden-ui-preview html[data-theme="dark"] .markdown-body > img,
3485
+ .garden-ui-preview html[data-theme="dark"] .markdown-body > p > img:not([class]) {
3486
+ background: var(--image-backing);
3487
+ }
3488
+
3489
+ .garden-ui-preview .markdown-body .fig {
3490
+ margin: 36px 0;
3491
+ }
3492
+
3493
+ .garden-ui-preview .markdown-body .fig-card {
3494
+ background: transparent;
3495
+ border: 1px solid var(--rule);
3496
+ border-radius: 16px;
3497
+ padding: 12px;
3498
+ }
3499
+
3500
+ .garden-ui-preview .markdown-body .fig-card .markdown-image-trigger {
3501
+ margin: 0;
3502
+ width: 100%;
3503
+ }
3504
+
3505
+ .garden-ui-preview .markdown-body .fig-card img {
3506
+ width: auto;
3507
+ max-width: 100%;
3508
+ margin: 0 auto;
3509
+ border-radius: 8px;
3510
+ }
3511
+
3512
+ .garden-ui-preview .markdown-body .fig-card > svg.excalidraw,
3513
+ .garden-ui-preview .markdown-body svg.excalidraw {
3514
+ display: block;
3515
+ width: auto;
3516
+ max-width: 100%;
3517
+ height: auto;
3518
+ margin: 0 auto;
3519
+ }
3520
+
3521
+ .garden-ui-preview .markdown-body svg.excalidraw text {
3522
+ user-select: text;
3523
+ }
3524
+
3525
+ .garden-ui-preview .markdown-body .fig figcaption {
3526
+ margin-top: 12px;
3527
+ font-size: var(--fs-small);
3528
+ line-height: 1.6;
3529
+ color: var(--muted);
3530
+ text-align: center;
3531
+ }
3532
+
3533
+ @media (max-width: 640px) {
3534
+ .garden-ui-preview .markdown-body .fig-card {
3535
+ padding: 8px;
3536
+ border-radius: 12px;
3537
+ }
3538
+
3539
+ .garden-ui-preview .markdown-body .fig-card img {
3540
+ border-radius: 6px;
3541
+ }
3542
+ }
3543
+
3544
+ .garden-ui-preview .table-wrap {
3545
+ margin: 32px 0;
3546
+ border: 1px solid var(--rule);
3547
+ border-radius: var(--r);
3548
+ overflow-x: auto;
3549
+ background: transparent;
3550
+ box-shadow: none;
3551
+ }
3552
+
3553
+ .garden-ui-preview .table-wrap table {
3554
+ margin: 0;
3555
+ border-collapse: collapse;
3556
+ width: 100%;
3557
+ font-size: var(--fs-small);
3558
+ line-height: 1.6;
3559
+ }
3560
+
3561
+ .garden-ui-preview .table-wrap th,
3562
+ .garden-ui-preview .table-wrap td {
3563
+ padding: 10px 14px;
3564
+ overflow-wrap: normal;
3565
+ word-break: normal;
3566
+ text-align: left;
3567
+ vertical-align: top;
3568
+ border-bottom: 1px solid var(--rule);
3569
+ }
3570
+
3571
+ .garden-ui-preview .table-wrap th {
3572
+ font-weight: 600;
3573
+ color: var(--ink);
3574
+ background: transparent;
3575
+ }
3576
+
3577
+ .garden-ui-preview .table-wrap td .markdown-image-trigger {
3578
+ margin: 0;
3579
+ }
3580
+
3581
+ .garden-ui-preview .table-wrap td .markdown-image-trigger img {
3582
+ width: 280px;
3583
+ max-width: 100%;
3584
+ height: auto;
3585
+ border-radius: 6px;
3586
+ }
3587
+
3588
+ @media (min-width: 900px) {
3589
+ .garden-ui-preview .ux-wide {
3590
+ margin-left: calc(-1 * var(--wl, 0px)) !important;
3591
+ margin-right: calc(-1 * var(--wr, 0px)) !important;
3592
+ max-width: none !important;
3593
+ width: auto !important;
3594
+ }
3595
+ }
3596
+
3597
+ /* A breakout decided at build time from the image's known size. It holds the
3598
+ figure at its final width before the image loads and before the script
3599
+ measures; the script then takes over (and removes .fig-wide). Only where the
3600
+ article column is a full 740px with room on both sides. */
3601
+ @media (min-width: 1348px) {
3602
+ .garden-ui-preview .post-reading-page .markdown-body .fig-wide {
3603
+ margin-left: calc(-1 * var(--wl, 0px));
3604
+ margin-right: calc(-1 * var(--wr, 0px));
3605
+ max-width: none;
3606
+ width: auto;
3607
+ }
3608
+ }
3609
+
3610
+ .garden-ui-preview .toc {
3611
+ font-size: var(--fs-small);
3612
+ line-height: 1.5;
3613
+ color: var(--grey);
3614
+ transition: transform 0.3s ease;
3615
+ }
3616
+
3617
+ .garden-ui-preview .toc a {
3618
+ color: var(--grey);
3619
+ }
3620
+
3621
+ .garden-ui-preview .toc .toc-item-row {
3622
+ position: relative;
3623
+ padding-left: 10px;
3624
+ }
3625
+
3626
+ .garden-ui-preview .toc a[aria-current="location"],
3627
+ .garden-ui-preview .toc li.active > .toc-item-row > a {
3628
+ color: var(--ink);
3629
+ font-weight: 600;
3630
+ }
3631
+
3632
+ /* The current section carries an ink bar, so it reads without colour. */
3633
+ .garden-ui-preview .toc li.active > .toc-item-row::before {
3634
+ content: "";
3635
+ position: absolute;
3636
+ left: 0;
3637
+ top: 0.2em;
3638
+ bottom: 0.2em;
3639
+ width: 2px;
3640
+ border-radius: 1px;
3641
+ background: var(--ink);
3642
+ }
3643
+
3644
+ @media (min-width: 1200px) {
3645
+ .garden-ui-preview html[data-toc-yield] .toc {
3646
+ transform: translateX(var(--tocshift, 0px));
3647
+ }
3648
+
3649
+ .garden-ui-preview html[data-toc-yield][data-toc-hide] .toc {
3650
+ visibility: hidden;
3651
+ transition: transform 0.3s ease, visibility 0s 0.3s;
3652
+ }
3653
+
3654
+ /* A hidden TOC slides just past the right edge; clip it there so it does not
3655
+ widen the page. clip (unlike hidden) keeps the sticky TOC working. Not tied
3656
+ to data-toc-yield: the attribute goes as the TOC starts sliding back, and
3657
+ the page would widen for that 0.3s. */
3658
+ .garden-ui-preview #main-content:has(.toc) {
3659
+ overflow-x: clip;
3660
+ }
3661
+ }
3662
+
3663
+ @media (prefers-reduced-motion: reduce) {
3664
+ .garden-ui-preview .toc,
3665
+ .garden-ui-preview .markdown-body a,
3666
+ .garden-ui-preview .h1-line,
3667
+ .garden-ui-preview .ux-btn {
3668
+ transition: none;
3669
+ }
3670
+ }
3671
+
3672
+ .garden-ui-preview .katex-display {
3673
+ margin: 28px 0;
3674
+ padding: 20px 24px;
3675
+ background: transparent;
3676
+ border: 1px solid var(--rule);
3677
+ border-radius: var(--r);
3678
+ overflow-x: auto;
3679
+ }
3680
+
3681
+ /* ----- components ----- */
3682
+
3683
+ .garden-ui-preview .g-card,
3684
+ .garden-ui-preview .g-stat,
3685
+ .garden-ui-preview .g-cmp,
3686
+ .garden-ui-preview .g-timeline,
3687
+ .garden-ui-preview .g-chart,
3688
+ .garden-ui-preview .g-html,
3689
+ .garden-ui-preview .g-idea,
3690
+ .garden-ui-preview .g-legacy,
3691
+ .garden-ui-preview .g-unknown {
3692
+ margin: 0 0 1.2em;
3693
+ box-shadow: none;
3694
+ }
3695
+
3696
+ .garden-ui-preview .g-sandbox,
3697
+ .garden-ui-preview .g-play,
3698
+ .garden-ui-preview .g-html {
3699
+ max-width: 100%;
3700
+ }
3701
+
3702
+ .garden-ui-preview .g-card,
3703
+ .garden-ui-preview .g-stat,
3704
+ .garden-ui-preview .g-cmp,
3705
+ .garden-ui-preview .g-timeline,
3706
+ .garden-ui-preview .g-html {
3707
+ border: 1px solid var(--rule);
3708
+ border-radius: var(--r);
3709
+ background: transparent;
3710
+ }
3711
+
3712
+ .garden-ui-preview .g-card,
3713
+ .garden-ui-preview .g-cmp,
3714
+ .garden-ui-preview .g-html {
3715
+ padding: 14px 16px;
3716
+ }
3717
+
3718
+ .garden-ui-preview .g-stats {
3719
+ display: grid;
3720
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
3721
+ gap: 12px;
3722
+ }
3723
+
3724
+ .garden-ui-preview .g-stat {
3725
+ padding: 14px 16px;
3726
+ background: transparent;
3727
+ }
3728
+
3729
+ .garden-ui-preview .g-stat-n {
3730
+ font: 700 32px / 1.1 var(--sans);
3731
+ color: var(--ink);
3732
+ font-variant-numeric: tabular-nums;
3733
+ }
3734
+
3735
+ .garden-ui-preview .g-stat-n small {
3736
+ font-size: 15px;
3737
+ font-weight: 600;
3738
+ margin-left: 4px;
3739
+ color: var(--soft);
3740
+ }
3741
+
3742
+ .garden-ui-preview .g-stat-l,
3743
+ .garden-ui-preview .g-stat-c {
3744
+ margin-top: 6px;
3745
+ font-size: 14px;
3746
+ line-height: 1.5;
3747
+ color: var(--muted);
3748
+ }
3749
+
3750
+ .garden-ui-preview .g-compare {
3751
+ display: grid;
3752
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
3753
+ gap: 12px;
3754
+ }
3755
+
3756
+ .garden-ui-preview .g-cmp h4 {
3757
+ margin: 0 0 8px;
3758
+ font: 600 16px / 1.4 var(--sans);
3759
+ color: var(--ink);
3760
+ }
3761
+
3762
+ /* Cards in one compare block are one group: only the grid gap sits between
3763
+ them, and the block keeps the space below it. */
3764
+ .garden-ui-preview .g-compare {
3765
+ margin: 0 0 1.2em;
3766
+ }
3767
+
3768
+ .garden-ui-preview .g-compare > .g-cmp {
3769
+ margin: 0;
3770
+ }
3771
+
3772
+ .garden-ui-preview .g-cmp > :last-child {
3773
+ margin-bottom: 0;
3774
+ }
3775
+
3776
+ /* One-line cell 「X:Y」: X sits on its own line like a title, colon kept.
3777
+ .g-cmp-t holds the title only; the colon and its spaces are .g-cmp-sep. */
3778
+ .garden-ui-preview .g-cmp .g-cmp-h {
3779
+ display: block;
3780
+ margin: 0 0 8px;
3781
+ font: 600 16px / 1.4 var(--sans);
3782
+ color: var(--ink);
3783
+ }
3784
+
3785
+ .garden-ui-preview .g-cmp dl {
3786
+ display: flex;
3787
+ flex-wrap: wrap;
3788
+ gap: 6px;
3789
+ margin: 10px 0 0;
3790
+ padding-top: 10px;
3791
+ border-top: 1px solid var(--rule);
3792
+ }
3793
+
3794
+ .garden-ui-preview .g-cmp dl > span {
3795
+ display: inline-flex;
3796
+ align-items: baseline;
3797
+ gap: 5px;
3798
+ padding: 2px 8px;
3799
+ border-radius: 6px;
3800
+ background: var(--well);
3801
+ font: 400 12px / 1.45 var(--sans);
3802
+ }
3803
+
3804
+ .garden-ui-preview .g-cmp dt {
3805
+ margin: 0;
3806
+ color: var(--muted);
3807
+ }
3808
+
3809
+ .garden-ui-preview .g-cmp dt::after {
3810
+ content: "·";
3811
+ margin-left: 5px;
3812
+ color: var(--muted);
3813
+ }
3814
+
3815
+ .garden-ui-preview .g-cmp dd {
3816
+ margin: 0;
3817
+ font-weight: 500;
3818
+ color: var(--ink);
3819
+ }
3820
+
3821
+ .garden-ui-preview .g-cmp p,
3822
+ .garden-ui-preview .g-card p,
3823
+ .garden-ui-preview .g-tl-x {
3824
+ margin: 0;
3825
+ font-size: 14px;
3826
+ line-height: 1.6;
3827
+ color: var(--text);
3828
+ }
3829
+
3830
+ .garden-ui-preview .g-timeline {
3831
+ padding: 18px 20px;
3832
+ }
3833
+
3834
+ .garden-ui-preview .g-timeline ol {
3835
+ list-style: none;
3836
+ margin: 0;
3837
+ padding: 0;
3838
+ }
3839
+
3840
+ .garden-ui-preview .g-timeline li {
3841
+ position: relative;
3842
+ padding: 0 0 16px 22px;
3843
+ border-left: 2px solid var(--rule);
3844
+ margin-left: 6px;
3845
+ }
3846
+
3847
+ .garden-ui-preview .g-timeline li::before {
3848
+ content: "";
3849
+ position: absolute;
3850
+ left: -6px;
3851
+ top: 6px;
3852
+ width: 10px;
3853
+ height: 10px;
3854
+ border-radius: 50%;
3855
+ background: var(--paper);
3856
+ border: 2px solid var(--blue);
3857
+ }
3858
+
3859
+ .garden-ui-preview .g-tl-d {
3860
+ font-size: 13px;
3861
+ color: var(--muted);
3862
+ margin: 0;
3863
+ }
3864
+
3865
+ .garden-ui-preview .g-tl-t {
3866
+ font-weight: 600;
3867
+ color: var(--ink);
3868
+ margin: 2px 0 0;
3869
+ }
3870
+
3871
+ .garden-ui-preview .g-bar {
3872
+ display: grid;
3873
+ grid-template-columns: 64px minmax(0, 1fr) 60px;
3874
+ gap: 10px;
3875
+ align-items: center;
3876
+ margin: 8px 0;
3877
+ font-size: 14px;
3878
+ }
3879
+
3880
+ .garden-ui-preview .g-bar-track {
3881
+ height: 14px;
3882
+ border-radius: 4px;
3883
+ background: var(--well);
3884
+ }
3885
+
3886
+ .garden-ui-preview .g-bar-fill {
3887
+ display: block;
3888
+ height: 100%;
3889
+ border-radius: 4px;
3890
+ background: var(--blue);
3891
+ min-width: 3px;
3892
+ }
3893
+
3894
+ .garden-ui-preview .g-mermaid svg,
3895
+ .garden-ui-preview .dx-svg {
3896
+ display: block;
3897
+ width: 100%;
3898
+ max-width: 100%;
3899
+ height: auto;
3900
+ }
3901
+
3902
+ .garden-ui-preview .g-mermaid {
3903
+ margin: 28px 0;
3904
+ padding: 16px;
3905
+ border: 1px solid var(--rule);
3906
+ border-radius: var(--r);
3907
+ overflow-x: auto;
3908
+ text-align: center;
3909
+ background: transparent;
3910
+ }
3911
+
3912
+ .garden-ui-preview .g-mermaid svg {
3913
+ max-width: 100% !important;
3914
+ max-height: none;
3915
+ height: auto;
3916
+ display: inline-block;
3917
+ }
3918
+
3919
+ .garden-ui-preview .g-mermaid.ok > pre {
3920
+ display: none;
3921
+ }
3922
+
3923
+ .garden-ui-preview .g-mermaid pre.code {
3924
+ margin: 0;
3925
+ text-align: left;
3926
+ white-space: pre;
3927
+ }
3928
+
3929
+ .garden-ui-preview .g-codediff {
3930
+ background: var(--well);
3931
+ border-radius: 8px;
3932
+ margin: 28px 0;
3933
+ overflow: hidden;
3934
+ }
3935
+
3936
+ .garden-ui-preview .g-codediff > [role="tablist"] {
3937
+ display: flex;
3938
+ gap: 4px;
3939
+ position: relative;
3940
+ margin: 0;
3941
+ padding: 4px 10px 0;
3942
+ border-bottom: 1px solid var(--rule);
3943
+ }
3944
+
3945
+ .garden-ui-preview .g-codediff > [role="tablist"]:has(> .ux-copy) {
3946
+ padding-right: 46px;
3947
+ }
3948
+
3949
+ .garden-ui-preview .g-codediff [role="tab"] {
3950
+ font: 500 13px / 1 var(--sans);
3951
+ color: var(--muted);
3952
+ background: none;
3953
+ border: 0;
3954
+ border-bottom: 2px solid transparent;
3955
+ padding: 8px 10px;
3956
+ min-height: 40px;
3957
+ cursor: pointer;
3958
+ }
3959
+
3960
+ .garden-ui-preview .g-codediff [role="tab"][aria-selected="true"] {
3961
+ color: var(--ink);
3962
+ border-bottom-color: var(--blue);
3963
+ }
3964
+
3965
+ .garden-ui-preview .g-codediff pre.code {
3966
+ margin: 0;
3967
+ border-radius: 0;
3968
+ background: transparent;
3969
+ }
3970
+
3971
+ /* One diff line per row; the marker column stays out of the copied text. */
3972
+ .garden-ui-preview .g-diff code > span {
3973
+ display: block;
3974
+ padding: 0 12px 0 0;
3975
+ white-space: pre;
3976
+ }
3977
+
3978
+ .garden-ui-preview .g-diff .d-m {
3979
+ display: inline-block;
3980
+ width: 2ch;
3981
+ color: var(--muted);
3982
+ user-select: none;
3983
+ }
3984
+
3985
+ .garden-ui-preview .g-diff .d-add {
3986
+ background: var(--tint);
3987
+ }
3988
+
3989
+ .garden-ui-preview .g-diff .d-add .d-m {
3990
+ color: var(--ink);
3991
+ }
3992
+
3993
+ .garden-ui-preview .g-diff .d-del {
3994
+ background: var(--red-tint);
3995
+ color: var(--soft);
3996
+ }
3997
+
3998
+ .garden-ui-preview .g-diff .d-del .d-m {
3999
+ color: var(--red-text);
4000
+ }
4001
+
4002
+ .garden-ui-preview .ux-btn {
4003
+ display: inline-grid;
4004
+ place-items: center;
4005
+ width: 32px;
4006
+ height: 32px;
4007
+ padding: 0;
4008
+ border: 1px solid var(--rule);
4009
+ border-radius: 8px;
4010
+ background: transparent;
4011
+ color: var(--muted);
4012
+ cursor: pointer;
4013
+ font: 500 12px / 1 var(--sans);
4014
+ box-shadow: none;
4015
+ }
4016
+
4017
+ .garden-ui-preview .ux-btn svg {
4018
+ width: 16px;
4019
+ height: 16px;
4020
+ fill: none;
4021
+ stroke: currentColor;
4022
+ stroke-width: 1.6;
4023
+ stroke-linecap: round;
4024
+ stroke-linejoin: round;
4025
+ }
4026
+
4027
+ .garden-ui-preview .ux-btn.ux-done {
4028
+ width: auto;
4029
+ padding: 0 10px;
4030
+ color: var(--blue);
4031
+ border-color: var(--blue-line);
4032
+ }
4033
+
4034
+ @media (pointer: coarse) {
4035
+ .garden-ui-preview .ux-btn:not(.ux-copy) {
4036
+ position: relative;
4037
+ }
4038
+
4039
+ .garden-ui-preview .ux-btn::before {
4040
+ content: "";
4041
+ position: absolute;
4042
+ left: 50%;
4043
+ top: 50%;
4044
+ width: 44px;
4045
+ height: 44px;
4046
+ transform: translate(-50%, -50%);
4047
+ }
4048
+ }
4049
+
4050
+ .garden-ui-preview .ux-cb {
4051
+ position: relative;
4052
+ }
4053
+
4054
+ .garden-ui-preview .ux-cb > .ux-copy,
4055
+ .garden-ui-preview .g-codediff > [role="tablist"] > .ux-copy {
4056
+ position: absolute;
4057
+ top: 8px;
4058
+ right: 8px;
4059
+ z-index: 2;
4060
+ }
4061
+
4062
+ .garden-ui-preview .g-codediff > [role="tablist"] > .ux-copy {
4063
+ top: 50%;
4064
+ transform: translateY(-50%);
4065
+ }
4066
+
4067
+ /* The language label sits left of the copy button, 8px apart, centred on it. */
4068
+ .garden-ui-preview .markdown-body .ux-cb > pre[data-language]::before {
4069
+ top: 8px;
4070
+ right: 48px;
4071
+ line-height: 32px;
4072
+ }
4073
+
4074
+ /* 「已复制」 widens the button over the label; the label steps aside meanwhile. */
4075
+ .garden-ui-preview .markdown-body .ux-cb:has(> .ux-done) > pre[data-language]::before {
4076
+ visibility: hidden;
4077
+ }
4078
+
4079
+ /* Narrow screens: no language label, in the article (only the copy button
4080
+ stays) and in the file preview drawer alike; nothing else changes. */
4081
+ @media (max-width: 639.98px) {
4082
+ .garden-ui-preview .markdown-body pre[data-language]::before {
4083
+ display: none;
4084
+ }
4085
+ }
4086
+
4087
+ @media (hover: hover) {
4088
+ .garden-ui-preview .ux-copy {
4089
+ opacity: 0;
4090
+ }
4091
+
4092
+ .garden-ui-preview .ux-cb:hover > .ux-copy,
4093
+ .garden-ui-preview .ux-cb:focus-within > .ux-copy,
4094
+ .garden-ui-preview .g-codediff:hover .ux-copy,
4095
+ .garden-ui-preview .g-codediff:focus-within .ux-copy,
4096
+ .garden-ui-preview .ux-copy.ux-done {
4097
+ opacity: 1;
4098
+ }
4099
+ }
4100
+
4101
+ .garden-ui-preview .ux-fs {
4102
+ position: relative;
4103
+ background: transparent;
4104
+ }
4105
+
4106
+ .garden-ui-preview .ux-fs > .ux-fsbar {
4107
+ position: absolute;
4108
+ top: 8px;
4109
+ right: 8px;
4110
+ z-index: 3;
4111
+ display: flex;
4112
+ margin: 0;
4113
+ }
4114
+
4115
+ .garden-ui-preview .ux-fs:not(.g-sandbox) > .ux-fsbar + * {
4116
+ padding-right: 44px;
4117
+ }
4118
+
4119
+ .garden-ui-preview .ux-fs:not(.g-sandbox) > .ux-fsbar + .g-sandbox {
4120
+ padding-right: 0;
4121
+ }
4122
+
4123
+ .garden-ui-preview .ux-fs:fullscreen,
4124
+ .garden-ui-preview .ux-fs.ux-fs-on {
4125
+ background: var(--paper);
4126
+ overflow: auto;
4127
+ max-width: none;
4128
+ width: 100%;
4129
+ margin: 0;
4130
+ border-radius: 0;
4131
+ }
4132
+
4133
+ .garden-ui-preview .ux-fs:fullscreen {
4134
+ padding: 20px max(20px, calc(50vw - 560px));
4135
+ }
4136
+
4137
+ .garden-ui-preview .ux-fs.ux-fs-on {
4138
+ position: fixed;
4139
+ inset: 0;
4140
+ z-index: 2147483000;
4141
+ padding: 16px;
4142
+ border: 0;
4143
+ }
4144
+
4145
+ .garden-ui-preview html.ux-lock,
4146
+ .garden-ui-preview html.ux-lock body {
4147
+ overflow: hidden;
4148
+ }
4149
+
4150
+ .garden-ui-preview .ux-live {
4151
+ position: absolute !important;
4152
+ width: 1px;
4153
+ height: 1px;
4154
+ overflow: hidden;
4155
+ clip: rect(0 0 0 0);
4156
+ white-space: nowrap;
4157
+ }
4158
+
4159
+ .garden-ui-preview .g-sandbox iframe,
4160
+ .garden-ui-preview .g-html iframe {
4161
+ display: block;
4162
+ width: 100%;
4163
+ border: 0;
4164
+ background: transparent;
4165
+ overflow: hidden;
4166
+ }
4167
+
4168
+ .garden-ui-preview .g-idea,
4169
+ .garden-ui-preview .g-legacy,
4170
+ .garden-ui-preview .g-unknown {
4171
+ font-size: var(--fs-small);
4172
+ color: var(--muted);
4173
+ }
4174
+
4175
+ .garden-ui-preview .garden-author-catalog {
4176
+ margin: 0 0 28px;
4177
+ padding: 16px 18px;
4178
+ border: 1px solid var(--rule);
4179
+ border-radius: var(--r);
4180
+ }
4181
+
4182
+ .garden-ui-preview .garden-author-catalog h2 {
4183
+ margin: 0 0 8px;
4184
+ font: 700 20px / 1.4 var(--sans);
4185
+ }
4186
+
4187
+ .garden-ui-preview .garden-author-catalog ul {
4188
+ margin: 12px 0 0;
4189
+ padding-left: 1.2em;
4190
+ }
4191
+
4192
+ .garden-ui-preview .hljs-keyword,
4193
+ .garden-ui-preview .hljs-built_in,
4194
+ .garden-ui-preview .hljs-type,
4195
+ .garden-ui-preview .hljs-meta .hljs-keyword {
4196
+ color: #30302e;
4197
+ font-weight: 600;
4198
+ }
4199
+
4200
+ .garden-ui-preview .hljs-string,
4201
+ .garden-ui-preview .hljs-regexp {
4202
+ color: #2d6a3e;
4203
+ }
4204
+
4205
+ .garden-ui-preview .hljs-comment,
4206
+ .garden-ui-preview .hljs-quote {
4207
+ color: #6e6b64;
4208
+ font-style: normal;
4209
+ }
4210
+
4211
+ .garden-ui-preview .hljs-number,
4212
+ .garden-ui-preview .hljs-literal {
4213
+ color: #8a5300;
4214
+ }
4215
+
4216
+ .garden-ui-preview .hljs-title,
4217
+ .garden-ui-preview .hljs-title.function_,
4218
+ .garden-ui-preview .hljs-title.class_ {
4219
+ color: #6a3fb5;
4220
+ }
4221
+
4222
+ .garden-ui-preview .hljs-attr,
4223
+ .garden-ui-preview .hljs-variable,
4224
+ .garden-ui-preview .hljs-params {
4225
+ color: #1b1a18;
4226
+ }
4227
+
4228
+ .garden-ui-preview html[data-theme="dark"] .hljs-keyword,
4229
+ .garden-ui-preview html[data-theme="dark"] .hljs-built_in,
4230
+ .garden-ui-preview html[data-theme="dark"] .hljs-type {
4231
+ color: #eeece7;
4232
+ }
4233
+
4234
+ .garden-ui-preview html[data-theme="dark"] .hljs-string {
4235
+ color: #8fd1a0;
4236
+ }
4237
+
4238
+ .garden-ui-preview html[data-theme="dark"] .hljs-comment {
4239
+ color: #a09b91;
4240
+ }
4241
+
4242
+ .garden-ui-preview html[data-theme="dark"] .hljs-number,
4243
+ .garden-ui-preview html[data-theme="dark"] .hljs-literal {
4244
+ color: #e8b86a;
4245
+ }
4246
+
4247
+ .garden-ui-preview html[data-theme="dark"] .hljs-title,
4248
+ .garden-ui-preview html[data-theme="dark"] .hljs-title.function_,
4249
+ .garden-ui-preview html[data-theme="dark"] .hljs-title.class_ {
4250
+ color: #c4a8f0;
4251
+ }
4252
+
4253
+ .garden-ui-preview html[data-theme="dark"] .hljs-attr,
4254
+ .garden-ui-preview html[data-theme="dark"] .hljs-variable,
4255
+ .garden-ui-preview html[data-theme="dark"] .hljs-params {
4256
+ color: #eeece7;
4257
+ }
4258
+
4259
+ @media (max-width: 1199px) {
4260
+ .garden-ui-preview .post-reading-page .article-reading-layout {
4261
+ display: block;
4262
+ margin-top: 48px;
4263
+ }
4264
+
4265
+ .garden-ui-preview .post-reading-page .article-reading-column {
4266
+ max-width: var(--col);
4267
+ margin-inline: auto;
4268
+ }
4269
+ }
4270
+
4271
+ @media (max-width: 640px) {
4272
+ .garden-ui-preview .header-inner {
4273
+ width: calc(100% - 32px);
4274
+ min-height: auto;
4275
+ height: auto;
4276
+ padding: 12px 0;
4277
+ }
4278
+
4279
+ .garden-ui-preview .column-reading-page {
4280
+ width: min(1340px, calc(100% - 40px));
4281
+ }
4282
+
4283
+ .garden-ui-preview .post-reading-page {
4284
+ width: 100%;
4285
+ padding-right: 20px;
4286
+ padding-left: 20px;
4287
+ }
4288
+
4289
+ .garden-ui-preview .lead.quote-plain {
4290
+ padding-left: 18px;
4291
+ }
4292
+
4293
+ .garden-ui-preview .hero,
4294
+ .garden-ui-preview .post-reading-page .article-summary-row.hero {
4295
+ padding: 28px 0 0;
4296
+ }
4297
+
4298
+ .garden-ui-preview .cover-card,
4299
+ .garden-ui-preview .article-hero.article-cover {
4300
+ border-radius: var(--r-lg);
4301
+ margin-top: 28px;
4302
+ }
4303
+ }
4304
+
4305
+ .garden-ui-preview .sh-row .archive-meta { font-variant-numeric: tabular-nums; }
4306
+ .garden-ui-preview .sh-row .archive-copy { display: contents; }
4307
+ .garden-ui-preview .sh-row .archive-cover { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
4308
+
4309
+ .garden-ui-preview .t-no,
4310
+ .garden-ui-preview .sec-no {
4311
+ color: var(--blue);
4312
+ font-variant-numeric: tabular-nums;
4313
+ margin-right: 0.45em;
4314
+ }
4315
+
4316
+ .garden-ui-preview .g-tabs [role="tablist"] { display: flex; gap: 4px; border-bottom: 1px solid var(--rule); overflow-x: auto; }
4317
+ .garden-ui-preview .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; }
4318
+ .garden-ui-preview .g-tabs [role="tab"][aria-selected="true"] { color: var(--ink); border-bottom-color: var(--blue); }
4319
+ .garden-ui-preview .g-tabs [role="tabpanel"] { padding-top: 16px; }
4320
+ .garden-ui-preview .g-steps { list-style: none; counter-reset: s; padding: 0; margin: 24px 0; }
4321
+ .garden-ui-preview .g-steps > li { counter-increment: s; position: relative; padding: 0 0 18px 44px; margin: 0; }
4322
+ .garden-ui-preview .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); }
4323
+ .garden-ui-preview .g-steps > li:not(:last-child)::after { content: ""; position: absolute; left: 14px; top: 34px; bottom: 4px; width: 1px; background: var(--rule); }
4324
+ .garden-ui-preview .g-step-t { margin: 0 0 2px; font-weight: 600; color: var(--ink); }
4325
+ .garden-ui-preview .g-steps > li > p { margin: 0 0 8px; }
4326
+ .garden-ui-preview .g-faq details { border-bottom: 1px solid var(--rule); }
4327
+ .garden-ui-preview .g-faq details:first-child { border-top: 1px solid var(--rule); }
4328
+ .garden-ui-preview .g-faq summary { cursor: pointer; padding: 12px 28px 12px 0; font-weight: 600; color: var(--ink); list-style: none; position: relative; }
4329
+ .garden-ui-preview .g-faq summary::-webkit-details-marker { display: none; }
4330
+ .garden-ui-preview .g-faq summary::after { content: "+"; position: absolute; right: 4px; top: 10px; color: var(--muted); font-weight: 400; font-size: 20px; }
4331
+ .garden-ui-preview .g-faq details[open] summary::after { content: "−"; }
4332
+ .garden-ui-preview .g-faq details > div { padding: 0 0 12px; }
4333
+ .garden-ui-preview .g-quiz { margin: 28px 0; }
4334
+ .garden-ui-preview .g-quiz fieldset { border: 1px solid var(--rule); border-radius: var(--r); padding: 12px 16px; margin: 0; }
4335
+ .garden-ui-preview .g-quiz legend { font-weight: 600; color: var(--ink); padding: 0 6px; }
4336
+ .garden-ui-preview .g-quiz-tag { display: block; font-size: 12px; font-weight: 600; color: var(--blue); margin-bottom: 2px; }
4337
+ .garden-ui-preview .g-quiz label { display: flex; gap: 10px; align-items: center; padding: 8px 0; cursor: pointer; min-height: 44px; }
4338
+ .garden-ui-preview .g-quiz input { accent-color: var(--blue); width: 18px; height: 18px; margin: 0; }
4339
+ .garden-ui-preview .g-quiz-row { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-top: 12px; }
4340
+ .garden-ui-preview .g-quiz button { font: 600 14px/1 var(--sans); padding: 11px 16px; border-radius: 8px; border: 1px solid var(--rule-strong); background: transparent; color: var(--ink); cursor: pointer; min-height: 44px; }
4341
+ .garden-ui-preview .g-quiz-out { margin: 0; font-size: 14px; }
4342
+ .garden-ui-preview .g-quiz-out.ok { color: #2d6a3e; }
4343
+ .garden-ui-preview .g-quiz-out.no { color: #b4213a; }
4344
+ .garden-ui-preview html[data-theme="dark"] .g-quiz-out.ok { color: #8fd1a0; }
4345
+ .garden-ui-preview html[data-theme="dark"] .g-quiz-out.no { color: #f29aab; }
4346
+ .garden-ui-preview .g-quiz-ex { margin-top: 8px; font-size: 15px; color: var(--soft); }
4347
+ .garden-ui-preview .g-play { border: 1px solid var(--rule); border-radius: var(--r); padding: 14px 16px; margin: 24px 0; background: transparent; }
4348
+ .garden-ui-preview .g-play-f { margin: 0 0 10px; font-size: 14px; color: var(--soft); }
4349
+ .garden-ui-preview .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; }
4350
+ .garden-ui-preview .g-range input { width: 100%; accent-color: var(--blue); min-height: 32px; }
4351
+ .garden-ui-preview .g-range output { text-align: right; color: var(--ink); font-variant-numeric: tabular-nums; }
4352
+ .garden-ui-preview .g-play-out { margin: 10px 0 0; font-size: 15px; }
4353
+ .garden-ui-preview .g-play-out b { font-size: 28px; color: var(--ink); font-variant-numeric: tabular-nums; }
4354
+ .garden-ui-preview .g-play-note { margin: 2px 0 0; font-size: 13px; color: var(--muted); }
4355
+ .garden-ui-preview .kv-seg { border: 0; margin: 12px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
4356
+ .garden-ui-preview .kv-seg legend { float: left; font-size: 14px; color: var(--soft); margin-right: 10px; min-width: 3.2em; padding: 0; }
4357
+ .garden-ui-preview .kv-seg label { position: relative; cursor: pointer; }
4358
+ .garden-ui-preview .kv-seg input { position: absolute; opacity: 0; inset: 0; }
4359
+ .garden-ui-preview .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: transparent; }
4360
+ .garden-ui-preview .kv-seg input:checked + span { border-color: var(--blue); background: var(--blue-tint); color: var(--blue); }
4361
+ .garden-ui-preview .kv-seg input:focus-visible + span { outline: 2px solid var(--blue); outline-offset: 2px; }
4362
+ .garden-ui-preview .dx-tok { font: 500 14px ui-monospace, Menlo, monospace; fill: var(--ink); }
4363
+ .garden-ui-preview .dx-l { font: 600 13px var(--sans); fill: var(--ink); }
4364
+ .garden-ui-preview .dx-cap { font: 12px var(--sans); fill: var(--muted); }
4365
+ .garden-ui-preview .dx-k, .garden-ui-preview .dx-v, .garden-ui-preview .dx-q, .garden-ui-preview .dx-o { fill: transparent; stroke: var(--rule-strong); }
4366
+ .garden-ui-preview .dx-k, .garden-ui-preview .dx-v { fill: var(--blue-tint); stroke: var(--blue-line); }
4367
+ .garden-ui-preview .dx-new { fill: transparent; stroke: var(--blue); stroke-dasharray: 4 3; }
4368
+ .garden-ui-preview .dx-cache { fill: none; stroke: var(--blue); stroke-width: 1.5; stroke-dasharray: 6 4; }
4369
+ .garden-ui-preview .dx-attn line { stroke: var(--muted); stroke-width: 1; }
4370
+ .garden-ui-preview .dx-q { stroke: var(--blue); stroke-width: 2; }
4371
+ .garden-ui-preview .g-flow .fl-group { fill: none; stroke: var(--rule-strong); stroke-dasharray: 5 4; }
4372
+ .garden-ui-preview .g-flow .fl-n { fill: transparent; stroke: var(--rule-strong); stroke-width: 1.2; }
4373
+ .garden-ui-preview .g-flow .fl-m { fill: var(--blue-tint); stroke: var(--blue-line); }
4374
+ .garden-ui-preview .g-flow .fl-e line, .garden-ui-preview .g-flow .fl-e1 { stroke: var(--muted); stroke-width: 1.3; fill: none; }
4375
+ .garden-ui-preview .g-flow .fl-ah { fill: var(--muted); }
4376
+ .garden-ui-preview .g-flow .gc-stw { fill: rgba(180, 33, 58, 0.08); stroke: rgba(180, 33, 58, 0.45); }
4377
+ /* Link cards: `[text](url){card}`. Title, description and picture come from the build. */
4378
+ .garden-ui-preview .prose .link-cards { list-style: none; padding: 0; margin: 24px 0 32px; display: grid; gap: 12px; }
4379
+ .garden-ui-preview .prose .link-cards li { margin: 0; padding: 0; }
4380
+ .garden-ui-preview .link-card { display: flex; gap: 20px; align-items: stretch; padding: 16px; border: 1px solid var(--rule); border-radius: 12px; background: transparent; color: inherit; text-decoration: none; transition: border-color .15s ease, background-color .15s ease; }
4381
+ .garden-ui-preview .prose a.link-card, .garden-ui-preview .markdown-body a.link-card { text-decoration: none; padding-right: 16px; background-image: none; }
4382
+ .garden-ui-preview .link-card:hover { border-color: var(--rule-strong, #cfcbc2); background: var(--card-hover); }
4383
+ .garden-ui-preview .link-card:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
4384
+ .garden-ui-preview .lc-body { display: flex; flex-direction: column; gap: 4px; min-width: 0; flex: 1; }
4385
+ .garden-ui-preview .lc-site { display: flex; align-items: center; gap: 8px; min-width: 0; font-size: 13px; line-height: 1.5; color: var(--muted); }
4386
+ .garden-ui-preview .markdown-body .lc-site img.fav { display: block; flex: 0 0 auto; width: 14px; height: 14px; margin: 0; border-radius: 3px; object-fit: contain; }
4387
+ .garden-ui-preview .lc-sitename { color: var(--soft); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
4388
+ .garden-ui-preview .lc-host { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
4389
+ .garden-ui-preview .lc-arrow { flex: 0 0 auto; 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; }
4390
+ .garden-ui-preview .lc-title { font-weight: 600; font-size: 16px; line-height: 1.45; color: var(--ink); text-wrap: pretty; }
4391
+ .garden-ui-preview .lc-desc { font-size: var(--fs-small); line-height: 1.55; color: var(--soft); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
4392
+ .garden-ui-preview .lc-meta { display: flex; flex-wrap: wrap; gap: 4px 16px; margin-top: auto; padding-top: 4px; font-size: 13px; line-height: 1.5; color: var(--muted); }
4393
+ /* Fixed aspect ratio, so a picture arriving late never moves the text. */
4394
+ .garden-ui-preview .markdown-body img.lc-thumb { display: block; flex: 0 0 auto; width: 168px; max-width: none; height: auto; aspect-ratio: 1.91 / 1; object-fit: cover; align-self: center; margin: 0; border: 1px solid var(--rule); border-radius: 8px; background: var(--well); }
4395
+ @media (max-width: 640px) {
4396
+ .garden-ui-preview .link-card { flex-direction: column-reverse; gap: 12px; padding: 12px; }
4397
+ .garden-ui-preview .prose a.link-card, .garden-ui-preview .markdown-body a.link-card { padding-right: 12px; }
4398
+ .garden-ui-preview .markdown-body img.lc-thumb { width: 100%; }
4399
+ }
4400
+ @media (prefers-reduced-motion: reduce) {
4401
+ .garden-ui-preview .link-card { transition: none; }
4402
+ }
4403
+ .garden-ui-preview .mono { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
4404
+ .garden-ui-preview .g-chart-t { margin: 0 0 12px; font-weight: 600; color: var(--ink); font-size: 15px; }
4405
+ .garden-ui-preview .g-bars { display: grid; grid-template-columns: fit-content(40%) minmax(0, 1fr) max-content; gap: 8px 10px; align-items: center; }
4406
+ .garden-ui-preview .g-bars > .g-bar { display: contents; }
4407
+ .garden-ui-preview .g-bar-k { color: var(--muted); }
4408
+ .garden-ui-preview .g-bar-v { text-align: right; color: var(--ink); font-variant-numeric: tabular-nums; white-space: nowrap; }
4409
+ @media (max-width: 640px) {
4410
+ .garden-ui-preview .g-range { grid-template-columns: 84px minmax(0, 1fr) 54px; gap: 8px; }
4411
+ }
4412
+
4413
+ /* ---- Compose files: a download card, a group of rows, a preview drawer ---- */
4414
+ .garden-ui-preview .gf { margin: 24px 0; border: 1px solid var(--rule); border-radius: 12px; background: transparent; font-family: var(--sans); }
4415
+ .garden-ui-preview .gf-title { padding: 14px 16px 0; font-size: 14px; font-weight: 600; line-height: 1.4; color: var(--muted); }
4416
+ .garden-ui-preview .gf-row { display: flex; align-items: center; gap: 14px; padding: 14px 16px; }
4417
+ .garden-ui-preview .gf-row + .gf-row { border-top: 1px solid var(--rule); }
4418
+ .garden-ui-preview .gf-ico { display: grid; place-items: center; flex: none; width: 36px; height: 36px; border-radius: 8px; background: var(--chip); color: var(--soft); }
4419
+ .garden-ui-preview .gf-i { flex: none; width: 18px; height: 18px; }
4420
+ .garden-ui-preview .gf-main { flex: 1; min-width: 0; }
4421
+ .garden-ui-preview .gf-name { overflow: hidden; font-size: 15px; font-weight: 600; line-height: 1.45; color: var(--ink); text-overflow: ellipsis; white-space: nowrap; }
4422
+ .garden-ui-preview .gf-desc { margin-top: 2px; font-size: 14px; line-height: 1.55; color: var(--soft); }
4423
+ .garden-ui-preview .gf-meta { margin-top: 2px; font-size: 13px; line-height: 1.4; color: var(--muted); font-variant-numeric: tabular-nums; }
4424
+ .garden-ui-preview .gf-act { display: flex; flex: none; gap: 6px; }
4425
+ .garden-ui-preview .gf-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; height: 34px; padding: 0 12px; border: 0; border-radius: 999px; background: transparent; color: var(--soft); font: 500 14px/1 var(--sans); white-space: nowrap; cursor: pointer; transition: background-color .15s ease, color .15s ease; }
4426
+ .garden-ui-preview .markdown-body a.gf-btn, .garden-ui-preview a.gf-btn { color: var(--soft); text-decoration: none; }
4427
+ .garden-ui-preview .gf-btn:hover, .garden-ui-preview .markdown-body a.gf-btn:hover { background: var(--tint); color: var(--ink); text-decoration: none; }
4428
+ .garden-ui-preview .gf-btn:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
4429
+ .garden-ui-preview .gf-btn.icon { width: 34px; padding: 0; }
4430
+ .garden-ui-preview .gf-btn.pri, .garden-ui-preview .markdown-body a.gf-btn.pri { background: var(--ink); color: var(--paper); }
4431
+ .garden-ui-preview .gf-btn.pri:hover, .garden-ui-preview .markdown-body a.gf-btn.pri:hover { background: var(--ink-soft); color: var(--paper); }
4432
+
4433
+ /* The drawer: right side on wide screens, the whole screen on phones. */
4434
+ .garden-ui-preview .gf-layer { position: fixed; inset: 0; z-index: 95; }
4435
+ .garden-ui-preview .gf-scrim { position: absolute; inset: 0; background: rgb(20 20 19 / 22%); animation: gf-fade .16s ease-out; }
4436
+ .garden-ui-preview html[data-theme="dark"] .gf-scrim { background: rgb(0 0 0 / 45%); }
4437
+ .garden-ui-preview .gf-drawer { position: absolute; top: 0; right: 0; bottom: 0; display: flex; flex-direction: column; width: min(600px, 46vw); border-left: 1px solid var(--rule); background: var(--paper); box-shadow: -12px 0 32px rgb(0 0 0 / 8%); font-family: var(--sans); animation: gf-slide .2s ease-out; }
4438
+ .garden-ui-preview .gf-dh { display: flex; align-items: center; gap: 12px; min-height: 64px; padding: 12px 12px 12px 20px; border-bottom: 1px solid var(--rule); }
4439
+ .garden-ui-preview .gf-dh .gf-act { gap: 2px; }
4440
+ .garden-ui-preview .gf-db { flex: 1; min-height: 0; overflow: auto; padding: 28px 32px 40px; font-size: 15px; line-height: 1.75; overscroll-behavior: contain; }
4441
+ .garden-ui-preview .gf-db-frame { padding: 0; overflow: hidden; background: transparent; }
4442
+ .garden-ui-preview .gf-frame { display: block; width: 100%; height: 100%; border: 0; background: #fff; }
4443
+ .garden-ui-preview .gf-drawer[data-preview="pdf"] .gf-frame { background: var(--paper-deep); }
4444
+ /* Focus catchers around the iframe: reachable by Tab, never seen. */
4445
+ .garden-ui-preview .gf-sentinel { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
4446
+ /* A quiet reminder; Esc pressed inside an iframe cannot reach the page. Phones have no Esc. */
4447
+ .garden-ui-preview .gf-hint { flex: none; margin: 0; padding: 6px 20px 8px; font-size: 12px; line-height: 1.5; color: var(--muted); }
4448
+ @media (hover: none) and (pointer: coarse) { .garden-ui-preview .gf-hint { display: none; } }
4449
+ .garden-ui-preview .gf-db .gf-doc { max-width: none; margin: 0; font-size: 15px; line-height: 1.75; }
4450
+ .garden-ui-preview .gf-db .gf-doc > :first-child { margin-top: 0; }
4451
+ @keyframes gf-fade { from { opacity: 0; } }
4452
+ @keyframes gf-slide { from { transform: translateX(24px); opacity: 0; } }
4453
+ @media (prefers-reduced-motion: reduce) {
4454
+ .garden-ui-preview .gf-scrim, .garden-ui-preview .gf-drawer { animation: none; }
4455
+ .garden-ui-preview .gf-btn { transition: none; }
4456
+ }
4457
+
4458
+ @media (max-width: 600px) {
4459
+ .garden-ui-preview .gf-row { flex-wrap: wrap; align-items: flex-start; gap: 12px; padding: 14px; }
4460
+ .garden-ui-preview .gf-main { flex: 1 1 calc(100% - 50px); }
4461
+ .garden-ui-preview .gf-act { width: 100%; padding-left: 48px; }
4462
+ .garden-ui-preview .gf-btn { height: 44px; padding: 0 14px; }
4463
+ .garden-ui-preview .gf-btn.icon { width: 44px; padding: 0; }
4464
+ .garden-ui-preview .gf.group .gf-row { flex-wrap: nowrap; align-items: center; }
4465
+ .garden-ui-preview .gf.group .gf-main { flex: 1 1 auto; }
4466
+ .garden-ui-preview .gf.group .gf-act { width: auto; gap: 0; padding: 0; }
4467
+ .garden-ui-preview .gf.group .gf-btn { width: 44px; padding: 0; }
4468
+ .garden-ui-preview .gf.group .gf-lb { display: none; }
4469
+ .garden-ui-preview .gf-drawer { width: 100%; border: 0; box-shadow: none; }
4470
+ .garden-ui-preview .gf-dh { min-height: 56px; padding: 6px 6px 6px 16px; }
4471
+ .garden-ui-preview .gf-dh .gf-act { width: auto; padding: 0; gap: 0; }
4472
+ .garden-ui-preview .gf-db { padding: 20px 20px 40px; }
4473
+ .garden-ui-preview .gf-db-frame { padding: 0; }
4474
+ }
4475
+
4476
+ /* While the prerendered Markdown loads, or when it cannot. (Without scripts 预览 is a plain link to it.) */
4477
+ .garden-ui-preview .gf-state { display: grid; justify-items: start; gap: 12px; padding: 8px 0; font-size: 15px; line-height: 1.6; color: var(--muted); }
4478
+ .garden-ui-preview .gf-state p { margin: 0; color: var(--soft); }
4479
+ .garden-ui-preview .gf-state-act { display: flex; flex-wrap: wrap; gap: 8px; }
4480
+ .garden-ui-preview .gf-state-act .gf-btn { border: 1px solid var(--rule); }
4481
+ /* A previewed Markdown file reads as a document: its own title, a smaller scale than the post. */
4482
+ .garden-ui-preview .gf-db .gf-doc h1 { margin: 0 0 12px; font-size: 22px; font-weight: 600; line-height: 1.4; color: var(--ink); }
4483
+ .garden-ui-preview .gf-db .gf-doc h2 { margin: 28px 0 10px; font-size: 19px; line-height: 1.4; }
4484
+ .garden-ui-preview .gf-db .gf-doc h3 { margin: 24px 0 8px; font-size: 17px; line-height: 1.4; }
4485
+ .garden-ui-preview .gf-db .gf-doc h4 { margin: 20px 0 6px; font-size: 15px; line-height: 1.5; }
4486
+ .garden-ui-preview .gf-db .gf-doc p, .garden-ui-preview .gf-db .gf-doc li { font-size: 15px; line-height: 1.75; }
4487
+ .garden-ui-preview .gf-db .gf-doc p { margin: 0 0 14px; }
4488
+ .garden-ui-preview .gf-db .gf-doc ul, .garden-ui-preview .gf-db .gf-doc ol { margin: 0 0 14px; }
4489
+
4490
+ /* ===== Garden Handbook (/garden & /garden/[...slug]) ===== */
4491
+
4492
+ .garden-ui-preview .garden-doc-page {
4493
+ width: min(1380px, calc(100% - 48px));
4494
+ margin: 0 auto;
4495
+ padding: 44px 0 112px;
4496
+ display: grid;
4497
+ grid-template-columns: 224px minmax(0, var(--col)) 188px;
4498
+ gap: 0 24px;
4499
+ align-items: start;
4500
+ justify-content: space-between;
4501
+ font-family: var(--sans);
4502
+ }
4503
+
4504
+ .garden-ui-preview .garden-doc-page > .toc {
4505
+ margin-top: 8px;
4506
+ position: sticky;
4507
+ top: calc(var(--hdr) + 28px);
4508
+ max-height: calc(100vh - var(--hdr) - 48px);
4509
+ overflow-y: auto;
4510
+ border-left: 0;
4511
+ padding: 4px 0 24px;
4512
+ }
4513
+
4514
+ /* Mobile chapter bar & backdrop (hidden on desktop) */
4515
+ .garden-ui-preview .gdoc-mobile-bar,
4516
+ .garden-ui-preview .gdoc-backdrop,
4517
+ .garden-ui-preview .gdoc-mobile-close,
4518
+ .garden-ui-preview .gdoc-nojs-trigger,
4519
+ .garden-ui-preview .gdoc-nojs-close {
4520
+ display: none;
4521
+ }
4522
+
4523
+ /* Left Handbook Sidebar */
4524
+ .garden-ui-preview .gdoc-sidebar {
4525
+ position: sticky;
4526
+ top: calc(var(--hdr) + 24px);
4527
+ max-height: calc(100vh - var(--hdr) - 40px);
4528
+ overflow-y: auto;
4529
+ padding-right: 16px;
4530
+ border-right: 1px solid var(--rule);
4531
+ scrollbar-width: thin;
4532
+ }
4533
+
4534
+ .garden-ui-preview .gdoc-sidebar-head {
4535
+ padding-bottom: 14px;
4536
+ margin-bottom: 16px;
4537
+ border-bottom: 1px solid var(--rule);
4538
+ }
4539
+
4540
+ .garden-ui-preview .gdoc-overview-link {
4541
+ display: flex;
4542
+ flex-direction: column;
4543
+ gap: 3px;
4544
+ padding: 8px 10px;
4545
+ border-radius: 10px;
4546
+ color: var(--ink);
4547
+ text-decoration: none;
4548
+ transition: background-color 0.15s ease;
4549
+ }
4550
+
4551
+ .garden-ui-preview .gdoc-overview-link:hover {
4552
+ background: var(--tint);
4553
+ }
4554
+
4555
+ .garden-ui-preview .gdoc-overview-link[aria-current="page"] {
4556
+ background: var(--well);
4557
+ }
4558
+
4559
+ .garden-ui-preview .gdoc-overview-mark {
4560
+ display: inline-flex;
4561
+ align-items: center;
4562
+ gap: 7px;
4563
+ font: 600 15px/1.3 var(--serif);
4564
+ color: var(--ink);
4565
+ }
4566
+
4567
+ .garden-ui-preview .gdoc-overview-link small {
4568
+ padding-left: 23px;
4569
+ font-size: 12px;
4570
+ line-height: 1.4;
4571
+ color: var(--muted);
4572
+ }
4573
+
4574
+ .garden-ui-preview .gdoc-nav {
4575
+ display: flex;
4576
+ flex-direction: column;
4577
+ gap: 20px;
4578
+ }
4579
+
4580
+ .garden-ui-preview .gdoc-nav-group-head {
4581
+ margin: 0 0 6px;
4582
+ padding: 0 10px;
4583
+ font: 600 15px/1.45 var(--sans);
4584
+ color: var(--ink);
4585
+ }
4586
+
4587
+ .garden-ui-preview .gdoc-nav-list {
4588
+ list-style: none;
4589
+ margin: 0;
4590
+ padding: 0;
4591
+ display: flex;
4592
+ flex-direction: column;
4593
+ gap: 2px;
4594
+ }
4595
+
4596
+ .garden-ui-preview .gdoc-nav-list li {
4597
+ margin: 0;
4598
+ padding: 0;
4599
+ }
4600
+
4601
+ .garden-ui-preview .gdoc-nav-list a {
4602
+ display: flex;
4603
+ align-items: center;
4604
+ gap: 8px;
4605
+ padding: 6px 10px;
4606
+ border-radius: 8px;
4607
+ font-size: 14px;
4608
+ line-height: 1.45;
4609
+ color: var(--soft);
4610
+ text-decoration: none;
4611
+ transition: background-color 0.15s ease, color 0.15s ease;
4612
+ }
4613
+
4614
+ .garden-ui-preview .gdoc-nav-list a:hover {
4615
+ background: var(--tint);
4616
+ color: var(--ink);
4617
+ }
4618
+
4619
+ .garden-ui-preview .gdoc-nav-list li.is-active a,
4620
+ .garden-ui-preview .gdoc-nav-list a[aria-current="page"] {
4621
+ background: var(--well);
4622
+ color: var(--ink);
4623
+ font-weight: 600;
4624
+ }
4625
+
4626
+ .garden-ui-preview .gdoc-comp-pill {
4627
+ flex: none;
4628
+ padding: 1px 6px;
4629
+ border-radius: 5px;
4630
+ border: 1px solid var(--rule-strong);
4631
+ background: var(--card);
4632
+ font: 500 12px/1.4 var(--mono);
4633
+ color: var(--ink);
4634
+ }
4635
+
4636
+ .garden-ui-preview .gdoc-nav-list li.is-active .gdoc-comp-pill {
4637
+ background: var(--ink);
4638
+ border-color: var(--ink);
4639
+ color: var(--paper);
4640
+ }
4641
+
4642
+ .garden-ui-preview .gdoc-comp-label {
4643
+ min-width: 0;
4644
+ overflow: hidden;
4645
+ text-overflow: ellipsis;
4646
+ white-space: nowrap;
4647
+ }
4648
+
4649
+ /* Chapter Article Column */
4650
+ .garden-ui-preview .garden-doc-article {
4651
+ min-width: 0;
4652
+ max-width: var(--col);
4653
+ width: 100%;
4654
+ }
4655
+
4656
+ .garden-ui-preview .gdoc-article-head {
4657
+ padding: 4px 0 28px;
4658
+ margin-bottom: 32px;
4659
+ border-bottom: 1px solid var(--rule);
4660
+ }
4661
+
4662
+ .garden-ui-preview .gdoc-eyebrow {
4663
+ display: flex;
4664
+ flex-wrap: wrap;
4665
+ align-items: center;
4666
+ gap: 8px;
4667
+ margin-bottom: 12px;
4668
+ font-size: 13px;
4669
+ line-height: 1.5;
4670
+ color: var(--muted);
4671
+ }
4672
+
4673
+ .garden-ui-preview .gdoc-eyebrow-root {
4674
+ color: var(--soft);
4675
+ text-decoration: none;
4676
+ font-weight: 500;
4677
+ }
4678
+
4679
+ .garden-ui-preview .gdoc-eyebrow-root:hover {
4680
+ color: var(--ink);
4681
+ text-decoration: underline;
4682
+ text-underline-offset: 3px;
4683
+ }
4684
+
4685
+ .garden-ui-preview .gdoc-eyebrow-fence {
4686
+ padding: 2px 8px;
4687
+ border-radius: 6px;
4688
+ background: var(--well);
4689
+ border: 1px solid var(--rule);
4690
+ font: 500 12px/1.4 var(--mono);
4691
+ color: var(--ink);
4692
+ }
4693
+
4694
+ .garden-ui-preview .gdoc-article-head h1 {
4695
+ margin: 0;
4696
+ font: 700 clamp(28px, 3.4vw, 38px) / 1.24 var(--sans);
4697
+ color: var(--ink);
4698
+ letter-spacing: -0.015em;
4699
+ text-wrap: balance;
4700
+ }
4701
+
4702
+ .garden-ui-preview .gdoc-article-head h1.h1-br {
4703
+ white-space: normal;
4704
+ max-width: none;
4705
+ }
4706
+
4707
+ @media (min-width: 768px) {
4708
+ .garden-ui-preview .gdoc-article-head h1.h1-br {
4709
+ font-size: min(clamp(28px, 3.4vw, 38px), calc(min(100vw - 80px, 740px) / var(--l)));
4710
+ }
4711
+ }
4712
+
4713
+ .garden-ui-preview .gdoc-article-deck {
4714
+ margin: 14px 0 0;
4715
+ font-size: 18px;
4716
+ line-height: 1.65;
4717
+ color: var(--soft);
4718
+ }
4719
+
4720
+ .garden-ui-preview .garden-doc-article .markdown-body h2:first-child {
4721
+ margin-top: 8px;
4722
+ }
4723
+
4724
+ /* Prev / Next Pager */
4725
+ .garden-ui-preview .gdoc-pager {
4726
+ display: grid;
4727
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4728
+ gap: 16px;
4729
+ margin-top: 64px;
4730
+ padding-top: 28px;
4731
+ border-top: 1px solid var(--rule);
4732
+ }
4733
+
4734
+ .garden-ui-preview .gdoc-pager-card {
4735
+ display: flex;
4736
+ flex-direction: column;
4737
+ gap: 6px;
4738
+ padding: 16px 18px;
4739
+ border: 1px solid var(--rule);
4740
+ border-radius: 12px;
4741
+ background: transparent;
4742
+ text-decoration: none;
4743
+ transition: border-color 0.15s ease, background-color 0.15s ease;
4744
+ }
4745
+
4746
+ .garden-ui-preview .gdoc-pager-card:hover {
4747
+ border-color: var(--rule-strong);
4748
+ background: var(--card-hover);
4749
+ }
4750
+
4751
+ .garden-ui-preview .gdoc-pager-card.is-next {
4752
+ grid-column: 2;
4753
+ text-align: right;
4754
+ align-items: flex-end;
4755
+ }
4756
+
4757
+ .garden-ui-preview .gdoc-pager-dir {
4758
+ display: inline-flex;
4759
+ align-items: center;
4760
+ gap: 5px;
4761
+ font-size: 12px;
4762
+ color: var(--muted);
4763
+ }
4764
+
4765
+ .garden-ui-preview .gdoc-pager-card strong {
4766
+ display: -webkit-box;
4767
+ overflow: hidden;
4768
+ -webkit-box-orient: vertical;
4769
+ -webkit-line-clamp: 2;
4770
+ font-size: 15px;
4771
+ font-weight: 600;
4772
+ line-height: 1.45;
4773
+ color: var(--ink);
4774
+ }
4775
+
4776
+ /* Responsive Breakpoints */
4777
+ @media (max-width: 1260px) {
4778
+ .garden-ui-preview .garden-doc-page {
4779
+ grid-template-columns: 220px minmax(0, var(--col));
4780
+ justify-content: center;
4781
+ gap: 0 44px;
4782
+ }
4783
+
4784
+ .garden-ui-preview .garden-doc-page > .toc {
4785
+ display: none;
4786
+ }
4787
+ }
4788
+
4789
+ @media (max-width: 1080px) {
4790
+ .garden-ui-preview .garden-doc-page {
4791
+ display: block;
4792
+ width: min(var(--col), calc(100% - 40px));
4793
+ padding: 20px 0 88px;
4794
+ }
4795
+
4796
+ .garden-ui-preview .gdoc-mobile-bar {
4797
+ display: flex;
4798
+ align-items: center;
4799
+ gap: 12px;
4800
+ padding: 10px 14px;
4801
+ margin-bottom: 24px;
4802
+ border: 1px solid var(--rule);
4803
+ border-radius: 10px;
4804
+ background: var(--card);
4805
+ }
4806
+
4807
+ .garden-ui-preview .gdoc-mobile-trigger,
4808
+ .garden-ui-preview .gdoc-nojs-trigger {
4809
+ display: inline-flex;
4810
+ align-items: center;
4811
+ gap: 6px;
4812
+ min-height: 34px;
4813
+ padding: 0 12px;
4814
+ border: 1px solid var(--rule-strong);
4815
+ border-radius: 8px;
4816
+ background: var(--well);
4817
+ font: 600 13px/1 var(--sans);
4818
+ color: var(--ink);
4819
+ cursor: pointer;
4820
+ white-space: nowrap;
4821
+ }
4822
+
4823
+ .garden-ui-preview .gdoc-nojs-trigger {
4824
+ display: none;
4825
+ text-decoration: none;
4826
+ }
4827
+
4828
+ .garden-ui-preview .gdoc-mobile-crumb {
4829
+ display: flex;
4830
+ align-items: center;
4831
+ gap: 6px;
4832
+ min-width: 0;
4833
+ overflow: hidden;
4834
+ white-space: nowrap;
4835
+ font-size: 13px;
4836
+ color: var(--muted);
4837
+ }
4838
+
4839
+ .garden-ui-preview .gdoc-mobile-crumb > span,
4840
+ .garden-ui-preview .gdoc-mobile-crumb > svg {
4841
+ flex-shrink: 0;
4842
+ white-space: nowrap;
4843
+ }
4844
+
4845
+ .garden-ui-preview .gdoc-mobile-crumb strong {
4846
+ min-width: 0;
4847
+ color: var(--ink);
4848
+ font-weight: 600;
4849
+ overflow: hidden;
4850
+ text-overflow: ellipsis;
4851
+ white-space: nowrap;
4852
+ }
4853
+
4854
+ .garden-ui-preview .gdoc-backdrop {
4855
+ display: block;
4856
+ position: fixed;
4857
+ inset: 0;
4858
+ z-index: 82;
4859
+ border: 0;
4860
+ padding: 0;
4861
+ background: rgb(20 20 19 / 34%);
4862
+ opacity: 0;
4863
+ visibility: hidden;
4864
+ pointer-events: none;
4865
+ transition: opacity 0.18s ease, visibility 0s linear 0.18s;
4866
+ }
4867
+
4868
+ .garden-ui-preview .gdoc-backdrop[data-open="true"] {
4869
+ opacity: 1;
4870
+ visibility: visible;
4871
+ pointer-events: auto;
4872
+ transition: opacity 0.18s ease, visibility 0s;
4873
+ }
4874
+
4875
+ .garden-ui-preview .gdoc-sidebar {
4876
+ position: fixed;
4877
+ top: 0;
4878
+ left: 0;
4879
+ bottom: 0;
4880
+ z-index: 84;
4881
+ width: min(320px, 86vw);
4882
+ max-height: none;
4883
+ padding: 20px 18px 36px;
4884
+ border-right: 1px solid var(--rule);
4885
+ background: var(--paper);
4886
+ box-shadow: 12px 0 36px rgb(0 0 0 / 14%);
4887
+ transform: translateX(-104%);
4888
+ visibility: hidden;
4889
+ pointer-events: none;
4890
+ transition: transform 0.2s ease, visibility 0s linear 0.2s;
4891
+ }
4892
+
4893
+ .garden-ui-preview .gdoc-sidebar[data-open="true"] {
4894
+ transform: translateX(0);
4895
+ visibility: visible;
4896
+ pointer-events: auto;
4897
+ transition: transform 0.2s ease, visibility 0s;
4898
+ }
4899
+
4900
+ .garden-ui-preview .gdoc-sidebar-head {
4901
+ display: flex;
4902
+ align-items: center;
4903
+ justify-content: space-between;
4904
+ gap: 10px;
4905
+ }
4906
+
4907
+ .garden-ui-preview .gdoc-mobile-close {
4908
+ display: inline-grid;
4909
+ place-items: center;
4910
+ width: 34px;
4911
+ height: 34px;
4912
+ border: 1px solid var(--rule);
4913
+ border-radius: 50%;
4914
+ background: var(--well);
4915
+ color: var(--ink);
4916
+ }
4917
+ }
4918
+
4919
+ @media (max-width: 1080px) and (scripting: none) {
4920
+ .garden-ui-preview .gdoc-mobile-trigger,
4921
+ .garden-ui-preview .gdoc-mobile-close {
4922
+ display: none;
4923
+ }
4924
+
4925
+ .garden-ui-preview .gdoc-nojs-trigger {
4926
+ display: inline-flex;
4927
+ }
4928
+
4929
+ .garden-ui-preview .gdoc-nojs-close {
4930
+ display: inline-grid;
4931
+ place-items: center;
4932
+ width: 34px;
4933
+ height: 34px;
4934
+ border: 1px solid var(--rule);
4935
+ border-radius: 50%;
4936
+ background: var(--well);
4937
+ color: var(--ink);
4938
+ text-decoration: none;
4939
+ }
4940
+
4941
+ .garden-ui-preview .gdoc-sidebar:target {
4942
+ transform: translateX(0);
4943
+ visibility: visible;
4944
+ pointer-events: auto;
4945
+ }
4946
+ }
4947
+
4948
+ @media (max-width: 900px) {
4949
+ .garden-ui-preview .garden-doc-page > .toc {
4950
+ display: flex;
4951
+ }
4952
+ }
4953
+
4954
+ @media (max-width: 720px) {
4955
+ .garden-ui-preview .gdoc-pager {
4956
+ grid-template-columns: minmax(0, 1fr);
4957
+ }
4958
+
4959
+ .garden-ui-preview .gdoc-pager-card.is-next {
4960
+ grid-column: 1;
4961
+ text-align: left;
4962
+ align-items: flex-start;
4963
+ }
4964
+ }
4965
+
4966
+
4967
+ /* English handbook pages: same 740px column, tighter leading than Chinese. */
4968
+ .garden-ui-preview .garden-doc-page:lang(en) .markdown-body,
4969
+ .garden-ui-preview .garden-doc-page:lang(en) .gdoc-article-deck {
4970
+ line-height: 1.6;
4971
+ }
4972
+
4973
+ /* Article pager: no rule above (the Webmention block ends the section); the comments keep theirs. */
4974
+ .garden-ui-preview .gdoc-pager.article-pager {
4975
+ border-top: 0;
4976
+ padding-top: 0;
4977
+ }
4978
+
4979
+ /* 随想 feed: the 下一页 link doubles as the loading trigger. */
4980
+ .garden-ui-preview .feed-more {
4981
+ display: flex;
4982
+ justify-content: center;
4983
+ margin: 32px 0 8px;
4984
+ }
4985
+
4986
+ .garden-ui-preview .feed-more a {
4987
+ display: inline-flex;
4988
+ align-items: center;
4989
+ min-height: 40px;
4990
+ padding: 0 18px;
4991
+ border: 1px solid var(--rule);
4992
+ border-radius: 999px;
4993
+ color: var(--soft);
4994
+ font: 400 14px/1 var(--sans);
4995
+ text-decoration: none;
4996
+ }
4997
+
4998
+ .garden-ui-preview .feed-more a:hover {
4999
+ border-color: var(--rule-strong);
5000
+ color: var(--ink);
5001
+ }
5002
+
5003
+ .garden-ui-preview .feed-end {
5004
+ color: var(--muted);
5005
+ font: 400 13px/1 var(--sans);
5006
+ }
5007
+
5008
+ .garden-ui-preview .feed-prev {
5009
+ display: flex;
5010
+ justify-content: space-between;
5011
+ margin: 24px 0 0;
5012
+ color: var(--muted);
5013
+ font: 400 13px/1.4 var(--sans);
5014
+ }
5015
+
5016
+ /* ----- Intelligent UI patterns: cycle, list, choice, verdicts, card rows, source chips ----- */
5017
+
5018
+ .garden-ui-preview .g-ic { flex: none; color: var(--soft); }
5019
+
5020
+ /* Source chip: a small pill with the site's icon (or its first letter) and host. */
5021
+ .garden-ui-preview .g-srcs { display: inline-flex; align-items: center; gap: 4px; vertical-align: 1px; white-space: nowrap; }
5022
+ .garden-ui-preview .markdown-body a.ext.g-src,
5023
+ .garden-ui-preview .markdown-body a.ext.g-src-chip {
5024
+ display: inline-flex;
5025
+ align-items: center;
5026
+ gap: 5px;
5027
+ padding: 1px 8px 1px 5px;
5028
+ border-radius: 999px;
5029
+ background: var(--well);
5030
+ color: var(--soft);
5031
+ font: 400 12px / 1.7 var(--sans);
5032
+ text-decoration: none;
5033
+ white-space: nowrap;
5034
+ max-width: 14em;
5035
+ overflow: hidden;
5036
+ text-overflow: ellipsis;
5037
+ }
5038
+ .garden-ui-preview .markdown-body a.ext.g-src,
5039
+ .garden-ui-preview .markdown-body a.ext.g-src-chip { background-image: none; padding-right: 8px; vertical-align: 1px; }
5040
+ .garden-ui-preview .markdown-body a.ext.g-src-chip img.fav { margin: 0; vertical-align: 0; }
5041
+ .garden-ui-preview .markdown-body a.ext.g-src:hover,
5042
+ .garden-ui-preview .markdown-body a.ext.g-src-chip:hover { background: var(--rule); color: var(--ink); text-decoration: none; }
5043
+ .garden-ui-preview .g-src-ic {
5044
+ display: inline-grid;
5045
+ place-items: center;
5046
+ width: 14px;
5047
+ height: 14px;
5048
+ border-radius: 50%;
5049
+ background: var(--paper);
5050
+ color: var(--ink);
5051
+ font: 600 9px / 1 var(--sans);
5052
+ text-transform: uppercase;
5053
+ }
5054
+ .garden-ui-preview .g-src-fav { width: 14px; height: 14px; border-radius: 3px; object-fit: contain; }
5055
+ .garden-ui-preview .g-src-more { font: 400 12px / 1.7 var(--sans); color: var(--muted); }
5056
+
5057
+ /* relations: key elements on a circle; narrow screens list each node's links as text */
5058
+ .garden-ui-preview .g-rel {
5059
+ margin: 28px 0;
5060
+ padding: 28px 24px 16px;
5061
+ border: 1px solid var(--rule);
5062
+ border-radius: var(--r-lg);
5063
+ container-type: inline-size;
5064
+ }
5065
+ .garden-ui-preview .markdown-body .g-rel-h { margin: 0 0 16px; font: 600 var(--fs-small) / 1.5 var(--sans); color: var(--ink); }
5066
+ .garden-ui-preview .g-rel-ring { position: relative; height: 440px; }
5067
+ .garden-ui-preview .g-rel-ring[data-n="3"] { height: 360px; }
5068
+ .garden-ui-preview .g-rel-ring[data-n="4"] { height: 420px; }
5069
+ .garden-ui-preview .g-rel-ring[data-n="6"] { height: 480px; }
5070
+ .garden-ui-preview .g-rel-node {
5071
+ position: absolute;
5072
+ left: var(--x);
5073
+ top: var(--y);
5074
+ width: var(--w);
5075
+ transform: translate(-50%, -50%);
5076
+ z-index: 1;
5077
+ box-sizing: border-box;
5078
+ padding: 12px 14px;
5079
+ border: 1.5px solid var(--rule-strong);
5080
+ border-radius: 16px;
5081
+ background: var(--card-hover);
5082
+ text-align: center;
5083
+ }
5084
+ .garden-ui-preview .markdown-body .g-rel-t { margin: 0; font: 700 var(--fs-lead) / 1.35 var(--sans); color: var(--ink); }
5085
+ .garden-ui-preview .markdown-body .g-rel-x { margin: 4px 0 0; font: 400 15px / 1.5 var(--sans); color: var(--soft); }
5086
+ /* On the circle the arrows say it; the text lines stay for screen readers. */
5087
+ .garden-ui-preview .markdown-body .g-rel-out { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; margin: 0; }
5088
+ .garden-ui-preview .g-rel-svg { position: absolute; inset: 0; overflow: visible; pointer-events: none; }
5089
+ .garden-ui-preview .g-rel-svg path { fill: none; stroke: var(--muted); stroke-width: 2; stroke-linecap: round; }
5090
+ .garden-ui-preview .g-rel-svg path.dash { stroke-dasharray: 5 6; stroke-width: 1.75; }
5091
+ .garden-ui-preview .g-rel-svg marker path { fill: var(--muted); stroke: none; }
5092
+ /* A label sits on its line with a page-coloured pad that hides the line under it. */
5093
+ .garden-ui-preview .g-rel-label {
5094
+ position: absolute;
5095
+ z-index: 2;
5096
+ transform: translate(-50%, -50%);
5097
+ padding: 1px 6px;
5098
+ border-radius: 6px;
5099
+ background: var(--paper);
5100
+ color: var(--soft);
5101
+ font: 500 12.5px / 1.4 var(--sans);
5102
+ white-space: nowrap;
5103
+ pointer-events: none;
5104
+ }
5105
+ .garden-ui-preview .g-rel figcaption { margin-top: 18px; font-size: 13px; color: var(--muted); text-align: center; }
5106
+ /* Same graph at every width. Below 560px the nodes take a larger share of the width,
5107
+ show their title on at most two lines (>= 13px), and open the full text on tap. */
5108
+ .garden-ui-preview .g-rel-node { font: inherit; color: inherit; appearance: none; -webkit-appearance: none; }
5109
+ .garden-ui-preview .g-rel-node > span { display: block; }
5110
+ /* Every width: titles stop at two lines, descriptions at three, both with an ellipsis; tap opens the full text. */
5111
+ .garden-ui-preview .g-rel-node { cursor: pointer; }
5112
+ .garden-ui-preview .g-rel-node:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
5113
+ .garden-ui-preview .g-rel-node[aria-expanded="true"] { border-color: var(--ink); }
5114
+ .garden-ui-preview .markdown-body .g-rel-t, .garden-ui-preview .markdown-body .g-rel-x { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; text-overflow: ellipsis; overflow-wrap: normal; word-break: normal; hyphens: manual; text-align: center; }
5115
+ .garden-ui-preview .markdown-body .g-rel-x { -webkit-line-clamp: 3; }
5116
+ .garden-ui-preview .g-rel[data-compact] .g-rel-node { padding: 8px 8px; border-radius: 12px; }
5117
+ .garden-ui-preview .markdown-body .g-rel[data-compact] .g-rel-t {
5118
+ font-size: 13.5px;
5119
+ line-height: 1.3;
5120
+ display: -webkit-box;
5121
+ -webkit-box-orient: vertical;
5122
+ -webkit-line-clamp: 2;
5123
+ overflow: hidden;
5124
+ overflow-wrap: normal;
5125
+ }
5126
+ /* The middle node of a narrow hub shows its title only; tap for the description. */
5127
+ .garden-ui-preview .g-rel[data-compact] .g-rel-node[data-center] .g-rel-x { display: none; }
5128
+ .garden-ui-preview .g-rel[data-compact] .g-rel-node[data-center] { padding-left: 3px; padding-right: 3px; }
5129
+ .garden-ui-preview .markdown-body .g-rel[data-compact] .g-rel-node[data-center] .g-rel-t { font-size: 13px; }
5130
+ /* A wide hub has five or six nodes on one ring: titles at 16px keep two lines without crowding the spokes. */
5131
+ .garden-ui-preview .markdown-body .g-rel:not([data-compact]) .g-rel-ring[data-center] .g-rel-t { font-size: 16px; }
5132
+ .garden-ui-preview .markdown-body .g-rel[data-compact] .g-rel-x { margin-top: 2px; font-size: 13px; line-height: 1.35; -webkit-line-clamp: 2; }
5133
+ .garden-ui-preview .g-rel-badge {
5134
+ display: inline-grid;
5135
+ place-items: center;
5136
+ min-width: 22px;
5137
+ height: 22px;
5138
+ padding: 0;
5139
+ border-radius: 50%;
5140
+ border: 1px solid var(--rule-strong);
5141
+ color: var(--ink);
5142
+ font: 600 13px / 1 var(--sans);
5143
+ }
5144
+ .garden-ui-preview .g-rel-legend { list-style: none; margin: 12px 4px 0; padding: 0; font: 400 13px / 1.6 var(--sans); color: var(--soft); }
5145
+ .garden-ui-preview .markdown-body .g-rel-legend { list-style: none; padding-left: 0; }
5146
+ .garden-ui-preview .markdown-body .g-rel-legend li { margin: 0; padding-left: 0; }
5147
+ .garden-ui-preview .g-rel-detail { margin: 12px 4px 0; padding: 10px 12px; border-radius: 12px; background: var(--well); font: 400 14px / 1.55 var(--sans); color: var(--text); }
5148
+ .garden-ui-preview .g-rel-detail-t { display: block; font-weight: 700; color: var(--ink); }
5149
+ .garden-ui-preview .g-rel-detail-x { display: block; color: var(--soft); }
5150
+ @media (max-width: 600px) {
5151
+ .garden-ui-preview .g-rel { padding: 16px 12px 10px; }
5152
+ }
5153
+
5154
+ /* list: compact icon rows, or titled icon steps */
5155
+ .garden-ui-preview .g-list { margin: 24px 0; }
5156
+ .garden-ui-preview .g-list ul { list-style: none; margin: 0; padding: 0; }
5157
+ .garden-ui-preview .markdown-body .g-list-h { margin: 0 0 10px; font: 600 var(--fs-small) / 1.5 var(--sans); color: var(--ink); }
5158
+ .garden-ui-preview .g-list-rows ul { padding: 12px 18px; border: 1px solid var(--rule); border-radius: var(--r); }
5159
+ .garden-ui-preview .markdown-body .g-list li { margin: 0; }
5160
+ .garden-ui-preview .g-list-rows li { display: flex; align-items: flex-start; gap: 10px; padding: 5px 0; }
5161
+ .garden-ui-preview .g-list-rows .g-list-ic { display: flex; height: 1.7em; align-items: center; }
5162
+ .garden-ui-preview .markdown-body .g-list-rows .g-list-x { margin: 0; line-height: 1.7; }
5163
+ .garden-ui-preview .g-list-steps li { display: grid; grid-template-columns: 28px minmax(0, 1fr); gap: 16px; padding: 22px 0; border-top: 1px solid var(--rule); }
5164
+ .garden-ui-preview .g-list-steps li:first-child { border-top: 0; padding-top: 6px; }
5165
+ .garden-ui-preview .g-list-steps .g-list-ic { padding-top: 3px; }
5166
+ .garden-ui-preview .markdown-body .g-list-t { margin: 0 0 4px; font-weight: 600; color: var(--ink); }
5167
+ .garden-ui-preview .markdown-body .g-list-steps .g-list-x { margin: 0 0 4px; color: var(--text); }
5168
+ .garden-ui-preview .g-list figcaption { margin-top: 8px; font-size: 13px; color: var(--muted); }
5169
+
5170
+ /* choice */
5171
+ .garden-ui-preview .g-choice { margin: 28px 0; padding: 16px; border: 1px solid var(--rule); border-radius: var(--r-lg); }
5172
+ .garden-ui-preview .markdown-body .g-choice-h { margin: 0 0 12px; font-weight: 600; color: var(--ink); }
5173
+ .garden-ui-preview .g-choice-opts { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; }
5174
+ .garden-ui-preview .g-choice-opt {
5175
+ display: flex;
5176
+ flex-direction: column;
5177
+ align-items: center;
5178
+ gap: 6px;
5179
+ padding: 20px 16px 18px;
5180
+ border: 1px solid var(--rule);
5181
+ border-radius: 16px;
5182
+ background: transparent;
5183
+ color: var(--text);
5184
+ font: inherit;
5185
+ text-align: center;
5186
+ cursor: pointer;
5187
+ transition: background .15s ease, border-color .15s ease;
5188
+ }
5189
+ .garden-ui-preview .g-choice-opt:hover { background: var(--card-hover); }
5190
+ .garden-ui-preview .g-choice-opt:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
5191
+ .garden-ui-preview .g-choice-opt[aria-checked="true"] { border-color: var(--ink); background: var(--well); }
5192
+ .garden-ui-preview .g-choice-ic .g-ic { color: var(--ink); }
5193
+ .garden-ui-preview .g-choice-v { font: 700 22px / 1.3 var(--sans); color: var(--ink); font-variant-numeric: tabular-nums; }
5194
+ .garden-ui-preview .g-choice-x { font-size: 14px; line-height: 1.6; color: var(--muted); }
5195
+ .garden-ui-preview .g-choice-l { display: inline-flex; align-items: center; gap: 8px; margin-top: 6px; font-size: 14px; font-weight: 500; color: var(--ink); }
5196
+ .garden-ui-preview .g-choice-dot { width: 16px; height: 16px; border-radius: 50%; border: 1.5px solid var(--muted); box-sizing: border-box; }
5197
+ .garden-ui-preview .g-choice-opt[aria-checked="true"] .g-choice-dot { border: 5px solid var(--ink); }
5198
+ .garden-ui-preview .markdown-body .g-choice-reply { margin: 14px 4px 0; font-size: 15px; color: var(--text); }
5199
+ .garden-ui-preview .g-choice figcaption { margin: 12px 2px 0; font-size: 13px; color: var(--muted); }
5200
+ @media (max-width: 600px) {
5201
+ .garden-ui-preview .g-choice { padding: 12px; }
5202
+ .garden-ui-preview .g-choice-opts { grid-template-columns: 1fr; }
5203
+ .garden-ui-preview .g-choice-opt { display: grid; grid-template-columns: auto 1fr; grid-template-areas: "ic v" "ic x" "ic l"; justify-items: start; text-align: left; column-gap: 14px; row-gap: 2px; padding: 14px 16px; }
5204
+ .garden-ui-preview .g-choice-ic { grid-area: ic; align-self: center; }
5205
+ .garden-ui-preview .g-choice-v { grid-area: v; font-size: 20px; }
5206
+ .garden-ui-preview .g-choice-x { grid-area: x; }
5207
+ .garden-ui-preview .g-choice-l { grid-area: l; }
5208
+ }
5209
+
5210
+ /* compare with verdicts: stacked bad / good blocks */
5211
+ .garden-ui-preview .g-verdicts { margin: 20px 0; }
5212
+ .garden-ui-preview .g-verdict { padding: 14px 0; border-top: 1px solid var(--rule); }
5213
+ .garden-ui-preview .g-verdict:first-child { border-top: 0; padding-top: 4px; }
5214
+ .garden-ui-preview .markdown-body .g-verdict h4 { display: flex; align-items: center; gap: 10px; margin: 0 0 6px; font: 600 var(--fs-body) / 1.5 var(--sans); color: var(--ink); }
5215
+ .garden-ui-preview .markdown-body .g-verdict p { margin: 0 0 0 30px; color: var(--text); }
5216
+ .garden-ui-preview .g-verdict-ic.bad { color: #b4473a; }
5217
+ .garden-ui-preview .g-verdict-ic.good { color: #2d6a3e; }
5218
+ .garden-ui-preview html[data-theme="dark"] .g-verdict-ic.bad { color: #e48a7c; }
5219
+ .garden-ui-preview html[data-theme="dark"] .g-verdict-ic.good { color: #7fbf8e; }
5220
+
5221
+ /* card rows: thumbnail left, text right, dividers between */
5222
+ .garden-ui-preview .g-entities { margin: 24px 0; }
5223
+ .garden-ui-preview .g-entity-row { display: grid; grid-template-columns: 132px minmax(0, 1fr); gap: 18px; padding: 22px 0; border-top: 1px solid var(--rule); }
5224
+ .garden-ui-preview .g-entity-row:first-child { border-top: 0; padding-top: 4px; }
5225
+ .garden-ui-preview .g-entity-row:not(:has(.g-entity-img)) { grid-template-columns: minmax(0, 1fr); }
5226
+ .garden-ui-preview .g-entity-row .g-entity-img img { display: block; width: 132px; height: 132px; object-fit: cover; border-radius: 14px; border: 1px solid var(--rule); margin: 0; }
5227
+ .garden-ui-preview .markdown-body .g-entity-row .g-entity-t { margin: 0 0 6px; font: 600 var(--fs-body) / 1.5 var(--sans); }
5228
+ .garden-ui-preview .markdown-body .g-entity-row p { margin: 0 0 6px; }
5229
+ .garden-ui-preview .markdown-body .g-entity-k { color: var(--text); }
5230
+ @media (max-width: 600px) {
5231
+ .garden-ui-preview .g-entity-row { grid-template-columns: 76px minmax(0, 1fr); gap: 14px; }
5232
+ .garden-ui-preview .g-entity-row .g-entity-img img { width: 76px; height: 76px; border-radius: 10px; }
5233
+ }
5234
+
5235
+ /* review fixes: chip gap, truncated hosts, the "none of these" choice */
5236
+ .garden-ui-preview .markdown-body a.ext.g-src-chip > span,
5237
+ .garden-ui-preview .markdown-body a.ext.g-src > span { overflow: hidden; text-overflow: ellipsis; }
5238
+ /* A single source shows its whole domain; a tag with "+N" cuts only hosts past ~14 characters. */
5239
+ .garden-ui-preview .markdown-body .g-srcs.is-multi a.ext.g-src > span { max-width: 14ch; }
5240
+ .garden-ui-preview .markdown-body .g-srcs:not(.is-multi) a.ext.g-src { max-width: none; }
5241
+ .garden-ui-preview .markdown-body a.ext.g-src-chip,
5242
+ .garden-ui-preview .markdown-body a.ext.g-src { gap: 6px; }
5243
+ .garden-ui-preview .g-choice-group { display: grid; gap: 0; }
5244
+ .garden-ui-preview .g-choice-none {
5245
+ justify-self: center;
5246
+ margin: 12px 0 0;
5247
+ padding: 4px 10px;
5248
+ border: 0;
5249
+ border-radius: 999px;
5250
+ background: none;
5251
+ color: var(--muted);
5252
+ font: 500 14px / 1.6 var(--sans);
5253
+ text-decoration: underline;
5254
+ text-decoration-color: var(--rule);
5255
+ text-underline-offset: 3px;
5256
+ cursor: pointer;
5257
+ }
5258
+ .garden-ui-preview .g-choice-none:hover { color: var(--ink); }
5259
+ .garden-ui-preview .g-choice-none:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
5260
+ .garden-ui-preview .g-choice-none[aria-checked="true"] { color: var(--ink); background: var(--well); text-decoration: none; }
5261
+ .garden-ui-preview .markdown-body img.g-src-fav { display: block; flex: none; width: 14px; height: 14px; max-width: none; margin: 0; border-radius: 3px; object-fit: contain; box-shadow: none; }
5262
+
5263
+ /* Handbook field tables: Required never wraps; narrow screens show each row as a card. */
5264
+ /* Short values (必填, Optional) stay on one line; long conditions wrap instead of widening the column. */
5265
+ .garden-ui-preview .table-wrap .field-table th.ft-req,
5266
+ .garden-ui-preview .table-wrap .field-table td.ft-req { white-space: normal; min-width: 4em; max-width: 9em; width: 9em; }
5267
+ @media (max-width: 640px) {
5268
+ .garden-ui-preview .table-wrap.field-wrap { border: 0; border-radius: 0; overflow: visible; }
5269
+ .garden-ui-preview .field-wrap .field-table,
5270
+ .garden-ui-preview .field-wrap .field-table tbody,
5271
+ .garden-ui-preview .field-wrap .field-table tr,
5272
+ .garden-ui-preview .field-wrap .field-table td { display: block; width: auto; }
5273
+ .garden-ui-preview .field-wrap .field-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
5274
+ .garden-ui-preview .field-wrap .field-table tr { margin: 0 0 12px; padding: 12px 14px; border-radius: var(--r); background: var(--well); }
5275
+ .garden-ui-preview .field-wrap .field-table td { padding: 4px 0; border: 0; white-space: normal; min-width: 0; }
5276
+ .garden-ui-preview .field-wrap .field-table td:first-child { padding: 0 0 6px; font-weight: 600; color: var(--ink); }
5277
+ .garden-ui-preview .field-wrap .field-table td:not(:first-child)::before {
5278
+ content: attr(data-label);
5279
+ display: block;
5280
+ font: 600 12px / 1.5 var(--sans);
5281
+ color: var(--muted);
5282
+ }
5283
+ }
5284
+
5285
+ /* ===== Component reference (/garden/reference/*): code beside the real block ===== */
5286
+
5287
+ @media (min-width: 1280px) {
5288
+ .garden-ui-preview .garden-doc-page.is-reference { grid-template-columns: 224px minmax(0, 980px) 188px; }
5289
+ .garden-ui-preview .garden-doc-page.is-reference .article-column { max-width: 980px; width: 100%; }
5290
+ }
5291
+ .garden-ui-preview .garden-doc-page.is-reference .markdown-body > p:first-child { margin: 0 0 8px; }
5292
+ .garden-ui-preview .garden-doc-page.is-reference .markdown-body > p:first-child + h2 { margin-top: 0; padding-top: 0; }
5293
+ .garden-ui-preview .markdown-body .ref-pane[data-p="c"] pre[data-language]::before { display: none; }
5294
+ .garden-ui-preview .ref-demo {
5295
+ --rd-s: #f0eee6; --rd-p: #faf9f5; --rd-i: #30302e; --rd-m: #6b6a65; --rd-r: #e3e0d5;
5296
+ border: 1px solid var(--rd-r);
5297
+ border-radius: 14px;
5298
+ margin: 1.2em 0 1.6em;
5299
+ overflow: hidden;
5300
+ background: var(--rd-p);
5301
+ }
5302
+ .garden-ui-preview html[data-theme="dark"] .ref-demo { --rd-s: #262624; --rd-p: #1f1e1d; --rd-i: #eceae3; --rd-m: #a9a69c; --rd-r: #3a3936; }
5303
+ .garden-ui-preview .ref-tabs { display: flex; gap: 6px; padding: 6px; border-bottom: 1px solid var(--rd-r); background: var(--rd-s); }
5304
+ .garden-ui-preview .ref-tabs button {
5305
+ font: inherit; font-size: 14px; min-height: 38px; min-width: 72px; border: 0; border-radius: 9px;
5306
+ padding: 0 16px; background: transparent; color: var(--rd-m); cursor: pointer;
5307
+ }
5308
+ .garden-ui-preview .ref-tabs button[aria-selected="true"] { background: var(--rd-p); color: var(--rd-i); box-shadow: 0 1px 2px rgb(0 0 0 / 8%); }
5309
+ .garden-ui-preview .ref-pane { padding: 16px; min-width: 0; }
5310
+ .garden-ui-preview .ref-pane[data-off] { display: none; }
5311
+ .garden-ui-preview .ref-pane-h { display: none; }
5312
+ .garden-ui-preview .ref-pane > :last-child { margin-bottom: 0; }
5313
+ .garden-ui-preview .ref-pane[data-p="c"] .ux-cb { display: block; margin: 0; padding: 0; min-height: 0; }
5314
+ .garden-ui-preview .ref-pane[data-p="c"] pre {
5315
+ margin: 0; max-height: 560px; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere;
5316
+ }
5317
+ .garden-ui-preview .ref-pane[data-p="c"] pre code { white-space: pre-wrap; overflow-wrap: anywhere; }
5318
+ @media (min-width: 1024px) {
5319
+ .garden-ui-preview .ref-demo {
5320
+ display: grid;
5321
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
5322
+ align-items: start;
5323
+ background: linear-gradient(90deg, var(--rd-s) calc(50% - 0.5px), var(--rd-r) calc(50% - 0.5px) calc(50% + 0.5px), var(--rd-p) calc(50% + 0.5px));
5324
+ }
5325
+ .garden-ui-preview .ref-tabs { display: none; }
5326
+ /* Flex columns: no margin collapsing, so both panes start their content on the same line. */
5327
+ .garden-ui-preview .ref-demo .ref-pane, .garden-ui-preview .ref-demo .ref-pane[data-off] { display: flex; flex-direction: column; }
5328
+ .garden-ui-preview .ref-demo .ref-pane > * { margin-top: 0 !important; }
5329
+ /* interactive: its own top spacing (g-play margin and padding, the figure's
5330
+ margin) would push the preview 67px below the code. Reference only. */
5331
+ .garden-ui-preview .ref-demo .ref-pane[data-p="v"] .ux-fs > .g-play { margin-top: 0; padding-top: 0; }
5332
+ .garden-ui-preview .ref-demo .ref-pane[data-p="v"] .g-play > .garden-ui:first-child { margin-top: 0; }
5333
+ .garden-ui-preview .ref-pane[data-p="c"] { grid-column: 1; grid-row: 1; }
5334
+ .garden-ui-preview .ref-pane[data-p="v"] { grid-column: 2; grid-row: 1; }
5335
+ .garden-ui-preview .ref-pane-h { display: block; font-size: 12px; line-height: 18px; letter-spacing: 0.04em; color: var(--rd-m); margin: 0 0 10px !important; }
5336
+ /* Code starts on the same line as the preview: no pre padding or frame on top. */
5337
+ .garden-ui-preview .ref-pane[data-p="c"] pre { padding: 0 4px 4px 0; background: transparent; border: 0; }
5338
+ .garden-ui-preview .ref-pane[data-p="c"] .ux-cb > :not(pre) { display: none; }
5339
+ }
5340
+ @media (max-width: 1023px) {
5341
+ .garden-ui-preview .ref-pane[data-p="c"] pre { padding-right: 56px; }
5342
+ .garden-ui-preview .ref-demo-in .toc-mobile-trigger { opacity: 0; visibility: hidden; pointer-events: none; }
5343
+ }
5344
+
5345
+ /* ===== v0.10.1 tip keep (after git checkout of a2.css from 9a80f7e5) ===== */
5346
+
5347
+ /* List pages: PageIntro rides on .sh-head; keep eyebrow in the same vertical rhythm. */
5348
+ .garden-ui-preview .page-intro.sh-head {
5349
+ padding: 72px 0 36px;
5350
+ max-width: var(--list);
5351
+ width: 100%;
5352
+ }
5353
+
5354
+ .garden-ui-preview .page-intro.sh-head .eyebrow {
5355
+ margin: 0 0 14px;
5356
+ color: var(--muted);
5357
+ font: 600 11px / 1.4 var(--sans);
5358
+ letter-spacing: 0.12em;
5359
+ text-transform: uppercase;
5360
+ }
5361
+
5362
+ .garden-ui-preview .page-intro.sh-head h1 {
5363
+ margin: 0;
5364
+ font: 700 var(--fs-display) / 1.2 var(--sans);
5365
+ color: var(--ink);
5366
+ letter-spacing: 0;
5367
+ text-wrap: balance;
5368
+ }
5369
+
5370
+ .garden-ui-preview .page-intro.sh-head .sh-deck {
5371
+ margin: 14px 0 0;
5372
+ }
5373
+
5374
+ .garden-ui-preview .page-intro.sh-head .page-intro-actions {
5375
+ margin-top: 22px;
5376
+ }
5377
+
5378
+ .garden-ui-preview .thoughts-page,
5379
+ .garden-ui-preview .about-page {
5380
+ width: auto;
5381
+ max-width: none;
5382
+ }
5383
+
5384
+ .garden-ui-preview .about-page {
5385
+ padding-bottom: 120px;
5386
+ }
5387
+
5388
+ /* Keep PageIntro at --list; focus card sticks to the right edge. */
5389
+ .garden-ui-preview .about-page .about-grid {
5390
+ width: 100%;
5391
+ max-width: none;
5392
+ display: grid;
5393
+ grid-template-columns: minmax(0, var(--list)) minmax(12rem, 17rem);
5394
+ column-gap: 48px;
5395
+ row-gap: 36px;
5396
+ justify-content: space-between;
5397
+ align-items: start;
5398
+ }
5399
+
5400
+ @media (max-width: 900px) {
5401
+ .garden-ui-preview .about-page .about-grid {
5402
+ grid-template-columns: 1fr;
5403
+ }
5404
+ }
5405
+
5406
+ /* SeriesEdgeNav: fixed to viewport left on column posts that share PostReadingView.
5407
+ post-reading-page already lays out article + TOC; ticks are position:fixed so
5408
+ they do not need a grid track. */
5409
+ .garden-ui-preview .post-reading-page > .series-edge {
5410
+ --edge-window-inset: 12px;
5411
+ position: fixed;
5412
+ top: calc(var(--hdr) + 12px);
5413
+ bottom: 16px;
5414
+ left: max(var(--edge-window-inset), env(safe-area-inset-left, 0px));
5415
+ z-index: 15;
5416
+ display: flex;
5417
+ align-items: center;
5418
+ pointer-events: none;
5419
+ transform: none;
5420
+ margin: 0;
5421
+ padding: 0;
5422
+ }
5423
+
5424
+ .garden-ui-preview .series-edge-ticks {
5425
+ pointer-events: auto;
5426
+ appearance: none;
5427
+ border: 0;
5428
+ background: transparent;
5429
+ box-shadow: none;
5430
+ display: flex;
5431
+ flex-direction: column;
5432
+ justify-content: center;
5433
+ align-items: center;
5434
+ gap: 8px;
5435
+ padding: 12px 6px;
5436
+ margin: 0;
5437
+ cursor: pointer;
5438
+ color: inherit;
5439
+ font: inherit;
5440
+ border-radius: 0;
5441
+ }
5442
+
5443
+ .garden-ui-preview .series-edge-ticks i {
5444
+ display: block;
5445
+ width: 11px;
5446
+ height: 1.5px;
5447
+ border-radius: 1px;
5448
+ background: color-mix(in srgb, var(--ink) 32%, transparent);
5449
+ transition: background 0.15s ease, width 0.15s ease;
5450
+ }
5451
+
5452
+ .garden-ui-preview .series-edge-ticks i.hot {
5453
+ width: 15px;
5454
+ background: color-mix(in srgb, var(--ink) 70%, transparent);
5455
+ }
5456
+
5457
+ .garden-ui-preview .series-edge[data-open="true"] .series-edge-ticks i,
5458
+ .garden-ui-preview .series-edge:focus-within .series-edge-ticks i {
5459
+ background: color-mix(in srgb, var(--ink) 52%, transparent);
5460
+ }
5461
+
5462
+ .garden-ui-preview .series-edge[data-open="true"] .series-edge-ticks i.hot,
5463
+ .garden-ui-preview .series-edge:focus-within .series-edge-ticks i.hot {
5464
+ background: var(--ink);
5465
+ }
5466
+
5467
+ .garden-ui-preview .series-edge-bridge {
5468
+ pointer-events: auto;
5469
+ position: absolute;
5470
+ top: 0;
5471
+ bottom: 0;
5472
+ left: 100%;
5473
+ width: 28px;
5474
+ }
5475
+
5476
+ .garden-ui-preview .series-edge-fly {
5477
+ pointer-events: none;
5478
+ position: absolute;
5479
+ top: 50%;
5480
+ left: calc(100% + 4px);
5481
+ transform: translate(0, -50%);
5482
+ width: 16rem;
5483
+ max-height: min(72vh, calc(100vh - var(--hdr) - 40px));
5484
+ margin: 0;
5485
+ padding: 0.7rem 0.85rem 0.75rem;
5486
+ border: 0;
5487
+ border-radius: 10px;
5488
+ background: var(--paper);
5489
+ box-shadow:
5490
+ 0 1px 2px color-mix(in srgb, var(--ink) 6%, transparent),
5491
+ 0 10px 28px color-mix(in srgb, var(--ink) 10%, transparent);
5492
+ opacity: 0;
5493
+ visibility: hidden;
5494
+ overflow: auto;
5495
+ transition: opacity 0.16s ease, visibility 0.16s ease;
5496
+ }
5497
+
5498
+ .garden-ui-preview .series-edge[data-open="true"],
5499
+ .garden-ui-preview .series-edge:focus-within {
5500
+ z-index: 28;
5501
+ }
5502
+
5503
+ .garden-ui-preview .series-edge[data-open="true"] .series-edge-fly,
5504
+ .garden-ui-preview .series-edge:focus-within .series-edge-fly {
5505
+ pointer-events: auto;
5506
+ opacity: 1;
5507
+ visibility: visible;
5508
+ }
5509
+
5510
+ .garden-ui-preview .series-edge-list {
5511
+ list-style: none;
5512
+ margin: 0;
5513
+ padding: 0;
5514
+ }
5515
+
5516
+ .garden-ui-preview .series-edge-list a {
5517
+ display: block;
5518
+ padding: 0.4rem 0.35rem;
5519
+ margin: 0 -0.35rem;
5520
+ border-radius: 7px;
5521
+ color: var(--soft);
5522
+ font-size: 13px;
5523
+ line-height: 1.35;
5524
+ text-decoration: none;
5525
+ white-space: nowrap;
5526
+ overflow: hidden;
5527
+ text-overflow: ellipsis;
5528
+ }
5529
+
5530
+ .garden-ui-preview .series-edge-list a:hover {
5531
+ background: color-mix(in srgb, var(--ink) 4%, transparent);
5532
+ color: var(--ink);
5533
+ }
5534
+
5535
+ .garden-ui-preview .series-edge-list li.cur a {
5536
+ background: color-mix(in srgb, var(--ink) 6%, transparent);
5537
+ color: var(--ink);
5538
+ font-weight: 600;
5539
+ }
5540
+
5541
+ @media (max-width: 900px) {
5542
+ /* The desktop rule is `.post-reading-page > .series-edge { display: flex }`.
5543
+ Match that specificity so the rail stays off small screens. */
5544
+ .garden-ui-preview .post-reading-page > .series-edge {
5545
+ display: none;
5546
+ }
5547
+ }
5548
+
5549
+ .garden-ui-preview {font:inherit}.garden-ui-preview .markdown-body {font:inherit}
1262
5550
  .garden-ui-typora { margin: 0.25em 0; text-align: left; white-space: normal; }
1263
5551
  .garden-suggest { display: flex; align-items: center; gap: 8px; }
1264
5552
  .garden-suggest-thumb { width: 72px; height: 48px; object-fit: cover; border-radius: 4px; background: #f6f3ec; flex: none; }