dsh-theme-palette 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README-pt.md CHANGED
@@ -1,91 +1,132 @@
1
- # dsh-theme-palette
2
-
3
- [English](README.md) · [中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
4
-
5
- Paleta de tema para o DeepSeek Harness (web e desktop): **4 paletas × claro/escuro**, dois eixos independentes.
6
-
7
- ![Página de configuração](assets/screenshot-settings-light.png)
8
-
9
- *Render estático na largura real do painel (564 px de conteúdo).*
10
-
11
- ## Compatibility
12
-
13
- | Superfície | Estado |
14
- |---|---|
15
- | Cliente DSH desktop / web | 0.2.x |
16
- | Node.js | ≥ 20 |
17
- | Alterações no código do host | nenhuma |
18
-
19
- O plugin apenas empilha tokens de cor via `ctx.theme.overrideTokens`; não registra um tema, não altera o host e não toca na preferência de aparência.
20
-
21
- ## What it does
22
-
23
- - **4 paletas** — Mono, Areia quente, Índigo, Musgo — cada uma adaptada de forma independente ao claro e ao escuro;
24
- - a escala é **recalculada** por completo: reconstrução OKLCH → croma por papel → **limite de gamut sRGB** → contraste resolvido sobre superfícies reais;
25
- - mais de 27.000 referências de token: texto, secundário, terciário, legendas, links, barras laterais, cartões, balão do usuário, botão primário, barras de rolagem, interruptores, títulos/negrito de Markdown, blocos de código;
26
- - ajustável: intensidade do texto (3), profundidade da barra lateral (3), painel direito (2), ênfase de Markdown, barras de rolagem, cor dos interruptores;
27
- - **autorrecuperação**: se o host descartar a camada de override, a paleta é reaplicada;
28
- - interface em 简体中文 / 繁體中文 / English / 日本語 (segue o idioma do host e pode ser fixada).
29
-
30
- ## Install
31
-
32
- ```bash
33
- # via npm
34
- cd ~/.dsh/profiles/desktop
35
- pnpm add dsh-theme-palette
36
-
37
- # ou uma versão específica
38
- pnpm add dsh-theme-palette@1.4.3
1
+ # dsh-theme-palette
2
+
3
+ [English](README.md) · [中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
4
+
5
+ Paleta de tema para o DeepSeek Harness (web e desktop): **4 paletas × claro/escuro**, dois eixos independentes.
6
+
7
+ ![Página de configuração](assets/screenshot-settings-light.png)
8
+
9
+ *Render estático na largura real do painel (564 px de conteúdo).*
10
+
11
+ | Escuro | Paleta personalizada | Alto contraste |
12
+ |---|---|---|
13
+ | ![Escuro](assets/screenshot-settings-dark.png) | ![Paleta personalizada](assets/screenshot-settings-custom.png) | ![Alto contraste](assets/screenshot-settings-hc.png) |
14
+
15
+ ## Compatibility
16
+
17
+ | Superfície | Estado |
18
+ |---|---|
19
+ | Cliente DSH desktop / web | 0.2.x |
20
+ | Node.js | ≥ 20 |
21
+ | Alterações no código do host | nenhuma |
22
+
23
+ O plugin apenas empilha tokens de cor via `ctx.theme.overrideTokens`; não registra um tema, não altera o host e não toca na preferência de aparência.
24
+
25
+ ## What it does
26
+
27
+ - **4 paletas** — Mono, Areia quente, Índigo, Musgo — cada uma adaptada de forma independente ao claro e ao escuro;
28
+ - a escala é **recalculada** por completo: reconstrução OKLCH → croma por papel → **limite de gamut sRGB** → contraste resolvido sobre superfícies reais;
29
+ - mais de 27.000 referências de token: texto, secundário, terciário, legendas, links, barras laterais, cartões, balão do usuário, botão primário, barras de rolagem, interruptores, títulos/negrito de Markdown, blocos de código;
30
+ - ajustável: intensidade do texto (3), profundidade da barra lateral (3), painel direito (2), ênfase de Markdown, barras de rolagem, cor dos interruptores;
31
+ - **autorrecuperação**: se o host descartar a camada de override, a paleta é reaplicada;
32
+ - interface em 简体中文 / 繁體中文 / English / 日本語 (segue o idioma do host e pode ser fixada).
33
+
34
+ ## Install
35
+
36
+ ```bash
37
+ # via npm
38
+ cd ~/.dsh/profiles/desktop
39
+ pnpm add dsh-theme-palette
40
+
41
+ # ou uma versão específica
42
+ pnpm add dsh-theme-palette@1.4.3
43
+ ```
44
+
45
+ A partir do tarball do release do GitHub:
46
+
47
+ ```bash
48
+ pnpm add "https://github.com/zuoyunlai/dsh-theme-palette/releases/download/v1.4.3/dsh-theme-palette-1.4.3.tgz"
49
+ ```
50
+
51
+ Depois **reinicie a interface**: um processo em execução mantém o módulo antigo. Abra em avatar → Configurações → **Color theme**.
52
+
53
+ ## Configuration
54
+
55
+ | Item | Opções |
56
+ |---|---|
57
+ | Paleta | Mono · Areia quente · Índigo · Musgo (as miniaturas seguem claro/escuro) |
58
+ | Intensidade | Suave / Padrão / Forte — quanto o texto segue a paleta |
59
+ | Superfícies | Barra lateral (Mais clara / Igual / Mais escura), painel direito (Igual à barra / Seguir a tela) |
60
+ | Mais opções | Idioma, ênfase de Markdown, barras de rolagem, interruptores |
61
+
62
+ Cada escolha aplica na hora e fica em `localStorage`. Claro/escuro continua no controle «Aparência» do host.
63
+
64
+ ## Palette engine
65
+
66
+ ```
67
+ OKLCH(L, C, matiz) ──► limite de gamut (busca binária em C) ──► hex sRGB
68
+ ▲
69
+ └── croma por papel × intensidade, depois contraste sobre {tela, cartão, barra, sobreposição}
70
+ ```
71
+
72
+ - os aliases semânticos mantêm cadeias `var(--dsw-static-neutral-bluish-NN)`, então tudo que segue um token segue a paleta;
73
+ - superfícies claras usam os passos 00–300, as escuras 800–950;
74
+ - os pisos de texto são exigidos na construção: corpo ≥ 12, secundário ≥ 6.1, terciário/link ≥ 4.6, texto na barra lateral ≥ 7, texto no balão ≥ 7;
75
+ - `node palette-dev.mjs` verifica 432 combinações.
76
+
77
+ Notas de design, critério por componente e tabelas de contraste em [docs/DESIGN.md](docs/DESIGN.md). Histórico: [CHANGELOG.md](CHANGELOG.md).
78
+
79
+ ## Development
80
+
81
+ ```bash
82
+ node palette-dev.mjs # relatório de tokens de todas as paletas
83
+ node tools/sheet.mjs # painel de paletas → tools/sheet.html
84
+ node tools/shoot-sheet.mjs # captura do painel (Chrome headless)
85
+ node tools/compare.mjs --dir tools/out/<run> # comparar com a linha de base
86
+ node tools/preview-settings.mjs --lang en # renderizar a página de ajustes
87
+ node tools/release.mjs --dry # pré-checagem de release
88
+ node tools/release.mjs --tag # publicar no npm + tag
89
+ ```
90
+
91
+ A regressão visual tem duas camadas: o painel de paletas (sem autenticação) e a janela real do desktop via CDP (`tools/shoot-desktop.mjs`, requer `--remote-debugging-port`). Veja [tools/README.md](tools/README.md).
92
+
93
+
94
+ ## Pitfalls we hit
95
+
96
+ As cinco mais surpreendentes da auditoria da 1.7.0 — cada uma foi encontrada por um teste, não olhando capturas.
97
+
98
+ - **Um acento branco gerava um link branco** (1.13:1). O solucionador de contraste andava só numa direção, afastando-se do fundo, então um acento mais claro que o fundo continuava indo para o branco.
99
+ - **Escolher uma cor mudava a página mas não o painel.** O componente inscrevia-se no id da paleta, que não muda quando a cor muda; o React comparou os snapshots, viu que não havia diferença e pulou o re-render.
100
+ - **Compartilhar uma configuração não compartilhava as cores.** O código curto carregava os modos mas não as três cores personalizadas, então importar em outra máquina informava sucesso e mantinha os valores locais.
101
+ - **Superfícies modulares escuras têm um teto.** Mesmo o branco puro chega a apenas ~10.99:1 na superfície mais profunda, então a meta de 12:1 (15:1 em alto contraste) é fisicamente inalcançável ali. Ajustamos ao máximo alcançável e rotulamos.
102
+ - **Um seletor que achávamos morto estava vivo.** A auditoria inicialmente o reportou como quebrado; o teste de contrato contra o CSS publicado provou o contrário. O achado estava errado, não o código.
103
+
104
+ ## Sharing
105
+
106
+ Toda a configuração — incluindo as três cores personalizadas — viaja num código curto. Cole na caixa de importação e clique em Pré-visualizar para ver exatamente o que mudará antes de aplicar:
107
+
108
+ ```text
109
+ dshs1.eyJ2IjoxLCJwIjoiY3VzdG9tIiwicyI6ImRlZXAiLCJ0IjoidGludGVkIiwiciI6InNpZGViYXIiLCJjIjoidGludGVkIiwiayI6ImFjY2VudCIsIm0iOiJvbiIsImgiOiJvZmYiLCJsIjoiemgtQ04iLCJ4Ijp7ImJnIjoiI2Y1ZWZlNiIsInRleHQiOiIjMWQxYTE3IiwiYWNjZW50IjoiIzNmNjZhMyJ9fQ
39
110
  ```
40
111
 
41
- A partir do tarball do release do GitHub:
112
+ Este exemplo real decodifica para:
42
113
 
43
- ```bash
44
- pnpm add "https://github.com/zuoyunlai/dsh-theme-palette/releases/download/v1.4.3/dsh-theme-palette-1.4.3.tgz"
45
- ```
46
-
47
- Depois **reinicie a interface**: um processo em execução mantém o módulo antigo. Abra em avatar → Configurações → **Color theme**.
48
-
49
- ## Configuration
114
+ - paleta: custom · barra lateral: deep · texto: tinted · painel direito: sidebar
115
+ - scrollbar: tinted · controles: accent · Markdown: on · alto contraste: off · idioma: zh-CN
116
+ - três cores: `#f5efe6` (fundo) · `#1d1a17` (texto) · `#3f66a3` (acento)
50
117
 
51
- | Item | Opções |
52
- |---|---|
53
- | Paleta | Mono · Areia quente · Índigo · Musgo (as miniaturas seguem claro/escuro) |
54
- | Intensidade | Suave / Padrão / Forte — quanto o texto segue a paleta |
55
- | Superfícies | Barra lateral (Mais clara / Igual / Mais escura), painel direito (Igual à barra / Seguir a tela) |
56
- | Mais opções | Idioma, ênfase de Markdown, barras de rolagem, interruptores |
118
+ O código é gerado pelo codificador de produção e auto-verificado ida e volta antes de entrar neste README — nunca é escrito à mão.
57
119
 
58
- Cada escolha aplica na hora e fica em `localStorage`. Claro/escuro continua no controle «Aparência» do host.
120
+ ## Trade-offs
59
121
 
60
- ## Palette engine
61
-
62
- ```
63
- OKLCH(L, C, matiz) ──► limite de gamut (busca binária em C) ──► hex sRGB
64
- ▲
65
- └── croma por papel × intensidade, depois contraste sobre {tela, cartão, barra, sobreposição}
66
- ```
67
-
68
- - os aliases semânticos mantêm cadeias `var(--dsw-static-neutral-bluish-NN)`, então tudo que segue um token segue a paleta;
69
- - superfícies claras usam os passos 00–300, as escuras 800–950;
70
- - os pisos de texto são exigidos na construção: corpo ≥ 12, secundário ≥ 6.1, terciário/link ≥ 4.6, texto na barra lateral ≥ 7, texto no balão ≥ 7;
71
- - `node palette-dev.mjs` verifica 432 combinações.
72
-
73
- Notas de design, critério por componente e tabelas de contraste em [docs/DESIGN.md](docs/DESIGN.md). Histórico: [CHANGELOG.md](CHANGELOG.md).
74
-
75
- ## Development
76
-
77
- ```bash
78
- node palette-dev.mjs # relatório de tokens de todas as paletas
79
- node tools/sheet.mjs # painel de paletas → tools/sheet.html
80
- node tools/shoot-sheet.mjs # captura do painel (Chrome headless)
81
- node tools/compare.mjs --dir tools/out/<run> # comparar com a linha de base
82
- node tools/preview-settings.mjs --lang en # renderizar a página de ajustes
83
- node tools/release.mjs --dry # pré-checagem de release
84
- node tools/release.mjs --tag # publicar no npm + tag
85
- ```
122
+ Outros plugins de tema aqui entregam vidro, papéis de parede e animação. Decidimos não fazer isso:
86
123
 
87
- A regressão visual tem duas camadas: o painel de paletas (sem autenticação) e a janela real do desktop via CDP (`tools/shoot-desktop.mjs`, requer `--remote-debugging-port`). Veja [tools/README.md](tools/README.md).
124
+ - **Sem vidro nem papel de parede.** Essa corrida se ganha com capturas; preferimos competir com provas.
125
+ - **Sem mercado de temas nem geração de cor por IA.** Ambos introduzem cores que não podemos garantir; o solucionador de contraste é o ativo.
126
+ - **Sem mais paletas.** Quatro predefinições mais um gerador de três cores supera dez escolhidas à mão; volume não é a vantagem.
127
+ - **Sem promessas de "proteção ocular".** Reportamos razões medidas nas superfícies onde o texto realmente cai e dizemos "limitado pela superfície" quando é tudo o que existe.
88
128
 
89
- ## License
90
129
 
91
- MIT © 2026 Zuoyunlai
130
+ ## License
131
+
132
+ MIT © 2026 Zuoyunlai
package/README-zh.md CHANGED
@@ -1,93 +1,134 @@
1
- # dsh-theme-palette
2
-
3
- [English](README.md) · [中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
4
-
5
- DeepSeek Harness(Web / 桌面)的主题配色插件:**4 套配色 × 明暗两模式**,两个轴互相独立。
6
-
7
- ![设置页:五套配色、强度与面板表面](assets/screenshot-settings-light.png)
8
-
9
- *上图按真机面板宽度(内容区 564 px)静态渲染。*
10
-
11
- ## Compatibility
12
-
13
- | 项目 | 状态 |
14
- |---|---|
15
- | DSH 桌面 / Web 客户端 | 0.2.x |
16
- | Node.js | ≥ 20 |
17
- | 对宿主源码的改动 | 无 |
18
-
19
- 插件只用 `ctx.theme.overrideTokens` 叠一层颜色 token:不注册主题、不改宿主、不动「外观」偏好。
20
-
21
- ## What it does
22
-
23
- - **4 套配色** —— 黑白 / 暖砂 / 靛蓝 / 苔绿,各自独立适配明暗两侧;
24
- - 色阶**整体重算**而不是替换:OKLCH 重建 → 角色化色度 → **sRGB 色域钳位** → 在真实承载面上求解对比度;
25
- - 覆盖 27,000+ 处 token 引用:正文、次级、三级、注释、链接、侧栏、卡片、主人气泡、主按钮、滚动条、开关、Markdown 标题/加粗、代码块;
26
- - 可调:文字着色三档、侧栏三档、右栏两档、Markdown 强调、滚动条、开关配色;
27
- - **自定义配色**(给 底色/文字/强调 三色,文字色相也参与派生;过亮/过暗的强调色会归一化)、**配置导入导出**(`dshs1.` 短码含三色)、**高对比**档、4 种界面语言;
28
- - **自愈**:宿主丢弃 override 层时自动重放;
29
- - 高对比的 15:1 以浅色卡层/深色 950 为承诺面;深色模块面 800 受表面亮度限制,报表会标“表面上限”。
30
- - 界面支持 简体中文 / 繁體中文 / English / 日本語(跟随宿主,也可手选)。
31
-
32
- ## Install
33
-
34
- ```bash
35
- # 从 npm
36
- cd ~/.dsh/profiles/desktop
37
- pnpm add dsh-theme-palette
38
-
39
- # 或指定版本
40
- pnpm add dsh-theme-palette@1.4.3
1
+ # dsh-theme-palette
2
+
3
+ [English](README.md) · [中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
4
+
5
+ DeepSeek Harness(Web / 桌面)的主题配色插件:**4 套配色 × 明暗两模式**,两个轴互相独立。
6
+
7
+ ![设置页:五套配色、强度与面板表面](assets/screenshot-settings-light.png)
8
+
9
+ *上图按真机面板宽度(内容区 564 px)静态渲染。*
10
+
11
+ | 深色 | 自定义面板 | 高对比 |
12
+ |---|---|---|
13
+ | ![深色](assets/screenshot-settings-dark.png) | ![自定义面板](assets/screenshot-settings-custom.png) | ![高对比](assets/screenshot-settings-hc.png) |
14
+
15
+ ## Compatibility
16
+
17
+ | 项目 | 状态 |
18
+ |---|---|
19
+ | DSH 桌面 / Web 客户端 | 0.2.x |
20
+ | Node.js | ≥ 20 |
21
+ | 对宿主源码的改动 | 无 |
22
+
23
+ 插件只用 `ctx.theme.overrideTokens` 叠一层颜色 token:不注册主题、不改宿主、不动「外观」偏好。
24
+
25
+ ## What it does
26
+
27
+ - **4 套配色** —— 黑白 / 暖砂 / 靛蓝 / 苔绿,各自独立适配明暗两侧;
28
+ - 色阶**整体重算**而不是替换:OKLCH 重建 → 角色化色度 → **sRGB 色域钳位** → 在真实承载面上求解对比度;
29
+ - 覆盖 27,000+ 处 token 引用:正文、次级、三级、注释、链接、侧栏、卡片、主人气泡、主按钮、滚动条、开关、Markdown 标题/加粗、代码块;
30
+ - 可调:文字着色三档、侧栏三档、右栏两档、Markdown 强调、滚动条、开关配色;
31
+ - **自定义配色**(给 底色/文字/强调 三色,文字色相也参与派生;过亮/过暗的强调色会归一化)、**配置导入导出**(`dshs1.` 短码含三色)、**高对比**档、4 种界面语言;
32
+ - **自愈**:宿主丢弃 override 层时自动重放;
33
+ - 高对比的 15:1 以浅色卡层/深色 950 为承诺面;深色模块面 800 受表面亮度限制,报表会标“表面上限”。
34
+ - 界面支持 简体中文 / 繁體中文 / English / 日本語(跟随宿主,也可手选)。
35
+
36
+ ## Install
37
+
38
+ ```bash
39
+ # 从 npm
40
+ cd ~/.dsh/profiles/desktop
41
+ pnpm add dsh-theme-palette
42
+
43
+ # 或指定版本
44
+ pnpm add dsh-theme-palette@1.4.3
45
+ ```
46
+
47
+ 从 GitHub Release 的 tarball:
48
+
49
+ ```bash
50
+ pnpm add "https://github.com/zuoyunlai/dsh-theme-palette/releases/download/v1.4.3/dsh-theme-palette-1.4.3.tgz"
51
+ ```
52
+
53
+ 装完**必须重启 GUI**(运行中的进程仍持旧模块)。入口:左下角头像 → **设置** → 「**主题色**」。
54
+
55
+ ## Configuration
56
+
57
+ | 项 | 选项 |
58
+ |---|---|
59
+ | 配色 | 黑白 · 暖砂 · 靛蓝 · 苔绿(卡片缩略图跟随明暗) |
60
+ | 强度 | 静 / 标准 / 浓 —— 正文与强调的着色程度 |
61
+ | 面板表面 | 左侧栏(更浅 / 同色 / 更深)、右侧栏(同左栏 / 跟随画布) |
62
+ | 更多选项 | 语言、Markdown 强调、滚动条、开关 / 勾选 |
63
+
64
+ 选择即时生效并存在 `localStorage`;明暗仍由宿主「外观」控制。
65
+
66
+ ## Palette engine
67
+
68
+ ```
69
+ OKLCH(L, C, hue) ──► 色域钳位(对 C 二分) ──► sRGB hex
70
+ ▲
71
+ └── 角色色度 × 强度,再在 {画布, 卡层, 侧栏, 悬浮层} 上求解对比度
72
+ ```
73
+
74
+ - 语义别名保留 `var(--dsw-static-neutral-bluish-NN)` 引用链,跟 token 的元素就跟着配色走;
75
+ - 浅色面用色阶 00–300,深色面用 800–950;
76
+ - 文字下限在构建期强制:正文 ≥ 12、次级 ≥ 6.2、三级/链接 ≥ 4.62、侧栏内 ≥ 7、气泡内 ≥ 7;深色模块面按可达上限钳位并标注;
77
+ - `node palette-dev.mjs` 跑标准档承载面报表,`--hc` 跑高对比档;硬失败时退出码 1。
78
+
79
+ 逐组件设计取舍与对比度表见 [docs/DESIGN.md](docs/DESIGN.md),版本记录见 [CHANGELOG.md](CHANGELOG.md)。
80
+
81
+ ## Development
82
+
83
+ ```bash
84
+ node palette-dev.mjs # 全部配色的 token 报表
85
+ node tools/sheet.mjs # 配色看板 → tools/sheet.html
86
+ node tools/shoot-sheet.mjs # 无头 Chrome 截看板
87
+ node tools/compare.mjs --dir tools/out/<run> # 与基线比
88
+ node tools/preview-settings.mjs --lang en # 渲染设置页
89
+ node tools/release.mjs --dry # 发版预检
90
+ node tools/release.mjs --tag # 发 npm + 打 tag
91
+ ```
92
+
93
+ 截图回归分两层:配色看板(免登录)与桌面真机窗口(`tools/shoot-desktop.mjs`,需要 `--remote-debugging-port`)。见 [tools/README.md](tools/README.md)。
94
+
95
+
96
+ ## Pitfalls we hit
97
+
98
+ 1.7.0 审计里最反直觉的五条——每一条都是测试逼出来的,不是看截图看出来的。
99
+
100
+ - **纯白强调色会生成纯白链接**(1.13:1)。对比度求解器原本只朝"远离背景"的单一方向走,强调色比背景还亮时只会一路推向白色。
101
+ - **取了色,整页变了,面板没变。** 组件订阅的是配色 id,而取色不会改变它——React 比较快照发现没变,直接跳过重渲染。
102
+ - **分享了配置,没分享颜色。** 短码带了各项模式,但没带自定义三色,换台机器导入提示成功,用的仍是本机旧值。
103
+ - **深色模块面有硬上限。** 即使纯白,在最深的模块面上也只有约 10.99:1,12:1(高对比 15:1)物理上不可达。现在按该面可达上限钳位并标注"表面受限",而不是默默不达标。
104
+ - **一个我们以为失效的选择器其实活着。** 审计最初判定 `_markdown_` 相关选择器已失效;契约测试对着实际构建 CSS 证明它还在——错的是结论,不是代码。
105
+
106
+ ## Sharing
107
+
108
+ 所有设置——包括自定义三色——都装进一条短码。粘到导入框点「预览」,先看到将覆盖什么,再确认应用:
109
+
110
+ ```text
111
+ dshs1.eyJ2IjoxLCJwIjoiY3VzdG9tIiwicyI6ImRlZXAiLCJ0IjoidGludGVkIiwiciI6InNpZGViYXIiLCJjIjoidGludGVkIiwiayI6ImFjY2VudCIsIm0iOiJvbiIsImgiOiJvZmYiLCJsIjoiemgtQ04iLCJ4Ijp7ImJnIjoiI2Y1ZWZlNiIsInRleHQiOiIjMWQxYTE3IiwiYWNjZW50IjoiIzNmNjZhMyJ9fQ
41
112
  ```
42
113
 
43
- 从 GitHub Release 的 tarball:
114
+ 这条真实示例解码后是:
44
115
 
45
- ```bash
46
- pnpm add "https://github.com/zuoyunlai/dsh-theme-palette/releases/download/v1.4.3/dsh-theme-palette-1.4.3.tgz"
47
- ```
48
-
49
- 装完**必须重启 GUI**(运行中的进程仍持旧模块)。入口:左下角头像 → **设置** → 「**主题色**」。
50
-
51
- ## Configuration
116
+ - 配色:自定义 · 侧栏:更深 · 文字:标准 · 右栏:同左栏
117
+ - 滚动条:跟随 · 控件:主题色 · Markdown 强调:开 · 高对比:关 · 语言:zh-CN
118
+ - 三色:`#f5efe6`(底色)· `#1d1a17`(文字)· `#3f66a3`(强调)
52
119
 
53
- | 项 | 选项 |
54
- |---|---|
55
- | 配色 | 黑白 · 暖砂 · 靛蓝 · 苔绿(卡片缩略图跟随明暗) |
56
- | 强度 | 静 / 标准 / 浓 —— 正文与强调的着色程度 |
57
- | 面板表面 | 左侧栏(更浅 / 同色 / 更深)、右侧栏(同左栏 / 跟随画布) |
58
- | 更多选项 | 语言、Markdown 强调、滚动条、开关 / 勾选 |
120
+ 短码由生产编码器生成、经解码往返自检后才写进本文档——从不手写。
59
121
 
60
- 选择即时生效并存在 `localStorage`;明暗仍由宿主「外观」控制。
122
+ ## Trade-offs
61
123
 
62
- ## Palette engine
63
-
64
- ```
65
- OKLCH(L, C, hue) ──► 色域钳位(对 C 二分) ──► sRGB hex
66
- ▲
67
- └── 角色色度 × 强度,再在 {画布, 卡层, 侧栏, 悬浮层} 上求解对比度
68
- ```
69
-
70
- - 语义别名保留 `var(--dsw-static-neutral-bluish-NN)` 引用链,跟 token 的元素就跟着配色走;
71
- - 浅色面用色阶 00–300,深色面用 800–950;
72
- - 文字下限在构建期强制:正文 ≥ 12、次级 ≥ 6.2、三级/链接 ≥ 4.62、侧栏内 ≥ 7、气泡内 ≥ 7;深色模块面按可达上限钳位并标注;
73
- - `node palette-dev.mjs` 跑标准档承载面报表,`--hc` 跑高对比档;硬失败时退出码 1。
74
-
75
- 逐组件设计取舍与对比度表见 [docs/DESIGN.md](docs/DESIGN.md),版本记录见 [CHANGELOG.md](CHANGELOG.md)。
76
-
77
- ## Development
78
-
79
- ```bash
80
- node palette-dev.mjs # 全部配色的 token 报表
81
- node tools/sheet.mjs # 配色看板 → tools/sheet.html
82
- node tools/shoot-sheet.mjs # 无头 Chrome 截看板
83
- node tools/compare.mjs --dir tools/out/<run> # 与基线比
84
- node tools/preview-settings.mjs --lang en # 渲染设置页
85
- node tools/release.mjs --dry # 发版预检
86
- node tools/release.mjs --tag # 发 npm + 打 tag
87
- ```
124
+ 这个生态里别的主题插件做玻璃、壁纸、动效。我们刻意不做:
88
125
 
89
- 截图回归分两层:配色看板(免登录)与桌面真机窗口(`tools/shoot-desktop.mjs`,需要 `--remote-debugging-port`)。见 [tools/README.md](tools/README.md)。
126
+ - **不做玻璃与壁纸。** 那条赛道靠截图竞争,我们更愿意靠证据竞争。
127
+ - **不做主题市场,也不做 AI 生色。** 两者都会引入我们无法保证的颜色;对比度求解器是资产,往里喂不可预测的输入等于自毁。
128
+ - **不再堆配色。** 4 套预设 + 三色生成,强过手挑十套;数量不是护城河。
129
+ - **不做护眼宣称。** 我们只报文字真实落在的承载面上的实测对比度,到顶就写"表面受限",不做医学声明。
90
130
 
91
- ## License
92
131
 
93
- MIT © 2026 Zuoyunlai
132
+ ## License
133
+
134
+ MIT © 2026 Zuoyunlai