aboutsummaryrefslogtreecommitdiff
path: root/scripts/theme-studio
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/theme-studio')
-rw-r--r--scripts/theme-studio/README.md36
-rw-r--r--scripts/theme-studio/colormath.js193
-rw-r--r--scripts/theme-studio/dupre-revised.json10411
-rw-r--r--scripts/theme-studio/dupre.json175
-rw-r--r--scripts/theme-studio/generate.py203
-rwxr-xr-xscripts/theme-studio/run-tests.sh73
-rw-r--r--scripts/theme-studio/test-colormath.mjs240
-rw-r--r--scripts/theme-studio/test_generate.py84
-rw-r--r--scripts/theme-studio/theme-coloring-guide.org473
-rw-r--r--scripts/theme-studio/theme-studio.html369
10 files changed, 12220 insertions, 37 deletions
diff --git a/scripts/theme-studio/README.md b/scripts/theme-studio/README.md
index 62034039..044ccc2e 100644
--- a/scripts/theme-studio/README.md
+++ b/scripts/theme-studio/README.md
@@ -8,6 +8,10 @@ Reassign colors against the palette, judge legibility with live WCAG-contrast
readouts, then export a `theme.json` that a build step turns into
`themes/<name>-*.el`.
+For the color-assignment philosophy behind the tool — how to group syntax roles,
+what to share, where to spend chroma and bold — see
+[`theme-coloring-guide.org`](theme-coloring-guide.org).
+
## Run
```bash
@@ -26,6 +30,24 @@ During color work, disable Hyprland inactive-window dimming so colors read true:
hyprctl keyword decoration:dim_inactive false
```
+## Tests
+
+```bash
+make theme-studio-test # from the repo root, runs the whole pyramid
+scripts/theme-studio/run-tests.sh # or call the runner directly
+```
+
+The runner regenerates the page, runs the Python templating tests
+(`test_generate.py`), the Node unit tests for `colormath.js`
+(`test-colormath.mjs`, including the inline-integrity check), a syntax check of
+the spliced page script, and the browser hash gates in headless Chrome
+(`#selftest`, `#cursortest`, `#readouttest`, `#deltatest`, `#oklchtest`,
+`#planetest`). It exits non-zero on any failure. The browser gates need a
+Chromium-family browser; without one they report SKIPPED rather than passing
+silently. The pure color math and the extracted picker logic (`planeCell`,
+`paletteWarnings`) live in `colormath.js` so they are unit-tested directly in
+Node; the DOM glue is covered by the browser hash gates.
+
## Files
- `generate.py` — emits the HTML+JS, and embeds the package data. Edit here to
@@ -47,6 +69,20 @@ Three tiers of faces, plus the palette:
(saturation/value square, hue slider, palette reuse chips, live contrast
readout, and an any / AA+ / AAA legibility mask). Remove, rename, reorder with
arrows or drag. The colors serving as background and foreground are locked.
+
+ The picker also shows perceptual readouts beside the WCAG ratio: the OKLCH
+ coordinates (lightness, chroma, hue°) and the APCA Lc contrast against the
+ ground color. APCA Lc is signed — positive means dark text on a light
+ background, negative means light text on a dark background — so a light color
+ on dupre's dark ground reads as a negative Lc. WCAG stays the rating used in
+ the syntax/UI/package tables; APCA and OKLCH are picker-only diagnostics.
+
+ An edit-model toggle switches the picker between HSV and OKLCH, independent of
+ the contrast mask. In OKLCH mode the L/C/H dials drive the color and the square
+ becomes a Chroma×Lightness plane at the current hue, with the out-of-gamut
+ region greyed out; the hue strip selects the hue. Pushing chroma past sRGB
+ snaps to the reachable color and shows a clamp note. The palette also warns
+ when two colors fall below a perceptual ΔE threshold, hard to tell apart.
- **Syntax** — every font-lock / tree-sitter category (keyword, string,
function, type, comment, and the rest), each with normal/bold/italic and a
contrast rating. Click a category to flash its tokens in the code; click a
diff --git a/scripts/theme-studio/colormath.js b/scripts/theme-studio/colormath.js
new file mode 100644
index 00000000..167a5ea1
--- /dev/null
+++ b/scripts/theme-studio/colormath.js
@@ -0,0 +1,193 @@
+// colormath.js — pure color-math core for theme-studio.
+//
+// One source of truth: node imports this module (tests); generate.py inlines its
+// body into the page (stripping the trailing export block) so the browser runs
+// the same code. No DOM, no side effects.
+//
+// Algorithms: OKLab/OKLCH from Bjorn Ottosson (2020,
+// https://bottosson.github.io/posts/oklab/); APCA from APCA-W3 0.1.9
+// (https://github.com/Myndex/apca-w3); deltaE is OKLab Euclidean distance.
+
+function hex2rgb(h) {
+ return [parseInt(h.substr(1, 2), 16), parseInt(h.substr(3, 2), 16), parseInt(h.substr(5, 2), 16)];
+}
+
+// sRGB transfer (0..1 channel <-> linear-light).
+function lin(c) { return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4); }
+function delin(c) { return c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055; }
+function clamp01(c) { return c < 0 ? 0 : c > 1 ? 1 : c; }
+
+function srgb2oklab(hex) {
+ const [R, G, B] = hex2rgb(hex);
+ const r = lin(R / 255), g = lin(G / 255), b = lin(B / 255);
+ const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;
+ const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;
+ const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;
+ const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
+ return {
+ L: 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_,
+ a: 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_,
+ b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_,
+ };
+}
+
+function oklab2oklch(lab) {
+ let H = Math.atan2(lab.b, lab.a) * 180 / Math.PI;
+ if (H < 0) H += 360;
+ return { L: lab.L, C: Math.hypot(lab.a, lab.b), H };
+}
+
+function oklch2oklab(L, C, H) {
+ const hr = H * Math.PI / 180;
+ return { L, a: C * Math.cos(hr), b: C * Math.sin(hr) };
+}
+
+// OKLab -> linear sRGB (may fall outside [0,1] when out of gamut).
+function oklab2lrgb(L, a, b) {
+ const l_ = L + 0.3963377774 * a + 0.2158037573 * b;
+ const m_ = L - 0.1055613458 * a - 0.0638541728 * b;
+ const s_ = L - 0.0894841775 * a - 1.2914855480 * b;
+ const l = l_ * l_ * l_, m = m_ * m_ * m_, s = s_ * s_ * s_;
+ return [
+ 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
+ -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
+ -0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s,
+ ];
+}
+
+function inGamut(lrgb) {
+ const e = 1e-4;
+ return lrgb.every(c => c >= -e && c <= 1 + e);
+}
+
+function lrgb2hex(lrgb) {
+ return '#' + lrgb.map(c => {
+ const v = Math.round(clamp01(delin(clamp01(c))) * 255);
+ return v.toString(16).padStart(2, '0');
+ }).join('');
+}
+
+// OKLCH -> in-gamut sRGB hex. When the requested chroma is unreachable, reduce C
+// by binary search holding L and H fixed; report whether clamping happened.
+function oklch2hex(L, C, H) {
+ const lab0 = oklch2oklab(L, C, H);
+ const lrgb0 = oklab2lrgb(lab0.L, lab0.a, lab0.b);
+ if (inGamut(lrgb0)) return { hex: lrgb2hex(lrgb0), clamped: false };
+ let lo = 0, hi = C;
+ for (let i = 0; i < 24; i++) {
+ const mid = (lo + hi) / 2;
+ const lab = oklch2oklab(L, mid, H);
+ if (inGamut(oklab2lrgb(lab.L, lab.a, lab.b))) lo = mid; else hi = mid;
+ }
+ const lab = oklch2oklab(L, lo, H);
+ return { hex: lrgb2hex(oklab2lrgb(lab.L, lab.a, lab.b)), clamped: true };
+}
+
+// APCA-W3 0.1.9. Returns signed Lc: positive for dark-text-on-light, negative
+// for light-text-on-dark. Constants transcribed verbatim from the pinned source.
+function apcaY(hex) {
+ const [R, G, B] = hex2rgb(hex);
+ return 0.2126729 * Math.pow(R / 255, 2.4)
+ + 0.7151522 * Math.pow(G / 255, 2.4)
+ + 0.0721750 * Math.pow(B / 255, 2.4);
+}
+
+function apca(textHex, bgHex) {
+ const blkThrs = 0.022, blkClmp = 1.414, deltaYmin = 0.0005;
+ const normBG = 0.56, normTXT = 0.57, revTXT = 0.62, revBG = 0.65;
+ const scaleBoW = 1.14, scaleWoB = 1.14, loBoWoffset = 0.027, loWoBoffset = 0.027, loClip = 0.1;
+ let Ytxt = apcaY(textHex), Ybg = apcaY(bgHex);
+ Ytxt = Ytxt > blkThrs ? Ytxt : Ytxt + Math.pow(blkThrs - Ytxt, blkClmp);
+ Ybg = Ybg > blkThrs ? Ybg : Ybg + Math.pow(blkThrs - Ybg, blkClmp);
+ if (Math.abs(Ybg - Ytxt) < deltaYmin) return 0;
+ let out;
+ if (Ybg > Ytxt) {
+ const sapc = (Math.pow(Ybg, normBG) - Math.pow(Ytxt, normTXT)) * scaleBoW;
+ out = sapc < loClip ? 0 : sapc - loBoWoffset;
+ } else {
+ const sapc = (Math.pow(Ybg, revBG) - Math.pow(Ytxt, revTXT)) * scaleWoB;
+ out = sapc > -loClip ? 0 : sapc + loWoBoffset;
+ }
+ return out * 100;
+}
+
+// deltaE-OK: Euclidean distance in OKLab.
+function deltaE(aHex, bHex) {
+ const x = srgb2oklab(aHex), y = srgb2oklab(bHex);
+ return Math.hypot(x.L - y.L, x.a - y.a, x.b - y.b);
+}
+
+// --- WCAG 2.x relative luminance + contrast (migrated from the page inline) ---
+// rl reuses the canonical lin() above. On 8-bit channels lin's 0.04045 cutoff is
+// byte-identical to the WCAG 0.03928 piecewise the inline copy used — no channel
+// value falls between the two thresholds (10/255 = 0.0392, 11/255 = 0.0431) — so
+// every #rrggbb contrast value is preserved exactly.
+function rl(hex) {
+ const [R, G, B] = hex2rgb(hex);
+ return 0.2126 * lin(R / 255) + 0.7152 * lin(G / 255) + 0.0722 * lin(B / 255);
+}
+
+function contrast(aHex, bHex) {
+ const L1 = rl(aHex), L2 = rl(bHex), hi = Math.max(L1, L2), lo = Math.min(L1, L2);
+ return (hi + 0.05) / (lo + 0.05);
+}
+
+function rating(r) { return r >= 7 ? 'AAA' : r >= 4.5 ? 'AA' : 'FAIL'; }
+
+// --- HSV <-> sRGB for the color picker (migrated from the page inline) ---
+function hsv2rgb(h, s, v) {
+ h = (h % 360 + 360) % 360 / 360;
+ const i = Math.floor(h * 6), f = h * 6 - i, p = v * (1 - s), q = v * (1 - f * s), t = v * (1 - (1 - f) * s);
+ let r, g, b;
+ switch (((i % 6) + 6) % 6) {
+ case 0: [r, g, b] = [v, t, p]; break;
+ case 1: [r, g, b] = [q, v, p]; break;
+ case 2: [r, g, b] = [p, v, t]; break;
+ case 3: [r, g, b] = [p, q, v]; break;
+ case 4: [r, g, b] = [t, p, v]; break;
+ default: [r, g, b] = [v, p, q];
+ }
+ return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
+}
+
+function rgb2hsv(r, g, b) {
+ r /= 255; g /= 255; b /= 255;
+ const mx = Math.max(r, g, b), mn = Math.min(r, g, b), d = mx - mn;
+ let h = 0;
+ if (d) {
+ if (mx === r) h = ((g - b) / d + 6) % 6;
+ else if (mx === g) h = (b - r) / d + 2;
+ else h = (r - g) / d + 4;
+ h *= 60;
+ }
+ return [h, mx ? d / mx : 0, mx];
+}
+
+function rgb2hex(r, g, b) {
+ return '#' + [r, g, b].map(x => Math.max(0, Math.min(255, x)).toString(16).padStart(2, '0')).join('');
+}
+
+// One Chroma×Lightness plane cell at a fixed hue: the sRGB color if the (L,C,H)
+// is reachable, else flagged out of gamut. Forward-only (one conversion + a
+// range check) — the binary-search clamp is reserved for committing a color.
+function planeCell(L, C, H) {
+ const lab = oklch2oklab(L, C, H), lrgb = oklab2lrgb(lab.L, lab.a, lab.b);
+ return inGamut(lrgb) ? { inGamut: true, hex: lrgb2hex(lrgb) } : { inGamut: false, hex: null };
+}
+
+// Pairwise palette analysis. palette is [[hex, name], ...]. Returns the pairs
+// closer than threshold (OKLab ΔE), closest-first and capped, the overflow count
+// beyond the cap, and each color's nearest-neighbor distance for its chip title.
+function paletteWarnings(palette, threshold = 0.02, cap = 5) {
+ const n = palette.length, nearest = new Array(n).fill(Infinity), pairs = [];
+ for (let i = 0; i < n; i++) for (let j = i + 1; j < n; j++) {
+ const d = deltaE(palette[i][0], palette[j][0]);
+ if (d < nearest[i]) nearest[i] = d;
+ if (d < nearest[j]) nearest[j] = d;
+ if (d < threshold) pairs.push({ i, j, aName: palette[i][1], bName: palette[j][1], dE: d });
+ }
+ pairs.sort((a, b) => a.dE - b.dE);
+ return { warnings: pairs.slice(0, cap), overflow: Math.max(0, pairs.length - cap), nearest };
+}
+
+export { srgb2oklab, oklab2oklch, oklch2oklab, oklch2hex, apca, deltaE, hex2rgb, lin, rl, contrast, rating, hsv2rgb, rgb2hsv, rgb2hex, oklab2lrgb, inGamut, lrgb2hex, planeCell, paletteWarnings };
diff --git a/scripts/theme-studio/dupre-revised.json b/scripts/theme-studio/dupre-revised.json
new file mode 100644
index 00000000..89aa84e0
--- /dev/null
+++ b/scripts/theme-studio/dupre-revised.json
@@ -0,0 +1,10411 @@
+{
+ "name": "dupre-revised",
+ "palette": [
+ [
+ "#000000",
+ "ground"
+ ],
+ [
+ "#7a9abe",
+ "blue"
+ ],
+ [
+ "#e8bd30",
+ "gold"
+ ],
+ [
+ "#84b068",
+ "pistachio"
+ ],
+ [
+ "#be9e74",
+ "tan"
+ ],
+ [
+ "#d7849d",
+ "orchid pink"
+ ],
+ [
+ "#de4949",
+ "terracotta"
+ ],
+ [
+ "#cdced1",
+ "white"
+ ],
+ [
+ "#a9b2bb",
+ "silver"
+ ],
+ [
+ "#838d97",
+ "steel"
+ ],
+ [
+ "#5e6770",
+ "pewter"
+ ],
+ [
+ "#2f343a",
+ "gunmetal"
+ ],
+ [
+ "#264364",
+ "navy"
+ ],
+ [
+ "#1a1714",
+ "bg-dim"
+ ],
+ [
+ "#c76666",
+ "red"
+ ],
+ [
+ "#e52e2e",
+ "deep red"
+ ],
+ [
+ "#7f00fe",
+ "violet"
+ ],
+ [
+ "#eed376",
+ "yellow1"
+ ]
+ ],
+ "assignments": {
+ "bg": "#000000",
+ "p": "#cdced1",
+ "kw": "#7a9abe",
+ "bi": "#7a9abe",
+ "pp": "#7a9abe",
+ "fnd": "#a9b2bb",
+ "fnc": "#a9b2bb",
+ "dec": "#e8bd30",
+ "ty": "#a9b2bb",
+ "prop": "#7a9abe",
+ "con": "#84b068",
+ "num": "#84b068",
+ "str": "#d7849d",
+ "esc": "#84b068",
+ "re": "#a9b2bb",
+ "doc": "#d7849d",
+ "cm": "#a9b2bb",
+ "cmd": "#a9b2bb",
+ "var": "#e8bd30",
+ "op": "#a9b2bb",
+ "punc": "#a9b2bb"
+ },
+ "bold": [
+ "kw",
+ "fnd",
+ "ty"
+ ],
+ "italic": [
+ "cm",
+ "cmd"
+ ],
+ "ui": {
+ "cursor": {
+ "fg": null,
+ "bg": "#a9b2bb"
+ },
+ "region": {
+ "fg": null,
+ "bg": "#264364"
+ },
+ "hl-line": {
+ "fg": null,
+ "bg": "#1a1714"
+ },
+ "highlight": {
+ "fg": null,
+ "bg": "#2f343a"
+ },
+ "mode-line": {
+ "fg": "#cdced1",
+ "bg": "#2f343a"
+ },
+ "mode-line-inactive": {
+ "fg": "#838d97",
+ "bg": "#1a1714"
+ },
+ "fringe": {
+ "fg": null,
+ "bg": "#000000"
+ },
+ "line-number": {
+ "fg": "#5e6770",
+ "bg": null
+ },
+ "line-number-current-line": {
+ "fg": "#e8bd30",
+ "bg": "#1a1714"
+ },
+ "minibuffer-prompt": {
+ "fg": "#7a9abe",
+ "bg": null
+ },
+ "isearch": {
+ "fg": "#000000",
+ "bg": "#7a9abe"
+ },
+ "lazy-highlight": {
+ "fg": "#000000",
+ "bg": "#838d97"
+ },
+ "isearch-fail": {
+ "fg": "#de4949",
+ "bg": null
+ },
+ "show-paren-match": {
+ "fg": null,
+ "bg": "#264364"
+ },
+ "show-paren-mismatch": {
+ "fg": "#000000",
+ "bg": "#de4949"
+ },
+ "link": {
+ "fg": "#7a9abe",
+ "bg": null
+ },
+ "error": {
+ "fg": "#de4949",
+ "bg": null
+ },
+ "warning": {
+ "fg": "#e8bd30",
+ "bg": null
+ },
+ "success": {
+ "fg": "#5d9b86",
+ "bg": null
+ },
+ "vertical-border": {
+ "fg": "#2f343a",
+ "bg": null
+ }
+ },
+ "packages": {
+ "org-mode": {
+ "org-document-title": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-document-info": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-document-info-keyword": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": "fixed-pitch",
+ "source": "user"
+ },
+ "org-level-1": {
+ "fg": "#67809c",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-level-2": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-level-3": {
+ "fg": "#9b5fd0",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-level-4": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default",
+ "height": 1.1
+ },
+ "org-level-5": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-level-6": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-level-7": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-level-8": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-headline-todo": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-headline-done": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-todo": {
+ "fg": "#cb6b4d",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-done": {
+ "fg": "#5d9b86",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-priority": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-tag": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-tag-group": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-special-keyword": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-drawer": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-property-value": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-checkbox": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-checkbox-statistics-todo": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-checkbox-statistics-done": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-warning": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-link": {
+ "fg": "#67809c",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-footnote": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-date": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-sexp-date": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-date-selected": {
+ "fg": "#000000",
+ "bg": "#e8bd30",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-target": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-macro": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-cite": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-cite-key": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-block": {
+ "fg": "#cdced1",
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-block-begin-line": {
+ "fg": "#5e6770",
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-block-end-line": {
+ "fg": "#5e6770",
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": "fixed-pitch",
+ "source": "default"
+ },
+ "org-code": {
+ "fg": "#cb6b4d",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-verbatim": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-inline-src-block": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": "fixed-pitch",
+ "source": "default"
+ },
+ "org-quote": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-verse": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-latex-and-related": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-table": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-table-header": {
+ "fg": "#cdced1",
+ "bg": "#2f343a",
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-table-row": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-formula": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-column": {
+ "fg": null,
+ "bg": "#2f343a",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-column-title": {
+ "fg": "#cdced1",
+ "bg": "#2f343a",
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-list-dt": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-meta-line": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "user"
+ },
+ "org-ellipsis": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "user"
+ },
+ "org-hide": {
+ "fg": "#000000",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-indent": {
+ "fg": "#000000",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-archived": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-default": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-dispatcher-highlight": {
+ "fg": "#e8bd30",
+ "bg": "#264364",
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-structure": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default",
+ "height": 1.1
+ },
+ "org-agenda-structure-secondary": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-structure-filter": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-date": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default",
+ "height": 1.05
+ },
+ "org-agenda-date-today": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default",
+ "height": 1.05
+ },
+ "org-agenda-date-weekend": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-date-weekend-today": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-current-time": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-done": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-dimmed-todo-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-calendar-event": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-calendar-sexp": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-calendar-daterange": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-diary": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-clocking": {
+ "fg": null,
+ "bg": "#264364",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-column-dateline": {
+ "fg": null,
+ "bg": "#2f343a",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-restriction-lock": {
+ "fg": null,
+ "bg": "#de4949",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-filter-category": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-filter-effort": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-filter-regexp": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-agenda-filter-tags": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-scheduled": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-scheduled-today": {
+ "fg": null,
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-scheduled-previously": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-upcoming-deadline": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-upcoming-distant-deadline": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-imminent-deadline": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-time-grid": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-clock-overlay": {
+ "fg": null,
+ "bg": "#264364",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-mode-line-clock": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-mode-line-clock-overrun": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "magit": {
+ "magit-section-heading": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-section-secondary-heading": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-section-heading-selection": {
+ "fg": "#e8bd30",
+ "bg": "#264364",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-section-highlight": {
+ "fg": null,
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-section-child-count": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-added": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-added-highlight": {
+ "fg": null,
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-removed": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-removed-highlight": {
+ "fg": "#de4949",
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-context": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-context-highlight": {
+ "fg": "#a9b2bb",
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-file-heading": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-file-heading-highlight": {
+ "fg": "#cdced1",
+ "bg": "#1a1714",
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-file-heading-selection": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-hunk-heading": {
+ "fg": "#838d97",
+ "bg": "#2f343a",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-hunk-heading-highlight": {
+ "fg": "#cdced1",
+ "bg": "#2f343a",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-hunk-heading-selection": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-hunk-region": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-lines-heading": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-lines-boundary": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-base": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-base-highlight": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-our": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-our-highlight": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-their": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-their-highlight": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-conflict-heading": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-conflict-heading-highlight": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-revision-summary": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-revision-summary-highlight": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diff-whitespace-warning": {
+ "fg": null,
+ "bg": "#de4949",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diffstat-added": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-diffstat-removed": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-branch-current": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-branch-local": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-branch-remote": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-branch-remote-head": {
+ "fg": null,
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-branch-upstream": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-branch-warning": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-head": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-tag": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-hash": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-filename": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-dimmed": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-keyword": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-keyword-squash": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-refname": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-refname-stash": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-refname-wip": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-refname-pullreq": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-log-author": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-log-date": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-log-graph": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-header-line": {
+ "fg": "#cdced1",
+ "bg": "#2f343a",
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-header-line-key": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-header-line-log-select": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-process-ok": {
+ "fg": null,
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-process-ng": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-mode-line-process": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-mode-line-process-error": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-bisect-good": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-bisect-bad": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-bisect-skip": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-blame-heading": {
+ "fg": "#838d97",
+ "bg": "#2f343a",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-blame-highlight": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-blame-hash": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-blame-name": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-blame-date": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-blame-summary": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-blame-dimmed": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-blame-margin": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-cherry-equivalent": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-cherry-unmatched": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-signature-good": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-signature-bad": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-signature-untrusted": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-signature-expired": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-signature-expired-key": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-signature-revoked": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-signature-error": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-reflog-commit": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-reflog-amend": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-reflog-merge": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-reflog-checkout": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-reflog-reset": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-reflog-rebase": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-reflog-cherry-pick": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-reflog-remote": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-reflog-other": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-sequence-pick": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-sequence-stop": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-sequence-part": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-sequence-head": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-sequence-drop": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-sequence-done": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-sequence-onto": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-sequence-exec": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-left-margin": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "elfeed": {
+ "elfeed-search-date-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-search-title-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-search-unread-title-face": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-search-feed-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-search-tag-face": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-search-unread-count-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-search-filter-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-search-last-update-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-log-date-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-log-error-level-face": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-log-warn-level-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-log-info-level-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "elfeed-log-debug-level-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "mu4e": {
+ "mu4e-title-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-context-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-modeline-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-ok-face": {
+ "fg": null,
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-warning-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-header-title-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-header-key-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-header-value-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-header-face": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-header-highlight-face": {
+ "fg": null,
+ "bg": "#2f343a",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-header-marks-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-unread-face": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-flagged-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-replied-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-forwarded-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-draft-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-trashed-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-moved-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-related-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-contact-face": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-special-header-value-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-attach-number-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-url-number-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-link-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-cited-1-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-cited-2-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-cited-3-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-cited-4-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-cited-5-face": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-cited-6-face": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-cited-7-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-footer-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-region-code": {
+ "fg": null,
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-system-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-highlight-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-compose-header-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "mu4e-compose-separator-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "ghostel": {
+ "ghostel-default": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-fake-cursor": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-fake-cursor-box": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-black": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-red": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-green": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-yellow": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-blue": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-magenta": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-cyan": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-white": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-bright-black": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-bright-red": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-bright-green": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-bright-yellow": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-bright-blue": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-bright-magenta": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-bright-cyan": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "ghostel-color-bright-white": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "dashboard": {
+ "dashboard-banner-logo-title": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dashboard-text-banner": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dashboard-heading": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dashboard-items-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dashboard-navigator": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dashboard-no-items-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dashboard-footer-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dashboard-footer-icon-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "lsp-mode": {
+ "lsp-signature-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-signature-highlight-function-argument": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-signature-posframe": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-face-highlight-read": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-face-highlight-write": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-face-highlight-textual": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-face-rename": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-rename-placeholder-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-inlay-hint-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-inlay-hint-parameter-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-inlay-hint-type-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-details-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-installation-buffer-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "lsp-installation-finished-buffer-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "git-gutter": {
+ "git-gutter:added": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "git-gutter:modified": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "git-gutter:deleted": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "git-gutter:unchanged": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "git-gutter:separator": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "flycheck": {
+ "flycheck-error": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-warning": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-info": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-fringe-error": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-fringe-warning": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-fringe-info": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-delimited-error": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-delimiter": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-list-error": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-list-warning": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-list-info": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-list-error-message": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-list-checker-name": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-list-column-number": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-list-line-number": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-list-filename": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-list-id": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-list-id-with-explainer": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-error-list-highlight": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "flycheck-verify-select-checker": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "dired": {
+ "dired-header": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dired-directory": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dired-symlink": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dired-broken-symlink": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dired-special": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dired-set-id": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dired-perm-write": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dired-mark": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dired-marked": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dired-flagged": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dired-ignored": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dired-warning": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "dirvish": {
+ "dirvish-inactive": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-free-space": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-hl-line": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-hl-line-inactive": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-file-modes": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-file-link-number": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-file-user-id": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-file-group-id": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-file-size": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-file-time": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-file-inode-number": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-file-device-number": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-subtree-guide": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-subtree-state": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-collapse-dir-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-collapse-empty-dir-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-collapse-file-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-emerge-group-title": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-media-info-heading": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-media-info-property-key": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-narrow-match-face-0": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-narrow-match-face-1": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-narrow-match-face-2": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-narrow-match-face-3": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-narrow-split": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-proc-running": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-proc-finished": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-proc-failed": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-git-commit-message-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-vc-added-state": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-vc-edited-state": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-vc-removed-state": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-vc-conflict-state": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-vc-locked-state": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-vc-missing-state": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-vc-needs-merge-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-vc-needs-update-state": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "dirvish-vc-unregistered-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "calibredb": {
+ "calibredb-search-header-library-name-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-search-header-library-path-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-search-header-total-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-search-header-filter-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-search-header-sort-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-search-header-highlight-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-id-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-title-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-author-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-format-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-size-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-tag-face": {
+ "fg": "#be9e74",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-date-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-mark-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-series-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-publisher-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-pubdate-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-language-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-comment-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-archive-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-favorite-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-file-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-ids-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-highlight-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-current-page-button-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-mouse-face": {
+ "fg": null,
+ "bg": "#2f343a",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-title-detailed-view-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "calibredb-edit-annotation-header-title-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "erc": {
+ "erc-header-line": {
+ "fg": "#cdced1",
+ "bg": "#2f343a",
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-timestamp-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-notice-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-default-face": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-current-nick-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-my-nick-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-my-nick-prefix-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-nick-default-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-nick-prefix-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-button-nick-default-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-nick-msg-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-direct-msg-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-action-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-keyword-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-pal-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-fool-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-dangerous-host-face": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-error-face": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-input-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-prompt-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-command-indicator-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-information": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-button": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-bold-face": {
+ "fg": null,
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-italic-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-underline-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-inverse-face": {
+ "fg": "#000000",
+ "bg": "#a9b2bb",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-spoiler-face": {
+ "fg": "#000000",
+ "bg": "#2f343a",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-fill-wrap-merge-indicator-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-keep-place-indicator-arrow": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "erc-keep-place-indicator-line": {
+ "fg": null,
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "org-drill": {
+ "org-drill-hidden-cloze-face": {
+ "fg": "#000000",
+ "bg": "#838d97",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-drill-visible-cloze-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-drill-visible-cloze-hint-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "org-noter": {
+ "org-noter-notes-exist-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-noter-no-notes-exist-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "signel": {
+ "signel-timestamp-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "signel-my-msg-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "signel-other-msg-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "signel-error-face": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "pearl": {
+ "pearl-preamble-summary": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "pearl-editable-comment": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "pearl-readonly-comment": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "pearl-modified-highlight": {
+ "fg": null,
+ "bg": "#264364",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "pearl-modified-local": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "pearl-modified-unknown": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "slack": {
+ "slack-room-info-title-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-room-info-title-room-name-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-room-info-section-title-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-room-info-section-label-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-room-unread-face": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-output-header": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-output-text": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-output-reaction": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-output-reaction-pressed": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-deleted-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-new-message-marker-face": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-all-thread-buffer-thread-header-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-mention-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-mention-me-face": {
+ "fg": "#e8bd30",
+ "bg": "#264364",
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-mention-keyword-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-channel-button-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-mrkdwn-bold-face": {
+ "fg": null,
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-mrkdwn-italic-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-mrkdwn-code-face": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-mrkdwn-code-block-face": {
+ "fg": "#de4949",
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-mrkdwn-strike-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-mrkdwn-blockquote-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-mrkdwn-list-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-attachment-header": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-attachment-footer": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-attachment-pad": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-attachment-field-title": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-attachment-preview-header-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-preview-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-block-highlight-source-overlay-face": {
+ "fg": null,
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-action-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-action-primary-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-message-action-danger-face": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-button-block-element-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-button-primary-block-element-face": {
+ "fg": null,
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-button-danger-block-element-face": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-select-block-element-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-overflow-block-element-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-date-picker-block-element-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-dialog-title-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-dialog-element-label-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-dialog-element-hint-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-dialog-element-placeholder-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-dialog-element-error-face": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-dialog-submit-button-face": {
+ "fg": null,
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-dialog-cancel-button-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-dialog-select-element-input-face": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-user-active-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-user-dnd-face": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-user-profile-header-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-user-profile-property-name-face": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-profile-image-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-search-result-message-header-face": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-search-result-message-username-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-modeline-has-unreads-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-modeline-channel-has-unreads-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "slack-modeline-thread-has-unreads-face": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "telega": {
+ "telega-root-heading": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-tracking": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-unread-unmuted-modeline": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-username": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-user-online-status": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-user-non-online-status": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-secret-title": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-contact-birthdays-today": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-muted-count": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-unmuted-count": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-mention-count": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-has-chatbuf-brackets": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-delim-face": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-shadow": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-link": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-blue": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-red": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-msg-heading": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-msg-user-title": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-msg-self-title": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-msg-deleted": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-msg-sponsored": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-msg-inline-reply": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-msg-inline-forward": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-msg-inline-other": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-bold": {
+ "fg": null,
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-italic": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-underline": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-strikethrough": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-code": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-pre": {
+ "fg": "#de4949",
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-blockquote": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-mention": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-hashtag": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-cashtag": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-botcommand": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-texturl": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-entity-type-spoiler": {
+ "fg": "#2f343a",
+ "bg": "#2f343a",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-reaction": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-reaction-chosen": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-reaction-paid": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-reaction-paid-chosen": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-highlight-text-face": {
+ "fg": "#000000",
+ "bg": "#e8bd30",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-button-highlight": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-chat-prompt": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-chat-prompt-aux": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-chat-input-attachment": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-topic-button": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-filter-active": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-filter-button-active": {
+ "fg": "#000000",
+ "bg": "#e8bd30",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-filter-button-inactive": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-checklist-stats-done": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-checklist-stats-todo": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button-active": {
+ "fg": "#000000",
+ "bg": "#7a9abe",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button-default-active": {
+ "fg": "#000000",
+ "bg": "#a9b2bb",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button-default-passive": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button-primary-active": {
+ "fg": "#000000",
+ "bg": "#7a9abe",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button-primary-passive": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button-success-active": {
+ "fg": "#000000",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button-success-passive": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button-danger-active": {
+ "fg": "#000000",
+ "bg": "#de4949",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button-danger-passive": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button-ui-active": {
+ "fg": "#000000",
+ "bg": "#e8bd30",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button-ui-passive": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button2-active": {
+ "fg": "#000000",
+ "bg": "#7a9abe",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button2-passive": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-box-button2-white-foreground": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-describe-item-title": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-describe-section-title": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-describe-subsection-title": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-enckey-00": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-enckey-01": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-enckey-10": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-enckey-11": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-palette-builtin-blue": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-palette-builtin-green": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-palette-builtin-orange": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-palette-builtin-purple": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-webpage-title": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-webpage-subtitle": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-webpage-header": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-webpage-subheader": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-webpage-outline": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-webpage-fixed": {
+ "fg": "#de4949",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-webpage-preformatted": {
+ "fg": "#de4949",
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-webpage-marked": {
+ "fg": "#000000",
+ "bg": "#e8bd30",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-webpage-strike-through": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-webpage-chat-link": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-link-preview-sitename": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "telega-link-preview-title": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "shr": {
+ "shr-h1": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default",
+ "height": 1.4
+ },
+ "shr-h2": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default",
+ "height": 1.2
+ },
+ "shr-h3": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-h4": {
+ "fg": "#a9b2bb",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-h5": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-h6": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-text": {
+ "fg": "#cdced1",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-link": {
+ "fg": "#7a9abe",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-selected-link": {
+ "fg": "#e8bd30",
+ "bg": null,
+ "bold": true,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-code": {
+ "fg": "#de4949",
+ "bg": "#1a1714",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-mark": {
+ "fg": "#000000",
+ "bg": "#e8bd30",
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-strike-through": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-sup": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-abbreviation": {
+ "fg": "#838d97",
+ "bg": null,
+ "bold": false,
+ "italic": true,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "shr-sliced-image": {
+ "fg": "#5e6770",
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "2048-game": {
+ "twentyfortyeight-face-1024": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "twentyfortyeight-face-128": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "twentyfortyeight-face-16": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "twentyfortyeight-face-2": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "twentyfortyeight-face-2048": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "twentyfortyeight-face-256": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "twentyfortyeight-face-32": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "twentyfortyeight-face-4": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "twentyfortyeight-face-512": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "twentyfortyeight-face-64": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "twentyfortyeight-face-8": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "alert": {
+ "alert-high-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "alert-low-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "alert-moderate-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "alert-normal-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "alert-trivial-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "alert-urgent-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "all-the-icons": {
+ "all-the-icons-blue": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-blue-alt": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-cyan": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-cyan-alt": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-dblue": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-dcyan": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-dgreen": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-dmaroon": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-dorange": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-dpink": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-dpurple": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-dred": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-dsilver": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-dyellow": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-green": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-lblue": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-lcyan": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-lgreen": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-lmaroon": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-lorange": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-lpink": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-lpurple": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-lred": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-lsilver": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-lyellow": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-maroon": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-orange": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-pink": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-purple": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-purple-alt": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-red": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-red-alt": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-silver": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "all-the-icons-yellow": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "company": {
+ "company-echo": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-echo-common": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-preview": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-preview-common": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-preview-search": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-annotation": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-annotation-selection": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-common": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-common-selection": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-deprecated": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-mouse": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-quick-access": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-quick-access-selection": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-scrollbar-thumb": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-scrollbar-track": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-search": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-search-selection": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-tooltip-selection": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "company-box": {
+ "company-box-annotation": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-box-background": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-box-candidate": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-box-numbers": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-box-scrollbar": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "company-box-selection": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "consult": {
+ "consult-async-failed": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-async-finished": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-async-running": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-async-split": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-bookmark": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-buffer": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-file": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-grep-context": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-help": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-highlight-mark": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-highlight-match": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-key": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-line-number": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-line-number-prefix": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-line-number-wrapped": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-narrow-indicator": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-preview-insertion": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-preview-line": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-preview-match": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "consult-separator": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "embark": {
+ "embark-collect-annotation": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "embark-collect-candidate": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "embark-collect-group-separator": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "embark-collect-group-title": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "embark-keybinding": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "embark-keybinding-repeat": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "embark-keymap": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "embark-selected": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "embark-target": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "embark-verbose-indicator-documentation": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "embark-verbose-indicator-shadowed": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "embark-verbose-indicator-title": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "emms": {
+ "emms-browser-album-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "emms-browser-albumartist-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "emms-browser-artist-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "emms-browser-composer-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "emms-browser-performer-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "emms-browser-track-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "emms-browser-year/genre-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "emms-metaplaylist-mode-current-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "emms-metaplaylist-mode-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "emms-playlist-selected-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "emms-playlist-track-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "flyspell-correct": {
+ "flyspell-correct-highlight-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "highlight-indent-guides": {
+ "highlight-indent-guides-character-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "highlight-indent-guides-even-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "highlight-indent-guides-odd-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "highlight-indent-guides-stack-character-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "highlight-indent-guides-stack-even-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "highlight-indent-guides-stack-odd-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "highlight-indent-guides-top-character-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "highlight-indent-guides-top-even-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "highlight-indent-guides-top-odd-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "hl-todo": {
+ "hl-todo": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "hl-todo-flymake-type": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "json-mode": {
+ "json-mode-object-name-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "llama": {
+ "llama-##-macro": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "llama-deleted-argument": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "llama-llama-macro": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "llama-mandatory-argument": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "llama-optional-argument": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "lv": {
+ "lv-separator": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "magit-section": {
+ "magit-left-margin": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-section-child-count": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-section-heading": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-section-heading-selection": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-section-highlight": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "magit-section-secondary-heading": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "malyon": {
+ "malyon-face-bold": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "malyon-face-error": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "malyon-face-italic": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "malyon-face-plain": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "malyon-face-reverse": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "marginalia": {
+ "marginalia-archive": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-char": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-date": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-documentation": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-file-name": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-file-owner": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-file-priv-dir": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-file-priv-exec": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-file-priv-link": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-file-priv-no": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-file-priv-other": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-file-priv-rare": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-file-priv-read": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-file-priv-write": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-function": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-installed": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-key": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-lighter": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-list": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-mode": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-modified": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-null": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-number": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-off": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-on": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-size": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-string": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-symbol": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-true": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-type": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-value": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "marginalia-version": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "markdown-mode": {
+ "markdown-blockquote-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-bold-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-code-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-comment-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-footnote-marker-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-footnote-text-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-gfm-checkbox-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-header-delimiter-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-header-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-header-face-1": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-header-face-2": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-header-face-3": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-header-face-4": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-header-face-5": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-header-face-6": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-header-rule-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-highlight-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-highlighting-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-hr-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-html-attr-name-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-html-attr-value-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-html-entity-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-html-tag-delimiter-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-html-tag-name-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-inline-code-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-italic-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-language-info-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-language-keyword-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-line-break-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-link-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-link-title-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-list-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-markup-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-math-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-metadata-key-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-metadata-value-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-missing-link-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-plain-url-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-pre-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-reference-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-strike-through-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-table-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "markdown-url-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "nerd-icons": {
+ "nerd-icons-blue": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-blue-alt": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-cyan": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-cyan-alt": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-dblue": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-dcyan": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-dgreen": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-dmaroon": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-dorange": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-dpink": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-dpurple": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-dred": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-dsilver": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-dyellow": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-green": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-lblue": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-lcyan": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-lgreen": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-lmaroon": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-lorange": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-lpink": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-lpurple": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-lred": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-lsilver": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-lyellow": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-maroon": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-orange": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-pink": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-purple": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-purple-alt": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-red": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-red-alt": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-silver": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "nerd-icons-yellow": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "nerd-icons-completion": {
+ "nerd-icons-completion-dir-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "orderless": {
+ "orderless-match-face-0": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "orderless-match-face-1": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "orderless-match-face-2": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "orderless-match-face-3": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "org-roam": {
+ "org-roam-dailies-calendar-note": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-roam-dim": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-roam-header-line": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-roam-olp": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-roam-preview-heading": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-roam-preview-heading-highlight": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-roam-preview-heading-selection": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-roam-preview-region": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-roam-title": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "org-superstar": {
+ "org-superstar-first": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-superstar-header-bullet": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-superstar-item": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "org-superstar-leading": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "prescient": {
+ "prescient-primary-highlight": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "prescient-secondary-highlight": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "rainbow-delimiters": {
+ "rainbow-delimiters-base-error-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-base-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-depth-1-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-depth-2-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-depth-3-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-depth-4-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-depth-5-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-depth-6-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-depth-7-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-depth-8-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-depth-9-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-mismatched-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "rainbow-delimiters-unmatched-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "symbol-overlay": {
+ "symbol-overlay-default-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "symbol-overlay-face-1": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "symbol-overlay-face-2": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "symbol-overlay-face-3": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "symbol-overlay-face-4": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "symbol-overlay-face-5": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "symbol-overlay-face-6": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "symbol-overlay-face-7": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "symbol-overlay-face-8": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "tmr": {
+ "tmr-description": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "tmr-duration": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "tmr-end-time": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "tmr-finished": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "tmr-is-acknowledged": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "tmr-must-be-acknowledged": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "tmr-start-time": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "tmr-tabulated-acknowledgement": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "tmr-tabulated-description": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "tmr-tabulated-end-time": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "tmr-tabulated-remaining-time": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "tmr-tabulated-start-time": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "transient": {
+ "transient-active-infix": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-argument": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-delimiter": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-disabled-suffix": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-enabled-suffix": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-heading": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-higher-level": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-inactive-argument": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-inactive-value": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-inapt-argument": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-inapt-suffix": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-key": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-key-exit": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-key-noop": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-key-recurse": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-key-return": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-key-stack": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-key-stay": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-mismatched-key": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-nonstandard-key": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-unreachable": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-unreachable-key": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "transient-value": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "vertico": {
+ "vertico-current": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "vertico-group-separator": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "vertico-group-title": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "vertico-multiline": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "web-mode": {
+ "web-mode-annotation-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-annotation-html-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-annotation-tag-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-annotation-type-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-annotation-value-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-block-attr-name-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-block-attr-value-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-block-comment-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-block-control-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-block-delimiter-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-block-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-block-string-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-bold-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-builtin-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-comment-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-comment-keyword-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-constant-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-at-rule-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-color-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-comment-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-function-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-priority-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-property-name-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-pseudo-class-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-selector-class-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-selector-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-selector-tag-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-string-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-css-variable-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-current-column-highlight-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-current-element-highlight-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-doctype-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-error-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-filter-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-folded-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-function-call-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-function-name-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-html-attr-custom-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-html-attr-engine-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-html-attr-equal-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-html-attr-name-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-html-attr-value-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-html-entity-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-html-tag-bracket-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-html-tag-custom-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-html-tag-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-html-tag-namespaced-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-html-tag-unclosed-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-inlay-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-interpolate-color1-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-interpolate-color2-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-interpolate-color3-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-interpolate-color4-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-italic-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-javascript-comment-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-javascript-string-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-json-comment-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-json-context-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-json-key-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-json-string-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-jsx-depth-1-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-jsx-depth-2-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-jsx-depth-3-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-jsx-depth-4-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-jsx-depth-5-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-keyword-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-param-name-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-part-comment-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-part-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-part-string-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-preprocessor-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-script-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-sql-keyword-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-string-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-style-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-symbol-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-type-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-underline-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-variable-name-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-warning-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "web-mode-whitespace-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ },
+ "yasnippet": {
+ "yas--field-debug-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ },
+ "yas-field-highlight-face": {
+ "fg": null,
+ "bg": null,
+ "bold": false,
+ "italic": false,
+ "underline": false,
+ "strike": false,
+ "inherit": null,
+ "source": "default"
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/scripts/theme-studio/dupre.json b/scripts/theme-studio/dupre.json
new file mode 100644
index 00000000..f3a46990
--- /dev/null
+++ b/scripts/theme-studio/dupre.json
@@ -0,0 +1,175 @@
+{
+ "name": "dupre",
+ "palette": [
+ [
+ "#67809c",
+ "blue"
+ ],
+ [
+ "#e8bd30",
+ "gold"
+ ],
+ [
+ "#9b5fd0",
+ "regal"
+ ],
+ [
+ "#2ba178",
+ "emerald"
+ ],
+ [
+ "#5d9b86",
+ "sage"
+ ],
+ [
+ "#cb6b4d",
+ "terracotta"
+ ],
+ [
+ "#be9e74",
+ "tan"
+ ],
+ [
+ "#cdced1",
+ "white"
+ ],
+ [
+ "#a9b2bb",
+ "silver"
+ ],
+ [
+ "#838d97",
+ "steel"
+ ],
+ [
+ "#5e6770",
+ "pewter"
+ ],
+ [
+ "#2f343a",
+ "gunmetal"
+ ],
+ [
+ "#264364",
+ "navy"
+ ],
+ [
+ "#0d0b0a",
+ "ground"
+ ],
+ [
+ "#1a1714",
+ "bg-dim"
+ ]
+ ],
+ "assignments": {
+ "bg": "#0d0b0a",
+ "p": "#cdced1",
+ "kw": "#67809c",
+ "bi": "#67809c",
+ "pp": "#67809c",
+ "fnd": "#a9b2bb",
+ "fnc": "#a9b2bb",
+ "dec": "#e8bd30",
+ "ty": "#9b5fd0",
+ "prop": "#838d97",
+ "con": "#cb6b4d",
+ "num": "#cb6b4d",
+ "str": "#5d9b86",
+ "esc": "#cb6b4d",
+ "re": "#5d9b86",
+ "doc": "#5d9b86",
+ "cm": "#be9e74",
+ "cmd": "#a9b2bb",
+ "var": "#e8bd30",
+ "op": "#a9b2bb",
+ "punc": "#a9b2bb"
+ },
+ "bold": [
+ "kw",
+ "fnd"
+ ],
+ "italic": [],
+ "ui": {
+ "cursor": {
+ "fg": null,
+ "bg": "#a9b2bb"
+ },
+ "region": {
+ "fg": null,
+ "bg": "#264364"
+ },
+ "hl-line": {
+ "fg": null,
+ "bg": "#1a1714"
+ },
+ "highlight": {
+ "fg": null,
+ "bg": "#2f343a"
+ },
+ "mode-line": {
+ "fg": "#cdced1",
+ "bg": "#2f343a"
+ },
+ "mode-line-inactive": {
+ "fg": "#838d97",
+ "bg": "#1a1714"
+ },
+ "fringe": {
+ "fg": null,
+ "bg": "#0d0b0a"
+ },
+ "line-number": {
+ "fg": "#5e6770",
+ "bg": null
+ },
+ "line-number-current-line": {
+ "fg": "#e8bd30",
+ "bg": "#1a1714"
+ },
+ "minibuffer-prompt": {
+ "fg": "#67809c",
+ "bg": null
+ },
+ "isearch": {
+ "fg": "#0d0b0a",
+ "bg": "#e8bd30"
+ },
+ "lazy-highlight": {
+ "fg": "#0d0b0a",
+ "bg": "#838d97"
+ },
+ "isearch-fail": {
+ "fg": "#cb6b4d",
+ "bg": null
+ },
+ "show-paren-match": {
+ "fg": null,
+ "bg": "#264364"
+ },
+ "show-paren-mismatch": {
+ "fg": "#0d0b0a",
+ "bg": "#cb6b4d"
+ },
+ "link": {
+ "fg": "#67809c",
+ "bg": null
+ },
+ "error": {
+ "fg": "#cb6b4d",
+ "bg": null
+ },
+ "warning": {
+ "fg": "#e8bd30",
+ "bg": null
+ },
+ "success": {
+ "fg": "#5d9b86",
+ "bg": null
+ },
+ "vertical-border": {
+ "fg": "#2f343a",
+ "bg": null
+ }
+ }
+} \ No newline at end of file
diff --git a/scripts/theme-studio/generate.py b/scripts/theme-studio/generate.py
index c34b34b6..e6926e04 100644
--- a/scripts/theme-studio/generate.py
+++ b/scripts/theme-studio/generate.py
@@ -1,5 +1,20 @@
import json, os
HERE=os.path.dirname(os.path.abspath(__file__))
+
+def strip_exports(src):
+ """Drop ES-module `export` lines so the body loads as a classic <script>.
+
+ A top-level `export` is a syntax error outside a module, so it must go before
+ the body is spliced into the page. test-colormath.mjs applies the identical
+ strip and asserts the page carries the result verbatim (inline-integrity), so
+ the two copies cannot drift. NOTE: this is line-based — the export statement in
+ colormath.js must stay on a single line or the continuation lines survive.
+ """
+ return '\n'.join(l for l in src.splitlines() if not l.startswith('export')).rstrip()
+
+# Pure color-math core, inlined verbatim into the page so the browser runs the
+# same code the Node tests import (one source of truth).
+COLORMATH_BODY=strip_exports(open(os.path.join(HERE,'colormath.js')).read())
ns={}
src=open(os.path.join(HERE,'samples.py')).read()
exec(src[:src.index('cols=')], ns)
@@ -385,6 +400,9 @@ HTML = """<!doctype html><meta charset=utf-8><title>theme-studio</title>
.sbtn{width:26px;height:24px;border:1px solid #3a3a3a;border-radius:3px;background:#eaeaea;color:#111;cursor:pointer;font-size:15px;margin-right:2px;padding:0}
.sbtn.on{background:#0d0b0a;color:#cdced1;border-color:#8a9496}
.pals{display:flex;gap:8px;flex-wrap:wrap}
+ .palwarn{display:none;margin-top:8px;font:10pt monospace;color:#cb6b4d}
+ .palwarn .pwh{font-weight:bold;margin-bottom:2px}
+ .palwarn .pwl{opacity:.92}
.pchip{width:128px;height:58px;border-radius:6px;border:1px solid #555;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:grab}
.pchip.drag{opacity:.4} .pchip.sel{outline:3px solid #e8bd30;outline-offset:2px} .pchip.over{outline:2px dashed #e8bd30;outline-offset:1px} .pchip input.nm{background:transparent;border:none;text-align:center;font:bold 10pt monospace;width:108px;outline:none}
.pchip .mv{position:absolute;bottom:-1px;background:none;border:none;cursor:pointer;font-size:22px;line-height:1;font-weight:bold;opacity:.5;padding:0 5px} .pchip .mv:hover{opacity:1} .pchip .mv.l{left:0} .pchip .mv.r{right:0}
@@ -402,10 +420,23 @@ HTML = """<!doctype html><meta charset=utf-8><title>theme-studio</title>
.pmode{margin:2px 2px 8px;font:10pt monospace;color:#b4b1a2;display:flex;gap:6px;align-items:center}
.pmode button{background:#252321;color:#cdced1;border:1px solid #3a3a3a;border-radius:4px;padding:2px 9px;font:10pt monospace;cursor:pointer}
.pmode button.on{background:#e8bd30;color:#000;border-color:#e8bd30}
+ .pmodel{margin:8px 2px 4px;font:10pt monospace;color:#b4b1a2;display:flex;gap:6px;align-items:center}
+ .pmodel button{background:#252321;color:#cdced1;border:1px solid #3a3a3a;border-radius:4px;padding:2px 9px;font:10pt monospace;cursor:pointer}
+ .pmodel button.on{background:#67809c;color:#000;border-color:#67809c}
+ .oklchctl{display:none;margin:0 2px 6px;font:10pt monospace;color:#9aa3ad}
+ .oklchctl.show{display:block}
+ .oklchctl .ocrow{display:flex;align-items:center;gap:6px;margin:3px 0}
+ .oklchctl .ocrow label{width:12px;color:#cdced1}
+ .oklchctl .ocrow input[type=range]{flex:1}
+ .oklchctl .ocrow input[type=number]{width:62px;background:#252321;color:#cdced1;border:1px solid #3a3a3a;border-radius:3px;font:10pt monospace;padding:1px 3px}
+ .oklchctl .pclamp{display:none;color:#cb6b4d;margin-top:3px}
+ .oklchctl .pclamp.show{display:block}
.svcur{position:absolute;width:16px;height:16px;border:2px solid #fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #0008;pointer-events:none}
.hue{position:relative;width:34px;height:320px;border-radius:4px;cursor:ns-resize;background:linear-gradient(to bottom,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00)}
.huecur{position:absolute;left:-2px;right:-2px;height:4px;background:#fff;border:1px solid #0008;transform:translateY(-50%);pointer-events:none}
- .pinfo{display:flex;justify-content:space-between;margin:10px 2px 8px;font:12pt monospace;color:#cdced1}
+ .pinfo{display:flex;justify-content:space-between;margin:10px 2px 4px;font:12pt monospace;color:#cdced1}
+ .pinfo2{display:flex;justify-content:space-between;margin:0 2px 9px;font:10pt monospace;color:#9aa3ad}
+ .pinfo2 span{cursor:default}
.pkchips{display:flex;flex-wrap:wrap;gap:5px} .pkchips .pc{width:28px;height:28px;border-radius:3px;border:1px solid #555;cursor:pointer}
.palctl button,.filebar button,.fbtn{background:#252321;color:#e8bd30;border:1px solid #3a3a3a;border-radius:4px;padding:6px 12px;font:10pt monospace;cursor:pointer}
#palmsg{font:10pt monospace;opacity:0;transition:opacity .35s;margin-left:6px}
@@ -436,6 +467,7 @@ HTML = """<!doctype html><meta charset=utf-8><title>theme-studio</title>
<section class="pane grow">
<h1>palette</h1>
<div class="pals" id="pals"></div>
+ <div class="palwarn" id="palwarn"></div>
<div class="palctl">
<div id="swatch" class="swatch" title="open color picker"></div>
<input type="text" id="newhexstr" placeholder="#rrggbb" value="#888888" oninput="syncHex()" onkeydown="if(event.key==='Enter')applyEdit()" style="width:110px">
@@ -448,7 +480,15 @@ HTML = """<!doctype html><meta charset=utf-8><title>theme-studio</title>
<div id="sv" class="sv"><canvas id="svmask" class="svmask"></canvas><div id="svcur" class="svcur"></div></div>
<div id="hue" class="hue"><div id="huecur" class="huecur"></div></div>
</div>
+ <div class="pmodel">edit <button data-pm="hsv" class="on">HSV</button><button data-pm="oklch">OKLCH</button></div>
+ <div class="oklchctl" id="oklchctl">
+ <div class="ocrow"><label title="perceptual lightness">L</label><input type="range" id="okL" min="0" max="1" step="0.001"><input type="number" id="okLn" min="0" max="1" step="0.001"></div>
+ <div class="ocrow"><label title="chroma (colorfulness)">C</label><input type="range" id="okC" min="0" max="0.4" step="0.001"><input type="number" id="okCn" min="0" max="0.4" step="0.001"></div>
+ <div class="ocrow"><label title="hue angle, degrees">H</label><input type="range" id="okH" min="0" max="360" step="1"><input type="number" id="okHn" min="0" max="360" step="1"></div>
+ <div class="pclamp" id="pkclamp"></div>
+ </div>
<div class="pinfo"><span id="pkhex">#888888</span><span id="pkcon"></span></div>
+ <div class="pinfo2"><span id="pkoklch" title="OKLCH perceptual coordinates: lightness L (0..1), chroma C, hue H in degrees"></span><span id="pkapca"></span></div>
<div class="pmode">limit <button data-m="any" class="on">any</button><button data-m="aa">AA+</button><button data-m="aaa">AAA</button></div>
<div id="pkchips" class="pkchips"></div>
</div>
@@ -506,6 +546,7 @@ HTML = """<!doctype html><meta charset=utf-8><title>theme-studio</title>
<script>
const SAMPLES=SAMPLES_J, CATS=CATS_J, UI_FACES=UIFACES_J, APPS=APPS_J;
let MAP=MAP_J, PALETTE=PALETTE_J, BOLD=BOLD_J, ITALIC={}, UIMAP=UIMAP_J;
+const DELTAE_MIN=0.02; // OKLab ΔE below this = colors too close to tell apart (perceptual-metrics spec)
// --- tier-3 package faces: pure state helpers (Phase 1) ---
function pname(n){if(!n)return null;if(/^#/.test(n))return n;const p=PALETTE.find(p=>p[1]===n);return p?p[0]:null;}
function seedPkgmap(){const m={};for(const app in APPS){m[app]={};for(const row of APPS[app].faces){const face=row[0],d=row[2]||{};m[app][face]={fg:pname(d.fg),bg:pname(d.bg),bold:!!d.bold,italic:!!d.italic,underline:!!d.underline,strike:!!d.strike,inherit:d.inherit||null,height:d.height||1,source:'default'};}}return m;}
@@ -513,11 +554,11 @@ function packagesForExport(map){const out={};for(const app in map){const faces={
function mergePackagesInto(map,pkgs){if(!pkgs)return;for(const app in pkgs){if(!map[app])map[app]={};for(const face in pkgs[app]){const f=pkgs[app][face]||{};map[app][face]={fg:f.fg??null,bg:f.bg??null,bold:!!f.bold,italic:!!f.italic,underline:!!f.underline,strike:!!f.strike,inherit:f.inherit??null,height:f.height||1,source:f.source||'user'};}}}
let PKGMAP=seedPkgmap();
function esc(t){return t.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');}
-function lin(c){c/=255;return c<=0.03928?c/12.92:Math.pow((c+0.055)/1.055,2.4);}
-function rl(h){return 0.2126*lin(parseInt(h.substr(1,2),16))+0.7152*lin(parseInt(h.substr(3,2),16))+0.0722*lin(parseInt(h.substr(5,2),16));}
+// Pure color-math core (lin/rl/contrast/rating/hsv2rgb/rgb2hsv/hex2rgb/rgb2hex,
+// plus OKLab/OKLCH/APCA/deltaE), inlined verbatim from colormath.js. normHex,
+// textOn, and ratingColor stay below as UI-boundary helpers.
+COLORMATH_J
function textOn(h){const L=rl(h);return ((L+0.05)/0.05)>(1.05/(L+0.05))?'#000':'#fff';}
-function contrast(a,b){const L1=rl(a),L2=rl(b),hi=Math.max(L1,L2),lo=Math.min(L1,L2);return (hi+0.05)/(lo+0.05);}
-function rating(r){return r>=7?'AAA':r>=4.5?'AA':'FAIL';}
function ratingColor(r){return r>=7?'#5d9b86':r>=4.5?'#a9b2bb':'#cb6b4d';}
function cid(l){return l.replace(/\\W/g,'');}
function buildLangSel(){const s=document.getElementById('langsel');s.innerHTML='';for(const lang in SAMPLES){const o=document.createElement('option');o.value=lang;o.textContent=lang;s.appendChild(o);}}
@@ -563,11 +604,25 @@ function buildTable(){
tb.appendChild(tr);}
}
let dragFrom=null,selectedIdx=null;
+// Pairwise OKLab ΔE over the palette. Returns the sub-threshold pairs (sorted
+// closest-first) and each color's nearest-neighbor distance for its chip title.
+// Pure pairwise ΔE analysis lives in colormath.js (paletteWarnings); this renders it.
+function renderPaletteWarnings(warnings,overflow){
+ const w=document.getElementById('palwarn');if(!w)return;
+ if(!warnings.length){w.style.display='none';w.innerHTML='';return;}
+ let html='<div class="pwh">too-similar colors</div>';
+ html+=warnings.map(p=>`<div class="pwl">${esc(p.aName+' / '+p.bName)} — \\u0394E ${p.dE.toFixed(3)}, hard to distinguish</div>`).join('');
+ if(overflow>0)html+=`<div class="pwl">and ${overflow} more</div>`;
+ w.innerHTML=html;w.style.display='block';
+}
function renderPalette(){
const p=document.getElementById('pals');p.innerHTML='';
+ const {warnings,overflow,nearest}=paletteWarnings(PALETTE,DELTAE_MIN,5);
PALETTE.forEach((pc,i)=>{const [hex,name]=pc;const tc=textOn(hex);
+ const nde=nearest[i];
const locked=(hex===MAP['bg']||hex===MAP['p']);
const d=document.createElement('div');d.className='pchip'+(i===selectedIdx?' sel':'');d.style.background=hex;d.draggable=true;
+ d.title=name+' '+hex+(nde===Infinity?'':' — nearest \\u0394E '+nde.toFixed(3));
const lft=i>0?`<button class="mv l" title="move left" style="color:${tc}">&#8249;</button>`:'';
const rgt=i<PALETTE.length-1?`<button class="mv r" title="move right" style="color:${tc}">&#8250;</button>`:'';
const rm=locked?`<span class="lock" title="${hex===MAP['bg']?'background':'foreground'} — can't remove" style="color:${tc}">&#128274;</span>`:`<button class="rm" title="remove" style="color:${tc}">×</button>`;
@@ -583,6 +638,7 @@ function renderPalette(){
d.ondragleave=()=>d.classList.remove('over');
d.ondrop=(e)=>{e.preventDefault();d.classList.remove('over');if(dragFrom===null||dragFrom===i)return;const m=PALETTE.splice(dragFrom,1)[0];PALETTE.splice(i,0,m);dragFrom=null;selectedIdx=null;renderPalette();buildTable();buildUITable();};
p.appendChild(d);});
+ renderPaletteWarnings(warnings,overflow);
buildUITable();if(document.getElementById('pkgbody'))buildPkgTable();
}
function notify(msg,err){const m=document.getElementById('palmsg');if(!m)return;m.textContent=msg;m.style.color=err?'#cb6b4d':'#8a9496';m.style.opacity='1';clearTimeout(m._t);m._t=setTimeout(()=>{m.style.opacity='0';},err?4000:2800);}
@@ -603,28 +659,76 @@ function updateColor(){
}
function normHex(s){s=s.trim();if(/^[0-9a-fA-F]{6}$/.test(s))s='#'+s;return /^#[0-9a-fA-F]{6}$/.test(s)?s.toLowerCase():null;}
function curHex(){return normHex(document.getElementById('newhexstr').value)||'#888888';}
-function hsv2rgb(h,s,v){h=(h%360+360)%360/360;const i=Math.floor(h*6),f=h*6-i,p=v*(1-s),q=v*(1-f*s),t=v*(1-(1-f)*s);let r,g,b;switch(((i%6)+6)%6){case 0:[r,g,b]=[v,t,p];break;case 1:[r,g,b]=[q,v,p];break;case 2:[r,g,b]=[p,v,t];break;case 3:[r,g,b]=[p,q,v];break;case 4:[r,g,b]=[t,p,v];break;default:[r,g,b]=[v,p,q];}return[Math.round(r*255),Math.round(g*255),Math.round(b*255)];}
-function rgb2hsv(r,g,b){r/=255;g/=255;b/=255;const mx=Math.max(r,g,b),mn=Math.min(r,g,b),d=mx-mn;let h=0;if(d){if(mx===r)h=((g-b)/d+6)%6;else if(mx===g)h=(b-r)/d+2;else h=(r-g)/d+4;h*=60;}return[h,mx?d/mx:0,mx];}
-function hex2rgb(h){return[parseInt(h.substr(1,2),16),parseInt(h.substr(3,2),16),parseInt(h.substr(5,2),16)];}
-function rgb2hex(r,g,b){return '#'+[r,g,b].map(x=>Math.max(0,Math.min(255,x)).toString(16).padStart(2,'0')).join('');}
let pkH=0,pkS=0,pkV=0.5,pickerOn=false;
-let pkMode='any';
+let pkMode='any'; // contrast mask: any / aa / aaa (what constraint to mask)
+let pkModel='hsv'; // color model for editing: hsv / oklch (orthogonal to pkMode)
+const OKLCH_CMAX=0.4; // chroma axis range for the C×L plane (and the C dial); past sRGB at most hues, so the gamut grey shows the reachable region
function pkThresh(){return pkMode==='aa'?4.5:pkMode==='aaa'?7:0;}
function drawMask(){const cv=document.getElementById('svmask');if(!cv)return;const sv=document.getElementById('sv'),w=cv.width=sv.clientWidth,h=cv.height=sv.clientHeight,ctx=cv.getContext('2d');ctx.clearRect(0,0,w,h);const T=pkThresh();if(!T)return;ctx.fillStyle='rgba(8,7,6,0.66)';const step=4;for(let x=0;x<w;x+=step){const S=x/w;for(let y=0;y<h;y+=step){const V=1-y/h,[r,g,b]=hsv2rgb(pkH,S,V);if(contrast(rgb2hex(r,g,b),MAP['bg'])<T)ctx.fillRect(x,y,step,step);}}}
-function paintPicker(){const sv=document.getElementById('sv');if(!sv)return;sv.style.background=`linear-gradient(to top,#000,rgba(0,0,0,0)),linear-gradient(to right,#fff,rgba(255,255,255,0)),hsl(${pkH},100%,50%)`;const w=sv.clientWidth,h=sv.clientHeight,hh=document.getElementById('hue').clientHeight;document.getElementById('svcur').style.left=(pkS*w)+'px';document.getElementById('svcur').style.top=((1-pkV)*h)+'px';document.getElementById('huecur').style.top=((pkH/360)*hh)+'px';drawMask();}
-function pkReadout(h){const e=document.getElementById('pkhex');if(e)e.textContent=h;const c=document.getElementById('pkcon');if(c){const r=contrast(h,MAP['bg']);c.textContent=r.toFixed(1)+' '+rating(r);c.style.color=ratingColor(r);}}
+// Phase 4b: the SV box becomes a Chroma×Lightness plane in OKLCH mode. Per cell
+// the in-gamut test is forward-only (oklch→oklab→linear-rgb + range check), never
+// the binary search — that is reserved for committing a color. The rendered
+// bitmap is cached on (hue, dims, mask, bg) so dragging C/L (fixed hue) reuses it.
+let _planeCache={key:null,data:null};
+function paintOklchPlane(H){
+ const cv=document.getElementById('svmask');if(!cv)return;
+ const sv=document.getElementById('sv'),w=cv.width=sv.clientWidth,h=cv.height=sv.clientHeight,ctx=cv.getContext('2d');
+ const T=pkThresh(),key=Math.round(H)+'|'+w+'|'+h+'|'+pkMode+'|'+MAP['bg'];
+ if(_planeCache.key===key&&_planeCache.data){ctx.putImageData(_planeCache.data,0,0);return;}
+ const step=4;
+ for(let x=0;x<w;x+=step){const C=(x/w)*OKLCH_CMAX;
+ for(let y=0;y<h;y+=step){const L=1-y/h,cell=planeCell(L,C,H);
+ if(!cell.inGamut){ctx.fillStyle='#15120f';ctx.fillRect(x,y,step,step);continue;}
+ ctx.fillStyle=cell.hex;ctx.fillRect(x,y,step,step);
+ if(T&&contrast(cell.hex,MAP['bg'])<T){ctx.fillStyle='rgba(8,7,6,0.66)';ctx.fillRect(x,y,step,step);}}}
+ _planeCache={key,data:ctx.getImageData(0,0,w,h)};
+}
+function paintPicker(){const sv=document.getElementById('sv');if(!sv)return;
+ const w=sv.clientWidth,h=sv.clientHeight,hh=document.getElementById('hue').clientHeight;
+ if(pkModel==='oklch'){const [L,C,H]=readOklch();sv.style.background='#15120f';paintOklchPlane(H);
+ document.getElementById('svcur').style.left=(Math.min(1,C/OKLCH_CMAX)*w)+'px';
+ document.getElementById('svcur').style.top=((1-L)*h)+'px';
+ document.getElementById('huecur').style.top=((H/360)*hh)+'px';return;}
+ sv.style.background=`linear-gradient(to top,#000,rgba(0,0,0,0)),linear-gradient(to right,#fff,rgba(255,255,255,0)),hsl(${pkH},100%,50%)`;
+ document.getElementById('svcur').style.left=(pkS*w)+'px';document.getElementById('svcur').style.top=((1-pkV)*h)+'px';document.getElementById('huecur').style.top=((pkH/360)*hh)+'px';drawMask();}
+function pkReadout(h){const e=document.getElementById('pkhex');if(e)e.textContent=h;const c=document.getElementById('pkcon');if(c){const r=contrast(h,MAP['bg']);c.textContent=r.toFixed(1)+' '+rating(r);c.style.color=ratingColor(r);}
+ const o=document.getElementById('pkoklch');if(o){const lch=oklab2oklch(srgb2oklab(h));o.textContent='OKLCH '+lch.L.toFixed(3)+' '+lch.C.toFixed(3)+' '+Math.round(lch.H)+'\\u00b0';}
+ const a=document.getElementById('pkapca');if(a){const lc=apca(h,MAP['bg']);a.textContent='APCA Lc '+lc.toFixed(0);a.title='APCA Lc '+lc.toFixed(1)+' (APCA-W3 0.1.9), text on the ground color. Positive = dark text on a light background, negative = light text on a dark background.';}}
function syncHex(){const v=normHex(document.getElementById('newhexstr').value);if(!v)return;document.getElementById('swatch').style.background=v;[pkH,pkS,pkV]=rgb2hsv(...hex2rgb(v));if(pickerOn)paintPicker();pkReadout(v);}
function setHex(h){h=normHex(h)||h;document.getElementById('newhexstr').value=h;document.getElementById('swatch').style.background=h;[pkH,pkS,pkV]=rgb2hsv(...hex2rgb(h));if(pickerOn)paintPicker();pkReadout(h);}
-function pkSet(){const hex=rgb2hex(...hsv2rgb(pkH,pkS,pkV));document.getElementById('newhexstr').value=hex;document.getElementById('swatch').style.background=hex;paintPicker();pkReadout(hex);}
+function pkSet(){const hex=rgb2hex(...hsv2rgb(pkH,pkS,pkV));document.getElementById('newhexstr').value=hex;document.getElementById('swatch').style.background=hex;paintPicker();pkReadout(hex);if(pkModel==='oklch')oklchInputsFromHex(hex);}
+// --- OKLCH editing model (Phase 4a): L/C/H dials orthogonal to the HSV square ---
+function setOklchInputs(L,C,H){
+ const put=(id,v)=>{const e=document.getElementById(id);if(e)e.value=v;};
+ put('okL',L.toFixed(3));put('okLn',L.toFixed(3));put('okC',C.toFixed(3));put('okCn',C.toFixed(3));
+ const h=String(Math.round(H));put('okH',h);put('okHn',h);}
+function oklchInputsFromHex(hex){const lch=oklab2oklch(srgb2oklab(normHex(hex)||'#888888'));setOklchInputs(lch.L,lch.C,lch.H);}
+function readOklch(){return [parseFloat(document.getElementById('okL').value)||0,parseFloat(document.getElementById('okC').value)||0,parseFloat(document.getElementById('okH').value)||0];}
+function pkClampStatus(on){const s=document.getElementById('pkclamp');if(!s)return;s.classList.toggle('show',on);s.textContent=on?'chroma clamped to sRGB':'';}
+function pkOklchSet(){const [L,C,H]=readOklch();const {hex,clamped}=oklch2hex(L,C,H);
+ document.getElementById('newhexstr').value=hex;document.getElementById('swatch').style.background=hex;
+ [pkH,pkS,pkV]=rgb2hsv(...hex2rgb(hex));paintPicker();pkReadout(hex);
+ if(clamped)oklchInputsFromHex(hex); // snap the dials to the reachable color
+ pkClampStatus(clamped);}
+function setPkModel(m){pkModel=m;document.querySelectorAll('.pmodel button').forEach(x=>x.classList.toggle('on',x.dataset.pm===m));
+ const oc=document.getElementById('oklchctl');if(oc)oc.classList.toggle('show',m==='oklch');
+ if(m==='oklch')oklchInputsFromHex(curHex());else pkClampStatus(false);}
function buildPkChips(){const c=document.getElementById('pkchips');if(!c)return;c.innerHTML='';const T=pkThresh();PALETTE.forEach(([hex,name])=>{const s=document.createElement('div');s.className='pc';s.style.background=hex;s.title=name+' '+hex;const ok=!T||contrast(hex,MAP['bg'])>=T;if(!ok){s.style.opacity='0.22';s.title+=' (below '+pkMode.toUpperCase()+')';}s.onclick=()=>{if(ok)setHex(hex);};c.appendChild(s);});}
-function openPicker(){pickerOn=true;[pkH,pkS,pkV]=rgb2hsv(...hex2rgb(curHex()));buildPkChips();paintPicker();pkReadout(curHex());document.getElementById('picker').style.display='block';setTimeout(()=>document.addEventListener('pointerdown',pkOutside),0);}
+function openPicker(){pickerOn=true;[pkH,pkS,pkV]=rgb2hsv(...hex2rgb(curHex()));buildPkChips();document.getElementById('picker').style.display='block';setPkModel(pkModel);paintPicker();pkReadout(curHex());setTimeout(()=>document.addEventListener('pointerdown',pkOutside),0);}
function closePicker(){if(!pickerOn)return;pickerOn=false;const p=document.getElementById('picker');if(p)p.style.display='none';document.removeEventListener('pointerdown',pkOutside);}
function pkOutside(e){if(!e.target.closest('#picker')&&!e.target.closest('#swatch'))closePicker();}
function pkDrag(el,fn){el.addEventListener('pointerdown',e=>{e.preventDefault();fn(e);const mv=ev=>fn(ev),up=()=>{document.removeEventListener('pointermove',mv);document.removeEventListener('pointerup',up);};document.addEventListener('pointermove',mv);document.addEventListener('pointerup',up);});}
function initPicker(){const sw=document.getElementById('swatch');if(!sw)return;sw.style.background=curHex();sw.onclick=()=>pickerOn?closePicker():openPicker();
- pkDrag(document.getElementById('sv'),e=>{const r=document.getElementById('sv').getBoundingClientRect();pkS=Math.max(0,Math.min(1,(e.clientX-r.left)/r.width));pkV=1-Math.max(0,Math.min(1,(e.clientY-r.top)/r.height));pkSet();});
- pkDrag(document.getElementById('hue'),e=>{const r=document.getElementById('hue').getBoundingClientRect();pkH=Math.max(0,Math.min(1,(e.clientY-r.top)/r.height))*360;pkSet();});
- document.querySelectorAll('.pmode button').forEach(b=>b.onclick=()=>{pkMode=b.dataset.m;document.querySelectorAll('.pmode button').forEach(x=>x.classList.toggle('on',x===b));drawMask();buildPkChips();});}
+ pkDrag(document.getElementById('sv'),e=>{const r=document.getElementById('sv').getBoundingClientRect();const fx=Math.max(0,Math.min(1,(e.clientX-r.left)/r.width)),fy=Math.max(0,Math.min(1,(e.clientY-r.top)/r.height));
+ if(pkModel==='oklch'){setOklchInputs(1-fy,fx*OKLCH_CMAX,readOklch()[2]);pkOklchSet();}else{pkS=fx;pkV=1-fy;pkSet();}});
+ pkDrag(document.getElementById('hue'),e=>{const r=document.getElementById('hue').getBoundingClientRect();const fy=Math.max(0,Math.min(1,(e.clientY-r.top)/r.height));
+ if(pkModel==='oklch'){const [L,C]=readOklch();setOklchInputs(L,C,fy*360);pkOklchSet();}else{pkH=fy*360;pkSet();}});
+ document.querySelectorAll('.pmode button').forEach(b=>b.onclick=()=>{pkMode=b.dataset.m;document.querySelectorAll('.pmode button').forEach(x=>x.classList.toggle('on',x===b));paintPicker();buildPkChips();});
+ document.querySelectorAll('.pmodel button').forEach(b=>b.onclick=()=>setPkModel(b.dataset.pm));
+ [['okL','okLn',3],['okC','okCn',3],['okH','okHn',0]].forEach(([r,n,dp])=>{
+ const re=document.getElementById(r),ne=document.getElementById(n);
+ if(re)re.addEventListener('input',()=>{if(ne)ne.value=(+re.value).toFixed(dp);pkOklchSet();});
+ if(ne)ne.addEventListener('input',()=>{if(re)re.value=ne.value;pkOklchSet();});});}
function addColor(){const h=curHex();const name=document.getElementById('newname').value.trim();
if(!name){notify('name the color before adding it',true);return;}
if(PALETTE.some(p=>p[1].toLowerCase()===name.toLowerCase())){notify('a color named "'+name+'" already exists — select it and use Update selected to change its value',true);return;}
@@ -1108,12 +1212,71 @@ function pkgSelftest(){
}
if(location.hash==='#selftest')pkgSelftest();
if(location.hash.startsWith('#pick')){openPicker();const m=location.hash.slice(5);if(m){const b=document.querySelector('.pmode button[data-m="'+m+'"]');if(b)b.click();}}
+if(location.hash==='#cursortest'){document.getElementById('newhexstr').value='#67809c';openPicker();const sc=document.getElementById('svcur'),hc=document.getElementById('huecur');const L=parseFloat(sc.style.left||'0'),T=parseFloat(sc.style.top||'0'),H=parseFloat(hc.style.top||'0');const ok=L>1&&T>1&&H>1;document.title='CURSORTEST '+(ok?'PASS':'FAIL');const d=document.createElement('div');d.id='cursortest';d.textContent='CURSORTEST '+(ok?'PASS':'FAIL')+' left='+sc.style.left+' top='+sc.style.top+' hue='+hc.style.top;document.body.appendChild(d);}
if(location.hash.startsWith('#app')){const ap=location.hash.slice(4),s=document.getElementById('appsel');if(s&&ap){s.value=ap;pkgChanged();}}
+if(location.hash==='#planetest'){let ok=true;const notes=[];
+ document.getElementById('newhexstr').value='#67809c';openPicker();setPkModel('oklch');paintPicker();
+ const sv=document.getElementById('sv'),cv=document.getElementById('svmask'),ctx=cv.getContext('2d');
+ const [L,C,H]=readOklch();
+ const expLeft=Math.min(1,C/OKLCH_CMAX)*sv.clientWidth,expTop=(1-L)*sv.clientHeight;
+ const gotLeft=parseFloat(document.getElementById('svcur').style.left),gotTop=parseFloat(document.getElementById('svcur').style.top);
+ if(Math.abs(gotLeft-expLeft)>2||Math.abs(gotTop-expTop)>2){ok=false;notes.push('crosshair off got '+gotLeft.toFixed(1)+','+gotTop.toFixed(1)+' exp '+expLeft.toFixed(1)+','+expTop.toFixed(1));}
+ const Coog=0.38,Loog=0.5,labO=oklch2oklab(Loog,Coog,H),oog=!inGamut(oklab2lrgb(labO.L,labO.a,labO.b));
+ const oogX=Math.min(cv.width-2,Math.round((Coog/OKLCH_CMAX)*cv.width)),oogY=Math.round((1-Loog)*cv.height);
+ const dO=ctx.getImageData(oogX,oogY,1,1).data,greyO=Math.abs(dO[0]-0x15)<10&&Math.abs(dO[1]-0x12)<10&&Math.abs(dO[2]-0x0f)<10;
+ if(oog&&!greyO){ok=false;notes.push('OOG cell not masked rgb '+dO[0]+','+dO[1]+','+dO[2]);}
+ const inX=Math.round((0.03/OKLCH_CMAX)*cv.width),inY=Math.round(0.5*cv.height);
+ const dI=ctx.getImageData(inX,inY,1,1).data,greyI=Math.abs(dI[0]-0x15)<10&&Math.abs(dI[1]-0x12)<10&&Math.abs(dI[2]-0x0f)<10;
+ if(greyI){ok=false;notes.push('in-gamut cell rendered as OOG grey rgb '+dI[0]+','+dI[1]+','+dI[2]);}
+ document.title='PLANETEST '+(ok?'PASS':'FAIL');const d=document.createElement('div');d.id='planetest';d.textContent='PLANETEST '+(ok?'PASS':'FAIL')+(notes.length?' | '+notes.join(' ; '):'');document.body.appendChild(d);}
+if(location.hash==='#oklchtest'){let ok=true;const notes=[];
+ document.getElementById('newhexstr').value='#67809c';openPicker();
+ const before=document.getElementById('newhexstr').value;
+ setPkModel('oklch');
+ if(pkModel!=='oklch'){ok=false;notes.push('model not oklch');}
+ if(!document.getElementById('oklchctl').classList.contains('show')){ok=false;notes.push('oklch dials hidden');}
+ if(document.getElementById('newhexstr').value!==before){ok=false;notes.push('color changed on model switch: '+document.getElementById('newhexstr').value);}
+ pkMode='any';document.querySelector('.pmode button[data-m="aa"]').click();
+ if(pkModel!=='oklch'){ok=false;notes.push('mask toggle reset model');}
+ if(pkMode!=='aa'){ok=false;notes.push('mask did not set aa');}
+ setPkModel('hsv');
+ if(pkMode!=='aa'){ok=false;notes.push('model switch reset mask to '+pkMode);}
+ if(pkModel!=='hsv'){ok=false;notes.push('model not hsv after switch');}
+ setPkModel('oklch');setOklchInputs(0.591,0.052,251.6);pkOklchSet();
+ const driven=document.getElementById('newhexstr').value,dl=oklab2oklch(srgb2oklab(driven));
+ if(!(Math.abs(dl.L-0.591)<0.02&&Math.abs(dl.C-0.052)<0.02)){ok=false;notes.push('dials did not drive color: '+driven);}
+ const {clamped}=oklch2hex(0.7,0.4,140);setOklchInputs(0.7,0.4,140);pkOklchSet();
+ if(!(clamped&&document.getElementById('pkclamp').classList.contains('show'))){ok=false;notes.push('clamp status missing for out-of-gamut C');}
+ document.title='OKLCHTEST '+(ok?'PASS':'FAIL');const d=document.createElement('div');d.id='oklchtest';d.textContent='OKLCHTEST '+(ok?'PASS':'FAIL')+(notes.length?' | '+notes.join(' ; '):'');document.body.appendChild(d);}
+if(location.hash==='#deltatest'){const save=PALETTE.slice();let ok=true;const notes=[];const W=()=>document.getElementById('palwarn');
+ PALETTE=[['#0d0b0a','ground'],['#cdced1','fg'],['#67809c','blue'],['#69829e','blue2']];renderPalette();
+ const t1=W().textContent;if(!(W().style.display!=='none'&&/blue \\/ blue2/.test(t1)&&/ΔE/.test(t1))){ok=false;notes.push('near-pair did not fire: '+t1);}
+ PALETTE=[['#0d0b0a','ground'],['#cdced1','fg'],['#67809c','blue'],['#e8bd30','gold'],['#cb6b4d','terra']];renderPalette();
+ if(W().style.display!=='none'){ok=false;notes.push('spread palette warned: '+W().textContent);}
+ PALETTE=[['#0d0b0a','ground'],['#cdced1','fg']];for(let k=0;k<7;k++){const v=(0x67+k).toString(16).padStart(2,'0');PALETTE.push(['#'+v+'809c','c'+k]);}renderPalette();
+ const tc=W().textContent;const nums=[...tc.matchAll(/ΔE (\\d+\\.\\d+)/g)].map(m=>parseFloat(m[1]));
+ if(!/and \\d+ more/.test(tc)){ok=false;notes.push('no cap suffix: '+tc);}
+ if(!(nums.length===5&&nums.every((n,k)=>k===0||n>=nums[k-1]))){ok=false;notes.push('not 5-capped ascending: '+nums.join(','));}
+ PALETTE=save;renderPalette();
+ document.title='DELTATEST '+(ok?'PASS':'FAIL');const d=document.createElement('div');d.id='deltatest';d.textContent='DELTATEST '+(ok?'PASS':'FAIL')+(notes.length?' | '+notes.join(' ; '):'');document.body.appendChild(d);}
+if(location.hash==='#readouttest'){const hex='#67809c';document.getElementById('newhexstr').value=hex;openPicker();pkReadout(hex);
+ const o=document.getElementById('pkoklch').textContent,a=document.getElementById('pkapca').textContent,w=document.getElementById('pkcon').textContent;
+ const lch=oklab2oklch(srgb2oklab(hex));
+ const expO='OKLCH '+lch.L.toFixed(3)+' '+lch.C.toFixed(3)+' '+Math.round(lch.H)+'\\u00b0';
+ const expA='APCA Lc '+apca(hex,MAP['bg']).toFixed(0);
+ const r=contrast(hex,MAP['bg']),expW=r.toFixed(1)+' '+rating(r);
+ const wired=o===expO&&a===expA&&w===expW;
+ const sane=Math.abs(lch.L-0.591)<0.01&&Math.abs(lch.C-0.052)<0.01&&Math.abs(lch.H-251.6)<2;
+ const ok=wired&&sane;document.title='READOUTTEST '+(ok?'PASS':'FAIL');
+ const d=document.createElement('div');d.id='readouttest';d.textContent='READOUTTEST '+(ok?'PASS':'FAIL')+' oklch='+o+' | apca='+a+' | wcag='+w;document.body.appendChild(d);}
</script>"""
-HTML=(HTML.replace("SAMPLES_J",json.dumps(SAMPLES))
+HTML=(HTML.replace("COLORMATH_J",COLORMATH_BODY)
+ .replace("SAMPLES_J",json.dumps(SAMPLES))
.replace("PALETTE_J",json.dumps(PALETTE)).replace("CATS_J",json.dumps(CATS))
.replace("UIFACES_J",json.dumps(UI_FACES)).replace("UIMAP_J",json.dumps(UIMAP)).replace("APPS_J",json.dumps(APPS))
.replace("BOLD_J",json.dumps(BOLD)).replace("MAP_J",json.dumps(MAP)))
OUT=os.path.join(HERE,'theme-studio.html')
-open(OUT,"w").write(HTML)
-print("wrote",OUT)
+
+if __name__=='__main__':
+ open(OUT,"w").write(HTML)
+ print("wrote",OUT)
diff --git a/scripts/theme-studio/run-tests.sh b/scripts/theme-studio/run-tests.sh
new file mode 100755
index 00000000..b1fe54fa
--- /dev/null
+++ b/scripts/theme-studio/run-tests.sh
@@ -0,0 +1,73 @@
+#!/usr/bin/env bash
+# Test runner for the theme-studio tool. Drives the whole pyramid in one command:
+# - regenerate theme-studio.html from generate.py
+# - Python templating tests (export-strip + placeholder substitution)
+# - Node unit tests for colormath.js (+ inline-integrity)
+# - syntax-check the spliced page <script>
+# - browser hash gates in headless Chrome (#selftest and the metric tests)
+#
+# Exit status is non-zero if any stage fails. Browser gates need a Chromium-family
+# browser; when none is found they are reported as SKIPPED (not passed) so the
+# gap is visible rather than silently green.
+#
+# Usage: scripts/theme-studio/run-tests.sh (or: make theme-studio-test)
+set -uo pipefail
+
+HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+cd "$HERE"
+
+fail=0
+pass_msg() { printf ' PASS %s\n' "$1"; }
+fail_msg() { printf ' FAIL %s\n' "$1"; fail=1; }
+skip_msg() { printf ' SKIP %s\n' "$1"; }
+
+echo "theme-studio tests"
+
+# 1. Regenerate the page (the browser gates and inline-integrity read it).
+if python3 generate.py >/dev/null; then pass_msg "generate.py wrote theme-studio.html"
+else fail_msg "generate.py failed"; fi
+
+# 2. Python templating tests.
+if python3 -m unittest test_generate >/tmp/ts-pytest.log 2>&1; then
+ pass_msg "Python templating tests ($(grep -oE 'Ran [0-9]+' /tmp/ts-pytest.log | awk '{print $2}') tests)"
+else fail_msg "Python templating tests"; sed 's/^/ /' /tmp/ts-pytest.log; fi
+
+# 3. Node unit tests + inline-integrity. Node 26 broke `--test <dir>`; glob the files.
+if node --test ./*.mjs >/tmp/ts-node.log 2>&1; then
+ pass_msg "Node unit tests ($(grep -E '^. tests' /tmp/ts-node.log | grep -oE '[0-9]+' | head -1) tests)"
+else fail_msg "Node unit tests"; grep -E 'not ok|AssertionError|Error' /tmp/ts-node.log | sed 's/^/ /' | head -20; fi
+
+# 4. Syntax-check the inlined page script.
+python3 - <<'PY' && node --check /tmp/ts-script.js >/dev/null 2>&1 && pass_msg "spliced page <script> parses" || fail_msg "spliced page <script> syntax"
+import re
+h = open('theme-studio.html').read()
+open('/tmp/ts-script.js', 'w').write(re.search(r'<script>(.*)</script>', h, re.S).group(1))
+PY
+
+# 5. Browser hash gates.
+CHROME=""
+for c in google-chrome-stable google-chrome chromium chromium-browser; do
+ if command -v "$c" >/dev/null 2>&1; then CHROME="$c"; break; fi
+done
+HASHES="selftest cursortest readouttest deltatest oklchtest planetest"
+if [ -z "$CHROME" ]; then
+ for t in $HASHES; do skip_msg "#$t (no Chromium-family browser found)"; done
+else
+ PROF="$(mktemp -d)"
+ trap 'rm -rf "$PROF"' EXIT
+ for t in $HASHES; do
+ upper="$(echo "$t" | tr '[:lower:]' '[:upper:]')"
+ res="$("$CHROME" --headless --no-sandbox --disable-gpu --user-data-dir="$PROF" \
+ --virtual-time-budget=8000 --dump-dom "file://$HERE/theme-studio.html#$t" 2>/dev/null \
+ | grep -o "${upper}[^<]*" | head -1)"
+ case "$res" in
+ *PASS*) pass_msg "#$t" ;;
+ *FAIL*) fail_msg "#$t -> $res" ;;
+ *) fail_msg "#$t -> no verdict (browser did not run the test)" ;;
+ esac
+ done
+fi
+
+echo
+if [ "$fail" -eq 0 ]; then echo "all stages green"; else echo "FAILURES above"; fi
+exit "$fail"
diff --git a/scripts/theme-studio/test-colormath.mjs b/scripts/theme-studio/test-colormath.mjs
new file mode 100644
index 00000000..58ce7829
--- /dev/null
+++ b/scripts/theme-studio/test-colormath.mjs
@@ -0,0 +1,240 @@
+// Unit tests for the pure color-math core (colormath.js).
+// Run: node --test scripts/theme-studio/
+// Run with coverage: node --test --experimental-test-coverage scripts/theme-studio/
+//
+// Fixtures are from the perceptual-color-metrics spec: OKLab via Ottosson's
+// reference, APCA via APCA-W3 0.1.9, deltaE via OKLab Euclidean distance.
+
+import { test } from 'node:test';
+import assert from 'node:assert/strict';
+import { readFileSync } from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import {
+ srgb2oklab, oklab2oklch, oklch2oklab, oklch2hex, apca, deltaE,
+ hex2rgb, rl, contrast, rating, hsv2rgb, rgb2hsv, rgb2hex,
+ oklab2lrgb, inGamut, lrgb2hex, planeCell, paletteWarnings,
+} from './colormath.js';
+
+const close = (a, b, eps = 0.005) => Math.abs(a - b) <= eps;
+const here = fileURLToPath(new URL('.', import.meta.url));
+// Same export-strip generate.py applies before inlining (drop `export` lines, rstrip).
+const stripExports = (s) =>
+ s.split('\n').filter((l) => !l.startsWith('export')).join('\n').replace(/\s+$/, '');
+
+test('srgb2oklab achromatic anchors', () => {
+ const w = srgb2oklab('#ffffff');
+ assert.ok(close(w.L, 1.0), `white L ${w.L}`);
+ assert.ok(close(w.a, 0) && close(w.b, 0), `white a/b ${w.a},${w.b}`);
+ const k = srgb2oklab('#000000');
+ assert.ok(close(k.L, 0), `black L ${k.L}`);
+});
+
+test('OKLCH chromatic fixtures (red, dupre-blue)', () => {
+ const red = oklab2oklch(srgb2oklab('#ff0000'));
+ assert.ok(close(red.L, 0.628) && close(red.C, 0.258) && close(red.H, 29.2, 1),
+ `red ${JSON.stringify(red)}`);
+ const blue = oklab2oklch(srgb2oklab('#67809c'));
+ assert.ok(close(blue.L, 0.591) && close(blue.C, 0.052) && close(blue.H, 251.6, 1),
+ `dupre-blue ${JSON.stringify(blue)}`);
+});
+
+test('round-trip srgb -> oklch -> hex preserves the color', () => {
+ for (const h of ['#67809c', '#e8bd30', '#9b5fd0', '#5d9b86', '#cb6b4d']) {
+ const lab = srgb2oklab(h);
+ const c = oklab2oklch(lab);
+ const back = srgb2oklab(oklch2hex(c.L, c.C, c.H).hex);
+ assert.ok(close(lab.L, back.L) && close(lab.a, back.a) && close(lab.b, back.b),
+ `roundtrip ${h}`);
+ }
+});
+
+test('APCA both polarities (pinned black/white fixtures)', () => {
+ assert.ok(close(apca('#000000', '#ffffff'), 106.0, 0.5),
+ `dark-on-light ${apca('#000000', '#ffffff')}`);
+ assert.ok(close(apca('#ffffff', '#000000'), -107.9, 0.5),
+ `light-on-dark ${apca('#ffffff', '#000000')}`);
+ // Chromatic fixture: catches rounded-coefficient drift that black/white can't.
+ // Sign is positive (dark-ish text on a light bg).
+ assert.ok(apca('#67809c', '#ffffff') > 0, 'chromatic apca sign');
+});
+
+test('deltaE-OK identity and ordering against the 0.02 threshold', () => {
+ assert.equal(deltaE('#67809c', '#67809c'), 0);
+ assert.ok(deltaE('#000000', '#ffffff') > 0);
+ const near = deltaE('#67809c', '#69829e'); // barely-different blue
+ const far = deltaE('#67809c', '#e8bd30'); // blue vs gold
+ assert.ok(near < 0.02, `near ${near}`);
+ assert.ok(far > 0.1, `far ${far}`);
+});
+
+test('gamut clamp preserves L/H, reduces C, flags clamped', () => {
+ const oog = oklch2hex(0.6, 0.5, 30); // very high chroma -> out of sRGB
+ assert.equal(oog.clamped, true);
+ const got = oklab2oklch(srgb2oklab(oog.hex));
+ assert.ok(close(got.L, 0.6, 0.02), `L preserved ${got.L}`);
+ assert.ok(close(got.H, 30, 2), `H preserved ${got.H}`);
+ assert.ok(got.C < 0.5, `C reduced ${got.C}`);
+ const ing = oklch2hex(0.591, 0.052, 251.6); // in gamut
+ assert.equal(ing.clamped, false);
+});
+
+test('hex2rgb parses channels', () => {
+ assert.deepEqual(hex2rgb('#000000'), [0, 0, 0]);
+ assert.deepEqual(hex2rgb('#ffffff'), [255, 255, 255]);
+ assert.deepEqual(hex2rgb('#67809c'), [0x67, 0x80, 0x9c]);
+});
+
+test('WCAG relative luminance anchors', () => {
+ assert.ok(close(rl('#ffffff'), 1.0, 1e-9), `white ${rl('#ffffff')}`);
+ assert.ok(close(rl('#000000'), 0.0, 1e-9), `black ${rl('#000000')}`);
+ assert.ok(rl('#ff0000') < rl('#00ff00'), 'green brighter than red'); // 0.2126 vs 0.7152
+});
+
+test('WCAG contrast: symmetry, identity, and known extremes', () => {
+ assert.ok(close(contrast('#000000', '#ffffff'), 21, 1e-6), 'black/white = 21:1');
+ assert.equal(contrast('#67809c', '#67809c'), 1); // identical colors
+ assert.ok(close(contrast('#0d0b0a', '#67809c'), contrast('#67809c', '#0d0b0a'), 1e-12),
+ 'order-independent');
+ // dupre keyword-blue on ground, a real palette pair (sanity, not a hand-typed number).
+ assert.ok(contrast('#67809c', '#0d0b0a') > 4.5, 'dupre blue clears AA on ground');
+});
+
+test('rating bands at the AA/AAA boundaries', () => {
+ assert.equal(rating(7.0), 'AAA');
+ assert.equal(rating(6.99), 'AA');
+ assert.equal(rating(4.5), 'AA');
+ assert.equal(rating(4.49), 'FAIL');
+ assert.equal(rating(0), 'FAIL');
+});
+
+test('hsv2rgb primaries and achromatic edges', () => {
+ assert.deepEqual(hsv2rgb(0, 1, 1), [255, 0, 0]);
+ assert.deepEqual(hsv2rgb(120, 1, 1), [0, 255, 0]);
+ assert.deepEqual(hsv2rgb(240, 1, 1), [0, 0, 255]);
+ assert.deepEqual(hsv2rgb(0, 0, 1), [255, 255, 255]); // s=0 -> grey (white)
+ assert.deepEqual(hsv2rgb(0, 0, 0), [0, 0, 0]); // v=0 -> black
+ assert.deepEqual(hsv2rgb(360, 1, 1), [255, 0, 0]); // hue wraps
+});
+
+test('rgb2hsv inverts hsv2rgb (saturation/value), hue for chromatic inputs', () => {
+ assert.deepEqual(rgb2hsv(255, 0, 0), [0, 1, 1]);
+ assert.deepEqual(rgb2hsv(0, 0, 0), [0, 0, 0]); // black: h and s undefined -> 0
+ const [h, s, v] = rgb2hsv(0, 255, 0);
+ assert.ok(close(h, 120, 1e-9) && s === 1 && v === 1, `green hsv ${h},${s},${v}`);
+});
+
+test('hsv <-> rgb round-trip property over random colors', () => {
+ let seed = 1234567; // deterministic LCG: no Math.random, repeatable failures
+ const rnd = () => (seed = (seed * 1103515245 + 12345) & 0x7fffffff) / 0x7fffffff;
+ for (let i = 0; i < 500; i++) {
+ const rgb = [Math.floor(rnd() * 256), Math.floor(rnd() * 256), Math.floor(rnd() * 256)];
+ const [h, s, v] = rgb2hsv(...rgb);
+ assert.deepEqual(hsv2rgb(h, s, v), rgb, `round-trip ${rgb}`);
+ }
+});
+
+test('rgb2hex formats and clamps out-of-range channels', () => {
+ assert.equal(rgb2hex(0, 0, 0), '#000000');
+ assert.equal(rgb2hex(255, 255, 255), '#ffffff');
+ assert.equal(rgb2hex(0x67, 0x80, 0x9c), '#67809c');
+ assert.equal(rgb2hex(-5, 300, 128), '#00ff80'); // clamps below 0 and above 255
+});
+
+test('oklab2lrgb / lrgb2hex round-trip through known sRGB colors', () => {
+ for (const h of ['#000000', '#ffffff', '#67809c', '#e8bd30']) {
+ const lab = srgb2oklab(h);
+ assert.equal(lrgb2hex(oklab2lrgb(lab.L, lab.a, lab.b)), h, `round-trip ${h}`);
+ }
+});
+
+test('inGamut flags reachable vs unreachable OKLCH (forward-only gamut test)', () => {
+ // dupre-blue is a real sRGB color -> in gamut.
+ const ok = oklch2oklab(0.591, 0.052, 251.6);
+ assert.equal(inGamut(oklab2lrgb(ok.L, ok.a, ok.b)), true, 'reachable');
+ // very high chroma at mid lightness -> outside sRGB.
+ const bad = oklch2oklab(0.7, 0.4, 140);
+ assert.equal(inGamut(oklab2lrgb(bad.L, bad.a, bad.b)), false, 'unreachable');
+ // the in-gamut verdict must agree with oklch2hex's clamped flag (the plane and
+ // the commit path share one gamut boundary).
+ assert.equal(inGamut(oklab2lrgb(ok.L, ok.a, ok.b)), !oklch2hex(0.591, 0.052, 251.6).clamped);
+ assert.equal(inGamut(oklab2lrgb(bad.L, bad.a, bad.b)), !oklch2hex(0.7, 0.4, 140).clamped);
+});
+
+test('planeCell: reachable cell returns its exact hex, agrees with oklch2hex', () => {
+ // Normal: a low-chroma blue is reachable; the hex matches the commit path.
+ const cell = planeCell(0.591, 0.052, 251.6);
+ assert.equal(cell.inGamut, true);
+ assert.equal(cell.hex, oklch2hex(0.591, 0.052, 251.6).hex);
+});
+
+test('planeCell: C=0 is the achromatic grey for its lightness', () => {
+ // Boundary: zero chroma -> a neutral grey, always in gamut, hue irrelevant.
+ const a = planeCell(0.5, 0, 0), b = planeCell(0.5, 0, 251.6);
+ assert.equal(a.inGamut, true);
+ assert.equal(a.hex, b.hex, 'hue must not matter at C=0');
+ assert.equal(a.hex[1], a.hex[3]); // r==g==b nibble: grey
+});
+
+test('planeCell: out-of-gamut chroma is flagged, no hex', () => {
+ // Error/boundary: chroma past sRGB at this L/H.
+ const cell = planeCell(0.7, 0.4, 140);
+ assert.equal(cell.inGamut, false);
+ assert.equal(cell.hex, null);
+ assert.equal(cell.inGamut, !oklch2hex(0.7, 0.4, 140).clamped); // shares the boundary
+});
+
+test('paletteWarnings: a near-identical pair warns, named, with its ΔE', () => {
+ const { warnings, overflow, nearest } = paletteWarnings(
+ [['#0d0b0a', 'ground'], ['#cdced1', 'fg'], ['#67809c', 'blue'], ['#69829e', 'blue2']]);
+ assert.equal(warnings.length, 1);
+ assert.equal(overflow, 0);
+ const w = warnings[0];
+ assert.deepEqual([w.aName, w.bName], ['blue', 'blue2']);
+ assert.ok(w.dE > 0 && w.dE < 0.02, `dE ${w.dE}`);
+ assert.equal(nearest.length, 4);
+ assert.ok(nearest[2] < 0.02 && nearest[3] < 0.02, 'blue/blue2 are each other’s nearest');
+});
+
+test('paletteWarnings: a well-spread palette warns about nothing', () => {
+ const { warnings, overflow } = paletteWarnings(
+ [['#0d0b0a', 'ground'], ['#cdced1', 'fg'], ['#67809c', 'blue'], ['#e8bd30', 'gold'], ['#cb6b4d', 'terra']]);
+ assert.equal(warnings.length, 0);
+ assert.equal(overflow, 0);
+});
+
+test('paletteWarnings: boundary cases — empty, single, identical', () => {
+ assert.deepEqual(paletteWarnings([]), { warnings: [], overflow: 0, nearest: [] });
+ const one = paletteWarnings([['#67809c', 'blue']]);
+ assert.deepEqual(one.warnings, []);
+ assert.deepEqual(one.nearest, [Infinity]); // no neighbor
+ const dup = paletteWarnings([['#67809c', 'a'], ['#67809c', 'b']]);
+ assert.equal(dup.warnings.length, 1);
+ assert.equal(dup.warnings[0].dE, 0); // identical colors -> ΔE 0
+});
+
+test('paletteWarnings: closest-first ordering and cap with overflow', () => {
+ // Seven near-identical colors -> C(7,2)=21 sub-threshold pairs.
+ const pal = [['#0d0b0a', 'ground'], ['#cdced1', 'fg']];
+ for (let k = 0; k < 7; k++) pal.push(['#' + (0x67 + k).toString(16).padStart(2, '0') + '809c', 'c' + k]);
+ const { warnings, overflow } = paletteWarnings(pal, 0.02, 5);
+ assert.equal(warnings.length, 5, 'capped at 5');
+ assert.equal(overflow, 16, '21 pairs - 5 shown');
+ for (let i = 1; i < warnings.length; i++)
+ assert.ok(warnings[i].dE >= warnings[i - 1].dE, 'ascending by ΔE');
+});
+
+test('paletteWarnings: threshold is inclusive-exclusive at the boundary', () => {
+ // A custom threshold lets a pair fall just inside or just outside.
+ const pal = [['#67809c', 'a'], ['#69829e', 'b']]; // dE ~0.0067
+ assert.equal(paletteWarnings(pal, 0.0067).warnings.length, 0, 'd < threshold is strict');
+ assert.equal(paletteWarnings(pal, 0.007).warnings.length, 1, 'just above the pair distance');
+});
+
+// Guards the one-source-of-truth contract: the page must carry colormath.js's
+// body (sans exports) verbatim, so the inlined copy and the tested module cannot
+// drift. Requires `python3 generate.py` to have run first.
+test('inline-integrity: theme-studio.html contains the colormath.js body verbatim', () => {
+ const body = stripExports(readFileSync(here + 'colormath.js', 'utf8'));
+ const html = readFileSync(here + 'theme-studio.html', 'utf8');
+ assert.ok(html.includes(body), 'generated page is missing the colormath.js body verbatim');
+});
diff --git a/scripts/theme-studio/test_generate.py b/scripts/theme-studio/test_generate.py
new file mode 100644
index 00000000..e76acdad
--- /dev/null
+++ b/scripts/theme-studio/test_generate.py
@@ -0,0 +1,84 @@
+"""Tests for the theme-studio page generator (generate.py).
+
+The generator's risky logic is the export-strip and the placeholder substitution
+that inline colormath.js and the sample/palette data into the page. A bug there
+ships a broken theme-studio.html that the JS unit tests can't see. These tests
+exercise the strip in isolation and assert the assembled page has every
+placeholder filled and carries the colormath body verbatim.
+
+Run: python3 -m unittest test_generate (from scripts/theme-studio/)
+"""
+import os
+import unittest
+
+import generate # importable without side effects: the file write is __main__-guarded
+
+
+class StripExports(unittest.TestCase):
+ def test_removes_the_export_line_keeps_the_body(self):
+ src = "function f(){return 1;}\nexport { f };"
+ self.assertEqual(generate.strip_exports(src), "function f(){return 1;}")
+
+ def test_preserves_multiline_body_and_rstrips_trailing_blanks(self):
+ src = "const a=1;\nconst b=2;\nexport { a, b };\n\n"
+ self.assertEqual(generate.strip_exports(src), "const a=1;\nconst b=2;")
+
+ def test_no_export_line_returns_body_rstripped(self):
+ self.assertEqual(generate.strip_exports("let x=1;\n"), "let x=1;")
+
+ def test_removes_every_export_line_not_just_the_last(self):
+ src = "export const a=1;\ncode();\nexport { a };"
+ self.assertEqual(generate.strip_exports(src), "code();")
+
+ def test_matches_the_js_side_strip_so_integrity_holds(self):
+ # test-colormath.mjs strips with the same rule: drop lines starting with
+ # 'export', then trim trailing whitespace. Keep the two in lockstep.
+ src = "x();\nexport { x };\n"
+ js_equivalent = "\n".join(
+ l for l in src.split("\n") if not l.startswith("export")
+ ).rstrip()
+ self.assertEqual(generate.strip_exports(src), js_equivalent)
+
+
+class ColormathInlining(unittest.TestCase):
+ def setUp(self):
+ self.cm_src = open(os.path.join(generate.HERE, "colormath.js")).read()
+
+ def test_colormath_export_is_a_single_line(self):
+ # The strip is line-based, so a multi-line `export { ... }` would leave the
+ # continuation lines behind as a dangling block (a real bug this caught).
+ export_lines = [l for l in self.cm_src.splitlines() if l.startswith("export")]
+ self.assertEqual(len(export_lines), 1, "colormath.js must have one export line")
+
+ def test_stripped_body_has_no_export_line_and_ends_cleanly(self):
+ # "export" can still appear inside a comment; what must be gone is any line
+ # that *starts* with export (and the dangling continuation lines a
+ # multi-line export would leave).
+ body = generate.strip_exports(self.cm_src)
+ for line in body.splitlines():
+ self.assertFalse(line.startswith("export"), f"export line survived: {line!r}")
+ self.assertTrue(body.endswith("}"), "body should end at the last function")
+
+
+class AssembledPage(unittest.TestCase):
+ PLACEHOLDERS = [
+ "COLORMATH_J", "SAMPLES_J", "PALETTE_J", "CATS_J",
+ "UIFACES_J", "UIMAP_J", "APPS_J", "BOLD_J", "MAP_J",
+ ]
+
+ def test_every_placeholder_is_substituted(self):
+ for token in self.PLACEHOLDERS:
+ self.assertNotIn(token, generate.HTML, f"{token} left unsubstituted")
+
+ def test_page_carries_the_colormath_body_verbatim(self):
+ # Python-side inline-integrity: the same guarantee the JS test asserts, but
+ # checked at the point the page is built rather than after a round-trip.
+ self.assertIn(generate.COLORMATH_BODY, generate.HTML)
+
+ def test_page_is_a_single_script_document(self):
+ self.assertEqual(generate.HTML.count("<script>"), 1)
+ self.assertEqual(generate.HTML.count("</script>"), 1)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/scripts/theme-studio/theme-coloring-guide.org b/scripts/theme-studio/theme-coloring-guide.org
new file mode 100644
index 00000000..170ad708
--- /dev/null
+++ b/scripts/theme-studio/theme-coloring-guide.org
@@ -0,0 +1,473 @@
+#+TITLE: Usual Color Theme Rules
+#+AUTHOR: Craig Jennings
+#+DATE: 2026-06-08
+#+STARTUP: showall
+
+* How to use this guide
+
+This guide has one idea under it: color by the role a thing plays for the
+reader, spend attention deliberately, and draw everything from one disciplined
+palette. Everything else is that idea applied.
+
+It runs general to specific:
+
+1. *Principles*: the seven laws that generate the rest.
+2. *Roles and the seed table*: the reader-roles the principles color, and the
+ single table that says how each role is treated. This is the executable core.
+3. *The tiers*: syntax, UI faces, and package faces are the same roles applied
+ to three sets of Emacs faces. Each tier's rules derive from the principles,
+ not apart from them.
+4. *Cross-tier practice*: weight, contrast, accessibility, and the checks that
+ apply everywhere.
+
+If you only read one thing, read the principles and the seed table. The tiers
+are worked examples.
+
+* Principles
+
+1. *Color by reader-role, not by source category.* A color means "these things
+ play the same role while reading." The parser's category is irrelevant; the
+ reader's intent is everything. The theme should make control flow,
+ definitions, literals, comments, and errors easy to scan without making every
+ token compete for attention.
+
+2. *One disciplined palette; relatedness lives inside a hue family.* Prefer six
+ to eight stable accents over one color per category, and reuse each for the
+ same role everywhere. Related roles share a hue and separate by lightness,
+ chroma, or weight rather than taking unrelated colors. The six to eight are
+ hue families, not swatches: each family carries one to three shades (a keyword
+ and its quieter builtin, a string and its muted docstring), so the palette
+ holds roughly fifteen to twenty swatches across few hues. The Shade budget
+ section counts them.
+
+3. *Spend salience deliberately.* Chroma, brightness, and bold all say "look
+ here"; muted and low-chroma say "supporting structure." Reserve the loudest
+ treatment for the few things that matter, and make the anchor (a definition,
+ the active element) louder than the echo (a use, the idle element).
+
+4. *Two channels: foreground is identity, background is state.* Foreground
+ carries what a thing is (its role). A background tint carries transient state:
+ selection, current line, search match, diff hunk. Do not recolor a
+ foreground to show state. Tint behind the text so the token keeps its
+ meaning while highlighted. A transient match chip may invert; persistent state
+ must only tint.
+
+5. *Tier the contrast, and judge it honestly.* Comfortable contrast for content,
+ low contrast for idle structure, high contrast for alerts. Avoid pure black or
+ white grounds. They cause halation (light text on a dark ground blooms at the
+ glyph edges and smears the letterforms, worst for astigmatic eyes) and general
+ eye strain. Low contrast does not mean low distinguishability. If contrast is
+ soft, keep enough lightness/chroma separation between roles. Pick and judge
+ colors in a perceptual space, OKLCH or CIELAB, not HSL. (OKLCH is the
+ cylindrical lightness/chroma/hue form of the OKLab perceptual color space,
+ [[https://bottosson.github.io/posts/oklab/][Ottosson 2020]]; CIELAB is the CIE 1976 Lab color space; HSL is
+ hue/saturation/lightness, whose "lightness" is not perceptual.) Judge on the
+ real display in the real room, because contrast and chroma are relative to the
+ ground and the ambient light.
+
+6. *Encode redundantly; never rely on color alone.* Anything that matters (errors,
+ diffs, matches, done-states) pairs its color with weight, underline,
+ or shape, so it survives color blindness and a poor display. Around 8% of men
+ have red-green color-vision deficiency; keep the palette distinguishable
+ without the color, and never let red-versus-green be the only signal.
+
+7. *Honor convention for the signal layer.* Red means error or deletion, green
+ means success or addition, amber means warning or modified, blue means
+ information or a link. Keep these consistent and, where you can, out of the
+ syntax accent pool, so a signal never reads as just another keyword.
+
+* Roles and the seed table
+
+The principles color a fixed set of reader-roles. Most are familiar from code,
+but three of them (heading ramp, transient state, and signal) appear once you
+look past syntax to UI and document faces. Every face in every tier classifies
+into one of these roles; seeding a tier is classifying its faces and applying the
+table.
+
+| Role | Palette family | Weight / shape | Channel |
+|-----------------------------------------------------+-------------------------------------+-------------------+---------------------|
+| Base / identity (default text, variables) | foreground | normal | fg |
+| Structure (punctuation, operators, delimiters) | muted foreground | normal | fg |
+| Control (keywords, preprocessor) | primary cool accent | bold, sparingly | fg |
+| Builtins | control hue, lower chroma/lightness | normal | fg |
+| Names: definitions | warm anchor accent | bold | fg |
+| Names: uses / calls | same hue, quieter | normal | fg |
+| Types / metadata / decorators | secondary accent | normal | fg |
+| Strings / docstrings | green family | docstrings italic | fg |
+| Escapes / regexps | brighter / teal green | normal | fg |
+| Numbers / constants | warm literal accent | normal | fg |
+| Comments | low-contrast lane | italic | fg |
+| Heading ramp | one hue, lightness descending | level 1 strongest | fg |
+| Transient state (region, current line, match, hunk) | quiet tint | none | bg |
+| Signal: error / deletion | red | + weight/shape | fg, or bg for hunks |
+| Signal: success / addition | green | none | fg / bg |
+| Signal: warning / modified | amber | none | fg / bg |
+| Signal: info / link | blue | underline | fg |
+
+This table is the guide made executable. The three tiers below are it, projected
+onto three face inventories.
+
+** Shade budget
+
+The sharing rules fix how many shades each hue family needs and what each is for.
+This is the swatch count a palette has to provide, and what =dupre= is built to:
+
+- *Neutrals (~5):* background, dim background, default foreground, muted
+ foreground (punctuation and operators), comment.
+- *Cool accent, blue (2):* keyword, and builtin (the same hue at lower
+ chroma/lightness).
+- *Warm anchor, gold (2):* definition (the strong anchor), and call (quieter,
+ same hue).
+- *Secondary accent, violet (1):* types and decorators.
+- *Green family (3):* string, docstring (muted), escape (brighter).
+- *Teal (1):* regexp.
+- *Warm literal, terracotta (1):* numbers and constants.
+- *Signal (4):* error red, warning amber, success green, info/link blue, kept
+ out of the syntax accents where the palette can afford it (principle 7).
+- *Heading ramp:* one hue across three or four lightness steps; document tiers
+ reuse an accent rather than spend a new hue.
+
+That is roughly fifteen swatches across seven or eight hues: few colors, each
+doing related work by shade. The exact hex values live in the seeding-engine
+spec; this section fixes the counts and the uses.
+
+* Syntax tier
+
+The syntax tier colors font-lock / tree-sitter categories. These are the roles
+in the table, grouped the way a reader meets them.
+
+** Usual grouping
+
+Use these as starting groups:
+
+- *Base text:* foreground/default text, variable/use.
+- *Structure:* punctuation, operators, comment delimiters.
+- *Control / language syntax:* keywords, preprocessor forms, builtins.
+- *Names / definitions:* function definitions, function calls, properties/fields.
+- *Types / metadata:* types/classes, decorators, sometimes constants.
+- *Literals:* strings, docstrings, regexps, escapes, numbers.
+- *Comments:* comments and comment delimiters.
+
+** Sharing rules
+
+- Variables should usually look like normal text. If every variable is colored,
+ the buffer gets noisy quickly.
+- Definitions should stand out more than uses. A function definition can be
+ brighter or bold while a function call stays in the same hue family but
+ quieter.
+- Function calls and definitions can share hue. Use weight or brightness to mark
+ the definition as the stronger anchor.
+- Types/classes and decorators often share a color because both describe shape,
+ annotation, or metadata rather than ordinary runtime values.
+- Strings, docstrings, regexps, and escapes should be related but not identical.
+ Example: strings green, docstrings muted green, escapes brighter green, regexps
+ teal.
+- Comments get their own low-contrast lane. Comment delimiters can be dimmer
+ than comment text.
+- Punctuation and operators should be quiet. Usually use a muted foreground,
+ not a strong accent.
+- Constants and numbers can share a warm literal color. If the palette is small,
+ constants can also share with types.
+- Preprocessor forms can share with keywords unless they need to feel more
+ infrastructural; then make them slightly muted.
+- Builtins should sit between keywords and normal identifiers: they should be
+ more noticeable than a user variable, but less commanding than syntax/control
+ keywords. In practice, use the keyword hue at lower chroma/lightness, or use
+ foreground with a subtle accent.
+
+** What "builtins between keywords and identifiers" means
+
+Keywords are language structure: =if=, =defun=, =class=, =return=, =let=.
+They guide control flow and code shape, so they can carry a strong syntax color.
+
+Normal identifiers are user-authored names: local variables, arguments, ordinary
+bindings. They are everywhere, so they should usually stay close to the default
+foreground.
+
+Builtins are language-provided identifiers: =print=, =len=, =map=,
+=Array.from=, =Promise=, =self=, =this=, standard macros, or core functions.
+They are not syntax, but they are more meaningful than a random local variable.
+"Between" means:
+
+- If keywords are blue and variables are foreground, builtins might be muted
+ blue-grey.
+- If keywords are bold, builtins usually are not bold.
+- If variables are plain foreground, builtins can be foreground plus a slight
+ hue shift.
+- Builtins should be recognizable when scanning, but they should not dominate a
+ line the way control-flow keywords do.
+
+** Suggested compact mapping
+
+This is the canonical syntax mapping. It is what the bundled =dupre= theme should
+seed to (note: dupre historically diverged, builtins on blue rather than
+blue-grey and function definitions on silver rather than gold, and is being
+reseeded to match this mapping).
+
+- *Foreground:* default text, variables.
+- *Muted foreground:* punctuation, operators, comment delimiters.
+- *Comment:* comments, disabled text.
+- *Blue:* keywords, preprocessor.
+- *Blue-grey:* builtins.
+- *Gold:* function definitions and calls, with definitions stronger.
+- *Violet:* types, classes, decorators.
+- *Green:* strings, docstrings.
+- *Teal / brighter green:* escapes, regexps.
+- *Terracotta / warm accent:* numbers, constants, special literals.
+
+* UI faces tier
+
+UI faces carry almost no identity: they are the state, structure, and signal
+layers of the table. So principles 4 (channels), 3 (active louder than idle), 7
+(convention), 5 (tiering), and 6 (redundancy) do nearly all the work, and they
+draw their colors from the same palette (principle 2), never new ones.
+
+- *State is a background tint* (principle 4): =region=, =hl-line=, =highlight=,
+ =show-paren-match= tint behind syntax-colored text and set no foreground.
+ =isearch= may invert to a chip because a match marker is transient; persistent
+ state never does.
+- *Active louder than idle* (principle 3): =mode-line= brighter than
+ =mode-line-inactive=; =line-number-current-line= accented against a dim
+ =line-number=; =isearch= (current match) louder than =lazy-highlight= (other
+ matches). Make the active and inactive mode-line clearly different: it is the
+ highest-traffic element and the cue for which window has focus.
+- *Signals by convention* (principle 7): =error= red, =warning= amber, =success=
+ green, =isearch-fail= and =show-paren-mismatch= red. These are the semantic
+ layer, drawn from the palette's warm/cool accents.
+- *Chrome recedes* (principle 5): =fringe= near the background,
+ =vertical-border= barely there, idle line numbers dim. Interactive and alert
+ faces get real contrast; structural chrome does not compete.
+- *Redundant encoding* (principle 6): =link= is blue and underlined;
+ =show-paren-mismatch= uses a background plus shape, not color alone.
+
+The current dupre UI map already follows this, which is the point: it is a
+seedable default, not a per-face tuning job.
+
+* Package faces tier: org-mode
+
+A package has many faces but few roles. org-mode (~88 faces) collapses into about
+six, each driven by a principle. The long tail of other packages seeds to the
+default foreground until any one earns the same treatment; org is worth doing
+because it is a daily buffer.
+
+- *Heading ramp*: =org-level-1= through =org-level-8=. The textbook case for
+ principles 2 and 3: one hue family, level 1 the strongest (bright or bold),
+ each deeper level quieter. A lightness ramp in a single hue. Highest-value seed
+ in org, since headings dominate the view.
+- *Markup that recedes*: =org-meta-line=, =org-drawer=, =org-special-keyword=,
+ =org-property-value=, =org-block-begin-line= / =org-block-end-line=,
+ =org-ellipsis=, =org-tag=, =org-date=, =org-document-info-keyword=. These are
+ org's punctuation and comments: the muted lane (principle 3 recede).
+- *Code-like content reuses the syntax palette*: =org-block=, =org-code=,
+ =org-verbatim=, =org-inline-src-block=. Principle 1 at its clearest: a source
+ block is code, so it looks like code (the literal lane, the same accents as the
+ syntax tier).
+- *State by convention*: =org-todo= and imminent deadlines read warm/red
+ (attention); =org-upcoming-deadline= amber; =org-scheduled= and =org-done=
+ recede to muted/cool, with =org-done= taking strikethrough or dim-italic so it
+ is not color-alone (principles 7, 3, 6). The agenda's deadline/scheduled/done
+ faces map straight onto the signal colors.
+- *Links*: =org-link= is the link role: the same blue plus underline as the UI
+ link (principles 2, 6, 7).
+- *Emphasis and quotes*: =org-quote=, =org-verse=, and doc-like text take
+ italic, the documentation lane (weight and slant below), kept readable.
+
+* Weight and slant
+
+- Use bold sparingly. Good targets: keywords, function definitions, TODO/error
+ states, important headings, or active/current UI elements.
+- Avoid bolding every function call. It makes code visually lumpy and reduces
+ the value of bold for definitions and warnings.
+- Italic works well for comments, docstrings, documentation-like text, and
+ sometimes parameters or decorators. Use it only if your chosen font has a
+ readable italic.
+- Avoid italic for core control-flow keywords unless the theme is deliberately
+ stylized. Italic keywords can look decorative rather than structural.
+- Keep bold and high chroma separate most of the time. A token that is both
+ bright and bold will dominate the buffer.
+
+* Contrast, chroma, and palette discipline
+
+- Keep default foreground/background comfortable first. Everything else depends
+ on the ground.
+- Use high contrast for ordinary text and important UI states; use lower contrast
+ for comments, delimiters, and inactive UI.
+- Avoid making comments so dim that they disappear. Comments are secondary, not
+ garbage.
+- Use chroma to express semantic salience. More chroma means "look here"; lower
+ chroma means "supporting structure."
+- Keep related roles in the same hue family and separate them by lightness,
+ chroma, or weight.
+- Reserve the brightest accent for one or two roles. Common choices: function
+ definitions, strings, or keywords.
+- Avoid assigning adjacent categories highly saturated unrelated hues. It makes
+ code look like a diagnostic heatmap.
+- Use warm/cool balance deliberately. Warm colors advance visually; cool colors
+ recede. Put warm colors on rare, meaningful tokens if you want them noticed.
+- Reuse hues across language families. A function definition should feel like a
+ function definition in Lisp, Python, JavaScript, and shell.
+
+* Signal colors and convention
+
+Principle 7 leans on conventions a reader already holds, and those conventions
+are well-grounded. Not in what colors make us feel: the affective color-emotion
+research is weak (brightness and saturation carry most of the effect, not hue),
+culturally variable, and aimed at mood and branding rather than glyphs on a
+ground. The grounding is in learned signal standards and in how the eye is
+drawn. Red-stop and green-go trace to railway and traffic signaling and are
+codified in the safety-color standards (ISO 3864, ANSI Z535); the pull of a
+saturated color in a quiet field is pre-attentive (Treisman and Gelade 1980;
+Ware, /Information Visualization/).
+
+| Signal | Conventional meaning | Where it shows | Basis |
+|------------+-------------------------------+---------------------------------------------------+------------------------------------|
+| Red | error, deletion, danger, stop | error, diff-removed, isearch-fail, paren-mismatch | traffic/rail stop; ISO 3864 danger |
+| Amber | warning, caution, modified | warning, modified version-control state | ISO 3864 caution |
+| Green | success, addition, ok, go | success, diff-added | traffic go; ISO 3864 safe |
+| Blue | information, link, navigable | link, info messages | web-link convention; cool recedes |
+| Muted grey | disabled, inactive, secondary | comments, inactive mode-line, dimmed text | low salience by design |
+
+Keep these consistent across the syntax, UI, and package tiers, and out of the
+syntax accent pool where the palette can afford it, so a signal never reads as
+just another token. This is a convention table, not an emotion table: it records
+what a color has come to mean by use, which is what a reader actually decodes.
+
+* Accessibility and color vision
+
+- Run the palette through a color-blindness simulator before trusting it. Check
+ deuteranopia and protanopia (the common green-weak and red-weak deficiencies),
+ not just the urgent states.
+- Blue and yellow stay distinct for nearly everyone; red and green are the risky
+ pair. When two roles must be told apart at a glance, prefer a blue/yellow or a
+ light/dark separation over a red/green one.
+- For anything that must not be missed (diffs, errors, search hits, region),
+ pair the color with weight, underline, or shape, so the meaning survives
+ without it (principle 6).
+
+* Practical checks
+
+- Open real code in at least three languages before judging the palette.
+- Squint at a buffer (or blur it): definitions, control flow, literals, and
+ comments should form distinct layers. If they don't, the palette is too flat or
+ too noisy.
+- Check long files, not just curated snippets. Noise shows up in dense code.
+- Check inactive windows, search highlights, region, diff, completions, and
+ diagnostics; syntax colors are only one part of a usable theme.
+- If everything feels important, reduce chroma, remove bold, or merge colors.
+- If nothing is scannable, increase separation between the main groups before
+ adding more hues.
+
+* Emacs specifics
+
+The rules above are general. In Emacs they land on concrete faces and a few
+platform realities.
+
+** Theme the foundation faces first, inherit the rest
+
+- Map the syntax roles onto Emacs's canonical font-lock faces:
+ =font-lock-keyword-face=, =font-lock-function-name-face=,
+ =font-lock-variable-name-face=, =font-lock-type-face=,
+ =font-lock-constant-face=, =font-lock-builtin-face=, =font-lock-string-face=,
+ =font-lock-doc-face=, =font-lock-comment-face=,
+ =font-lock-comment-delimiter-face=, =font-lock-preprocessor-face=, and
+ =font-lock-warning-face=.
+- Style those base faces well and let package faces inherit them. Most packages
+ declare faces that already =:inherit= a sensible base, so a good foundation
+ themes the long tail for free. Theme the base; do not chase every package.
+
+** Tree-sitter gives the finer faces this guide wants
+
+- Emacs 29's tree-sitter font-lock added the distinctions this guide asks for as
+ real faces. =font-lock-function-call-face= versus =font-lock-function-name-face=
+ is exactly "definitions stronger than calls"; there are also
+ =font-lock-variable-use-face=, =font-lock-property-use-face=,
+ =font-lock-property-name-face=, =font-lock-operator-face=,
+ =font-lock-bracket-face=, =font-lock-delimiter-face=, =font-lock-number-face=,
+ =font-lock-escape-face=, and =font-lock-regexp-face=.
+- This is where "escapes brighter than strings, regexps teal" and "definitions
+ bolder than calls" become directly expressible. Note =treesit-font-lock-level=
+ controls how many of these levels actually fontify (default 3); some faces only
+ apply at higher levels.
+
+** Never leave the interface faces at their defaults
+
+- A usable theme is more than syntax. Always style =region=, =hl-line=,
+ =highlight=, =isearch= / =lazy-highlight= / =isearch-fail=,
+ =show-paren-match= / =show-paren-mismatch=, =cursor=, =mode-line= /
+ =mode-line-inactive=, =fringe=, =vertical-border=, =line-number= /
+ =line-number-current-line=, =minibuffer-prompt=, =link=, and =error= /
+ =warning= / =success=.
+
+** Handle terminal Emacs
+
+- The GUI is truecolor; =emacs -nw= may have only 256, 16, or 8 colors. Either
+ write display-class specs (a =((class color) (min-colors 256) ...)= clause with
+ a =(t ...)= fallback) or decide the theme is GUI-first and say so.
+- Either way, define the 16 ANSI colors (ANSI is the terminal's standard set)
+ coherently with the palette: terminals, =ansi-color= in shells, and
+ compilation buffers all draw from them.
+
+** Build-and-audit tooling
+
+- =describe-face= (or =C-u C-x ==) at point tells you which face you are actually
+ looking at. It is the fastest way to find what to change.
+- =M-x list-faces-display= shows every face in one buffer for a whole-theme audit.
+- Test the daily buffers, not just code samples: org, magit (its diffs exercise
+ the semantic colors hard), dired, the completion popup (corfu / vertico /
+ company), and flymake/flycheck diagnostics.
+
+* Using this with theme-studio
+
+This guide is the design philosophy behind the theme-studio in this directory.
+The tool is where the rules get applied, by eye and increasingly by metric.
+
+- *Worked example:* the bundled =dupre= theme is built from a palette of these
+ role-colors (blue, gold, regal/violet, sage/green, terracotta, plus neutral
+ silvers). Its role-to-color bindings live in =dupre.json= under =assignments=;
+ read it next to the seed table and the compact mapping above. (dupre is being
+ reseeded to match the compact mapping exactly; see the Syntax tier note.)
+- *Checking contrast and palette discipline:* the tool's readouts verify by
+ number what this guide states as principle. Today that is the AA/AAA contrast
+ mask (the 4.5:1 and 7:1 tiers from WCAG, the Web Content Accessibility
+ Guidelines, [[https://www.w3.org/TR/WCAG21/][w3.org/TR/WCAG21]]). The planned OKLCH, APCA (Accessible Perceptual
+ Contrast Algorithm, [[https://github.com/Myndex/apca-w3][Myndex]]), and pairwise ΔE (perceptual color-difference)
+ diagnostics make "use chroma to express salience" and "low contrast does not
+ mean low distinguishability" checkable instead of eyeballed. See
+ [[file:../../docs/design/theme-studio-perceptual-color-metrics-spec.org][docs/design/theme-studio-perceptual-color-metrics-spec.org]].
+- *Seeding:* the seed table is the contract the tool seeds from: syntax, UI, and
+ org tiers each start from guide-correct defaults, leaving you to retune hues
+ rather than build a theme from blank.
+- *Shipping a palette:* =build-theme.el= converts a =theme.json= exported from
+ the tool into a loadable Emacs deftheme, so a palette designed under these
+ rules becomes a real theme.
+
+* Sources and further reading
+
+Contrast, color space, and accessibility:
+
+- WCAG 2.1, especially SC 1.4.3 Contrast (Minimum) and SC 1.4.1 Use of Color:
+ [[https://www.w3.org/TR/WCAG21/][w3.org/TR/WCAG21]]. The baseline contrast model and the canonical "never rely
+ on color alone" rule.
+- WCAG 3.0 Working Draft: [[https://www.w3.org/TR/wcag-3.0/][w3.org/TR/wcag-3.0]]. Still a draft and years from
+ final; its contrast method is undetermined, so treat it as direction, not law.
+- APCA (Accessible Perceptual Contrast Algorithm), Myndex:
+ [[https://github.com/Myndex/apca-w3][github.com/Myndex/apca-w3]] and [[https://apcacontrast.com/][apcacontrast.com]]. The polarity-aware perceptual
+ contrast model, more trustworthy than WCAG 2 in the low-contrast band.
+- Björn Ottosson, "A perceptual color space for image processing" (OKLab, 2020):
+ [[https://bottosson.github.io/posts/oklab/][bottosson.github.io/posts/oklab]]. Why OKLCH, with the conversion math.
+- Sharma, Wu & Dalal, "The CIEDE2000 Color-Difference Formula" (2005). The
+ perceptual color-difference standard that ΔE-OK approximates more cheaply.
+
+Emacs faces and theming:
+
+- Elisp manual: [[info:elisp#Faces][(elisp) Faces]], [[info:elisp#Faces for Font Lock][(elisp) Faces for Font Lock]], and
+ [[info:elisp#Display Feature Testing][(elisp) Display Feature Testing]] (the display-class / =min-colors= specs for
+ terminal fallback).
+- Emacs manual: [[info:emacs#Standard Faces][(emacs) Standard Faces]] and [[info:emacs#Custom Themes][(emacs) Custom Themes]].
+- Tree-sitter font-lock faces and =treesit-font-lock-level= (Emacs 29+): the
+ Elisp manual's font-lock sections, and =M-x describe-variable treesit-font-lock-level=.
+- Protesilaos Stavrou, Modus Themes: [[https://protesilaos.com/emacs/modus-themes][protesilaos.com/emacs/modus-themes]]. A
+ rigorously accessible Emacs theme with documented contrast rationale, and the
+ high-contrast counterpoint to the low-contrast school this guide leans toward.
+- base16, Chris Kempson: [[https://github.com/chriskempson/base16][github.com/chriskempson/base16]]. A 16-color scheme
+ convention, useful for the terminal/ANSI palette mapping above.
diff --git a/scripts/theme-studio/theme-studio.html b/scripts/theme-studio/theme-studio.html
index 37be4128..7d3e4fe5 100644
--- a/scripts/theme-studio/theme-studio.html
+++ b/scripts/theme-studio/theme-studio.html
@@ -14,6 +14,9 @@
.sbtn{width:26px;height:24px;border:1px solid #3a3a3a;border-radius:3px;background:#eaeaea;color:#111;cursor:pointer;font-size:15px;margin-right:2px;padding:0}
.sbtn.on{background:#0d0b0a;color:#cdced1;border-color:#8a9496}
.pals{display:flex;gap:8px;flex-wrap:wrap}
+ .palwarn{display:none;margin-top:8px;font:10pt monospace;color:#cb6b4d}
+ .palwarn .pwh{font-weight:bold;margin-bottom:2px}
+ .palwarn .pwl{opacity:.92}
.pchip{width:128px;height:58px;border-radius:6px;border:1px solid #555;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:grab}
.pchip.drag{opacity:.4} .pchip.sel{outline:3px solid #e8bd30;outline-offset:2px} .pchip.over{outline:2px dashed #e8bd30;outline-offset:1px} .pchip input.nm{background:transparent;border:none;text-align:center;font:bold 10pt monospace;width:108px;outline:none}
.pchip .mv{position:absolute;bottom:-1px;background:none;border:none;cursor:pointer;font-size:22px;line-height:1;font-weight:bold;opacity:.5;padding:0 5px} .pchip .mv:hover{opacity:1} .pchip .mv.l{left:0} .pchip .mv.r{right:0}
@@ -31,10 +34,23 @@
.pmode{margin:2px 2px 8px;font:10pt monospace;color:#b4b1a2;display:flex;gap:6px;align-items:center}
.pmode button{background:#252321;color:#cdced1;border:1px solid #3a3a3a;border-radius:4px;padding:2px 9px;font:10pt monospace;cursor:pointer}
.pmode button.on{background:#e8bd30;color:#000;border-color:#e8bd30}
+ .pmodel{margin:8px 2px 4px;font:10pt monospace;color:#b4b1a2;display:flex;gap:6px;align-items:center}
+ .pmodel button{background:#252321;color:#cdced1;border:1px solid #3a3a3a;border-radius:4px;padding:2px 9px;font:10pt monospace;cursor:pointer}
+ .pmodel button.on{background:#67809c;color:#000;border-color:#67809c}
+ .oklchctl{display:none;margin:0 2px 6px;font:10pt monospace;color:#9aa3ad}
+ .oklchctl.show{display:block}
+ .oklchctl .ocrow{display:flex;align-items:center;gap:6px;margin:3px 0}
+ .oklchctl .ocrow label{width:12px;color:#cdced1}
+ .oklchctl .ocrow input[type=range]{flex:1}
+ .oklchctl .ocrow input[type=number]{width:62px;background:#252321;color:#cdced1;border:1px solid #3a3a3a;border-radius:3px;font:10pt monospace;padding:1px 3px}
+ .oklchctl .pclamp{display:none;color:#cb6b4d;margin-top:3px}
+ .oklchctl .pclamp.show{display:block}
.svcur{position:absolute;width:16px;height:16px;border:2px solid #fff;border-radius:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #0008;pointer-events:none}
.hue{position:relative;width:34px;height:320px;border-radius:4px;cursor:ns-resize;background:linear-gradient(to bottom,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00)}
.huecur{position:absolute;left:-2px;right:-2px;height:4px;background:#fff;border:1px solid #0008;transform:translateY(-50%);pointer-events:none}
- .pinfo{display:flex;justify-content:space-between;margin:10px 2px 8px;font:12pt monospace;color:#cdced1}
+ .pinfo{display:flex;justify-content:space-between;margin:10px 2px 4px;font:12pt monospace;color:#cdced1}
+ .pinfo2{display:flex;justify-content:space-between;margin:0 2px 9px;font:10pt monospace;color:#9aa3ad}
+ .pinfo2 span{cursor:default}
.pkchips{display:flex;flex-wrap:wrap;gap:5px} .pkchips .pc{width:28px;height:28px;border-radius:3px;border:1px solid #555;cursor:pointer}
.palctl button,.filebar button,.fbtn{background:#252321;color:#e8bd30;border:1px solid #3a3a3a;border-radius:4px;padding:6px 12px;font:10pt monospace;cursor:pointer}
#palmsg{font:10pt monospace;opacity:0;transition:opacity .35s;margin-left:6px}
@@ -65,6 +81,7 @@
<section class="pane grow">
<h1>palette</h1>
<div class="pals" id="pals"></div>
+ <div class="palwarn" id="palwarn"></div>
<div class="palctl">
<div id="swatch" class="swatch" title="open color picker"></div>
<input type="text" id="newhexstr" placeholder="#rrggbb" value="#888888" oninput="syncHex()" onkeydown="if(event.key==='Enter')applyEdit()" style="width:110px">
@@ -77,7 +94,15 @@
<div id="sv" class="sv"><canvas id="svmask" class="svmask"></canvas><div id="svcur" class="svcur"></div></div>
<div id="hue" class="hue"><div id="huecur" class="huecur"></div></div>
</div>
+ <div class="pmodel">edit <button data-pm="hsv" class="on">HSV</button><button data-pm="oklch">OKLCH</button></div>
+ <div class="oklchctl" id="oklchctl">
+ <div class="ocrow"><label title="perceptual lightness">L</label><input type="range" id="okL" min="0" max="1" step="0.001"><input type="number" id="okLn" min="0" max="1" step="0.001"></div>
+ <div class="ocrow"><label title="chroma (colorfulness)">C</label><input type="range" id="okC" min="0" max="0.4" step="0.001"><input type="number" id="okCn" min="0" max="0.4" step="0.001"></div>
+ <div class="ocrow"><label title="hue angle, degrees">H</label><input type="range" id="okH" min="0" max="360" step="1"><input type="number" id="okHn" min="0" max="360" step="1"></div>
+ <div class="pclamp" id="pkclamp"></div>
+ </div>
<div class="pinfo"><span id="pkhex">#888888</span><span id="pkcon"></span></div>
+ <div class="pinfo2"><span id="pkoklch" title="OKLCH perceptual coordinates: lightness L (0..1), chroma C, hue H in degrees"></span><span id="pkapca"></span></div>
<div class="pmode">limit <button data-m="any" class="on">any</button><button data-m="aa">AA+</button><button data-m="aaa">AAA</button></div>
<div id="pkchips" class="pkchips"></div>
</div>
@@ -135,6 +160,7 @@
<script>
const SAMPLES={"Elisp": [[["cmd", ";;"], ["cm", " cache.el"]], [["punc", "("], ["kw", "require"], ["p", " "], ["con", "'cl-lib"], ["punc", ")"]], [], [["punc", "("], ["kw", "defvar"], ["p", " "], ["var", "cache--tbl"], ["p", " "], ["punc", "("], ["fnc", "make-hash-table"], ["p", " "], ["con", ":test"], ["p", " "], ["con", "'equal"], ["punc", "))"]], [["p", " "], ["doc", "\"Memo table.\")"]], [], [["punc", "("], ["kw", "defun"], ["p", " "], ["fnd", "cache-get"], ["p", " "], ["punc", "("], ["var", "key"], ["punc", ")"]], [["p", " "], ["doc", "\"Return cached value for KEY.\""]], [["p", " "], ["punc", "("], ["kw", "or"], ["p", " "], ["punc", "("], ["bi", "gethash"], ["p", " "], ["var", "key"], ["p", " "], ["var", "cache--tbl"], ["punc", ")"]], [["p", " "], ["punc", "("], ["kw", "let"], ["p", " "], ["punc", "(("], ["var", "v"], ["p", " "], ["punc", "("], ["fnc", "compute"], ["p", " "], ["var", "key"], ["p", " "], ["num", "42"], ["punc", "))) "]], [["p", " "], ["punc", "("], ["fnc", "puthash"], ["p", " "], ["var", "key"], ["p", " "], ["var", "v"], ["p", " "], ["var", "cache--tbl"], ["punc", ") "], ["var", "v"], ["punc", "))))"]], [], [["punc", "("], ["kw", "defun"], ["p", " "], ["fnd", "cache-clear"], ["p", " "], ["punc", "()"]], [["p", " "], ["doc", "\"Empty the memo table.\""]], [["p", " "], ["punc", "("], ["kw", "interactive"], ["punc", ")"]], [["p", " "], ["punc", "("], ["fnc", "clrhash"], ["p", " "], ["var", "cache--tbl"], ["punc", ")"]], [["p", " "], ["punc", "("], ["fnc", "message"], ["p", " "], ["str", "\"cleared"], ["esc", "\\n"], ["str", "\""], ["punc", "))"]], [], [["punc", "("], ["kw", "defun"], ["p", " "], ["fnd", "cache-keys"], ["p", " "], ["punc", "()"]], [["p", " "], ["doc", "\"Return all keys.\""]], [["p", " "], ["punc", "("], ["kw", "let"], ["p", " "], ["punc", "(("], ["var", "acc"], ["p", " "], ["con", "nil"], ["punc", "))"]], [["p", " "], ["punc", "("], ["fnc", "maphash"], ["p", " "], ["punc", "("], ["kw", "lambda"], ["p", " "], ["punc", "("], ["var", "k"], ["p", " "], ["var", "_v"], ["punc", ")"], ["p", " "], ["punc", "("], ["fnc", "push"], ["p", " "], ["var", "k"], ["p", " "], ["var", "acc"], ["punc", "))"]], [["p", " "], ["var", "cache--tbl"], ["punc", ")"], ["p", " "], ["var", "acc"], ["punc", "))"]], [], [["punc", "("], ["kw", "provide"], ["p", " "], ["con", "'cache"], ["punc", ")"]]], "Go": [[["cmd", "//"], ["cm", " queue.go"]], [["kw", "package"], ["p", " "], ["var", "main"]], [], [["kw", "import"], ["p", " "], ["str", "\"fmt\""]], [], [["kw", "const"], ["p", " "], ["con", "MaxItems"], ["p", " "], ["op", "="], ["p", " "], ["num", "100"]], [], [["kw", "type"], ["p", " "], ["ty", "Order"], ["p", " "], ["kw", "struct"], ["p", " "], ["punc", "{"]], [["p", " "], ["prop", "ID"], ["p", " "], ["ty", "int"]], [["p", " "], ["prop", "Name"], ["p", " "], ["ty", "string"]], [["punc", "}"]], [], [["kw", "func"], ["p", " "], ["punc", "("], ["var", "q"], ["p", " "], ["op", "*"], ["ty", "Queue"], ["punc", ")"], ["p", " "], ["fnd", "Push"], ["punc", "("], ["var", "o"], ["p", " "], ["op", "*"], ["ty", "Order"], ["punc", ")"], ["p", " "], ["ty", "error"], ["p", " "], ["punc", "{"]], [["p", " "], ["cmd", "//"], ["cm", " reject nil"]], [["p", " "], ["kw", "if"], ["p", " "], ["var", "o"], ["p", " "], ["op", "=="], ["p", " "], ["con", "nil"], ["p", " "], ["punc", "{"]], [["p", " "], ["kw", "return"], ["p", " "], ["fnc", "fmt.Errorf"], ["punc", "("], ["str", "\"nil"], ["esc", "\\n"], ["str", "\""], ["punc", ")"]], [["p", " "], ["punc", "}"]], [["p", " "], ["var", "q"], ["op", "."], ["prop", "items"], ["p", " "], ["op", "="], ["p", " "], ["bi", "append"], ["punc", "("], ["var", "q"], ["op", "."], ["prop", "items"], ["punc", ","], ["p", " "], ["var", "o"], ["punc", ")"]], [["p", " "], ["kw", "return"], ["p", " "], ["con", "nil"]], [["punc", "}"]], [], [["kw", "func"], ["p", " "], ["fnd", "main"], ["punc", "()"], ["p", " "], ["punc", "{"]], [["p", " "], ["fnc", "fmt.Println"], ["punc", "("], ["op", "&"], ["ty", "Queue"], ["punc", "{}"], ["punc", ")"]], [["punc", "}"]]], "Python": [[["cmd", "#"], ["cm", " theme.py"]], [["kw", "from"], ["p", " "], ["var", "dataclasses"], ["p", " "], ["kw", "import"], ["p", " "], ["var", "dataclass"], ["punc", ","], ["p", " "], ["var", "field"]], [], [["con", "DEFAULT_PORT"], ["op", ":"], ["p", " "], ["ty", "int"], ["p", " "], ["op", "="], ["p", " "], ["num", "8080"]], [["con", "HEX"], ["p", " "], ["op", "="], ["p", " "], ["var", "re"], ["op", "."], ["fnc", "compile"], ["punc", "("], ["re", "r\"#[0-9a-f]{6}\""], ["punc", ")"]], [], [["dec", "@dataclass"]], [["kw", "class"], ["p", " "], ["ty", "Theme"], ["op", ":"]], [["p", " "], ["doc", "\"\"\"A color theme.\"\"\""]], [["p", " "], ["prop", "name"], ["op", ":"], ["p", " "], ["ty", "str"], ["p", " "], ["op", "="], ["p", " "], ["str", "\"dupre\""]], [["p", " "], ["prop", "colors"], ["op", ":"], ["p", " "], ["ty", "dict"], ["p", " "], ["op", "="], ["p", " "], ["fnc", "field"], ["punc", "("], ["prop", "default_factory"], ["op", "="], ["ty", "dict"], ["punc", ")"]], [], [["p", " "], ["kw", "def"], ["p", " "], ["fnd", "resolve"], ["punc", "("], ["var", "self"], ["punc", ","], ["p", " "], ["var", "key"], ["op", ":"], ["p", " "], ["ty", "str"], ["punc", ")"], ["p", " "], ["op", "->"], ["p", " "], ["ty", "str"], ["p", " "], ["op", "|"], ["p", " "], ["con", "None"], ["op", ":"]], [["p", " "], ["cmd", "#"], ["cm", " fallback to none"]], [["p", " "], ["var", "v"], ["p", " "], ["op", "="], ["p", " "], ["var", "self"], ["op", "."], ["prop", "colors"], ["op", "."], ["fnc", "get"], ["punc", "("], ["var", "key"], ["punc", ","], ["p", " "], ["str", "\""], ["esc", "\\t"], ["str", "none\""], ["punc", ")"]], [["p", " "], ["kw", "if"], ["p", " "], ["bi", "len"], ["punc", "("], ["var", "v"], ["punc", ")"], ["p", " "], ["op", "=="], ["p", " "], ["num", "0"], ["op", ":"], ["p", " "], ["kw", "return"], ["p", " "], ["con", "None"]], [["p", " "], ["kw", "return"], ["p", " "], ["var", "v"]], [], [["p", " "], ["dec", "@property"]], [["p", " "], ["kw", "def"], ["p", " "], ["fnd", "size"], ["punc", "("], ["var", "self"], ["punc", ")"], ["p", " "], ["op", "->"], ["p", " "], ["ty", "int"], ["op", ":"]], [["p", " "], ["kw", "return"], ["p", " "], ["bi", "len"], ["punc", "("], ["var", "self"], ["op", "."], ["prop", "colors"], ["punc", ")"]], [], [["var", "theme"], ["p", " "], ["op", "="], ["p", " "], ["ty", "Theme"], ["punc", "("], ["str", "\"dupre\""], ["punc", ")"]], [["fnc", "print"], ["punc", "("], ["var", "theme"], ["op", "."], ["fnc", "resolve"], ["punc", "("], ["str", "\"bg\""], ["punc", "))"]]], "TypeScript": [[["cmd", "//"], ["cm", " orders.ts"]], [["kw", "import"], ["p", " "], ["punc", "{"], ["p", " "], ["ty", "Order"], ["p", " "], ["punc", "}"], ["p", " "], ["kw", "from"], ["p", " "], ["str", "\"./types\""]], [], [["kw", "export"], ["p", " "], ["kw", "interface"], ["p", " "], ["ty", "Queue"], ["p", " "], ["punc", "{"]], [["p", " "], ["prop", "max"], ["op", ":"], ["p", " "], ["ty", "number"], ["punc", ";"]], [["p", " "], ["prop", "items"], ["op", ":"], ["p", " "], ["ty", "Order"], ["punc", "[];"]], [["punc", "}"]], [], [["dec", "@Injectable"], ["punc", "()"]], [["kw", "export"], ["p", " "], ["kw", "class"], ["p", " "], ["ty", "OrderQueue"], ["p", " "], ["kw", "implements"], ["p", " "], ["ty", "Queue"], ["p", " "], ["punc", "{"]], [["p", " "], ["kw", "private"], ["p", " "], ["prop", "re"], ["p", " "], ["op", "="], ["p", " "], ["re", "/^#[0-9a-f]{6}$/i"], ["punc", ";"]], [], [["p", " "], ["fnd", "push"], ["punc", "("], ["var", "o"], ["op", ":"], ["p", " "], ["ty", "Order"], ["punc", ")"], ["op", ":"], ["p", " "], ["ty", "boolean"], ["p", " "], ["punc", "{"]], [["p", " "], ["kw", "if"], ["p", " "], ["punc", "("], ["var", "o"], ["p", " "], ["op", "==="], ["p", " "], ["con", "null"], ["punc", ")"], ["p", " "], ["kw", "return"], ["p", " "], ["con", "false"], ["punc", ";"]], [["p", " "], ["var", "console"], ["op", "."], ["fnc", "log"], ["punc", "("], ["str", "`id "], ["punc", "${"], ["var", "o"], ["op", "."], ["prop", "id"], ["punc", "}"], ["esc", "\\n"], ["str", "`"], ["punc", ");"]], [["p", " "], ["kw", "return"], ["p", " "], ["con", "true"], ["punc", ";"]], [["p", " "], ["punc", "}"]], [["punc", "}"]], [], [["kw", "const"], ["p", " "], ["con", "LIMIT"], ["op", ":"], ["p", " "], ["ty", "number"], ["p", " "], ["op", "="], ["p", " "], ["num", "50"], ["punc", ";"]], [["kw", "const"], ["p", " "], ["var", "q"], ["p", " "], ["op", "="], ["p", " "], ["kw", "new"], ["p", " "], ["ty", "OrderQueue"], ["punc", "()"], ["punc", ";"]], [["var", "q"], ["op", "."], ["fnd", "push"], ["punc", "("], ["punc", "{"], ["p", " "], ["prop", "id"], ["op", ":"], ["p", " "], ["num", "1"], ["p", " "], ["punc", "}"], ["p", " "], ["kw", "as"], ["p", " "], ["ty", "Order"], ["punc", ")"], ["punc", ";"]], [["var", "console"], ["op", "."], ["fnc", "log"], ["punc", "("], ["var", "q"], ["op", "."], ["prop", "max"], ["punc", ")"], ["punc", ";"]], [["kw", "const"], ["p", " "], ["var", "cap"], ["p", " "], ["op", "="], ["p", " "], ["var", "Math"], ["op", "."], ["bi", "max"], ["punc", "("], ["con", "LIMIT"], ["punc", ","], ["p", " "], ["num", "0"], ["punc", ")"], ["punc", ";"]]], "Java": [[["cmd", "/**"], ["doc", " A color theme. */"]], [["kw", "package"], ["p", " "], ["var", "com"], ["op", "."], ["var", "dupre"], ["punc", ";"]], [["kw", "import"], ["p", " "], ["var", "java"], ["op", "."], ["var", "util"], ["op", "."], ["var", "regex"], ["op", "."], ["ty", "Pattern"], ["punc", ";"]], [], [["dec", "@Deprecated"]], [["kw", "public"], ["p", " "], ["kw", "final"], ["p", " "], ["kw", "class"], ["p", " "], ["ty", "Theme"], ["p", " "], ["punc", "{"]], [["p", " "], ["kw", "private"], ["p", " "], ["kw", "static"], ["p", " "], ["kw", "final"], ["p", " "], ["ty", "int"], ["p", " "], ["con", "MAX_PORT"], ["p", " "], ["op", "="], ["p", " "], ["num", "8080"], ["punc", ";"]], [["p", " "], ["kw", "private"], ["p", " "], ["kw", "final"], ["p", " "], ["ty", "String"], ["p", " "], ["prop", "name"], ["p", " "], ["op", "="], ["p", " "], ["str", "\"dupre\""], ["punc", ";"]], [["p", " "], ["kw", "private"], ["p", " "], ["kw", "static"], ["p", " "], ["kw", "final"], ["p", " "], ["ty", "Pattern"], ["p", " "], ["con", "HEX"], ["p", " "], ["op", "="], ["p", " "], ["ty", "Pattern"], ["op", "."], ["fnc", "compile"], ["punc", "("], ["re", "\"#[0-9a-f]{6}\""], ["punc", ")"], ["punc", ";"]], [], [["p", " "], ["dec", "@Override"]], [["p", " "], ["kw", "public"], ["p", " "], ["ty", "String"], ["p", " "], ["fnd", "resolve"], ["punc", "("], ["ty", "String"], ["p", " "], ["var", "key"], ["punc", ")"], ["p", " "], ["punc", "{"]], [["p", " "], ["cmd", "//"], ["cm", " fall back to null"]], [["p", " "], ["kw", "if"], ["p", " "], ["punc", "("], ["var", "key"], ["op", "."], ["fnc", "isEmpty"], ["punc", "()"], ["punc", ")"], ["p", " "], ["kw", "return"], ["p", " "], ["con", "null"], ["punc", ";"]], [["p", " "], ["kw", "return"], ["p", " "], ["var", "key"], ["op", "."], ["fnc", "strip"], ["punc", "("], ["punc", ")"], ["op", "+"], ["str", "\""], ["esc", "\\t"], ["str", "\""], ["punc", ";"]], [["p", " "], ["punc", "}"]], [], [["p", " "], ["kw", "public"], ["p", " "], ["kw", "static"], ["p", " "], ["ty", "void"], ["p", " "], ["fnd", "main"], ["punc", "("], ["ty", "String"], ["punc", "[]"], ["p", " "], ["var", "args"], ["punc", ")"], ["p", " "], ["punc", "{"]], [["p", " "], ["ty", "var"], ["p", " "], ["var", "t"], ["p", " "], ["op", "="], ["p", " "], ["kw", "new"], ["p", " "], ["ty", "Theme"], ["punc", "()"], ["punc", ";"]], [["p", " "], ["ty", "System"], ["op", "."], ["prop", "out"], ["op", "."], ["fnc", "println"], ["punc", "("], ["var", "t"], ["op", "."], ["fnc", "resolve"], ["punc", "("], ["str", "\"bg\""], ["punc", "))"], ["punc", ";"]], [["p", " "], ["punc", "}"]], [["punc", "}"]]], "C": [[["cmd", "/**"], ["doc", " Order queue. */"]], [["pp", "#include"], ["p", " "], ["str", "<stdio.h>"]], [["pp", "#include"], ["p", " "], ["str", "<stdlib.h>"]], [["pp", "#define"], ["p", " "], ["con", "MAX_PORT"], ["p", " "], ["num", "8080"]], [], [["kw", "typedef"], ["p", " "], ["kw", "struct"], ["p", " "], ["punc", "{"]], [["p", " "], ["ty", "int"], ["p", " "], ["prop", "id"], ["punc", ";"]], [["p", " "], ["kw", "const"], ["p", " "], ["ty", "char"], ["p", " "], ["op", "*"], ["prop", "name"], ["punc", ";"]], [["punc", "}"], ["p", " "], ["ty", "Order"], ["punc", ";"]], [], [["cmd", "//"], ["cm", " returns -1 on null input"]], [["ty", "int"], ["p", " "], ["fnd", "push"], ["punc", "("], ["ty", "Order"], ["p", " "], ["op", "*"], ["var", "o"], ["punc", ")"], ["p", " "], ["dec", "__attribute__"], ["punc", "(("], ["dec", "nonnull"], ["punc", "))"], ["p", " "], ["punc", "{"]], [["p", " "], ["kw", "if"], ["p", " "], ["punc", "("], ["var", "o"], ["p", " "], ["op", "=="], ["p", " "], ["con", "NULL"], ["punc", ")"], ["p", " "], ["kw", "return"], ["p", " "], ["num", "-1"], ["punc", ";"]], [["p", " "], ["fnc", "printf"], ["punc", "("], ["str", "\"id=%d"], ["esc", "\\n"], ["str", "\""], ["punc", ","], ["p", " "], ["var", "o"], ["op", "->"], ["prop", "id"], ["punc", ");"]], [["p", " "], ["kw", "return"], ["p", " "], ["num", "0"], ["punc", ";"]], [["punc", "}"]], [], [["ty", "int"], ["p", " "], ["fnd", "main"], ["punc", "("], ["ty", "void"], ["punc", ")"], ["p", " "], ["punc", "{"]], [["p", " "], ["ty", "Order"], ["p", " "], ["var", "o"], ["p", " "], ["op", "="], ["p", " "], ["punc", "{"], ["p", " "], ["op", "."], ["prop", "id"], ["p", " "], ["op", "="], ["p", " "], ["num", "1"], ["punc", ","], ["p", " "], ["op", "."], ["prop", "name"], ["p", " "], ["op", "="], ["p", " "], ["str", "\"dupre\""], ["p", " "], ["punc", "}"], ["punc", ";"]], [["p", " "], ["ty", "Order"], ["p", " "], ["op", "*"], ["var", "p2"], ["p", " "], ["op", "="], ["p", " "], ["bi", "malloc"], ["punc", "("], ["bi", "sizeof"], ["punc", "("], ["ty", "Order"], ["punc", "))"], ["punc", ";"]], [["p", " "], ["fnc", "push"], ["punc", "("], ["op", "&"], ["var", "o"], ["punc", ")"], ["punc", ";"]], [["p", " "], ["bi", "free"], ["punc", "("], ["var", "p2"], ["punc", ")"], ["punc", ";"]], [["p", " "], ["kw", "return"], ["p", " "], ["num", "0"], ["punc", ";"]], [["punc", "}"]]], "C++": [[["cmd", "/**"], ["doc", " A color theme. */"]], [["pp", "#include"], ["p", " "], ["str", "<string>"]], [["pp", "#include"], ["p", " "], ["str", "<regex>"]], [["pp", "#pragma"], ["p", " "], ["pp", "once"]], [], [["kw", "namespace"], ["p", " "], ["var", "dupre"], ["p", " "], ["punc", "{"]], [], [["kw", "template"], ["op", "<"], ["kw", "typename"], ["p", " "], ["ty", "T"], ["op", ">"], ["p", " "], ["kw", "class"], ["p", " "], ["ty", "Theme"], ["p", " "], ["punc", "{"]], [["kw", "public"], ["op", ":"]], [["p", " "], ["kw", "static"], ["p", " "], ["kw", "constexpr"], ["p", " "], ["ty", "int"], ["p", " "], ["con", "MAX"], ["p", " "], ["op", "="], ["p", " "], ["num", "0x20"], ["punc", ";"]], [["p", " "], ["ty", "std"], ["op", "::"], ["ty", "string"], ["p", " "], ["prop", "name_"], ["p", " "], ["op", "="], ["p", " "], ["str", "\"dupre\""], ["punc", ";"]], [], [["p", " "], ["dec", "[[nodiscard]]"], ["p", " "], ["ty", "T"], ["p", " "], ["fnd", "resolve"], ["punc", "("], ["kw", "const"], ["p", " "], ["ty", "std"], ["op", "::"], ["ty", "string"], ["op", "&"], ["p", " "], ["var", "key"], ["punc", ")"], ["p", " "], ["kw", "const"], ["p", " "], ["punc", "{"]], [["p", " "], ["cmd", "//"], ["cm", " validate against a hex pattern"]], [["p", " "], ["kw", "static"], ["p", " "], ["ty", "std"], ["op", "::"], ["ty", "regex"], ["p", " "], ["var", "re"], ["punc", "("], ["re", "R\"(#[0-9a-f]{6})\""], ["punc", ")"], ["punc", ";"]], [["p", " "], ["kw", "if"], ["p", " "], ["punc", "("], ["var", "key"], ["op", "."], ["fnc", "empty"], ["punc", "()"], ["punc", ")"], ["p", " "], ["kw", "return"], ["p", " "], ["con", "nullptr"], ["punc", ";"]], [["p", " "], ["kw", "return"], ["p", " "], ["ty", "T"], ["punc", "{"], ["var", "key"], ["punc", "}"], ["punc", ";"]], [["p", " "], ["punc", "}"]], [["punc", "}"], ["punc", ";"]], [], [["ty", "int"], ["p", " "], ["fnd", "main"], ["punc", "()"], ["p", " "], ["punc", "{"]], [["p", " "], ["kw", "auto"], ["p", " "], ["var", "t"], ["p", " "], ["op", "="], ["p", " "], ["ty", "Theme"], ["op", "<"], ["ty", "int"], ["op", ">"], ["punc", "{}"], ["punc", ";"]], [["p", " "], ["bi", "static_cast"], ["op", "<"], ["ty", "int"], ["op", ">"], ["punc", "("], ["var", "t"], ["op", "."], ["prop", "name_"], ["op", "."], ["fnc", "size"], ["punc", "())"], ["punc", ";"]], [["p", " "], ["ty", "std"], ["op", "::"], ["fnc", "printf"], ["punc", "("], ["str", "\"%s"], ["esc", "\\n"], ["str", "\""], ["punc", ","], ["p", " "], ["var", "t"], ["op", "."], ["prop", "name_"], ["op", "."], ["fnc", "c_str"], ["punc", "())"], ["punc", ";"]], [["p", " "], ["kw", "return"], ["p", " "], ["num", "0"], ["punc", ";"]], [["punc", "}"]]], "Shell": [[["cmd", "#!"], ["cm", "/bin/bash"]], [["cmd", "#"], ["cm", " deploy.sh"]], [["bi", "set"], ["p", " "], ["op", "-"], ["var", "euo"], ["p", " "], ["var", "pipefail"]], [], [["var", "PORT"], ["op", "="], ["num", "8080"]], [["var", "NAME"], ["op", "="], ["str", "\"dupre\""]], [], [["fnd", "deploy"], ["punc", "()"], ["p", " "], ["punc", "{"]], [["p", " "], ["kw", "local"], ["p", " "], ["var", "target"], ["op", "="], ["str", "\"$1\""]], [["p", " "], ["kw", "if"], ["p", " "], ["punc", "[["], ["p", " "], ["op", "-z"], ["p", " "], ["str", "\"$target\""], ["p", " "], ["punc", "]]"], ["punc", ";"], ["p", " "], ["kw", "then"]], [["p", " "], ["bi", "echo"], ["p", " "], ["str", "\"no target\""]], [["p", " "], ["kw", "return"], ["p", " "], ["num", "1"]], [["p", " "], ["kw", "fi"]], [["p", " "], ["fnc", "rsync"], ["p", " "], ["op", "-az"], ["p", " "], ["str", "\"$NAME\""], ["p", " "], ["str", "\"$target\""]], [["punc", "}"]], [], [["fnd", "main"], ["punc", "()"], ["p", " "], ["punc", "{"]], [["p", " "], ["kw", "for"], ["p", " "], ["var", "host"], ["p", " "], ["kw", "in"], ["p", " "], ["str", "\"$@\""], ["punc", ";"], ["p", " "], ["kw", "do"]], [["p", " "], ["fnc", "deploy"], ["p", " "], ["str", "\"$host\""], ["p", " "], ["op", "||"], ["p", " "], ["bi", "exit"], ["p", " "], ["num", "1"]], [["p", " "], ["kw", "done"]], [["p", " "], ["bi", "echo"], ["p", " "], ["op", "-e"], ["p", " "], ["str", "\"all done"], ["esc", "\\n"], ["str", "\""]], [["punc", "}"]], [], [["fnc", "main"], ["p", " "], ["str", "\"$@\""]]]}, CATS=[["bg", "background (ground)", "Aa Bb 123"], ["p", "fg \u00b7 default text", "other / whitespace"], ["kw", "keyword", "class def if return"], ["bi", "builtin", "len echo printf"], ["pp", "preprocessor", "#include #define"], ["fnd", "function \u00b7 def", "resolve push"], ["fnc", "function \u00b7 call", "printf rsync get"], ["dec", "decorator", "@dataclass"], ["ty", "type / class", "int str Order Queue"], ["prop", "property / field", "id name items"], ["con", "constant", "None nil NULL true"], ["num", "number", "8080 100 -1"], ["str", "string", "\"dupre\" \"fmt\""], ["esc", "escape", "\\n \\t"], ["re", "regexp", "/^#[0-9a-f]+/"], ["doc", "docstring", "\"\"\"...\"\"\""], ["cm", "comment", "# reject nil"], ["cmd", "comment delim", "# // ;;"], ["var", "variable / use", "value key self"], ["op", "operator", ": = -> =="], ["punc", "punctuation", "{ } ( ) ;"]], UI_FACES=[["cursor", "cursor", "Aa|"], ["region", "region (selection)", "selected text"], ["hl-line", "hl-line (current line)", "current line"], ["highlight", "highlight", "hover"], ["mode-line", "mode-line", "status active"], ["mode-line-inactive", "mode-line-inactive", "status idle"], ["fringe", "fringe", "| |"], ["line-number", "line-number", " 42"], ["line-number-current-line", "line-number-current-line", "> 42"], ["minibuffer-prompt", "minibuffer-prompt", "M-x "], ["isearch", "isearch (match)", "match"], ["lazy-highlight", "lazy-highlight", "other match"], ["isearch-fail", "isearch-fail", "no match"], ["show-paren-match", "show-paren-match", "( )"], ["show-paren-mismatch", "show-paren-mismatch", ") ("], ["link", "link", "https://"], ["error", "error", "error!"], ["warning", "warning", "warning"], ["success", "success", "ok"], ["vertical-border", "vertical-border", "|"]], APPS={"org-mode": {"label": "org-mode", "preview": "org", "faces": [["org-document-title", "document title", {"fg": "gold", "bold": true, "height": 1.5}], ["org-document-info", "document info", {"fg": "steel"}], ["org-document-info-keyword", "document info keyword", {"fg": "pewter", "inherit": "fixed-pitch"}], ["org-level-1", "level 1", {"fg": "blue", "bold": true, "height": 1.3}], ["org-level-2", "level 2", {"fg": "gold", "height": 1.2}], ["org-level-3", "level 3", {"fg": "regal", "height": 1.15}], ["org-level-4", "level 4", {"fg": "emerald", "height": 1.1}], ["org-level-5", "level 5", {"fg": "terracotta"}], ["org-level-6", "level 6", {"fg": "tan"}], ["org-level-7", "level 7", {"fg": "sage"}], ["org-level-8", "level 8", {"fg": "steel"}], ["org-headline-todo", "headline todo", {}], ["org-headline-done", "headline done", {"fg": "pewter"}], ["org-todo", "todo", {"fg": "terracotta", "bold": true}], ["org-done", "done", {"fg": "sage", "bold": true}], ["org-priority", "priority", {"fg": "gold", "bold": true}], ["org-tag", "tag", {"fg": "tan"}], ["org-tag-group", "tag group", {"fg": "tan"}], ["org-special-keyword", "special keyword", {"fg": "pewter"}], ["org-drawer", "drawer", {"fg": "pewter"}], ["org-property-value", "property value", {"fg": "steel"}], ["org-checkbox", "checkbox", {"fg": "gold", "inherit": "fixed-pitch"}], ["org-checkbox-statistics-todo", "checkbox statistics todo", {"fg": "terracotta"}], ["org-checkbox-statistics-done", "checkbox statistics done", {"fg": "sage"}], ["org-warning", "warning", {"fg": "terracotta", "bold": true}], ["org-link", "link", {"fg": "blue"}], ["org-footnote", "footnote", {"fg": "blue"}], ["org-date", "date", {"fg": "steel", "inherit": "fixed-pitch"}], ["org-sexp-date", "sexp date", {"fg": "steel"}], ["org-date-selected", "date selected", {"fg": "ground", "bg": "gold"}], ["org-target", "target", {"fg": "regal"}], ["org-macro", "macro", {"fg": "regal"}], ["org-cite", "cite", {"fg": "blue"}], ["org-cite-key", "cite key", {"fg": "blue"}], ["org-block", "block", {"fg": "white", "bg": "bg-dim", "inherit": "fixed-pitch"}], ["org-block-begin-line", "block begin line", {"fg": "pewter", "bg": "bg-dim", "inherit": "fixed-pitch"}], ["org-block-end-line", "block end line", {"fg": "pewter", "bg": "bg-dim", "inherit": "fixed-pitch"}], ["org-code", "code", {"fg": "terracotta", "inherit": "fixed-pitch"}], ["org-verbatim", "verbatim", {"fg": "steel", "inherit": "fixed-pitch"}], ["org-inline-src-block", "inline src block", {"fg": "terracotta", "inherit": "fixed-pitch"}], ["org-quote", "quote", {"fg": "silver", "italic": true}], ["org-verse", "verse", {"fg": "silver", "italic": true}], ["org-latex-and-related", "latex and related", {"fg": "gold"}], ["org-table", "table", {"fg": "steel", "inherit": "fixed-pitch"}], ["org-table-header", "table header", {"fg": "white", "bold": true, "bg": "gunmetal"}], ["org-table-row", "table row", {}], ["org-formula", "formula", {"fg": "terracotta"}], ["org-column", "column", {"bg": "gunmetal"}], ["org-column-title", "column title", {"fg": "white", "bold": true, "bg": "gunmetal"}], ["org-list-dt", "list dt", {"fg": "gold", "bold": true}], ["org-meta-line", "meta line", {"fg": "pewter", "inherit": "fixed-pitch"}], ["org-ellipsis", "ellipsis", {"fg": "pewter"}], ["org-hide", "hide", {"fg": "ground"}], ["org-indent", "indent", {"fg": "ground"}], ["org-archived", "archived", {"fg": "pewter"}], ["org-default", "default", {}], ["org-dispatcher-highlight", "dispatcher highlight", {"fg": "gold", "bold": true, "bg": "navy"}], ["org-agenda-structure", "agenda structure", {"fg": "blue", "bold": true, "height": 1.1}], ["org-agenda-structure-secondary", "agenda structure secondary", {"fg": "blue"}], ["org-agenda-structure-filter", "agenda structure filter", {"fg": "terracotta", "bold": true}], ["org-agenda-date", "agenda date", {"fg": "steel", "height": 1.05}], ["org-agenda-date-today", "agenda date today", {"fg": "gold", "bold": true, "height": 1.05}], ["org-agenda-date-weekend", "agenda date weekend", {"fg": "steel", "bold": true}], ["org-agenda-date-weekend-today", "agenda date weekend today", {"fg": "gold", "bold": true}], ["org-agenda-current-time", "agenda current time", {"fg": "gold"}], ["org-agenda-done", "agenda done", {"fg": "sage"}], ["org-agenda-dimmed-todo-face", "agenda dimmed todo", {"fg": "pewter"}], ["org-agenda-calendar-event", "agenda calendar event", {"fg": "white"}], ["org-agenda-calendar-sexp", "agenda calendar sexp", {"fg": "steel"}], ["org-agenda-calendar-daterange", "agenda calendar daterange", {"fg": "steel"}], ["org-agenda-diary", "agenda diary", {"fg": "sage"}], ["org-agenda-clocking", "agenda clocking", {"bg": "navy"}], ["org-agenda-column-dateline", "agenda column dateline", {"bg": "gunmetal"}], ["org-agenda-restriction-lock", "agenda restriction lock", {"bg": "terracotta"}], ["org-agenda-filter-category", "agenda filter category", {"fg": "gold", "bold": true}], ["org-agenda-filter-effort", "agenda filter effort", {"fg": "gold", "bold": true}], ["org-agenda-filter-regexp", "agenda filter regexp", {"fg": "gold", "bold": true}], ["org-agenda-filter-tags", "agenda filter tags", {"fg": "gold", "bold": true}], ["org-scheduled", "scheduled", {"fg": "sage"}], ["org-scheduled-today", "scheduled today", {"fg": "sage", "bold": true}], ["org-scheduled-previously", "scheduled previously", {"fg": "terracotta"}], ["org-upcoming-deadline", "upcoming deadline", {"fg": "gold"}], ["org-upcoming-distant-deadline", "upcoming distant deadline", {"fg": "tan"}], ["org-imminent-deadline", "imminent deadline", {"fg": "terracotta", "bold": true}], ["org-time-grid", "time grid", {"fg": "tan"}], ["org-clock-overlay", "clock overlay", {"bg": "navy"}], ["org-mode-line-clock", "mode line clock", {"fg": "steel"}], ["org-mode-line-clock-overrun", "mode line clock overrun", {"fg": "terracotta", "bold": true}]]}, "magit": {"label": "magit", "preview": "magit", "faces": [["magit-section-heading", "section heading", {"fg": "gold", "bold": true}], ["magit-section-secondary-heading", "section secondary heading", {"fg": "tan", "bold": true}], ["magit-section-heading-selection", "section heading selection", {"fg": "gold", "bg": "navy"}], ["magit-section-highlight", "section highlight", {"bg": "bg-dim"}], ["magit-section-child-count", "section child count", {"fg": "pewter"}], ["magit-diff-added", "diff added", {"fg": "sage"}], ["magit-diff-added-highlight", "diff added highlight", {"fg": "sage", "bg": "bg-dim"}], ["magit-diff-removed", "diff removed", {"fg": "terracotta"}], ["magit-diff-removed-highlight", "diff removed highlight", {"fg": "terracotta", "bg": "bg-dim"}], ["magit-diff-context", "diff context", {"fg": "pewter"}], ["magit-diff-context-highlight", "diff context highlight", {"fg": "silver", "bg": "bg-dim"}], ["magit-diff-file-heading", "diff file heading", {"fg": "white", "bold": true}], ["magit-diff-file-heading-highlight", "diff file heading highlight", {"fg": "white", "bold": true, "bg": "bg-dim"}], ["magit-diff-file-heading-selection", "diff file heading selection", {}], ["magit-diff-hunk-heading", "diff hunk heading", {"fg": "steel", "bg": "gunmetal"}], ["magit-diff-hunk-heading-highlight", "diff hunk heading highlight", {"fg": "white", "bg": "gunmetal"}], ["magit-diff-hunk-heading-selection", "diff hunk heading selection", {}], ["magit-diff-hunk-region", "diff hunk region", {}], ["magit-diff-lines-heading", "diff lines heading", {}], ["magit-diff-lines-boundary", "diff lines boundary", {}], ["magit-diff-base", "diff base", {}], ["magit-diff-base-highlight", "diff base highlight", {}], ["magit-diff-our", "diff our", {}], ["magit-diff-our-highlight", "diff our highlight", {}], ["magit-diff-their", "diff their", {}], ["magit-diff-their-highlight", "diff their highlight", {}], ["magit-diff-conflict-heading", "diff conflict heading", {}], ["magit-diff-conflict-heading-highlight", "diff conflict heading highlight", {}], ["magit-diff-revision-summary", "diff revision summary", {}], ["magit-diff-revision-summary-highlight", "diff revision summary highlight", {}], ["magit-diff-whitespace-warning", "diff whitespace warning", {"bg": "terracotta"}], ["magit-diffstat-added", "diffstat added", {"fg": "sage"}], ["magit-diffstat-removed", "diffstat removed", {"fg": "terracotta"}], ["magit-branch-current", "branch current", {"fg": "blue", "bold": true}], ["magit-branch-local", "branch local", {"fg": "blue"}], ["magit-branch-remote", "branch remote", {"fg": "sage"}], ["magit-branch-remote-head", "branch remote head", {"fg": "sage", "bold": true}], ["magit-branch-upstream", "branch upstream", {}], ["magit-branch-warning", "branch warning", {}], ["magit-head", "head", {"fg": "blue", "bold": true}], ["magit-tag", "tag", {"fg": "gold"}], ["magit-hash", "hash", {"fg": "pewter"}], ["magit-filename", "filename", {"fg": "steel"}], ["magit-dimmed", "dimmed", {"fg": "pewter"}], ["magit-keyword", "keyword", {"fg": "regal"}], ["magit-keyword-squash", "keyword squash", {"fg": "terracotta"}], ["magit-refname", "refname", {"fg": "pewter"}], ["magit-refname-stash", "refname stash", {}], ["magit-refname-wip", "refname wip", {}], ["magit-refname-pullreq", "refname pullreq", {}], ["magit-log-author", "log author", {"fg": "tan"}], ["magit-log-date", "log date", {"fg": "steel"}], ["magit-log-graph", "log graph", {"fg": "pewter"}], ["magit-header-line", "header line", {"fg": "white", "bold": true, "bg": "gunmetal"}], ["magit-header-line-key", "header line key", {}], ["magit-header-line-log-select", "header line log select", {}], ["magit-process-ok", "process ok", {"fg": "sage", "bold": true}], ["magit-process-ng", "process ng", {"fg": "terracotta", "bold": true}], ["magit-mode-line-process", "mode line process", {"fg": "sage"}], ["magit-mode-line-process-error", "mode line process error", {"fg": "terracotta"}], ["magit-bisect-good", "bisect good", {"fg": "sage"}], ["magit-bisect-bad", "bisect bad", {"fg": "terracotta"}], ["magit-bisect-skip", "bisect skip", {"fg": "gold"}], ["magit-blame-heading", "blame heading", {"fg": "steel", "bg": "gunmetal"}], ["magit-blame-highlight", "blame highlight", {}], ["magit-blame-hash", "blame hash", {"fg": "pewter"}], ["magit-blame-name", "blame name", {"fg": "tan"}], ["magit-blame-date", "blame date", {"fg": "steel"}], ["magit-blame-summary", "blame summary", {}], ["magit-blame-dimmed", "blame dimmed", {}], ["magit-blame-margin", "blame margin", {}], ["magit-cherry-equivalent", "cherry equivalent", {"fg": "regal"}], ["magit-cherry-unmatched", "cherry unmatched", {"fg": "sage"}], ["magit-signature-good", "signature good", {"fg": "sage"}], ["magit-signature-bad", "signature bad", {"fg": "terracotta", "bold": true}], ["magit-signature-untrusted", "signature untrusted", {"fg": "gold"}], ["magit-signature-expired", "signature expired", {"fg": "tan"}], ["magit-signature-expired-key", "signature expired key", {}], ["magit-signature-revoked", "signature revoked", {}], ["magit-signature-error", "signature error", {}], ["magit-reflog-commit", "reflog commit", {"fg": "sage"}], ["magit-reflog-amend", "reflog amend", {"fg": "regal"}], ["magit-reflog-merge", "reflog merge", {"fg": "sage"}], ["magit-reflog-checkout", "reflog checkout", {"fg": "blue"}], ["magit-reflog-reset", "reflog reset", {"fg": "terracotta"}], ["magit-reflog-rebase", "reflog rebase", {"fg": "regal"}], ["magit-reflog-cherry-pick", "reflog cherry pick", {"fg": "sage"}], ["magit-reflog-remote", "reflog remote", {"fg": "steel"}], ["magit-reflog-other", "reflog other", {"fg": "steel"}], ["magit-sequence-pick", "sequence pick", {"fg": "white"}], ["magit-sequence-stop", "sequence stop", {"fg": "terracotta"}], ["magit-sequence-part", "sequence part", {}], ["magit-sequence-head", "sequence head", {"fg": "blue"}], ["magit-sequence-drop", "sequence drop", {}], ["magit-sequence-done", "sequence done", {"fg": "pewter"}], ["magit-sequence-onto", "sequence onto", {}], ["magit-sequence-exec", "sequence exec", {}], ["magit-left-margin", "left margin", {}]]}, "elfeed": {"label": "elfeed", "preview": "elfeed", "faces": [["elfeed-search-date-face", "search date", {"fg": "steel"}], ["elfeed-search-title-face", "search title", {"fg": "silver"}], ["elfeed-search-unread-title-face", "search unread title", {"fg": "white", "bold": true}], ["elfeed-search-feed-face", "search feed", {"fg": "sage"}], ["elfeed-search-tag-face", "search tag", {"fg": "tan"}], ["elfeed-search-unread-count-face", "search unread count", {"fg": "gold"}], ["elfeed-search-filter-face", "search filter", {"fg": "blue", "bold": true}], ["elfeed-search-last-update-face", "search last update", {"fg": "pewter"}], ["elfeed-log-date-face", "log date", {"fg": "steel"}], ["elfeed-log-error-level-face", "log error level", {"fg": "terracotta", "bold": true}], ["elfeed-log-warn-level-face", "log warn level", {"fg": "gold"}], ["elfeed-log-info-level-face", "log info level", {"fg": "sage"}], ["elfeed-log-debug-level-face", "log debug level", {"fg": "pewter"}]]}, "mu4e": {"label": "mu4e", "preview": "mu4e", "faces": [["mu4e-title-face", "title", {"fg": "blue", "bold": true}], ["mu4e-context-face", "context", {"fg": "blue", "bold": true}], ["mu4e-modeline-face", "modeline", {"fg": "silver"}], ["mu4e-ok-face", "ok", {"fg": "sage", "bold": true}], ["mu4e-warning-face", "warning", {"fg": "gold", "bold": true}], ["mu4e-header-title-face", "header title", {"fg": "blue", "bold": true}], ["mu4e-header-key-face", "header key", {"fg": "blue", "bold": true}], ["mu4e-header-value-face", "header value", {"fg": "silver"}], ["mu4e-header-face", "header", {"fg": "#cdced1"}], ["mu4e-header-highlight-face", "header highlight", {"bg": "gunmetal"}], ["mu4e-header-marks-face", "header marks", {"fg": "gold"}], ["mu4e-unread-face", "unread", {"fg": "white", "bold": true}], ["mu4e-flagged-face", "flagged", {"fg": "gold"}], ["mu4e-replied-face", "replied", {"fg": "silver"}], ["mu4e-forwarded-face", "forwarded", {"fg": "silver"}], ["mu4e-draft-face", "draft", {"fg": "steel", "italic": true}], ["mu4e-trashed-face", "trashed", {"fg": "pewter", "strike": true}], ["mu4e-moved-face", "moved", {"fg": "steel", "italic": true}], ["mu4e-related-face", "related", {"fg": "steel", "italic": true}], ["mu4e-contact-face", "contact", {"fg": "#cdced1"}], ["mu4e-special-header-value-face", "special header value", {"fg": "silver"}], ["mu4e-attach-number-face", "attach number", {"fg": "blue", "bold": true}], ["mu4e-url-number-face", "url number", {"fg": "blue", "bold": true}], ["mu4e-link-face", "link", {"fg": "blue", "underline": true}], ["mu4e-cited-1-face", "cited 1", {"fg": "silver"}], ["mu4e-cited-2-face", "cited 2", {"fg": "steel"}], ["mu4e-cited-3-face", "cited 3", {"fg": "sage"}], ["mu4e-cited-4-face", "cited 4", {"fg": "pewter"}], ["mu4e-cited-5-face", "cited 5", {"fg": "tan"}], ["mu4e-cited-6-face", "cited 6", {"fg": "terracotta"}], ["mu4e-cited-7-face", "cited 7", {"fg": "regal"}], ["mu4e-footer-face", "footer", {"fg": "pewter"}], ["mu4e-region-code", "region code", {"bg": "bg-dim"}], ["mu4e-system-face", "system", {"fg": "pewter", "italic": true}], ["mu4e-highlight-face", "highlight", {"fg": "gold", "bold": true}], ["mu4e-compose-header-face", "compose header", {"fg": "blue", "bold": true}], ["mu4e-compose-separator-face", "compose separator", {"fg": "pewter"}]]}, "ghostel": {"label": "ghostel", "preview": "ghostel", "faces": [["ghostel-default", "default", {"fg": "#cdced1"}], ["ghostel-fake-cursor", "fake cursor", {"fg": "#000000", "bg": "silver"}], ["ghostel-fake-cursor-box", "fake cursor box", {"fg": "silver"}], ["ghostel-color-black", "color black", {"fg": "pewter"}], ["ghostel-color-red", "color red", {"fg": "terracotta"}], ["ghostel-color-green", "color green", {"fg": "emerald"}], ["ghostel-color-yellow", "color yellow", {"fg": "gold"}], ["ghostel-color-blue", "color blue", {"fg": "blue"}], ["ghostel-color-magenta", "color magenta", {"fg": "regal"}], ["ghostel-color-cyan", "color cyan", {"fg": "sage"}], ["ghostel-color-white", "color white", {"fg": "silver"}], ["ghostel-color-bright-black", "color bright black", {"fg": "steel"}], ["ghostel-color-bright-red", "color bright red", {"fg": "#de4949"}], ["ghostel-color-bright-green", "color bright green", {"fg": "#84b068"}], ["ghostel-color-bright-yellow", "color bright yellow", {"fg": "#eed376"}], ["ghostel-color-bright-blue", "color bright blue", {"fg": "#7a9abe"}], ["ghostel-color-bright-magenta", "color bright magenta", {"fg": "#b07fd0"}], ["ghostel-color-bright-cyan", "color bright cyan", {"fg": "#7fc0a8"}], ["ghostel-color-bright-white", "color bright white", {"fg": "white"}]]}, "dashboard": {"label": "dashboard", "preview": "dashboard", "faces": [["dashboard-banner-logo-title", "banner logo title", {"fg": "gold", "bold": true}], ["dashboard-text-banner", "text banner", {"fg": "steel"}], ["dashboard-heading", "heading", {"fg": "blue", "bold": true}], ["dashboard-items-face", "items", {"fg": "#cdced1"}], ["dashboard-navigator", "navigator", {"fg": "blue"}], ["dashboard-no-items-face", "no items", {"fg": "pewter"}], ["dashboard-footer-face", "footer", {"fg": "tan"}], ["dashboard-footer-icon-face", "footer icon", {"fg": "gold"}]]}, "lsp-mode": {"label": "lsp-mode", "preview": "lsp", "faces": [["lsp-signature-face", "signature", {"fg": "silver"}], ["lsp-signature-highlight-function-argument", "signature highlight function argument", {"fg": "gold", "bold": true}], ["lsp-signature-posframe", "signature posframe", {"bg": "bg-dim"}], ["lsp-face-highlight-read", "face highlight read", {"bg": "navy"}], ["lsp-face-highlight-write", "face highlight write", {"bg": "#3d2f4a"}], ["lsp-face-highlight-textual", "face highlight textual", {"bg": "gunmetal"}], ["lsp-face-rename", "face rename", {"bg": "gunmetal", "bold": true}], ["lsp-rename-placeholder-face", "rename placeholder", {"fg": "gold", "bold": true}], ["lsp-inlay-hint-face", "inlay hint", {"fg": "pewter", "italic": true}], ["lsp-inlay-hint-parameter-face", "inlay hint parameter", {"fg": "steel", "italic": true}], ["lsp-inlay-hint-type-face", "inlay hint type", {"fg": "sage", "italic": true}], ["lsp-details-face", "details", {"fg": "pewter", "italic": true}], ["lsp-installation-buffer-face", "installation buffer", {"fg": "blue"}], ["lsp-installation-finished-buffer-face", "installation finished buffer", {"fg": "sage"}]]}, "git-gutter": {"label": "git-gutter", "preview": "gitgutter", "faces": [["git-gutter:added", "added", {"fg": "emerald"}], ["git-gutter:modified", "modified", {"fg": "gold"}], ["git-gutter:deleted", "deleted", {"fg": "terracotta"}], ["git-gutter:unchanged", "unchanged", {"fg": "pewter"}], ["git-gutter:separator", "separator", {"fg": "steel"}]]}, "flycheck": {"label": "flycheck", "preview": "flycheck", "faces": [["flycheck-error", "error", {"fg": "terracotta"}], ["flycheck-warning", "warning", {"fg": "gold"}], ["flycheck-info", "info", {"fg": "blue"}], ["flycheck-fringe-error", "fringe error", {"fg": "terracotta"}], ["flycheck-fringe-warning", "fringe warning", {"fg": "gold"}], ["flycheck-fringe-info", "fringe info", {"fg": "blue"}], ["flycheck-delimited-error", "delimited error", {"fg": "terracotta"}], ["flycheck-error-delimiter", "error delimiter", {"fg": "terracotta"}], ["flycheck-error-list-error", "error list error", {"fg": "terracotta"}], ["flycheck-error-list-warning", "error list warning", {"fg": "gold"}], ["flycheck-error-list-info", "error list info", {"fg": "blue"}], ["flycheck-error-list-error-message", "error list error message", {"fg": "#cdced1"}], ["flycheck-error-list-checker-name", "error list checker name", {"fg": "steel"}], ["flycheck-error-list-column-number", "error list column number", {"fg": "pewter"}], ["flycheck-error-list-line-number", "error list line number", {"fg": "pewter"}], ["flycheck-error-list-filename", "error list filename", {"fg": "blue"}], ["flycheck-error-list-id", "error list id", {"fg": "steel"}], ["flycheck-error-list-id-with-explainer", "error list id with explainer", {"fg": "steel", "bold": true}], ["flycheck-error-list-highlight", "error list highlight", {"bg": "gunmetal"}], ["flycheck-verify-select-checker", "verify select checker", {"fg": "gold"}]]}, "dired": {"label": "dired", "preview": "dired", "faces": [["dired-header", "header", {"fg": "blue", "bold": true}], ["dired-directory", "directory", {"fg": "blue", "bold": true}], ["dired-symlink", "symlink", {"fg": "sage"}], ["dired-broken-symlink", "broken symlink", {"fg": "#de4949", "bold": true}], ["dired-special", "special", {"fg": "regal"}], ["dired-set-id", "set id", {"fg": "terracotta"}], ["dired-perm-write", "perm write", {"fg": "silver"}], ["dired-mark", "mark", {"fg": "gold"}], ["dired-marked", "marked", {"fg": "gold", "bold": true}], ["dired-flagged", "flagged", {"fg": "terracotta", "bold": true}], ["dired-ignored", "ignored", {"fg": "pewter"}], ["dired-warning", "warning", {"fg": "gold", "bold": true}]]}, "dirvish": {"label": "dirvish", "preview": "dirvish", "faces": [["dirvish-inactive", "inactive", {"fg": "pewter"}], ["dirvish-free-space", "free space", {"fg": "sage"}], ["dirvish-hl-line", "hl line", {"bg": "gunmetal"}], ["dirvish-hl-line-inactive", "hl line inactive", {"bg": "bg-dim"}], ["dirvish-file-modes", "file modes", {"fg": "steel"}], ["dirvish-file-link-number", "file link number", {"fg": "pewter"}], ["dirvish-file-user-id", "file user id", {"fg": "blue"}], ["dirvish-file-group-id", "file group id", {"fg": "steel"}], ["dirvish-file-size", "file size", {"fg": "sage"}], ["dirvish-file-time", "file time", {"fg": "pewter"}], ["dirvish-file-inode-number", "file inode number", {"fg": "pewter"}], ["dirvish-file-device-number", "file device number", {"fg": "pewter"}], ["dirvish-subtree-guide", "subtree guide", {"fg": "pewter"}], ["dirvish-subtree-state", "subtree state", {"fg": "steel"}], ["dirvish-collapse-dir-face", "collapse dir", {"fg": "blue"}], ["dirvish-collapse-empty-dir-face", "collapse empty dir", {"fg": "pewter"}], ["dirvish-collapse-file-face", "collapse file", {"fg": "silver"}], ["dirvish-emerge-group-title", "emerge group title", {"fg": "gold", "bold": true}], ["dirvish-media-info-heading", "media info heading", {"fg": "blue", "bold": true}], ["dirvish-media-info-property-key", "media info property key", {"fg": "steel"}], ["dirvish-narrow-match-face-0", "narrow match 0", {"fg": "gold", "bold": true}], ["dirvish-narrow-match-face-1", "narrow match 1", {"fg": "blue", "bold": true}], ["dirvish-narrow-match-face-2", "narrow match 2", {"fg": "emerald", "bold": true}], ["dirvish-narrow-match-face-3", "narrow match 3", {"fg": "regal", "bold": true}], ["dirvish-narrow-split", "narrow split", {"fg": "pewter"}], ["dirvish-proc-running", "proc running", {"fg": "gold"}], ["dirvish-proc-finished", "proc finished", {"fg": "sage"}], ["dirvish-proc-failed", "proc failed", {"fg": "terracotta"}], ["dirvish-git-commit-message-face", "git commit message", {"fg": "tan", "italic": true}], ["dirvish-vc-added-state", "vc added state", {"fg": "sage"}], ["dirvish-vc-edited-state", "vc edited state", {"fg": "gold"}], ["dirvish-vc-removed-state", "vc removed state", {"fg": "terracotta"}], ["dirvish-vc-conflict-state", "vc conflict state", {"fg": "terracotta", "bold": true}], ["dirvish-vc-locked-state", "vc locked state", {"fg": "blue"}], ["dirvish-vc-missing-state", "vc missing state", {"fg": "terracotta"}], ["dirvish-vc-needs-merge-face", "vc needs merge", {"fg": "gold"}], ["dirvish-vc-needs-update-state", "vc needs update state", {"fg": "gold"}], ["dirvish-vc-unregistered-face", "vc unregistered", {"fg": "pewter"}]]}, "calibredb": {"label": "calibredb", "preview": "calibredb", "faces": [["calibredb-search-header-library-name-face", "search header library name", {"fg": "blue", "bold": true}], ["calibredb-search-header-library-path-face", "search header library path", {"fg": "pewter"}], ["calibredb-search-header-total-face", "search header total", {"fg": "sage"}], ["calibredb-search-header-filter-face", "search header filter", {"fg": "gold"}], ["calibredb-search-header-sort-face", "search header sort", {"fg": "steel"}], ["calibredb-search-header-highlight-face", "search header highlight", {"fg": "gold", "bold": true}], ["calibredb-id-face", "id", {"fg": "pewter"}], ["calibredb-title-face", "title", {"fg": "blue", "bold": true}], ["calibredb-author-face", "author", {"fg": "sage"}], ["calibredb-format-face", "format", {"fg": "steel"}], ["calibredb-size-face", "size", {"fg": "pewter"}], ["calibredb-tag-face", "tag", {"fg": "tan"}], ["calibredb-date-face", "date", {"fg": "pewter"}], ["calibredb-mark-face", "mark", {"fg": "gold", "bold": true}], ["calibredb-series-face", "series", {"fg": "regal"}], ["calibredb-publisher-face", "publisher", {"fg": "steel"}], ["calibredb-pubdate-face", "pubdate", {"fg": "pewter"}], ["calibredb-language-face", "language", {"fg": "steel"}], ["calibredb-comment-face", "comment", {"fg": "silver", "italic": true}], ["calibredb-archive-face", "archive", {"fg": "pewter"}], ["calibredb-favorite-face", "favorite", {"fg": "gold"}], ["calibredb-file-face", "file", {"fg": "blue"}], ["calibredb-ids-face", "ids", {"fg": "pewter"}], ["calibredb-highlight-face", "highlight", {"fg": "gold", "bold": true}], ["calibredb-current-page-button-face", "current page button", {"fg": "blue", "bold": true}], ["calibredb-mouse-face", "mouse", {"bg": "gunmetal"}], ["calibredb-title-detailed-view-face", "title detailed view", {"fg": "gold", "bold": true}], ["calibredb-edit-annotation-header-title-face", "edit annotation header title", {"fg": "blue", "bold": true}]]}, "erc": {"label": "erc", "preview": "erc", "faces": [["erc-header-line", "header line", {"fg": "white", "bg": "gunmetal", "bold": true}], ["erc-timestamp-face", "timestamp", {"fg": "pewter"}], ["erc-notice-face", "notice", {"fg": "steel"}], ["erc-default-face", "default", {"fg": "#cdced1"}], ["erc-current-nick-face", "current nick", {"fg": "gold", "bold": true}], ["erc-my-nick-face", "my nick", {"fg": "gold", "bold": true}], ["erc-my-nick-prefix-face", "my nick prefix", {"fg": "gold"}], ["erc-nick-default-face", "nick default", {"fg": "blue"}], ["erc-nick-prefix-face", "nick prefix", {"fg": "sage"}], ["erc-button-nick-default-face", "button nick default", {"fg": "blue"}], ["erc-nick-msg-face", "nick msg", {"fg": "regal"}], ["erc-direct-msg-face", "direct msg", {"fg": "regal"}], ["erc-action-face", "action", {"fg": "sage", "italic": true}], ["erc-keyword-face", "keyword", {"fg": "gold", "bold": true}], ["erc-pal-face", "pal", {"fg": "emerald"}], ["erc-fool-face", "fool", {"fg": "pewter"}], ["erc-dangerous-host-face", "dangerous host", {"fg": "terracotta", "bold": true}], ["erc-error-face", "error", {"fg": "terracotta", "bold": true}], ["erc-input-face", "input", {"fg": "silver"}], ["erc-prompt-face", "prompt", {"fg": "blue", "bold": true}], ["erc-command-indicator-face", "command indicator", {"fg": "steel", "bold": true}], ["erc-information", "information", {"fg": "steel"}], ["erc-button", "button", {"fg": "blue"}], ["erc-bold-face", "bold", {"bold": true}], ["erc-italic-face", "italic", {"italic": true}], ["erc-underline-face", "underline", {"fg": "silver", "underline": true}], ["erc-inverse-face", "inverse", {"fg": "#000000", "bg": "silver"}], ["erc-spoiler-face", "spoiler", {"fg": "#000000", "bg": "gunmetal"}], ["erc-fill-wrap-merge-indicator-face", "fill wrap merge indicator", {"fg": "pewter"}], ["erc-keep-place-indicator-arrow", "keep place indicator arrow", {"fg": "gold"}], ["erc-keep-place-indicator-line", "keep place indicator line", {"bg": "bg-dim"}]]}, "org-drill": {"label": "org-drill", "preview": "orgdrill", "faces": [["org-drill-hidden-cloze-face", "hidden cloze", {"fg": "#000000", "bg": "steel"}], ["org-drill-visible-cloze-face", "visible cloze", {"fg": "gold", "bold": true}], ["org-drill-visible-cloze-hint-face", "visible cloze hint", {"fg": "pewter", "italic": true}]]}, "org-noter": {"label": "org-noter", "preview": "orgnoter", "faces": [["org-noter-notes-exist-face", "notes exist", {"fg": "sage"}], ["org-noter-no-notes-exist-face", "no notes exist", {"fg": "pewter"}]]}, "signel": {"label": "signel", "preview": "signel", "faces": [["signel-timestamp-face", "timestamp", {"fg": "pewter"}], ["signel-my-msg-face", "my msg", {"fg": "blue"}], ["signel-other-msg-face", "other msg", {"fg": "silver"}], ["signel-error-face", "error", {"fg": "terracotta", "bold": true}]]}, "pearl": {"label": "pearl", "preview": "pearl", "faces": [["pearl-preamble-summary", "preamble summary", {"fg": "blue", "bold": true}], ["pearl-editable-comment", "editable comment", {"fg": "silver"}], ["pearl-readonly-comment", "readonly comment", {"fg": "pewter", "italic": true}], ["pearl-modified-highlight", "modified highlight", {"bg": "navy"}], ["pearl-modified-local", "modified local", {"fg": "gold"}], ["pearl-modified-unknown", "modified unknown", {"fg": "pewter"}]]}, "slack": {"label": "slack", "preview": "slack", "faces": [["slack-room-info-title-face", "room info title", {"fg": "blue", "bold": true}], ["slack-room-info-title-room-name-face", "room info title room name", {"fg": "gold", "bold": true}], ["slack-room-info-section-title-face", "room info section title", {"fg": "blue", "bold": true}], ["slack-room-info-section-label-face", "room info section label", {"fg": "steel"}], ["slack-room-unread-face", "room unread", {"fg": "white", "bold": true}], ["slack-message-output-header", "message output header", {"fg": "blue", "bold": true}], ["slack-message-output-text", "message output text", {"fg": "#cdced1"}], ["slack-message-output-reaction", "message output reaction", {"fg": "steel"}], ["slack-message-output-reaction-pressed", "message output reaction pressed", {"fg": "gold", "bold": true}], ["slack-message-deleted-face", "message deleted", {"fg": "pewter", "italic": true}], ["slack-new-message-marker-face", "new message marker", {"fg": "terracotta", "bold": true}], ["slack-all-thread-buffer-thread-header-face", "all thread buffer thread header", {"fg": "blue", "bold": true}], ["slack-message-mention-face", "message mention", {"fg": "blue"}], ["slack-message-mention-me-face", "message mention me", {"fg": "gold", "bg": "navy", "bold": true}], ["slack-message-mention-keyword-face", "message mention keyword", {"fg": "gold", "bold": true}], ["slack-channel-button-face", "channel button", {"fg": "blue"}], ["slack-mrkdwn-bold-face", "mrkdwn bold", {"bold": true}], ["slack-mrkdwn-italic-face", "mrkdwn italic", {"italic": true}], ["slack-mrkdwn-code-face", "mrkdwn code", {"fg": "terracotta"}], ["slack-mrkdwn-code-block-face", "mrkdwn code block", {"fg": "terracotta", "bg": "bg-dim"}], ["slack-mrkdwn-strike-face", "mrkdwn strike", {"fg": "pewter", "strike": true}], ["slack-mrkdwn-blockquote-face", "mrkdwn blockquote", {"fg": "silver", "italic": true}], ["slack-mrkdwn-list-face", "mrkdwn list", {"fg": "silver"}], ["slack-attachment-header", "attachment header", {"fg": "blue", "bold": true}], ["slack-attachment-footer", "attachment footer", {"fg": "pewter"}], ["slack-attachment-pad", "attachment pad", {"fg": "pewter"}], ["slack-attachment-field-title", "attachment field title", {"fg": "steel", "bold": true}], ["slack-message-attachment-preview-header-face", "message attachment preview header", {"fg": "blue"}], ["slack-preview-face", "preview", {"fg": "silver"}], ["slack-block-highlight-source-overlay-face", "block highlight source overlay", {"bg": "bg-dim"}], ["slack-message-action-face", "message action", {"fg": "blue"}], ["slack-message-action-primary-face", "message action primary", {"fg": "sage"}], ["slack-message-action-danger-face", "message action danger", {"fg": "terracotta"}], ["slack-button-block-element-face", "button block element", {"fg": "silver"}], ["slack-button-primary-block-element-face", "button primary block element", {"fg": "sage", "bold": true}], ["slack-button-danger-block-element-face", "button danger block element", {"fg": "terracotta", "bold": true}], ["slack-select-block-element-face", "select block element", {"fg": "blue"}], ["slack-overflow-block-element-face", "overflow block element", {"fg": "steel"}], ["slack-date-picker-block-element-face", "date picker block element", {"fg": "blue"}], ["slack-dialog-title-face", "dialog title", {"fg": "blue", "bold": true}], ["slack-dialog-element-label-face", "dialog element label", {"fg": "steel"}], ["slack-dialog-element-hint-face", "dialog element hint", {"fg": "pewter", "italic": true}], ["slack-dialog-element-placeholder-face", "dialog element placeholder", {"fg": "pewter"}], ["slack-dialog-element-error-face", "dialog element error", {"fg": "terracotta"}], ["slack-dialog-submit-button-face", "dialog submit button", {"fg": "sage", "bold": true}], ["slack-dialog-cancel-button-face", "dialog cancel button", {"fg": "silver"}], ["slack-dialog-select-element-input-face", "dialog select element input", {"fg": "silver"}], ["slack-user-active-face", "user active", {"fg": "sage"}], ["slack-user-dnd-face", "user dnd", {"fg": "terracotta"}], ["slack-user-profile-header-face", "user profile header", {"fg": "blue", "bold": true}], ["slack-user-profile-property-name-face", "user profile property name", {"fg": "steel"}], ["slack-profile-image-face", "profile image", {"fg": "pewter"}], ["slack-search-result-message-header-face", "search result message header", {"fg": "blue"}], ["slack-search-result-message-username-face", "search result message username", {"fg": "gold", "bold": true}], ["slack-modeline-has-unreads-face", "modeline has unreads", {"fg": "gold"}], ["slack-modeline-channel-has-unreads-face", "modeline channel has unreads", {"fg": "gold", "bold": true}], ["slack-modeline-thread-has-unreads-face", "modeline thread has unreads", {"fg": "gold"}]]}, "telega": {"label": "telega", "preview": "telega", "faces": [["telega-root-heading", "root heading", {"fg": "blue", "bold": true}], ["telega-tracking", "tracking", {"fg": "gold"}], ["telega-unread-unmuted-modeline", "unread unmuted modeline", {"fg": "gold", "bold": true}], ["telega-username", "username", {"fg": "blue"}], ["telega-user-online-status", "user online status", {"fg": "sage"}], ["telega-user-non-online-status", "user non online status", {"fg": "pewter"}], ["telega-secret-title", "secret title", {"fg": "sage"}], ["telega-contact-birthdays-today", "contact birthdays today", {"fg": "gold"}], ["telega-muted-count", "muted count", {"fg": "pewter"}], ["telega-unmuted-count", "unmuted count", {"fg": "gold", "bold": true}], ["telega-mention-count", "mention count", {"fg": "gold", "bold": true}], ["telega-has-chatbuf-brackets", "has chatbuf brackets", {"fg": "steel"}], ["telega-delim-face", "delim", {"fg": "pewter"}], ["telega-shadow", "shadow", {"fg": "pewter"}], ["telega-link", "link", {"fg": "blue"}], ["telega-blue", "blue", {"fg": "blue"}], ["telega-red", "red", {"fg": "terracotta"}], ["telega-msg-heading", "msg heading", {"fg": "steel"}], ["telega-msg-user-title", "msg user title", {"fg": "blue", "bold": true}], ["telega-msg-self-title", "msg self title", {"fg": "gold", "bold": true}], ["telega-msg-deleted", "msg deleted", {"fg": "pewter", "italic": true}], ["telega-msg-sponsored", "msg sponsored", {"fg": "pewter", "italic": true}], ["telega-msg-inline-reply", "msg inline reply", {"fg": "steel"}], ["telega-msg-inline-forward", "msg inline forward", {"fg": "sage"}], ["telega-msg-inline-other", "msg inline other", {"fg": "pewter"}], ["telega-entity-type-bold", "entity type bold", {"bold": true}], ["telega-entity-type-italic", "entity type italic", {"italic": true}], ["telega-entity-type-underline", "entity type underline", {"fg": "silver", "underline": true}], ["telega-entity-type-strikethrough", "entity type strikethrough", {"fg": "pewter", "strike": true}], ["telega-entity-type-code", "entity type code", {"fg": "terracotta"}], ["telega-entity-type-pre", "entity type pre", {"fg": "terracotta", "bg": "bg-dim"}], ["telega-entity-type-blockquote", "entity type blockquote", {"fg": "silver", "italic": true}], ["telega-entity-type-mention", "entity type mention", {"fg": "blue"}], ["telega-entity-type-hashtag", "entity type hashtag", {"fg": "blue"}], ["telega-entity-type-cashtag", "entity type cashtag", {"fg": "sage"}], ["telega-entity-type-botcommand", "entity type botcommand", {"fg": "sage"}], ["telega-entity-type-texturl", "entity type texturl", {"fg": "blue"}], ["telega-entity-type-spoiler", "entity type spoiler", {"fg": "gunmetal", "bg": "gunmetal"}], ["telega-reaction", "reaction", {"fg": "steel"}], ["telega-reaction-chosen", "reaction chosen", {"fg": "gold", "bold": true}], ["telega-reaction-paid", "reaction paid", {"fg": "gold"}], ["telega-reaction-paid-chosen", "reaction paid chosen", {"fg": "gold", "bold": true}], ["telega-highlight-text-face", "highlight text", {"fg": "#000000", "bg": "gold"}], ["telega-button-highlight", "button highlight", {"fg": "gold", "bold": true}], ["telega-chat-prompt", "chat prompt", {"fg": "blue", "bold": true}], ["telega-chat-prompt-aux", "chat prompt aux", {"fg": "steel"}], ["telega-chat-input-attachment", "chat input attachment", {"fg": "sage"}], ["telega-topic-button", "topic button", {"fg": "blue"}], ["telega-filter-active", "filter active", {"fg": "gold", "bold": true}], ["telega-filter-button-active", "filter button active", {"fg": "#000000", "bg": "gold"}], ["telega-filter-button-inactive", "filter button inactive", {"fg": "steel"}], ["telega-checklist-stats-done", "checklist stats done", {"fg": "sage"}], ["telega-checklist-stats-todo", "checklist stats todo", {"fg": "steel"}], ["telega-box-button", "box button", {"fg": "blue"}], ["telega-box-button-active", "box button active", {"fg": "#000000", "bg": "blue"}], ["telega-box-button-default-active", "box button default active", {"fg": "#000000", "bg": "silver"}], ["telega-box-button-default-passive", "box button default passive", {"fg": "steel"}], ["telega-box-button-primary-active", "box button primary active", {"fg": "#000000", "bg": "blue"}], ["telega-box-button-primary-passive", "box button primary passive", {"fg": "blue"}], ["telega-box-button-success-active", "box button success active", {"fg": "#000000", "bg": "emerald"}], ["telega-box-button-success-passive", "box button success passive", {"fg": "sage"}], ["telega-box-button-danger-active", "box button danger active", {"fg": "#000000", "bg": "terracotta"}], ["telega-box-button-danger-passive", "box button danger passive", {"fg": "terracotta"}], ["telega-box-button-ui-active", "box button ui active", {"fg": "#000000", "bg": "gold"}], ["telega-box-button-ui-passive", "box button ui passive", {"fg": "gold"}], ["telega-box-button2-active", "box button2 active", {"fg": "#000000", "bg": "blue"}], ["telega-box-button2-passive", "box button2 passive", {"fg": "steel"}], ["telega-box-button2-white-foreground", "box button2 white foreground", {"fg": "white"}], ["telega-describe-item-title", "describe item title", {"fg": "steel", "bold": true}], ["telega-describe-section-title", "describe section title", {"fg": "blue", "bold": true}], ["telega-describe-subsection-title", "describe subsection title", {"fg": "blue"}], ["telega-enckey-00", "enckey 00", {"fg": "pewter"}], ["telega-enckey-01", "enckey 01", {"fg": "sage"}], ["telega-enckey-10", "enckey 10", {"fg": "gold"}], ["telega-enckey-11", "enckey 11", {"fg": "blue"}], ["telega-palette-builtin-blue", "palette builtin blue", {"fg": "blue"}], ["telega-palette-builtin-green", "palette builtin green", {"fg": "emerald"}], ["telega-palette-builtin-orange", "palette builtin orange", {"fg": "terracotta"}], ["telega-palette-builtin-purple", "palette builtin purple", {"fg": "regal"}], ["telega-webpage-title", "webpage title", {"fg": "blue", "bold": true}], ["telega-webpage-subtitle", "webpage subtitle", {"fg": "steel"}], ["telega-webpage-header", "webpage header", {"fg": "gold", "bold": true}], ["telega-webpage-subheader", "webpage subheader", {"fg": "gold"}], ["telega-webpage-outline", "webpage outline", {"fg": "pewter"}], ["telega-webpage-fixed", "webpage fixed", {"fg": "terracotta"}], ["telega-webpage-preformatted", "webpage preformatted", {"fg": "terracotta", "bg": "bg-dim"}], ["telega-webpage-marked", "webpage marked", {"fg": "#000000", "bg": "gold"}], ["telega-webpage-strike-through", "webpage strike through", {"fg": "pewter", "strike": true}], ["telega-webpage-chat-link", "webpage chat link", {"fg": "blue"}], ["telega-link-preview-sitename", "link preview sitename", {"fg": "steel"}], ["telega-link-preview-title", "link preview title", {"fg": "blue", "bold": true}]]}, "shr": {"label": "shr (HTML: nov/eww/mail)", "preview": "shr", "faces": [["shr-h1", "h1", {"fg": "gold", "bold": true, "height": 1.4}], ["shr-h2", "h2", {"fg": "blue", "bold": true, "height": 1.2}], ["shr-h3", "h3", {"fg": "blue", "bold": true}], ["shr-h4", "h4", {"fg": "silver", "bold": true}], ["shr-h5", "h5", {"fg": "steel", "bold": true}], ["shr-h6", "h6", {"fg": "pewter", "bold": true}], ["shr-text", "text", {"fg": "#cdced1"}], ["shr-link", "link", {"fg": "blue", "underline": true}], ["shr-selected-link", "selected link", {"fg": "gold", "bold": true, "underline": true}], ["shr-code", "code", {"fg": "terracotta", "bg": "bg-dim"}], ["shr-mark", "mark", {"fg": "#000000", "bg": "gold"}], ["shr-strike-through", "strike through", {"fg": "pewter", "strike": true}], ["shr-sup", "sup", {"fg": "steel"}], ["shr-abbreviation", "abbreviation", {"fg": "steel", "italic": true}], ["shr-sliced-image", "sliced image", {"fg": "pewter"}]]}, "2048-game": {"label": "2048-game", "preview": "generic", "faces": [["twentyfortyeight-face-1024", "twentyfortyeight 1024", {}], ["twentyfortyeight-face-128", "twentyfortyeight 128", {}], ["twentyfortyeight-face-16", "twentyfortyeight 16", {}], ["twentyfortyeight-face-2", "twentyfortyeight 2", {}], ["twentyfortyeight-face-2048", "twentyfortyeight 2048", {}], ["twentyfortyeight-face-256", "twentyfortyeight 256", {}], ["twentyfortyeight-face-32", "twentyfortyeight 32", {}], ["twentyfortyeight-face-4", "twentyfortyeight 4", {}], ["twentyfortyeight-face-512", "twentyfortyeight 512", {}], ["twentyfortyeight-face-64", "twentyfortyeight 64", {}], ["twentyfortyeight-face-8", "twentyfortyeight 8", {}]]}, "alert": {"label": "alert", "preview": "generic", "faces": [["alert-high-face", "high", {}], ["alert-low-face", "low", {}], ["alert-moderate-face", "moderate", {}], ["alert-normal-face", "normal", {}], ["alert-trivial-face", "trivial", {}], ["alert-urgent-face", "urgent", {}]]}, "all-the-icons": {"label": "all-the-icons", "preview": "generic", "faces": [["all-the-icons-blue", "blue", {}], ["all-the-icons-blue-alt", "blue alt", {}], ["all-the-icons-cyan", "cyan", {}], ["all-the-icons-cyan-alt", "cyan alt", {}], ["all-the-icons-dblue", "dblue", {}], ["all-the-icons-dcyan", "dcyan", {}], ["all-the-icons-dgreen", "dgreen", {}], ["all-the-icons-dmaroon", "dmaroon", {}], ["all-the-icons-dorange", "dorange", {}], ["all-the-icons-dpink", "dpink", {}], ["all-the-icons-dpurple", "dpurple", {}], ["all-the-icons-dred", "dred", {}], ["all-the-icons-dsilver", "dsilver", {}], ["all-the-icons-dyellow", "dyellow", {}], ["all-the-icons-green", "green", {}], ["all-the-icons-lblue", "lblue", {}], ["all-the-icons-lcyan", "lcyan", {}], ["all-the-icons-lgreen", "lgreen", {}], ["all-the-icons-lmaroon", "lmaroon", {}], ["all-the-icons-lorange", "lorange", {}], ["all-the-icons-lpink", "lpink", {}], ["all-the-icons-lpurple", "lpurple", {}], ["all-the-icons-lred", "lred", {}], ["all-the-icons-lsilver", "lsilver", {}], ["all-the-icons-lyellow", "lyellow", {}], ["all-the-icons-maroon", "maroon", {}], ["all-the-icons-orange", "orange", {}], ["all-the-icons-pink", "pink", {}], ["all-the-icons-purple", "purple", {}], ["all-the-icons-purple-alt", "purple alt", {}], ["all-the-icons-red", "red", {}], ["all-the-icons-red-alt", "red alt", {}], ["all-the-icons-silver", "silver", {}], ["all-the-icons-yellow", "yellow", {}]]}, "company": {"label": "company", "preview": "generic", "faces": [["company-echo", "echo", {}], ["company-echo-common", "echo common", {}], ["company-preview", "preview", {}], ["company-preview-common", "preview common", {}], ["company-preview-search", "preview search", {}], ["company-tooltip", "tooltip", {}], ["company-tooltip-annotation", "tooltip annotation", {}], ["company-tooltip-annotation-selection", "tooltip annotation selection", {}], ["company-tooltip-common", "tooltip common", {}], ["company-tooltip-common-selection", "tooltip common selection", {}], ["company-tooltip-deprecated", "tooltip deprecated", {}], ["company-tooltip-mouse", "tooltip mouse", {}], ["company-tooltip-quick-access", "tooltip quick access", {}], ["company-tooltip-quick-access-selection", "tooltip quick access selection", {}], ["company-tooltip-scrollbar-thumb", "tooltip scrollbar thumb", {}], ["company-tooltip-scrollbar-track", "tooltip scrollbar track", {}], ["company-tooltip-search", "tooltip search", {}], ["company-tooltip-search-selection", "tooltip search selection", {}], ["company-tooltip-selection", "tooltip selection", {}]]}, "company-box": {"label": "company-box", "preview": "generic", "faces": [["company-box-annotation", "annotation", {}], ["company-box-background", "background", {}], ["company-box-candidate", "candidate", {}], ["company-box-numbers", "numbers", {}], ["company-box-scrollbar", "scrollbar", {}], ["company-box-selection", "selection", {}]]}, "consult": {"label": "consult", "preview": "generic", "faces": [["consult-async-failed", "async failed", {}], ["consult-async-finished", "async finished", {}], ["consult-async-running", "async running", {}], ["consult-async-split", "async split", {}], ["consult-bookmark", "bookmark", {}], ["consult-buffer", "buffer", {}], ["consult-file", "file", {}], ["consult-grep-context", "grep context", {}], ["consult-help", "help", {}], ["consult-highlight-mark", "highlight mark", {}], ["consult-highlight-match", "highlight match", {}], ["consult-key", "key", {}], ["consult-line-number", "line number", {}], ["consult-line-number-prefix", "line number prefix", {}], ["consult-line-number-wrapped", "line number wrapped", {}], ["consult-narrow-indicator", "narrow indicator", {}], ["consult-preview-insertion", "preview insertion", {}], ["consult-preview-line", "preview line", {}], ["consult-preview-match", "preview match", {}], ["consult-separator", "separator", {}]]}, "embark": {"label": "embark", "preview": "generic", "faces": [["embark-collect-annotation", "collect annotation", {}], ["embark-collect-candidate", "collect candidate", {}], ["embark-collect-group-separator", "collect group separator", {}], ["embark-collect-group-title", "collect group title", {}], ["embark-keybinding", "keybinding", {}], ["embark-keybinding-repeat", "keybinding repeat", {}], ["embark-keymap", "keymap", {}], ["embark-selected", "selected", {}], ["embark-target", "target", {}], ["embark-verbose-indicator-documentation", "verbose indicator documentation", {}], ["embark-verbose-indicator-shadowed", "verbose indicator shadowed", {}], ["embark-verbose-indicator-title", "verbose indicator title", {}]]}, "emms": {"label": "emms", "preview": "generic", "faces": [["emms-browser-album-face", "browser album", {}], ["emms-browser-albumartist-face", "browser albumartist", {}], ["emms-browser-artist-face", "browser artist", {}], ["emms-browser-composer-face", "browser composer", {}], ["emms-browser-performer-face", "browser performer", {}], ["emms-browser-track-face", "browser track", {}], ["emms-browser-year/genre-face", "browser year/genre", {}], ["emms-metaplaylist-mode-current-face", "metaplaylist mode current", {}], ["emms-metaplaylist-mode-face", "metaplaylist mode", {}], ["emms-playlist-selected-face", "playlist selected", {}], ["emms-playlist-track-face", "playlist track", {}]]}, "flyspell-correct": {"label": "flyspell-correct", "preview": "generic", "faces": [["flyspell-correct-highlight-face", "highlight", {}]]}, "highlight-indent-guides": {"label": "highlight-indent-guides", "preview": "generic", "faces": [["highlight-indent-guides-character-face", "character", {}], ["highlight-indent-guides-even-face", "even", {}], ["highlight-indent-guides-odd-face", "odd", {}], ["highlight-indent-guides-stack-character-face", "stack character", {}], ["highlight-indent-guides-stack-even-face", "stack even", {}], ["highlight-indent-guides-stack-odd-face", "stack odd", {}], ["highlight-indent-guides-top-character-face", "top character", {}], ["highlight-indent-guides-top-even-face", "top even", {}], ["highlight-indent-guides-top-odd-face", "top odd", {}]]}, "hl-todo": {"label": "hl-todo", "preview": "generic", "faces": [["hl-todo", "hl todo", {}], ["hl-todo-flymake-type", "flymake type", {}]]}, "json-mode": {"label": "json-mode", "preview": "generic", "faces": [["json-mode-object-name-face", "object name", {}]]}, "llama": {"label": "llama", "preview": "generic", "faces": [["llama-##-macro", "## macro", {}], ["llama-deleted-argument", "deleted argument", {}], ["llama-llama-macro", "llama macro", {}], ["llama-mandatory-argument", "mandatory argument", {}], ["llama-optional-argument", "optional argument", {}]]}, "lv": {"label": "lv", "preview": "generic", "faces": [["lv-separator", "separator", {}]]}, "magit-section": {"label": "magit-section", "preview": "generic", "faces": [["magit-left-margin", "magit left margin", {}], ["magit-section-child-count", "child count", {}], ["magit-section-heading", "heading", {}], ["magit-section-heading-selection", "heading selection", {}], ["magit-section-highlight", "highlight", {}], ["magit-section-secondary-heading", "secondary heading", {}]]}, "malyon": {"label": "malyon", "preview": "generic", "faces": [["malyon-face-bold", "face bold", {}], ["malyon-face-error", "face error", {}], ["malyon-face-italic", "face italic", {}], ["malyon-face-plain", "face plain", {}], ["malyon-face-reverse", "face reverse", {}]]}, "marginalia": {"label": "marginalia", "preview": "generic", "faces": [["marginalia-archive", "archive", {}], ["marginalia-char", "char", {}], ["marginalia-date", "date", {}], ["marginalia-documentation", "documentation", {}], ["marginalia-file-name", "file name", {}], ["marginalia-file-owner", "file owner", {}], ["marginalia-file-priv-dir", "file priv dir", {}], ["marginalia-file-priv-exec", "file priv exec", {}], ["marginalia-file-priv-link", "file priv link", {}], ["marginalia-file-priv-no", "file priv no", {}], ["marginalia-file-priv-other", "file priv other", {}], ["marginalia-file-priv-rare", "file priv rare", {}], ["marginalia-file-priv-read", "file priv read", {}], ["marginalia-file-priv-write", "file priv write", {}], ["marginalia-function", "function", {}], ["marginalia-installed", "installed", {}], ["marginalia-key", "key", {}], ["marginalia-lighter", "lighter", {}], ["marginalia-list", "list", {}], ["marginalia-mode", "mode", {}], ["marginalia-modified", "modified", {}], ["marginalia-null", "null", {}], ["marginalia-number", "number", {}], ["marginalia-off", "off", {}], ["marginalia-on", "on", {}], ["marginalia-size", "size", {}], ["marginalia-string", "string", {}], ["marginalia-symbol", "symbol", {}], ["marginalia-true", "true", {}], ["marginalia-type", "type", {}], ["marginalia-value", "value", {}], ["marginalia-version", "version", {}]]}, "markdown-mode": {"label": "markdown-mode", "preview": "generic", "faces": [["markdown-blockquote-face", "markdown blockquote", {}], ["markdown-bold-face", "markdown bold", {}], ["markdown-code-face", "markdown code", {}], ["markdown-comment-face", "markdown comment", {}], ["markdown-footnote-marker-face", "markdown footnote marker", {}], ["markdown-footnote-text-face", "markdown footnote text", {}], ["markdown-gfm-checkbox-face", "markdown gfm checkbox", {}], ["markdown-header-delimiter-face", "markdown header delimiter", {}], ["markdown-header-face", "markdown header", {}], ["markdown-header-face-1", "markdown header 1", {}], ["markdown-header-face-2", "markdown header 2", {}], ["markdown-header-face-3", "markdown header 3", {}], ["markdown-header-face-4", "markdown header 4", {}], ["markdown-header-face-5", "markdown header 5", {}], ["markdown-header-face-6", "markdown header 6", {}], ["markdown-header-rule-face", "markdown header rule", {}], ["markdown-highlight-face", "markdown highlight", {}], ["markdown-highlighting-face", "markdown highlighting", {}], ["markdown-hr-face", "markdown hr", {}], ["markdown-html-attr-name-face", "markdown html attr name", {}], ["markdown-html-attr-value-face", "markdown html attr value", {}], ["markdown-html-entity-face", "markdown html entity", {}], ["markdown-html-tag-delimiter-face", "markdown html tag delimiter", {}], ["markdown-html-tag-name-face", "markdown html tag name", {}], ["markdown-inline-code-face", "markdown inline code", {}], ["markdown-italic-face", "markdown italic", {}], ["markdown-language-info-face", "markdown language info", {}], ["markdown-language-keyword-face", "markdown language keyword", {}], ["markdown-line-break-face", "markdown line break", {}], ["markdown-link-face", "markdown link", {}], ["markdown-link-title-face", "markdown link title", {}], ["markdown-list-face", "markdown list", {}], ["markdown-markup-face", "markdown markup", {}], ["markdown-math-face", "markdown math", {}], ["markdown-metadata-key-face", "markdown metadata key", {}], ["markdown-metadata-value-face", "markdown metadata value", {}], ["markdown-missing-link-face", "markdown missing link", {}], ["markdown-plain-url-face", "markdown plain url", {}], ["markdown-pre-face", "markdown pre", {}], ["markdown-reference-face", "markdown reference", {}], ["markdown-strike-through-face", "markdown strike through", {}], ["markdown-table-face", "markdown table", {}], ["markdown-url-face", "markdown url", {}]]}, "nerd-icons": {"label": "nerd-icons", "preview": "generic", "faces": [["nerd-icons-blue", "blue", {}], ["nerd-icons-blue-alt", "blue alt", {}], ["nerd-icons-cyan", "cyan", {}], ["nerd-icons-cyan-alt", "cyan alt", {}], ["nerd-icons-dblue", "dblue", {}], ["nerd-icons-dcyan", "dcyan", {}], ["nerd-icons-dgreen", "dgreen", {}], ["nerd-icons-dmaroon", "dmaroon", {}], ["nerd-icons-dorange", "dorange", {}], ["nerd-icons-dpink", "dpink", {}], ["nerd-icons-dpurple", "dpurple", {}], ["nerd-icons-dred", "dred", {}], ["nerd-icons-dsilver", "dsilver", {}], ["nerd-icons-dyellow", "dyellow", {}], ["nerd-icons-green", "green", {}], ["nerd-icons-lblue", "lblue", {}], ["nerd-icons-lcyan", "lcyan", {}], ["nerd-icons-lgreen", "lgreen", {}], ["nerd-icons-lmaroon", "lmaroon", {}], ["nerd-icons-lorange", "lorange", {}], ["nerd-icons-lpink", "lpink", {}], ["nerd-icons-lpurple", "lpurple", {}], ["nerd-icons-lred", "lred", {}], ["nerd-icons-lsilver", "lsilver", {}], ["nerd-icons-lyellow", "lyellow", {}], ["nerd-icons-maroon", "maroon", {}], ["nerd-icons-orange", "orange", {}], ["nerd-icons-pink", "pink", {}], ["nerd-icons-purple", "purple", {}], ["nerd-icons-purple-alt", "purple alt", {}], ["nerd-icons-red", "red", {}], ["nerd-icons-red-alt", "red alt", {}], ["nerd-icons-silver", "silver", {}], ["nerd-icons-yellow", "yellow", {}]]}, "nerd-icons-completion": {"label": "nerd-icons-completion", "preview": "generic", "faces": [["nerd-icons-completion-dir-face", "dir", {}]]}, "orderless": {"label": "orderless", "preview": "generic", "faces": [["orderless-match-face-0", "match 0", {}], ["orderless-match-face-1", "match 1", {}], ["orderless-match-face-2", "match 2", {}], ["orderless-match-face-3", "match 3", {}]]}, "org-roam": {"label": "org-roam", "preview": "generic", "faces": [["org-roam-dailies-calendar-note", "dailies calendar note", {}], ["org-roam-dim", "dim", {}], ["org-roam-header-line", "header line", {}], ["org-roam-olp", "olp", {}], ["org-roam-preview-heading", "preview heading", {}], ["org-roam-preview-heading-highlight", "preview heading highlight", {}], ["org-roam-preview-heading-selection", "preview heading selection", {}], ["org-roam-preview-region", "preview region", {}], ["org-roam-title", "title", {}]]}, "org-superstar": {"label": "org-superstar", "preview": "generic", "faces": [["org-superstar-first", "first", {}], ["org-superstar-header-bullet", "header bullet", {}], ["org-superstar-item", "item", {}], ["org-superstar-leading", "leading", {}]]}, "prescient": {"label": "prescient", "preview": "generic", "faces": [["prescient-primary-highlight", "primary highlight", {}], ["prescient-secondary-highlight", "secondary highlight", {}]]}, "rainbow-delimiters": {"label": "rainbow-delimiters", "preview": "generic", "faces": [["rainbow-delimiters-base-error-face", "base error", {}], ["rainbow-delimiters-base-face", "base", {}], ["rainbow-delimiters-depth-1-face", "depth 1", {}], ["rainbow-delimiters-depth-2-face", "depth 2", {}], ["rainbow-delimiters-depth-3-face", "depth 3", {}], ["rainbow-delimiters-depth-4-face", "depth 4", {}], ["rainbow-delimiters-depth-5-face", "depth 5", {}], ["rainbow-delimiters-depth-6-face", "depth 6", {}], ["rainbow-delimiters-depth-7-face", "depth 7", {}], ["rainbow-delimiters-depth-8-face", "depth 8", {}], ["rainbow-delimiters-depth-9-face", "depth 9", {}], ["rainbow-delimiters-mismatched-face", "mismatched", {}], ["rainbow-delimiters-unmatched-face", "unmatched", {}]]}, "symbol-overlay": {"label": "symbol-overlay", "preview": "generic", "faces": [["symbol-overlay-default-face", "default", {}], ["symbol-overlay-face-1", "face 1", {}], ["symbol-overlay-face-2", "face 2", {}], ["symbol-overlay-face-3", "face 3", {}], ["symbol-overlay-face-4", "face 4", {}], ["symbol-overlay-face-5", "face 5", {}], ["symbol-overlay-face-6", "face 6", {}], ["symbol-overlay-face-7", "face 7", {}], ["symbol-overlay-face-8", "face 8", {}]]}, "tmr": {"label": "tmr", "preview": "generic", "faces": [["tmr-description", "description", {}], ["tmr-duration", "duration", {}], ["tmr-end-time", "end time", {}], ["tmr-finished", "finished", {}], ["tmr-is-acknowledged", "is acknowledged", {}], ["tmr-must-be-acknowledged", "must be acknowledged", {}], ["tmr-start-time", "start time", {}], ["tmr-tabulated-acknowledgement", "tabulated acknowledgement", {}], ["tmr-tabulated-description", "tabulated description", {}], ["tmr-tabulated-end-time", "tabulated end time", {}], ["tmr-tabulated-remaining-time", "tabulated remaining time", {}], ["tmr-tabulated-start-time", "tabulated start time", {}]]}, "transient": {"label": "transient", "preview": "generic", "faces": [["transient-active-infix", "active infix", {}], ["transient-argument", "argument", {}], ["transient-delimiter", "delimiter", {}], ["transient-disabled-suffix", "disabled suffix", {}], ["transient-enabled-suffix", "enabled suffix", {}], ["transient-heading", "heading", {}], ["transient-higher-level", "higher level", {}], ["transient-inactive-argument", "inactive argument", {}], ["transient-inactive-value", "inactive value", {}], ["transient-inapt-argument", "inapt argument", {}], ["transient-inapt-suffix", "inapt suffix", {}], ["transient-key", "key", {}], ["transient-key-exit", "key exit", {}], ["transient-key-noop", "key noop", {}], ["transient-key-recurse", "key recurse", {}], ["transient-key-return", "key return", {}], ["transient-key-stack", "key stack", {}], ["transient-key-stay", "key stay", {}], ["transient-mismatched-key", "mismatched key", {}], ["transient-nonstandard-key", "nonstandard key", {}], ["transient-unreachable", "unreachable", {}], ["transient-unreachable-key", "unreachable key", {}], ["transient-value", "value", {}]]}, "vertico": {"label": "vertico", "preview": "generic", "faces": [["vertico-current", "current", {}], ["vertico-group-separator", "group separator", {}], ["vertico-group-title", "group title", {}], ["vertico-multiline", "multiline", {}]]}, "web-mode": {"label": "web-mode", "preview": "generic", "faces": [["web-mode-annotation-face", "annotation", {}], ["web-mode-annotation-html-face", "annotation html", {}], ["web-mode-annotation-tag-face", "annotation tag", {}], ["web-mode-annotation-type-face", "annotation type", {}], ["web-mode-annotation-value-face", "annotation value", {}], ["web-mode-block-attr-name-face", "block attr name", {}], ["web-mode-block-attr-value-face", "block attr value", {}], ["web-mode-block-comment-face", "block comment", {}], ["web-mode-block-control-face", "block control", {}], ["web-mode-block-delimiter-face", "block delimiter", {}], ["web-mode-block-face", "block", {}], ["web-mode-block-string-face", "block string", {}], ["web-mode-bold-face", "bold", {}], ["web-mode-builtin-face", "builtin", {}], ["web-mode-comment-face", "comment", {}], ["web-mode-comment-keyword-face", "comment keyword", {}], ["web-mode-constant-face", "constant", {}], ["web-mode-css-at-rule-face", "css at rule", {}], ["web-mode-css-color-face", "css color", {}], ["web-mode-css-comment-face", "css comment", {}], ["web-mode-css-function-face", "css function", {}], ["web-mode-css-priority-face", "css priority", {}], ["web-mode-css-property-name-face", "css property name", {}], ["web-mode-css-pseudo-class-face", "css pseudo class", {}], ["web-mode-css-selector-class-face", "css selector class", {}], ["web-mode-css-selector-face", "css selector", {}], ["web-mode-css-selector-tag-face", "css selector tag", {}], ["web-mode-css-string-face", "css string", {}], ["web-mode-css-variable-face", "css variable", {}], ["web-mode-current-column-highlight-face", "current column highlight", {}], ["web-mode-current-element-highlight-face", "current element highlight", {}], ["web-mode-doctype-face", "doctype", {}], ["web-mode-error-face", "error", {}], ["web-mode-filter-face", "filter", {}], ["web-mode-folded-face", "folded", {}], ["web-mode-function-call-face", "function call", {}], ["web-mode-function-name-face", "function name", {}], ["web-mode-html-attr-custom-face", "html attr custom", {}], ["web-mode-html-attr-engine-face", "html attr engine", {}], ["web-mode-html-attr-equal-face", "html attr equal", {}], ["web-mode-html-attr-name-face", "html attr name", {}], ["web-mode-html-attr-value-face", "html attr value", {}], ["web-mode-html-entity-face", "html entity", {}], ["web-mode-html-tag-bracket-face", "html tag bracket", {}], ["web-mode-html-tag-custom-face", "html tag custom", {}], ["web-mode-html-tag-face", "html tag", {}], ["web-mode-html-tag-namespaced-face", "html tag namespaced", {}], ["web-mode-html-tag-unclosed-face", "html tag unclosed", {}], ["web-mode-inlay-face", "inlay", {}], ["web-mode-interpolate-color1-face", "interpolate color1", {}], ["web-mode-interpolate-color2-face", "interpolate color2", {}], ["web-mode-interpolate-color3-face", "interpolate color3", {}], ["web-mode-interpolate-color4-face", "interpolate color4", {}], ["web-mode-italic-face", "italic", {}], ["web-mode-javascript-comment-face", "javascript comment", {}], ["web-mode-javascript-string-face", "javascript string", {}], ["web-mode-json-comment-face", "json comment", {}], ["web-mode-json-context-face", "json context", {}], ["web-mode-json-key-face", "json key", {}], ["web-mode-json-string-face", "json string", {}], ["web-mode-jsx-depth-1-face", "jsx depth 1", {}], ["web-mode-jsx-depth-2-face", "jsx depth 2", {}], ["web-mode-jsx-depth-3-face", "jsx depth 3", {}], ["web-mode-jsx-depth-4-face", "jsx depth 4", {}], ["web-mode-jsx-depth-5-face", "jsx depth 5", {}], ["web-mode-keyword-face", "keyword", {}], ["web-mode-param-name-face", "param name", {}], ["web-mode-part-comment-face", "part comment", {}], ["web-mode-part-face", "part", {}], ["web-mode-part-string-face", "part string", {}], ["web-mode-preprocessor-face", "preprocessor", {}], ["web-mode-script-face", "script", {}], ["web-mode-sql-keyword-face", "sql keyword", {}], ["web-mode-string-face", "string", {}], ["web-mode-style-face", "style", {}], ["web-mode-symbol-face", "symbol", {}], ["web-mode-type-face", "type", {}], ["web-mode-underline-face", "underline", {}], ["web-mode-variable-name-face", "variable name", {}], ["web-mode-warning-face", "warning", {}], ["web-mode-whitespace-face", "whitespace", {}]]}, "yasnippet": {"label": "yasnippet", "preview": "generic", "faces": [["yas--field-debug-face", "yas field debug", {}], ["yas-field-highlight-face", "yas field highlight", {}]]}};
let MAP={"kw": "#67809c", "bi": "#67809c", "pp": "#67809c", "fnd": "#a9b2bb", "fnc": "#a9b2bb", "dec": "#e8bd30", "ty": "#9b5fd0", "prop": "#838d97", "con": "#cb6b4d", "num": "#cb6b4d", "esc": "#cb6b4d", "str": "#5d9b86", "re": "#5d9b86", "doc": "#5d9b86", "cm": "#be9e74", "cmd": "#a9b2bb", "var": "#e8bd30", "op": "#a9b2bb", "punc": "#a9b2bb", "p": "#ffffff", "bg": "#000000"}, PALETTE=[["#67809c", "blue"], ["#e8bd30", "gold"], ["#9b5fd0", "regal"], ["#2ba178", "emerald"], ["#5d9b86", "sage"], ["#cb6b4d", "terracotta"], ["#be9e74", "tan"], ["#ffffff", "white"], ["#a9b2bb", "silver"], ["#838d97", "steel"], ["#5e6770", "pewter"], ["#2f343a", "gunmetal"], ["#264364", "navy"], ["#000000", "ground"], ["#1a1714", "bg-dim"]], BOLD={"kw": true, "bi": false, "pp": false, "fnd": true, "fnc": false, "dec": false, "ty": false, "prop": false, "con": false, "num": false, "esc": false, "str": false, "re": false, "doc": false, "cm": false, "cmd": false, "var": false, "op": false, "punc": false, "p": false}, ITALIC={}, UIMAP={"cursor": {"fg": null, "bg": "#a9b2bb"}, "region": {"fg": null, "bg": "#264364"}, "hl-line": {"fg": null, "bg": "#1a1714"}, "highlight": {"fg": null, "bg": "#2f343a"}, "mode-line": {"fg": "#cdced1", "bg": "#2f343a"}, "mode-line-inactive": {"fg": "#838d97", "bg": "#1a1714"}, "fringe": {"fg": null, "bg": "#0d0b0a"}, "line-number": {"fg": "#5e6770", "bg": null}, "line-number-current-line": {"fg": "#e8bd30", "bg": "#1a1714"}, "minibuffer-prompt": {"fg": "#67809c", "bg": null}, "isearch": {"fg": "#0d0b0a", "bg": "#e8bd30"}, "lazy-highlight": {"fg": "#0d0b0a", "bg": "#838d97"}, "isearch-fail": {"fg": "#cb6b4d", "bg": null}, "show-paren-match": {"fg": null, "bg": "#264364"}, "show-paren-mismatch": {"fg": "#0d0b0a", "bg": "#cb6b4d"}, "link": {"fg": "#67809c", "bg": null, "underline": true}, "error": {"fg": "#cb6b4d", "bg": null}, "warning": {"fg": "#e8bd30", "bg": null}, "success": {"fg": "#5d9b86", "bg": null}, "vertical-border": {"fg": "#2f343a", "bg": null}};
+const DELTAE_MIN=0.02; // OKLab ΔE below this = colors too close to tell apart (perceptual-metrics spec)
// --- tier-3 package faces: pure state helpers (Phase 1) ---
function pname(n){if(!n)return null;if(/^#/.test(n))return n;const p=PALETTE.find(p=>p[1]===n);return p?p[0]:null;}
function seedPkgmap(){const m={};for(const app in APPS){m[app]={};for(const row of APPS[app].faces){const face=row[0],d=row[2]||{};m[app][face]={fg:pname(d.fg),bg:pname(d.bg),bold:!!d.bold,italic:!!d.italic,underline:!!d.underline,strike:!!d.strike,inherit:d.inherit||null,height:d.height||1,source:'default'};}}return m;}
@@ -142,11 +168,201 @@ function packagesForExport(map){const out={};for(const app in map){const faces={
function mergePackagesInto(map,pkgs){if(!pkgs)return;for(const app in pkgs){if(!map[app])map[app]={};for(const face in pkgs[app]){const f=pkgs[app][face]||{};map[app][face]={fg:f.fg??null,bg:f.bg??null,bold:!!f.bold,italic:!!f.italic,underline:!!f.underline,strike:!!f.strike,inherit:f.inherit??null,height:f.height||1,source:f.source||'user'};}}}
let PKGMAP=seedPkgmap();
function esc(t){return t.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');}
-function lin(c){c/=255;return c<=0.03928?c/12.92:Math.pow((c+0.055)/1.055,2.4);}
-function rl(h){return 0.2126*lin(parseInt(h.substr(1,2),16))+0.7152*lin(parseInt(h.substr(3,2),16))+0.0722*lin(parseInt(h.substr(5,2),16));}
+// Pure color-math core (lin/rl/contrast/rating/hsv2rgb/rgb2hsv/hex2rgb/rgb2hex,
+// plus OKLab/OKLCH/APCA/deltaE), inlined verbatim from colormath.js. normHex,
+// textOn, and ratingColor stay below as UI-boundary helpers.
+// colormath.js — pure color-math core for theme-studio.
+//
+// One source of truth: node imports this module (tests); generate.py inlines its
+// body into the page (stripping the trailing export block) so the browser runs
+// the same code. No DOM, no side effects.
+//
+// Algorithms: OKLab/OKLCH from Bjorn Ottosson (2020,
+// https://bottosson.github.io/posts/oklab/); APCA from APCA-W3 0.1.9
+// (https://github.com/Myndex/apca-w3); deltaE is OKLab Euclidean distance.
+
+function hex2rgb(h) {
+ return [parseInt(h.substr(1, 2), 16), parseInt(h.substr(3, 2), 16), parseInt(h.substr(5, 2), 16)];
+}
+
+// sRGB transfer (0..1 channel <-> linear-light).
+function lin(c) { return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4); }
+function delin(c) { return c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055; }
+function clamp01(c) { return c < 0 ? 0 : c > 1 ? 1 : c; }
+
+function srgb2oklab(hex) {
+ const [R, G, B] = hex2rgb(hex);
+ const r = lin(R / 255), g = lin(G / 255), b = lin(B / 255);
+ const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;
+ const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;
+ const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;
+ const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
+ return {
+ L: 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_,
+ a: 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_,
+ b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_,
+ };
+}
+
+function oklab2oklch(lab) {
+ let H = Math.atan2(lab.b, lab.a) * 180 / Math.PI;
+ if (H < 0) H += 360;
+ return { L: lab.L, C: Math.hypot(lab.a, lab.b), H };
+}
+
+function oklch2oklab(L, C, H) {
+ const hr = H * Math.PI / 180;
+ return { L, a: C * Math.cos(hr), b: C * Math.sin(hr) };
+}
+
+// OKLab -> linear sRGB (may fall outside [0,1] when out of gamut).
+function oklab2lrgb(L, a, b) {
+ const l_ = L + 0.3963377774 * a + 0.2158037573 * b;
+ const m_ = L - 0.1055613458 * a - 0.0638541728 * b;
+ const s_ = L - 0.0894841775 * a - 1.2914855480 * b;
+ const l = l_ * l_ * l_, m = m_ * m_ * m_, s = s_ * s_ * s_;
+ return [
+ 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
+ -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
+ -0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s,
+ ];
+}
+
+function inGamut(lrgb) {
+ const e = 1e-4;
+ return lrgb.every(c => c >= -e && c <= 1 + e);
+}
+
+function lrgb2hex(lrgb) {
+ return '#' + lrgb.map(c => {
+ const v = Math.round(clamp01(delin(clamp01(c))) * 255);
+ return v.toString(16).padStart(2, '0');
+ }).join('');
+}
+
+// OKLCH -> in-gamut sRGB hex. When the requested chroma is unreachable, reduce C
+// by binary search holding L and H fixed; report whether clamping happened.
+function oklch2hex(L, C, H) {
+ const lab0 = oklch2oklab(L, C, H);
+ const lrgb0 = oklab2lrgb(lab0.L, lab0.a, lab0.b);
+ if (inGamut(lrgb0)) return { hex: lrgb2hex(lrgb0), clamped: false };
+ let lo = 0, hi = C;
+ for (let i = 0; i < 24; i++) {
+ const mid = (lo + hi) / 2;
+ const lab = oklch2oklab(L, mid, H);
+ if (inGamut(oklab2lrgb(lab.L, lab.a, lab.b))) lo = mid; else hi = mid;
+ }
+ const lab = oklch2oklab(L, lo, H);
+ return { hex: lrgb2hex(oklab2lrgb(lab.L, lab.a, lab.b)), clamped: true };
+}
+
+// APCA-W3 0.1.9. Returns signed Lc: positive for dark-text-on-light, negative
+// for light-text-on-dark. Constants transcribed verbatim from the pinned source.
+function apcaY(hex) {
+ const [R, G, B] = hex2rgb(hex);
+ return 0.2126729 * Math.pow(R / 255, 2.4)
+ + 0.7151522 * Math.pow(G / 255, 2.4)
+ + 0.0721750 * Math.pow(B / 255, 2.4);
+}
+
+function apca(textHex, bgHex) {
+ const blkThrs = 0.022, blkClmp = 1.414, deltaYmin = 0.0005;
+ const normBG = 0.56, normTXT = 0.57, revTXT = 0.62, revBG = 0.65;
+ const scaleBoW = 1.14, scaleWoB = 1.14, loBoWoffset = 0.027, loWoBoffset = 0.027, loClip = 0.1;
+ let Ytxt = apcaY(textHex), Ybg = apcaY(bgHex);
+ Ytxt = Ytxt > blkThrs ? Ytxt : Ytxt + Math.pow(blkThrs - Ytxt, blkClmp);
+ Ybg = Ybg > blkThrs ? Ybg : Ybg + Math.pow(blkThrs - Ybg, blkClmp);
+ if (Math.abs(Ybg - Ytxt) < deltaYmin) return 0;
+ let out;
+ if (Ybg > Ytxt) {
+ const sapc = (Math.pow(Ybg, normBG) - Math.pow(Ytxt, normTXT)) * scaleBoW;
+ out = sapc < loClip ? 0 : sapc - loBoWoffset;
+ } else {
+ const sapc = (Math.pow(Ybg, revBG) - Math.pow(Ytxt, revTXT)) * scaleWoB;
+ out = sapc > -loClip ? 0 : sapc + loWoBoffset;
+ }
+ return out * 100;
+}
+
+// deltaE-OK: Euclidean distance in OKLab.
+function deltaE(aHex, bHex) {
+ const x = srgb2oklab(aHex), y = srgb2oklab(bHex);
+ return Math.hypot(x.L - y.L, x.a - y.a, x.b - y.b);
+}
+
+// --- WCAG 2.x relative luminance + contrast (migrated from the page inline) ---
+// rl reuses the canonical lin() above. On 8-bit channels lin's 0.04045 cutoff is
+// byte-identical to the WCAG 0.03928 piecewise the inline copy used — no channel
+// value falls between the two thresholds (10/255 = 0.0392, 11/255 = 0.0431) — so
+// every #rrggbb contrast value is preserved exactly.
+function rl(hex) {
+ const [R, G, B] = hex2rgb(hex);
+ return 0.2126 * lin(R / 255) + 0.7152 * lin(G / 255) + 0.0722 * lin(B / 255);
+}
+
+function contrast(aHex, bHex) {
+ const L1 = rl(aHex), L2 = rl(bHex), hi = Math.max(L1, L2), lo = Math.min(L1, L2);
+ return (hi + 0.05) / (lo + 0.05);
+}
+
+function rating(r) { return r >= 7 ? 'AAA' : r >= 4.5 ? 'AA' : 'FAIL'; }
+
+// --- HSV <-> sRGB for the color picker (migrated from the page inline) ---
+function hsv2rgb(h, s, v) {
+ h = (h % 360 + 360) % 360 / 360;
+ const i = Math.floor(h * 6), f = h * 6 - i, p = v * (1 - s), q = v * (1 - f * s), t = v * (1 - (1 - f) * s);
+ let r, g, b;
+ switch (((i % 6) + 6) % 6) {
+ case 0: [r, g, b] = [v, t, p]; break;
+ case 1: [r, g, b] = [q, v, p]; break;
+ case 2: [r, g, b] = [p, v, t]; break;
+ case 3: [r, g, b] = [p, q, v]; break;
+ case 4: [r, g, b] = [t, p, v]; break;
+ default: [r, g, b] = [v, p, q];
+ }
+ return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
+}
+
+function rgb2hsv(r, g, b) {
+ r /= 255; g /= 255; b /= 255;
+ const mx = Math.max(r, g, b), mn = Math.min(r, g, b), d = mx - mn;
+ let h = 0;
+ if (d) {
+ if (mx === r) h = ((g - b) / d + 6) % 6;
+ else if (mx === g) h = (b - r) / d + 2;
+ else h = (r - g) / d + 4;
+ h *= 60;
+ }
+ return [h, mx ? d / mx : 0, mx];
+}
+
+function rgb2hex(r, g, b) {
+ return '#' + [r, g, b].map(x => Math.max(0, Math.min(255, x)).toString(16).padStart(2, '0')).join('');
+}
+
+// One Chroma×Lightness plane cell at a fixed hue: the sRGB color if the (L,C,H)
+// is reachable, else flagged out of gamut. Forward-only (one conversion + a
+// range check) — the binary-search clamp is reserved for committing a color.
+function planeCell(L, C, H) {
+ const lab = oklch2oklab(L, C, H), lrgb = oklab2lrgb(lab.L, lab.a, lab.b);
+ return inGamut(lrgb) ? { inGamut: true, hex: lrgb2hex(lrgb) } : { inGamut: false, hex: null };
+}
+
+// Pairwise palette analysis. palette is [[hex, name], ...]. Returns the pairs
+// closer than threshold (OKLab ΔE), closest-first and capped, the overflow count
+// beyond the cap, and each color's nearest-neighbor distance for its chip title.
+function paletteWarnings(palette, threshold = 0.02, cap = 5) {
+ const n = palette.length, nearest = new Array(n).fill(Infinity), pairs = [];
+ for (let i = 0; i < n; i++) for (let j = i + 1; j < n; j++) {
+ const d = deltaE(palette[i][0], palette[j][0]);
+ if (d < nearest[i]) nearest[i] = d;
+ if (d < nearest[j]) nearest[j] = d;
+ if (d < threshold) pairs.push({ i, j, aName: palette[i][1], bName: palette[j][1], dE: d });
+ }
+ pairs.sort((a, b) => a.dE - b.dE);
+ return { warnings: pairs.slice(0, cap), overflow: Math.max(0, pairs.length - cap), nearest };
+}
function textOn(h){const L=rl(h);return ((L+0.05)/0.05)>(1.05/(L+0.05))?'#000':'#fff';}
-function contrast(a,b){const L1=rl(a),L2=rl(b),hi=Math.max(L1,L2),lo=Math.min(L1,L2);return (hi+0.05)/(lo+0.05);}
-function rating(r){return r>=7?'AAA':r>=4.5?'AA':'FAIL';}
function ratingColor(r){return r>=7?'#5d9b86':r>=4.5?'#a9b2bb':'#cb6b4d';}
function cid(l){return l.replace(/\W/g,'');}
function buildLangSel(){const s=document.getElementById('langsel');s.innerHTML='';for(const lang in SAMPLES){const o=document.createElement('option');o.value=lang;o.textContent=lang;s.appendChild(o);}}
@@ -192,11 +408,25 @@ function buildTable(){
tb.appendChild(tr);}
}
let dragFrom=null,selectedIdx=null;
+// Pairwise OKLab ΔE over the palette. Returns the sub-threshold pairs (sorted
+// closest-first) and each color's nearest-neighbor distance for its chip title.
+// Pure pairwise ΔE analysis lives in colormath.js (paletteWarnings); this renders it.
+function renderPaletteWarnings(warnings,overflow){
+ const w=document.getElementById('palwarn');if(!w)return;
+ if(!warnings.length){w.style.display='none';w.innerHTML='';return;}
+ let html='<div class="pwh">too-similar colors</div>';
+ html+=warnings.map(p=>`<div class="pwl">${esc(p.aName+' / '+p.bName)} — \u0394E ${p.dE.toFixed(3)}, hard to distinguish</div>`).join('');
+ if(overflow>0)html+=`<div class="pwl">and ${overflow} more</div>`;
+ w.innerHTML=html;w.style.display='block';
+}
function renderPalette(){
const p=document.getElementById('pals');p.innerHTML='';
+ const {warnings,overflow,nearest}=paletteWarnings(PALETTE,DELTAE_MIN,5);
PALETTE.forEach((pc,i)=>{const [hex,name]=pc;const tc=textOn(hex);
+ const nde=nearest[i];
const locked=(hex===MAP['bg']||hex===MAP['p']);
const d=document.createElement('div');d.className='pchip'+(i===selectedIdx?' sel':'');d.style.background=hex;d.draggable=true;
+ d.title=name+' '+hex+(nde===Infinity?'':' — nearest \u0394E '+nde.toFixed(3));
const lft=i>0?`<button class="mv l" title="move left" style="color:${tc}">&#8249;</button>`:'';
const rgt=i<PALETTE.length-1?`<button class="mv r" title="move right" style="color:${tc}">&#8250;</button>`:'';
const rm=locked?`<span class="lock" title="${hex===MAP['bg']?'background':'foreground'} — can't remove" style="color:${tc}">&#128274;</span>`:`<button class="rm" title="remove" style="color:${tc}">×</button>`;
@@ -212,6 +442,7 @@ function renderPalette(){
d.ondragleave=()=>d.classList.remove('over');
d.ondrop=(e)=>{e.preventDefault();d.classList.remove('over');if(dragFrom===null||dragFrom===i)return;const m=PALETTE.splice(dragFrom,1)[0];PALETTE.splice(i,0,m);dragFrom=null;selectedIdx=null;renderPalette();buildTable();buildUITable();};
p.appendChild(d);});
+ renderPaletteWarnings(warnings,overflow);
buildUITable();if(document.getElementById('pkgbody'))buildPkgTable();
}
function notify(msg,err){const m=document.getElementById('palmsg');if(!m)return;m.textContent=msg;m.style.color=err?'#cb6b4d':'#8a9496';m.style.opacity='1';clearTimeout(m._t);m._t=setTimeout(()=>{m.style.opacity='0';},err?4000:2800);}
@@ -232,28 +463,76 @@ function updateColor(){
}
function normHex(s){s=s.trim();if(/^[0-9a-fA-F]{6}$/.test(s))s='#'+s;return /^#[0-9a-fA-F]{6}$/.test(s)?s.toLowerCase():null;}
function curHex(){return normHex(document.getElementById('newhexstr').value)||'#888888';}
-function hsv2rgb(h,s,v){h=(h%360+360)%360/360;const i=Math.floor(h*6),f=h*6-i,p=v*(1-s),q=v*(1-f*s),t=v*(1-(1-f)*s);let r,g,b;switch(((i%6)+6)%6){case 0:[r,g,b]=[v,t,p];break;case 1:[r,g,b]=[q,v,p];break;case 2:[r,g,b]=[p,v,t];break;case 3:[r,g,b]=[p,q,v];break;case 4:[r,g,b]=[t,p,v];break;default:[r,g,b]=[v,p,q];}return[Math.round(r*255),Math.round(g*255),Math.round(b*255)];}
-function rgb2hsv(r,g,b){r/=255;g/=255;b/=255;const mx=Math.max(r,g,b),mn=Math.min(r,g,b),d=mx-mn;let h=0;if(d){if(mx===r)h=((g-b)/d+6)%6;else if(mx===g)h=(b-r)/d+2;else h=(r-g)/d+4;h*=60;}return[h,mx?d/mx:0,mx];}
-function hex2rgb(h){return[parseInt(h.substr(1,2),16),parseInt(h.substr(3,2),16),parseInt(h.substr(5,2),16)];}
-function rgb2hex(r,g,b){return '#'+[r,g,b].map(x=>Math.max(0,Math.min(255,x)).toString(16).padStart(2,'0')).join('');}
let pkH=0,pkS=0,pkV=0.5,pickerOn=false;
-let pkMode='any';
+let pkMode='any'; // contrast mask: any / aa / aaa (what constraint to mask)
+let pkModel='hsv'; // color model for editing: hsv / oklch (orthogonal to pkMode)
+const OKLCH_CMAX=0.4; // chroma axis range for the C×L plane (and the C dial); past sRGB at most hues, so the gamut grey shows the reachable region
function pkThresh(){return pkMode==='aa'?4.5:pkMode==='aaa'?7:0;}
function drawMask(){const cv=document.getElementById('svmask');if(!cv)return;const sv=document.getElementById('sv'),w=cv.width=sv.clientWidth,h=cv.height=sv.clientHeight,ctx=cv.getContext('2d');ctx.clearRect(0,0,w,h);const T=pkThresh();if(!T)return;ctx.fillStyle='rgba(8,7,6,0.66)';const step=4;for(let x=0;x<w;x+=step){const S=x/w;for(let y=0;y<h;y+=step){const V=1-y/h,[r,g,b]=hsv2rgb(pkH,S,V);if(contrast(rgb2hex(r,g,b),MAP['bg'])<T)ctx.fillRect(x,y,step,step);}}}
-function paintPicker(){const sv=document.getElementById('sv');if(!sv)return;sv.style.background=`linear-gradient(to top,#000,rgba(0,0,0,0)),linear-gradient(to right,#fff,rgba(255,255,255,0)),hsl(${pkH},100%,50%)`;const w=sv.clientWidth,h=sv.clientHeight,hh=document.getElementById('hue').clientHeight;document.getElementById('svcur').style.left=(pkS*w)+'px';document.getElementById('svcur').style.top=((1-pkV)*h)+'px';document.getElementById('huecur').style.top=((pkH/360)*hh)+'px';drawMask();}
-function pkReadout(h){const e=document.getElementById('pkhex');if(e)e.textContent=h;const c=document.getElementById('pkcon');if(c){const r=contrast(h,MAP['bg']);c.textContent=r.toFixed(1)+' '+rating(r);c.style.color=ratingColor(r);}}
+// Phase 4b: the SV box becomes a Chroma×Lightness plane in OKLCH mode. Per cell
+// the in-gamut test is forward-only (oklch→oklab→linear-rgb + range check), never
+// the binary search — that is reserved for committing a color. The rendered
+// bitmap is cached on (hue, dims, mask, bg) so dragging C/L (fixed hue) reuses it.
+let _planeCache={key:null,data:null};
+function paintOklchPlane(H){
+ const cv=document.getElementById('svmask');if(!cv)return;
+ const sv=document.getElementById('sv'),w=cv.width=sv.clientWidth,h=cv.height=sv.clientHeight,ctx=cv.getContext('2d');
+ const T=pkThresh(),key=Math.round(H)+'|'+w+'|'+h+'|'+pkMode+'|'+MAP['bg'];
+ if(_planeCache.key===key&&_planeCache.data){ctx.putImageData(_planeCache.data,0,0);return;}
+ const step=4;
+ for(let x=0;x<w;x+=step){const C=(x/w)*OKLCH_CMAX;
+ for(let y=0;y<h;y+=step){const L=1-y/h,cell=planeCell(L,C,H);
+ if(!cell.inGamut){ctx.fillStyle='#15120f';ctx.fillRect(x,y,step,step);continue;}
+ ctx.fillStyle=cell.hex;ctx.fillRect(x,y,step,step);
+ if(T&&contrast(cell.hex,MAP['bg'])<T){ctx.fillStyle='rgba(8,7,6,0.66)';ctx.fillRect(x,y,step,step);}}}
+ _planeCache={key,data:ctx.getImageData(0,0,w,h)};
+}
+function paintPicker(){const sv=document.getElementById('sv');if(!sv)return;
+ const w=sv.clientWidth,h=sv.clientHeight,hh=document.getElementById('hue').clientHeight;
+ if(pkModel==='oklch'){const [L,C,H]=readOklch();sv.style.background='#15120f';paintOklchPlane(H);
+ document.getElementById('svcur').style.left=(Math.min(1,C/OKLCH_CMAX)*w)+'px';
+ document.getElementById('svcur').style.top=((1-L)*h)+'px';
+ document.getElementById('huecur').style.top=((H/360)*hh)+'px';return;}
+ sv.style.background=`linear-gradient(to top,#000,rgba(0,0,0,0)),linear-gradient(to right,#fff,rgba(255,255,255,0)),hsl(${pkH},100%,50%)`;
+ document.getElementById('svcur').style.left=(pkS*w)+'px';document.getElementById('svcur').style.top=((1-pkV)*h)+'px';document.getElementById('huecur').style.top=((pkH/360)*hh)+'px';drawMask();}
+function pkReadout(h){const e=document.getElementById('pkhex');if(e)e.textContent=h;const c=document.getElementById('pkcon');if(c){const r=contrast(h,MAP['bg']);c.textContent=r.toFixed(1)+' '+rating(r);c.style.color=ratingColor(r);}
+ const o=document.getElementById('pkoklch');if(o){const lch=oklab2oklch(srgb2oklab(h));o.textContent='OKLCH '+lch.L.toFixed(3)+' '+lch.C.toFixed(3)+' '+Math.round(lch.H)+'\u00b0';}
+ const a=document.getElementById('pkapca');if(a){const lc=apca(h,MAP['bg']);a.textContent='APCA Lc '+lc.toFixed(0);a.title='APCA Lc '+lc.toFixed(1)+' (APCA-W3 0.1.9), text on the ground color. Positive = dark text on a light background, negative = light text on a dark background.';}}
function syncHex(){const v=normHex(document.getElementById('newhexstr').value);if(!v)return;document.getElementById('swatch').style.background=v;[pkH,pkS,pkV]=rgb2hsv(...hex2rgb(v));if(pickerOn)paintPicker();pkReadout(v);}
function setHex(h){h=normHex(h)||h;document.getElementById('newhexstr').value=h;document.getElementById('swatch').style.background=h;[pkH,pkS,pkV]=rgb2hsv(...hex2rgb(h));if(pickerOn)paintPicker();pkReadout(h);}
-function pkSet(){const hex=rgb2hex(...hsv2rgb(pkH,pkS,pkV));document.getElementById('newhexstr').value=hex;document.getElementById('swatch').style.background=hex;paintPicker();pkReadout(hex);}
+function pkSet(){const hex=rgb2hex(...hsv2rgb(pkH,pkS,pkV));document.getElementById('newhexstr').value=hex;document.getElementById('swatch').style.background=hex;paintPicker();pkReadout(hex);if(pkModel==='oklch')oklchInputsFromHex(hex);}
+// --- OKLCH editing model (Phase 4a): L/C/H dials orthogonal to the HSV square ---
+function setOklchInputs(L,C,H){
+ const put=(id,v)=>{const e=document.getElementById(id);if(e)e.value=v;};
+ put('okL',L.toFixed(3));put('okLn',L.toFixed(3));put('okC',C.toFixed(3));put('okCn',C.toFixed(3));
+ const h=String(Math.round(H));put('okH',h);put('okHn',h);}
+function oklchInputsFromHex(hex){const lch=oklab2oklch(srgb2oklab(normHex(hex)||'#888888'));setOklchInputs(lch.L,lch.C,lch.H);}
+function readOklch(){return [parseFloat(document.getElementById('okL').value)||0,parseFloat(document.getElementById('okC').value)||0,parseFloat(document.getElementById('okH').value)||0];}
+function pkClampStatus(on){const s=document.getElementById('pkclamp');if(!s)return;s.classList.toggle('show',on);s.textContent=on?'chroma clamped to sRGB':'';}
+function pkOklchSet(){const [L,C,H]=readOklch();const {hex,clamped}=oklch2hex(L,C,H);
+ document.getElementById('newhexstr').value=hex;document.getElementById('swatch').style.background=hex;
+ [pkH,pkS,pkV]=rgb2hsv(...hex2rgb(hex));paintPicker();pkReadout(hex);
+ if(clamped)oklchInputsFromHex(hex); // snap the dials to the reachable color
+ pkClampStatus(clamped);}
+function setPkModel(m){pkModel=m;document.querySelectorAll('.pmodel button').forEach(x=>x.classList.toggle('on',x.dataset.pm===m));
+ const oc=document.getElementById('oklchctl');if(oc)oc.classList.toggle('show',m==='oklch');
+ if(m==='oklch')oklchInputsFromHex(curHex());else pkClampStatus(false);}
function buildPkChips(){const c=document.getElementById('pkchips');if(!c)return;c.innerHTML='';const T=pkThresh();PALETTE.forEach(([hex,name])=>{const s=document.createElement('div');s.className='pc';s.style.background=hex;s.title=name+' '+hex;const ok=!T||contrast(hex,MAP['bg'])>=T;if(!ok){s.style.opacity='0.22';s.title+=' (below '+pkMode.toUpperCase()+')';}s.onclick=()=>{if(ok)setHex(hex);};c.appendChild(s);});}
-function openPicker(){pickerOn=true;[pkH,pkS,pkV]=rgb2hsv(...hex2rgb(curHex()));buildPkChips();paintPicker();pkReadout(curHex());document.getElementById('picker').style.display='block';setTimeout(()=>document.addEventListener('pointerdown',pkOutside),0);}
+function openPicker(){pickerOn=true;[pkH,pkS,pkV]=rgb2hsv(...hex2rgb(curHex()));buildPkChips();document.getElementById('picker').style.display='block';setPkModel(pkModel);paintPicker();pkReadout(curHex());setTimeout(()=>document.addEventListener('pointerdown',pkOutside),0);}
function closePicker(){if(!pickerOn)return;pickerOn=false;const p=document.getElementById('picker');if(p)p.style.display='none';document.removeEventListener('pointerdown',pkOutside);}
function pkOutside(e){if(!e.target.closest('#picker')&&!e.target.closest('#swatch'))closePicker();}
function pkDrag(el,fn){el.addEventListener('pointerdown',e=>{e.preventDefault();fn(e);const mv=ev=>fn(ev),up=()=>{document.removeEventListener('pointermove',mv);document.removeEventListener('pointerup',up);};document.addEventListener('pointermove',mv);document.addEventListener('pointerup',up);});}
function initPicker(){const sw=document.getElementById('swatch');if(!sw)return;sw.style.background=curHex();sw.onclick=()=>pickerOn?closePicker():openPicker();
- pkDrag(document.getElementById('sv'),e=>{const r=document.getElementById('sv').getBoundingClientRect();pkS=Math.max(0,Math.min(1,(e.clientX-r.left)/r.width));pkV=1-Math.max(0,Math.min(1,(e.clientY-r.top)/r.height));pkSet();});
- pkDrag(document.getElementById('hue'),e=>{const r=document.getElementById('hue').getBoundingClientRect();pkH=Math.max(0,Math.min(1,(e.clientY-r.top)/r.height))*360;pkSet();});
- document.querySelectorAll('.pmode button').forEach(b=>b.onclick=()=>{pkMode=b.dataset.m;document.querySelectorAll('.pmode button').forEach(x=>x.classList.toggle('on',x===b));drawMask();buildPkChips();});}
+ pkDrag(document.getElementById('sv'),e=>{const r=document.getElementById('sv').getBoundingClientRect();const fx=Math.max(0,Math.min(1,(e.clientX-r.left)/r.width)),fy=Math.max(0,Math.min(1,(e.clientY-r.top)/r.height));
+ if(pkModel==='oklch'){setOklchInputs(1-fy,fx*OKLCH_CMAX,readOklch()[2]);pkOklchSet();}else{pkS=fx;pkV=1-fy;pkSet();}});
+ pkDrag(document.getElementById('hue'),e=>{const r=document.getElementById('hue').getBoundingClientRect();const fy=Math.max(0,Math.min(1,(e.clientY-r.top)/r.height));
+ if(pkModel==='oklch'){const [L,C]=readOklch();setOklchInputs(L,C,fy*360);pkOklchSet();}else{pkH=fy*360;pkSet();}});
+ document.querySelectorAll('.pmode button').forEach(b=>b.onclick=()=>{pkMode=b.dataset.m;document.querySelectorAll('.pmode button').forEach(x=>x.classList.toggle('on',x===b));paintPicker();buildPkChips();});
+ document.querySelectorAll('.pmodel button').forEach(b=>b.onclick=()=>setPkModel(b.dataset.pm));
+ [['okL','okLn',3],['okC','okCn',3],['okH','okHn',0]].forEach(([r,n,dp])=>{
+ const re=document.getElementById(r),ne=document.getElementById(n);
+ if(re)re.addEventListener('input',()=>{if(ne)ne.value=(+re.value).toFixed(dp);pkOklchSet();});
+ if(ne)ne.addEventListener('input',()=>{if(re)re.value=ne.value;pkOklchSet();});});}
function addColor(){const h=curHex();const name=document.getElementById('newname').value.trim();
if(!name){notify('name the color before adding it',true);return;}
if(PALETTE.some(p=>p[1].toLowerCase()===name.toLowerCase())){notify('a color named "'+name+'" already exists — select it and use Update selected to change its value',true);return;}
@@ -737,5 +1016,61 @@ function pkgSelftest(){
}
if(location.hash==='#selftest')pkgSelftest();
if(location.hash.startsWith('#pick')){openPicker();const m=location.hash.slice(5);if(m){const b=document.querySelector('.pmode button[data-m="'+m+'"]');if(b)b.click();}}
+if(location.hash==='#cursortest'){document.getElementById('newhexstr').value='#67809c';openPicker();const sc=document.getElementById('svcur'),hc=document.getElementById('huecur');const L=parseFloat(sc.style.left||'0'),T=parseFloat(sc.style.top||'0'),H=parseFloat(hc.style.top||'0');const ok=L>1&&T>1&&H>1;document.title='CURSORTEST '+(ok?'PASS':'FAIL');const d=document.createElement('div');d.id='cursortest';d.textContent='CURSORTEST '+(ok?'PASS':'FAIL')+' left='+sc.style.left+' top='+sc.style.top+' hue='+hc.style.top;document.body.appendChild(d);}
if(location.hash.startsWith('#app')){const ap=location.hash.slice(4),s=document.getElementById('appsel');if(s&&ap){s.value=ap;pkgChanged();}}
+if(location.hash==='#planetest'){let ok=true;const notes=[];
+ document.getElementById('newhexstr').value='#67809c';openPicker();setPkModel('oklch');paintPicker();
+ const sv=document.getElementById('sv'),cv=document.getElementById('svmask'),ctx=cv.getContext('2d');
+ const [L,C,H]=readOklch();
+ const expLeft=Math.min(1,C/OKLCH_CMAX)*sv.clientWidth,expTop=(1-L)*sv.clientHeight;
+ const gotLeft=parseFloat(document.getElementById('svcur').style.left),gotTop=parseFloat(document.getElementById('svcur').style.top);
+ if(Math.abs(gotLeft-expLeft)>2||Math.abs(gotTop-expTop)>2){ok=false;notes.push('crosshair off got '+gotLeft.toFixed(1)+','+gotTop.toFixed(1)+' exp '+expLeft.toFixed(1)+','+expTop.toFixed(1));}
+ const Coog=0.38,Loog=0.5,labO=oklch2oklab(Loog,Coog,H),oog=!inGamut(oklab2lrgb(labO.L,labO.a,labO.b));
+ const oogX=Math.min(cv.width-2,Math.round((Coog/OKLCH_CMAX)*cv.width)),oogY=Math.round((1-Loog)*cv.height);
+ const dO=ctx.getImageData(oogX,oogY,1,1).data,greyO=Math.abs(dO[0]-0x15)<10&&Math.abs(dO[1]-0x12)<10&&Math.abs(dO[2]-0x0f)<10;
+ if(oog&&!greyO){ok=false;notes.push('OOG cell not masked rgb '+dO[0]+','+dO[1]+','+dO[2]);}
+ const inX=Math.round((0.03/OKLCH_CMAX)*cv.width),inY=Math.round(0.5*cv.height);
+ const dI=ctx.getImageData(inX,inY,1,1).data,greyI=Math.abs(dI[0]-0x15)<10&&Math.abs(dI[1]-0x12)<10&&Math.abs(dI[2]-0x0f)<10;
+ if(greyI){ok=false;notes.push('in-gamut cell rendered as OOG grey rgb '+dI[0]+','+dI[1]+','+dI[2]);}
+ document.title='PLANETEST '+(ok?'PASS':'FAIL');const d=document.createElement('div');d.id='planetest';d.textContent='PLANETEST '+(ok?'PASS':'FAIL')+(notes.length?' | '+notes.join(' ; '):'');document.body.appendChild(d);}
+if(location.hash==='#oklchtest'){let ok=true;const notes=[];
+ document.getElementById('newhexstr').value='#67809c';openPicker();
+ const before=document.getElementById('newhexstr').value;
+ setPkModel('oklch');
+ if(pkModel!=='oklch'){ok=false;notes.push('model not oklch');}
+ if(!document.getElementById('oklchctl').classList.contains('show')){ok=false;notes.push('oklch dials hidden');}
+ if(document.getElementById('newhexstr').value!==before){ok=false;notes.push('color changed on model switch: '+document.getElementById('newhexstr').value);}
+ pkMode='any';document.querySelector('.pmode button[data-m="aa"]').click();
+ if(pkModel!=='oklch'){ok=false;notes.push('mask toggle reset model');}
+ if(pkMode!=='aa'){ok=false;notes.push('mask did not set aa');}
+ setPkModel('hsv');
+ if(pkMode!=='aa'){ok=false;notes.push('model switch reset mask to '+pkMode);}
+ if(pkModel!=='hsv'){ok=false;notes.push('model not hsv after switch');}
+ setPkModel('oklch');setOklchInputs(0.591,0.052,251.6);pkOklchSet();
+ const driven=document.getElementById('newhexstr').value,dl=oklab2oklch(srgb2oklab(driven));
+ if(!(Math.abs(dl.L-0.591)<0.02&&Math.abs(dl.C-0.052)<0.02)){ok=false;notes.push('dials did not drive color: '+driven);}
+ const {clamped}=oklch2hex(0.7,0.4,140);setOklchInputs(0.7,0.4,140);pkOklchSet();
+ if(!(clamped&&document.getElementById('pkclamp').classList.contains('show'))){ok=false;notes.push('clamp status missing for out-of-gamut C');}
+ document.title='OKLCHTEST '+(ok?'PASS':'FAIL');const d=document.createElement('div');d.id='oklchtest';d.textContent='OKLCHTEST '+(ok?'PASS':'FAIL')+(notes.length?' | '+notes.join(' ; '):'');document.body.appendChild(d);}
+if(location.hash==='#deltatest'){const save=PALETTE.slice();let ok=true;const notes=[];const W=()=>document.getElementById('palwarn');
+ PALETTE=[['#0d0b0a','ground'],['#cdced1','fg'],['#67809c','blue'],['#69829e','blue2']];renderPalette();
+ const t1=W().textContent;if(!(W().style.display!=='none'&&/blue \/ blue2/.test(t1)&&/ΔE/.test(t1))){ok=false;notes.push('near-pair did not fire: '+t1);}
+ PALETTE=[['#0d0b0a','ground'],['#cdced1','fg'],['#67809c','blue'],['#e8bd30','gold'],['#cb6b4d','terra']];renderPalette();
+ if(W().style.display!=='none'){ok=false;notes.push('spread palette warned: '+W().textContent);}
+ PALETTE=[['#0d0b0a','ground'],['#cdced1','fg']];for(let k=0;k<7;k++){const v=(0x67+k).toString(16).padStart(2,'0');PALETTE.push(['#'+v+'809c','c'+k]);}renderPalette();
+ const tc=W().textContent;const nums=[...tc.matchAll(/ΔE (\d+\.\d+)/g)].map(m=>parseFloat(m[1]));
+ if(!/and \d+ more/.test(tc)){ok=false;notes.push('no cap suffix: '+tc);}
+ if(!(nums.length===5&&nums.every((n,k)=>k===0||n>=nums[k-1]))){ok=false;notes.push('not 5-capped ascending: '+nums.join(','));}
+ PALETTE=save;renderPalette();
+ document.title='DELTATEST '+(ok?'PASS':'FAIL');const d=document.createElement('div');d.id='deltatest';d.textContent='DELTATEST '+(ok?'PASS':'FAIL')+(notes.length?' | '+notes.join(' ; '):'');document.body.appendChild(d);}
+if(location.hash==='#readouttest'){const hex='#67809c';document.getElementById('newhexstr').value=hex;openPicker();pkReadout(hex);
+ const o=document.getElementById('pkoklch').textContent,a=document.getElementById('pkapca').textContent,w=document.getElementById('pkcon').textContent;
+ const lch=oklab2oklch(srgb2oklab(hex));
+ const expO='OKLCH '+lch.L.toFixed(3)+' '+lch.C.toFixed(3)+' '+Math.round(lch.H)+'\u00b0';
+ const expA='APCA Lc '+apca(hex,MAP['bg']).toFixed(0);
+ const r=contrast(hex,MAP['bg']),expW=r.toFixed(1)+' '+rating(r);
+ const wired=o===expO&&a===expA&&w===expW;
+ const sane=Math.abs(lch.L-0.591)<0.01&&Math.abs(lch.C-0.052)<0.01&&Math.abs(lch.H-251.6)<2;
+ const ok=wired&&sane;document.title='READOUTTEST '+(ok?'PASS':'FAIL');
+ const d=document.createElement('div');d.id='readouttest';d.textContent='READOUTTEST '+(ok?'PASS':'FAIL')+' oklch='+o+' | apca='+a+' | wcag='+w;document.body.appendChild(d);}
</script> \ No newline at end of file