@takazudo/zudo-doc 5.23.0 → 5.24.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.
package/CHANGELOG.md CHANGED
@@ -8,6 +8,16 @@ The format is based on Keep a Changelog, and release notes are generated from th
8
8
 
9
9
  No unreleased changes.
10
10
 
11
+ ## [5.24.0] - 2026-09-13
12
+
13
+ ### Features
14
+
15
+ - Home-page h2 headings (compact intro, sitemap, and Tags) now share a unified `zd-home-heading` style that neutralizes theme-pack h2 decoration, and a divider now precedes the Tags section. (9ca2eef7)
16
+
17
+ ### Bug Fixes
18
+
19
+ - Academia theme pack: the home hero title stays aligned with the identity block and home dividers are centered, instead of inheriting the pack's paper-title centering and left-set footnote rule. (81266a2b)
20
+
11
21
  ## [5.23.0] - 2026-09-13
12
22
 
13
23
  ### Features
package/dist/catalog.js CHANGED
@@ -3,7 +3,7 @@
3
3
  // validated src/theme-packs/<slug>/meta.json registry. Re-run `pnpm build`
4
4
  // to regenerate after adding, removing, or editing a theme pack.
5
5
  // Catalog schemaVersion 2 is distinct from each pack's meta.json schemaVersion 1.
6
- const catalog = {"schemaVersion":2,"packs":[{"slug":"default","meta":{"schemaVersion":1,"slug":"default","name":"Default","description":"The stock zudo-doc look. No pack stylesheet is loaded — your project's configured color scheme and fonts render unchanged.","mode":"dark","version":"1.0.0","fonts":{"sans":"System","mono":"System","loaded":[]},"preview":{"light":{"bg":"oklch(0.965 0.004 65)","fg":"oklch(0.185 0.005 65)","accent":"oklch(0.470 0.120 56)","syntax":{"keyword":"oklch(0.470 0.120 56)","string":"oklch(0.470 0.140 145)","comment":"oklch(0.480 0.008 65)","callable":"oklch(0.485 0.122 245)"}},"dark":{"bg":"oklch(0.185 0.005 65)","fg":"oklch(0.965 0.004 65)","accent":"oklch(0.700 0.158 62)","syntax":{"keyword":"oklch(0.700 0.158 62)","string":"oklch(0.680 0.145 145)","comment":"oklch(0.705 0.008 65)","callable":"oklch(0.680 0.130 245)"}}}},"hasStylesheet":false},{"slug":"academia","meta":{"schemaVersion":1,"slug":"academia","name":"Academia","description":"A LaTeX paper for the web — white page, Computer-Modern-black ink, hyperref navy links, numbered theorem admonitions, booktabs tables. Dark mode is a scholarly slate.","mode":"light","version":"1.0.1","fonts":{"sans":"Source Serif 4","mono":"Courier Prime","loaded":["Source Serif 4","Courier Prime"]},"preview":{"light":{"bg":"#ffffff","fg":"#141414","accent":"#1c3d8f","syntax":{"keyword":"#1c3d8f","string":"#93262a","comment":"#2e6b2e","callable":"#295e80"}},"dark":{"bg":"#1d222b","fg":"#e7eaf0","accent":"#97b8ee","syntax":{"keyword":"#a3c0f2","string":"#e0a09a","comment":"#8cbc8c","callable":"#85c2da"}}}},"hasStylesheet":true},{"slug":"bauhaus","meta":{"schemaVersion":1,"slug":"bauhaus","name":"Bauhaus","description":"Primary triad as structure — gallery white, near-black ink, and red, yellow, blue doing structural work: circle, triangle, square markers, thick geometric rules, zero radius.","mode":"light","version":"1.0.0","fonts":{"sans":"Jost","mono":"Space Mono","display":"Archivo Black","loaded":["Jost","Archivo Black","Space Mono"]},"preview":{"light":{"bg":"#ffffff","fg":"#141414","accent":"#b3231b","syntax":{"keyword":"#b3231b","string":"#6d5800","comment":"#63615a","callable":"#1c4bbe"}},"dark":{"bg":"#18181b","fg":"#f0efe9","accent":"#ff7d70","syntax":{"keyword":"#ff7d70","string":"#e9ce6a","comment":"#999689","callable":"#8fb0ff"}}}},"hasStylesheet":true},{"slug":"beacon","meta":{"schemaVersion":1,"slug":"beacon","name":"Beacon","description":"WCAG-AAA high contrast — 7:1+ ink everywhere, 3px focus rings, always-underlined links. Clarity as beauty.","mode":"light","version":"1.0.1","fonts":{"sans":"Atkinson Hyperlegible","mono":"Atkinson Hyperlegible Mono","loaded":["Atkinson Hyperlegible","Atkinson Hyperlegible Mono"]},"preview":{"light":{"bg":"#ffffff","fg":"#000000","accent":"#0044cc","syntax":{"keyword":"#0044cc","string":"#a50000","comment":"#595959","callable":"#00287a"}},"dark":{"bg":"#000000","fg":"#ffffff","accent":"#6db3ff","syntax":{"keyword":"#6db3ff","string":"#ff8f8f","comment":"#b3b3b3","callable":"#a8d1ff"}}}},"hasStylesheet":true},{"slug":"blueprint","meta":{"schemaVersion":1,"slug":"blueprint","name":"Blueprint","description":"Cyanotype drafting sheet — pale-cyan linework on prussian grid paper, title-block caps, dashed rules, mono-caps labels. Light mode is the vellum original.","mode":"dark","version":"1.0.1","fonts":{"sans":"Inter","mono":"IBM Plex Mono","display":"Josefin Sans","loaded":["Inter","Josefin Sans","IBM Plex Mono"]},"preview":{"light":{"bg":"oklch(0.965 0.012 235)","fg":"oklch(0.28 0.05 253)","accent":"oklch(0.44 0.095 235)","syntax":{"keyword":"oklch(0.46 0.1 80)","string":"oklch(0.43 0.085 195)","comment":"oklch(0.5 0.03 248)","callable":"oklch(0.44 0.09 235)"}},"dark":{"bg":"oklch(0.27 0.055 252)","fg":"oklch(0.965 0.01 220)","accent":"oklch(0.86 0.09 205)","syntax":{"keyword":"oklch(0.87 0.12 95)","string":"oklch(0.83 0.1 185)","comment":"oklch(0.72 0.032 235)","callable":"oklch(0.83 0.085 215)"}}}},"hasStylesheet":true},{"slug":"botanica","meta":{"schemaVersion":1,"slug":"botanica","name":"Botanica","description":"A vintage botanical plate — herbarium cream, deep green ink, engraved double rules, Latin small-caps plate labels.","mode":"light","version":"1.0.0","fonts":{"sans":"Crimson Pro","mono":"Courier Prime","display":"Cormorant Garamond","loaded":["Cormorant Garamond","Crimson Pro","Courier Prime"]},"preview":{"light":{"bg":"oklch(0.956 0.02 92)","fg":"oklch(0.29 0.03 95)","accent":"oklch(0.42 0.09 152)","syntax":{"keyword":"oklch(0.4 0.075 60)","string":"oklch(0.43 0.095 150)","comment":"oklch(0.48 0.04 95)","callable":"oklch(0.43 0.075 205)"}},"dark":{"bg":"oklch(0.215 0.022 160)","fg":"oklch(0.92 0.02 95)","accent":"oklch(0.78 0.09 148)","syntax":{"keyword":"oklch(0.82 0.085 80)","string":"oklch(0.8 0.095 145)","comment":"oklch(0.7 0.03 110)","callable":"oklch(0.78 0.075 200)"}}}},"hasStylesheet":true},{"slug":"broadsheet","meta":{"schemaVersion":1,"slug":"broadsheet","name":"Broadsheet","description":"Newspaper editorial — Playfair masthead, Oxford ink rules, a red drop cap, and a night-edition dark mode.","mode":"light","version":"1.0.2","fonts":{"sans":"Source Serif 4","mono":"Courier Prime","display":"Playfair Display","loaded":["Playfair Display","Source Serif 4","Courier Prime"]},"preview":{"light":{"bg":"oklch(0.955 0.012 92)","fg":"oklch(0.205 0.012 80)","accent":"oklch(0.455 0.155 27)","syntax":{"keyword":"oklch(0.445 0.155 27)","string":"oklch(0.45 0.075 60)","comment":"oklch(0.5 0.016 78)","callable":"oklch(0.42 0.09 252)"}},"dark":{"bg":"oklch(0.185 0.012 75)","fg":"oklch(0.935 0.015 90)","accent":"oklch(0.7 0.145 27)","syntax":{"keyword":"oklch(0.72 0.14 27)","string":"oklch(0.79 0.07 70)","comment":"oklch(0.7 0.02 85)","callable":"oklch(0.74 0.08 248)"}}}},"hasStylesheet":true},{"slug":"brutalist","meta":{"schemaVersion":1,"slug":"brutalist","name":"Brutalist","description":"Raw concrete web — stark black on white, 4px slab borders, zero radius, hazard-orange tape. Structure you can see.","mode":"light","version":"1.0.3","fonts":{"sans":"Space Grotesk","mono":"IBM Plex Mono","display":"Archivo Black","loaded":["Archivo Black","Space Grotesk","IBM Plex Mono"]},"preview":{"light":{"bg":"#ffffff","fg":"#000000","accent":"#c2410c","syntax":{"keyword":"#c2410c","string":"#9a3412","comment":"#767676","callable":"#000000"}},"dark":{"bg":"#0d0d0d","fg":"#f5f5f5","accent":"#ff6a1f","syntax":{"keyword":"#ff7a2e","string":"#ffb38a","comment":"#878787","callable":"#ffffff"}}}},"hasStylesheet":true},{"slug":"drift","meta":{"schemaVersion":1,"slug":"drift","name":"Drift","description":"Floaty slate-blue comfort dark for long reading — soft glows in place of borders, gentle elevation, relaxed Plex type.","mode":"dark","version":"1.0.2","fonts":{"sans":"IBM Plex Sans","mono":"IBM Plex Mono","loaded":["IBM Plex Sans","IBM Plex Mono"]},"preview":{"light":{"bg":"#edf2f6","fg":"#24303d","accent":"#236799","syntax":{"keyword":"#49539c","string":"#2b754f","comment":"#596673","callable":"#00688d"}},"dark":{"bg":"#181f26","fg":"#d6dee4","accent":"#6cafd9","syntax":{"keyword":"#9caeee","string":"#88cba4","comment":"#8494a4","callable":"#75c6e1"}}}},"hasStylesheet":true},{"slug":"eink","meta":{"schemaVersion":1,"slug":"eink","name":"E-Ink","description":"E-reader grayscale — warm paper, near-black ink, shadowless hairline chrome, zero radius. Code is told by weight, slant, and gray value; only diffs keep a trace of ink-blue and ink-red.","mode":"light","version":"1.0.0","fonts":{"sans":"EB Garamond","mono":"Courier Prime","loaded":["EB Garamond","Courier Prime"]},"preview":{"light":{"bg":"oklch(0.956 0.007 90)","fg":"oklch(0.24 0.012 85)","accent":"oklch(0.155 0.01 85)","syntax":{"keyword":"oklch(0.18 0.01 85)","string":"oklch(0.46 0.012 85)","comment":"oklch(0.505 0.01 85)","callable":"oklch(0.31 0.012 85)"}},"dark":{"bg":"oklch(0.215 0.008 80)","fg":"oklch(0.885 0.012 85)","accent":"oklch(0.955 0.008 85)","syntax":{"keyword":"oklch(0.96 0.008 85)","string":"oklch(0.715 0.012 85)","comment":"oklch(0.645 0.01 85)","callable":"oklch(0.82 0.01 85)"}}}},"hasStylesheet":true},{"slug":"fjord","meta":{"schemaVersion":1,"slug":"fjord","name":"Fjord","description":"Polar-night blue under a faint aurora — frost-cyan accents, icy borders, snow-white text. Cold nordic calm.","mode":"dark","version":"1.0.2","fonts":{"sans":"Inter","mono":"JetBrains Mono","loaded":["Inter","JetBrains Mono"]},"preview":{"light":{"bg":"oklch(0.971 0.008 230)","fg":"oklch(0.255 0.03 255)","accent":"oklch(0.455 0.092 205)","syntax":{"keyword":"oklch(0.455 0.105 250)","string":"oklch(0.495 0.105 165)","comment":"oklch(0.51 0.03 245)","callable":"oklch(0.445 0.098 202)"}},"dark":{"bg":"oklch(0.232 0.024 255)","fg":"oklch(0.93 0.012 235)","accent":"oklch(0.79 0.095 195)","syntax":{"keyword":"oklch(0.76 0.095 242)","string":"oklch(0.8 0.105 158)","comment":"oklch(0.63 0.03 245)","callable":"oklch(0.815 0.095 195)"}}}},"hasStylesheet":true},{"slug":"foundry","meta":{"schemaVersion":1,"slug":"foundry","name":"Foundry","description":"GitHub-neutral baseline — white paper, near-black ink, Primer-blue links, quiet gray rules. Restraint, perfected.","mode":"light","version":"1.0.2","fonts":{"sans":"Inter","mono":"System","loaded":["Inter"]},"preview":{"light":{"bg":"#ffffff","fg":"#1f2328","accent":"#0969da","syntax":{"keyword":"#cf222e","string":"#0a3069","comment":"#6e7781","callable":"#8250df"}},"dark":{"bg":"#0d1117","fg":"#e6edf3","accent":"#4493f8","syntax":{"keyword":"#ff7b72","string":"#a5d6ff","comment":"#8b949e","callable":"#d2a8ff"}}}},"hasStylesheet":true},{"slug":"futura-editorial","meta":{"schemaVersion":1,"slug":"futura-editorial","name":"Futura Editorial","description":"Normal-weight geometric Futura headings over Noto Sans body — clean white, near-black ink, one restrained red accent.","mode":"light","version":"1.0.1","fonts":{"sans":"Noto Sans","mono":"Space Mono","display":"Jost","loaded":["Jost","Noto Sans","Space Mono"]},"preview":{"light":{"bg":"oklch(1 0 0)","fg":"oklch(0.17 0 0)","accent":"oklch(0.505 0.18 28)","syntax":{"keyword":"oklch(0.505 0.18 28)","string":"oklch(0.47 0.09 160)","comment":"oklch(0.52 0 0)","callable":"oklch(0.45 0.1 250)"}},"dark":{"bg":"oklch(0.165 0 0)","fg":"oklch(0.935 0 0)","accent":"oklch(0.72 0.15 29)","syntax":{"keyword":"oklch(0.72 0.15 29)","string":"oklch(0.76 0.1 160)","comment":"oklch(0.63 0 0)","callable":"oklch(0.73 0.095 250)"}}}},"hasStylesheet":true},{"slug":"hearth","meta":{"schemaVersion":1,"slug":"hearth","name":"Hearth","description":"Warm cream & brick-red fireside docs — Fraunces headings, amber code blocks, ember-glow dark mode.","mode":"light","version":"1.0.3","fonts":{"sans":"Nunito","mono":"Spline Sans Mono","display":"Fraunces","loaded":["Fraunces","Nunito","Spline Sans Mono"]},"preview":{"light":{"bg":"oklch(0.958 0.02 85)","fg":"oklch(0.255 0.028 40)","accent":"oklch(0.49 0.145 31)","syntax":{"keyword":"oklch(0.48 0.148 30)","string":"oklch(0.47 0.1 135)","comment":"oklch(0.51 0.035 60)","callable":"oklch(0.45 0.092 245)"}},"dark":{"bg":"oklch(0.215 0.022 45)","fg":"oklch(0.915 0.02 80)","accent":"oklch(0.735 0.128 45)","syntax":{"keyword":"oklch(0.745 0.138 40)","string":"oklch(0.785 0.1 130)","comment":"oklch(0.645 0.032 65)","callable":"oklch(0.765 0.075 235)"}}}},"hasStylesheet":true},{"slug":"hollow","meta":{"schemaVersion":1,"slug":"hollow","name":"Hollow","description":"Dark violet space — neon pink headings, violet links, a quiet starfield, and razor-square midnight chrome.","mode":"dark","version":"1.0.2","fonts":{"sans":"Space Grotesk","mono":"Space Mono","loaded":["Space Grotesk","Space Mono"]},"preview":{"light":{"bg":"oklch(0.962 0.012 300)","fg":"oklch(0.24 0.045 295)","accent":"oklch(0.45 0.17 300)","syntax":{"keyword":"oklch(0.53 0.2 348)","string":"oklch(0.45 0.1 195)","comment":"oklch(0.51 0.035 292)","callable":"oklch(0.46 0.16 300)"}},"dark":{"bg":"oklch(0.155 0.035 295)","fg":"oklch(0.93 0.015 295)","accent":"oklch(0.74 0.14 300)","syntax":{"keyword":"oklch(0.76 0.17 347)","string":"oklch(0.83 0.1 190)","comment":"oklch(0.62 0.045 292)","callable":"oklch(0.76 0.13 300)"}}}},"hasStylesheet":true},{"slug":"ledger","meta":{"schemaVersion":1,"slug":"ledger","name":"Ledger","description":"Cream academic serif in the Tufte tradition — warm paper, ink prose, oxblood links, hairline rules, quiet code.","mode":"light","version":"1.0.1","fonts":{"sans":"Crimson Pro","mono":"IBM Plex Mono","loaded":["Crimson Pro","IBM Plex Mono"]},"preview":{"light":{"bg":"#fffff8","fg":"#16130e","accent":"#8b1a1a","syntax":{"keyword":"#8b1a1a","string":"#4e6328","comment":"#766b5c","callable":"#33586e"}},"dark":{"bg":"#191510","fg":"#e9e2d0","accent":"#d68a75","syntax":{"keyword":"#e2907c","string":"#a8b47c","comment":"#948a77","callable":"#93b4cd"}}}},"hasStylesheet":true},{"slug":"manuscript","meta":{"schemaVersion":1,"slug":"manuscript","name":"Manuscript","description":"A quiet Garamond book page — warm paper, soft ink, sepia rubrication, small-caps subheads, fleuron section marks.","mode":"light","version":"1.0.1","fonts":{"sans":"EB Garamond","mono":"Courier Prime","loaded":["EB Garamond","Courier Prime"]},"preview":{"light":{"bg":"oklch(0.963 0.013 85)","fg":"oklch(0.245 0.018 60)","accent":"oklch(0.44 0.095 55)","syntax":{"keyword":"oklch(0.455 0.13 30)","string":"oklch(0.44 0.085 150)","comment":"oklch(0.5 0.03 70)","callable":"oklch(0.435 0.09 275)"}},"dark":{"bg":"oklch(0.215 0.015 65)","fg":"oklch(0.885 0.022 80)","accent":"oklch(0.735 0.095 70)","syntax":{"keyword":"oklch(0.72 0.115 35)","string":"oklch(0.745 0.085 150)","comment":"oklch(0.645 0.03 75)","callable":"oklch(0.745 0.07 275)"}}}},"hasStylesheet":true},{"slug":"matcha","meta":{"schemaVersion":1,"slug":"matcha","name":"Matcha","description":"Green tea ceremony — deep matcha on warm cream, mincho headings, zen whitespace, tea-foam surfaces in both modes.","mode":"light","version":"1.0.2","fonts":{"sans":"Zen Kaku Gothic New","mono":"M PLUS 1 Code","display":"Shippori Mincho","loaded":["Zen Kaku Gothic New","Shippori Mincho","M PLUS 1 Code"]},"preview":{"light":{"bg":"oklch(0.973 0.012 106)","fg":"oklch(0.245 0.018 148)","accent":"oklch(0.435 0.105 142)","syntax":{"keyword":"oklch(0.418 0.105 150)","string":"oklch(0.47 0.092 106)","comment":"oklch(0.512 0.034 130)","callable":"oklch(0.438 0.082 196)"}},"dark":{"bg":"oklch(0.205 0.016 152)","fg":"oklch(0.938 0.018 106)","accent":"oklch(0.79 0.115 138)","syntax":{"keyword":"oklch(0.782 0.118 148)","string":"oklch(0.822 0.102 108)","comment":"oklch(0.668 0.034 130)","callable":"oklch(0.772 0.088 192)"}}}},"hasStylesheet":true},{"slug":"nocturne","meta":{"schemaVersion":1,"slug":"nocturne","name":"Nocturne","description":"Purple midnight — velvet aubergine depths, lavender links, and muted gold hairlines. Elegant, never neon.","mode":"dark","version":"1.0.2","fonts":{"sans":"Manrope","mono":"IBM Plex Mono","display":"Cormorant Garamond","loaded":["Cormorant Garamond","Manrope","IBM Plex Mono"]},"preview":{"light":{"bg":"oklch(0.958 0.012 300)","fg":"oklch(0.245 0.05 312)","accent":"oklch(0.455 0.15 295)","syntax":{"keyword":"oklch(0.46 0.16 295)","string":"oklch(0.5 0.105 85)","comment":"oklch(0.5 0.042 305)","callable":"oklch(0.455 0.125 265)"}},"dark":{"bg":"oklch(0.155 0.03 310)","fg":"oklch(0.922 0.018 300)","accent":"oklch(0.765 0.105 292)","syntax":{"keyword":"oklch(0.772 0.128 293)","string":"oklch(0.8 0.108 88)","comment":"oklch(0.645 0.045 302)","callable":"oklch(0.77 0.095 262)"}}}},"hasStylesheet":true},{"slug":"observatory","meta":{"schemaVersion":1,"slug":"observatory","name":"Observatory","description":"Night-sky atlas: star-field depth, constellation-line rules, nebula violet and comet gold over astronomer's navy.","mode":"dark","version":"1.0.3","fonts":{"sans":"Jost","mono":"Space Mono","display":"Josefin Sans","loaded":["Josefin Sans","Jost","Space Mono"]},"preview":{"light":{"bg":"oklch(0.965 0.012 255)","fg":"oklch(0.235 0.045 268)","accent":"oklch(0.47 0.1 75)","syntax":{"keyword":"oklch(0.46 0.14 300)","string":"oklch(0.45 0.1 162)","comment":"oklch(0.5 0.03 265)","callable":"oklch(0.46 0.11 250)"}},"dark":{"bg":"oklch(0.155 0.028 268)","fg":"oklch(0.93 0.015 255)","accent":"oklch(0.82 0.13 86)","syntax":{"keyword":"oklch(0.76 0.118 300)","string":"oklch(0.8 0.112 162)","comment":"oklch(0.61 0.038 265)","callable":"oklch(0.78 0.095 240)"}}}},"hasStylesheet":true},{"slug":"onyx","meta":{"schemaVersion":1,"slug":"onyx","name":"Onyx","description":"Luxury noir — jet black, champagne serif headings, and a single gold hairline accent. Watch-brand restraint.","mode":"dark","version":"1.0.3","fonts":{"sans":"Jost","mono":"IBM Plex Mono","display":"Cormorant Garamond","loaded":["Cormorant Garamond","Jost","IBM Plex Mono"]},"preview":{"light":{"bg":"oklch(0.972 0.005 85)","fg":"oklch(0.22 0.012 80)","accent":"oklch(0.5 0.105 80)","syntax":{"keyword":"oklch(0.51 0.105 82)","string":"oklch(0.47 0.07 155)","comment":"oklch(0.5 0.015 85)","callable":"oklch(0.45 0.045 250)"}},"dark":{"bg":"oklch(0.145 0.003 80)","fg":"oklch(0.92 0.022 88)","accent":"oklch(0.79 0.115 88)","syntax":{"keyword":"oklch(0.8 0.115 88)","string":"oklch(0.78 0.07 155)","comment":"oklch(0.62 0.02 85)","callable":"oklch(0.82 0.04 250)"}}}},"hasStylesheet":true},{"slug":"phosphor","meta":{"schemaVersion":1,"slug":"phosphor","name":"Phosphor","description":"Green CRT terminal — phosphor glow, scanlines, inverse-video nav, monospace everything.","mode":"dark","version":"1.0.1","fonts":{"sans":"JetBrains Mono","mono":"JetBrains Mono","display":"VT323","loaded":["VT323","JetBrains Mono"]},"preview":{"light":{"bg":"oklch(0.955 0.014 150)","fg":"oklch(0.28 0.058 150)","accent":"oklch(0.42 0.13 150)","syntax":{"keyword":"oklch(0.4 0.13 148)","string":"oklch(0.39 0.095 165)","comment":"oklch(0.49 0.05 150)","callable":"oklch(0.43 0.095 200)"}},"dark":{"bg":"oklch(0.135 0.014 150)","fg":"oklch(0.845 0.145 150)","accent":"oklch(0.87 0.215 148)","syntax":{"keyword":"oklch(0.9 0.21 148)","string":"oklch(0.9 0.12 165)","comment":"oklch(0.58 0.062 150)","callable":"oklch(0.83 0.125 200)"}}}},"hasStylesheet":true},{"slug":"riso","meta":{"schemaVersion":1,"slug":"riso","name":"Riso","description":"Risograph duotone print — warm paper, two inks (riso blue + fluorescent coral), misregistered offset shadows, and a soft linear paper grain.","mode":"light","version":"1.0.0","fonts":{"sans":"Space Grotesk","mono":"Space Mono","display":"Archivo Black","loaded":["Space Grotesk","Archivo Black","Space Mono"]},"preview":{"light":{"bg":"#f9f3e5","fg":"#1d3345","accent":"#0d5c94","syntax":{"keyword":"#a02310","string":"#0d5e6e","comment":"#4d5c66","callable":"#0b5b9b"}},"dark":{"bg":"#101d28","fg":"#f1e9d8","accent":"#58b8e8","syntax":{"keyword":"#ff8d72","string":"#66d4cf","comment":"#93a4ad","callable":"#5aaef5"}}}},"hasStylesheet":true},{"slug":"sakura","meta":{"schemaVersion":1,"slug":"sakura","name":"Sakura","description":"Cherry-blossom pastels — blush-white paper, plum ink, and rose accents on petal-soft corners; dark mode is yozakura, night blossoms under lantern-pink light.","mode":"light","version":"1.0.1","fonts":{"sans":"Nunito","mono":"M PLUS 1 Code","display":"Shippori Mincho","loaded":["Nunito","Shippori Mincho","M PLUS 1 Code"]},"preview":{"light":{"bg":"oklch(0.977 0.009 350)","fg":"oklch(0.29 0.055 340)","accent":"oklch(0.5 0.168 358)","syntax":{"keyword":"oklch(0.5 0.168 358)","string":"oklch(0.49 0.115 150)","comment":"oklch(0.5 0.04 340)","callable":"oklch(0.49 0.135 300)"}},"dark":{"bg":"oklch(0.215 0.03 330)","fg":"oklch(0.935 0.014 350)","accent":"oklch(0.78 0.115 355)","syntax":{"keyword":"oklch(0.79 0.125 355)","string":"oklch(0.78 0.115 150)","comment":"oklch(0.71 0.038 345)","callable":"oklch(0.78 0.105 300)"}}}},"hasStylesheet":true},{"slug":"scandi","meta":{"schemaVersion":1,"slug":"scandi","name":"Scandi","description":"Hygge minimalism — oat linen, sage & clay, pill nav actives and 8px corners; night mode is warm charcoal lit by candle amber.","mode":"light","version":"1.0.0","fonts":{"sans":"Manrope","mono":"Spline Sans Mono","loaded":["Manrope","Spline Sans Mono"]},"preview":{"light":{"bg":"oklch(0.963 0.012 83)","fg":"oklch(0.28 0.02 55)","accent":"oklch(0.44 0.08 152)","syntax":{"keyword":"oklch(0.47 0.105 40)","string":"oklch(0.45 0.09 150)","comment":"oklch(0.5 0.02 70)","callable":"oklch(0.45 0.08 240)"}},"dark":{"bg":"oklch(0.235 0.015 55)","fg":"oklch(0.92 0.012 85)","accent":"oklch(0.82 0.105 75)","syntax":{"keyword":"oklch(0.76 0.1 45)","string":"oklch(0.78 0.09 150)","comment":"oklch(0.66 0.02 75)","callable":"oklch(0.75 0.075 238)"}}}},"hasStylesheet":true},{"slug":"solar","meta":{"schemaVersion":1,"slug":"solar","name":"Solar","description":"Solarized precision — low-eyestrain paper tones, blue/cyan/orange accents, mono labels, technical calm in both modes.","mode":"light","version":"1.0.1","fonts":{"sans":"Source Sans 3","mono":"Source Code Pro","loaded":["Source Sans 3","Source Code Pro"]},"preview":{"light":{"bg":"#fdf6e3","fg":"#4f6369","accent":"#1c6a9f","syntax":{"keyword":"#606f00","string":"#12746c","comment":"#586b72","callable":"#1d6da3"}},"dark":{"bg":"#002b36","fg":"#93a1a1","accent":"#53a6df","syntax":{"keyword":"#8ea300","string":"#2caaa0","comment":"#899da4","callable":"#49a0dd"}}}},"hasStylesheet":true},{"slug":"sumi","meta":{"schemaVersion":1,"slug":"sumi","name":"Sumi","description":"Sumi-e ink on washi — bold mincho brush headings, deep black strokes, one vermillion hanko seal accent.","mode":"light","version":"1.0.3","fonts":{"sans":"Zen Kaku Gothic New","mono":"IBM Plex Mono","display":"Shippori Mincho B1","loaded":["Shippori Mincho B1","Zen Kaku Gothic New","IBM Plex Mono"]},"preview":{"light":{"bg":"#f7f4ec","fg":"#1b1a18","accent":"#b8232e","syntax":{"keyword":"#b8232e","string":"#6a6156","comment":"#726b5e","callable":"#433d35"}},"dark":{"bg":"#161514","fg":"#ece7db","accent":"#ea6a72","syntax":{"keyword":"#ee7a81","string":"#c8bfa6","comment":"#837d72","callable":"#f4efe4"}}}},"hasStylesheet":true},{"slug":"swissgrid","meta":{"schemaVersion":1,"slug":"swissgrid","name":"Swissgrid","description":"International Typographic Style — grid discipline, black on white, one hot Swiss-red accent, oversized section numbers.","mode":"light","version":"1.0.1","fonts":{"sans":"Inter","mono":"IBM Plex Mono","display":"Inter Tight","loaded":["Inter","Inter Tight","IBM Plex Mono"]},"preview":{"light":{"bg":"#ffffff","fg":"#0a0a0a","accent":"#e60000","syntax":{"keyword":"#d40000","string":"#3f3f3f","comment":"#6b6b6b","callable":"#0a0a0a"}},"dark":{"bg":"#0c0c0c","fg":"#f2f2f2","accent":"#ff4d4d","syntax":{"keyword":"#ff4d4d","string":"#c9c9c9","comment":"#8c8c8c","callable":"#ffffff"}}}},"hasStylesheet":true},{"slug":"tidepool","meta":{"schemaVersion":1,"slug":"tidepool","name":"Tidepool","description":"Marine teal dark — deep-sea teal surfaces, seafoam text, bioluminescent aqua accents, kelp-green success, coral danger. Light mode is the same pool at low tide.","mode":"dark","version":"1.0.0","fonts":{"sans":"Space Grotesk","mono":"JetBrains Mono","loaded":["Space Grotesk","JetBrains Mono"]},"preview":{"light":{"bg":"oklch(0.966 0.013 165)","fg":"oklch(0.27 0.045 200)","accent":"oklch(0.43 0.073 195)","syntax":{"keyword":"oklch(0.42 0.071 193)","string":"oklch(0.42 0.11 150)","comment":"oklch(0.44 0.03 200)","callable":"oklch(0.44 0.089 232)"}},"dark":{"bg":"oklch(0.235 0.032 205)","fg":"oklch(0.92 0.028 180)","accent":"oklch(0.82 0.13 185)","syntax":{"keyword":"oklch(0.84 0.14 183)","string":"oklch(0.83 0.14 152)","comment":"oklch(0.69 0.035 195)","callable":"oklch(0.8 0.1 228)"}}}},"hasStylesheet":true},{"slug":"timberline","meta":{"schemaVersion":1,"slug":"timberline","name":"Timberline","description":"Forest cabin after dark — pine & umber planks, cream prose, and matte lantern-amber accents; light mode is the same lodge at morning.","mode":"dark","version":"1.0.1","fonts":{"sans":"Source Sans 3","mono":"JetBrains Mono","display":"Fraunces","loaded":["Fraunces","Source Sans 3","JetBrains Mono"]},"preview":{"light":{"bg":"oklch(0.962 0.016 90)","fg":"oklch(0.27 0.032 155)","accent":"oklch(0.465 0.11 62)","syntax":{"keyword":"oklch(0.475 0.11 70)","string":"oklch(0.46 0.09 145)","comment":"oklch(0.49 0.035 140)","callable":"oklch(0.45 0.085 235)"}},"dark":{"bg":"oklch(0.207 0.02 60)","fg":"oklch(0.928 0.02 88)","accent":"oklch(0.78 0.125 72)","syntax":{"keyword":"oklch(0.8 0.125 80)","string":"oklch(0.79 0.1 135)","comment":"oklch(0.66 0.035 110)","callable":"oklch(0.78 0.075 220)"}}}},"hasStylesheet":true},{"slug":"washi","meta":{"schemaVersion":1,"slug":"washi","name":"Washi","description":"Warm washi paper, sumi ink, and ai-iro indigo seals — quiet Japanese stationery for calm documentation.","mode":"light","version":"1.0.3","fonts":{"sans":"Zen Kaku Gothic New","mono":"M PLUS 1 Code","display":"Shippori Mincho","loaded":["Zen Kaku Gothic New","Shippori Mincho","M PLUS 1 Code"]},"preview":{"light":{"bg":"#f6f1e4","fg":"#2b2822","accent":"#274a78","syntax":{"keyword":"#274a78","string":"#41653a","comment":"#6f6654","callable":"#963f34"}},"dark":{"bg":"#1b212c","fg":"#eae3d2","accent":"#8ab0dd","syntax":{"keyword":"#97b9e6","string":"#a9cb90","comment":"#8894a4","callable":"#e0a49a"}}}},"hasStylesheet":true}]};
6
+ const catalog = {"schemaVersion":2,"packs":[{"slug":"default","meta":{"schemaVersion":1,"slug":"default","name":"Default","description":"The stock zudo-doc look. No pack stylesheet is loaded — your project's configured color scheme and fonts render unchanged.","mode":"dark","version":"1.0.0","fonts":{"sans":"System","mono":"System","loaded":[]},"preview":{"light":{"bg":"oklch(0.965 0.004 65)","fg":"oklch(0.185 0.005 65)","accent":"oklch(0.470 0.120 56)","syntax":{"keyword":"oklch(0.470 0.120 56)","string":"oklch(0.470 0.140 145)","comment":"oklch(0.480 0.008 65)","callable":"oklch(0.485 0.122 245)"}},"dark":{"bg":"oklch(0.185 0.005 65)","fg":"oklch(0.965 0.004 65)","accent":"oklch(0.700 0.158 62)","syntax":{"keyword":"oklch(0.700 0.158 62)","string":"oklch(0.680 0.145 145)","comment":"oklch(0.705 0.008 65)","callable":"oklch(0.680 0.130 245)"}}}},"hasStylesheet":false},{"slug":"academia","meta":{"schemaVersion":1,"slug":"academia","name":"Academia","description":"A LaTeX paper for the web — white page, Computer-Modern-black ink, hyperref navy links, numbered theorem admonitions, booktabs tables. Dark mode is a scholarly slate.","mode":"light","version":"1.0.2","fonts":{"sans":"Source Serif 4","mono":"Courier Prime","loaded":["Source Serif 4","Courier Prime"]},"preview":{"light":{"bg":"#ffffff","fg":"#141414","accent":"#1c3d8f","syntax":{"keyword":"#1c3d8f","string":"#93262a","comment":"#2e6b2e","callable":"#295e80"}},"dark":{"bg":"#1d222b","fg":"#e7eaf0","accent":"#97b8ee","syntax":{"keyword":"#a3c0f2","string":"#e0a09a","comment":"#8cbc8c","callable":"#85c2da"}}}},"hasStylesheet":true},{"slug":"bauhaus","meta":{"schemaVersion":1,"slug":"bauhaus","name":"Bauhaus","description":"Primary triad as structure — gallery white, near-black ink, and red, yellow, blue doing structural work: circle, triangle, square markers, thick geometric rules, zero radius.","mode":"light","version":"1.0.0","fonts":{"sans":"Jost","mono":"Space Mono","display":"Archivo Black","loaded":["Jost","Archivo Black","Space Mono"]},"preview":{"light":{"bg":"#ffffff","fg":"#141414","accent":"#b3231b","syntax":{"keyword":"#b3231b","string":"#6d5800","comment":"#63615a","callable":"#1c4bbe"}},"dark":{"bg":"#18181b","fg":"#f0efe9","accent":"#ff7d70","syntax":{"keyword":"#ff7d70","string":"#e9ce6a","comment":"#999689","callable":"#8fb0ff"}}}},"hasStylesheet":true},{"slug":"beacon","meta":{"schemaVersion":1,"slug":"beacon","name":"Beacon","description":"WCAG-AAA high contrast — 7:1+ ink everywhere, 3px focus rings, always-underlined links. Clarity as beauty.","mode":"light","version":"1.0.1","fonts":{"sans":"Atkinson Hyperlegible","mono":"Atkinson Hyperlegible Mono","loaded":["Atkinson Hyperlegible","Atkinson Hyperlegible Mono"]},"preview":{"light":{"bg":"#ffffff","fg":"#000000","accent":"#0044cc","syntax":{"keyword":"#0044cc","string":"#a50000","comment":"#595959","callable":"#00287a"}},"dark":{"bg":"#000000","fg":"#ffffff","accent":"#6db3ff","syntax":{"keyword":"#6db3ff","string":"#ff8f8f","comment":"#b3b3b3","callable":"#a8d1ff"}}}},"hasStylesheet":true},{"slug":"blueprint","meta":{"schemaVersion":1,"slug":"blueprint","name":"Blueprint","description":"Cyanotype drafting sheet — pale-cyan linework on prussian grid paper, title-block caps, dashed rules, mono-caps labels. Light mode is the vellum original.","mode":"dark","version":"1.0.1","fonts":{"sans":"Inter","mono":"IBM Plex Mono","display":"Josefin Sans","loaded":["Inter","Josefin Sans","IBM Plex Mono"]},"preview":{"light":{"bg":"oklch(0.965 0.012 235)","fg":"oklch(0.28 0.05 253)","accent":"oklch(0.44 0.095 235)","syntax":{"keyword":"oklch(0.46 0.1 80)","string":"oklch(0.43 0.085 195)","comment":"oklch(0.5 0.03 248)","callable":"oklch(0.44 0.09 235)"}},"dark":{"bg":"oklch(0.27 0.055 252)","fg":"oklch(0.965 0.01 220)","accent":"oklch(0.86 0.09 205)","syntax":{"keyword":"oklch(0.87 0.12 95)","string":"oklch(0.83 0.1 185)","comment":"oklch(0.72 0.032 235)","callable":"oklch(0.83 0.085 215)"}}}},"hasStylesheet":true},{"slug":"botanica","meta":{"schemaVersion":1,"slug":"botanica","name":"Botanica","description":"A vintage botanical plate — herbarium cream, deep green ink, engraved double rules, Latin small-caps plate labels.","mode":"light","version":"1.0.0","fonts":{"sans":"Crimson Pro","mono":"Courier Prime","display":"Cormorant Garamond","loaded":["Cormorant Garamond","Crimson Pro","Courier Prime"]},"preview":{"light":{"bg":"oklch(0.956 0.02 92)","fg":"oklch(0.29 0.03 95)","accent":"oklch(0.42 0.09 152)","syntax":{"keyword":"oklch(0.4 0.075 60)","string":"oklch(0.43 0.095 150)","comment":"oklch(0.48 0.04 95)","callable":"oklch(0.43 0.075 205)"}},"dark":{"bg":"oklch(0.215 0.022 160)","fg":"oklch(0.92 0.02 95)","accent":"oklch(0.78 0.09 148)","syntax":{"keyword":"oklch(0.82 0.085 80)","string":"oklch(0.8 0.095 145)","comment":"oklch(0.7 0.03 110)","callable":"oklch(0.78 0.075 200)"}}}},"hasStylesheet":true},{"slug":"broadsheet","meta":{"schemaVersion":1,"slug":"broadsheet","name":"Broadsheet","description":"Newspaper editorial — Playfair masthead, Oxford ink rules, a red drop cap, and a night-edition dark mode.","mode":"light","version":"1.0.2","fonts":{"sans":"Source Serif 4","mono":"Courier Prime","display":"Playfair Display","loaded":["Playfair Display","Source Serif 4","Courier Prime"]},"preview":{"light":{"bg":"oklch(0.955 0.012 92)","fg":"oklch(0.205 0.012 80)","accent":"oklch(0.455 0.155 27)","syntax":{"keyword":"oklch(0.445 0.155 27)","string":"oklch(0.45 0.075 60)","comment":"oklch(0.5 0.016 78)","callable":"oklch(0.42 0.09 252)"}},"dark":{"bg":"oklch(0.185 0.012 75)","fg":"oklch(0.935 0.015 90)","accent":"oklch(0.7 0.145 27)","syntax":{"keyword":"oklch(0.72 0.14 27)","string":"oklch(0.79 0.07 70)","comment":"oklch(0.7 0.02 85)","callable":"oklch(0.74 0.08 248)"}}}},"hasStylesheet":true},{"slug":"brutalist","meta":{"schemaVersion":1,"slug":"brutalist","name":"Brutalist","description":"Raw concrete web — stark black on white, 4px slab borders, zero radius, hazard-orange tape. Structure you can see.","mode":"light","version":"1.0.3","fonts":{"sans":"Space Grotesk","mono":"IBM Plex Mono","display":"Archivo Black","loaded":["Archivo Black","Space Grotesk","IBM Plex Mono"]},"preview":{"light":{"bg":"#ffffff","fg":"#000000","accent":"#c2410c","syntax":{"keyword":"#c2410c","string":"#9a3412","comment":"#767676","callable":"#000000"}},"dark":{"bg":"#0d0d0d","fg":"#f5f5f5","accent":"#ff6a1f","syntax":{"keyword":"#ff7a2e","string":"#ffb38a","comment":"#878787","callable":"#ffffff"}}}},"hasStylesheet":true},{"slug":"drift","meta":{"schemaVersion":1,"slug":"drift","name":"Drift","description":"Floaty slate-blue comfort dark for long reading — soft glows in place of borders, gentle elevation, relaxed Plex type.","mode":"dark","version":"1.0.2","fonts":{"sans":"IBM Plex Sans","mono":"IBM Plex Mono","loaded":["IBM Plex Sans","IBM Plex Mono"]},"preview":{"light":{"bg":"#edf2f6","fg":"#24303d","accent":"#236799","syntax":{"keyword":"#49539c","string":"#2b754f","comment":"#596673","callable":"#00688d"}},"dark":{"bg":"#181f26","fg":"#d6dee4","accent":"#6cafd9","syntax":{"keyword":"#9caeee","string":"#88cba4","comment":"#8494a4","callable":"#75c6e1"}}}},"hasStylesheet":true},{"slug":"eink","meta":{"schemaVersion":1,"slug":"eink","name":"E-Ink","description":"E-reader grayscale — warm paper, near-black ink, shadowless hairline chrome, zero radius. Code is told by weight, slant, and gray value; only diffs keep a trace of ink-blue and ink-red.","mode":"light","version":"1.0.0","fonts":{"sans":"EB Garamond","mono":"Courier Prime","loaded":["EB Garamond","Courier Prime"]},"preview":{"light":{"bg":"oklch(0.956 0.007 90)","fg":"oklch(0.24 0.012 85)","accent":"oklch(0.155 0.01 85)","syntax":{"keyword":"oklch(0.18 0.01 85)","string":"oklch(0.46 0.012 85)","comment":"oklch(0.505 0.01 85)","callable":"oklch(0.31 0.012 85)"}},"dark":{"bg":"oklch(0.215 0.008 80)","fg":"oklch(0.885 0.012 85)","accent":"oklch(0.955 0.008 85)","syntax":{"keyword":"oklch(0.96 0.008 85)","string":"oklch(0.715 0.012 85)","comment":"oklch(0.645 0.01 85)","callable":"oklch(0.82 0.01 85)"}}}},"hasStylesheet":true},{"slug":"fjord","meta":{"schemaVersion":1,"slug":"fjord","name":"Fjord","description":"Polar-night blue under a faint aurora — frost-cyan accents, icy borders, snow-white text. Cold nordic calm.","mode":"dark","version":"1.0.2","fonts":{"sans":"Inter","mono":"JetBrains Mono","loaded":["Inter","JetBrains Mono"]},"preview":{"light":{"bg":"oklch(0.971 0.008 230)","fg":"oklch(0.255 0.03 255)","accent":"oklch(0.455 0.092 205)","syntax":{"keyword":"oklch(0.455 0.105 250)","string":"oklch(0.495 0.105 165)","comment":"oklch(0.51 0.03 245)","callable":"oklch(0.445 0.098 202)"}},"dark":{"bg":"oklch(0.232 0.024 255)","fg":"oklch(0.93 0.012 235)","accent":"oklch(0.79 0.095 195)","syntax":{"keyword":"oklch(0.76 0.095 242)","string":"oklch(0.8 0.105 158)","comment":"oklch(0.63 0.03 245)","callable":"oklch(0.815 0.095 195)"}}}},"hasStylesheet":true},{"slug":"foundry","meta":{"schemaVersion":1,"slug":"foundry","name":"Foundry","description":"GitHub-neutral baseline — white paper, near-black ink, Primer-blue links, quiet gray rules. Restraint, perfected.","mode":"light","version":"1.0.2","fonts":{"sans":"Inter","mono":"System","loaded":["Inter"]},"preview":{"light":{"bg":"#ffffff","fg":"#1f2328","accent":"#0969da","syntax":{"keyword":"#cf222e","string":"#0a3069","comment":"#6e7781","callable":"#8250df"}},"dark":{"bg":"#0d1117","fg":"#e6edf3","accent":"#4493f8","syntax":{"keyword":"#ff7b72","string":"#a5d6ff","comment":"#8b949e","callable":"#d2a8ff"}}}},"hasStylesheet":true},{"slug":"futura-editorial","meta":{"schemaVersion":1,"slug":"futura-editorial","name":"Futura Editorial","description":"Normal-weight geometric Futura headings over Noto Sans body — clean white, near-black ink, one restrained red accent.","mode":"light","version":"1.0.1","fonts":{"sans":"Noto Sans","mono":"Space Mono","display":"Jost","loaded":["Jost","Noto Sans","Space Mono"]},"preview":{"light":{"bg":"oklch(1 0 0)","fg":"oklch(0.17 0 0)","accent":"oklch(0.505 0.18 28)","syntax":{"keyword":"oklch(0.505 0.18 28)","string":"oklch(0.47 0.09 160)","comment":"oklch(0.52 0 0)","callable":"oklch(0.45 0.1 250)"}},"dark":{"bg":"oklch(0.165 0 0)","fg":"oklch(0.935 0 0)","accent":"oklch(0.72 0.15 29)","syntax":{"keyword":"oklch(0.72 0.15 29)","string":"oklch(0.76 0.1 160)","comment":"oklch(0.63 0 0)","callable":"oklch(0.73 0.095 250)"}}}},"hasStylesheet":true},{"slug":"hearth","meta":{"schemaVersion":1,"slug":"hearth","name":"Hearth","description":"Warm cream & brick-red fireside docs — Fraunces headings, amber code blocks, ember-glow dark mode.","mode":"light","version":"1.0.3","fonts":{"sans":"Nunito","mono":"Spline Sans Mono","display":"Fraunces","loaded":["Fraunces","Nunito","Spline Sans Mono"]},"preview":{"light":{"bg":"oklch(0.958 0.02 85)","fg":"oklch(0.255 0.028 40)","accent":"oklch(0.49 0.145 31)","syntax":{"keyword":"oklch(0.48 0.148 30)","string":"oklch(0.47 0.1 135)","comment":"oklch(0.51 0.035 60)","callable":"oklch(0.45 0.092 245)"}},"dark":{"bg":"oklch(0.215 0.022 45)","fg":"oklch(0.915 0.02 80)","accent":"oklch(0.735 0.128 45)","syntax":{"keyword":"oklch(0.745 0.138 40)","string":"oklch(0.785 0.1 130)","comment":"oklch(0.645 0.032 65)","callable":"oklch(0.765 0.075 235)"}}}},"hasStylesheet":true},{"slug":"hollow","meta":{"schemaVersion":1,"slug":"hollow","name":"Hollow","description":"Dark violet space — neon pink headings, violet links, a quiet starfield, and razor-square midnight chrome.","mode":"dark","version":"1.0.2","fonts":{"sans":"Space Grotesk","mono":"Space Mono","loaded":["Space Grotesk","Space Mono"]},"preview":{"light":{"bg":"oklch(0.962 0.012 300)","fg":"oklch(0.24 0.045 295)","accent":"oklch(0.45 0.17 300)","syntax":{"keyword":"oklch(0.53 0.2 348)","string":"oklch(0.45 0.1 195)","comment":"oklch(0.51 0.035 292)","callable":"oklch(0.46 0.16 300)"}},"dark":{"bg":"oklch(0.155 0.035 295)","fg":"oklch(0.93 0.015 295)","accent":"oklch(0.74 0.14 300)","syntax":{"keyword":"oklch(0.76 0.17 347)","string":"oklch(0.83 0.1 190)","comment":"oklch(0.62 0.045 292)","callable":"oklch(0.76 0.13 300)"}}}},"hasStylesheet":true},{"slug":"ledger","meta":{"schemaVersion":1,"slug":"ledger","name":"Ledger","description":"Cream academic serif in the Tufte tradition — warm paper, ink prose, oxblood links, hairline rules, quiet code.","mode":"light","version":"1.0.1","fonts":{"sans":"Crimson Pro","mono":"IBM Plex Mono","loaded":["Crimson Pro","IBM Plex Mono"]},"preview":{"light":{"bg":"#fffff8","fg":"#16130e","accent":"#8b1a1a","syntax":{"keyword":"#8b1a1a","string":"#4e6328","comment":"#766b5c","callable":"#33586e"}},"dark":{"bg":"#191510","fg":"#e9e2d0","accent":"#d68a75","syntax":{"keyword":"#e2907c","string":"#a8b47c","comment":"#948a77","callable":"#93b4cd"}}}},"hasStylesheet":true},{"slug":"manuscript","meta":{"schemaVersion":1,"slug":"manuscript","name":"Manuscript","description":"A quiet Garamond book page — warm paper, soft ink, sepia rubrication, small-caps subheads, fleuron section marks.","mode":"light","version":"1.0.1","fonts":{"sans":"EB Garamond","mono":"Courier Prime","loaded":["EB Garamond","Courier Prime"]},"preview":{"light":{"bg":"oklch(0.963 0.013 85)","fg":"oklch(0.245 0.018 60)","accent":"oklch(0.44 0.095 55)","syntax":{"keyword":"oklch(0.455 0.13 30)","string":"oklch(0.44 0.085 150)","comment":"oklch(0.5 0.03 70)","callable":"oklch(0.435 0.09 275)"}},"dark":{"bg":"oklch(0.215 0.015 65)","fg":"oklch(0.885 0.022 80)","accent":"oklch(0.735 0.095 70)","syntax":{"keyword":"oklch(0.72 0.115 35)","string":"oklch(0.745 0.085 150)","comment":"oklch(0.645 0.03 75)","callable":"oklch(0.745 0.07 275)"}}}},"hasStylesheet":true},{"slug":"matcha","meta":{"schemaVersion":1,"slug":"matcha","name":"Matcha","description":"Green tea ceremony — deep matcha on warm cream, mincho headings, zen whitespace, tea-foam surfaces in both modes.","mode":"light","version":"1.0.2","fonts":{"sans":"Zen Kaku Gothic New","mono":"M PLUS 1 Code","display":"Shippori Mincho","loaded":["Zen Kaku Gothic New","Shippori Mincho","M PLUS 1 Code"]},"preview":{"light":{"bg":"oklch(0.973 0.012 106)","fg":"oklch(0.245 0.018 148)","accent":"oklch(0.435 0.105 142)","syntax":{"keyword":"oklch(0.418 0.105 150)","string":"oklch(0.47 0.092 106)","comment":"oklch(0.512 0.034 130)","callable":"oklch(0.438 0.082 196)"}},"dark":{"bg":"oklch(0.205 0.016 152)","fg":"oklch(0.938 0.018 106)","accent":"oklch(0.79 0.115 138)","syntax":{"keyword":"oklch(0.782 0.118 148)","string":"oklch(0.822 0.102 108)","comment":"oklch(0.668 0.034 130)","callable":"oklch(0.772 0.088 192)"}}}},"hasStylesheet":true},{"slug":"nocturne","meta":{"schemaVersion":1,"slug":"nocturne","name":"Nocturne","description":"Purple midnight — velvet aubergine depths, lavender links, and muted gold hairlines. Elegant, never neon.","mode":"dark","version":"1.0.2","fonts":{"sans":"Manrope","mono":"IBM Plex Mono","display":"Cormorant Garamond","loaded":["Cormorant Garamond","Manrope","IBM Plex Mono"]},"preview":{"light":{"bg":"oklch(0.958 0.012 300)","fg":"oklch(0.245 0.05 312)","accent":"oklch(0.455 0.15 295)","syntax":{"keyword":"oklch(0.46 0.16 295)","string":"oklch(0.5 0.105 85)","comment":"oklch(0.5 0.042 305)","callable":"oklch(0.455 0.125 265)"}},"dark":{"bg":"oklch(0.155 0.03 310)","fg":"oklch(0.922 0.018 300)","accent":"oklch(0.765 0.105 292)","syntax":{"keyword":"oklch(0.772 0.128 293)","string":"oklch(0.8 0.108 88)","comment":"oklch(0.645 0.045 302)","callable":"oklch(0.77 0.095 262)"}}}},"hasStylesheet":true},{"slug":"observatory","meta":{"schemaVersion":1,"slug":"observatory","name":"Observatory","description":"Night-sky atlas: star-field depth, constellation-line rules, nebula violet and comet gold over astronomer's navy.","mode":"dark","version":"1.0.3","fonts":{"sans":"Jost","mono":"Space Mono","display":"Josefin Sans","loaded":["Josefin Sans","Jost","Space Mono"]},"preview":{"light":{"bg":"oklch(0.965 0.012 255)","fg":"oklch(0.235 0.045 268)","accent":"oklch(0.47 0.1 75)","syntax":{"keyword":"oklch(0.46 0.14 300)","string":"oklch(0.45 0.1 162)","comment":"oklch(0.5 0.03 265)","callable":"oklch(0.46 0.11 250)"}},"dark":{"bg":"oklch(0.155 0.028 268)","fg":"oklch(0.93 0.015 255)","accent":"oklch(0.82 0.13 86)","syntax":{"keyword":"oklch(0.76 0.118 300)","string":"oklch(0.8 0.112 162)","comment":"oklch(0.61 0.038 265)","callable":"oklch(0.78 0.095 240)"}}}},"hasStylesheet":true},{"slug":"onyx","meta":{"schemaVersion":1,"slug":"onyx","name":"Onyx","description":"Luxury noir — jet black, champagne serif headings, and a single gold hairline accent. Watch-brand restraint.","mode":"dark","version":"1.0.3","fonts":{"sans":"Jost","mono":"IBM Plex Mono","display":"Cormorant Garamond","loaded":["Cormorant Garamond","Jost","IBM Plex Mono"]},"preview":{"light":{"bg":"oklch(0.972 0.005 85)","fg":"oklch(0.22 0.012 80)","accent":"oklch(0.5 0.105 80)","syntax":{"keyword":"oklch(0.51 0.105 82)","string":"oklch(0.47 0.07 155)","comment":"oklch(0.5 0.015 85)","callable":"oklch(0.45 0.045 250)"}},"dark":{"bg":"oklch(0.145 0.003 80)","fg":"oklch(0.92 0.022 88)","accent":"oklch(0.79 0.115 88)","syntax":{"keyword":"oklch(0.8 0.115 88)","string":"oklch(0.78 0.07 155)","comment":"oklch(0.62 0.02 85)","callable":"oklch(0.82 0.04 250)"}}}},"hasStylesheet":true},{"slug":"phosphor","meta":{"schemaVersion":1,"slug":"phosphor","name":"Phosphor","description":"Green CRT terminal — phosphor glow, scanlines, inverse-video nav, monospace everything.","mode":"dark","version":"1.0.1","fonts":{"sans":"JetBrains Mono","mono":"JetBrains Mono","display":"VT323","loaded":["VT323","JetBrains Mono"]},"preview":{"light":{"bg":"oklch(0.955 0.014 150)","fg":"oklch(0.28 0.058 150)","accent":"oklch(0.42 0.13 150)","syntax":{"keyword":"oklch(0.4 0.13 148)","string":"oklch(0.39 0.095 165)","comment":"oklch(0.49 0.05 150)","callable":"oklch(0.43 0.095 200)"}},"dark":{"bg":"oklch(0.135 0.014 150)","fg":"oklch(0.845 0.145 150)","accent":"oklch(0.87 0.215 148)","syntax":{"keyword":"oklch(0.9 0.21 148)","string":"oklch(0.9 0.12 165)","comment":"oklch(0.58 0.062 150)","callable":"oklch(0.83 0.125 200)"}}}},"hasStylesheet":true},{"slug":"riso","meta":{"schemaVersion":1,"slug":"riso","name":"Riso","description":"Risograph duotone print — warm paper, two inks (riso blue + fluorescent coral), misregistered offset shadows, and a soft linear paper grain.","mode":"light","version":"1.0.0","fonts":{"sans":"Space Grotesk","mono":"Space Mono","display":"Archivo Black","loaded":["Space Grotesk","Archivo Black","Space Mono"]},"preview":{"light":{"bg":"#f9f3e5","fg":"#1d3345","accent":"#0d5c94","syntax":{"keyword":"#a02310","string":"#0d5e6e","comment":"#4d5c66","callable":"#0b5b9b"}},"dark":{"bg":"#101d28","fg":"#f1e9d8","accent":"#58b8e8","syntax":{"keyword":"#ff8d72","string":"#66d4cf","comment":"#93a4ad","callable":"#5aaef5"}}}},"hasStylesheet":true},{"slug":"sakura","meta":{"schemaVersion":1,"slug":"sakura","name":"Sakura","description":"Cherry-blossom pastels — blush-white paper, plum ink, and rose accents on petal-soft corners; dark mode is yozakura, night blossoms under lantern-pink light.","mode":"light","version":"1.0.1","fonts":{"sans":"Nunito","mono":"M PLUS 1 Code","display":"Shippori Mincho","loaded":["Nunito","Shippori Mincho","M PLUS 1 Code"]},"preview":{"light":{"bg":"oklch(0.977 0.009 350)","fg":"oklch(0.29 0.055 340)","accent":"oklch(0.5 0.168 358)","syntax":{"keyword":"oklch(0.5 0.168 358)","string":"oklch(0.49 0.115 150)","comment":"oklch(0.5 0.04 340)","callable":"oklch(0.49 0.135 300)"}},"dark":{"bg":"oklch(0.215 0.03 330)","fg":"oklch(0.935 0.014 350)","accent":"oklch(0.78 0.115 355)","syntax":{"keyword":"oklch(0.79 0.125 355)","string":"oklch(0.78 0.115 150)","comment":"oklch(0.71 0.038 345)","callable":"oklch(0.78 0.105 300)"}}}},"hasStylesheet":true},{"slug":"scandi","meta":{"schemaVersion":1,"slug":"scandi","name":"Scandi","description":"Hygge minimalism — oat linen, sage & clay, pill nav actives and 8px corners; night mode is warm charcoal lit by candle amber.","mode":"light","version":"1.0.0","fonts":{"sans":"Manrope","mono":"Spline Sans Mono","loaded":["Manrope","Spline Sans Mono"]},"preview":{"light":{"bg":"oklch(0.963 0.012 83)","fg":"oklch(0.28 0.02 55)","accent":"oklch(0.44 0.08 152)","syntax":{"keyword":"oklch(0.47 0.105 40)","string":"oklch(0.45 0.09 150)","comment":"oklch(0.5 0.02 70)","callable":"oklch(0.45 0.08 240)"}},"dark":{"bg":"oklch(0.235 0.015 55)","fg":"oklch(0.92 0.012 85)","accent":"oklch(0.82 0.105 75)","syntax":{"keyword":"oklch(0.76 0.1 45)","string":"oklch(0.78 0.09 150)","comment":"oklch(0.66 0.02 75)","callable":"oklch(0.75 0.075 238)"}}}},"hasStylesheet":true},{"slug":"solar","meta":{"schemaVersion":1,"slug":"solar","name":"Solar","description":"Solarized precision — low-eyestrain paper tones, blue/cyan/orange accents, mono labels, technical calm in both modes.","mode":"light","version":"1.0.1","fonts":{"sans":"Source Sans 3","mono":"Source Code Pro","loaded":["Source Sans 3","Source Code Pro"]},"preview":{"light":{"bg":"#fdf6e3","fg":"#4f6369","accent":"#1c6a9f","syntax":{"keyword":"#606f00","string":"#12746c","comment":"#586b72","callable":"#1d6da3"}},"dark":{"bg":"#002b36","fg":"#93a1a1","accent":"#53a6df","syntax":{"keyword":"#8ea300","string":"#2caaa0","comment":"#899da4","callable":"#49a0dd"}}}},"hasStylesheet":true},{"slug":"sumi","meta":{"schemaVersion":1,"slug":"sumi","name":"Sumi","description":"Sumi-e ink on washi — bold mincho brush headings, deep black strokes, one vermillion hanko seal accent.","mode":"light","version":"1.0.3","fonts":{"sans":"Zen Kaku Gothic New","mono":"IBM Plex Mono","display":"Shippori Mincho B1","loaded":["Shippori Mincho B1","Zen Kaku Gothic New","IBM Plex Mono"]},"preview":{"light":{"bg":"#f7f4ec","fg":"#1b1a18","accent":"#b8232e","syntax":{"keyword":"#b8232e","string":"#6a6156","comment":"#726b5e","callable":"#433d35"}},"dark":{"bg":"#161514","fg":"#ece7db","accent":"#ea6a72","syntax":{"keyword":"#ee7a81","string":"#c8bfa6","comment":"#837d72","callable":"#f4efe4"}}}},"hasStylesheet":true},{"slug":"swissgrid","meta":{"schemaVersion":1,"slug":"swissgrid","name":"Swissgrid","description":"International Typographic Style — grid discipline, black on white, one hot Swiss-red accent, oversized section numbers.","mode":"light","version":"1.0.1","fonts":{"sans":"Inter","mono":"IBM Plex Mono","display":"Inter Tight","loaded":["Inter","Inter Tight","IBM Plex Mono"]},"preview":{"light":{"bg":"#ffffff","fg":"#0a0a0a","accent":"#e60000","syntax":{"keyword":"#d40000","string":"#3f3f3f","comment":"#6b6b6b","callable":"#0a0a0a"}},"dark":{"bg":"#0c0c0c","fg":"#f2f2f2","accent":"#ff4d4d","syntax":{"keyword":"#ff4d4d","string":"#c9c9c9","comment":"#8c8c8c","callable":"#ffffff"}}}},"hasStylesheet":true},{"slug":"tidepool","meta":{"schemaVersion":1,"slug":"tidepool","name":"Tidepool","description":"Marine teal dark — deep-sea teal surfaces, seafoam text, bioluminescent aqua accents, kelp-green success, coral danger. Light mode is the same pool at low tide.","mode":"dark","version":"1.0.0","fonts":{"sans":"Space Grotesk","mono":"JetBrains Mono","loaded":["Space Grotesk","JetBrains Mono"]},"preview":{"light":{"bg":"oklch(0.966 0.013 165)","fg":"oklch(0.27 0.045 200)","accent":"oklch(0.43 0.073 195)","syntax":{"keyword":"oklch(0.42 0.071 193)","string":"oklch(0.42 0.11 150)","comment":"oklch(0.44 0.03 200)","callable":"oklch(0.44 0.089 232)"}},"dark":{"bg":"oklch(0.235 0.032 205)","fg":"oklch(0.92 0.028 180)","accent":"oklch(0.82 0.13 185)","syntax":{"keyword":"oklch(0.84 0.14 183)","string":"oklch(0.83 0.14 152)","comment":"oklch(0.69 0.035 195)","callable":"oklch(0.8 0.1 228)"}}}},"hasStylesheet":true},{"slug":"timberline","meta":{"schemaVersion":1,"slug":"timberline","name":"Timberline","description":"Forest cabin after dark — pine & umber planks, cream prose, and matte lantern-amber accents; light mode is the same lodge at morning.","mode":"dark","version":"1.0.1","fonts":{"sans":"Source Sans 3","mono":"JetBrains Mono","display":"Fraunces","loaded":["Fraunces","Source Sans 3","JetBrains Mono"]},"preview":{"light":{"bg":"oklch(0.962 0.016 90)","fg":"oklch(0.27 0.032 155)","accent":"oklch(0.465 0.11 62)","syntax":{"keyword":"oklch(0.475 0.11 70)","string":"oklch(0.46 0.09 145)","comment":"oklch(0.49 0.035 140)","callable":"oklch(0.45 0.085 235)"}},"dark":{"bg":"oklch(0.207 0.02 60)","fg":"oklch(0.928 0.02 88)","accent":"oklch(0.78 0.125 72)","syntax":{"keyword":"oklch(0.8 0.125 80)","string":"oklch(0.79 0.1 135)","comment":"oklch(0.66 0.035 110)","callable":"oklch(0.78 0.075 220)"}}}},"hasStylesheet":true},{"slug":"washi","meta":{"schemaVersion":1,"slug":"washi","name":"Washi","description":"Warm washi paper, sumi ink, and ai-iro indigo seals — quiet Japanese stationery for calm documentation.","mode":"light","version":"1.0.3","fonts":{"sans":"Zen Kaku Gothic New","mono":"M PLUS 1 Code","display":"Shippori Mincho","loaded":["Zen Kaku Gothic New","Shippori Mincho","M PLUS 1 Code"]},"preview":{"light":{"bg":"#f6f1e4","fg":"#2b2822","accent":"#274a78","syntax":{"keyword":"#274a78","string":"#41653a","comment":"#6f6654","callable":"#963f34"}},"dark":{"bg":"#1b212c","fg":"#eae3d2","accent":"#8ab0dd","syntax":{"keyword":"#97b9e6","string":"#a9cb90","comment":"#8894a4","callable":"#e0a49a"}}}},"hasStylesheet":true}]};
7
7
 
8
8
  /**
9
9
  * Validate the browser-facing catalog contract before consuming its entries.
package/dist/compiled.css CHANGED
@@ -2770,7 +2770,6 @@ a.text-accent.underline {
2770
2770
  background: none;
2771
2771
  }
2772
2772
  .zd-compact-prose :where(h2) {
2773
- font-size: 1.3rem;
2774
2773
  --flow-space: 1.75rem;
2775
2774
  }
2776
2775
  .zd-compact-prose :where(h3) {
@@ -2799,6 +2798,18 @@ a.text-accent.underline {
2799
2798
  max-inline-size: 100%;
2800
2799
  block-size: auto;
2801
2800
  }
2801
+ .zd-content h2.zd-home-heading, html[data-theme-pack] .zd-content h2.zd-home-heading {
2802
+ font-size: var(--text-title);
2803
+ line-height: var(--leading-tight);
2804
+ padding: 0;
2805
+ border: 0;
2806
+ background: none;
2807
+ position: static;
2808
+ counter-increment: none;
2809
+ }
2810
+ .zd-content h2.zd-home-heading::before, .zd-content h2.zd-home-heading::after, html[data-theme-pack] .zd-content h2.zd-home-heading::before, html[data-theme-pack] .zd-content h2.zd-home-heading::after {
2811
+ content: none;
2812
+ }
2802
2813
  .page-loading-overlay {
2803
2814
  position: fixed;
2804
2815
  inset: 0;
package/dist/content.css CHANGED
@@ -580,7 +580,10 @@ a.text-accent.underline {
580
580
  border: 0;
581
581
  background: none;
582
582
  }
583
- .zd-compact-prose :where(h2) { font-size: 1.3rem; --flow-space: 1.75rem; }
583
+ /* The h2 look (size, weight, no decoration) is owned by `.zd-home-heading`
584
+ * below — shared with the sitemap and Tags headings; only the flow gap lives
585
+ * here. */
586
+ .zd-compact-prose :where(h2) { --flow-space: 1.75rem; }
584
587
  .zd-compact-prose :where(h3) { font-size: 1.125rem; --flow-space: 1.5rem; }
585
588
  .zd-compact-prose :where(h4) { font-size: 1rem; --flow-space: 1.25rem; }
586
589
  .zd-compact-prose :where(h5, h6) { font-size: .9375rem; --flow-space: 1.25rem; }
@@ -588,3 +591,30 @@ a.text-accent.underline {
588
591
  .zd-compact-prose > :first-child { margin-top: 0; }
589
592
  .zd-compact-prose :where(pre) { max-inline-size: 100%; overflow-x: auto; }
590
593
  .zd-compact-prose :where(img) { max-inline-size: 100%; block-size: auto; }
594
+
595
+ /* Home-page section headings (#4194). The intro heading (compact prose), the
596
+ * sitemap heading and the Tags heading share one look: bold, one step above
597
+ * body size, and NO rule / counter / bar decoration — the home page already
598
+ * separates its sections with `.zd-home-rule` dividers, so a theme pack's h2
599
+ * top-rule would double up against them. Theme packs style
600
+ * `html[data-theme-pack="x"] .zd-content h2` at (0,2,2); the second selector
601
+ * here is (0,3,2) so it wins without `!important`. A pack's
602
+ * `border-image … !important` is defeated by the zero border width: a
603
+ * border-image paints nothing into a zero-width border box. */
604
+ .zd-content h2.zd-home-heading,
605
+ html[data-theme-pack] .zd-content h2.zd-home-heading {
606
+ font-size: var(--text-title);
607
+ line-height: var(--leading-tight);
608
+ padding: 0;
609
+ border: 0;
610
+ background: none;
611
+ position: static;
612
+ counter-increment: none;
613
+ }
614
+
615
+ .zd-content h2.zd-home-heading::before,
616
+ .zd-content h2.zd-home-heading::after,
617
+ html[data-theme-pack] .zd-content h2.zd-home-heading::before,
618
+ html[data-theme-pack] .zd-content h2.zd-home-heading::after {
619
+ content: none;
620
+ }
@@ -4,6 +4,15 @@ import { h } from "preact";
4
4
  import type { PreparedHomeIntro } from "./types.js";
5
5
  export type { IntroNode, PreparedHomeIntro, PreparedHomeIntros } from "./types.js";
6
6
  export { resolveHomeIntro } from "./resolve.js";
7
+ /**
8
+ * Class list shared by every home-page section heading (#4194): the compact
9
+ * intro h2 rendered here, and the sitemap / Tags headings in `home-page`.
10
+ * `zd-home-heading` is the hook content.css uses to strip theme-pack h2
11
+ * decoration (rules, counters, bars) — the home page already separates its
12
+ * sections with `.zd-home-rule` dividers, so a pack's h2 top-rule would
13
+ * double up against them.
14
+ */
15
+ export declare const HOME_SECTION_HEADING_CLASS = "zd-home-heading text-title font-bold leading-tight";
7
16
  /** Synchronous SSR view of output produced by home-intro/prepare. No raw HTML sink. */
8
17
  export declare function CompactProse({ intro }: {
9
18
  intro: PreparedHomeIntro | null | undefined;
@@ -3,8 +3,14 @@ import { h } from "preact";
3
3
  import { defaultComponents } from "../content/index.js";
4
4
  import { makeAdmonition } from "../content-admonition/index.js";
5
5
  import { resolveHomeIntro } from "./resolve.js";
6
+ const HOME_SECTION_HEADING_CLASS = "zd-home-heading text-title font-bold leading-tight";
6
7
  const { h2: _h2, h3: _h3, h4: _h4, ...typography } = defaultComponents;
7
8
  const components = { ...typography };
9
+ components.h2 = ({ class: klass, className, children, ...rest }) => h(
10
+ "h2",
11
+ { ...rest, class: [HOME_SECTION_HEADING_CLASS, klass, className].filter(Boolean).join(" ") },
12
+ children
13
+ );
8
14
  for (const variant of ["note", "tip", "info", "warning", "danger", "caution", "important"]) components[variant] = makeAdmonition(variant);
9
15
  function renderNode(node) {
10
16
  if (typeof node === "string") return node;
@@ -16,5 +22,6 @@ function CompactProse({ intro }) {
16
22
  }
17
23
  export {
18
24
  CompactProse,
25
+ HOME_SECTION_HEADING_CLASS,
19
26
  resolveHomeIntro
20
27
  };
@@ -3,7 +3,7 @@ import { Fragment as Fragment2 } from "preact";
3
3
  import { Island } from "@takazudo/zfb";
4
4
  import { AutoLogo } from "../auto-logo/index.js";
5
5
  import { DocLayoutWithDefaults } from "../doclayout/index.js";
6
- import { CompactProse, resolveHomeIntro } from "../home-intro/index.js";
6
+ import { CompactProse, HOME_SECTION_HEADING_CLASS, resolveHomeIntro } from "../home-intro/index.js";
7
7
  import { SiteTreeNav } from "../site-tree-nav-island/index.js";
8
8
  import { TagNav } from "../nav-indexing/tag-nav.js";
9
9
  import { CategoryLinkIcon } from "../tree-nav-shared/index.js";
@@ -14,7 +14,7 @@ import { derivePrimaryChromeSlots } from "../chrome/primary-slots.js";
14
14
  import { assertChromeContext } from "../chrome/assert-chrome-context.js";
15
15
  import { prepareHomeData } from "./prepare-home-data.js";
16
16
  function HomeSectionHeading({ children }) {
17
- return /* @__PURE__ */ jsx("h2", { class: "text-title font-bold mb-vsp-md", children });
17
+ return /* @__PURE__ */ jsx("h2", { class: `${HOME_SECTION_HEADING_CLASS} mb-vsp-md`, children });
18
18
  }
19
19
  function cssUrl(url) {
20
20
  return `url("${url.replace(/[\\"]/g, "\\$&")}")`;
@@ -161,47 +161,50 @@ function createHomePageView(ctx) {
161
161
  )
162
162
  })
163
163
  ] }),
164
- settings.docTags && tagCount > 0 && /* @__PURE__ */ jsx("section", { class: "mt-vsp-xl", children: tags && tags.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
165
- /* @__PURE__ */ jsx(HomeSectionHeading, { children: t("doc.tags", locale) }),
166
- /* @__PURE__ */ jsx(
167
- TagNav,
168
- {
169
- variant: "all",
170
- tags: tags.slice(0, tagLimit),
171
- labels: {
172
- tags: t("doc.tags", locale),
173
- taggedWith: t("doc.taggedWith", locale)
174
- }
175
- }
176
- ),
177
- tags.length > tagLimit && /* @__PURE__ */ jsx("div", { class: "mt-vsp-sm text-title text-muted", "aria-hidden": "true", children: "\u2026" }),
178
- /* @__PURE__ */ jsx("div", { class: "mt-vsp-md", children: /* @__PURE__ */ jsxs(
179
- "a",
180
- {
181
- href: withBase(`${prefix}/docs/tags`),
182
- class: "group inline-flex items-center gap-hsp-xs text-accent hover:underline",
183
- children: [
184
- /* @__PURE__ */ jsx(CategoryLinkIcon, { className: "w-icon-sm text-accent" }),
185
- /* @__PURE__ */ jsx("span", { children: t("doc.seeAllTags", locale) })
186
- ]
187
- }
188
- ) })
189
- ] }) : (
190
- // Legacy fallback: caller passed only `tagCount` (no tag list) —
191
- // reproduce the pre-#3027 single "All Tags" link so existing
192
- // `@takazudo/zudo-doc/home-page` consumers are unaffected.
193
- /* @__PURE__ */ jsxs(Fragment, { children: [
194
- /* @__PURE__ */ jsx(HomeSectionHeading, { children: t("doc.allTags", locale) }),
164
+ settings.docTags && tagCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
165
+ /* @__PURE__ */ jsx("hr", { class: "zd-home-rule", "data-home-rule": "tags" }),
166
+ /* @__PURE__ */ jsx("section", { class: "zd-home-tags", children: tags && tags.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
167
+ /* @__PURE__ */ jsx(HomeSectionHeading, { children: t("doc.tags", locale) }),
195
168
  /* @__PURE__ */ jsx(
169
+ TagNav,
170
+ {
171
+ variant: "all",
172
+ tags: tags.slice(0, tagLimit),
173
+ labels: {
174
+ tags: t("doc.tags", locale),
175
+ taggedWith: t("doc.taggedWith", locale)
176
+ }
177
+ }
178
+ ),
179
+ tags.length > tagLimit && /* @__PURE__ */ jsx("div", { class: "mt-vsp-sm text-title text-muted", "aria-hidden": "true", children: "\u2026" }),
180
+ /* @__PURE__ */ jsx("div", { class: "mt-vsp-md", children: /* @__PURE__ */ jsxs(
196
181
  "a",
197
182
  {
198
183
  href: withBase(`${prefix}/docs/tags`),
199
- class: "text-accent underline hover:text-accent-hover",
200
- children: t("doc.allTags", locale)
184
+ class: "group inline-flex items-center gap-hsp-xs text-accent hover:underline",
185
+ children: [
186
+ /* @__PURE__ */ jsx(CategoryLinkIcon, { className: "w-icon-sm text-accent" }),
187
+ /* @__PURE__ */ jsx("span", { children: t("doc.seeAllTags", locale) })
188
+ ]
201
189
  }
202
- )
203
- ] })
204
- ) })
190
+ ) })
191
+ ] }) : (
192
+ // Legacy fallback: caller passed only `tagCount` (no tag list)
193
+ // reproduce the pre-#3027 single "All Tags" link so existing
194
+ // `@takazudo/zudo-doc/home-page` consumers are unaffected.
195
+ /* @__PURE__ */ jsxs(Fragment, { children: [
196
+ /* @__PURE__ */ jsx(HomeSectionHeading, { children: t("doc.allTags", locale) }),
197
+ /* @__PURE__ */ jsx(
198
+ "a",
199
+ {
200
+ href: withBase(`${prefix}/docs/tags`),
201
+ class: "text-accent underline hover:text-accent-hover",
202
+ children: t("doc.allTags", locale)
203
+ }
204
+ )
205
+ ] })
206
+ ) })
207
+ ] })
205
208
  ]
206
209
  }
207
210
  );
package/dist/safelist.css CHANGED
@@ -1,2 +1,2 @@
1
1
  /* generated by gen-safelist.mjs — do not edit by hand */
2
- @source inline("-domtweaker-enabled -elpath-enabled -left-[calc(var(--spacing-icon-lg)/2)] -link -mb-px -ml-hsp-sm -mt-px -noscript -open -state -state-v2 -state-v3 -state-v4 -translate-x-full 2xl:w-[24px] [&::-webkit-details-marker]:hidden [&_a]:pointer-events-auto [&_a]:text-accent [&_a]:underline [&_li]:mb-0 [&_nav]:mb-0 [asset-viewer] [data-admonition] [data-kbd-shortcut] [data-switcher-launcher] [doc-history-meta] [doc-history] [doc-layout] [img-src-check] [llms-txt] [zudo-doc] a a2 abbr about above absent absolute accent accent- accent:accent- access across activated active actual actually add added admonition admonition- admonition-body admonition-title admonition/callout after after-breadcrumb after-content after-navigate after-sidebar after-title against agent agents ai-chat ai-chat-md ai-chat-trigger alert align align-top all allow allow-same-origin allow-scripts allowed alone already already-executed already-multiline already-picked also alt always an anchor and and/or animate-pulse animate-spin announce ansehen antialiased any anywhere anzeigen app appear application/json application/octet-stream application/pdf application/sql application/toml application/x-httpd-php application/xml application/yaml applied applies apply applying approach approval are area arg argument aria-atomic aria-busy aria-controls aria-current aria-disabled aria-expanded aria-haspopup aria-hidden aria-label aria-labelledby aria-live aria-orientation aria-pressed aria-selected aria-valuemax aria-valuemin aria-valuenow arm arms around arrows article as asc ascii aside aspect-[1200/630] aspect-square asset asset- asset-components assets assets/client assistant async at at-rule attach attribute attributes audio auf author authored auto auto-logo-mask autogenerated availability available avc1 avif avis avoid await away b back backdrop:bg-bg/30 backdrop:bg-bg/80 backdrop:bg-overlay/60 backdrop:z-modal-backdrop background background-color backslashes backtick backticks baked band banner bar bare base base- base64 base:base- based bash batch be bearbeiten because becomes been before below best best-effort between bg bg-[#fff] bg-accent bg-bg bg-chat-assistant-bg bg-chat-user-bg bg-code-bg bg-fg bg-info/10 bg-info/5 bg-muted bg-overlay/30 bg-surface bg-surface/50 bg-transparent bg-warning/10 bg-warning/5 bi big bigint bin binaries bind binding blank blanks block blockquote blocks blur bodies body body-end-components body-end-scripts bold boolean bootstrap border border-accent border-b border-b-2 border-b-[5px] border-bg/30 border-collapse border-danger border-dashed border-fg border-image border-info/30 border-l border-l-0 border-l-[3px] border-left-width border-muted border-none border-r border-r-0 border-radius border-solid border-t border-t-[2px] border-t-[3px] border-transparent border-warning/30 border-width border-y both bottom-hsp-lg bottom-vsp-xl boundaries box box-border br brackets brand breadcrumb:end breadcrumb:start break-words brief broken brown browser browser-tab browsers browses btn budget bug build builder built built-in bundler but button buttons by bypassed byte-identical bytes c cache cached calendar-valid call callable called caller calls can cancellation candidate cannot canonical canvas caption captured captures card card-grid cards carry case-insensitive cases cat-nav- catalog catch categories category caught caution center center/contain ch chains change changed changelog changelogs changes characters check checkbox checked checker child children choose chrome chrome-font ci circle cite cjs class class-less class-mode claude claude-agents claude-commands claude-md claude-resources claude-skills cleaned cleanly clear clearing click client client-router client-side clip clobber clobbering close closed closes closing closure code code-block-sr-announce code-group code-group-panel codex codex-agents codex-agents-md codex-config codex-hooks codex-resources codex-rules codex-skills col col-resize col-span-full col-start-1 colgroup collapse collapses collapsible collision color color-scheme color-scheme-changed color-scheme-provider color-tweak colorization colors column comma command commands commas comment commercial commercial-font-denylist commit compare complete component component:github-link component:language-switcher component:search component:theme-toggle component:version-switcher composes composition compute computed concrete conf config configuration configurations configure configured conflicting conflicts confuse connect const construction consumer consumes contain container containers containing contains content content-admonition content-layer content-link content-type content-wrapper:end content-wrapper:start contents context contract control controller controls converts cookie-blocking copied copy copy-url core corners correct correctly corrupt could count covered covers cpp crashes created cross-component crumb- cs csharp css css-presence csv ctx cur current current-path/index.ts current-route currently cursor cursor-not-allowed cursor-pointer custom cycle d danger dark dash data data-active data-admonition data-asset-details-hidden data-auto-logo data-base data-close-search data-current-locale data-default-locale data-doc-date data-doc-description data-doc-metainfo data-doc-pager data-doc-unavailable-versions data-find-active data-find-match data-footer data-group-id data-header data-header-logo data-header-nav data-header-right data-home-rule data-kbd-shortcut data-lang data-language-menu data-language-switcher data-language-toggle data-loading-index data-mermaid data-mermaid-enlarge-ready data-mermaid-rendered data-mermaid-src data-nav-active data-nav-category data-nav-item data-nav-item-dropdown data-nav-more data-nav-more-menu data-nav-more-toggle data-no-results data-note-tray-group data-note-tray-row data-open-search data-pan-active data-processed data-props data-result-count-template data-search-count data-search-count-narrow data-search-dialog data-search-input data-search-placeholder data-search-results data-search-unavailable data-sidebar-hidden data-sidebar-resizer data-site-nav data-switcher-card data-switcher-launcher data-tab-btn data-tab-default data-tab-label data-tab-value data-tabs data-taglist-group data-testid data-theme data-theme-pack data-theme-pack-switcher data-theme/style data-toc-hidden data-trailing-slash data-unavailable-label data-variant data-version-banner data-version-latest data-version-menu data-version-rewire data-version-slug data-version-switcher data-version-toggle data-version-trigger-label data-zd-asset-action data-zd-asset-actions data-zd-asset-details data-zd-asset-details-chevron data-zd-asset-details-list data-zd-asset-details-toggle data-zd-asset-index-action data-zd-asset-index-empty data-zd-asset-index-page data-zd-asset-page data-zd-asset-tree data-zd-copy-url data-zd-html-preview-reservation data-zd-label-collapse data-zd-label-expand data-zd-mobile-sidebar data-zd-mobile-toc data-zd-nav-section data-zd-nosidebar data-zd-pending data-zd-props-preserve data-zd-sidebar-open-key data-zd-theme-pack-css data-zd-theme-pack-css-loading data-zd-theme-pack-loading data-zd-toc data-zd-wide data-zfb-island data-zfb-island-remount data-zfb-reload data-zfb-transition-persist date dated dd decimal decision declaration declare declared declares decoration decoration-muted deepest deepest-match default default-transition-duration defaults deferral deferred del delegated delete deliberately delimiter dependency depends depth der desc description design design-token design-token-panel design-token-trigger desktop desktop-sidebar desktop-sidebar-toggle desktop-sidebar-toggle-island desktop-toc-toggle destroys destructive detach detached details determine deterministic dev dfn diagram diagrams dialog did die dieser diff diff-line-added diff-line-content diff-line-empty diff-line-num diff-line-removed diff-row differ different dir directives directly directories directory disabled disabled:cursor-default disabled:opacity-50 disabled:pointer-events-none disc display display:none dist distance distinct div dl do doc doc-card- doc-content-band doc-history doc-history-generate doc-history-panel doc-history-trigger doc-page doc-pager doc-prose doc-title docblock docs docs- docs-v- document document-level documentation documented documents does dog dot double-registration download draft drag drawer drift drifts drop dropdown dropdown-parent dropdowns dt duplicate duration duration-150 duration-200 during dynamically e e2e each eager earlier early ease-in-out edge editing einer either eject ejectable ejectables ejected el element elements els else em embedded emit emitting empty empty/undefined en enable enabled end enhanced enhancement enlarged entire entities entries entry entrypoint env equal error escape escaped escapes even event eventually every everything-enabled exactly example exceeds excerpt excludes exclusively exist existing exists exit expand expected explicit export extends extra f factories failed fall fallback fallbacks falling falls false family fast favicon feature fg field fields fieldset figcaption figure file files fill fills finally find find-match find-match-active fire fires first first-paint first:mt-0 fit fix fixed fixed-width fixtures flag flash flat flex flex-1 flex-col flex-wrap flip flipping flips flow flush-left focus focus-visible:bg-accent/10 focus-visible:border-accent focus-visible:decoration-accent focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2 focus-visible:text-accent focus-visible:underline focus-within:border-accent focus-within:z-local-1 focus:border-accent focus:outline-none focus:text-accent focus:underline folder folders follows font font-bold font-face-parity font-family font-file-missing font-medium font-mono font-sans font-scale font-semibold font-size font-weight font-weight-bold font-weight-medium font-weight-normal font-weight-semibold font/woff2 fonts footer footer- for form format former found four-link fox fragment frame free freeze fresh from frontmatter frontmatter-preview frozen frozen-script fs-extra ftyp full fully function further g gains gap-[0.3em] gap-[clamp(1.5rem,3vw,4rem)] gap-hsp-2xs gap-hsp-lg gap-hsp-md gap-hsp-sm gap-hsp-xl gap-hsp-xs gap-vsp-2xs gap-vsp-3xs gap-vsp-lg gap-vsp-md gap-vsp-xs gap-x-hsp-2xs gap-x-hsp-lg gap-x-hsp-md gap-x-hsp-sm gap-x-hsp-xs gap-y-vsp-2xs gap-y-vsp-3xs gap-y-vsp-lg gap-y-vsp-md gap-y-vsp-xs gaps gate geladen2026 generate generated generation genuine geometry get getting-started gif git github github-dark github-link give go got grab gradient granular graph grid grid-cols-1 grid-cols-2 grid-cols-[auto_1fr] grid-rows-[auto_auto] grid-rows-subgrid group group-focus-visible:decoration-accent group-focus-visible:text-accent group-focus-visible:text-accent-hover group-focus-visible:text-fg group-focus-visible:underline group-focus-within:block group-hover:bg-fg group-hover:block group-hover:decoration-accent group-hover:text-accent group-hover:text-accent-hover group-hover:text-bg group-hover:text-fg group-hover:underline group-open:rotate-90 grouped grouping guard guards gz h h-[0.5rem] h-[0.625rem] h-[0.875rem] h-[1.125rem] h-[1.25rem] h-[1.575rem] h-[10rem] h-[14px] h-[1em] h-[1lh] h-[2.5rem] h-[2rem] h-[3.5rem] h-[3rem] h-[70vh] h-[90vh] h-[calc(100%-3rem)] h-[calc(100vh-3.5rem)] h-dvh h-full h-icon-lg h-icon-md h-icon-sm h-icon-xs h1 h1s h2 h22013h4 h2s h3 h4 h5 h6 half hand-copied hand-editable handle handled handler handlers happens hard-loaded hardcoded has hash-link have head head-links head-scripts header header- header-call:end header-call:start header-right heading heading-h2 heading-h3 heading-h4 heading-rule headings height here hex hi-root hidden hide hierarchical highlight highlighting history home hook hooks hooks-json horizontal host hover:bg-[color-mix(in_srgb,var(--color-surface)_80%,var(--color-fg)_20%)] hover:bg-accent-hover hover:bg-accent/10 hover:bg-danger/10 hover:bg-surface hover:border-accent hover:border-accent-hover hover:border-fg hover:decoration-accent hover:text-accent hover:text-accent-hover hover:text-fg hover:underline hover:z-local-1 hpp hr href hrefs hsp hsp-2xl hsp-2xs hsp-lg hsp-md hsp-sm hsp-xl hsp-xs html i i18n/theme. i2 i3 i4 ico icon icon-lg icon-md icon-sm icon-xs id identical idle idx if iframe ignore ignoring image image-enlarge image-overlay-inset image/avif image/gif image/jpeg image/png image/webp image/x-icon img img-src-check implementation import import/export important important-allowlist imports in inactive includes including incomplete independently index index2026 indirectly info inherit inherited ini initial initialised injected inline inline-block inline-flex inner input input-clear ins inserted-after-color-mode inserted-after-color-scheme inserted-after-site-name inserted-first insertion inset-0 inside inside-only inspect install installation installed instance instanceof instead instructions intended intent intentionally intercept interface internal interpolation into introductions invalid invalidated inverse inversion invocation invoke is is-checker island island-root iso2 iso3 iso4 iso5 iso6 isom ispe issues it italic item item- items items-baseline items-center items-end items-start iteration its itself ja java javascript jpeg jpg js json jsx jumps just justification justify-between justify-center justify-end justify-start katex kbd keep keeping keeps kept key keyboard keyboard-shortcut keydown keys keystroke keyword keywords khroma known-token-names kopieren kotlin kt label landing lands language-menu language-switcher language-toggle larger last:border-b-0 last:pb-0 later latest launch layout lazy leading leading-none leading-normal leading-relaxed leading-snug leading-tight leaf leaf- leak leaves leaving left left-0 left:calc legend legitimate length lets letter-spacing lg lg:block lg:border lg:border-fg lg:border-solid lg:flex lg:flex-1 lg:flex-col lg:flex-row lg:gap-hsp-xl lg:grid-cols-3 lg:grid-cols-[repeat(auto-fit,minmax(12rem,1fr))] lg:h-[90vh] lg:hidden lg:justify-start lg:m-auto lg:max-h-[90vh] lg:max-w-[52.5rem] lg:ml-[var(--zd-sidebar-w)] lg:pr-hsp-sm lg:pt-vsp-2xl lg:px-hsp-2xl lg:py-vsp-2xl lg:text-left lg:w-[90vw] lg:w-[clamp(16rem,25%,22rem)] li li2 library license lifecycle light light/dark like likely line line-height line/statement lines linger link link- links list list-disc list-none listener lists literal literally literals live lives llms llms-txt load loaded loader loading local local-1 local-2 local-3 locale locales log logo long longer longest-match look loses lostpointercapture lower luminance m m-0 m-auto m10 m14 m16 m21 m6 machinery main major make malformed malformed-markup malicious managed manifest manual manually maps mark markdown marks match matches matching math math-display math-inline max max-h-[85vh] max-h-[90vh] max-h-full max-h-none max-w-[16rem] max-w-[64rem] max-w-[85%] max-w-[85vw] max-w-[90vw] max-w-[calc(100vw-2rem)] max-w-[calc(100vw-var(--spacing-hsp-xl))] max-w-[clamp(50rem,75vw,90rem)] max-w-full max-w-none max-w-sm max-width maximum may mb-0 mb-vsp-2xs mb-vsp-lg mb-vsp-md mb-vsp-sm mb-vsp-xl mb-vsp-xs md mdx means measured measurement measures measuring mechanism menu mermaid message messages meta meta-knob meta-schema metadata migration min-h-0 min-h-[20rem] min-h-[44px] min-h-[60vh] min-h-[calc(100vh-3.5rem)] min-h-screen min-w-0 min-w-[10rem] min-w-[3rem] min-w-[44px] min-w-[8rem] minifier minor mirror mirroring mirrors missing mit mjs ml-[calc(var(--spacing-hsp-xl)+1px)] ml-auto ml-hsp-2xl ml-hsp-lg ml-hsp-md ml-hsp-sm ml-hsp-xl mobile mod modal modal-backdrop mode model modify module moment monospace month more most mount mounted mouseenter mouseleave mov move mp4 mp41 mp42 mr-[calc(var(--spacing-hsp-xl)+1px)] mr-hsp-sm ms mt-0 mt-vsp-2xl mt-vsp-2xs mt-vsp-3xs mt-vsp-lg mt-vsp-md mt-vsp-sm mt-vsp-xl mt-vsp-xs multi-changelog multiple must mutates mutation mutations muted mvhd mx-auto my-vsp-lg my-vsp-md n name named names native natural nav nav-active nav-card- nav/doc navigating navigation navigations near needed needs neither nested neutral never new newly-swapped next nicht no no-color-scheme no-data-theme-selector no-enlarge no-op no-repeat no-underline noch node node:buffer node:fs node:fs/promises node:module node:path node:url node:util nodes nofollow noindex non-draggable non-empty non-index non-light-dark non-literal non-null non-persisted nonblank none noopener noreferrer normal noscript not notable note note-tray notes now null number numeric object object-contain observe observer occurred of off offered offsets ofl-required og:description og:image og:image:alt og:image:height og:image:width og:title og:type og:url oklch ol old older omit omitting on once one only onto opacity-60 open open/close option or order original other others otherwise out outgoing outline-none output outside over overflow overflow-auto overflow-hidden overflow-x-auto overflow-y-auto overflow-y:auto overlaps override overrides overscroll-contain overwrite own owned p p-0 p-hsp-2xs p-hsp-lg p-hsp-md p-hsp-sm p-hsp-xl pack pack-scoped package package-default package-injected package-owned packages packs padding page page-loading page-loading-overlay page-loading-spinner page-navigate-end page-title page-wide pages pages/. paint paint-and-read palette pan panel panels paragraph paren-balance-aware parent parse parse/render parse5 parsed parser parses part pass passed passes patch path paths pattern payload payload-budget pb-[50vh] pb-vsp-2xs pb-vsp-lg pb-vsp-md pb-vsp-xl pb-vsp-xs pdf peer peer-focus-visible:border-accent peer-focus-visible:text-accent peer-hover:border-accent peer-hover:text-accent pending per per-block per-link per-package per-release percent permanently persisted persistence php pi pick picked picks picocolors pins pipelines pl-[1.25rem] pl-hsp-lg pl-hsp-md pl-hsp-sm pl-hsp-xl place place-items-center placeholder placeholder:text-muted plain plural plus png png16 png32 pnpm point pointer pointer-events-none pointercancel pointerdown pointermove pointerup policy polite polygon polyline popover populates port position position:fixed poster pr-hsp-lg pr-hsp-md pr-hsp-sm pr-hsp-xl pr-hsp-xs pre pre-lowercased preact preact/compat preact/hooks preact/jsx-runtime preconnect preference prefix preload pres present preserving preview preview-swatch-color previews2026 previously primary print prior private produce produced produces producing production profiles project project-owned project-root-relative properties property props prose protocol-relative provided proxy pt-[0.15rem] pt-[2px] pt-vsp-3xs pt-vsp-md pt-vsp-sm pt-vsp-xl pt-vsp-xs ptag- public purely puts px px-hsp-2xl px-hsp-2xs px-hsp-lg px-hsp-md px-hsp-sm px-hsp-xl px-hsp-xs py py-0 py-[2px] py-[4px] py-[calc(var(--spacing-vsp-xs)+0.15rem)] py-hsp-2xs py-hsp-3xs py-hsp-sm py-hsp-xs py-vsp-2xs py-vsp-3xs py-vsp-lg py-vsp-md py-vsp-sm py-vsp-xl py-vsp-xs python q qt query question quick r radius radius-full radius-lg rail ramp range rar rather raw rb re-encode/decode re-exports re-init re-initialized re-querying re-render re-renders re-run re-running re-runs re-selects re-syncs reach reached reaches read reader reader-facing reading readings reads/rewrites real real-value received receives recorded recovers rect redefine redistribution ref- reference referenced references refetch refresh refreshes refusing regardless regenerate regenerates regex registry reinit reinits rejected rel relative release released releases reload relying rem remapped remembered remove remove/rename removed removing rename render rendered renderer renderers renders reorder repaint repair repeated repeating replace replaced replacement replaces repopulate report repository republished requested require required requires reserved resize resize-x resolve resolved resolves responded response restore restores restyle result result-click results results-area retry return returns rev-parse reveal revision revisions rewire rewrite rewrites right right- right-0 right-hsp-lg ring-2 ring-accent risking ro robots role roles root rotate-180 rotate-90 round round-trip rounded rounded-[0.75rem] rounded-bl-[0.25rem] rounded-bl-[1rem] rounded-bl-lg rounded-br-[0.25rem] rounded-br-[1rem] rounded-full rounded-lg rounded-md rounded-t-[1rem] rounds route routed router routes routes-src routes/sitemap.xml row row-span-2 row-start-1 row-start-2 rp rs rt ruby rule rules run running runs runtime rust s safe safely safer same same-locale samp sans sans-serif scale scanned scanning scheme scoped scoping score scored script script- script-eval script-evaluation script-injection scripts scroll scrollbar scrolled scrollend scrolling scss seam search search-index section section- see seed segment segments sehen select select-none selection-bg selection-fg selector self self-contained self-hosted self-start self-stretch semantic semibold semver sentinel separator serialised serialize server server-rendered session set sets setting settles setup sh shadow shadow-[0_1px_3px_color-mix(in_srgb,var(--color-fg)_8%,transparent)] shadow-lg shadow-md shadowed shape share shared sharing shell ship shipped ships short shortcut should show shown shrink-0 sidebar sidebar- sidebar-toggle-island sidebar-tree-island sidebar-w sidecar signal silently similarity simple since single single-line single-object-literal singular site site-search site-tree-nav-island sitemap- sites size size-icon-lg skill skills skip skipped skipping skips slash slot slug slug-dir-parity slugs sm:block sm:border sm:border-muted sm:col-start-2 sm:flex sm:flex-row sm:gap-x-hsp-xl sm:grid sm:grid-cols-2 sm:grid-cols-[minmax(0,1fr)_auto] sm:grid-cols-subgrid sm:h-auto sm:hidden sm:items-center sm:justify-between sm:max-h-[80vh] sm:max-w-[52rem] sm:mr-0 sm:mx-auto sm:my-[10vh] sm:rounded-lg sm:row-span-2 sm:row-start-1 small smol-toml smooth snapping snapshot snapshots so soft soft-nav solid some somehow sort source sources space-y-vsp-2xs space-y-vsp-lg space-y-vsp-sm spacing spacing-0 spacing-px span spans spec specifiers specify spelling splitter spread spurious sql square sr-only src srcset stable stack stale standalone start state state- state:state- statement statements status stay staying sticky still stock stop stops stored straddles stray strict string strings strip stripe strips stroke-linecap stroke-linejoin stroke-width strong stronger stub-rendered style style-attribute styled styles stylesheet sub subagents subsequent substitute substitution subtracting success successful summary sup supply supported surface surfaces survives svg swap swapped swaps swift switcher switching symlink synchronous synchronously syntactically syntax t tab tab-item tab-panel tabindex table tablist tabpanel tabs tabs-container tabs-content tabs-nav tabular-nums tag tag- tag-item- tagged tags tags:audit take tar tbody td temp-element template temporary temporary-element terminal terms test-results tested text text-accent text-bg text-body text-caption text-center text-chat-assistant-text text-chat-user-text text-code-fg text-danger text-decoration text-display text-fg text-fg/60 text-heading text-info text-left text-micro text-muted text-muted/50 text-right text-scale-2xl text-scale-2xs text-scale-lg text-scale-md text-scale-sm text-scale-xl text-scale-xs text-small text-title text-warning text/css text/csv text/html text/javascript text/jsx text/markdown text/mdx text/plain text/tab-separated-values text/tsx text/typescript text/x-c text/x-csharp text/x-go text/x-java-source text/x-kotlin text/x-python text/x-ruby text/x-rust text/x-scss text/x-shellscript text/x-swift textarea tfoot tgz th than that the thead their them theme theme-color theme-pack theme-pack-changed theme-packs theme-packs/index.json theme-toggle theme/token then there these they this those though three threw through throw throws tighten time timeline tip title tkhd to toast toc toggle toggle- toggle-ai-chat toggle-design-token-panel toggles toggling token tokens tolerates toml too toolbar tooltip top top-0 top-[3.5rem] top-full top-hsp-2xs top-level total touches tr track tracked tracking-wide tracking-wider trade-off trailing transclude transferred transition transition-[background,color,border-color] transition-[left,color] transition-[right,color] transition-colors transition-transform translate-x-0 translated translations transparent tray treats tree tree-child- tree-item- tree-top- trigger trigger:ai-chat trigger:design-token-panel triggers true truncate truncated try ts tsv tsx turn twitter:card twitter:creator twitter:description twitter:image twitter:site twitter:title two txt type typeface typeof typescript typography u ul umschalten unable unavailable unbalanced unchanged und undefined under underline underlines understand unit-tested unknown unlike unlisted unmaintained unmatchable unobserve unreadable unrelated unreleased unresolvable unresolved unsafe unset unsupported unterminated until unusable unwrapped up up-to-date update updated upper uppercase url use used useful user uses using usual utf-8 utf8 utilities utility v v2 val value value-reader values var variable variant verbatim version version- version-menu version-switcher versions vertical via video video/mp4 video/quicktime video/webm viewer viewing viewport viewports virtual:zudo-doc-asset-bodies virtual:zudo-doc-chrome-bindings virtual:zudo-doc-design-token-panel-config virtual:zudo-doc-route-context visibility visible vocabulary void von vsp vsp-2xl vsp-2xs vsp-3xs vsp-lg vsp-md vsp-sm vsp-xl vsp-xs w w-1/2 w-[0.5rem] w-[0.625rem] w-[0.875rem] w-[1.125rem] w-[1.575rem] w-[1.5rem] w-[1.75rem] w-[12rem] w-[14px] w-[16px] w-[16rem] w-[18px] w-[1em] w-[2.5rem] w-[280px] w-[2rem] w-[320px] w-[360px] w-[6.5rem] w-[90vw] w-[calc(100vw-2rem)] w-[var(--zd-sidebar-w)] w-dvw w-full w-icon-lg w-icon-md w-icon-sm w-icon-xs walk walks want warn warning was watching way wbr wbr- we webm webp website weight went were what when where whereas whether which while whitespace-nowrap whitespace-pre whole whose wide wide-gamut wider-than-scrollbar width will window wins wird wired with without word wordmark working works worktrees would wrap wrapped wrapper wrappers wrapping wraps writing written wrong wrote wurde x xl:flex xl:hidden xlink:href xml y-scrollbar yaml year yet yielded yields yml you your z-dropdown z-local-1 z-modal z-modal-backdrop z-popover z-sidebar z-toolbar zd-asset-code zd-asset-details-rail zd-asset-details-toggle zd-asset-filebar zd-asset-media-grid zd-asset-media-rail zd-asset-page zd-asset-pdf zd-asset-stage zd-compact-prose zd-content zd-desktop-sidebar-toggle zd-desktop-toc-toggle zd-doc-content-band zd-enlarge-btn zd-enlarge-dialog zd-enlarge-dialog-close zd-enlargeable zd-home-copy zd-home-hero zd-home-inner zd-home-intro zd-home-links zd-home-rule zd-home-sitemap zd-html-preview-code zd-mermaid-dialog zd-mermaid-enlargeable zd-mermaid-tool-btn zd-mermaid-toolbar zd-mermaid-transform zd-mermaid-viewport zd-sidebar-content-wrapper zd-sidebar-open zd-theme-pack-dialog-title zd-toc-col zdtp zfb zfb:after-swap zfb:before-preparation zfb:before-swap zip zod zoom zudo-design-token-panel zudo-design-tokens/v3 zudo-doc zudo-doc-asset-details-visible zudo-doc-code-wrap zudo-doc-design-token-panel-modal zudo-doc-design-tokens zudo-doc-sidebar-visible zudo-doc-sidebar-width zudo-doc-theme zudo-doc-theme-pack zudo-doc-toc-visible zudo-doc-tweak zum");
2
+ @source inline("-domtweaker-enabled -elpath-enabled -left-[calc(var(--spacing-icon-lg)/2)] -link -mb-px -ml-hsp-sm -mt-px -noscript -open -state -state-v2 -state-v3 -state-v4 -translate-x-full 2xl:w-[24px] [&::-webkit-details-marker]:hidden [&_a]:pointer-events-auto [&_a]:text-accent [&_a]:underline [&_li]:mb-0 [&_nav]:mb-0 [asset-viewer] [data-admonition] [data-kbd-shortcut] [data-switcher-launcher] [doc-history-meta] [doc-history] [doc-layout] [img-src-check] [llms-txt] [zudo-doc] a a2 abbr about above absent absolute accent accent- accent:accent- access across activated active actual actually add added admonition admonition- admonition-body admonition-title admonition/callout after after-breadcrumb after-content after-navigate after-sidebar after-title against agent agents ai-chat ai-chat-md ai-chat-trigger alert align align-top all allow allow-same-origin allow-scripts allowed alone already already-executed already-multiline already-picked also alt always an anchor and and/or animate-pulse animate-spin announce ansehen antialiased any anywhere anzeigen app appear application/json application/octet-stream application/pdf application/sql application/toml application/x-httpd-php application/xml application/yaml applied applies apply applying approach approval are area arg argument aria-atomic aria-busy aria-controls aria-current aria-disabled aria-expanded aria-haspopup aria-hidden aria-label aria-labelledby aria-live aria-orientation aria-pressed aria-selected aria-valuemax aria-valuemin aria-valuenow arm arms around arrows article as asc ascii aside aspect-[1200/630] aspect-square asset asset- asset-components assets assets/client assistant async at at-rule attach attribute attributes audio auf author authored auto auto-logo-mask autogenerated availability available avc1 avif avis avoid await away b back backdrop:bg-bg/30 backdrop:bg-bg/80 backdrop:bg-overlay/60 backdrop:z-modal-backdrop background background-color backslashes backtick backticks baked band banner bar bare base base- base64 base:base- based bash batch be bearbeiten because becomes been before below best best-effort between bg bg-[#fff] bg-accent bg-bg bg-chat-assistant-bg bg-chat-user-bg bg-code-bg bg-fg bg-info/10 bg-info/5 bg-muted bg-overlay/30 bg-surface bg-surface/50 bg-transparent bg-warning/10 bg-warning/5 bi big bigint bin binaries bind binding blank blanks block blockquote blocks blur bodies body body-end-components body-end-scripts bold boolean bootstrap border border-accent border-b border-b-2 border-b-[5px] border-bg/30 border-collapse border-danger border-dashed border-fg border-image border-info/30 border-l border-l-0 border-l-[3px] border-left-width border-muted border-none border-r border-r-0 border-radius border-solid border-t border-t-[2px] border-t-[3px] border-transparent border-warning/30 border-width border-y both bottom-hsp-lg bottom-vsp-xl boundaries box box-border br brackets brand breadcrumb:end breadcrumb:start break-words brief broken brown browser browser-tab browsers browses btn budget bug build builder built built-in bundler but button buttons by bypassed byte-identical bytes c cache cached calendar-valid call callable called caller calls can cancellation candidate cannot canonical canvas caption captured captures card card-grid cards carry case-insensitive cases cat-nav- catalog catch categories category caught caution center center/contain ch chains change changed changelog changelogs changes characters check checkbox checked checker child children choose chrome chrome-font ci circle cite cjs class class-less class-mode claude claude-agents claude-commands claude-md claude-resources claude-skills cleaned cleanly clear clearing click client client-router client-side clip clobber clobbering close closed closes closing closure code code-block-sr-announce code-group code-group-panel codex codex-agents codex-agents-md codex-config codex-hooks codex-resources codex-rules codex-skills col col-resize col-span-full col-start-1 colgroup collapse collapses collapsible collision color color-scheme color-scheme-changed color-scheme-provider color-tweak colorization colors column comma command commands commas comment commercial commercial-font-denylist commit compare complete component component:github-link component:language-switcher component:search component:theme-toggle component:version-switcher composes composition compute computed concrete conf config configuration configurations configure configured conflicting conflicts confuse connect const construction consumer consumes contain container containers containing contains content content-admonition content-layer content-link content-type content-wrapper:end content-wrapper:start contents context contract control controller controls converts cookie-blocking copied copy copy-url core corners correct correctly corrupt could count covered covers cpp crashes created cross-component crumb- cs csharp css css-presence csv ctx cur current current-path/index.ts current-route currently cursor cursor-not-allowed cursor-pointer custom cycle d danger dark dash data data-active data-admonition data-asset-details-hidden data-auto-logo data-base data-close-search data-current-locale data-default-locale data-doc-date data-doc-description data-doc-metainfo data-doc-pager data-doc-unavailable-versions data-find-active data-find-match data-footer data-group-id data-header data-header-logo data-header-nav data-header-right data-home-rule data-kbd-shortcut data-lang data-language-menu data-language-switcher data-language-toggle data-loading-index data-mermaid data-mermaid-enlarge-ready data-mermaid-rendered data-mermaid-src data-nav-active data-nav-category data-nav-item data-nav-item-dropdown data-nav-more data-nav-more-menu data-nav-more-toggle data-no-results data-note-tray-group data-note-tray-row data-open-search data-pan-active data-processed data-props data-result-count-template data-search-count data-search-count-narrow data-search-dialog data-search-input data-search-placeholder data-search-results data-search-unavailable data-sidebar-hidden data-sidebar-resizer data-site-nav data-switcher-card data-switcher-launcher data-tab-btn data-tab-default data-tab-label data-tab-value data-tabs data-taglist-group data-testid data-theme data-theme-pack data-theme-pack-switcher data-theme/style data-toc-hidden data-trailing-slash data-unavailable-label data-variant data-version-banner data-version-latest data-version-menu data-version-rewire data-version-slug data-version-switcher data-version-toggle data-version-trigger-label data-zd-asset-action data-zd-asset-actions data-zd-asset-details data-zd-asset-details-chevron data-zd-asset-details-list data-zd-asset-details-toggle data-zd-asset-index-action data-zd-asset-index-empty data-zd-asset-index-page data-zd-asset-page data-zd-asset-tree data-zd-copy-url data-zd-html-preview-reservation data-zd-label-collapse data-zd-label-expand data-zd-mobile-sidebar data-zd-mobile-toc data-zd-nav-section data-zd-nosidebar data-zd-pending data-zd-props-preserve data-zd-sidebar-open-key data-zd-theme-pack-css data-zd-theme-pack-css-loading data-zd-theme-pack-loading data-zd-toc data-zd-wide data-zfb-island data-zfb-island-remount data-zfb-reload data-zfb-transition-persist date dated dd decimal decision declaration declare declared declares decoration decoration-muted deepest deepest-match default default-transition-duration defaults deferral deferred del delegated delete deliberately delimiter dependency depends depth der desc description design design-token design-token-panel design-token-trigger desktop desktop-sidebar desktop-sidebar-toggle desktop-sidebar-toggle-island desktop-toc-toggle destroys destructive detach detached details determine deterministic dev dfn diagram diagrams dialog did die dieser diff diff-line-added diff-line-content diff-line-empty diff-line-num diff-line-removed diff-row differ different dir directives directly directories directory disabled disabled:cursor-default disabled:opacity-50 disabled:pointer-events-none disc display display:none dist distance distinct div dl do doc doc-card- doc-content-band doc-history doc-history-generate doc-history-panel doc-history-trigger doc-page doc-pager doc-prose doc-title docblock docs docs- docs-v- document document-level documentation documented documents does dog dot double-registration download draft drag drawer drift drifts drop dropdown dropdown-parent dropdowns dt duplicate duration duration-150 duration-200 during dynamically e e2e each eager earlier early ease-in-out edge editing einer either eject ejectable ejectables ejected el element elements els else em embedded emit emitting empty empty/undefined en enable enabled end enhanced enhancement enlarged entire entities entries entry entrypoint env equal error escape escaped escapes even event eventually every everything-enabled exactly example exceeds excerpt excludes exclusively exist existing exists exit expand expected explicit export extends extra f factories failed fall fallback fallbacks falling falls false family fast favicon feature fg field fields fieldset figcaption figure file files fill fills finally find find-match find-match-active fire fires first first-paint first:mt-0 fit fix fixed fixed-width fixtures flag flash flat flex flex-1 flex-col flex-wrap flip flipping flips flow flush-left focus focus-visible:bg-accent/10 focus-visible:border-accent focus-visible:decoration-accent focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2 focus-visible:text-accent focus-visible:underline focus-within:border-accent focus-within:z-local-1 focus:border-accent focus:outline-none focus:text-accent focus:underline folder folders follows font font-bold font-face-parity font-family font-file-missing font-medium font-mono font-sans font-scale font-semibold font-size font-weight font-weight-bold font-weight-medium font-weight-normal font-weight-semibold font/woff2 fonts footer footer- for form format former found four-link fox fragment frame free freeze fresh from frontmatter frontmatter-preview frozen frozen-script fs-extra ftyp full fully function further g gains gap-[0.3em] gap-[clamp(1.5rem,3vw,4rem)] gap-hsp-2xs gap-hsp-lg gap-hsp-md gap-hsp-sm gap-hsp-xl gap-hsp-xs gap-vsp-2xs gap-vsp-3xs gap-vsp-lg gap-vsp-md gap-vsp-xs gap-x-hsp-2xs gap-x-hsp-lg gap-x-hsp-md gap-x-hsp-sm gap-x-hsp-xs gap-y-vsp-2xs gap-y-vsp-3xs gap-y-vsp-lg gap-y-vsp-md gap-y-vsp-xs gaps gate geladen2026 generate generated generation genuine geometry get getting-started gif git github github-dark github-link give go got grab gradient granular graph grid grid-cols-1 grid-cols-2 grid-cols-[auto_1fr] grid-rows-[auto_auto] grid-rows-subgrid group group-focus-visible:decoration-accent group-focus-visible:text-accent group-focus-visible:text-accent-hover group-focus-visible:text-fg group-focus-visible:underline group-focus-within:block group-hover:bg-fg group-hover:block group-hover:decoration-accent group-hover:text-accent group-hover:text-accent-hover group-hover:text-bg group-hover:text-fg group-hover:underline group-open:rotate-90 grouped grouping guard guards gz h h-[0.5rem] h-[0.625rem] h-[0.875rem] h-[1.125rem] h-[1.25rem] h-[1.575rem] h-[10rem] h-[14px] h-[1em] h-[1lh] h-[2.5rem] h-[2rem] h-[3.5rem] h-[3rem] h-[70vh] h-[90vh] h-[calc(100%-3rem)] h-[calc(100vh-3.5rem)] h-dvh h-full h-icon-lg h-icon-md h-icon-sm h-icon-xs h1 h1s h2 h22013h4 h2s h3 h4 h5 h6 half hand-copied hand-editable handle handled handler handlers happens hard-loaded hardcoded has hash-link have head head-links head-scripts header header- header-call:end header-call:start header-right heading heading-h2 heading-h3 heading-h4 heading-rule headings height here hex hi-root hidden hide hierarchical highlight highlighting history home hook hooks hooks-json horizontal host hover:bg-[color-mix(in_srgb,var(--color-surface)_80%,var(--color-fg)_20%)] hover:bg-accent-hover hover:bg-accent/10 hover:bg-danger/10 hover:bg-surface hover:border-accent hover:border-accent-hover hover:border-fg hover:decoration-accent hover:text-accent hover:text-accent-hover hover:text-fg hover:underline hover:z-local-1 hpp hr href hrefs hsp hsp-2xl hsp-2xs hsp-lg hsp-md hsp-sm hsp-xl hsp-xs html i i18n/theme. i2 i3 i4 ico icon icon-lg icon-md icon-sm icon-xs id identical idle idx if iframe ignore ignoring image image-enlarge image-overlay-inset image/avif image/gif image/jpeg image/png image/webp image/x-icon img img-src-check implementation import import/export important important-allowlist imports in inactive includes including incomplete independently index index2026 indirectly info inherit inherited ini initial initialised injected inline inline-block inline-flex inner input input-clear ins inserted-after-color-mode inserted-after-color-scheme inserted-after-site-name inserted-first insertion inset-0 inside inside-only inspect install installation installed instance instanceof instead instructions intended intent intentionally intercept interface internal interpolation into introductions invalid invalidated inverse inversion invocation invoke is is-checker island island-root iso2 iso3 iso4 iso5 iso6 isom ispe issues it italic item item- items items-baseline items-center items-end items-start iteration its itself ja java javascript jpeg jpg js json jsx jumps just justification justify-between justify-center justify-end justify-start katex kbd keep keeping keeps kept key keyboard keyboard-shortcut keydown keys keystroke keyword keywords khroma known-token-names kopieren kotlin kt label landing lands language-menu language-switcher language-toggle larger last:border-b-0 last:pb-0 later latest launch layout lazy leading leading-none leading-normal leading-relaxed leading-snug leading-tight leaf leaf- leak leaves leaving left left-0 left:calc legend legitimate length lets letter-spacing lg lg:block lg:border lg:border-fg lg:border-solid lg:flex lg:flex-1 lg:flex-col lg:flex-row lg:gap-hsp-xl lg:grid-cols-3 lg:grid-cols-[repeat(auto-fit,minmax(12rem,1fr))] lg:h-[90vh] lg:hidden lg:justify-start lg:m-auto lg:max-h-[90vh] lg:max-w-[52.5rem] lg:ml-[var(--zd-sidebar-w)] lg:pr-hsp-sm lg:pt-vsp-2xl lg:px-hsp-2xl lg:py-vsp-2xl lg:text-left lg:w-[90vw] lg:w-[clamp(16rem,25%,22rem)] li li2 library license lifecycle light light/dark like likely line line-height line/statement lines linger link link- links list list-disc list-none listener lists literal literally literals live lives llms llms-txt load loaded loader loading local local-1 local-2 local-3 locale locales log logo long longer longest-match look loses lostpointercapture lower luminance m m-0 m-auto m10 m14 m16 m21 m6 machinery main major make malformed malformed-markup malicious managed manifest manual manually maps mark markdown marks match matches matching math math-display math-inline max max-h-[85vh] max-h-[90vh] max-h-full max-h-none max-w-[16rem] max-w-[64rem] max-w-[85%] max-w-[85vw] max-w-[90vw] max-w-[calc(100vw-2rem)] max-w-[calc(100vw-var(--spacing-hsp-xl))] max-w-[clamp(50rem,75vw,90rem)] max-w-full max-w-none max-w-sm max-width maximum may mb-0 mb-vsp-2xs mb-vsp-lg mb-vsp-md mb-vsp-sm mb-vsp-xl mb-vsp-xs md mdx means measured measurement measures measuring mechanism menu mermaid message messages meta meta-knob meta-schema metadata migration min-h-0 min-h-[20rem] min-h-[44px] min-h-[60vh] min-h-[calc(100vh-3.5rem)] min-h-screen min-w-0 min-w-[10rem] min-w-[3rem] min-w-[44px] min-w-[8rem] minifier minor mirror mirroring mirrors missing mit mjs ml-[calc(var(--spacing-hsp-xl)+1px)] ml-auto ml-hsp-2xl ml-hsp-lg ml-hsp-md ml-hsp-sm ml-hsp-xl mobile mod modal modal-backdrop mode model modify module moment monospace month more most mount mounted mouseenter mouseleave mov move mp4 mp41 mp42 mr-[calc(var(--spacing-hsp-xl)+1px)] mr-hsp-sm ms mt-0 mt-vsp-2xl mt-vsp-2xs mt-vsp-3xs mt-vsp-lg mt-vsp-md mt-vsp-sm mt-vsp-xl mt-vsp-xs multi-changelog multiple must mutates mutation mutations muted mvhd mx-auto my-vsp-lg my-vsp-md n name named names native natural nav nav-active nav-card- nav/doc navigating navigation navigations near needed needs neither nested neutral never new newly-swapped next nicht no no-color-scheme no-data-theme-selector no-enlarge no-op no-repeat no-underline noch node node:buffer node:fs node:fs/promises node:module node:path node:url node:util nodes nofollow noindex non-draggable non-empty non-index non-light-dark non-literal non-null non-persisted nonblank none noopener noreferrer normal noscript not notable note note-tray notes now null number numeric object object-contain observe observer occurred of off offered offsets ofl-required og:description og:image og:image:alt og:image:height og:image:width og:title og:type og:url oklch ol old older omit omitting on once one only onto opacity-60 open open/close option or order original other others otherwise out outgoing outline-none output outside over overflow overflow-auto overflow-hidden overflow-x-auto overflow-y-auto overflow-y:auto overlaps override overrides overscroll-contain overwrite own owned p p-0 p-hsp-2xs p-hsp-lg p-hsp-md p-hsp-sm p-hsp-xl pack pack-scoped package package-default package-injected package-owned packages packs padding page page-loading page-loading-overlay page-loading-spinner page-navigate-end page-title page-wide pages pages/. paint paint-and-read palette pan panel panels paragraph paren-balance-aware parent parse parse/render parse5 parsed parser parses part pass passed passes patch path paths pattern payload payload-budget pb-[50vh] pb-vsp-2xs pb-vsp-lg pb-vsp-md pb-vsp-xl pb-vsp-xs pdf peer peer-focus-visible:border-accent peer-focus-visible:text-accent peer-hover:border-accent peer-hover:text-accent pending per per-block per-link per-package per-release percent permanently persisted persistence php pi pick picked picks picocolors pins pipelines pl-[1.25rem] pl-hsp-lg pl-hsp-md pl-hsp-sm pl-hsp-xl place place-items-center placeholder placeholder:text-muted plain plural plus png png16 png32 pnpm point pointer pointer-events-none pointercancel pointerdown pointermove pointerup policy polite polygon polyline popover populates port position position:fixed poster pr-hsp-lg pr-hsp-md pr-hsp-sm pr-hsp-xl pr-hsp-xs pre pre-lowercased preact preact/compat preact/hooks preact/jsx-runtime preconnect preference prefix preload pres present preserving preview preview-swatch-color previews2026 previously primary print prior private produce produced produces producing production profiles project project-owned project-root-relative properties property props prose protocol-relative provided proxy pt-[0.15rem] pt-[2px] pt-vsp-3xs pt-vsp-md pt-vsp-sm pt-vsp-xl pt-vsp-xs ptag- public purely puts px px-hsp-2xl px-hsp-2xs px-hsp-lg px-hsp-md px-hsp-sm px-hsp-xl px-hsp-xs py py-0 py-[2px] py-[4px] py-[calc(var(--spacing-vsp-xs)+0.15rem)] py-hsp-2xs py-hsp-3xs py-hsp-sm py-hsp-xs py-vsp-2xs py-vsp-3xs py-vsp-lg py-vsp-md py-vsp-sm py-vsp-xl py-vsp-xs python q qt query question quick r radius radius-full radius-lg rail ramp range rar rather raw rb re-encode/decode re-exports re-init re-initialized re-querying re-render re-renders re-run re-running re-runs re-selects re-syncs reach reached reaches read reader reader-facing reading readings reads/rewrites real real-value received receives recorded recovers rect redefine redistribution ref- reference referenced references refetch refresh refreshes refusing regardless regenerate regenerates regex registry reinit reinits rejected rel relative release released releases reload relying rem remapped remembered remove remove/rename removed removing rename render rendered renderer renderers renders reorder repaint repair repeated repeating replace replaced replacement replaces repopulate report repository republished requested require required requires reserved resize resize-x resolve resolved resolves responded response restore restores restyle result result-click results results-area retry return returns rev-parse reveal revision revisions rewire rewrite rewrites right right- right-0 right-hsp-lg ring-2 ring-accent risking ro robots role roles root rotate-180 rotate-90 round round-trip rounded rounded-[0.75rem] rounded-bl-[0.25rem] rounded-bl-[1rem] rounded-bl-lg rounded-br-[0.25rem] rounded-br-[1rem] rounded-full rounded-lg rounded-md rounded-t-[1rem] rounds route routed router routes routes-src routes/sitemap.xml row row-span-2 row-start-1 row-start-2 rp rs rt ruby rule rules run running runs runtime rust s safe safely safer same same-locale samp sans sans-serif scale scanned scanning scheme scoped scoping score scored script script- script-eval script-evaluation script-injection scripts scroll scrollbar scrolled scrollend scrolling scss seam search search-index section section- see seed segment segments sehen select select-none selection-bg selection-fg selector self self-contained self-hosted self-start self-stretch semantic semibold semver sentinel separator serialised serialize server server-rendered session set sets setting settles setup sh shadow shadow-[0_1px_3px_color-mix(in_srgb,var(--color-fg)_8%,transparent)] shadow-lg shadow-md shadowed shape share shared sharing shell ship shipped ships short shortcut should show shown shrink-0 sidebar sidebar- sidebar-toggle-island sidebar-tree-island sidebar-w sidecar signal silently similarity simple since single single-line single-object-literal singular site site-search site-tree-nav-island sitemap- sites size size-icon-lg skill skills skip skipped skipping skips slash slot slug slug-dir-parity slugs sm:block sm:border sm:border-muted sm:col-start-2 sm:flex sm:flex-row sm:gap-x-hsp-xl sm:grid sm:grid-cols-2 sm:grid-cols-[minmax(0,1fr)_auto] sm:grid-cols-subgrid sm:h-auto sm:hidden sm:items-center sm:justify-between sm:max-h-[80vh] sm:max-w-[52rem] sm:mr-0 sm:mx-auto sm:my-[10vh] sm:rounded-lg sm:row-span-2 sm:row-start-1 small smol-toml smooth snapping snapshot snapshots so soft soft-nav solid some somehow sort source sources space-y-vsp-2xs space-y-vsp-lg space-y-vsp-sm spacing spacing-0 spacing-px span spans spec specifiers specify spelling splitter spread spurious sql square sr-only src srcset stable stack stale standalone start state state- state:state- statement statements status stay staying sticky still stock stop stops stored straddles stray strict string strings strip stripe strips stroke-linecap stroke-linejoin stroke-width strong stronger stub-rendered style style-attribute styled styles stylesheet sub subagents subsequent substitute substitution subtracting success successful summary sup supply supported surface surfaces survives svg swap swapped swaps swift switcher switching symlink synchronous synchronously syntactically syntax t tab tab-item tab-panel tabindex table tablist tabpanel tabs tabs-container tabs-content tabs-nav tabular-nums tag tag- tag-item- tagged tags tags:audit take tar tbody td temp-element template temporary temporary-element terminal terms test-results tested text text-accent text-bg text-body text-caption text-center text-chat-assistant-text text-chat-user-text text-code-fg text-danger text-decoration text-display text-fg text-fg/60 text-heading text-info text-left text-micro text-muted text-muted/50 text-right text-scale-2xl text-scale-2xs text-scale-lg text-scale-md text-scale-sm text-scale-xl text-scale-xs text-small text-title text-warning text/css text/csv text/html text/javascript text/jsx text/markdown text/mdx text/plain text/tab-separated-values text/tsx text/typescript text/x-c text/x-csharp text/x-go text/x-java-source text/x-kotlin text/x-python text/x-ruby text/x-rust text/x-scss text/x-shellscript text/x-swift textarea tfoot tgz th than that the thead their them theme theme-color theme-pack theme-pack-changed theme-packs theme-packs/index.json theme-toggle theme/token then there these they this those though three threw through throw throws tighten time timeline tip title tkhd to toast toc toggle toggle- toggle-ai-chat toggle-design-token-panel toggles toggling token tokens tolerates toml too toolbar tooltip top top-0 top-[3.5rem] top-full top-hsp-2xs top-level total touches tr track tracked tracking-wide tracking-wider trade-off trailing transclude transferred transition transition-[background,color,border-color] transition-[left,color] transition-[right,color] transition-colors transition-transform translate-x-0 translated translations transparent tray treats tree tree-child- tree-item- tree-top- trigger trigger:ai-chat trigger:design-token-panel triggers true truncate truncated try ts tsv tsx turn twitter:card twitter:creator twitter:description twitter:image twitter:site twitter:title two txt type typeface typeof typescript typography u ul umschalten unable unavailable unbalanced unchanged und undefined under underline underlines understand unit-tested unknown unlike unlisted unmaintained unmatchable unobserve unreadable unrelated unreleased unresolvable unresolved unsafe unset unsupported unterminated until unusable unwrapped up up-to-date update updated upper uppercase url use used useful user uses using usual utf-8 utf8 utilities utility v v2 val value value-reader values var variable variant verbatim version version- version-menu version-switcher versions vertical via video video/mp4 video/quicktime video/webm viewer viewing viewport viewports virtual:zudo-doc-asset-bodies virtual:zudo-doc-chrome-bindings virtual:zudo-doc-design-token-panel-config virtual:zudo-doc-route-context visibility visible vocabulary void von vsp vsp-2xl vsp-2xs vsp-3xs vsp-lg vsp-md vsp-sm vsp-xl vsp-xs w w-1/2 w-[0.5rem] w-[0.625rem] w-[0.875rem] w-[1.125rem] w-[1.575rem] w-[1.5rem] w-[1.75rem] w-[12rem] w-[14px] w-[16px] w-[16rem] w-[18px] w-[1em] w-[2.5rem] w-[280px] w-[2rem] w-[320px] w-[360px] w-[6.5rem] w-[90vw] w-[calc(100vw-2rem)] w-[var(--zd-sidebar-w)] w-dvw w-full w-icon-lg w-icon-md w-icon-sm w-icon-xs walk walks want warn warning was watching way wbr wbr- we webm webp website weight went were what when where whereas whether which while whitespace-nowrap whitespace-pre whole whose wide wide-gamut wider-than-scrollbar width will window wins wird wired with without word wordmark working works worktrees would wrap wrapped wrapper wrappers wrapping wraps writing written wrong wrote wurde x xl:flex xl:hidden xlink:href xml y-scrollbar yaml year yet yielded yields yml you your z-dropdown z-local-1 z-modal z-modal-backdrop z-popover z-sidebar z-toolbar zd-asset-code zd-asset-details-rail zd-asset-details-toggle zd-asset-filebar zd-asset-media-grid zd-asset-media-rail zd-asset-page zd-asset-pdf zd-asset-stage zd-compact-prose zd-content zd-desktop-sidebar-toggle zd-desktop-toc-toggle zd-doc-content-band zd-enlarge-btn zd-enlarge-dialog zd-enlarge-dialog-close zd-enlargeable zd-home-copy zd-home-heading zd-home-hero zd-home-inner zd-home-intro zd-home-links zd-home-rule zd-home-sitemap zd-home-tags zd-html-preview-code zd-mermaid-dialog zd-mermaid-enlargeable zd-mermaid-tool-btn zd-mermaid-toolbar zd-mermaid-transform zd-mermaid-viewport zd-sidebar-content-wrapper zd-sidebar-open zd-theme-pack-dialog-title zd-toc-col zdtp zfb zfb:after-swap zfb:before-preparation zfb:before-swap zip zod zoom zudo-design-token-panel zudo-design-tokens/v3 zudo-doc zudo-doc-asset-details-visible zudo-doc-code-wrap zudo-doc-design-token-panel-modal zudo-doc-design-tokens zudo-doc-sidebar-visible zudo-doc-sidebar-width zudo-doc-theme zudo-doc-theme-pack zudo-doc-toc-visible zudo-doc-tweak zum");
@@ -4,7 +4,7 @@
4
4
  "name": "Academia",
5
5
  "description": "A LaTeX paper for the web — white page, Computer-Modern-black ink, hyperref navy links, numbered theorem admonitions, booktabs tables. Dark mode is a scholarly slate.",
6
6
  "mode": "light",
7
- "version": "1.0.1",
7
+ "version": "1.0.2",
8
8
  "fonts": {
9
9
  "sans": "Source Serif 4",
10
10
  "mono": "Courier Prime",
@@ -170,6 +170,12 @@ html[data-theme-pack="academia"] .zd-content h1 {
170
170
  text-align: center;
171
171
  font-variant-caps: small-caps;
172
172
  }
173
+ /* the home hero title is not a paper title — keep it on the identity
174
+ block's own alignment (left on desktop, centered on mobile) like every
175
+ other pack (zudolab/zudo-doc#4194) */
176
+ html[data-theme-pack="academia"] .zd-content .zd-home-copy h1 {
177
+ text-align: inherit;
178
+ }
173
179
 
174
180
  /* ---- the description becomes the abstract: a narrow centered block
175
181
  under a small-caps "Abstract" head (both emitters carry the
@@ -377,6 +383,12 @@ html[data-theme-pack="academia"] .zd-content hr {
377
383
  margin: 2.4rem auto 1.2rem 0;
378
384
  border-top: 1px solid color-mix(in srgb, var(--zd-fg) 55%, transparent);
379
385
  }
386
+ /* home-page section dividers stay centered like every other pack's;
387
+ the left-set footnote rule is a document-page move
388
+ (zudolab/zudo-doc#4194) */
389
+ html[data-theme-pack="academia"] .zd-content hr.zd-home-rule {
390
+ margin-inline: auto;
391
+ }
380
392
 
381
393
  /* ---- header: a running head over a hairline rule ---- */
382
394
  html[data-theme-pack="academia"] header[data-header] {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takazudo/zudo-doc",
3
- "version": "5.23.0",
3
+ "version": "5.24.0",
4
4
  "type": "module",
5
5
  "description": "zudo-doc framework primitives layer that sits on top of zfb's engine — sidebar, theme, TOC, breadcrumb, layouts, head injection, View Transitions, SSR-skip wrappers (per ADR-003).",
6
6
  "license": "MIT",
@@ -735,7 +735,7 @@
735
735
  "typescript": "^5.0.0",
736
736
  "vitest": "^4.1.0",
737
737
  "zod": "^4.3.6",
738
- "@takazudo/zudo-doc-history-server": "5.23.0"
738
+ "@takazudo/zudo-doc-history-server": "5.24.0"
739
739
  },
740
740
  "scripts": {
741
741
  "gen:search-widget-script": "node scripts/gen-search-widget-script.mjs",