@takazudo/zudo-doc 8.1.2 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -1
  3. package/dist/ai-chat-modal/index.js +1 -0
  4. package/dist/catalog.js +1 -1
  5. package/dist/chrome/derive.js +2 -2
  6. package/dist/config.d.ts +13 -7
  7. package/dist/config.js +6 -0
  8. package/dist/footer/footer.js +1 -1
  9. package/dist/head-with-defaults/index.js +2 -2
  10. package/dist/metainfo/doc-tags.js +3 -0
  11. package/dist/nav-indexing/tag-nav.js +7 -1
  12. package/dist/preset.d.ts +10 -4
  13. package/dist/preset.js +11 -1
  14. package/dist/route-context-payload/index.d.ts +4 -1
  15. package/dist/route-context-payload/index.js +6 -0
  16. package/dist/settings-defaults.js +3 -1
  17. package/dist/settings.d.ts +9 -5
  18. package/dist/theme/theme-pack-provider.d.ts +4 -2
  19. package/dist/theme/theme-pack-provider.js +2 -1
  20. package/dist/theme-cli/config-io.js +26 -3
  21. package/dist/theme-cli/list.js +1 -1
  22. package/dist/theme-packs/default/meta.json +2 -2
  23. package/dist/theme-packs/drift/pack.css +50 -15
  24. package/dist/theme-packs/fjord/pack.css +55 -14
  25. package/dist/theme-packs/graphite/meta.json +37 -0
  26. package/dist/theme-packs/graphite/pack.css +401 -0
  27. package/dist/theme-packs/hollow/pack.css +51 -16
  28. package/dist/theme-packs/manuscript/pack.css +57 -12
  29. package/dist/theme-packs/matcha/pack.css +46 -13
  30. package/dist/theme-packs/nocturne/pack.css +46 -10
  31. package/dist/theme-packs/observatory/pack.css +61 -20
  32. package/dist/theme-packs/quiet-slate/meta.json +37 -0
  33. package/dist/theme-packs/quiet-slate/pack.css +401 -0
  34. package/dist/theme-packs/sakura/pack.css +58 -16
  35. package/dist/theme-packs/solar/pack.css +43 -10
  36. package/dist/theme-packs/warm-mineral/meta.json +37 -0
  37. package/dist/theme-packs/warm-mineral/pack.css +401 -0
  38. package/dist/theme-packs-registry/configured-theme-pack.d.ts +21 -0
  39. package/dist/theme-packs-registry/configured-theme-pack.js +13 -0
  40. package/dist/theme-packs-registry/index.d.ts +1 -0
  41. package/dist/theme-packs-registry/index.js +6 -0
  42. package/dist/theme-packs-registry/resolve-enabled-packs.d.ts +13 -6
  43. package/dist/theme-packs-registry/resolve-enabled-packs.js +15 -5
  44. package/eject/footer/footer.tsx +1 -1
  45. package/package.json +9 -9
@@ -57,7 +57,7 @@
57
57
  }
58
58
 
59
59
  /* ---- Shippori Mincho — display serif for the title, h2 and the
60
- wordmark (static 600 heading weight + 700 logo weight).
60
+ wordmark (static 600 title weight + 700 h2/logo weight).
61
61
  Latin subsets only; the bare serif generic supplies CJK. ---- */
62
62
 
63
63
  @font-face {
@@ -280,22 +280,59 @@ html[data-theme-pack="sakura"] a[data-nav-active] {
280
280
  );
281
281
  }
282
282
 
283
- /* signature move #2 — the h2 petal rule: a rose stroke that loosens
284
- into drifting transparency. Re-points the SSR-inlined
285
- `style="border-image:linear-gradient(...)"` gradient — the
286
- border-image !important carve-out (Decision 6.6). */
283
+ /* signature move #2 — the h2 petal rule: a 2px rose stroke that loosens
284
+ into drifting transparency; h3 takes a quieter 1px muted rule and h4
285
+ none. The rules are top-anchored background gradients; border-image
286
+ none !important (the Decision 6.6 carve-out) keeps the SSR-inlined
287
+ `style="border-image:linear-gradient(...)"` from painting a second
288
+ bar. */
287
289
  html[data-theme-pack="sakura"] .zd-content h2:where(:not(.zd-home-heading)):where(:not(.zd-compact-prose *)) {
288
- font-size: 1.6rem;
289
- }
290
- html[data-theme-pack="sakura"] .zd-content h2 {
291
- border-top-width: 2px;
292
- border-image: linear-gradient(
293
- to right,
294
- var(--zd-accent) 0 2.5rem,
295
- color-mix(in srgb, var(--zd-accent) 30%, transparent) 55%,
296
- transparent
297
- )
298
- 1 !important;
290
+ border-image: none !important;
291
+ border-top-width: 0;
292
+ border-bottom-width: 0;
293
+ padding-top: 1.25rem;
294
+ padding-bottom: 0;
295
+ font-size: 2rem;
296
+ font-weight: 700;
297
+ line-height: 1.3;
298
+ background-image: linear-gradient(
299
+ to right,
300
+ var(--zd-accent) 0,
301
+ var(--zd-accent) 4rem,
302
+ color-mix(in oklch, var(--zd-accent) 68%, transparent) 62%,
303
+ transparent 100%
304
+ );
305
+ background-size: 100% 2px;
306
+ background-repeat: no-repeat;
307
+ background-position: top left;
308
+ }
309
+ html[data-theme-pack="sakura"] .zd-content h3:where(:not(.zd-compact-prose *)) {
310
+ border-image: none !important;
311
+ border-top-width: 0;
312
+ border-bottom-width: 0;
313
+ padding-top: 0.875rem;
314
+ padding-bottom: 0;
315
+ font-size: 1.375rem;
316
+ font-weight: 600;
317
+ line-height: 1.4;
318
+ background-image: linear-gradient(
319
+ to right,
320
+ color-mix(in oklch, var(--zd-muted) 42%, transparent),
321
+ color-mix(in oklch, var(--zd-muted) 22%, transparent) 40%,
322
+ transparent 76%
323
+ );
324
+ background-size: 100% 1px;
325
+ background-repeat: no-repeat;
326
+ background-position: top left;
327
+ }
328
+ html[data-theme-pack="sakura"] .zd-content h4:where(:not(.zd-compact-prose *)) {
329
+ border-width: 0;
330
+ padding-top: 0;
331
+ padding-bottom: 0;
332
+ font-size: 1.2rem;
333
+ font-weight: 500;
334
+ line-height: 1.45;
335
+ background-image: none;
299
336
  }
300
337
 
301
338
  /* h3 — a round blossom bud before the heading */
@@ -309,6 +346,11 @@ html[data-theme-pack="sakura"] .zd-content h3::before {
309
346
  margin-right: 0.5em;
310
347
  vertical-align: 0.12em;
311
348
  }
349
+ html[data-theme-pack="sakura"] .zd-content h3:where(:not(.zd-compact-prose *))::before {
350
+ width: 0.3em;
351
+ height: 0.3em;
352
+ opacity: 0.7;
353
+ }
312
354
 
313
355
  /* the lead — airy, one breath rosier than body ink (10.9:1+) */
314
356
  html[data-theme-pack="sakura"] .zd-content > p[data-doc-description] {
@@ -211,26 +211,59 @@ html[data-theme-pack="solar"] main nav[aria-label="Breadcrumb"] li > span {
211
211
  }
212
212
 
213
213
  /* h2 rule: a precise 2px blue→cyan fade instead of the default fg
214
- gradient. The SSR-inlined `style="border-image:linear-gradient(...)"`
215
- bar is defeated with border-image none !important (Decision 6.6's
216
- sole allowlisted carve-out) + a zeroed border-top; the fade is then
217
- painted as a 2px top-anchored background gradient. */
214
+ gradient; h3 takes a quieter 1px muted rule and h4 none. The
215
+ SSR-inlined `style="border-image:linear-gradient(...)"` bar is
216
+ defeated with border-image none !important (Decision 6.6's sole
217
+ allowlisted carve-out) + zeroed borders; each rule is painted as a
218
+ top-anchored background gradient. */
218
219
  html[data-theme-pack="solar"] .zd-content h2:where(:not(.zd-home-heading)):where(:not(.zd-compact-prose *)) {
219
- font-size: 1.5rem;
220
- }
221
- html[data-theme-pack="solar"] .zd-content h2 {
222
220
  border-image: none !important;
223
221
  border-top-width: 0;
222
+ border-bottom-width: 0;
223
+ padding-top: 1.25rem;
224
+ padding-bottom: 0;
225
+ font-size: 1.75rem;
226
+ font-weight: 700;
227
+ line-height: 1.3;
224
228
  background-image: linear-gradient(
225
229
  to right,
226
- var(--zd-accent),
227
- var(--zd-accent-hover) 45%,
228
- transparent 88%
230
+ var(--zd-accent) 0%,
231
+ var(--zd-accent) 24%,
232
+ var(--zd-accent-hover) 65%,
233
+ transparent 100%
229
234
  );
230
235
  background-size: 100% 2px;
231
236
  background-repeat: no-repeat;
232
237
  background-position: top left;
233
238
  }
239
+ html[data-theme-pack="solar"] .zd-content h3:where(:not(.zd-compact-prose *)) {
240
+ border-image: none !important;
241
+ border-top-width: 0;
242
+ border-bottom-width: 0;
243
+ padding-top: 0.875rem;
244
+ padding-bottom: 0;
245
+ font-size: 1.375rem;
246
+ font-weight: 600;
247
+ line-height: 1.4;
248
+ background-image: linear-gradient(
249
+ to right,
250
+ color-mix(in oklch, var(--zd-muted) 42%, transparent),
251
+ color-mix(in oklch, var(--zd-muted) 22%, transparent) 40%,
252
+ transparent 76%
253
+ );
254
+ background-size: 100% 1px;
255
+ background-repeat: no-repeat;
256
+ background-position: top left;
257
+ }
258
+ html[data-theme-pack="solar"] .zd-content h4:where(:not(.zd-compact-prose *)) {
259
+ border-width: 0;
260
+ padding-top: 0;
261
+ padding-bottom: 0;
262
+ font-size: 1.2rem;
263
+ font-weight: 500;
264
+ line-height: 1.45;
265
+ background-image: none;
266
+ }
234
267
 
235
268
  /* prose links: quiet underline that sharpens to cyan on hover */
236
269
  html[data-theme-pack="solar"] .zd-content a {
@@ -0,0 +1,37 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "slug": "warm-mineral",
4
+ "name": "Warm Mineral",
5
+ "description": "Warm mineral tones — sandstone paper by day, umber stone at night, a terracotta accent and quiet hairline rules.",
6
+ "mode": "dark",
7
+ "version": "1.0.0",
8
+ "fonts": {
9
+ "sans": "System",
10
+ "mono": "System",
11
+ "loaded": []
12
+ },
13
+ "preview": {
14
+ "light": {
15
+ "bg": "#F3EFE8",
16
+ "fg": "#47403A",
17
+ "accent": "#92471C",
18
+ "syntax": {
19
+ "keyword": "#92471C",
20
+ "string": "#556047",
21
+ "comment": "#655B52",
22
+ "callable": "#505E67"
23
+ }
24
+ },
25
+ "dark": {
26
+ "bg": "#2D2A27",
27
+ "fg": "#D6CFC6",
28
+ "accent": "#E5AA7D",
29
+ "syntax": {
30
+ "keyword": "#E5AA7D",
31
+ "string": "#A9B892",
32
+ "comment": "#B7ADA2",
33
+ "callable": "#A6B4BD"
34
+ }
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,401 @@
1
+ /* ============================================================
2
+ Warm Mineral — zudo-doc theme pack (ADR docs/adr/theme-packs.md)
3
+
4
+ Sandstone and umber stone, carrying a terracotta accent.
5
+ One of the three soft-tone packs (graphite, warm-mineral,
6
+ quiet-slate) that share the same component treatment and differ
7
+ only in palette. Colour only: typography, spacing, geometry and
8
+ heading hierarchy are the package defaults (no fonts loaded).
9
+
10
+ Roles beyond the public --zd-* tokens are inlined per mode:
11
+ line decorative rules, separators and tree guides
12
+ control border necessary field / control / diagram boundaries
13
+ heading heading ink, one step stronger than body text
14
+ hover bg inactive navigation hover fill
15
+ active bg current navigation fill (90% bg + 10% accent)
16
+ state bgs admonition fills (90% bg + 10% state colour)
17
+ Classic (the reserved "default" pack) shares one muted role for
18
+ text, borders and comments; these packs keep muted at readable
19
+ text contrast and give decorative rules their own quieter line.
20
+
21
+ Production-only contrast repairs (not part of the ordinary
22
+ palette): diff rows use the opaque state fills instead of the
23
+ 15% foreground tint, and code line / word highlights use opaque
24
+ active / hover fills (no stacked alpha) keeping the accent marker
25
+ and underline, so every syntax role stays >= 4.6:1.
26
+
27
+ Every rule is scoped under html[data-theme-pack="warm-mineral"]; the
28
+ pack never declares color-scheme and follows the mode the page
29
+ already resolved (light-dark()).
30
+ ============================================================ */
31
+
32
+ html[data-theme-pack="warm-mineral"] {
33
+ /* Tier-2 semantic roles */
34
+ --zd-bg: light-dark(#F3EFE8, #2D2A27);
35
+ --zd-fg: light-dark(#47403A, #D6CFC6);
36
+ --zd-surface: light-dark(#E9E3D9, #36322E);
37
+ --zd-muted: light-dark(#655B52, #B7ADA2);
38
+ --zd-accent: light-dark(#92471C, #E5AA7D);
39
+ --zd-accent-hover: light-dark(#8C441B, #E7AF84);
40
+ --zd-code-bg: light-dark(#E9E3D9, #262320);
41
+ --zd-code-fg: light-dark(#47403A, #D6CFC6);
42
+ --zd-success: light-dark(#556047, #A9B892);
43
+ --zd-danger: light-dark(#824F4A, #D3A29B);
44
+ --zd-warning: light-dark(#70592F, #D2B482);
45
+ --zd-info: light-dark(#505E67, #A6B4BD);
46
+ --zd-selection-bg: light-dark(#92471C, #E5AA7D);
47
+ --zd-selection-fg: light-dark(#F9F5EF, #292522);
48
+ --zd-matched-keyword-bg: light-dark(#92471C, #E5AA7D);
49
+ --zd-matched-keyword-fg: light-dark(#F9F5EF, #292522);
50
+ --zd-chat-user-bg: light-dark(#92471C, #E5AA7D);
51
+ --zd-chat-user-text: light-dark(#F9F5EF, #292522);
52
+ --zd-chat-assistant-bg: light-dark(#E9E3D9, #36322E);
53
+ --zd-chat-assistant-text: light-dark(#47403A, #D6CFC6);
54
+ --zd-image-overlay-bg: light-dark(#F3EFE8, #2D2A27);
55
+ --zd-image-overlay-fg: light-dark(#47403A, #D6CFC6);
56
+ /* Mermaid: text is body text; edges are necessary diagram lines */
57
+ --zd-mermaid-node-bg: light-dark(#E9E3D9, #36322E);
58
+ --zd-mermaid-text: light-dark(#47403A, #D6CFC6);
59
+ --zd-mermaid-line: light-dark(#847668, #968A7E);
60
+ --zd-mermaid-label-bg: light-dark(#F3EFE8, #2D2A27);
61
+ --zd-mermaid-note-bg: light-dark(#E4DDCF, #3D3732);
62
+
63
+ /* syntax — explicit role mapping */
64
+ --zd-syntax-comment: light-dark(#655B52, #B7ADA2);
65
+ --zd-syntax-string: light-dark(#556047, #A9B892);
66
+ --zd-syntax-number: light-dark(#70592F, #D2B482);
67
+ --zd-syntax-keyword: light-dark(#92471C, #E5AA7D);
68
+ --zd-syntax-callable: light-dark(#505E67, #A6B4BD);
69
+ --zd-syntax-type: light-dark(#70592F, #D2B482);
70
+ --zd-syntax-name: light-dark(#47403A, #D6CFC6);
71
+ --zd-syntax-inserted: light-dark(#556047, #A9B892);
72
+ --zd-syntax-deleted: light-dark(#824F4A, #D3A29B);
73
+ /* diff rows: opaque audited state fills instead of the 15% tint */
74
+ --zfb-hi-ins-bg: light-dark(#E3E1D8, #393832);
75
+ --zfb-hi-del-bg: light-dark(#E8DFD8, #3E3633);
76
+
77
+ /* Tier-3 seams */
78
+ --zdc-nav-active-indicator-color: light-dark(#E9DED4, #3F3730);
79
+ }
80
+
81
+ /* ---- page, chrome surfaces and decorative rules ---- */
82
+
83
+ html[data-theme-pack="warm-mineral"] header[data-header],
84
+ html[data-theme-pack="warm-mineral"] footer[data-footer] {
85
+ background-color: var(--zd-surface);
86
+ border-color: light-dark(#D8CEC1, #4D4640);
87
+ }
88
+
89
+ html[data-theme-pack="warm-mineral"] footer[data-footer] div {
90
+ border-color: light-dark(#D8CEC1, #4D4640);
91
+ }
92
+
93
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar,
94
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar],
95
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar div,
96
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] div,
97
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar nav,
98
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] nav {
99
+ border-color: light-dark(#D8CEC1, #4D4640);
100
+ }
101
+
102
+ html[data-theme-pack="warm-mineral"] nav[data-zd-toc] ul,
103
+ html[data-theme-pack="warm-mineral"] div[data-zd-mobile-toc],
104
+ html[data-theme-pack="warm-mineral"] div[data-zd-mobile-toc] ul {
105
+ border-color: light-dark(#D8CEC1, #4D4640);
106
+ }
107
+
108
+ html[data-theme-pack="warm-mineral"] [data-site-nav] div,
109
+ html[data-theme-pack="warm-mineral"] [data-tabs-nav],
110
+ html[data-theme-pack="warm-mineral"] [data-version-menu] > li,
111
+ html[data-theme-pack="warm-mineral"] [data-nav-more-menu] > li,
112
+ html[data-theme-pack="warm-mineral"] [data-language-menu] > li,
113
+ html[data-theme-pack="warm-mineral"] dialog[data-search-dialog] > div div,
114
+ html[data-theme-pack="warm-mineral"] dialog[data-search-dialog] [data-search-count-narrow],
115
+ html[data-theme-pack="warm-mineral"] dialog[data-doc-history-panel] > div,
116
+ html[data-theme-pack="warm-mineral"] [data-theme-pack-switcher] dialog div,
117
+ html[data-theme-pack="warm-mineral"] dialog[data-zd-ai-chat] > div > div {
118
+ border-color: light-dark(#D8CEC1, #4D4640);
119
+ }
120
+
121
+ html[data-theme-pack="warm-mineral"] .zd-content h1,
122
+ html[data-theme-pack="warm-mineral"] .zd-content table,
123
+ html[data-theme-pack="warm-mineral"] .zd-content th,
124
+ html[data-theme-pack="warm-mineral"] .zd-content td,
125
+ html[data-theme-pack="warm-mineral"] .zd-content hr,
126
+ html[data-theme-pack="warm-mineral"] .zd-content pre,
127
+ html[data-theme-pack="warm-mineral"] .zd-content .code-block-title,
128
+ html[data-theme-pack="warm-mineral"] .zd-content > section,
129
+ html[data-theme-pack="warm-mineral"] .zd-content > ol > li:not(:hover):not(:focus-within),
130
+ html[data-theme-pack="warm-mineral"] .zd-content > nav[data-doc-pager] > a:not(:hover),
131
+ html[data-theme-pack="warm-mineral"] .zd-home-rule {
132
+ border-color: light-dark(#D8CEC1, #4D4640);
133
+ }
134
+
135
+ /* ---- necessary control and field boundaries ---- */
136
+
137
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar button,
138
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] button,
139
+ html[data-theme-pack="warm-mineral"] header[data-header] button,
140
+ html[data-theme-pack="warm-mineral"] [data-nav-item-dropdown] > div > div,
141
+ html[data-theme-pack="warm-mineral"] [data-version-menu],
142
+ html[data-theme-pack="warm-mineral"] button[data-version-toggle]:not(:hover),
143
+ html[data-theme-pack="warm-mineral"] button[data-language-toggle]:not(:hover),
144
+ html[data-theme-pack="warm-mineral"] button[data-doc-history-trigger]:not(:hover),
145
+ html[data-theme-pack="warm-mineral"] button[data-switcher-launcher]:not(:hover),
146
+ html[data-theme-pack="warm-mineral"] dialog[data-search-dialog] > div,
147
+ html[data-theme-pack="warm-mineral"] [data-site-nav] button,
148
+ html[data-theme-pack="warm-mineral"] [data-nav-more-menu],
149
+ html[data-theme-pack="warm-mineral"] [data-language-menu],
150
+ html[data-theme-pack="warm-mineral"] [data-theme-pack-switcher] dialog,
151
+ html[data-theme-pack="warm-mineral"] dialog[data-zd-ai-chat] input,
152
+ html[data-theme-pack="warm-mineral"] dialog.zd-enlarge-dialog,
153
+ html[data-theme-pack="warm-mineral"] dialog.zd-mermaid-dialog,
154
+ html[data-theme-pack="warm-mineral"] .code-btn:not(:hover),
155
+ html[data-theme-pack="warm-mineral"] .zd-desktop-sidebar-toggle,
156
+ html[data-theme-pack="warm-mineral"] .zd-desktop-toc-toggle,
157
+ html[data-theme-pack="warm-mineral"] kbd {
158
+ border-color: light-dark(#847668, #968A7E);
159
+ }
160
+
161
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar [data-sidebar-filter-region] > div,
162
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] [data-sidebar-filter-region] > div {
163
+ box-shadow: inset 0 0 0 1px light-dark(#847668, #968A7E);
164
+ }
165
+
166
+ /* ---- headings ---- */
167
+
168
+ html[data-theme-pack="warm-mineral"] .zd-content h1,
169
+ html[data-theme-pack="warm-mineral"] .zd-content h2,
170
+ html[data-theme-pack="warm-mineral"] .zd-content h3,
171
+ html[data-theme-pack="warm-mineral"] .zd-content h4,
172
+ html[data-theme-pack="warm-mineral"] .zd-content h5,
173
+ html[data-theme-pack="warm-mineral"] .zd-content h6 {
174
+ color: light-dark(#38322D, #E2DBD2);
175
+ }
176
+
177
+ html[data-theme-pack="warm-mineral"] .zd-content h2:where(:not(.zd-home-heading)):where(:not(.zd-compact-prose *)) {
178
+ border-image: linear-gradient(to right, color-mix(in srgb, light-dark(#847668, #968A7E) 65%, light-dark(#F3EFE8, #2D2A27)), transparent) 1 !important;
179
+ }
180
+
181
+ html[data-theme-pack="warm-mineral"] .zd-content h3:where(:not(.zd-compact-prose *)),
182
+ html[data-theme-pack="warm-mineral"] .zd-content h4:where(:not(.zd-compact-prose *)) {
183
+ border-image: linear-gradient(to right, light-dark(#D8CEC1, #4D4640), transparent) 1 !important;
184
+ }
185
+
186
+ /* ---- code ---- */
187
+
188
+ html[data-theme-pack="warm-mineral"] .zd-content .code-block-title {
189
+ background-color: var(--zd-code-bg);
190
+ color: var(--zd-muted);
191
+ }
192
+
193
+ html[data-theme-pack="warm-mineral"] pre.hi-root .line.highlighted,
194
+ html[data-theme-pack="warm-mineral"] pre.hi-root [data-line-highlight="true"] {
195
+ background-color: light-dark(#E9DED4, #3F3730);
196
+ box-shadow: inset 3px 0 0 var(--zd-accent);
197
+ }
198
+
199
+ html[data-theme-pack="warm-mineral"] pre.hi-root .line .highlighted-word {
200
+ background-color: light-dark(#E4DDCF, #3D3732);
201
+ }
202
+
203
+ html[data-theme-pack="warm-mineral"] .zd-content th,
204
+ html[data-theme-pack="warm-mineral"] .zd-content thead {
205
+ background-color: var(--zd-surface);
206
+ }
207
+
208
+ /* ---- current navigation: active fill, accent text, 3px marker ---- */
209
+
210
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar a[aria-current="page"],
211
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] a[aria-current="page"],
212
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar div:has(> a[aria-current="page"]),
213
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] div:has(> a[aria-current="page"]) {
214
+ background-color: light-dark(#E9DED4, #3F3730);
215
+ color: var(--zd-accent);
216
+ }
217
+
218
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar a[aria-current="page"],
219
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] a[aria-current="page"] {
220
+ box-shadow: inset 3px 0 0 var(--zd-accent);
221
+ }
222
+
223
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar a[aria-current="page"] *,
224
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] a[aria-current="page"] *,
225
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar div:has(> a[aria-current="page"]) > button,
226
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] div:has(> a[aria-current="page"]) > button,
227
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar div:has(> a[aria-current="page"]) > button *,
228
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] div:has(> a[aria-current="page"]) > button * {
229
+ color: var(--zd-accent);
230
+ }
231
+
232
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar div:has(> a[aria-current="page"]) > button,
233
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] div:has(> a[aria-current="page"]) > button {
234
+ background-color: transparent;
235
+ border-color: light-dark(#847668, #968A7E);
236
+ }
237
+
238
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar a[aria-current="page"]:hover,
239
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] a[aria-current="page"]:hover,
240
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar a[aria-current="page"]:focus-visible,
241
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] a[aria-current="page"]:focus-visible,
242
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar div:has(> a[aria-current="page"]) > button:hover,
243
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] div:has(> a[aria-current="page"]) > button:hover,
244
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar div:has(> a[aria-current="page"]) > button:focus-visible,
245
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] div:has(> a[aria-current="page"]) > button:focus-visible {
246
+ background-color: light-dark(#E9DED4, #3F3730);
247
+ color: var(--zd-accent-hover);
248
+ }
249
+
250
+ html[data-theme-pack="warm-mineral"] [data-header-nav] a[aria-current="page"],
251
+ html[data-theme-pack="warm-mineral"] [data-header-nav] a[aria-current="page"]:hover,
252
+ html[data-theme-pack="warm-mineral"] [data-header-nav] a[aria-current="page"]:focus-visible {
253
+ background-color: light-dark(#E9DED4, #3F3730);
254
+ color: var(--zd-accent);
255
+ box-shadow: inset 0 -3px 0 var(--zd-accent);
256
+ }
257
+
258
+ html[data-theme-pack="warm-mineral"] [data-header-nav] a[aria-current="page"] * {
259
+ color: var(--zd-accent);
260
+ }
261
+
262
+ html[data-theme-pack="warm-mineral"] nav[data-zd-toc] a {
263
+ padding-inline: 0.5rem;
264
+ }
265
+
266
+ html[data-theme-pack="warm-mineral"] nav[data-zd-toc] a[aria-current="true"] {
267
+ background-color: light-dark(#E9DED4, #3F3730);
268
+ color: var(--zd-accent);
269
+ box-shadow: inset 3px 0 0 var(--zd-accent);
270
+ }
271
+
272
+ /* ---- inactive navigation hover ---- */
273
+
274
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar [data-sidebar-tree-root] a:not([aria-current="page"]):hover,
275
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] [data-sidebar-tree-root] a:not([aria-current="page"]):hover {
276
+ background-color: light-dark(#E4DDCF, #3D3732);
277
+ color: var(--zd-accent);
278
+ }
279
+
280
+ html[data-theme-pack="warm-mineral"] [data-site-nav] a:hover {
281
+ color: var(--zd-accent);
282
+ }
283
+
284
+ /* ---- tag chips: line outline, bg fill, opaque muted count ---- */
285
+
286
+ html[data-theme-pack="warm-mineral"] a[data-zd-tag-chip] > [data-zd-tag-chip-outline] {
287
+ background-color: light-dark(#D8CEC1, #4D4640);
288
+ }
289
+
290
+ html[data-theme-pack="warm-mineral"] a[data-zd-tag-chip] > [data-zd-tag-chip-label] {
291
+ background-color: var(--zd-bg);
292
+ color: var(--zd-fg);
293
+ }
294
+
295
+ html[data-theme-pack="warm-mineral"] a[data-zd-tag-chip] [data-zd-tag-count],
296
+ html[data-theme-pack="warm-mineral"] footer[data-footer] [data-zd-tag-count] {
297
+ opacity: 1;
298
+ color: var(--zd-muted);
299
+ }
300
+
301
+ html[data-theme-pack="warm-mineral"] a[data-zd-tag-chip]:hover > [data-zd-tag-chip-outline],
302
+ html[data-theme-pack="warm-mineral"] a[data-zd-tag-chip]:focus-visible > [data-zd-tag-chip-outline] {
303
+ background-color: var(--zd-accent);
304
+ }
305
+
306
+ html[data-theme-pack="warm-mineral"] a[data-zd-tag-chip]:hover > [data-zd-tag-chip-label],
307
+ html[data-theme-pack="warm-mineral"] a[data-zd-tag-chip]:focus-visible > [data-zd-tag-chip-label] {
308
+ background-color: light-dark(#E4DDCF, #3D3732);
309
+ color: var(--zd-accent);
310
+ }
311
+
312
+ html[data-theme-pack="warm-mineral"] a[data-zd-tag-chip]:hover [data-zd-tag-count],
313
+ html[data-theme-pack="warm-mineral"] a[data-zd-tag-chip]:focus-visible [data-zd-tag-count],
314
+ html[data-theme-pack="warm-mineral"] footer[data-footer] a:hover [data-zd-tag-count],
315
+ html[data-theme-pack="warm-mineral"] footer[data-footer] a:focus-visible [data-zd-tag-count] {
316
+ color: var(--zd-accent);
317
+ }
318
+
319
+ /* ---- admonitions: soft fills, semantic title + stripe (labels/icons kept) ---- */
320
+
321
+ html[data-theme-pack="warm-mineral"] [data-admonition="note"] {
322
+ background-color: light-dark(#E9DED4, #3F3730);
323
+ border-left-color: var(--zd-accent);
324
+ }
325
+
326
+ html[data-theme-pack="warm-mineral"] [data-admonition="note"] .admonition-title {
327
+ color: var(--zd-accent);
328
+ }
329
+
330
+ html[data-theme-pack="warm-mineral"] [data-admonition="important"] {
331
+ background-color: light-dark(#E9DED4, #3F3730);
332
+ border-left-color: var(--zd-accent);
333
+ }
334
+
335
+ html[data-theme-pack="warm-mineral"] [data-admonition="important"] .admonition-title {
336
+ color: var(--zd-accent);
337
+ }
338
+
339
+ html[data-theme-pack="warm-mineral"] [data-admonition="info"] {
340
+ background-color: light-dark(#E3E0DB, #393836);
341
+ border-left-color: var(--zd-info);
342
+ }
343
+
344
+ html[data-theme-pack="warm-mineral"] [data-admonition="info"] .admonition-title {
345
+ color: var(--zd-info);
346
+ }
347
+
348
+ html[data-theme-pack="warm-mineral"] [data-admonition="tip"] {
349
+ background-color: light-dark(#E3E1D8, #393832);
350
+ border-left-color: var(--zd-success);
351
+ }
352
+
353
+ html[data-theme-pack="warm-mineral"] [data-admonition="tip"] .admonition-title {
354
+ color: var(--zd-success);
355
+ }
356
+
357
+ html[data-theme-pack="warm-mineral"] [data-admonition="warning"] {
358
+ background-color: light-dark(#E6E0D6, #3E3830);
359
+ border-left-color: var(--zd-warning);
360
+ }
361
+
362
+ html[data-theme-pack="warm-mineral"] [data-admonition="warning"] .admonition-title {
363
+ color: var(--zd-warning);
364
+ }
365
+
366
+ html[data-theme-pack="warm-mineral"] [data-admonition="danger"] {
367
+ background-color: light-dark(#E8DFD8, #3E3633);
368
+ border-left-color: var(--zd-danger);
369
+ }
370
+
371
+ html[data-theme-pack="warm-mineral"] [data-admonition="danger"] .admonition-title {
372
+ color: var(--zd-danger);
373
+ }
374
+
375
+ html[data-theme-pack="warm-mineral"] [data-admonition="caution"] {
376
+ background-color: light-dark(#E8DFD8, #3E3633);
377
+ border-left-color: var(--zd-danger);
378
+ }
379
+
380
+ html[data-theme-pack="warm-mineral"] [data-admonition="caution"] .admonition-title {
381
+ color: var(--zd-danger);
382
+ }
383
+
384
+ /* ---- keyboard focus: 2px accent outline, 3px offset (inset inside scrollers so it is never clipped) ---- */
385
+
386
+ html[data-theme-pack="warm-mineral"] :focus-visible {
387
+ outline: 2px solid var(--zd-accent);
388
+ outline-offset: 3px;
389
+ }
390
+
391
+ html[data-theme-pack="warm-mineral"] #desktop-sidebar :focus-visible,
392
+ html[data-theme-pack="warm-mineral"] aside[data-zd-mobile-sidebar] :focus-visible,
393
+ html[data-theme-pack="warm-mineral"] nav[data-zd-toc] :focus-visible,
394
+ html[data-theme-pack="warm-mineral"] div[data-zd-mobile-toc] :focus-visible {
395
+ outline-offset: -2px;
396
+ }
397
+
398
+ html[data-theme-pack="warm-mineral"] .zd-content a,
399
+ html[data-theme-pack="warm-mineral"] .zd-content button {
400
+ text-underline-offset: 3px;
401
+ }
@@ -0,0 +1,21 @@
1
+ /** The pack an ordinary configuration resolves to when `themePack` is omitted. */
2
+ export declare const CONFIGURED_DEFAULT_THEME_PACK_SLUG = "graphite";
3
+ /** Inputs read by {@link resolveConfiguredThemePack}. */
4
+ export interface ConfiguredThemePackInput {
5
+ /** The configured slug. `null`/`undefined` mean "omitted". */
6
+ themePack?: string | null;
7
+ /** The resolved `colorMode` setting; `false` is the fixed-scheme opt-out. */
8
+ colorMode?: unknown;
9
+ /** `true` when the caller supplied its own `colorSchemes` data. */
10
+ customColorSchemes?: boolean;
11
+ }
12
+ /**
13
+ * Resolve the effective configured pack slug:
14
+ *
15
+ * 1. an explicit (non-nullish) `themePack` wins verbatim — validation of the
16
+ * slug stays with the registry resolver, which fails loudly;
17
+ * 2. omitted + custom `colorSchemes` or `colorMode: false` → `"default"`
18
+ * (Classic, no pack stylesheet);
19
+ * 3. otherwise → {@link CONFIGURED_DEFAULT_THEME_PACK_SLUG}.
20
+ */
21
+ export declare function resolveConfiguredThemePack(input: ConfiguredThemePackInput): string;
@@ -0,0 +1,13 @@
1
+ const RESERVED_DEFAULT_SLUG = "default";
2
+ const CONFIGURED_DEFAULT_THEME_PACK_SLUG = "graphite";
3
+ function resolveConfiguredThemePack(input) {
4
+ if (input.themePack !== void 0 && input.themePack !== null) return input.themePack;
5
+ if (input.customColorSchemes === true || input.colorMode === false) {
6
+ return RESERVED_DEFAULT_SLUG;
7
+ }
8
+ return CONFIGURED_DEFAULT_THEME_PACK_SLUG;
9
+ }
10
+ export {
11
+ CONFIGURED_DEFAULT_THEME_PACK_SLUG,
12
+ resolveConfiguredThemePack
13
+ };
@@ -1,4 +1,5 @@
1
1
  export { THEME_PACK_SLUG_RE, DEFAULT_THEME_PACK_SLUG, themePackMetaSchema, type ThemePackMeta, type ThemePackSwatches, } from "./meta-schema.js";
2
+ export { CONFIGURED_DEFAULT_THEME_PACK_SLUG, resolveConfiguredThemePack, type ConfiguredThemePackInput, } from "./configured-theme-pack.js";
2
3
  export { KNOWN_THEME_PACK_TOKEN_NAMES, COMMERCIAL_FONT_DENYLIST, THEME_PACK_SOFT_BUDGET_BYTES, } from "./token-manifest.js";
3
4
  export { validateThemePack, type ThemePackValidationInput, type ThemePackValidationIssue, type ThemePackValidationResult, type ThemePackValidationSeverity, } from "./validator.js";
4
5
  export type { ThemePackRegistry, ThemePackRegistryEntry } from "./types.js";
@@ -3,6 +3,10 @@ import {
3
3
  DEFAULT_THEME_PACK_SLUG,
4
4
  themePackMetaSchema
5
5
  } from "./meta-schema.js";
6
+ import {
7
+ CONFIGURED_DEFAULT_THEME_PACK_SLUG,
8
+ resolveConfiguredThemePack
9
+ } from "./configured-theme-pack.js";
6
10
  import {
7
11
  KNOWN_THEME_PACK_TOKEN_NAMES,
8
12
  COMMERCIAL_FONT_DENYLIST,
@@ -20,11 +24,13 @@ import {
20
24
  } from "./build-registry.js";
21
25
  export {
22
26
  COMMERCIAL_FONT_DENYLIST,
27
+ CONFIGURED_DEFAULT_THEME_PACK_SLUG,
23
28
  DEFAULT_THEME_PACK_SLUG,
24
29
  KNOWN_THEME_PACK_TOKEN_NAMES,
25
30
  THEME_PACK_SLUG_RE,
26
31
  THEME_PACK_SOFT_BUDGET_BYTES,
27
32
  buildThemePackRegistry,
33
+ resolveConfiguredThemePack,
28
34
  resolveEnabledPacks,
29
35
  schemaVersion,
30
36
  themePackMetaSchema,