@hraness/wordcell 0.21.3 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +170 -64
  2. package/dist/{authority-4sp9d552.js → authority-1pgftmwq.js} +55 -10
  3. package/dist/benchmark.js +3 -3
  4. package/dist/capture.js +6 -5
  5. package/dist/cli.js +37 -31
  6. package/dist/clip/acquire.js +3 -2
  7. package/dist/clip/cli.js +6 -5
  8. package/dist/clip/doctor.js +4 -3
  9. package/dist/clip/jobs.js +3 -3
  10. package/dist/clip/refresh.js +1 -1
  11. package/dist/evaluation-builder.js +18 -17
  12. package/dist/evaluation-kb.js +14 -13
  13. package/dist/graph-authority.js +3 -3
  14. package/dist/graph-percolation.js +5 -5
  15. package/dist/index-0dqfnrz9.js +1985 -0
  16. package/dist/{index-0k2x4nn9.js → index-1tm7bgx7.js} +16 -4
  17. package/dist/{index-vdw5yjfa.js → index-2hf27mws.js} +108 -18
  18. package/dist/index-3agn8scn.js +306 -0
  19. package/dist/{index-0rfcqab6.js → index-4ag64rc1.js} +555 -59
  20. package/dist/index-4knsp9qj.js +34 -0
  21. package/dist/index-66pshdtx.js +341 -0
  22. package/dist/index-9rf81m0p.js +368 -0
  23. package/dist/{index-59ssmqqm.js → index-a6kbv718.js} +1 -1
  24. package/dist/{index-51bap0mq.js → index-avbce90h.js} +9 -9
  25. package/dist/{index-9zcpdbjg.js → index-de2w8crk.js} +13 -13
  26. package/dist/{index-pbr6rv47.js → index-e6p9e926.js} +6 -6
  27. package/dist/{index-bcfn9xah.js → index-famy7fhs.js} +5 -5
  28. package/dist/{index-van48n3g.js → index-fc4dr114.js} +4 -2
  29. package/dist/{index-jzcws0zn.js → index-g5vsqmdy.js} +27 -57
  30. package/dist/{index-115b07ap.js → index-hcw140eb.js} +5 -5
  31. package/dist/index-j70m75wd.js +217 -0
  32. package/dist/{index-3ehtt59c.js → index-qwgsmtsz.js} +1 -1
  33. package/dist/{index-bgfzwt4h.js → index-t2bs9xdr.js} +4 -4
  34. package/dist/index.js +285 -93
  35. package/dist/portfolio.js +14 -13
  36. package/dist/publish-model.js +36 -0
  37. package/dist/publish-reader/reader.css +1042 -0
  38. package/dist/publish-reader/reader.js +1534 -0
  39. package/dist/publish-reader/theme.js +92 -0
  40. package/dist/publish-search.js +52 -0
  41. package/dist/publish.js +36 -0
  42. package/dist/rerank-typesafe.js +13 -0
  43. package/dist/rerank.js +14 -0
  44. package/dist/sdk.js +14 -11
  45. package/dist/search.js +2 -2
  46. package/dist/semantic.js +4 -4
  47. package/dist/{support-vm4mkw0k.js → support-mywv1em0.js} +38 -32
  48. package/dist/workflows/decision-context.js +13 -12
  49. package/dist/workflows/index.js +13 -12
  50. package/package.json +63 -5
  51. package/skills/wordcell/AGENTS.md +1 -0
  52. package/skills/wordcell/SKILL.md +2 -1
  53. package/skills/wordcell/agents/openai.yaml +1 -1
  54. package/skills/wordcell/references/publish.md +93 -0
  55. package/skills/wordcell/references/query.md +22 -0
  56. package/src/cli-program.ts +347 -9
  57. package/src/index.ts +4 -0
  58. package/src/oh/authority.ts +14 -5
  59. package/src/oh/canonical-rust.ts +127 -0
  60. package/src/oh/projection-rust.ts +63 -0
  61. package/src/oh-adoption.ts +7 -1
  62. package/src/publish-graph.ts +0 -0
  63. package/src/publish-index.ts +195 -0
  64. package/src/publish-markdown.ts +617 -0
  65. package/src/publish-model.ts +599 -0
  66. package/src/publish-nav.ts +204 -0
  67. package/src/publish-pages.ts +382 -0
  68. package/src/publish-reader/reader.css +1042 -0
  69. package/src/publish-reader/reader.ts +1017 -0
  70. package/src/publish-reader/theme.ts +97 -0
  71. package/src/publish-search.ts +418 -0
  72. package/src/publish-select.ts +419 -0
  73. package/src/publish-theme.ts +106 -0
  74. package/src/publish.ts +904 -0
  75. package/src/rerank-credentials.ts +56 -0
  76. package/src/rerank-typesafe.ts +472 -0
  77. package/src/rerank.ts +389 -0
  78. package/src/sdk.ts +157 -6
  79. package/src/serve.ts +180 -0
  80. package/src/vault.ts +23 -9
  81. package/dist/{index-why54q5p.js → index-gm9t95d9.js} +3 -3
@@ -0,0 +1,1042 @@
1
+ /* Wordcell reference reader — zero-dependency, system-font, light/dark.
2
+ *
3
+ * Palette values are the resolved semantic colors of the shared
4
+ * `hraness-design-palette-v1` contract (Catppuccin, Gruvbox, Rosé Pine,
5
+ * Tokyo Night; light + dark), adapted onto the reader's --wordcell-*
6
+ * tokens. `data-palette`/`data-theme` are applied by reader/theme.js
7
+ * before first paint; pages without it fall back to the neutral
8
+ * "wordcell" palette via prefers-color-scheme below.
9
+ */
10
+
11
+ :root {
12
+ --wordcell-bg: #ffffff;
13
+ --wordcell-fg: #1a1a1a;
14
+ --wordcell-muted: #5f6368;
15
+ --wordcell-border: #e1e4e8;
16
+ --wordcell-border-strong: #a8aeb6;
17
+ --wordcell-accent: #0b5bd3;
18
+ --wordcell-accent-soft: #e9f1fc;
19
+ --wordcell-warning: #9a6700;
20
+ --wordcell-code-bg: #f6f8fa;
21
+ --wordcell-mark: #fff3bf;
22
+ --wordcell-overlay: rgba(15, 15, 15, 0.45);
23
+ --wordcell-panel: #ffffff;
24
+ --wordcell-nav-w: 14.5rem;
25
+ --wordcell-toc-w: 11rem;
26
+ }
27
+
28
+ @media (prefers-color-scheme: dark) {
29
+ :root:not([data-theme]) {
30
+ --wordcell-bg: #14151a;
31
+ --wordcell-fg: #e8e8e8;
32
+ --wordcell-muted: #9aa0a6;
33
+ --wordcell-border: #2d3138;
34
+ --wordcell-border-strong: #4a505a;
35
+ --wordcell-accent: #7aa5f8;
36
+ --wordcell-accent-soft: #1b2a44;
37
+ --wordcell-warning: #e3b341;
38
+ --wordcell-code-bg: #1d2025;
39
+ --wordcell-mark: #4d4200;
40
+ --wordcell-overlay: rgba(0, 0, 0, 0.6);
41
+ --wordcell-panel: #1d2025;
42
+ }
43
+ }
44
+
45
+ /* Shared palettes — explicit palette/theme pairs override the media-query
46
+ * defaults above. `border` is the subtle hairline (grid role); interactive
47
+ * boundaries use `border-strong` (control role). */
48
+
49
+ :root[data-palette="wordcell"][data-theme="light"] {
50
+ --wordcell-bg: #ffffff;
51
+ --wordcell-fg: #1a1a1a;
52
+ --wordcell-muted: #5f6368;
53
+ --wordcell-border: #e1e4e8;
54
+ --wordcell-border-strong: #a8aeb6;
55
+ --wordcell-accent: #0b5bd3;
56
+ --wordcell-accent-soft: #e9f1fc;
57
+ --wordcell-warning: #9a6700;
58
+ --wordcell-code-bg: #f6f8fa;
59
+ --wordcell-mark: #fff3bf;
60
+ --wordcell-overlay: rgba(15, 15, 15, 0.45);
61
+ --wordcell-panel: #ffffff;
62
+ }
63
+
64
+ :root[data-palette="wordcell"][data-theme="dark"] {
65
+ --wordcell-bg: #14151a;
66
+ --wordcell-fg: #e8e8e8;
67
+ --wordcell-muted: #9aa0a6;
68
+ --wordcell-border: #2d3138;
69
+ --wordcell-border-strong: #4a505a;
70
+ --wordcell-accent: #7aa5f8;
71
+ --wordcell-accent-soft: #1b2a44;
72
+ --wordcell-warning: #e3b341;
73
+ --wordcell-code-bg: #1d2025;
74
+ --wordcell-mark: #4d4200;
75
+ --wordcell-overlay: rgba(0, 0, 0, 0.6);
76
+ --wordcell-panel: #1d2025;
77
+ }
78
+
79
+ :root[data-palette="catppuccin"][data-theme="light"] {
80
+ --wordcell-bg: #eff1f5;
81
+ --wordcell-fg: #3a3c50;
82
+ --wordcell-muted: #545768;
83
+ --wordcell-border: #dce0e8;
84
+ --wordcell-border-strong: #6e7183;
85
+ --wordcell-accent: #1750bf;
86
+ --wordcell-accent-soft: #d6e0f5;
87
+ --wordcell-warning: #7b4e10;
88
+ --wordcell-code-bg: #e6e9ef;
89
+ --wordcell-mark: #ede5db;
90
+ --wordcell-overlay: #00000070;
91
+ --wordcell-panel: #dce0e8;
92
+ }
93
+
94
+ :root[data-palette="catppuccin"][data-theme="dark"] {
95
+ --wordcell-bg: #1e1e2e;
96
+ --wordcell-fg: #dbe1f7;
97
+ --wordcell-muted: #b2b8cf;
98
+ --wordcell-border: #313244;
99
+ --wordcell-border-strong: #9296ab;
100
+ --wordcell-accent: #92bafa;
101
+ --wordcell-accent-soft: #2b3046;
102
+ --wordcell-warning: #f9e2af;
103
+ --wordcell-code-bg: #181825;
104
+ --wordcell-mark: #38363d;
105
+ --wordcell-overlay: #000000b8;
106
+ --wordcell-panel: #313244;
107
+ }
108
+
109
+ :root[data-palette="gruvbox"][data-theme="light"] {
110
+ --wordcell-bg: #fbf1c7;
111
+ --wordcell-fg: #393533;
112
+ --wordcell-muted: #584f48;
113
+ --wordcell-border: #ebdbb2;
114
+ --wordcell-border-strong: #75685e;
115
+ --wordcell-accent: #065968;
116
+ --wordcell-accent-soft: #dee0be;
117
+ --wordcell-warning: #70490c;
118
+ --wordcell-code-bg: #f9f5d7;
119
+ --wordcell-mark: #f3e2b2;
120
+ --wordcell-overlay: #00000070;
121
+ --wordcell-panel: #ebdbb2;
122
+ }
123
+
124
+ :root[data-palette="gruvbox"][data-theme="dark"] {
125
+ --wordcell-bg: #282828;
126
+ --wordcell-fg: #f0e5c7;
127
+ --wordcell-muted: #c7baa3;
128
+ --wordcell-border: #3c3836;
129
+ --wordcell-border-strong: #a5988c;
130
+ --wordcell-accent: #a9c1b8;
131
+ --wordcell-accent-soft: #333735;
132
+ --wordcell-warning: #fabd2f;
133
+ --wordcell-code-bg: #1d2021;
134
+ --wordcell-mark: #413a29;
135
+ --wordcell-overlay: #000000b8;
136
+ --wordcell-panel: #3c3836;
137
+ }
138
+
139
+ :root[data-palette="rose-pine"][data-theme="light"] {
140
+ --wordcell-bg: #faf4ed;
141
+ --wordcell-fg: #44405e;
142
+ --wordcell-muted: #605c74;
143
+ --wordcell-border: #f2e9e1;
144
+ --wordcell-border-strong: #797593;
145
+ --wordcell-accent: #68587a;
146
+ --wordcell-accent-soft: #ede5e5;
147
+ --wordcell-warning: #81561d;
148
+ --wordcell-code-bg: #fffaf3;
149
+ --wordcell-mark: #f8ead7;
150
+ --wordcell-overlay: #00000070;
151
+ --wordcell-panel: #f2e9e1;
152
+ }
153
+
154
+ :root[data-palette="rose-pine"][data-theme="dark"] {
155
+ --wordcell-bg: #191724;
156
+ --wordcell-fg: #e0def4;
157
+ --wordcell-muted: #adaac0;
158
+ --wordcell-border: #26233a;
159
+ --wordcell-border-strong: #908caa;
160
+ --wordcell-accent: #c4a7e7;
161
+ --wordcell-accent-soft: #2e283b;
162
+ --wordcell-warning: #f6c177;
163
+ --wordcell-code-bg: #1f1d2e;
164
+ --wordcell-mark: #342b2e;
165
+ --wordcell-overlay: #000000b8;
166
+ --wordcell-panel: #26233a;
167
+ }
168
+
169
+ :root[data-palette="tokyo-night"][data-theme="light"] {
170
+ --wordcell-bg: #e1e2e7;
171
+ --wordcell-fg: #1c3161;
172
+ --wordcell-muted: #414c76;
173
+ --wordcell-border: #c4c8da;
174
+ --wordcell-border-strong: #56659d;
175
+ --wordcell-accent: #1d4e90;
176
+ --wordcell-accent-soft: #ccd6e7;
177
+ --wordcell-warning: #614b2b;
178
+ --wordcell-code-bg: #d0d5e3;
179
+ --wordcell-mark: #d7d4d3;
180
+ --wordcell-overlay: #00000070;
181
+ --wordcell-panel: #c4c8da;
182
+ }
183
+
184
+ :root[data-palette="tokyo-night"][data-theme="dark"] {
185
+ --wordcell-bg: #1a1b26;
186
+ --wordcell-fg: #c0caf5;
187
+ --wordcell-muted: #a9b1d6;
188
+ --wordcell-border: #24283b;
189
+ --wordcell-border-strong: #737aa2;
190
+ --wordcell-accent: #7aa2f7;
191
+ --wordcell-accent-soft: #262b3f;
192
+ --wordcell-warning: #e0af68;
193
+ --wordcell-code-bg: #16161e;
194
+ --wordcell-mark: #322d2e;
195
+ --wordcell-overlay: #000000b8;
196
+ --wordcell-panel: #24283b;
197
+ }
198
+
199
+ html {
200
+ color-scheme: light dark;
201
+ }
202
+
203
+ :root[data-theme="light"] {
204
+ color-scheme: light;
205
+ }
206
+
207
+ :root[data-theme="dark"] {
208
+ color-scheme: dark;
209
+ }
210
+
211
+ body {
212
+ margin: 0;
213
+ background: var(--wordcell-bg);
214
+ color: var(--wordcell-fg);
215
+ font: 16px/1.65 ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
216
+ }
217
+
218
+ .skip-link {
219
+ position: absolute;
220
+ left: -9999px;
221
+ top: 0;
222
+ padding: 0.4rem 0.8rem;
223
+ background: var(--wordcell-panel);
224
+ color: var(--wordcell-accent);
225
+ border: 1px solid var(--wordcell-border);
226
+ border-radius: 0 0 0.5rem 0;
227
+ z-index: 60;
228
+ }
229
+
230
+ .skip-link:focus {
231
+ left: 0;
232
+ }
233
+
234
+ .site-header {
235
+ display: flex;
236
+ align-items: center;
237
+ justify-content: space-between;
238
+ gap: 1rem;
239
+ max-width: 76rem;
240
+ margin: 0 auto;
241
+ padding: 0.65rem 1.25rem;
242
+ border-bottom: 1px solid var(--wordcell-border);
243
+ }
244
+
245
+ .site-title {
246
+ color: var(--wordcell-fg);
247
+ font-weight: 650;
248
+ font-size: 0.95rem;
249
+ text-decoration: none;
250
+ }
251
+
252
+ .site-actions {
253
+ display: flex;
254
+ align-items: center;
255
+ gap: 0.75rem;
256
+ }
257
+
258
+ .graph-link {
259
+ color: var(--wordcell-muted);
260
+ text-decoration: none;
261
+ font-size: 0.9rem;
262
+ padding: 0.3rem 0.6rem;
263
+ border-radius: 0.5rem;
264
+ }
265
+
266
+ .graph-link:hover {
267
+ color: var(--wordcell-fg);
268
+ background: var(--wordcell-code-bg);
269
+ }
270
+
271
+ .graph-link[aria-current="page"] {
272
+ color: var(--wordcell-accent);
273
+ font-weight: 600;
274
+ }
275
+
276
+ .search-button {
277
+ display: inline-flex;
278
+ align-items: center;
279
+ gap: 0.5rem;
280
+ padding: 0.3rem 0.7rem;
281
+ border: 1px solid var(--wordcell-border);
282
+ border-radius: 0.5rem;
283
+ background: transparent;
284
+ color: var(--wordcell-muted);
285
+ font: inherit;
286
+ font-size: 0.9rem;
287
+ cursor: pointer;
288
+ }
289
+
290
+ .search-button:hover {
291
+ color: var(--wordcell-fg);
292
+ background: var(--wordcell-code-bg);
293
+ }
294
+
295
+ .search-button kbd {
296
+ padding: 0 0.35rem;
297
+ border: 1px solid var(--wordcell-border);
298
+ border-radius: 0.25rem;
299
+ font: 0.75em ui-monospace, monospace;
300
+ }
301
+
302
+ /* Appearance menu — the single icon control at the rightmost header
303
+ * action, injected by the reader bundle (absent without JavaScript). */
304
+
305
+ .appearance {
306
+ position: relative;
307
+ }
308
+
309
+ .appearance-trigger {
310
+ display: inline-flex;
311
+ align-items: center;
312
+ justify-content: center;
313
+ width: 1.9rem;
314
+ height: 1.9rem;
315
+ padding: 0;
316
+ border: 1px solid transparent;
317
+ border-radius: 0.5rem;
318
+ background: transparent;
319
+ color: var(--wordcell-muted);
320
+ cursor: pointer;
321
+ }
322
+
323
+ .appearance-trigger:hover {
324
+ color: var(--wordcell-fg);
325
+ background: var(--wordcell-code-bg);
326
+ }
327
+
328
+ .appearance-trigger[aria-expanded="true"] {
329
+ color: var(--wordcell-accent);
330
+ background: var(--wordcell-accent-soft);
331
+ }
332
+
333
+ .appearance-menu {
334
+ position: absolute;
335
+ top: calc(100% + 0.4rem);
336
+ right: 0;
337
+ z-index: 40;
338
+ min-width: 11.5rem;
339
+ margin: 0;
340
+ padding: 0.45rem;
341
+ border: 1px solid var(--wordcell-border);
342
+ border-radius: 0.65rem;
343
+ background: var(--wordcell-panel);
344
+ box-shadow: 0 10px 32px rgba(0, 0, 0, 0.18);
345
+ font-size: 0.85rem;
346
+ }
347
+
348
+ .appearance-menu[hidden] {
349
+ display: none;
350
+ }
351
+
352
+ .appearance-group {
353
+ padding: 0.15rem 0;
354
+ }
355
+
356
+ .appearance-group + .appearance-group {
357
+ border-top: 1px solid var(--wordcell-border);
358
+ margin-top: 0.3rem;
359
+ padding-top: 0.45rem;
360
+ }
361
+
362
+ .appearance-label {
363
+ padding: 0.1rem 0.55rem 0.3rem;
364
+ font-size: 0.7rem;
365
+ font-weight: 600;
366
+ letter-spacing: 0.05em;
367
+ text-transform: uppercase;
368
+ color: var(--wordcell-muted);
369
+ }
370
+
371
+ .appearance-option {
372
+ display: flex;
373
+ align-items: center;
374
+ gap: 0.55rem;
375
+ padding: 0.3rem 0.55rem;
376
+ border-radius: 0.4rem;
377
+ color: var(--wordcell-fg);
378
+ cursor: pointer;
379
+ line-height: 1.35;
380
+ }
381
+
382
+ .appearance-option:hover {
383
+ background: var(--wordcell-code-bg);
384
+ }
385
+
386
+ .appearance-option input {
387
+ appearance: none;
388
+ width: 0.85rem;
389
+ height: 0.85rem;
390
+ margin: 0;
391
+ flex: none;
392
+ border: 1.5px solid var(--wordcell-border-strong);
393
+ border-radius: 50%;
394
+ background: transparent;
395
+ }
396
+
397
+ .appearance-option input:checked {
398
+ border-color: var(--wordcell-accent);
399
+ background: var(--wordcell-accent);
400
+ box-shadow: inset 0 0 0 2.5px var(--wordcell-panel);
401
+ }
402
+
403
+ .appearance-option input:focus-visible {
404
+ outline: 2px solid var(--wordcell-accent);
405
+ outline-offset: 2px;
406
+ }
407
+
408
+ .appearance-option .swatch {
409
+ width: 0.85rem;
410
+ height: 0.85rem;
411
+ flex: none;
412
+ border-radius: 50%;
413
+ border: 1px solid var(--wordcell-border-strong);
414
+ }
415
+
416
+ /* Swatches show each palette's light/dark page backgrounds, split. */
417
+ .swatch-wordcell { background: linear-gradient(135deg, #ffffff 50%, #14151a 50%); }
418
+ .swatch-catppuccin { background: linear-gradient(135deg, #eff1f5 50%, #1e1e2e 50%); }
419
+ .swatch-gruvbox { background: linear-gradient(135deg, #fbf1c7 50%, #282828 50%); }
420
+ .swatch-rose-pine { background: linear-gradient(135deg, #faf4ed 50%, #191724 50%); }
421
+ .swatch-tokyo-night { background: linear-gradient(135deg, #e1e2e7 50%, #1a1b26 50%); }
422
+
423
+ a:focus-visible,
424
+ button:focus-visible,
425
+ summary:focus-visible {
426
+ outline: 2px solid var(--wordcell-accent);
427
+ outline-offset: 2px;
428
+ border-radius: 0.3rem;
429
+ }
430
+
431
+ ::selection {
432
+ background: var(--wordcell-accent-soft);
433
+ }
434
+
435
+ .site-layout {
436
+ display: grid;
437
+ grid-template-columns: var(--wordcell-nav-w) minmax(0, 1fr);
438
+ gap: 0 2rem;
439
+ max-width: 76rem;
440
+ margin: 0 auto;
441
+ padding: 0 1.25rem;
442
+ align-items: start;
443
+ }
444
+
445
+ .site-layout-flat {
446
+ grid-template-columns: minmax(0, 1fr);
447
+ }
448
+
449
+ /* Sidebar tree */
450
+
451
+ .site-nav {
452
+ position: sticky;
453
+ top: 0;
454
+ max-height: 100vh;
455
+ overflow-y: auto;
456
+ padding: 1.25rem 0.5rem 2rem 0;
457
+ font-size: 0.9rem;
458
+ scrollbar-width: thin;
459
+ }
460
+
461
+ .site-tree,
462
+ .site-tree ul {
463
+ list-style: none;
464
+ margin: 0;
465
+ padding: 0;
466
+ }
467
+
468
+ .site-tree ul {
469
+ padding-left: 0.9rem;
470
+ border-left: 1px solid var(--wordcell-border);
471
+ margin-left: 0.55rem;
472
+ }
473
+
474
+ .site-tree-leaf,
475
+ .site-tree-self,
476
+ .site-tree-more {
477
+ margin: 0.1rem 0;
478
+ }
479
+
480
+ .site-tree-link {
481
+ display: block;
482
+ padding: 0.15rem 0.5rem;
483
+ border-radius: 0.4rem;
484
+ color: var(--wordcell-fg);
485
+ text-decoration: none;
486
+ line-height: 1.4;
487
+ }
488
+
489
+ .site-tree-link:hover {
490
+ background: var(--wordcell-code-bg);
491
+ }
492
+
493
+ .site-tree-link.site-tree-current {
494
+ color: var(--wordcell-accent);
495
+ font-weight: 600;
496
+ background: var(--wordcell-accent-soft);
497
+ }
498
+
499
+ .site-tree-empty {
500
+ display: block;
501
+ padding: 0.15rem 0.5rem;
502
+ color: var(--wordcell-muted);
503
+ }
504
+
505
+ .site-tree-group > details > summary {
506
+ cursor: pointer;
507
+ padding: 0.15rem 0.5rem;
508
+ border-radius: 0.4rem;
509
+ color: var(--wordcell-muted);
510
+ font-weight: 550;
511
+ line-height: 1.4;
512
+ list-style-position: outside;
513
+ }
514
+
515
+ .site-tree-group > details > summary:hover {
516
+ background: var(--wordcell-code-bg);
517
+ color: var(--wordcell-fg);
518
+ }
519
+
520
+ .site-tree-self > .site-tree-link {
521
+ font-style: italic;
522
+ }
523
+
524
+ .site-tree-more a {
525
+ display: block;
526
+ padding: 0.15rem 0.5rem;
527
+ color: var(--wordcell-muted);
528
+ font-size: 0.82rem;
529
+ text-decoration: none;
530
+ }
531
+
532
+ .site-tree-more a:hover {
533
+ color: var(--wordcell-accent);
534
+ }
535
+
536
+ /* Main column */
537
+
538
+ main {
539
+ min-width: 0;
540
+ padding: 1.5rem 0 4rem;
541
+ }
542
+
543
+ .breadcrumbs {
544
+ font-size: 0.82rem;
545
+ color: var(--wordcell-muted);
546
+ margin: 0 0 1rem;
547
+ }
548
+
549
+ .breadcrumbs ol {
550
+ display: flex;
551
+ flex-wrap: wrap;
552
+ align-items: center;
553
+ gap: 0.15rem;
554
+ margin: 0;
555
+ padding: 0;
556
+ list-style: none;
557
+ }
558
+
559
+ .breadcrumbs li + li::before {
560
+ content: "/";
561
+ margin: 0 0.45rem;
562
+ color: var(--wordcell-border);
563
+ }
564
+
565
+ .breadcrumbs a {
566
+ color: var(--wordcell-muted);
567
+ text-decoration: none;
568
+ }
569
+
570
+ .breadcrumbs a:hover {
571
+ color: var(--wordcell-accent);
572
+ text-decoration: underline;
573
+ }
574
+
575
+ .breadcrumbs [aria-current="page"] {
576
+ color: var(--wordcell-fg);
577
+ font-weight: 550;
578
+ }
579
+
580
+ .note-columns {
581
+ display: grid;
582
+ grid-template-columns: minmax(0, 1fr) var(--wordcell-toc-w);
583
+ gap: 1.5rem;
584
+ align-items: start;
585
+ }
586
+
587
+ .note-toc {
588
+ position: sticky;
589
+ top: 1.25rem;
590
+ font-size: 0.82rem;
591
+ border-left: 1px solid var(--wordcell-border);
592
+ padding-left: 1rem;
593
+ max-height: calc(100vh - 2.5rem);
594
+ overflow-y: auto;
595
+ }
596
+
597
+ .note-toc h2 {
598
+ margin: 0 0 0.5rem;
599
+ font-size: 0.75rem;
600
+ font-weight: 600;
601
+ letter-spacing: 0.04em;
602
+ text-transform: uppercase;
603
+ color: var(--wordcell-muted);
604
+ }
605
+
606
+ .note-toc ol {
607
+ list-style: none;
608
+ margin: 0;
609
+ padding: 0;
610
+ }
611
+
612
+ .note-toc li {
613
+ margin: 0.3rem 0;
614
+ }
615
+
616
+ .note-toc a {
617
+ color: var(--wordcell-muted);
618
+ text-decoration: none;
619
+ display: block;
620
+ line-height: 1.35;
621
+ }
622
+
623
+ .note-toc a:hover {
624
+ color: var(--wordcell-accent);
625
+ }
626
+
627
+ .note-toc .toc-level-2 { padding-left: 0.8rem; }
628
+ .note-toc .toc-level-3,
629
+ .note-toc .toc-level-4 { padding-left: 1.6rem; }
630
+
631
+ .note {
632
+ max-width: 42rem;
633
+ }
634
+
635
+ .note h1 {
636
+ margin: 0 0 0.5rem;
637
+ font-size: 1.8rem;
638
+ line-height: 1.25;
639
+ letter-spacing: -0.01em;
640
+ text-wrap: balance;
641
+ }
642
+
643
+ .note-meta {
644
+ display: flex;
645
+ flex-wrap: wrap;
646
+ gap: 0.4rem;
647
+ margin: 0.25rem 0 1rem;
648
+ }
649
+
650
+ .note-type,
651
+ .note-tag {
652
+ padding: 0.08rem 0.55rem;
653
+ border: 1px solid var(--wordcell-border);
654
+ border-radius: 999px;
655
+ color: var(--wordcell-muted);
656
+ font-size: 0.78rem;
657
+ }
658
+
659
+ .note-aliases {
660
+ color: var(--wordcell-muted);
661
+ font-size: 0.9rem;
662
+ margin: 0 0 1rem;
663
+ }
664
+
665
+ .note-body {
666
+ line-height: 1.7;
667
+ }
668
+
669
+ .note-body p,
670
+ .note-body li {
671
+ text-wrap: pretty;
672
+ }
673
+
674
+ .note-body h2,
675
+ .note-body h3,
676
+ .note-body h4 {
677
+ text-wrap: balance;
678
+ letter-spacing: -0.005em;
679
+ }
680
+
681
+ .note-body a {
682
+ color: var(--wordcell-accent);
683
+ text-decoration-thickness: 0.06em;
684
+ text-underline-offset: 0.14em;
685
+ }
686
+
687
+ .note-body hr {
688
+ border: 0;
689
+ border-top: 1px solid var(--wordcell-border);
690
+ margin: 2rem 0;
691
+ }
692
+
693
+ .note-body img {
694
+ max-width: 100%;
695
+ height: auto;
696
+ }
697
+
698
+ .note-body pre {
699
+ overflow-x: auto;
700
+ padding: 0.9rem 1rem;
701
+ border-radius: 0.5rem;
702
+ background: var(--wordcell-code-bg);
703
+ }
704
+
705
+ .note-body code {
706
+ font: 0.9em ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
707
+ }
708
+
709
+ .note-body p code,
710
+ .note-body li code,
711
+ .note-body td code {
712
+ padding: 0.1rem 0.3rem;
713
+ border-radius: 0.3rem;
714
+ background: var(--wordcell-code-bg);
715
+ }
716
+
717
+ .note-body blockquote {
718
+ margin: 1rem 0;
719
+ padding-left: 1rem;
720
+ border-left: 3px solid var(--wordcell-border);
721
+ color: var(--wordcell-muted);
722
+ }
723
+
724
+ .note-body table {
725
+ border-collapse: collapse;
726
+ width: 100%;
727
+ margin: 1rem 0;
728
+ }
729
+
730
+ .note-body th,
731
+ .note-body td {
732
+ padding: 0.45rem 0.7rem;
733
+ border: 1px solid var(--wordcell-border);
734
+ text-align: left;
735
+ }
736
+
737
+ .note-body mark,
738
+ .wordcell-search-results mark {
739
+ background: var(--wordcell-mark);
740
+ color: inherit;
741
+ border-radius: 0.15rem;
742
+ padding: 0 0.05rem;
743
+ }
744
+
745
+ .note-body .unresolved {
746
+ color: var(--wordcell-muted);
747
+ border-bottom: 1px dashed var(--wordcell-border);
748
+ }
749
+
750
+ .note-body input[type="checkbox"] {
751
+ margin-right: 0.35rem;
752
+ }
753
+
754
+ .note-aside {
755
+ margin-top: 2.5rem;
756
+ padding-top: 1rem;
757
+ border-top: 1px solid var(--wordcell-border);
758
+ display: grid;
759
+ gap: 1.25rem;
760
+ }
761
+
762
+ .note-aside h2 {
763
+ margin: 0 0 0.5rem;
764
+ font-size: 0.95rem;
765
+ color: var(--wordcell-muted);
766
+ font-weight: 600;
767
+ text-transform: none;
768
+ }
769
+
770
+ .note-aside ul {
771
+ margin: 0;
772
+ padding-left: 1.2rem;
773
+ }
774
+
775
+ .note-aside a {
776
+ color: var(--wordcell-accent);
777
+ text-decoration: none;
778
+ }
779
+
780
+ .note-aside .predicate {
781
+ color: var(--wordcell-muted);
782
+ font-size: 0.85rem;
783
+ }
784
+
785
+ .catalog-group h2 {
786
+ margin: 1.5rem 0 0.5rem;
787
+ font-size: 1.05rem;
788
+ color: var(--wordcell-muted);
789
+ font-weight: 600;
790
+ }
791
+
792
+ .catalog-group ul {
793
+ margin: 0;
794
+ padding-left: 1.2rem;
795
+ list-style: none;
796
+ }
797
+
798
+ .catalog-group a {
799
+ color: var(--wordcell-accent);
800
+ text-decoration: none;
801
+ }
802
+
803
+ .catalog-group a:hover {
804
+ text-decoration: underline;
805
+ }
806
+
807
+ /* Graph page */
808
+
809
+ .graph-lede {
810
+ color: var(--wordcell-muted);
811
+ font-size: 0.9rem;
812
+ }
813
+
814
+ .graph-shell {
815
+ position: relative;
816
+ border: 1px solid var(--wordcell-border);
817
+ border-radius: 0.75rem;
818
+ overflow: hidden;
819
+ background: var(--wordcell-code-bg);
820
+ }
821
+
822
+ .graph-canvas {
823
+ display: block;
824
+ width: 100%;
825
+ height: 62vh;
826
+ min-height: 22rem;
827
+ cursor: grab;
828
+ touch-action: none;
829
+ outline: none;
830
+ }
831
+
832
+ .graph-canvas:focus-visible {
833
+ box-shadow: inset 0 0 0 2px var(--wordcell-accent);
834
+ }
835
+
836
+ .graph-status {
837
+ position: absolute;
838
+ inset-inline: 0;
839
+ top: 0.75rem;
840
+ margin: 0 auto;
841
+ width: fit-content;
842
+ max-width: 90%;
843
+ padding: 0.4rem 0.9rem;
844
+ border: 1px solid var(--wordcell-border);
845
+ border-radius: 999px;
846
+ background: var(--wordcell-panel);
847
+ color: var(--wordcell-muted);
848
+ font-size: 0.8rem;
849
+ text-align: center;
850
+ }
851
+
852
+ .graph-toolbar {
853
+ position: absolute;
854
+ inset-inline: 0;
855
+ bottom: 0;
856
+ display: flex;
857
+ align-items: center;
858
+ justify-content: space-between;
859
+ gap: 0.75rem;
860
+ padding: 0.5rem 0.75rem;
861
+ background: color-mix(in srgb, var(--wordcell-panel) 82%, transparent);
862
+ border-top: 1px solid var(--wordcell-border);
863
+ font-size: 0.78rem;
864
+ color: var(--wordcell-muted);
865
+ }
866
+
867
+ .graph-reset {
868
+ border: 1px solid var(--wordcell-border-strong);
869
+ border-radius: 0.45rem;
870
+ background: var(--wordcell-panel);
871
+ color: var(--wordcell-fg);
872
+ font: inherit;
873
+ font-size: 0.78rem;
874
+ padding: 0.25rem 0.7rem;
875
+ cursor: pointer;
876
+ }
877
+
878
+ .graph-reset:hover {
879
+ background: var(--wordcell-code-bg);
880
+ }
881
+
882
+ .graph-legend {
883
+ display: inline-flex;
884
+ align-items: center;
885
+ gap: 0.45rem;
886
+ }
887
+
888
+ .graph-edge {
889
+ display: inline-block;
890
+ width: 1.4rem;
891
+ border-top: 2px solid var(--wordcell-border);
892
+ }
893
+
894
+ .graph-edge-relation {
895
+ border-top-style: dashed;
896
+ }
897
+
898
+ .graph-index {
899
+ columns: 2;
900
+ list-style: none;
901
+ padding: 0;
902
+ margin: 0.5rem 0 0;
903
+ }
904
+
905
+ .graph-index li {
906
+ break-inside: avoid;
907
+ margin: 0.15rem 0;
908
+ }
909
+
910
+ .graph-index a {
911
+ color: var(--wordcell-accent);
912
+ text-decoration: none;
913
+ }
914
+
915
+ .graph-index a:hover {
916
+ text-decoration: underline;
917
+ }
918
+
919
+ .site-footer {
920
+ max-width: 76rem;
921
+ margin: 0 auto;
922
+ padding: 1rem 1.25rem 2rem;
923
+ border-top: 1px solid var(--wordcell-border);
924
+ color: var(--wordcell-muted);
925
+ font-size: 0.85rem;
926
+ }
927
+
928
+ .site-footer a {
929
+ color: inherit;
930
+ }
931
+
932
+ /* Search overlay */
933
+
934
+ .wordcell-search-overlay {
935
+ position: fixed;
936
+ inset: 0;
937
+ z-index: 50;
938
+ display: flex;
939
+ align-items: flex-start;
940
+ justify-content: center;
941
+ padding: 12vh 1rem 1rem;
942
+ background: var(--wordcell-overlay);
943
+ }
944
+
945
+ .wordcell-search-panel {
946
+ width: 100%;
947
+ max-width: 36rem;
948
+ border: 1px solid var(--wordcell-border);
949
+ border-radius: 0.75rem;
950
+ background: var(--wordcell-panel);
951
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.25);
952
+ overflow: hidden;
953
+ }
954
+
955
+ .wordcell-search-panel input {
956
+ width: 100%;
957
+ box-sizing: border-box;
958
+ padding: 0.9rem 1rem;
959
+ border: 0;
960
+ border-bottom: 1px solid var(--wordcell-border);
961
+ background: transparent;
962
+ color: var(--wordcell-fg);
963
+ font: inherit;
964
+ outline: none;
965
+ }
966
+
967
+ .wordcell-search-status {
968
+ padding: 0.35rem 1rem;
969
+ color: var(--wordcell-muted);
970
+ font-size: 0.8rem;
971
+ }
972
+
973
+ .wordcell-search-results {
974
+ margin: 0;
975
+ padding: 0.25rem;
976
+ list-style: none;
977
+ max-height: 55vh;
978
+ overflow-y: auto;
979
+ }
980
+
981
+ .wordcell-search-results a {
982
+ display: block;
983
+ padding: 0.55rem 0.75rem;
984
+ border-radius: 0.5rem;
985
+ color: var(--wordcell-fg);
986
+ text-decoration: none;
987
+ }
988
+
989
+ .wordcell-search-results a.active,
990
+ .wordcell-search-results a:hover {
991
+ background: var(--wordcell-accent-soft);
992
+ }
993
+
994
+ .wordcell-search-results .title {
995
+ display: block;
996
+ font-weight: 600;
997
+ }
998
+
999
+ .wordcell-search-results .snippet {
1000
+ display: block;
1001
+ color: var(--wordcell-muted);
1002
+ font-size: 0.85rem;
1003
+ }
1004
+
1005
+ @media (max-width: 68rem) {
1006
+ .note-columns {
1007
+ grid-template-columns: minmax(0, 1fr);
1008
+ }
1009
+
1010
+ .note-toc {
1011
+ display: none;
1012
+ }
1013
+ }
1014
+
1015
+ @media (max-width: 56rem) {
1016
+ .site-layout {
1017
+ grid-template-columns: minmax(0, 1fr);
1018
+ }
1019
+
1020
+ .site-nav {
1021
+ position: static;
1022
+ max-height: 18rem;
1023
+ border-bottom: 1px solid var(--wordcell-border);
1024
+ margin-bottom: 0.5rem;
1025
+ padding: 0.75rem 0;
1026
+ }
1027
+
1028
+ .graph-index {
1029
+ columns: 1;
1030
+ }
1031
+ }
1032
+
1033
+ @media (prefers-reduced-motion: no-preference) {
1034
+ .wordcell-search-overlay {
1035
+ animation: wordcell-fade-in 120ms ease-out;
1036
+ }
1037
+
1038
+ @keyframes wordcell-fade-in {
1039
+ from { opacity: 0; }
1040
+ to { opacity: 1; }
1041
+ }
1042
+ }