@takazudo/zudo-doc 8.1.3 → 9.1.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 +37 -0
- package/README.md +6 -5
- package/dist/ai-chat-modal/index.js +1 -0
- package/dist/catalog.js +1 -1
- package/dist/chrome/derive.js +2 -2
- package/dist/compiled.css +109 -3
- package/dist/config.d.ts +13 -7
- package/dist/config.js +6 -0
- package/dist/design-token-panel-bootstrap-island.d.ts +1 -1
- package/dist/features.css +110 -0
- package/dist/footer/footer.js +1 -1
- package/dist/head-with-defaults/index.js +2 -2
- package/dist/html-preview-wrapper/preview-base.js +2 -2
- package/dist/icons/index.d.ts +2 -0
- package/dist/icons/index.js +36 -0
- package/dist/metainfo/doc-tags.js +3 -0
- package/dist/nav-indexing/tag-nav.js +7 -1
- package/dist/nav-scope/index.d.ts +1 -1
- package/dist/nav-scope/index.js +7 -8
- package/dist/page-loading/page-loading-overlay.d.ts +5 -1
- package/dist/page-loading/page-loading-overlay.js +1 -1
- package/dist/page-loading.css +2 -1
- package/dist/plugins/zdtp-loader.d.ts +1 -0
- package/dist/plugins/zdtp-loader.js +5 -1
- package/dist/preset.d.ts +10 -4
- package/dist/preset.js +11 -1
- package/dist/route-context-payload/index.d.ts +4 -1
- package/dist/route-context-payload/index.js +6 -0
- package/dist/settings-defaults.js +3 -1
- package/dist/settings.d.ts +9 -5
- package/dist/sidebar-tree-island/branch-preview.d.ts +19 -0
- package/dist/sidebar-tree-island/branch-preview.js +199 -0
- package/dist/sidebar-tree-island/index.js +82 -33
- package/dist/sidebar-tree-island/scope-state.d.ts +15 -6
- package/dist/sidebar-tree-island/scope-state.js +30 -9
- package/dist/sidebar-utils/index.js +5 -2
- package/dist/theme/theme-pack-provider.d.ts +4 -2
- package/dist/theme/theme-pack-provider.js +2 -1
- package/dist/theme-cli/config-io.js +26 -3
- package/dist/theme-cli/list.js +1 -1
- package/dist/theme-packs/default/meta.json +2 -2
- package/dist/theme-packs/graphite/meta.json +37 -0
- package/dist/theme-packs/graphite/pack.css +401 -0
- package/dist/theme-packs/quiet-slate/meta.json +37 -0
- package/dist/theme-packs/quiet-slate/pack.css +401 -0
- package/dist/theme-packs/warm-mineral/meta.json +37 -0
- package/dist/theme-packs/warm-mineral/pack.css +401 -0
- package/dist/theme-packs-registry/configured-theme-pack.d.ts +21 -0
- package/dist/theme-packs-registry/configured-theme-pack.js +13 -0
- package/dist/theme-packs-registry/index.d.ts +1 -0
- package/dist/theme-packs-registry/index.js +6 -0
- package/dist/theme-packs-registry/resolve-enabled-packs.d.ts +13 -6
- package/dist/theme-packs-registry/resolve-enabled-packs.js +15 -5
- package/dist/tree-nav-shared/index.d.ts +5 -1
- package/dist/tree-nav-shared/index.js +7 -3
- package/dist/wind.json +6 -1
- package/dist/zdtp-loader.d.ts +1 -1
- package/eject/footer/footer.tsx +1 -1
- package/eject/header/gen-nav-overflow-script.mjs +2 -2
- package/eject/page-loading/page-loading-overlay.tsx +7 -3
- package/eject/sidebar-tree-island/branch-preview.ts +247 -0
- package/eject/sidebar-tree-island/index.tsx +86 -19
- package/eject/sidebar-tree-island/scope-state.ts +40 -10
- package/package.json +21 -20
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,43 @@ 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
|
+
## [9.1.0] - 2026-10-28
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
- The sidebar's branch-focus control is now a four-corner focus frame (named "Focus sidebar on" plus the category) instead of "◎". Pointing at it or reaching it with the keyboard briefly highlights exactly the branch it would show, with a short tooltip and no layout, scope, filter or URL change; on touch, one tap focuses the branch. The frame of a branch already shown on its own is inactive (`aria-disabled`, out of the tab order). Restore uses a counter-clockwise reset arrow ("Restore current page's sidebar"). Japanese labels are included. (b918819b)
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
- The page-loading scrim covers the full viewport again, including the header and sidebar, with the spinner centered in the viewport. Since #4580 its bootstrap clipped it to the content area at runtime. The header and an unchanged desktop sidebar still stay undimmed and still during the page animation, because they use their own transition snapshots and the scrim is excluded from the animation. (d453d849)
|
|
20
|
+
- A `categoryMatch` now matches only the whole top-level slug segment. Before, `categoryMatch: "foo"` also claimed `foo2/...` pages in the sidebar filter, in the `"!"` fallback exclusion, and when choosing a page's header section. (28808511)
|
|
21
|
+
- The vertical guide line under an expanded note-tray year or month group now runs from the center of the group's toggle, and each child's connector reaches its label. (6ac3b3c8)
|
|
22
|
+
- HtmlPreview's source toggle and inactive viewport buttons use the foreground color on hover, so their hover text keeps AA contrast. (6c82bb0c)
|
|
23
|
+
|
|
24
|
+
### Other Changes
|
|
25
|
+
|
|
26
|
+
- The optional `@takazudo/zdtp` peer now also accepts 0.9 (`^0.5.2 || ^0.6.0 || ^0.7.0 || ^0.8.0 || ^0.9.0`). zdtp 0.9.0 renders the design token panel without Preact, so a site on zdtp 0.9 installs no Preact at all; the panel's API, storage keys and CSS are unchanged. It also fixes undo on a generic token tab leaving the edited value on `:root` until reload. (09442500)
|
|
27
|
+
- Runtime dependency ranges are refreshed: `esbuild` `^0.28.2` (was `>=0.28.1`), `yaml` `^2.9.1`, `fs-extra` `^11.4.1`, `tsx` `^4.23.15` and `@inquirer/prompts` `^8.7.5`. (07381de5)
|
|
28
|
+
|
|
29
|
+
## [9.0.0] - 2026-10-27
|
|
30
|
+
|
|
31
|
+
### Breaking Changes
|
|
32
|
+
|
|
33
|
+
- Sites that do not set `themePack` change appearance to Graphite. Add `themePack: "default"` to keep the Classic look. (d8c2e5ae)
|
|
34
|
+
- A config with an explicit `themePacks` list that omits `"graphite"` and no `themePack` now fails the build with a hint: add `"graphite"` to `themePacks`, or set `themePack` (for example `"default"`). (d8c2e5ae)
|
|
35
|
+
- When using document history, upgrade `@takazudo/zudo-doc-history-server` to 9.x as well: its peer floor moves from `^8.0.0` to `^9.0.0`.
|
|
36
|
+
|
|
37
|
+
### Features
|
|
38
|
+
|
|
39
|
+
- Add three soft-tone theme packs: **Graphite**, **Warm Mineral** and **Quiet Slate**. Each defines paired light and dark palettes with readable muted text, quiet decorative rules, 3:1 control borders, a soft active state with an accent marker, opaque tag, admonition, code-highlight and diff fills, and a 2px accent focus ring that is never clipped. (d8c2e5ae, b3f5cda5)
|
|
40
|
+
- Graphite is the new default look: a project that omits `themePack` now gets Graphite. Projects that pass custom `colorSchemes` or set `colorMode: false` keep the previous look, and an explicit `themePack` always wins. (d8c2e5ae)
|
|
41
|
+
- The original look stays available as the **Classic** pack, still under the slug `default`. To keep it, set `themePack: "default"`. Stored reader selections stay valid. (d8c2e5ae)
|
|
42
|
+
- Tag chips and the footer tag counts gain stable theme-pack hooks (`data-zd-tag-chip`, `data-zd-tag-chip-outline`, `data-zd-tag-chip-label`, `data-zd-tag-count`); the rendered look on Classic is unchanged. (d8c2e5ae)
|
|
43
|
+
|
|
44
|
+
### Other Changes
|
|
45
|
+
|
|
46
|
+
- Requires zfb 5.1.5: the `@takazudo/zfb`, `zfb-runtime` and `zfb-md-wasm` peer floors move from `^5.1.4` to `^5.1.5`. zfb 5.1.5 builds the native binary against tokio 1.54.1 (RUSTSEC-2026-0386) and rebuilds the WASM binaries; the JavaScript API is unchanged. Update the zfb family (and `zfb-adapter-cloudflare` when used) to 5.1.5 together with this release. (c63f8df0)
|
|
47
|
+
|
|
11
48
|
## [8.1.3] - 2026-10-26
|
|
12
49
|
|
|
13
50
|
### Features
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ instead of editing the generated markdown directly.
|
|
|
9
9
|
This package provides the missing-by-design framework concerns:
|
|
10
10
|
|
|
11
11
|
- **Sidebar tree builder** (`./sidebar-tree`) — turns collection entries + `_category_.json` into breadcrumb/navigation nodes.
|
|
12
|
-
- **Theme controls** (`./theme`) — color scheme provider + design-token panel bootstrap (the optional zdtp package owns its opaque
|
|
12
|
+
- **Theme controls** (`./theme`) — color scheme provider + design-token panel bootstrap (the optional zdtp package owns its opaque panel UI).
|
|
13
13
|
- **Theme toggle (bare)** (`./theme-toggle`) — the un-wrapped ThemeToggle component for call sites that compose their own `<Island>` (the `./theme` barrel exports an Island-wrapped variant of the same component).
|
|
14
14
|
- **TOC** (`./toc`) — desktop and mobile TOC zudo-react islands fed by MDX `headings` export.
|
|
15
15
|
- **Breadcrumb** (`./breadcrumb`) — JSX breadcrumb fed by the sidebar tree.
|
|
@@ -109,7 +109,7 @@ If your project renders **semi-trusted or user-submitted** HTML in a preview, ov
|
|
|
109
109
|
|
|
110
110
|
**6.0.0** is the coordinated major release of `@takazudo/zudo-doc`,
|
|
111
111
|
`@takazudo/zudo-doc-history-server` and `create-zudo-doc`. The current workspace
|
|
112
|
-
targets the published **zfb 5.1.
|
|
112
|
+
targets the published **zfb 5.1.5** family (peer floor **^5.1.5**).
|
|
113
113
|
[Upstream #4097](https://github.com/Takazudo/zudo-front-builder/issues/4097) is
|
|
114
114
|
resolved; its strict published 4.3.1 consumer control passed 3/3 with no skips or
|
|
115
115
|
retries in the [source-bound verification](../../docs/findings/zfb-4.3.1/verification.md).
|
|
@@ -126,9 +126,10 @@ are feature-dependent. Package defaults for `agentExport`, `mcp`, and `llmsTxt`
|
|
|
126
126
|
are all `false`. The create-zudo-doc initializer enables `llmsTxt` by default;
|
|
127
127
|
agent export and MCP remain opt-in.
|
|
128
128
|
|
|
129
|
-
For the panel, the installed **zdtp 0.
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
For the panel, the installed **zdtp 0.9.0** renders with its own bundled zudo-react
|
|
130
|
+
runtime and has **no Preact dependency** (0.8.6–0.8.7 carried Preact as a dependency; it
|
|
131
|
+
was a peer through 0.8.5). It exports `./styles.css` (also `./styles`) to `dist/zdtp.css`. Its internal
|
|
132
|
+
Tailwind browser dependency is isolated from host JSX.
|
|
132
133
|
Install `@takazudo/zdtp` and import `@takazudo/zdtp/styles.css` when enabling it.
|
|
133
134
|
|
|
134
135
|
## Styling — Wind and public CSS
|
|
@@ -188,6 +188,7 @@ function AiChatModal({ basePath }) {
|
|
|
188
188
|
"dialog",
|
|
189
189
|
{
|
|
190
190
|
ref: dialogRef,
|
|
191
|
+
"data-zd-ai-chat": true,
|
|
191
192
|
"on:click": handleBackdropClick,
|
|
192
193
|
class: "z-modal m-0 h-dvh max-h-none w-dvw max-w-none border-none bg-surface p-0 text-fg backdrop:z-modal-backdrop backdrop:bg-bg/80 lg:m-auto lg:h-[90vh] lg:max-h-[90vh] lg:w-[90vw] lg:max-w-[52.5rem] lg:border-solid lg:border lg:border-fg",
|
|
193
194
|
children: /* @__PURE__ */ jsxs("div", { class: "flex h-full flex-col", children: [
|
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.3","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.1","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.2","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.1","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.3","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.4","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.1","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.2","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.4","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.2","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.2","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.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":"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.3","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.4","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.4","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.2","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.1","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.2","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.1","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.2","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.4","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.2","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.2","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.4","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":"graphite","meta":{"schemaVersion":1,"slug":"graphite","name":"Graphite","description":"Soft neutral graphite — low-glare grey paper by day, deep graphite at night, one warm copper accent, quiet hairline rules. The configured default.","mode":"dark","version":"1.0.0","fonts":{"sans":"System","mono":"System","loaded":[]},"preview":{"light":{"bg":"#F2F3F2","fg":"#3A4146","accent":"#9A4919","syntax":{"keyword":"#9A4919","string":"#4E6552","comment":"#566168","callable":"#4B6373"}},"dark":{"bg":"#242629","fg":"#D3D5D9","accent":"#E9AA79","syntax":{"keyword":"#E9AA79","string":"#9DBA9A","comment":"#ADB2B8","callable":"#9DB6C5"}}}},"hasStylesheet":true},{"slug":"default","meta":{"schemaVersion":1,"slug":"default","name":"Classic","description":"Classic — the original zudo-doc default 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.3","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.1","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.2","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.1","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.3","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.4","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.1","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.2","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.4","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.2","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.2","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.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":"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.3","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.4","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.4","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.2","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":"quiet-slate","meta":{"schemaVersion":1,"slug":"quiet-slate","name":"Quiet Slate","description":"Quiet blue-grey slate — misty slate paper by day, cool slate at night, a muted copper accent and quiet hairline rules.","mode":"dark","version":"1.0.0","fonts":{"sans":"System","mono":"System","loaded":[]},"preview":{"light":{"bg":"#EDF1F3","fg":"#3E4953","accent":"#95491E","syntax":{"keyword":"#95491E","string":"#4D6356","comment":"#52606D","callable":"#476274"}},"dark":{"bg":"#2B3238","fg":"#D8DDE0","accent":"#E4AF89","syntax":{"keyword":"#E4AF89","string":"#A9BFAD","comment":"#B3BFC9","callable":"#A3BDCD"}}}},"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.1","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.2","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.1","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.2","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.4","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.2","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.2","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":"warm-mineral","meta":{"schemaVersion":1,"slug":"warm-mineral","name":"Warm Mineral","description":"Warm mineral tones — sandstone paper by day, umber stone at night, a terracotta accent and quiet hairline rules.","mode":"dark","version":"1.0.0","fonts":{"sans":"System","mono":"System","loaded":[]},"preview":{"light":{"bg":"#F3EFE8","fg":"#47403A","accent":"#92471C","syntax":{"keyword":"#92471C","string":"#556047","comment":"#655B52","callable":"#505E67"}},"dark":{"bg":"#2D2A27","fg":"#D6CFC6","accent":"#E5AA7D","syntax":{"keyword":"#E5AA7D","string":"#A9B892","comment":"#B7ADA2","callable":"#A6B4BD"}}}},"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.4","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/chrome/derive.js
CHANGED
|
@@ -11,7 +11,7 @@ import { createDesignTokenPanelIsland } from "../doc-body-end-islands/design-tok
|
|
|
11
11
|
import { DesignTokenPanelBootstrap } from "../design-token-panel-bootstrap.js";
|
|
12
12
|
import { ThemePackSwitcher } from "../theme-pack-switcher/index.js";
|
|
13
13
|
import { createThemePackSwitcherIsland } from "../doc-body-end-islands/theme-pack-switcher-island.js";
|
|
14
|
-
import {
|
|
14
|
+
import { resolveConfiguredThemePack } from "../theme-packs-registry/configured-theme-pack.js";
|
|
15
15
|
import { SearchWidget } from "../search-widget/index.js";
|
|
16
16
|
import { createMdxComponents } from "../mdx-components/index.js";
|
|
17
17
|
import { createAssetCard, createAssetCode } from "../asset-components/index.js";
|
|
@@ -180,7 +180,7 @@ function deriveThemePackSwitcherProps(ctx) {
|
|
|
180
180
|
const registry = ctx.themePackRegistry;
|
|
181
181
|
if (registry == null) return null;
|
|
182
182
|
return {
|
|
183
|
-
active: ctx.settings
|
|
183
|
+
active: resolveConfiguredThemePack(ctx.settings),
|
|
184
184
|
order: registry.map((entry) => ({
|
|
185
185
|
slug: entry.slug,
|
|
186
186
|
name: entry.meta.name,
|
package/dist/compiled.css
CHANGED
|
@@ -2102,6 +2102,97 @@ site-search [data-search-results] > :is([data-search-placeholder], p) {
|
|
|
2102
2102
|
.zd-theme-pack-active-ring {
|
|
2103
2103
|
box-shadow: 0 0 0 2px var(--color-accent);
|
|
2104
2104
|
}
|
|
2105
|
+
|
|
2106
|
+
[data-sidebar-preview] {
|
|
2107
|
+
background-color: color-mix(in oklch, var(--color-accent) 3%, transparent);
|
|
2108
|
+
box-shadow: inset 2px 0 0 var(--color-accent);
|
|
2109
|
+
}
|
|
2110
|
+
|
|
2111
|
+
[data-sidebar-preview] > [data-sidebar-row]:not([data-sidebar-current]) {
|
|
2112
|
+
background-color: color-mix(in oklch, var(--color-accent) 7%, transparent);
|
|
2113
|
+
}
|
|
2114
|
+
|
|
2115
|
+
[data-sidebar-preview] > [data-sidebar-row]:not([data-sidebar-current]) [data-sidebar-focus] {
|
|
2116
|
+
color: var(--color-accent);
|
|
2117
|
+
background-color: color-mix(in oklch, var(--color-accent) 7%, transparent);
|
|
2118
|
+
}
|
|
2119
|
+
|
|
2120
|
+
[data-sidebar-preview] > [data-sidebar-children] [data-tree-connector] {
|
|
2121
|
+
border-color: var(--color-accent);
|
|
2122
|
+
}
|
|
2123
|
+
|
|
2124
|
+
[data-sidebar-arrived] > [data-sidebar-row]:not([data-sidebar-current]) {
|
|
2125
|
+
animation: .7s ease-out zd-sidebar-arrival;
|
|
2126
|
+
}
|
|
2127
|
+
|
|
2128
|
+
@keyframes zd-sidebar-arrival {
|
|
2129
|
+
0%, 22% {
|
|
2130
|
+
background-color: color-mix(in oklch, var(--color-accent) 12%, transparent);
|
|
2131
|
+
box-shadow: inset 2px 0 0 var(--color-accent);
|
|
2132
|
+
}
|
|
2133
|
+
|
|
2134
|
+
100% {
|
|
2135
|
+
background-color: #0000;
|
|
2136
|
+
box-shadow: inset 0 0 #0000;
|
|
2137
|
+
}
|
|
2138
|
+
}
|
|
2139
|
+
|
|
2140
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2141
|
+
[data-sidebar-arrived] > [data-sidebar-row]:not([data-sidebar-current]) {
|
|
2142
|
+
animation: none;
|
|
2143
|
+
}
|
|
2144
|
+
}
|
|
2145
|
+
|
|
2146
|
+
@media (pointer: coarse) {
|
|
2147
|
+
[data-sidebar-row] [data-sidebar-focus] {
|
|
2148
|
+
width: 2.5rem;
|
|
2149
|
+
height: 2.75rem;
|
|
2150
|
+
}
|
|
2151
|
+
}
|
|
2152
|
+
|
|
2153
|
+
[data-sidebar-tooltip] {
|
|
2154
|
+
position: fixed;
|
|
2155
|
+
z-index: var(--z-index-tooltip);
|
|
2156
|
+
max-width: min(18rem, 100vw - 1rem);
|
|
2157
|
+
padding: var(--spacing-vsp-2xs) var(--spacing-hsp-sm);
|
|
2158
|
+
border-radius: var(--radius-DEFAULT);
|
|
2159
|
+
background-color: var(--color-fg);
|
|
2160
|
+
color: var(--color-bg);
|
|
2161
|
+
font-size: var(--text-caption);
|
|
2162
|
+
line-height: 1.4;
|
|
2163
|
+
overflow-wrap: anywhere;
|
|
2164
|
+
box-shadow: 0 4px 12px color-mix(in oklch, var(--color-fg) 20%, transparent);
|
|
2165
|
+
}
|
|
2166
|
+
|
|
2167
|
+
[data-sidebar-tooltip][hidden] {
|
|
2168
|
+
display: none;
|
|
2169
|
+
}
|
|
2170
|
+
|
|
2171
|
+
[data-sidebar-tooltip] > strong {
|
|
2172
|
+
display: block;
|
|
2173
|
+
font-weight: 600;
|
|
2174
|
+
}
|
|
2175
|
+
|
|
2176
|
+
[data-sidebar-tooltip] > span {
|
|
2177
|
+
display: block;
|
|
2178
|
+
font-size: var(--text-micro);
|
|
2179
|
+
opacity: .8;
|
|
2180
|
+
}
|
|
2181
|
+
|
|
2182
|
+
@media (forced-colors: active) {
|
|
2183
|
+
[data-sidebar-preview] > [data-sidebar-row] {
|
|
2184
|
+
outline: 2px solid highlight;
|
|
2185
|
+
outline-offset: -2px;
|
|
2186
|
+
}
|
|
2187
|
+
|
|
2188
|
+
[data-sidebar-preview] > [data-sidebar-children] [data-tree-connector] {
|
|
2189
|
+
border-color: highlight;
|
|
2190
|
+
}
|
|
2191
|
+
|
|
2192
|
+
[data-sidebar-tooltip] {
|
|
2193
|
+
border: 1px solid canvastext;
|
|
2194
|
+
}
|
|
2195
|
+
}
|
|
2105
2196
|
.block {
|
|
2106
2197
|
display: block;
|
|
2107
2198
|
}
|
|
@@ -2265,6 +2356,9 @@ site-search [data-search-results] > :is([data-search-placeholder], p) {
|
|
|
2265
2356
|
.h-\[0\.875rem\] {
|
|
2266
2357
|
height: 0.875rem;
|
|
2267
2358
|
}
|
|
2359
|
+
.h-\[1\.0625rem\] {
|
|
2360
|
+
height: 1.0625rem;
|
|
2361
|
+
}
|
|
2268
2362
|
.h-\[1\.125rem\] {
|
|
2269
2363
|
height: 1.125rem;
|
|
2270
2364
|
}
|
|
@@ -2274,6 +2368,9 @@ site-search [data-search-results] > :is([data-search-placeholder], p) {
|
|
|
2274
2368
|
.h-\[1\.575rem\] {
|
|
2275
2369
|
height: 1.575rem;
|
|
2276
2370
|
}
|
|
2371
|
+
.h-\[1\.875rem\] {
|
|
2372
|
+
height: 1.875rem;
|
|
2373
|
+
}
|
|
2277
2374
|
.h-\[10rem\] {
|
|
2278
2375
|
height: 10rem;
|
|
2279
2376
|
}
|
|
@@ -2418,6 +2515,9 @@ site-search [data-search-results] > :is([data-search-placeholder], p) {
|
|
|
2418
2515
|
.w-\[0\.875rem\] {
|
|
2419
2516
|
width: 0.875rem;
|
|
2420
2517
|
}
|
|
2518
|
+
.w-\[1\.0625rem\] {
|
|
2519
|
+
width: 1.0625rem;
|
|
2520
|
+
}
|
|
2421
2521
|
.w-\[1\.125rem\] {
|
|
2422
2522
|
width: 1.125rem;
|
|
2423
2523
|
}
|
|
@@ -2433,6 +2533,9 @@ site-search [data-search-results] > :is([data-search-placeholder], p) {
|
|
|
2433
2533
|
.w-\[1\.75rem\] {
|
|
2434
2534
|
width: 1.75rem;
|
|
2435
2535
|
}
|
|
2536
|
+
.w-\[1\.875rem\] {
|
|
2537
|
+
width: 1.875rem;
|
|
2538
|
+
}
|
|
2436
2539
|
.w-\[12rem\] {
|
|
2437
2540
|
width: 12rem;
|
|
2438
2541
|
}
|
|
@@ -3290,6 +3393,9 @@ site-search [data-search-results] > :is([data-search-placeholder], p) {
|
|
|
3290
3393
|
.shadow-lg {
|
|
3291
3394
|
box-shadow: var(--zw-shadow-lg);
|
|
3292
3395
|
}
|
|
3396
|
+
.opacity-50 {
|
|
3397
|
+
opacity: 0.5;
|
|
3398
|
+
}
|
|
3293
3399
|
.opacity-60 {
|
|
3294
3400
|
opacity: 0.6;
|
|
3295
3401
|
}
|
|
@@ -3346,6 +3452,9 @@ site-search [data-search-results] > :is([data-search-placeholder], p) {
|
|
|
3346
3452
|
.rotate-90 {
|
|
3347
3453
|
rotate: 90deg;
|
|
3348
3454
|
}
|
|
3455
|
+
.cursor-default {
|
|
3456
|
+
cursor: default;
|
|
3457
|
+
}
|
|
3349
3458
|
.cursor-not-allowed {
|
|
3350
3459
|
cursor: not-allowed;
|
|
3351
3460
|
}
|
|
@@ -3542,9 +3651,6 @@ site-search [data-search-results] > :is([data-search-placeholder], p) {
|
|
|
3542
3651
|
.focus-visible\:text-accent:focus-visible {
|
|
3543
3652
|
color: var(--zw-color-accent);
|
|
3544
3653
|
}
|
|
3545
|
-
.focus-visible\:text-fg:focus-visible {
|
|
3546
|
-
color: var(--zw-color-fg);
|
|
3547
|
-
}
|
|
3548
3654
|
.focus-visible\:bg-accent\/10:focus-visible {
|
|
3549
3655
|
background-color: color-mix(in oklab, var(--zw-color-accent) 10%, transparent);
|
|
3550
3656
|
}
|
package/dist/config.d.ts
CHANGED
|
@@ -566,10 +566,13 @@ export interface ZudoDocConfig {
|
|
|
566
566
|
*/
|
|
567
567
|
designTokenPanelConfigModule?: string;
|
|
568
568
|
/**
|
|
569
|
-
* Active theme pack slug.
|
|
570
|
-
*
|
|
571
|
-
*
|
|
572
|
-
*
|
|
569
|
+
* Active theme pack slug. Omitted selects Graphite, except that a config
|
|
570
|
+
* supplying its own `colorSchemes` or setting `colorMode: false` keeps
|
|
571
|
+
* Classic (`"default"`, the original zudo-doc look — no pack stylesheet
|
|
572
|
+
* loaded) so an authored palette is never overlaid. An explicit slug always
|
|
573
|
+
* wins. Must be a member of the resolved `themePacks` list; an unknown or
|
|
574
|
+
* excluded slug fails the build loudly at plugin setup.
|
|
575
|
+
* @default "graphite" (or "default" with custom colorSchemes / colorMode: false)
|
|
573
576
|
*/
|
|
574
577
|
themePack?: string;
|
|
575
578
|
/**
|
|
@@ -580,9 +583,12 @@ export interface ZudoDocConfig {
|
|
|
580
583
|
themePackSwitcher?: boolean;
|
|
581
584
|
/**
|
|
582
585
|
* Enabled pack slugs, in switcher order. `undefined` = all bundled packs:
|
|
583
|
-
* "
|
|
584
|
-
* (alphabetical-by-slug) order. An explicit list is
|
|
585
|
-
*
|
|
586
|
+
* "graphite" first, "default" (Classic) second, then the bundled registry
|
|
587
|
+
* in canonical (alphabetical-by-slug) order. An explicit list is
|
|
588
|
+
* authoritative — may omit any pack, reorder freely; duplicates/unknown
|
|
589
|
+
* slugs fail loudly. Graphite is never inserted implicitly: a list that
|
|
590
|
+
* excludes it needs an explicit `themePack` (e.g. `themePack: "default"`,
|
|
591
|
+
* `themePacks: ["default"]` for Classic only).
|
|
586
592
|
* @default undefined
|
|
587
593
|
*/
|
|
588
594
|
themePacks?: string[];
|
package/dist/config.js
CHANGED
|
@@ -3,6 +3,7 @@ import { buildDocsSchema as defaultBuildDocsSchema } from "./docs-schema/index.j
|
|
|
3
3
|
import { defaultDirectiveVocabulary } from "./directive-vocabulary-defaults/index.js";
|
|
4
4
|
import { defaultTranslations } from "./i18n-defaults/index.js";
|
|
5
5
|
import { defaultColorSchemes } from "./color-schemes-defaults/index.js";
|
|
6
|
+
import { resolveConfiguredThemePack } from "./theme-packs-registry/configured-theme-pack.js";
|
|
6
7
|
import { assertNoCommaInVersionSlugs } from "./version-availability/index.js";
|
|
7
8
|
import {
|
|
8
9
|
assertNoEmptyStringFaviconOrLogo,
|
|
@@ -74,6 +75,11 @@ function zudoDoc(user = {}) {
|
|
|
74
75
|
...settingsOverrides
|
|
75
76
|
} = user;
|
|
76
77
|
const settings = { ...DEFAULT_SETTINGS2, ...settingsOverrides };
|
|
78
|
+
settings.themePack = resolveConfiguredThemePack({
|
|
79
|
+
themePack: settings.themePack,
|
|
80
|
+
colorMode: settings.colorMode,
|
|
81
|
+
customColorSchemes: userColorSchemes !== void 0 && userColorSchemes !== null && userColorSchemes !== defaultColorSchemes
|
|
82
|
+
});
|
|
77
83
|
assertValidAssetViewerSettings(
|
|
78
84
|
settings.assetViewerDir,
|
|
79
85
|
settings.assetViewerRoutePrefix
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Package-default island; zdtp owns the opaque
|
|
1
|
+
/** Package-default island; zdtp owns the opaque panel UI it mounts. */
|
|
2
2
|
export declare function DesignTokenPanelBootstrap(): null;
|
|
3
3
|
export declare namespace DesignTokenPanelBootstrap {
|
|
4
4
|
var displayName: string;
|