dsh-pixel-ui 1.9.0 → 1.10.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.md CHANGED
@@ -4,12 +4,12 @@
4
4
 
5
5
  # 🪵 dsh-pixel-ui
6
6
 
7
- > DeepSeek Harness 像素皮肤(Agent Xi 风格):八个主题一键切换——像素·木屋 / 像素·羊皮纸 / 像素·暖阳 / 像素·终端绿 / 像素·全息 / 像素·南瓜灯 / 像素·便签本 / 像素·云石,随时可切回现代默认 UI。
7
+ > DeepSeek Harness 像素皮肤(Agent Xi 风格):九个主题一键切换——像素·木屋 / 像素·羊皮纸 / 像素·暖阳 / 像素·终端绿 / 像素·全息 / 像素·南瓜灯 / 像素·便签本 / 像素·云石 / 像素·秘银,随时可切回现代默认 UI。
8
8
 
9
9
  ![License: MIT](https://img.shields.io/badge/license-MIT-brightgreen)
10
10
  ![dsh](https://img.shields.io/badge/dsh-0.2.1--rc.3-blue)
11
- ![version](https://img.shields.io/badge/version-1.9.0-F4D03F)
12
- ![themes](https://img.shields.io/badge/themes-8-orange)
11
+ ![version](https://img.shields.io/badge/version-1.10.0-F4D03F)
12
+ ![themes](https://img.shields.io/badge/themes-9-orange)
13
13
  ![contrast](https://img.shields.io/badge/WCAG-AA%20audited-brightgreen)
14
14
 
15
15
  ---
@@ -18,8 +18,8 @@
18
18
 
19
19
  `dsh-pixel-ui` 是一个**皮肤插件**,把 dsh Web GUI 重皮肤成像素 RPG 风:
20
20
 
21
- 1. **八个主题**:像素·木屋(深木 + 金)、像素·羊皮纸(浅色纸面 + 金棕)、像素·暖阳(暖橙木)、像素·终端绿(终端绿字)、像素·全息(真 PNG 9-slice 深蓝全息框 + 青色描边)、像素·南瓜灯(暗橙藤蔓框 + 暖金)、像素·便签本(浅色活页纸 + 铅笔光标)、像素·云石(板岩 + 白石框 + 钢青);
22
- 2. **像素质感**:前四套**完全平面**——整像素 2px 描边、平涂色块的一档明度差、2px 棋盘抖动、手绘 SVG 像素图形(对勾/单选点/下拉箭头/光标),零 `box-shadow` 与 `text-shadow`;后四套是**真素材分支**,使用 Complete UI 素材自带的浮雕边框(CC BY 4.0,见下方授权),全息/南瓜灯/便签本/云石的对话框、菜单、主按钮、输入框、选中行各取不同的 9-slice 策略;
21
+ 1. **九个主题**:像素·木屋(深木 + 金)、像素·羊皮纸(浅色纸面 + 金棕)、像素·暖阳(暖橙木)、像素·终端绿(终端绿字)、像素·全息(真 PNG 9-slice 深蓝全息框 + 青色描边)、像素·南瓜灯(暗橙藤蔓框 + 暖金)、像素·便签本(浅色活页纸 + 铅笔光标)、像素·云石(板岩 + 白石框 + 钢青)、像素·秘银(靛紫 + 银蓝薄框 + 紫高光);
22
+ 2. **像素质感**:前四套**完全平面**——整像素 2px 描边、平涂色块的一档明度差、2px 棋盘抖动、手绘 SVG 像素图形(对勾/单选点/下拉箭头/光标),零 `box-shadow` 与 `text-shadow`;后五套是**真素材分支**,使用 Complete UI 素材自带的浮雕边框(CC BY 4.0,见下方授权),全息/南瓜灯/便签本/云石/秘银的对话框、菜单、主按钮、输入框、选中行各取不同的 9-slice 策略;
23
23
  3. **宿主表面一起换色**:主题 token 从 17 个扩到 23 个,新增用户气泡、弹层菜单、输入区、选择键、提示底等宿主自绘表面的颜色,气泡/输入区不再留着宿主默认蓝;
24
24
  4. **细节与动感**:所有动效走 `steps()` 阶梯(80/140/220ms),按下 1px 位移、页签下划线逐格生长、思考中闪烁光标、运行中左条呼吸、toast 三帧进入;另有主题化勾/点、代码块终端顶栏、表格斑马纹、吸顶标题底线、滚动条握把、纸面专用深色光标。`prefers-reduced-motion` 下一律关闭;
25
25
  5. **桌面端友好**:内容列宽随视口撑开(`clamp(680px, 64vw - 140px, 1200px)`,窄屏仍是宿主原本的 680px),皮肤选择在 `dsh-app://` 页面上也能恢复;素材在构建期转成 data URI 内联,换素材只需重新 build + 刷新页面,不必重启宿主。
@@ -101,6 +101,17 @@
101
101
 
102
102
  ![像素·云石组件预览:白石对话框、菜单、主按钮、图标键、输入框、选中行](./assets/preview-marble.png)
103
103
 
104
+ ### 像素·秘银 · `pixel-mithril`
105
+
106
+ > 深色 · 靛紫 `#120E24` + 银蓝 `#BDB4E0` + 紫高光 `#B49BFF`;四边都是 6px 银蓝薄框,按钮/输入框/选中行是银灰控件。
107
+
108
+ - **对话框 / 菜单**:`Frame_Lite_01a.png` 32×32 → `slice:6 fill`;96×96 的 `Frame_Standard` 银边只集中在左右、上下是暗填充,做对话框像“幕布框”,所以不用;
109
+ - **主按钮**:`Button_Large_01a1/2/3`(96×32,三态)→ `slice:6 6 10 6`、`border-width:6px 6px 9px 6px`;银灰底 + 深墨字;
110
+ - **图标按钮**:`Button_Small_01a1` 32×32 → `slice:6 fill`;
111
+ - **输入框 / 选中行**:`Textfield_01a` / `Select_01a1` 32×32 → `slice:6 fill`;输入框灰底白字(占位符 `#F2F5FF`),选中行黑底浅字。
112
+
113
+ ![像素·秘银组件预览:银蓝薄框对话框、菜单、银灰按钮、输入框、选中行](./assets/preview-mithril.png)
114
+
104
115
  ## Motion & detail
105
116
 
106
117
  | 层 | 细节 | 动效 |
@@ -130,10 +141,10 @@
130
141
  | dsh 生态 | `0.1.0-rc.6` ~ `0.2.x`(ThemeService `register`/`setTheme` + `settings.general.item` 槽位;`0.2.1-rc.3` 已按源码逐条核对,并用 0.2.1 真实的 `ThemeRuntime` 跑通注册/恢复/切换契约;见 `docs/dev/迭代记录.md`) |
131
142
  | 兼容声明 | 同时声明 `engines.dsh` 与 `@deepseek-ai/dsh-*` peers:0.2.1 的 app-boot 优先读 `engines.dsh`,dshmarket 的发现页把两者取交集;任一判定器都能过 |
132
143
  | DSH Desktop | 2.0.x(web 兼容模式/高级模式均适用) |
133
- | 模式 | 六深色 + 两浅色(`colorScheme` 按主题声明) |
144
+ | 模式 | 七深色 + 两浅色(`colorScheme` 按主题声明) |
134
145
  | 浏览器 | 现代 Chromium / Firefox(`localStorage` + CSS 变量 + SVG 光标) |
135
146
  | 字体 | fusion-pixel 12px zh_hans(MIT)+ Press Start 2P(OFL),随包分发 |
136
- | 对比度 | 八主题全部通过 WCAG AA(正文 ≥4.5:1、非文本 ≥3:1,`npm run test:contrast` 门禁) |
147
+ | 对比度 | 九主题全部通过 WCAG AA(正文 ≥4.5:1、非文本 ≥3:1,`npm run test:contrast` 门禁) |
137
148
 
138
149
  ## Install / Uninstall
139
150
 
@@ -149,7 +160,7 @@ GitHub Releases(无需 npm,同样开箱即用):
149
160
 
150
161
  ```bash
151
162
  # 下载 Releases 里的 dsh-pixel-ui-<version>.tgz
152
- dsh plugin add ./dsh-pixel-ui-1.9.0.tgz
163
+ dsh plugin add ./dsh-pixel-ui-1.10.0.tgz
153
164
  ```
154
165
 
155
166
  GitHub 源码(构建产物已随仓库提交,无需构建):
@@ -200,21 +211,21 @@ DSH Desktop 默认每次启动随机分配本地 Web 端口,而浏览器 `loca
200
211
 
201
212
  1. 安装后重启 dsh / DSH Desktop;
202
213
  2. 首次加载自动激活默认主题「像素·木屋」;
203
- 3. 设置 → 通用 → **像素主题**,九个按钮一键切换八个皮肤和「现代默认」;
214
+ 3. 设置 → 通用 → **像素主题**,十个按钮一键切换九个皮肤和「现代默认」;
204
215
  4. 选「现代默认」(或外观行选 浅色 / 深色 / 跟随系统)即整体退出皮肤,选择会被记住,下次打开不复活。
205
216
 
206
217
  最小可复现示例:安装 → 重启 → 木屋主题上身 → 切换到「像素·便签本」→ 对话框变成带装订孔的活页纸 → 输入框文字清晰可读 → 点「现代默认」→ 页面立即回到现代 UI → 刷新页面仍是现代 UI。
207
218
 
208
219
  ## Configuration
209
220
 
210
- - **无配置项**:八个主题的 23 个 `--dsw-*` token 定义在 `src/client/index.js` 的 `THEMES`,像素质感与 9-slice 素材层在 `src/client/pixel.css`;
221
+ - **无配置项**:九个主题的 23 个 `--dsw-*` token 定义在 `src/client/index.js` 的 `THEMES`,像素质感与 9-slice 素材层在 `src/client/pixel.css`;
211
222
  - **默认主题**:`pixel-wood`(仅首次安装时自动激活,之后尊重你的选择);
212
223
  - **持久化**:双层——宿主文件 `$DSH_HOME/storages/dsh-pixel-ui/preference.json`(权威,跨端口/跨浏览器)+ 浏览器 `localStorage` 的 `dsh-pixel-ui:theme`(同 origin 镜像);
213
224
  - 无环境变量、无敏感项。
214
225
 
215
226
  ## Permissions & data
216
227
 
217
- - 宿主进程:**只读**本包内字体文件;在 `$DSH_HOME/storages/dsh-pixel-ui/` 下读写一个主题偏好 JSON(只注册 `/dsh-pixel-ui/fonts/*` 与 `/dsh-pixel-ui/preference` 两个路由,字体文件名白名单、主题 id 白名单,均无路径穿越);四套素材主题的 PNG 在构建期已内联进 `lib/client.js`,宿主不再按路径读素材;
228
+ - 宿主进程:**只读**本包内字体文件;在 `$DSH_HOME/storages/dsh-pixel-ui/` 下读写一个主题偏好 JSON(只注册 `/dsh-pixel-ui/fonts/*` 与 `/dsh-pixel-ui/preference` 两个路由,字体文件名白名单、主题 id 白名单,均无路径穿越);五套素材主题的 PNG 在构建期已内联进 `lib/client.js`,宿主不再按路径读素材;
218
229
  - 浏览器半边:注册主题 + 注入样式表 + 一个设置行;无网络请求、无遥测、不读凭据,只在 `localStorage` 存一个主题 id。
219
230
 
220
231
  ## Troubleshooting
@@ -240,19 +251,20 @@ npm test # test:compat + test:host + test:client + test:contrast
240
251
  - `scripts/check-compat.mjs`:`engines.dsh` / dsh peers / dshReleases 的声明门禁(0.2.1-rc.3 严格安装路径)
241
252
  - `scripts/asset-inline.mjs`:把 CSS 里的 `url('pxasset:<theme>/<file>.png')` 换成 data URI,并用 `ASSET_DIRS` 白名单校验主题名
242
253
  - `scripts/test-host.mjs`:node 半边(字体白名单 / 偏好路由读写与校验 / **确认没有素材路由** / dispose)
243
- - `scripts/test-client.mjs`:browser 半边(加载真实 lib/client.js,覆盖注册、恢复矩阵、交互、渲染、动效门禁、**四套素材主题的内联 9-slice**、`data-pixel-asset` 开关、dispose)
244
- - `scripts/audit-contrast.mjs`:八主题 WCAG 对比度门禁(改 palette 必跑;新增用户气泡 / 菜单面 / 输入区三对)
254
+ - `scripts/test-client.mjs`:browser 半边(加载真实 lib/client.js,覆盖注册、恢复矩阵、交互、渲染、动效门禁、**五套素材主题的内联 9-slice**、`data-pixel-asset` 开关、dispose)
255
+ - `scripts/audit-contrast.mjs`:九主题 WCAG 对比度门禁(改 palette 必跑;新增用户气泡 / 菜单面 / 输入区三对)
245
256
 
246
257
  改动皮肤后重新构建并刷新浏览器即可;**素材已内联,新增素材主题不再需要重启宿主**。开发文档在 `docs/dev/`(计划 / 迭代 / 踩坑)。欢迎 PR;行为变更请同步更新 README。
247
258
 
248
259
  ## License & security
249
260
 
250
261
  [MIT](./LICENSE) © 2026 zhang66633 · 字体:fusion-pixel(MIT)、Press Start 2P(SIL OFL)。
251
- `pixel-hologram`(8 张)、`pixel-pumpkin`(8 张)、`pixel-papernote`(7 张)、`pixel-marble`(8 张)的 Complete UI 切片
262
+ `pixel-hologram`(8 张)、`pixel-pumpkin`(8 张)、`pixel-papernote`(7 张)、`pixel-marble`(8 张)、`pixel-mithril`(7 张)的 Complete UI 切片
252
263
  © Crusenho Agus Hennihuno,[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/),
253
264
  分别见 [`hologram`](assets/complete-ui/hologram/ATTRIBUTION.md) /
254
265
  [`pumpkin`](assets/complete-ui/pumpkin/ATTRIBUTION.md) /
255
266
  [`papernote`](assets/complete-ui/papernote/ATTRIBUTION.md) /
256
- [`marble`](assets/complete-ui/marble/ATTRIBUTION.md) 的 ATTRIBUTION。
267
+ [`marble`](assets/complete-ui/marble/ATTRIBUTION.md) /
268
+ [`mithril`](assets/complete-ui/mithril/ATTRIBUTION.md) 的 ATTRIBUTION。
257
269
 
258
270
  安全问题请通过 GitHub **security advisory** 私下报告,不要发公开 issue。
@@ -0,0 +1,32 @@
1
+ # Complete UI Essential Pack · MysticWood theme
2
+
3
+ Selected sprites from **Complete UI Essential Pack v2.4** by
4
+ **Crusenho Agus Hennihuno** (<https://crusenho.itch.io>), used under the
5
+ **Creative Commons Attribution 4.0 International (CC BY 4.0)** license:
6
+ <https://creativecommons.org/licenses/by/4.0/>.
7
+
8
+ The sprites are used unmodified as 9-slice textures in the `pixel-mithril`
9
+ theme. They are inlined into the client bundle as data URIs at build time
10
+ (`scripts/asset-inline.mjs`).
11
+
12
+ - Original pack: Complete UI Essential Pack v2.4
13
+ - Theme: `10_MysticWood_Theme`
14
+ - License text: `LICENSE.txt` in this directory.
15
+
16
+ | Local file | Source sprite | Role |
17
+ | --- | --- | --- |
18
+ | `panel.png` | `UI_MysticWood_Frame_Lite_01a.png` | dialog + menu frame (32×32, slice 6) |
19
+ | `button.png` | `UI_MysticWood_Button_Large_01a1.png` | primary button (rest) |
20
+ | `button-hover.png` | `UI_MysticWood_Button_Large_01a2.png` | primary button (hover) |
21
+ | `button-press.png` | `UI_MysticWood_Button_Large_01a3.png` | primary button (pressed) |
22
+ | `icon-button.png` | `UI_MysticWood_Button_Small_01a1.png` | icon-only primary button |
23
+ | `input.png` | `UI_MysticWood_Textfield_01a.png` | text field |
24
+ | `select.png` | `UI_MysticWood_Select_01a1.png` | selected row / menu item |
25
+
26
+ Note: the 96×96 `Frame_Standard` sprite puts the silver art only on the left
27
+ and right edges (top/bottom are almost entirely dark fill), so it reads like
28
+ a curtain frame when used for dialogs. The theme uses the 32×32 `Frame_Lite`
29
+ instead, which has silver on all four sides.
30
+
31
+ Modifications: none to the images; only CSS border-image slicing is applied at
32
+ runtime.
@@ -0,0 +1,20 @@
1
+ Attribution 4.0 International (CC BY 4.0)
2
+
3
+ You are free to:
4
+
5
+ Share — copy and redistribute the material in any medium or format for any purpose, even commercially.
6
+
7
+ Adapt — remix, transform, and build upon the material for any purpose, even commercially.
8
+
9
+ The licensor cannot revoke these freedoms as long as you follow the license terms.
10
+
11
+ Under the following terms:
12
+
13
+ Attribution - You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
14
+
15
+ No additional restrictions - You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
16
+
17
+ License Link: https://creativecommons.org/licenses/by/4.0/
18
+
19
+ Licensor Owner: Crusenho Agus Hennihuno
20
+ Licensor Store Link: https://crusenho.itch.io
Binary file
package/lib/client.js CHANGED
@@ -1421,6 +1421,78 @@ html[data-pixel-theme='pixel-marble'] body {\r
1421
1421
  background-size: 4px 4px;\r
1422
1422
  }\r
1423
1423
  \r
1424
+ /* 秘银:靛紫底 + 银蓝薄框 + 紫高光。96×96 的 Frame_Standard 银边只在左右,\r
1425
+ * 做对话框像幕布;这里统一用 32×32 Frame_Lite 的 6px 四边薄框。 */\r
1426
+ html[data-pixel-theme='pixel-mithril'] {\r
1427
+ --px-wood-darkest: #120E24;\r
1428
+ --px-wood-dark: #1A1430;\r
1429
+ --px-wood-mid: #241C42;\r
1430
+ --px-wood-warm: #2E2552;\r
1431
+ --px-wood-light: #4A3F7A;\r
1432
+ --px-wood-pale: #BDB4E0;\r
1433
+ --px-text-on-dark: #F0ECFF;\r
1434
+ --px-text-light: #BDB4E0;\r
1435
+ --px-parchment: #F0ECFF;\r
1436
+ --px-gold: #B49BFF;\r
1437
+ --px-gold-bright: #D3C4FF;\r
1438
+ --px-gold-dark: #8A6FE0;\r
1439
+ --px-gold-deep: #5A4A9A;\r
1440
+ --px-sidebar-fill: #0F0B1E;\r
1441
+ --px-line: #0B0817;\r
1442
+ --px-accent-bg: #B49BFF;\r
1443
+ --px-accent-hover: #C9B6FF;\r
1444
+ --px-accent-ink: #1A1030;\r
1445
+ --px-input-bg: #646C79;\r
1446
+ --px-input-text: #FFFFFF;\r
1447
+ --px-input-ph: #F2F5FF;\r
1448
+ --px-input-caret: #D3C4FF;\r
1449
+ --px-tooltip-bg: #171129;\r
1450
+ --px-code-bg: #171129;\r
1451
+ --px-code-ink: #D3C4FF;\r
1452
+ --px-code-meta: #BDB4E0;\r
1453
+ --px-ink-on-mid: #F0ECFF;\r
1454
+ --px-topbar-fill: #1A1430;\r
1455
+ --px-dither: #1E1738;\r
1456
+ --pxa-panel: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAexJREFUWIXFVzGvgjAQ/uAxmjgQCIs4OzgaB/+CP5e/wEAYGZiBhUAcTBw1vMF39Vpa0ReLX+Jg73p3vV6/4xwwbPbHARqUWeK8o/OOnsOV4zAAAKzWEZqqBQDUXS8ZiMMAq3Uk/jdVO9JR9XS2KBBnsz8O3DEApHmBw24rGWyqVnL8CtQ99J8H7XHHPNo0L146DclMGSPUXS8ORbbqrr8HwJ3XXY/L+STWFksfddePDJNOrTjV7dVhtY7GAZDzH+9RJ9wgB+mo8md76Wr5FbgkpBTqHOl+JvmzvZfzCWleiCsos8QRAZhSZRsigMNuizgMsFj6uF21T/ijiMMAm/1xcAFz+m2BP09Xtzgn3DJLnLrrv+IcgPwMOfnYBC94VxWqPPBJ0FMEHmzomrqWDdyuAxZLXzQ94C8DauOxDV5vk0xoC+TvK0yo5YE5mZC3b4kJbXIBFeDb3dAGpG5ITDgn+GFFBlbraBYmVHvOrEwIyN+Soh3PAU7DHF8pQn4NnqkXmLiArmeKK55dIy96D5C/+2vc62Cx9LWbKY0muarHQY2IE5E0mPAgKDC+3lStkOnkpMNtcOianhjNVBZM82IUrTodmZiTmG5qvEvz4jGc6k6jBmSCaa86uJIerZVZ4kyO3QR1rP7PPtLla7+860qJT47YMQAAAABJRU5ErkJggg==");\r
1457
+ --pxa-panel-slice: 6 fill;\r
1458
+ --pxa-panel-width: 6px;\r
1459
+ --pxa-panel-repeat: stretch;\r
1460
+ --pxa-menu: var(--pxa-panel);\r
1461
+ --pxa-menu-slice: 6 fill;\r
1462
+ --pxa-menu-width: 6px;\r
1463
+ --pxa-menu-repeat: stretch;\r
1464
+ --pxa-button: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAActJREFUaIHtmsFuwjAMhp2uD7DLGBIDzkhwrEDiFXio7Z36CpWocixSpd22adK07b4jO0xmaZKWZCx1BP6OsfM3smli6ghoYbbc7AEA6jIXtnGbrWtu7Hqn6vqsUcVwRtbZAgpZGRPW2QIAwGrrmhu73qm6PmsE+E2KAPgJPj6A6YdCVlCXuUjbjDpd2fTxodQLpenqa/uRp/rWU8jK6ojiXW+Kiw+lXihNV189trPlZp+qk9Bhlc1bRbpsPj6UeqE0XXwxxvjGNM4AlwQwf2crd4cY4xmQUC/q0uEEEJPohzDTH7PlZp8ANE/uQlawlTuyRZ0ruP8jGPPGFsR/xsKjx/jq8/Xx4Utc309Gt1wFBeRuNIAEBBSyAow1V0ERwAkghhNADJehhHAZ2iOtZWhd5sLnqx9zGuqHT6MK4jI0HKtsbu0Z8CFMDCeAGK8qaCt3Tgd07H7UmojRETvW13Ttj8buR6WptiStHbFjQv/d+Kbyo9LUY1yXueBrKUQYZejL0xvlei4KNdapzTCeDg1HdbzLpo6rY+PpMGo93Ref4TPH59nIYQuaDG4MIxOO5/cP7gfEQONyLr8F/YC/fgAlAQDmDWkmDOp19W+opr3bUvZHnwAAAABJRU5ErkJggg==");\r
1465
+ --pxa-button-hover: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAbhJREFUaIHtmsFOg0AQhv/FPoAXa5Pa9tykPRKa9BX6UPpOvAJJyR4hIfGmxsSod494MGOWZaGLCkPsfMfdf382s8AOzAKCIAhsqKaOdXQoAaBIY+Vqd/W1jR2739DzJGpCYh9ukeisNmAfbgHA2dc2dux+Q8+TFkQBX8GnCwjDkOgMRRqrSVOnTdtd00XD6deXp6/WdZNP7FdPojOnkMzbnhQfDadfX56+Wju26+hQTsxBJNiFm0aTtr4uGk6/vjx9tBRjemIqe4DPAgg/56jz7xjTHhBwT+rckQVgJrA3YWE41tGhDIDqzp3oDEeds03qv0Lvf4JiXnkFycdY/9gxvnh/vr/7UJe3y/m1ZEE9cjOfIoBCojNQrCULGgGyAMzIAjAjaSgjkoYOSGMaWqSx6vLXT/gd5o/PWhYkaWh/7MKNs2YgmzAzsgDMdMqCjjr32qDHruP2JGoVsVN1Td/66Nh1XJ5mSdJZETtl9NeFby4dl6cd4yKNlRxLYaKWhj49vHDO56wwY105GbecXgEAFqtZTWi2t/WZ7WbbYjUbtZ+tpWt0GeN77cfXt+rJOEL+Cw2DeU70E2+ktChGMXYMAAAAAElFTkSuQmCC");\r
1466
+ --pxa-button-active: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAbxJREFUaIHtmrFugzAQhs+UB+jSNFKaZEZKRkSkvAIP1b4Tr4AE8ggSUre2qlS13TvSobrK2IaYNnAo3Df6fv9YZ8AHNgDDzBnRFgiiuAYAqPJE2Nptsa6+U/cbe5yIIUSO4R5SWRgdjuEeAMAa6+o7db+xx4kTIgB+ko8XYMYhlQVUeSL8tqBO113TR0PpN5Snq9Z2k/v6qyeVhVWI5l1PiouG0m8oT1etntsgimtf7YSCQ7hrNemK9dFQ+g3l6aLFHOMT01gDXCaA+TuZLH9zjGuARz2oucMTQIynL8LMeARRXHsAzZU7lQVksiQb1KWC738Ec954BfHH2PDoOb76fH18+BLX95vVLVdBA3K3WoAHAlJZAOaaq6AJwBNADE8AMVyGEsJl6Ii0lqFVnog+f/2Y/6H++DSqIC5Dh+MQ7qx7BrwIE8MTQEyvKiiTpdMCPXUdtSdi7Iid2td03R+duo7KU92StO6InTI698Y3lY7KU89xlSeCj6UQYZShL09vlOOZFWqufVtgvV0aQrW9K6a2q23r7XLSfroWr9GnT59rI42jiZvFjSFgzs/z+0fzaCLCP+bGQT2o+w3agrbYSKXf0wAAAABJRU5ErkJggg==");\r
1467
+ --pxa-button-slice: 6 6 10 6 fill;\r
1468
+ --pxa-button-width: 6px 6px 9px 6px;\r
1469
+ --pxa-button-ink: #12101E;\r
1470
+ --pxa-button-hover-ink: #12101E;\r
1471
+ --pxa-icon: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAVlJREFUWIXlV02ugkAM7ky4gsbNe65JdEkw8QoclyuQQGYJCWt1Y/QQuHivpDN2fgjCLPx2tJ1+tfSTjgAL0rwYAAD6phScnfO5ztryvQUgztkRKtW+JT9nRwAA1uc6a9qwEIHkmHgtVKqFvilFYnOasHVkSoz5I9O8GAS2nraW6wYmdnXKF2PmrlQLCUd+yg5WEpcvJAY5xlfwPwzeGZhLbIOcfOLDiFpAmheDNPW/FGrVaQrBVy7pA8DfkNSqW6wQOvB9UwrJOZfAKTuw/xOyb0qBxhAZfhrxhzAWuTaEMRFNhpoKYsgQoakgigzpw9oy/G4VjEM4RQW16rwDGhJDoW1Evp3OtxP6Yrh1j92KbUnmLqYmh3UrdskxRKpT5DwO4e1yDz40F5Qr4Rw/+x1bFNpdPmp3xbMF+IJdXeJ8IV2N/jXULqe/280qpNfHU7+c0iLWKIBe0V+Hve4WMcTm8AAAAABJRU5ErkJggg==");\r
1472
+ --pxa-icon-slice: 6 fill;\r
1473
+ --pxa-icon-width: 6px;\r
1474
+ --pxa-input: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAYFJREFUWIXlV81Kw0AQ/rKKIoQogYRckpx9Al/Cx+1L9Al6Nl4kgYKlKopQD2HCZDa72bbJRuh3aWFnvpnMzs9OAAMen54PALBZrwKTzJC81Bnj0QQ5wijGfrfVlIhM6oRRDACazhAPcXREpDwGTuSqY+LZrFfBtYsxbshk9FTHNAdkqIo0QVU3TmRFmgCAVV46NxgBIgKAvMycjLvIDjlmvAJOdowTJvnXlzcAbYR5FBTQZuRQtk+JvMx6kQXa5Ff0Z1braCNQ1U339fSrSOCckjoFVIZqXHRe9BzY77Yo0uTopJvMAV/gCa9kAlZ105XMnKBZoABomekTykcPkAijuCv9/1UFF+EAv+6uFfuAnAVaKwaWaURXlI03t3f4+f7C+8cngt8D7h/CSQ3JYdSbBYv2Ae8WpQNLNCKC1yqQoOs2vglNAykvM+uZTZfDuheMPcPPPefQHBirBCIfkuOGXSvKaTPihJxYbk7SqMu2ZF1OTUsoP7e9qG36rlv37PgDpinFryEHyfIAAAAASUVORK5CYII=");\r
1475
+ --pxa-input-slice: 6 fill;\r
1476
+ --pxa-input-width: 6px;\r
1477
+ --pxa-input-ink: #FFFFFF;\r
1478
+ --pxa-placeholder: #F2F5FF;\r
1479
+ --pxa-caret: #D3C4FF;\r
1480
+ --pxa-select: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAbFJREFUWIXtV6GOwkAQfbtB1RNwDQhCSM5UnMGcqSPBofgCPogvQJ0jwZ3BYBBnSAhBQOog+NqeaGaZXXrbvYMthpeQdFh23qM7szMjgiAAAHT7gwwO2K0Wwrb+Vz8iCAK1aTIeYrs/oNdpqx9yezqbW0XY/HBf3I+I4pG2qQzL9cYq4OP9rdQHF1ErIk+SEwAgDJvqGQCO54uTwFajrmzuIwybAPI3MRkPMZ3NcwEcSXJSREWEthjYrRai2x9kfJ/pg0QQNAGcvCzYbCK4naYpACCKR0pYGDbVG5cAbs7+v+Q2fH99aj4pQCU3zNdTBSQ3eMD5Ag9EJcAl/R4F+pOFR/AMSOB6w7nk+b0gDuLUrmLg8RlAaUigmxfIM0NQMfIFU4AJaV2tAC8BLwE1AF7T0ISZhpLIqZNx7enuISeuKB5lEsg7IgBaJ+MLxEGclRcjglYNqyxGVI61amgu+oTZc1TekBCsDYmPTODpB1yPoEbGdn9QR3A8X34Vcc9o1mrU7W05cBsHfLAgYWWjWdlgwvH00UySs+lsrs6l12lrH/puud44CTT3mc/acPrs8fwH1IMJs2mWBVMAAAAASUVORK5CYII=");\r
1481
+ --pxa-select-slice: 6 fill;\r
1482
+ --pxa-select-width: 6px;\r
1483
+ --pxa-ink: #F0ECFF;\r
1484
+ --pxa-accent: #B49BFF;\r
1485
+ --pxa-accent-bright: #D3C4FF;\r
1486
+ --pxa-hover-wash: rgba(180, 155, 255, 0.12);\r
1487
+ --pxa-tooltip-bg: #171129;\r
1488
+ --pxa-tooltip-ink: #F0ECFF;\r
1489
+ }\r
1490
+ html[data-pixel-theme='pixel-mithril'] body {\r
1491
+ background-color: var(--px-wood-darkest);\r
1492
+ background-image: repeating-conic-gradient(rgba(180, 155, 255, 0.04) 0 25%, transparent 0 50%);\r
1493
+ background-size: 4px 4px;\r
1494
+ }\r
1495
+ \r
1424
1496
  /* ── 共用 9-slice 规则:只在素材主题生效 ─────────────────────────── */\r
1425
1497
  /* 便签的纸面几乎与页面同色,补 2px 墨线把「纸」钉出来;其他素材主题的\r
1426
1498
  * 边缘本身对比足够,--pxa-outline 不设即透明。 */\r
@@ -1789,10 +1861,39 @@ var THEMES = [
1789
1861
  "--dsw-specific-selector": "#3C4A60",
1790
1862
  "--dsw-specific-tip": "#2A3548"
1791
1863
  }
1864
+ },
1865
+ {
1866
+ id: "pixel-mithril",
1867
+ colorScheme: "dark",
1868
+ tokens: {
1869
+ "--dsw-alias-bg-base": "#120E24",
1870
+ "--dsw-alias-bg-layer-1": "#1A1430",
1871
+ "--dsw-alias-bg-layer-2": "#241C42",
1872
+ "--dsw-alias-bg-overlay": "#171129",
1873
+ "--dsw-alias-border-l1": "#3A3260",
1874
+ "--dsw-alias-border-l2": "#9A93D6",
1875
+ "--dsw-alias-brand-primary": "#B49BFF",
1876
+ "--dsw-alias-label-primary": "#F0ECFF",
1877
+ "--dsw-alias-label-secondary": "#BDB4E0",
1878
+ "--dsw-alias-state-error-primary": "#FF7A8A",
1879
+ "--dsw-alias-state-success-primary": "#7BE3B0",
1880
+ "--dsw-alias-state-warn-primary": "#FFD166",
1881
+ "--dsw-alias-state-idle-primary": "#776E9C",
1882
+ "--dsw-specific-sidebar-fill": "#0F0B1E",
1883
+ "--dsw-alias-button-primary-fill": "#9CA1A5",
1884
+ "--dsw-alias-button-primary-hover": "#B7BCC0",
1885
+ "--dsw-alias-label-primary-foreground": "#12101E",
1886
+ "--dsw-specific-bubble": "#241C42",
1887
+ "--dsw-specific-bubble-highlight": "#2E2552",
1888
+ "--dsw-specific-menu": "#171129",
1889
+ "--dsw-specific-input-major": "#1A1430",
1890
+ "--dsw-specific-selector": "#3A3260",
1891
+ "--dsw-specific-tip": "#241C42"
1892
+ }
1792
1893
  }
1793
1894
  ];
1794
1895
  var PIXEL_IDS = THEMES.map((theme) => theme.id);
1795
- var ASSET_IDS = /* @__PURE__ */ new Set(["pixel-hologram", "pixel-pumpkin", "pixel-papernote", "pixel-marble"]);
1896
+ var ASSET_IDS = /* @__PURE__ */ new Set(["pixel-hologram", "pixel-pumpkin", "pixel-papernote", "pixel-marble", "pixel-mithril"]);
1796
1897
  var RESTORABLE_IDS = /* @__PURE__ */ new Set(["light", "dark", "system", ...PIXEL_IDS]);
1797
1898
  var LOCALE_NS = "settings.pixel-ui";
1798
1899
  var MESSAGES = {
@@ -1807,6 +1908,7 @@ var MESSAGES = {
1807
1908
  "theme.pixel-pumpkin": "像素·南瓜灯",
1808
1909
  "theme.pixel-papernote": "像素·便签本",
1809
1910
  "theme.pixel-marble": "像素·云石",
1911
+ "theme.pixel-mithril": "像素·秘银",
1810
1912
  "theme.system": "现代默认"
1811
1913
  },
1812
1914
  en: {
@@ -1820,6 +1922,7 @@ var MESSAGES = {
1820
1922
  "theme.pixel-pumpkin": "Pixel · Pumpkin",
1821
1923
  "theme.pixel-papernote": "Pixel · Papernote",
1822
1924
  "theme.pixel-marble": "Pixel · Marble",
1925
+ "theme.pixel-mithril": "Pixel · Mithril",
1823
1926
  "theme.system": "Modern default"
1824
1927
  }
1825
1928
  };
@@ -1832,6 +1935,7 @@ var THEME_CHOICES = [
1832
1935
  { id: "pixel-pumpkin", swatch: "#FF9E2C" },
1833
1936
  { id: "pixel-papernote", swatch: "#F3DCBC" },
1834
1937
  { id: "pixel-marble", swatch: "#E8EFF2" },
1938
+ { id: "pixel-mithril", swatch: "#B49BFF" },
1835
1939
  { id: "system", swatch: "#7A7A7A" }
1836
1940
  ];
1837
1941
  var fallbackT = (key) => key;
package/lib/client.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/client/index.js", "../src/client/pixel.css"],
4
- "sourcesContent": ["/**\r\n * dsh-pixel-ui — browser half (the pixel skin).\r\n *\r\n * Registers eight pixel themes on the ThemeService seam\r\n * (`ctx.theme.register` with --dsw-alias-* token overrides): wood (dark),\r\n * paper (light), warm (dark), retro-green (dark), hologram / pumpkin /\r\n * papernote / marble (real 9-slice sprites, two light + two dark). The stylesheet\r\n * carries the pixel borders, fonts, cursors, and the asset-theme 9-slice\r\n * layer that alias tokens alone cannot express, scoped to `html[data-pixel-ui]`\r\n * with a `data-pixel-theme` variant attribute, plus `data-pixel-asset` while\r\n * one of the sprite themes is active.\r\n *\r\n * Theme-choice memory is two-layered on purpose:\r\n * 1. the browser `localStorage` mirror (instant, per-origin);\r\n * 2. the host-side durable preference (`/dsh-pixel-ui/preference`,\r\n * stored under $DSH_HOME) which survives DSH Desktop's per-launch\r\n * random local port — the origin (port included) changes on every\r\n * restart, so the mirror alone forgets the choice.\r\n * The host file is authoritative whenever the mirror is absent (new port);\r\n * explicit user picks are written to both layers at once.\r\n *\r\n * The host settings scope persists only the built-in preferences\r\n * (light/dark/system), so switching model / reasoning-effort re-applies that\r\n * built-in and would visibly drop the skin. We keep the user's intended\r\n * theme and re-assert a pixel theme whenever a built-in arrives without an\r\n * explicit choice in the settings row below (restore must be a user action,\r\n * not an app-forced re-init).\r\n *\r\n * @module dsh-pixel-ui/client\r\n */\r\nimport { createElement as h } from 'react'\r\nimport { defineStore } from '@deepseek-ai/dsh-client-store'\r\nimport cssText from './pixel.css'\r\n\r\n/** Plugin name; also the patch row id. */\r\nexport const name = 'dsh-pixel-ui'\r\n\r\n/** Required services: the theme runtime, the settings item slot, the locale. */\r\nexport const inject = ['slots', 'theme', 'locale']\r\n\r\n/** localStorage key carrying the per-origin theme mirror. */\r\nconst THEME_STORAGE_KEY = 'dsh-pixel-ui:theme'\r\n\r\n/** Host-backed durable preference route (registered by the node half). */\r\nconst PREFERENCE_URL = '/dsh-pixel-ui/preference'\r\n\r\n/**\r\n * Page-bootstrap global written by the node half's index injection. DSH\r\n * Desktop renders from `dsh-app://app/`, where the relative fetch above can\r\n * never reach the loopback route, so the injection is the transport that\r\n * exists on both deployments.\r\n */\r\nconst BOOTSTRAP_GLOBAL = '__DSH_PIXEL_UI__'\r\n\r\n/** Default skin for a first run (no mirror, no durable preference). */\r\nconst DEFAULT_SKIN = 'pixel-wood'\r\n\r\n/**\r\n * The eight pixel themes (Agent Xi palettes + four sprite palettes).\r\n *\r\n * Every theme declares the same 23 tokens: the 17 --dsw-alias-* palette\r\n * tokens used by the flat skin, plus six --dsw-specific-* surfaces that the\r\n * Host paints itself (user bubble, composer input, menu surface, selection\r\n * button, tip). Theming those through tokens keeps host-native surfaces in\r\n * palette without a single class-name selector.\r\n */\r\nconst THEMES = [\r\n {\r\n id: 'pixel-wood',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#1A0F06',\r\n '--dsw-alias-bg-layer-1': '#2C1A0C',\r\n '--dsw-alias-bg-layer-2': '#3A2515',\r\n '--dsw-alias-bg-overlay': '#241408',\r\n '--dsw-alias-border-l1': '#4A3020',\r\n '--dsw-alias-border-l2': '#8B6B45',\r\n '--dsw-alias-brand-primary': '#F4D03F',\r\n '--dsw-alias-label-primary': '#F5E6C8',\r\n '--dsw-alias-label-secondary': '#AC8A63',\r\n '--dsw-alias-state-error-primary': '#E74C3C',\r\n '--dsw-alias-state-success-primary': '#7DCE82',\r\n '--dsw-alias-state-warn-primary': '#F39C12',\r\n '--dsw-alias-state-idle-primary': '#7A5C3E',\r\n '--dsw-specific-sidebar-fill': '#241408',\r\n '--dsw-alias-button-primary-fill': '#F4D03F',\r\n '--dsw-alias-button-primary-hover': '#FFE066',\r\n '--dsw-alias-label-primary-foreground': '#1A0F06',\r\n '--dsw-specific-bubble': '#3A2515',\r\n '--dsw-specific-bubble-highlight': '#4A3020',\r\n '--dsw-specific-menu': '#241408',\r\n '--dsw-specific-input-major': '#1A0F06',\r\n '--dsw-specific-selector': '#4A3020',\r\n '--dsw-specific-tip': '#3A2515',\r\n },\r\n },\r\n {\r\n id: 'pixel-paper',\r\n colorScheme: 'light',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#F0E8D8',\r\n '--dsw-alias-bg-layer-1': '#E8DCC8',\r\n '--dsw-alias-bg-layer-2': '#DDD0B8',\r\n '--dsw-alias-bg-overlay': '#E2D6BE',\r\n '--dsw-alias-border-l1': '#D4C4A8',\r\n '--dsw-alias-border-l2': '#7A6A4A',\r\n '--dsw-alias-brand-primary': '#8A6400',\r\n '--dsw-alias-label-primary': '#3A2A10',\r\n '--dsw-alias-label-secondary': '#6B5020',\r\n '--dsw-alias-state-error-primary': '#8B2020',\r\n '--dsw-alias-state-success-primary': '#3A7A40',\r\n '--dsw-alias-state-warn-primary': '#805000',\r\n '--dsw-alias-state-idle-primary': '#847458',\r\n '--dsw-specific-sidebar-fill': '#E8DCC8',\r\n '--dsw-alias-button-primary-fill': '#7A5A00',\r\n '--dsw-alias-button-primary-hover': '#5C4400',\r\n '--dsw-alias-label-primary-foreground': '#FFFDF5',\r\n '--dsw-specific-bubble': '#E3D4B8',\r\n '--dsw-specific-bubble-highlight': '#D8C7A6',\r\n '--dsw-specific-menu': '#FFFDF5',\r\n '--dsw-specific-input-major': '#FFFDF5',\r\n '--dsw-specific-selector': '#D4C4A8',\r\n '--dsw-specific-tip': '#D4C4A8',\r\n },\r\n },\r\n {\r\n id: 'pixel-warm',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#1E0E04',\r\n '--dsw-alias-bg-layer-1': '#34180A',\r\n '--dsw-alias-bg-layer-2': '#4A2210',\r\n '--dsw-alias-bg-overlay': '#2A1308',\r\n '--dsw-alias-border-l1': '#5C2E16',\r\n '--dsw-alias-border-l2': '#A86B40',\r\n '--dsw-alias-brand-primary': '#FF8C42',\r\n '--dsw-alias-label-primary': '#F0C8A0',\r\n '--dsw-alias-label-secondary': '#C08A5C',\r\n '--dsw-alias-state-error-primary': '#D93B3B',\r\n '--dsw-alias-state-success-primary': '#6DBF6D',\r\n '--dsw-alias-state-warn-primary': '#FF8C42',\r\n '--dsw-alias-state-idle-primary': '#8A5A38',\r\n '--dsw-specific-sidebar-fill': '#2A1308',\r\n '--dsw-alias-button-primary-fill': '#FF8C42',\r\n '--dsw-alias-button-primary-hover': '#FFA64D',\r\n '--dsw-alias-label-primary-foreground': '#1E0E04',\r\n '--dsw-specific-bubble': '#4A2210',\r\n '--dsw-specific-bubble-highlight': '#5C2E16',\r\n '--dsw-specific-menu': '#2A1308',\r\n '--dsw-specific-input-major': '#1E0E04',\r\n '--dsw-specific-selector': '#5C2E16',\r\n '--dsw-specific-tip': '#4A2210',\r\n },\r\n },\r\n {\r\n id: 'pixel-retro',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#0A0E0A',\r\n '--dsw-alias-bg-layer-1': '#0E140E',\r\n '--dsw-alias-bg-layer-2': '#121A12',\r\n '--dsw-alias-bg-overlay': '#0C100C',\r\n '--dsw-alias-border-l1': '#2A402A',\r\n '--dsw-alias-border-l2': '#4A7A4A',\r\n '--dsw-alias-brand-primary': '#33FF33',\r\n '--dsw-alias-label-primary': '#33FF33',\r\n '--dsw-alias-label-secondary': '#22AA22',\r\n '--dsw-alias-state-error-primary': '#FF3333',\r\n '--dsw-alias-state-success-primary': '#33FF33',\r\n '--dsw-alias-state-warn-primary': '#FFCC33',\r\n '--dsw-alias-state-idle-primary': '#359035',\r\n '--dsw-specific-sidebar-fill': '#0C100C',\r\n '--dsw-alias-button-primary-fill': '#33FF33',\r\n '--dsw-alias-button-primary-hover': '#66FF66',\r\n '--dsw-alias-label-primary-foreground': '#0A0E0A',\r\n '--dsw-specific-bubble': '#101A10',\r\n '--dsw-specific-bubble-highlight': '#162016',\r\n '--dsw-specific-menu': '#0C100C',\r\n '--dsw-specific-input-major': '#0A0E0A',\r\n '--dsw-specific-selector': '#2A402A',\r\n '--dsw-specific-tip': '#162016',\r\n },\r\n },\r\n {\r\n id: 'pixel-hologram',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#071426',\r\n '--dsw-alias-bg-layer-1': '#10233B',\r\n '--dsw-alias-bg-layer-2': '#1A2E4A',\r\n '--dsw-alias-bg-overlay': '#0A1A2E',\r\n '--dsw-alias-border-l1': '#244A6A',\r\n '--dsw-alias-border-l2': '#3E8FB0',\r\n '--dsw-alias-brand-primary': '#14DCEE',\r\n '--dsw-alias-label-primary': '#E8F7FF',\r\n '--dsw-alias-label-secondary': '#9BC4D4',\r\n '--dsw-alias-state-error-primary': '#FF6B7A',\r\n '--dsw-alias-state-success-primary': '#6FE3C1',\r\n '--dsw-alias-state-warn-primary': '#FFD166',\r\n '--dsw-alias-state-idle-primary': '#52748C',\r\n '--dsw-specific-sidebar-fill': '#081624',\r\n '--dsw-alias-button-primary-fill': '#2C416D',\r\n '--dsw-alias-button-primary-hover': '#385586',\r\n '--dsw-alias-label-primary-foreground': '#E8F7FF',\r\n '--dsw-specific-bubble': '#12314F',\r\n '--dsw-specific-bubble-highlight': '#1A3E60',\r\n '--dsw-specific-menu': '#0A1A2E',\r\n '--dsw-specific-input-major': '#10233B',\r\n '--dsw-specific-selector': '#244A6A',\r\n '--dsw-specific-tip': '#0A1A2E',\r\n },\r\n },\r\n {\r\n id: 'pixel-pumpkin',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#170D06',\r\n '--dsw-alias-bg-layer-1': '#241409',\r\n '--dsw-alias-bg-layer-2': '#2F1B0C',\r\n '--dsw-alias-bg-overlay': '#1C0F07',\r\n '--dsw-alias-border-l1': '#4A2A12',\r\n '--dsw-alias-border-l2': '#C4741F',\r\n '--dsw-alias-brand-primary': '#FF9E2C',\r\n '--dsw-alias-label-primary': '#FFE9C9',\r\n '--dsw-alias-label-secondary': '#D8A76F',\r\n '--dsw-alias-state-error-primary': '#FF7A66',\r\n '--dsw-alias-state-success-primary': '#9BD57A',\r\n '--dsw-alias-state-warn-primary': '#FFC24B',\r\n '--dsw-alias-state-idle-primary': '#A06A3E',\r\n '--dsw-specific-sidebar-fill': '#1B0F07',\r\n '--dsw-alias-button-primary-fill': '#8A3E0C',\r\n '--dsw-alias-button-primary-hover': '#A64E10',\r\n '--dsw-alias-label-primary-foreground': '#FFF6E6',\r\n '--dsw-specific-bubble': '#5A2E10',\r\n '--dsw-specific-bubble-highlight': '#6E3A14',\r\n '--dsw-specific-menu': '#241409',\r\n '--dsw-specific-input-major': '#2A170A',\r\n '--dsw-specific-selector': '#4A2A12',\r\n '--dsw-specific-tip': '#3A2210',\r\n },\r\n },\r\n {\r\n id: 'pixel-papernote',\r\n colorScheme: 'light',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#F2E6D2',\r\n '--dsw-alias-bg-layer-1': '#F6ECD9',\r\n '--dsw-alias-bg-layer-2': '#EEE1C9',\r\n '--dsw-alias-bg-overlay': '#FFFAF2',\r\n '--dsw-alias-border-l1': '#E2D1B4',\r\n '--dsw-alias-border-l2': '#8C5A2C',\r\n '--dsw-alias-brand-primary': '#9A5518',\r\n '--dsw-alias-label-primary': '#3A2412',\r\n '--dsw-alias-label-secondary': '#6E4E2E',\r\n '--dsw-alias-state-error-primary': '#A33225',\r\n '--dsw-alias-state-success-primary': '#3F7A3A',\r\n '--dsw-alias-state-warn-primary': '#8A5A00',\r\n '--dsw-alias-state-idle-primary': '#94795C',\r\n '--dsw-specific-sidebar-fill': '#F6ECD9',\r\n '--dsw-alias-button-primary-fill': '#A3551B',\r\n '--dsw-alias-button-primary-hover': '#8C4713',\r\n '--dsw-alias-label-primary-foreground': '#FFF9F1',\r\n '--dsw-specific-bubble': '#F3DCBC',\r\n '--dsw-specific-bubble-highlight': '#EBC9A0',\r\n '--dsw-specific-menu': '#FFFAF2',\r\n '--dsw-specific-input-major': '#FFF9F1',\r\n '--dsw-specific-selector': '#DCC7A4',\r\n '--dsw-specific-tip': '#E6D7BC',\r\n },\r\n },\r\n {\r\n id: 'pixel-marble',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#161C26',\r\n '--dsw-alias-bg-layer-1': '#1F2836',\r\n '--dsw-alias-bg-layer-2': '#2A3548',\r\n '--dsw-alias-bg-overlay': '#1B2230',\r\n '--dsw-alias-border-l1': '#3C4A60',\r\n '--dsw-alias-border-l2': '#A9C0DA',\r\n '--dsw-alias-brand-primary': '#7FB2E5',\r\n '--dsw-alias-label-primary': '#E9F0F7',\r\n '--dsw-alias-label-secondary': '#AEBCCB',\r\n '--dsw-alias-state-error-primary': '#FF7A7A',\r\n '--dsw-alias-state-success-primary': '#7BE3B0',\r\n '--dsw-alias-state-warn-primary': '#FFC857',\r\n '--dsw-alias-state-idle-primary': '#6F8098',\r\n '--dsw-specific-sidebar-fill': '#121821',\r\n '--dsw-alias-button-primary-fill': '#E8EFF2',\r\n '--dsw-alias-button-primary-hover': '#F6FAFD',\r\n '--dsw-alias-label-primary-foreground': '#1B2230',\r\n '--dsw-specific-bubble': '#2A3548',\r\n '--dsw-specific-bubble-highlight': '#354258',\r\n '--dsw-specific-menu': '#1B2230',\r\n '--dsw-specific-input-major': '#1F2836',\r\n '--dsw-specific-selector': '#3C4A60',\r\n '--dsw-specific-tip': '#2A3548',\r\n },\r\n },\r\n]\r\n\r\nconst PIXEL_IDS = THEMES.map((theme) => theme.id)\r\n\r\n/** Themes whose surfaces come from 9-slice sprites (not just flat colors). */\r\nconst ASSET_IDS = new Set(['pixel-hologram', 'pixel-pumpkin', 'pixel-papernote', 'pixel-marble'])\r\n\r\n/** Built-in preference ids; together with the pixel ids they are restorable. */\r\nconst RESTORABLE_IDS = new Set(['light', 'dark', 'system', ...PIXEL_IDS])\r\n\r\n/** Settings-row copy (zh is the key-set source of truth; en mirrors it). */\r\nconst LOCALE_NS = 'settings.pixel-ui'\r\nconst MESSAGES = {\r\n zh: {\r\n 'row.title': '像素主题',\r\n 'row.desc': '选择后立即生效并跨重启记忆;「现代默认」回到宿主外观',\r\n 'theme.pixel-wood': '像素·木屋',\r\n 'theme.pixel-paper': '像素·羊皮纸',\r\n 'theme.pixel-warm': '像素·暖阳',\r\n 'theme.pixel-retro': '像素·终端绿',\r\n 'theme.pixel-hologram': '像素·全息',\r\n 'theme.pixel-pumpkin': '像素·南瓜灯',\r\n 'theme.pixel-papernote': '像素·便签本',\r\n 'theme.pixel-marble': '像素·云石',\r\n 'theme.system': '现代默认',\r\n },\r\n en: {\r\n 'row.title': 'Pixel theme',\r\n 'row.desc': 'Applies instantly and persists across restarts; “Modern default” returns to the host appearance',\r\n 'theme.pixel-wood': 'Pixel · Wood',\r\n 'theme.pixel-paper': 'Pixel · Paper',\r\n 'theme.pixel-warm': 'Pixel · Warm',\r\n 'theme.pixel-retro': 'Pixel · Terminal Green',\r\n 'theme.pixel-hologram': 'Pixel · Hologram',\r\n 'theme.pixel-pumpkin': 'Pixel · Pumpkin',\r\n 'theme.pixel-papernote': 'Pixel · Papernote',\r\n 'theme.pixel-marble': 'Pixel · Marble',\r\n 'theme.system': 'Modern default',\r\n },\r\n}\r\n\r\n/** Settings row choices: the eight skins plus the modern default escape. */\r\nconst THEME_CHOICES = [\r\n { id: 'pixel-wood', swatch: '#F4D03F' },\r\n { id: 'pixel-paper', swatch: '#FFFDF5' },\r\n { id: 'pixel-warm', swatch: '#FF8C42' },\r\n { id: 'pixel-retro', swatch: '#33FF33' },\r\n { id: 'pixel-hologram', swatch: '#14DCEE' },\r\n { id: 'pixel-pumpkin', swatch: '#FF9E2C' },\r\n { id: 'pixel-papernote', swatch: '#F3DCBC' },\r\n { id: 'pixel-marble', swatch: '#E8EFF2' },\r\n { id: 'system', swatch: '#7A7A7A' },\r\n]\r\n\r\n/** Fallback translator for environments where the slot props carry no `t`. */\r\nconst fallbackT = (key) => key\r\n\r\n/**\r\n * Declares the theme row slot store: a mirror of the theme service\r\n * preference, written only by the plugin's apply-world change listener\r\n * (same shape as the ui-theme Appearance row store).\r\n * @returns the store handle.\r\n */\r\nfunction createThemeRowStore() {\r\n return defineStore({\r\n init: () => ({ preference: null, revision: -1 }),\r\n actions: {\r\n sync: (draft, preference, revision) => {\r\n if (revision <= draft.revision) return\r\n draft.preference = preference\r\n draft.revision = revision\r\n },\r\n },\r\n })\r\n}\r\n\r\n/**\r\n * General-section row: switch between the eight pixel skins and back to the\r\n * modern default. Reads selection state through props.useStore, localized\r\n * copy through props.t, and writes through the injected setTheme callback.\r\n * Each button carries aria-pressed so the current pick is announced, and the\r\n * swatch is decorative (the visible label names the theme).\r\n * @param props - slot shares (useStore, t + injected face).\r\n * @returns the row element tree.\r\n */\r\nfunction ThemeRow(props) {\r\n const preference = props.useStore((state) => state.preference)\r\n const t = typeof props.t === 'function' ? props.t : fallbackT\r\n return h('div', { className: 'px-theme-row', role: 'group', 'aria-label': t('row.title') },\r\n h('div', { className: 'px-theme-row-title' }, t('row.title')),\r\n h('div', { className: 'px-theme-row-desc' }, t('row.desc')),\r\n h('div', { className: 'px-theme-row-cubes' },\r\n THEME_CHOICES.map((choice) => h('button', {\r\n key: choice.id,\r\n type: 'button',\r\n className: 'px-theme-btn' + (preference === choice.id ? ' px-theme-btn-active' : ''),\r\n 'aria-pressed': preference === choice.id,\r\n onClick: () => { props.setTheme(choice.id) },\r\n },\r\n h('span', { className: 'px-theme-swatch', 'aria-hidden': 'true', style: { background: choice.swatch } }),\r\n t(`theme.${choice.id}`),\r\n )),\r\n ),\r\n )\r\n}\r\n\r\n/**\r\n * Read the per-origin mirror; storage failures read as unset. Values outside\r\n * the restorable set (stale ids from an older install, corrupt data) read as\r\n * unset so a first run can still reach the default skin.\r\n * @returns the stored restorable id or null.\r\n */\r\nfunction readLocalTheme() {\r\n try {\r\n const value = localStorage.getItem(THEME_STORAGE_KEY)\r\n return RESTORABLE_IDS.has(value) ? value : null\r\n } catch { return null }\r\n}\r\n\r\n/**\r\n * Write the per-origin mirror; storage failures are non-fatal.\r\n * @param id - theme id to mirror.\r\n */\r\nfunction writeLocalTheme(id) {\r\n try { localStorage.setItem(THEME_STORAGE_KEY, id) } catch { /* best-effort */ }\r\n}\r\n\r\n/**\r\n * Read the host-side durable preference from the index-injection bootstrap\r\n * (desktop transport). Values outside the restorable set read as unset.\r\n * @returns the restorable id or null.\r\n */\r\nfunction readBootTheme() {\r\n try {\r\n const theme = globalThis[BOOTSTRAP_GLOBAL]?.theme\r\n return typeof theme === 'string' && RESTORABLE_IDS.has(theme) ? theme : null\r\n } catch { return null }\r\n}\r\n\r\n/**\r\n * Read the host-side durable preference over the HTTP route (Web transport).\r\n * Any failure (desktop `dsh-app://` origin, old host without the route,\r\n * offline, non-JSON) reads as unset so the local mirror stays usable.\r\n * @returns the restorable id or null.\r\n */\r\nasync function readHostTheme() {\r\n const injected = readBootTheme()\r\n if (injected !== null) return injected\r\n try {\r\n const res = await fetch(PREFERENCE_URL, { headers: { accept: 'application/json' } })\r\n if (!res.ok) return null\r\n const body = await res.json()\r\n const theme = body?.theme\r\n return typeof theme === 'string' && RESTORABLE_IDS.has(theme) ? theme : null\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n/**\r\n * Write the host-side durable preference (fire-and-forget): a failed PUT\r\n * only costs the cross-port memory, never the current session.\r\n * @param id - theme id to persist.\r\n */\r\nfunction writeHostTheme(id) {\r\n try {\r\n fetch(PREFERENCE_URL, {\r\n method: 'PUT',\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify({ theme: id }),\r\n }).catch(() => { /* host unavailable: local mirror still holds */ })\r\n } catch { /* fetch missing: ignore */ }\r\n}\r\n\r\n/** Client plugin body: register the eight themes, restore/persist the choice, inject CSS, locale and the settings row. */\r\nexport function apply(ctx) {\r\n // Scope attributes mirror the active theme, so the stylesheet only shades\r\n // while a pixel theme is selected and the variant rules can pick the palette.\r\n // `data-pixel-asset` marks the sprite themes so the shared 9-slice layer runs\r\n // only for them (flat themes stay flat).\r\n const syncScope = () => {\r\n const active = ctx.theme.getTheme().active\r\n const on = PIXEL_IDS.includes(active.id)\r\n document.documentElement.toggleAttribute('data-pixel-ui', on)\r\n if (on) {\r\n document.documentElement.setAttribute('data-pixel-theme', active.id)\r\n document.documentElement.toggleAttribute('data-pixel-asset', ASSET_IDS.has(active.id))\r\n } else {\r\n document.documentElement.removeAttribute('data-pixel-theme')\r\n document.documentElement.removeAttribute('data-pixel-asset')\r\n }\r\n return on\r\n }\r\n\r\n // True only for the moment the user picks a theme in the settings row below.\r\n let explicit = false\r\n // True from `apply` until the restore below has written the intended skin.\r\n // While it is up, a built-in preference arriving is the Host's own initial\r\n // state (settings scope load, theme registration publish) and must not win\r\n // over the skin the user actually chose.\r\n let restoring = true\r\n\r\n ctx.on('theme/change', (snapshot) => {\r\n syncScope()\r\n const pref = snapshot.preference\r\n if (explicit) {\r\n explicit = false\r\n writeLocalTheme(pref)\r\n writeHostTheme(pref)\r\n return\r\n }\r\n if (PIXEL_IDS.includes(pref)) {\r\n writeLocalTheme(pref)\r\n writeHostTheme(pref)\r\n return\r\n }\r\n const want = readLocalTheme()\r\n if (want !== null && PIXEL_IDS.includes(want)) {\r\n // Host reapplied a built-in (model / reasoning switch, or its own\r\n // startup preference): re-assert the skin the user chose.\r\n try { ctx.theme.setTheme(want) } catch { /* ignore */ }\r\n return\r\n }\r\n if (restoring || want === null) {\r\n // No recorded choice yet: the built-in arriving is the Host's own\r\n // initial state. Recording it here would poison the restore below into\r\n // modern UI, so skip (the restore writes the intended skin itself).\r\n return\r\n }\r\n // A genuine built-in choice (e.g. user clicked Modern default): adopt it.\r\n writeLocalTheme(pref)\r\n writeHostTheme(pref)\r\n })\r\n\r\n ctx.effect(() => {\r\n const disposers = THEMES.map((definition) => ctx.theme.register(definition))\r\n return () => { for (const dispose of disposers) dispose() }\r\n }, 'dsh-pixel-ui: theme registration')\r\n\r\n // Restore the last choice. The per-origin mirror paints instantly; when it\r\n // is absent the injected / routed durable preference is the memory, so the\r\n // first setTheme waits for it instead of flashing the default skin.\r\n const applyTarget = (target) => {\r\n try { ctx.theme.setTheme(target) } catch { /* unknown id: keep current */ }\r\n syncScope()\r\n writeLocalTheme(target)\r\n return ctx.theme.getTheme().active.id === target\r\n }\r\n\r\n const restore = async () => {\r\n const local = readLocalTheme()\r\n if (local !== null) {\r\n applyTarget(local)\r\n const host = await readHostTheme()\r\n if (host !== null && host !== ctx.theme.getTheme().preference) applyTarget(host)\r\n return\r\n }\r\n const host = await readHostTheme()\r\n // A fresh install has no memory anywhere: pick the default skin, and retry\r\n // once because a Host that applies its own preference late would otherwise\r\n // leave the page in modern UI until the next interaction.\r\n if (!applyTarget(host ?? DEFAULT_SKIN)) {\r\n await new Promise((resolve) => { setTimeout(resolve, 120) })\r\n applyTarget(host ?? DEFAULT_SKIN)\r\n }\r\n }\r\n\r\n // `restoring` must drop the moment the intended skin is applied — not when\r\n // the durable read settles. A Host preference landing inside that window\r\n // (settings scope load, theme registration publish) would otherwise be\r\n // adopted as a \"real\" choice and silently drop the skin.\r\n const settle = () => { restoring = false }\r\n void restore().then(settle, settle)\r\n\r\n ctx.effect(() => ctx.locale.register(LOCALE_NS, MESSAGES), 'dsh-pixel-ui: settings row dictionaries')\r\n\r\n // Pixel theme row in the General settings section (alongside Appearance).\r\n const rowStore = createThemeRowStore()\r\n let bound = undefined\r\n const syncRow = (snapshot) => { bound?.sync(snapshot.preference, snapshot.revision) }\r\n ctx.on('theme/change', syncRow)\r\n ctx.slots.inject('settings.general.item', () => ctx.slots.register({\r\n name: 'settings.general.item',\r\n id: 'pixel-theme',\r\n order: 20,\r\n store: rowStore,\r\n locale: LOCALE_NS,\r\n inject: (actions) => {\r\n bound = actions\r\n // Re-sync from the getter so no event is lost between registration and\r\n // first render (the store's revision guard drops stale duplicates).\r\n syncRow(ctx.theme.getTheme())\r\n return { setTheme: (id) => { explicit = true; ctx.theme.setTheme(id) } }\r\n },\r\n }, ThemeRow))\r\n\r\n ctx.effect(() => {\r\n const style = document.createElement('style')\r\n style.dataset.plugin = 'dsh-pixel-ui'\r\n style.textContent = cssText\r\n document.head.appendChild(style)\r\n return () => {\r\n style.remove()\r\n document.documentElement.removeAttribute('data-pixel-ui')\r\n document.documentElement.removeAttribute('data-pixel-theme')\r\n }\r\n }, 'dsh-pixel-ui: stylesheet')\r\n}\r\n", "/* dsh-pixel-ui — 星露谷风像素皮肤(木屋/羊皮纸/暖阳/终端绿/全息/南瓜灯/便签本)\r\n *\r\n * 设计原则(v1.5.0 重写,依据是桌面端实测):\r\n *\r\n * 1. **完全平面(flat)**。用户 2026-10-01 的决定:不要立体效果。\r\n * 所以本表里**没有任何 box-shadow / text-shadow**——凸起、凹陷、浮雕、\r\n * 文字投影全部取消。像素的层次改由三样东西表达:\r\n * ① 整像素描边(2px,内容层 1px);\r\n * ② 平涂色块之间的一档明度差(主题色板自带);\r\n * ③ 2px 棋盘抖动(--px-dither)与手绘 SVG 像素图形。\r\n * 历史上用半透明 inset/outset 做 bevel,在 1.25 DPR 上会渲染成亚像素\r\n * 灰阶毛边,那正是用户最早报的「伪像素」。\r\n *\r\n * 2. **只做 token 表达不了的事**。颜色、背景、文字色交给主题 token;本表负责\r\n * 方角、2px 整像素描边、像素字体、位图缩放、像素光标、像素滚动条。\r\n *\r\n * 3. **选择器必须是「确定的类型」,不许再用 `[class*='card']` 这种子串扫射**。\r\n * v1.4 的 `[class*=...]` 规则命中了宿主大量它没打算命中的元素(`.xz4KEq_*`、\r\n * `.Dc7zOa_*`、`.Hqq-bq_*`、图标类…),结果整个界面被盖上一层厚重黑框,\r\n * 读起来像「处处凹陷的印章」——用户报的「伪像素 / 凹陷」就是它。\r\n * 这里只保留三类选择器:\r\n * a) 真正的 HTML 语义(button/input/table/pre/hr/…);\r\n * b) 稳定的 ARIA 与 data 属性([role=tab]、[aria-selected]、[data-theme]);\r\n * c) 本插件自己的类名(.px-*)与宿主主题 token(--dsw-*)。\r\n *\r\n * 4. **1px 细线只在内容层出现**(表格内线),装饰框一律 2px 起:\r\n * 像素风里 1px 装饰线在非整数缩放下必然糊成灰线。\r\n *\r\n * 5. **动效是像素动效(v1.6.0)**:只用 `steps()` 阶梯、逐帧闪烁和 sprite\r\n * 位移;不做平滑插值、不做 width/height 动画、不移动布局。所有动画都在\r\n * `prefers-reduced-motion: reduce` 下关掉。动效只表达「状态正在变化」\r\n * (思考中/运行中/选中/按下/提示进入),不拿来做装饰。\r\n *\r\n * 作用域 html[data-pixel-ui]:任一像素主题激活时生效,data-pixel-theme 区分配色;\r\n * data-pixel-asset 只在三套真素材主题(全息/南瓜灯/便签本)出现,驱动共用\r\n * 9-slice 层。前四套仍是零素材、零阴影的纯平面皮肤。\r\n */\r\n\r\n@font-face {\r\n font-family: 'Fusion Pixel 12';\r\n src: url('/dsh-pixel-ui/fonts/fusion-pixel-12px.woff2') format('woff2');\r\n font-weight: 400;\r\n font-style: normal;\r\n font-display: swap;\r\n}\r\n@font-face {\r\n font-family: 'Press Start 2P';\r\n src: url('/dsh-pixel-ui/fonts/PressStart2P-Regular.ttf') format('truetype');\r\n font-weight: 400;\r\n font-style: normal;\r\n font-display: swap;\r\n}\r\n\r\n/* ── 基础令牌(木屋=暗色基准,其余主题覆盖配色) ─────────────────── */\r\nhtml[data-pixel-ui] {\r\n /* 木色阶 */\r\n --px-wood-darkest: #1A0F06;\r\n --px-wood-dark: #2C1A0C;\r\n --px-wood-mid: #3A2515;\r\n --px-wood-warm: #4A3020;\r\n --px-wood-light: #6B4C2E;\r\n --px-wood-pale: #8B6B45;\r\n /* 金色阶 */\r\n --px-gold: #F4D03F;\r\n --px-gold-bright: #FFE066;\r\n --px-gold-dark: #C99A00;\r\n --px-gold-deep: #8B6B00;\r\n --px-parchment: #F5E6C8;\r\n --px-text-on-dark: #E8D5B0;\r\n --px-text-light: #AC8A63;\r\n /* 输入件 */\r\n --px-input-bg: #1A0F06;\r\n --px-input-text: #FFFDF5;\r\n --px-input-caret: #F4D03F;\r\n --px-input-ph: #B08A5E;\r\n /* 勾/点:暗色主题用深木色;纸面/便签本用预置的纸白版本(--px-*-light) */\r\n --px-check: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' shape-rendering='crispEdges'%3E%3Cg fill='%231A0F06'%3E%3Crect x='0' y='4' width='2' height='2'/%3E%3Crect x='0' y='6' width='2' height='2'/%3E%3Crect x='2' y='6' width='2' height='2'/%3E%3Crect x='2' y='8' width='2' height='2'/%3E%3Crect x='4' y='4' width='2' height='2'/%3E%3Crect x='4' y='6' width='2' height='2'/%3E%3Crect x='4' y='8' width='2' height='2'/%3E%3Crect x='4' y='10' width='2' height='2'/%3E%3Crect x='6' y='2' width='2' height='2'/%3E%3Crect x='6' y='4' width='2' height='2'/%3E%3Crect x='6' y='6' width='2' height='2'/%3E%3Crect x='6' y='8' width='2' height='2'/%3E%3Crect x='8' y='0' width='2' height='2'/%3E%3Crect x='8' y='2' width='2' height='2'/%3E%3Crect x='8' y='4' width='2' height='2'/%3E%3Crect x='8' y='6' width='2' height='2'/%3E%3Crect x='10' y='0' width='2' height='2'/%3E%3Crect x='10' y='2' width='2' height='2'/%3E%3Crect x='10' y='4' width='2' height='2'/%3E%3C/g%3E%3C/svg%3E\");\r\n --px-radio: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' shape-rendering='crispEdges'%3E%3Crect x='0' y='0' width='8' height='8' fill='%231A0F06'/%3E%3C/svg%3E\");\r\n --px-check-light: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' shape-rendering='crispEdges'%3E%3Cg fill='%23FFFDF5'%3E%3Crect x='0' y='4' width='2' height='2'/%3E%3Crect x='0' y='6' width='2' height='2'/%3E%3Crect x='2' y='6' width='2' height='2'/%3E%3Crect x='2' y='8' width='2' height='2'/%3E%3Crect x='4' y='4' width='2' height='2'/%3E%3Crect x='4' y='6' width='2' height='2'/%3E%3Crect x='4' y='8' width='2' height='2'/%3E%3Crect x='4' y='10' width='2' height='2'/%3E%3Crect x='6' y='2' width='2' height='2'/%3E%3Crect x='6' y='4' width='2' height='2'/%3E%3Crect x='6' y='6' width='2' height='2'/%3E%3Crect x='6' y='8' width='2' height='2'/%3E%3Crect x='8' y='0' width='2' height='2'/%3E%3Crect x='8' y='2' width='2' height='2'/%3E%3Crect x='8' y='4' width='2' height='2'/%3E%3Crect x='8' y='6' width='2' height='2'/%3E%3Crect x='10' y='0' width='2' height='2'/%3E%3Crect x='10' y='2' width='2' height='2'/%3E%3Crect x='10' y='4' width='2' height='2'/%3E%3C/g%3E%3C/svg%3E\");\r\n --px-radio-light: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' shape-rendering='crispEdges'%3E%3Crect x='0' y='0' width='8' height='8' fill='%23FFFDF5'/%3E%3C/svg%3E\");\r\n /* 代码 */\r\n --px-code-bg: #241408;\r\n --px-code-ink: #FFE066;\r\n /* 提示框 */\r\n --px-tooltip-bg: #1A0F06;\r\n /* 强调面 */\r\n --px-accent-bg: #F4D03F;\r\n --px-accent-ink: #1A0F06;\r\n --px-ink-on-mid: #F5E6C8;\r\n /* 描边色:平面皮肤唯一的「线」色,2px 整像素 */\r\n --px-line: #140B04;\r\n /* 纹理:2px 棋盘抖动 */\r\n --px-dither: #241408;\r\n /* 暗角(CRT 只保留暗角,扫描线在非整数 DPR 上必糊) */\r\n --px-vignette: rgba(0, 0, 0, 0.2);\r\n /* 内容列宽:宿主把 --dsh-conversation-column-width 写死成 0,\r\n * clamp(680px, 0 * .64, 920px) 恒取 680px 下限 → 宽屏上正文只占中间一条\r\n * (踩坑 #7)。这里补上那个变量应有的值:正文随视口撑开。 */\r\n --px-chat-width: clamp(680px, calc(64vw - 140px), 1200px);\r\n /* 侧栏 / 顶栏底 */\r\n --px-sidebar-fill: #241408;\r\n --px-topbar-fill: #2C1A0C;\r\n /* 字体栈 */\r\n --px-font: 'Fusion Pixel 12', 'Press Start 2P', monospace;\r\n --px-mono: 'Cascadia Code', 'Consolas', 'Courier New', monospace;\r\n /* 动效:像素动画只走阶梯,不使用平滑曲线(v1.6.0) */\r\n --px-t-fast: 80ms;\r\n --px-t-mid: 140ms;\r\n --px-t-slow: 220ms;\r\n --px-step-2: steps(2, end);\r\n --px-step-4: steps(4, end);\r\n --px-step-8: steps(8, end);\r\n /* 主按钮悬停底色;与 --px-accent-bg / --px-accent-ink 配对做对比度审计 */\r\n --px-accent-hover: #FFE066;\r\n}\r\n\r\n/* ── 四主题配色(Agent Xi 同款) ─────────────────────────────────── */\r\nhtml[data-pixel-theme='pixel-paper'] {\r\n --px-wood-darkest: #F0E8D8;\r\n --px-wood-dark: #E8DCC8;\r\n --px-wood-mid: #DDD0B8;\r\n --px-wood-warm: #D4C4A8;\r\n --px-wood-light: #B8A080;\r\n --px-wood-pale: #9B8B6B;\r\n --px-gold: #A07000;\r\n --px-gold-bright: #6B4F00;\r\n --px-gold-dark: #8A6400;\r\n --px-gold-deep: #7A5A00;\r\n --px-parchment: #FFFDF5;\r\n --px-text-on-dark: #3A2A10;\r\n --px-text-light: #6B5020;\r\n --px-input-bg: #FFFDF5;\r\n --px-input-text: #3A2A10;\r\n --px-input-caret: #8A6400;\r\n --px-input-ph: #8B7040;\r\n /* 深金底上的深木色勾看不清,纸面主题改成纸白勾/点 */\r\n --px-check: var(--px-check-light);\r\n --px-radio: var(--px-radio-light);\r\n --px-code-bg: #E0D4BC;\r\n --px-code-ink: #5C4400;\r\n --px-tooltip-bg: #2A1B08;\r\n --px-accent-bg: #7A5A00;\r\n --px-accent-ink: #FFFDF5;\r\n --px-ink-on-mid: #3A2A10;\r\n --px-line: #8B7040;\r\n --px-dither: #D8C9AC;\r\n --px-vignette: rgba(0, 0, 0, 0.07);\r\n --px-sidebar-fill: #E8DCC8;\r\n --px-topbar-fill: #E8DCC8;\r\n --px-accent-hover: #5C4400;\r\n}\r\nhtml[data-pixel-theme='pixel-warm'] {\r\n --px-wood-darkest: #1E0E04;\r\n --px-wood-dark: #34180A;\r\n --px-wood-mid: #4A2210;\r\n --px-wood-warm: #5C2E16;\r\n --px-wood-light: #8B4A28;\r\n --px-wood-pale: #A86B40;\r\n --px-gold: #FF8C42;\r\n --px-gold-bright: #FFA64D;\r\n --px-gold-dark: #D96E30;\r\n --px-gold-deep: #A05020;\r\n --px-parchment: #FFF0E0;\r\n --px-text-on-dark: #F0C8A0;\r\n --px-text-light: #C08A5C;\r\n --px-input-bg: #1E0E04;\r\n --px-input-text: #FFFBF5;\r\n --px-input-caret: #FF8C42;\r\n --px-input-ph: #C08A5C;\r\n --px-code-bg: #2A1308;\r\n --px-code-ink: #FFA64D;\r\n --px-tooltip-bg: #1E0E04;\r\n --px-accent-bg: #FF8C42;\r\n --px-accent-ink: #1E0E04;\r\n --px-ink-on-mid: #FFF0E0;\r\n --px-line: #150801;\r\n --px-dither: #2A1308;\r\n --px-sidebar-fill: #2A1308;\r\n --px-topbar-fill: #34180A;\r\n --px-accent-hover: #FFA64D;\r\n}\r\nhtml[data-pixel-theme='pixel-retro'] {\r\n --px-wood-darkest: #0A0E0A;\r\n --px-wood-dark: #0E140E;\r\n --px-wood-mid: #121A12;\r\n --px-wood-warm: #162016;\r\n --px-wood-light: #2A402A;\r\n --px-wood-pale: #3A5A3A;\r\n --px-gold: #33FF33;\r\n --px-gold-bright: #66FF66;\r\n --px-gold-dark: #00CC00;\r\n --px-gold-deep: #009900;\r\n --px-parchment: #B8F0B8;\r\n --px-text-on-dark: #33FF33;\r\n --px-text-light: #22AA22;\r\n --px-input-bg: #0A0E0A;\r\n --px-input-text: #33FF33;\r\n --px-input-caret: #33FF33;\r\n --px-input-ph: #22AA22;\r\n --px-code-bg: #0E140E;\r\n --px-code-ink: #66FF66;\r\n --px-tooltip-bg: #0A0E0A;\r\n --px-accent-bg: #33FF33;\r\n --px-accent-ink: #0A0E0A;\r\n --px-ink-on-mid: #B8F0B8;\r\n --px-line: #040704;\r\n --px-dither: #101A10;\r\n --px-sidebar-fill: #0C100C;\r\n --px-topbar-fill: #0E140E;\r\n --px-accent-hover: #66FF66;\r\n}\r\n\r\n/* ── 内容列宽(桌面端「一半一半」的修正,踩坑 #7) ──────────────────\r\n * 宿主只在样式表里声明 `--dsh-chat-content-width: var(--dsh-chat-user-width,\r\n * clamp(680px, calc(var(--dsh-conversation-column-width, 0px) * .64), 920px))`,\r\n * 而 `--dsh-conversation-column-width` 全仓无人赋值 → clamp 恒取 680px。\r\n * 在根作用域用 !important 把两个变量补上(宿主会把 user-width 以内联样式写在\r\n * 容器上,只有 !important 能压过内联)。 */\r\nhtml[data-pixel-ui] {\r\n --dsh-conversation-column-width: calc(100vw - 280px) !important;\r\n --dsh-chat-user-width: var(--px-chat-width) !important;\r\n --dsh-chat-content-width: var(--px-chat-width) !important;\r\n}\r\n/* 兜底:万一宿主把列宽写死在自己的样式层,这里同权重覆盖。 */\r\nhtml[data-pixel-ui] [class*='xz4KEq_column'] {\r\n max-width: var(--px-chat-width);\r\n}\r\n\r\n/* ── 全局:方角、禁次像素平滑、位图缩放 ─────────────────────────── */\r\nhtml[data-pixel-ui] * {\r\n border-radius: 0 !important;\r\n}\r\nhtml[data-pixel-ui] body {\r\n -webkit-font-smoothing: none;\r\n -moz-osx-font-smoothing: grayscale;\r\n text-rendering: geometricPrecision;\r\n font-family: var(--px-font) !important;\r\n /* 0.01em 会把字形推到半像素 → 灰边;像素字体必须整像素落位 */\r\n letter-spacing: 0;\r\n}\r\nhtml[data-pixel-ui] img,\r\nhtml[data-pixel-ui] canvas,\r\nhtml[data-pixel-ui] video {\r\n image-rendering: pixelated;\r\n}\r\nhtml[data-pixel-ui] ::selection {\r\n background: var(--px-accent-bg);\r\n color: var(--px-accent-ink);\r\n}\r\nhtml[data-pixel-ui] :focus-visible {\r\n outline: 2px solid var(--px-gold) !important;\r\n outline-offset: 1px;\r\n}\r\nhtml[data-pixel-ui] {\r\n accent-color: var(--px-gold);\r\n}\r\n\r\n/* 像素动效:闪烁 / 思考条 / 提示进入 / 运行中。全部走 steps 或离散帧。 */\r\n@keyframes px-blink {\r\n 0%, 55% { opacity: 1; }\r\n 56%, 100% { opacity: 0.35; }\r\n}\r\n@keyframes px-toast-in {\r\n from { opacity: 0; transform: translateY(8px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n}\r\n@keyframes px-toast-out {\r\n from { opacity: 1; transform: translateY(0); }\r\n to { opacity: 0; transform: translateY(4px); }\r\n}\r\n@keyframes px-running {\r\n 0%, 100% { border-left-color: var(--px-gold); }\r\n 50% { border-left-color: var(--px-wood-light); }\r\n}\r\n\r\n/* 暗角:只保留径向暗角(扫描线在 1.25 DPR 上必糊成灰膜)。 */\r\nhtml[data-pixel-ui] body::after {\r\n content: \"\";\r\n position: fixed;\r\n inset: 0;\r\n z-index: 2147483647;\r\n pointer-events: none;\r\n background: radial-gradient(ellipse at center, transparent 70%, var(--px-vignette) 100%);\r\n}\r\n@media (prefers-reduced-motion: reduce) {\r\n html[data-pixel-ui] * {\r\n transition: none !important;\r\n animation: none !important;\r\n }\r\n html[data-pixel-ui] *::before,\r\n html[data-pixel-ui] *::after {\r\n transition: none !important;\r\n animation: none !important;\r\n }\r\n}\r\n\r\n/* ── 像素滚动条:方、10px、木色 ─────────────────────────────────── */\r\nhtml[data-pixel-ui] {\r\n scrollbar-color: var(--px-wood-light) var(--px-wood-darkest);\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar {\r\n width: 8px;\r\n height: 8px;\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar-track {\r\n background: var(--px-wood-darkest);\r\n border-left: 2px solid var(--px-wood-dark);\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar-thumb {\r\n background-color: var(--px-wood-light);\r\n border: 2px solid var(--px-wood-darkest);\r\n /* 4×2 的握把,比整条渐变更像像素滚动条 */\r\n background-image: linear-gradient(var(--px-wood-pale), var(--px-wood-pale));\r\n background-size: 4px 2px;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar-thumb:hover {\r\n background-color: var(--px-wood-pale);\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar-thumb:active {\r\n background-color: var(--px-gold-dark);\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar-corner {\r\n background: var(--px-wood-darkest);\r\n}\r\n\r\n/* ── 排版:装饰性文字走像素字体;正文/代码走 mono ────────────────── */\r\nhtml[data-pixel-ui] h1,\r\nhtml[data-pixel-ui] h2,\r\nhtml[data-pixel-ui] h3,\r\nhtml[data-pixel-ui] h4,\r\nhtml[data-pixel-ui] summary,\r\nhtml[data-pixel-ui] button,\r\nhtml[data-pixel-ui] label,\r\nhtml[data-pixel-ui] legend,\r\nhtml[data-pixel-ui] [role='tab'],\r\nhtml[data-pixel-ui] [role='menuitem'],\r\nhtml[data-pixel-ui] [role='tooltip'],\r\nhtml[data-pixel-ui] [role='switch'] {\r\n font-family: var(--px-font) !important;\r\n font-variant-ligatures: none;\r\n}\r\nhtml[data-pixel-ui] h1,\r\nhtml[data-pixel-ui] h2,\r\nhtml[data-pixel-ui] h3 {\r\n color: var(--px-gold-bright) !important;\r\n}\r\n/* 正文/代码层:mono、不加字阴影、长 token 允许断行(像素字体更宽) */\r\nhtml[data-pixel-ui] pre,\r\nhtml[data-pixel-ui] code,\r\nhtml[data-pixel-ui] kbd,\r\nhtml[data-pixel-ui] textarea,\r\nhtml[data-pixel-ui] input,\r\nhtml[data-pixel-ui] p,\r\nhtml[data-pixel-ui] li,\r\nhtml[data-pixel-ui] td,\r\nhtml[data-pixel-ui] th {\r\n font-family: var(--px-mono) !important;\r\n}\r\nhtml[data-pixel-ui] p,\r\nhtml[data-pixel-ui] li {\r\n overflow-wrap: anywhere;\r\n}\r\nhtml[data-pixel-ui] li::marker {\r\n color: var(--px-gold);\r\n}\r\nhtml[data-pixel-ui] kbd {\r\n color: var(--px-text-light) !important;\r\n font-family: var(--px-font) !important;\r\n font-size: 11px;\r\n font-variant-ligatures: none;\r\n}\r\nhtml[data-pixel-ui] mark {\r\n background: var(--px-gold) !important;\r\n color: var(--px-accent-ink) !important;\r\n}\r\n\r\n/* ── 按钮:默认只继承宿主的底与形(宿主大量图标按钮本来就是透明的),\r\n * 只把方角、像素字与「按下去掉一档」的反馈补齐;实心块只在悬停/选中时出现。\r\n * v1.4 给**所有** button 套 2px 黑框 + 内阴影,图标按钮全变成厚盒子,\r\n * 这是用户报「处处凹陷」的主因之一。 ─────────────────────────────── */\r\nhtml[data-pixel-ui] button {\r\n font-size: 12px;\r\n letter-spacing: 0;\r\n border: none !important;\r\n font-variant-ligatures: none;\r\n transition:\r\n background-color var(--px-t-fast) var(--px-step-2),\r\n color var(--px-t-fast) var(--px-step-2),\r\n transform var(--px-t-fast) var(--px-step-2);\r\n}\r\n/* 主按钮/危险按钮的底色由宿主 token 负责,这里不能再把它们刷成木色,\r\n * 否则 hover 时深字落在深底上(v1.5.0 的 generic hover 就踩过这个)。\r\n * 只给「普通按钮」用木色 hover。用 wood-mid 而不是 wood-dark:\r\n * 纸面主题的 wood-dark 和 sidebar 同色,hover 会完全看不见。 */\r\nhtml[data-pixel-ui] button:not(:disabled):not([class*='primary']):not([class*='Primary']):not([class*='danger']):not([class*='Danger']):hover {\r\n background-color: var(--px-wood-mid) !important;\r\n}\r\n/* 主按钮:实心块 + 2px 描边;hover 由 --dsw-alias-button-primary-hover 控制,\r\n * dither 是叠加的 2px 棋盘(不改变底色)。 */\r\nhtml[data-pixel-ui] button[class*='primary']:hover:not(:disabled),\r\nhtml[data-pixel-ui] button[class*='Primary']:hover:not(:disabled) {\r\n background-image: repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-accent-ink) 10%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 4px 4px !important;\r\n}\r\n/* 按下去只做 1px 的整像素位移,不改布局尺寸;松开即回。 */\r\nhtml[data-pixel-ui] button:not(:disabled):active {\r\n transform: translate(1px, 1px);\r\n transition-duration: 0s;\r\n}\r\n/* 已经按下的切换按钮用木色底 + 金色字,和普通 hover 区分开。\r\n * 设置页的像素主题按钮自己管理选中态,不能被这条刷掉。 */\r\nhtml[data-pixel-ui] button[aria-pressed='true']:not(.px-theme-btn) {\r\n background-color: var(--px-wood-mid) !important;\r\n color: var(--px-gold-bright) !important;\r\n}\r\n/* 宿主的 primary token 已能上色;这里再兜一层,保证 token 缺失/第三方按钮\r\n * 也跟随主题,不把宿主默认蓝带进木屋/羊皮纸。 */\r\nhtml[data-pixel-ui] button[class*='primary'],\r\nhtml[data-pixel-ui] button[class*='Primary'] {\r\n background-color: var(--px-accent-bg) !important;\r\n background-image: none !important;\r\n color: var(--px-accent-ink) !important;\r\n border: 2px solid var(--px-line) !important;\r\n}\r\nhtml[data-pixel-ui] button[class*='primary']:hover:not(:disabled),\r\nhtml[data-pixel-ui] button[class*='Primary']:hover:not(:disabled) {\r\n background-color: var(--px-accent-hover) !important;\r\n}\r\nhtml[data-pixel-ui] button[class*='danger'],\r\nhtml[data-pixel-ui] button[class*='Danger'] {\r\n border: 2px solid var(--px-line) !important;\r\n}\r\nhtml[data-pixel-ui] button:disabled {\r\n opacity: 0.55;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* ── 页签(对话/轨迹/记忆):文字 + 金下沿,**不加边框**\r\n * v1.4 给页签套了 2px 黑框,整条读起来像凹陷的输入框(用户报「凹陷了」)。\r\n * 平面皮肤里「选中」只用颜色 + 一条整像素下边线表达,不做凹凸。 */\r\nhtml[data-pixel-ui] [role='tab'] {\r\n position: relative;\r\n font-size: 13px;\r\n font-variant-ligatures: none;\r\n border: none !important;\r\n border-bottom: 3px solid transparent !important;\r\n background-color: transparent !important;\r\n color: var(--px-text-light) !important;\r\n transition: color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] [role='tab']::after {\r\n content: \"\";\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n bottom: -3px;\r\n height: 2px;\r\n background: var(--px-gold);\r\n pointer-events: none;\r\n transform: scaleX(0);\r\n transform-origin: left center;\r\n transition:\r\n transform var(--px-t-mid) var(--px-step-4),\r\n height var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] [role='tab']:hover {\r\n color: var(--px-text-on-dark) !important;\r\n}\r\nhtml[data-pixel-ui] [role='tab']:hover::after {\r\n transform: scaleX(1);\r\n}\r\nhtml[data-pixel-ui] [role='tab'][aria-selected='true'] {\r\n color: var(--px-gold-bright) !important;\r\n background-color: transparent !important;\r\n border-bottom-color: transparent !important;\r\n}\r\nhtml[data-pixel-ui] [role='tab'][aria-selected='true']::after {\r\n height: 3px;\r\n transform: scaleX(1);\r\n}\r\n\r\n/* ── 输入件:黑木底 + 羊皮纸字 + 金框,聚焦金环 ───────────────────\r\n * 只给「真正的输入面」上底和框,`select` 与只读输入保留宿主的形,\r\n * 否则设置页里成排的选择器全变成黑盒子。 */\r\nhtml[data-pixel-ui] input:not([type='checkbox']):not([type='radio']),\r\nhtml[data-pixel-ui] textarea,\r\nhtml[data-pixel-ui] [contenteditable='true'] {\r\n font-size: 12px;\r\n letter-spacing: 0;\r\n font-variant-ligatures: none;\r\n color: var(--px-input-text) !important;\r\n -webkit-text-fill-color: var(--px-input-text) !important;\r\n caret-color: var(--px-input-caret) !important;\r\n caret-shape: block;\r\n background-color: var(--px-input-bg) !important;\r\n border: 2px solid var(--px-gold-deep) !important;\r\n transition: border-color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] input:not([type='checkbox']):not([type='radio']):hover:not(:focus),\r\nhtml[data-pixel-ui] textarea:hover:not(:focus),\r\nhtml[data-pixel-ui] [contenteditable='true']:hover:not(:focus) {\r\n border-color: var(--px-gold-dark) !important;\r\n}\r\nhtml[data-pixel-ui] input:focus,\r\nhtml[data-pixel-ui] textarea:focus,\r\nhtml[data-pixel-ui] [contenteditable='true']:focus {\r\n border-color: var(--px-gold) !important;\r\n outline: none !important;\r\n}\r\nhtml[data-pixel-ui] select {\r\n color: var(--px-input-text) !important;\r\n background-color: transparent !important;\r\n border: 2px solid var(--px-gold-deep) !important;\r\n transition: border-color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] select:hover:not(:focus) {\r\n border-color: var(--px-gold-dark) !important;\r\n}\r\nhtml[data-pixel-ui] select:focus {\r\n border-color: var(--px-gold) !important;\r\n outline: none !important;\r\n}\r\nhtml[data-pixel-ui] input::placeholder,\r\nhtml[data-pixel-ui] textarea::placeholder {\r\n color: var(--px-input-ph) !important;\r\n -webkit-text-fill-color: var(--px-input-ph) !important;\r\n opacity: 1;\r\n}\r\nhtml[data-pixel-ui] [contenteditable='true']:empty::before {\r\n color: var(--px-input-ph) !important;\r\n -webkit-text-fill-color: var(--px-input-ph) !important;\r\n}\r\n\r\n/* ── 选择件:复选框 / 单选 / 开关 / 滑块 ───────────────────────── */\r\nhtml[data-pixel-ui] input[type='checkbox'],\r\nhtml[data-pixel-ui] input[type='radio'] {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n width: 14px;\r\n height: 14px;\r\n padding: 0;\r\n flex-shrink: 0;\r\n background-color: var(--px-input-bg) !important;\r\n border: 2px solid var(--px-line) !important;\r\n transition:\r\n background-color var(--px-t-fast) var(--px-step-2),\r\n border-color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] input[type='checkbox']:not(:checked):hover,\r\nhtml[data-pixel-ui] input[type='radio']:not(:checked):hover {\r\n border-color: var(--px-gold-dark) !important;\r\n}\r\nhtml[data-pixel-ui] input[type='checkbox']:checked {\r\n background-color: var(--px-gold) !important;\r\n /* 12×12 手绘像素对勾(2px 阶梯),颜色由 --px-check 按主题切换 */\r\n background-image: var(--px-check) !important;\r\n background-repeat: no-repeat !important;\r\n background-position: 3px 1px !important;\r\n border: 2px solid var(--px-line) !important;\r\n}\r\nhtml[data-pixel-ui] input[type='radio']:checked {\r\n background-color: var(--px-gold) !important;\r\n /* 平色时代没有 inset 灰阶可用:8×8 手绘像素方点,颜色由 --px-radio 切换 */\r\n background-image: var(--px-radio) !important;\r\n background-size: 6px 6px !important;\r\n background-position: 2px 2px !important;\r\n background-repeat: no-repeat !important;\r\n}\r\nhtml[data-pixel-ui] select {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n padding-right: 28px !important;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8' shape-rendering='crispEdges'%3E%3Crect x='0' y='0' width='8' height='2'/%3E%3Crect x='1' y='2' width='6' height='2'/%3E%3Crect x='2' y='4' width='4' height='2'/%3E%3Crect x='3' y='6' width='2' height='2'/%3E%3C/svg%3E\") !important;\r\n background-repeat: no-repeat !important;\r\n background-position: right 8px center !important;\r\n}\r\nhtml[data-pixel-ui] select option {\r\n background-color: var(--px-input-bg);\r\n color: var(--px-input-text);\r\n}\r\nhtml[data-pixel-ui] [role='switch'] {\r\n border: 2px solid var(--px-line) !important;\r\n background-color: var(--px-wood-dark) !important;\r\n transition: border-color var(--px-t-fast) var(--px-step-2), background-color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] [role='switch']:hover {\r\n border-color: var(--px-gold-dark) !important;\r\n}\r\nhtml[data-pixel-ui] input[type='range'] {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n height: 14px;\r\n padding: 0;\r\n border: none !important;\r\n background: transparent !important;\r\n}\r\nhtml[data-pixel-ui] input[type='range']::-webkit-slider-runnable-track {\r\n height: 8px;\r\n border: 2px solid var(--px-line);\r\n background-color: var(--px-wood-mid);\r\n}\r\nhtml[data-pixel-ui] input[type='range']::-webkit-slider-thumb {\r\n -webkit-appearance: none;\r\n width: 12px;\r\n height: 14px;\r\n margin-top: -5px;\r\n background-color: var(--px-gold);\r\n border: 2px solid var(--px-line);\r\n transition: background-color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] input[type='range']::-webkit-slider-thumb:hover {\r\n background-color: var(--px-gold-bright);\r\n}\r\nhtml[data-pixel-ui] input[type='range']::-moz-range-track {\r\n height: 8px;\r\n border: 2px solid var(--px-line);\r\n background: var(--px-wood-mid);\r\n}\r\nhtml[data-pixel-ui] input[type='range']::-moz-range-thumb {\r\n width: 12px;\r\n height: 14px;\r\n background-color: var(--px-gold);\r\n border: 2px solid var(--px-line);\r\n border-radius: 0;\r\n}\r\n\r\n/* ── 内容层:代码块 / 行内代码 / 引用 / 表格 / 分隔线 ─────────────── */\r\nhtml[data-pixel-ui] pre {\r\n background: var(--px-code-bg) !important;\r\n color: var(--px-text-on-dark) !important;\r\n border: 2px solid var(--px-wood-light) !important;\r\n border-left: 4px solid var(--px-gold-deep) !important;\r\n}\r\n/* 代码块顶栏:像终端窗口的 title bar,2px 底线 + 左侧金色方块。 */\r\nhtml[data-pixel-ui] [data-code-block-banner] {\r\n background-color: var(--px-wood-mid) !important;\r\n color: var(--px-text-light) !important;\r\n border-bottom: 2px solid var(--px-line) !important;\r\n border-left: 4px solid var(--px-gold) !important;\r\n font-family: var(--px-font) !important;\r\n font-size: 11px;\r\n letter-spacing: 0;\r\n font-variant-ligatures: none;\r\n}\r\nhtml[data-pixel-ui] [data-code-block-banner] button {\r\n background: transparent !important;\r\n color: var(--px-text-on-dark) !important;\r\n border: none !important;\r\n padding: 0 4px;\r\n}\r\nhtml[data-pixel-ui] code {\r\n background: var(--px-code-bg) !important;\r\n color: var(--px-code-ink) !important;\r\n border: none !important;\r\n padding: 0 3px;\r\n}\r\nhtml[data-pixel-ui] pre code {\r\n background: transparent !important;\r\n color: inherit !important;\r\n padding: 0;\r\n}\r\nhtml[data-pixel-ui] blockquote {\r\n border: 2px solid var(--px-wood-light) !important;\r\n border-left: 4px solid var(--px-gold) !important;\r\n background-color: var(--px-wood-dark) !important;\r\n background-image: repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold) 5%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 4px 4px !important;\r\n color: var(--px-text-on-dark) !important;\r\n padding: 6px 10px;\r\n}\r\nhtml[data-pixel-ui] hr {\r\n border: none !important;\r\n height: 2px;\r\n background: repeating-linear-gradient(\r\n 90deg,\r\n var(--px-wood-light) 0 2px,\r\n transparent 2px 4px\r\n ) !important;\r\n}\r\nhtml[data-pixel-ui] table {\r\n border: 2px solid var(--px-wood-warm) !important;\r\n border-collapse: collapse;\r\n}\r\nhtml[data-pixel-ui] tbody tr:nth-child(even) td {\r\n background-color: color-mix(in srgb, var(--px-wood-mid) 32%, transparent) !important;\r\n}\r\nhtml[data-pixel-ui] tbody tr:hover td {\r\n background-color: var(--px-wood-mid) !important;\r\n}\r\nhtml[data-pixel-ui] th {\r\n background-color: var(--px-wood-warm) !important;\r\n color: var(--px-ink-on-mid) !important;\r\n font-family: var(--px-font) !important;\r\n font-size: 12px;\r\n border: 1px solid var(--px-wood-light) !important;\r\n}\r\nhtml[data-pixel-ui] td {\r\n border: 1px solid var(--px-wood-light) !important;\r\n}\r\nhtml[data-pixel-ui] a {\r\n color: var(--px-gold-bright) !important;\r\n text-decoration-color: var(--px-gold-dark);\r\n text-decoration-thickness: 2px;\r\n text-underline-offset: 3px;\r\n transition: color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] a:hover {\r\n color: var(--px-gold) !important;\r\n}\r\nhtml[data-pixel-ui] summary {\r\n cursor: pointer;\r\n color: var(--px-gold-bright) !important;\r\n transition: color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] summary:hover {\r\n color: var(--px-gold) !important;\r\n}\r\n\r\n/* ── 工具提示 / 菜单 / 状态条 ──────────────────────────────────── */\r\nhtml[data-pixel-ui] [role='tooltip'] {\r\n font-size: 11px;\r\n line-height: 1.6;\r\n color: var(--px-parchment) !important;\r\n background: var(--px-tooltip-bg) !important;\r\n border: 2px solid var(--px-gold-deep) !important;\r\n background-image:\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n linear-gradient(var(--px-gold), var(--px-gold)) !important;\r\n background-size: 6px 2px, 2px 6px !important;\r\n background-position: 0 0, 0 0 !important;\r\n background-repeat: no-repeat !important;\r\n}\r\nhtml[data-pixel-ui] [data-menu-material],\r\nhtml[data-pixel-ui] [role='menu'] {\r\n border: 2px solid var(--px-line) !important;\r\n /* 2px 描边不能再把固定宽度的菜单撑出 4px 横向滚动条 */\r\n box-sizing: border-box !important;\r\n overflow-x: hidden !important;\r\n}\r\n/* 菜单的滚动容器在 role=menu 的内部(宿主 _viewport_),只给外层\r\n * overflow-x:hidden 拦不住内部那一条;菜单不需要横向滚动,一律 clip。 */\r\nhtml[data-pixel-ui] [role='menu'] *,\r\nhtml[data-pixel-ui] [data-menu-material] * {\r\n overflow-x: clip !important;\r\n}\r\nhtml[data-pixel-ui] [role='dialog'] {\r\n /* dialog 默认 content-box 时,2px 边框同样会撑出内部横向滚动条 */\r\n box-sizing: border-box !important;\r\n}\r\nhtml[data-pixel-ui] [role='dialog'] nav,\r\nhtml[data-pixel-ui] [role='dialog'] [role='tablist'] {\r\n overflow-x: hidden !important;\r\n}\r\n/* 设置页左侧导航是“列 flex + 按钮”的结构:按钮的 min-width:auto 会把\r\n * 像素字体的 min-content 宽度顶出去,navList 就会出现横向滚动条。 */\r\nhtml[data-pixel-ui] [role='dialog'] button {\r\n min-width: 0;\r\n}\r\n/* 设置对话框的底色正好是 wood-mid;通用 hover 也是 wood-mid,等于没变。\r\n * 对话框内普通按钮改用 wood-warm,至少和面板底色差一档明度。 */\r\nhtml[data-pixel-ui] [role='dialog'] button:not(:disabled):not([class*='primary']):not([class*='Primary']):not([class*='danger']):not([class*='Danger']):hover {\r\n background-color: var(--px-wood-warm) !important;\r\n}\r\n/* 设置页左导航是 div.navList(直接子级全是 button,其中一个是 aria-current),\r\n * overflow-y:auto 会把 overflow-x 也算成 auto;内容只要宽 1px 就冒横向滚动条。 */\r\nhtml[data-pixel-ui] [role='dialog'] div:has(> button[aria-current]) {\r\n overflow-x: hidden !important;\r\n}\r\nhtml[data-pixel-ui] [role='menuitem']:hover,\r\nhtml[data-pixel-ui] [role='option']:hover,\r\nhtml[data-pixel-ui] [role='treeitem']:hover {\r\n background-color: var(--px-wood-mid) !important;\r\n}\r\n/* 菜单项即使不在 [role=menu] 外壳里(宿主 portal/自定义菜单)也要有\r\n * 可见的文字色变化 + 金色左条,不能只赌底色和菜单面不同。 */\r\nhtml[data-pixel-ui] [role='menuitem']:hover {\r\n color: var(--px-gold-bright) !important;\r\n background-image:\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold) 8%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 3px 100%, 4px 4px !important;\r\n background-position: 0 0, 0 0 !important;\r\n background-repeat: no-repeat, repeat !important;\r\n}\r\nhtml[data-pixel-ui] [role='option']:hover {\r\n color: var(--px-gold-bright) !important;\r\n}\r\n/* 菜单项(设置/意见反馈/退出登录…)在宿主里是 button[role=menuitem],\r\n * 菜单表面本身可能是 wood-mid 或宿主灰;只换底色仍然可能看不见。\r\n * 这里固定叠 3px 金色左条 + 2px dither,并把文字提到 gold-bright。 */\r\nhtml[data-pixel-ui] [role='menu'] [role='menuitem']:hover,\r\nhtml[data-pixel-ui] [data-menu-material] [role='menuitem']:hover,\r\nhtml[data-pixel-ui] [role='menu'] button:hover,\r\nhtml[data-pixel-ui] [data-menu-material] button:hover {\r\n background-color: var(--px-wood-mid) !important;\r\n color: var(--px-gold-bright) !important;\r\n background-image:\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold) 8%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 3px 100%, 4px 4px !important;\r\n background-position: 0 0, 0 0 !important;\r\n background-repeat: no-repeat, repeat !important;\r\n}\r\nhtml[data-pixel-ui] [role='menuitem'] {\r\n transition:\r\n background-color var(--px-t-fast) var(--px-step-2),\r\n color var(--px-t-fast) var(--px-step-2);\r\n}\r\n/* 危险菜单项(退出登录等)保留红色语义,不跟着菜单 hover 变金。 */\r\nhtml[data-pixel-ui] button[role='menuitem'][class*='danger']:hover {\r\n color: var(--px-state-error, var(--dsw-alias-state-error-primary, #E74C3C)) !important;\r\n background-image: linear-gradient(\r\n var(--px-state-error, var(--dsw-alias-state-error-primary, #E74C3C)),\r\n var(--px-state-error, var(--dsw-alias-state-error-primary, #E74C3C))\r\n ) !important;\r\n background-size: 3px 100% !important;\r\n background-repeat: no-repeat !important;\r\n}\r\nhtml[data-pixel-ui] [role='treeitem'][aria-selected='true'] {\r\n background-color: var(--px-wood-dark) !important;\r\n background-image: linear-gradient(var(--px-gold), var(--px-gold));\r\n background-repeat: no-repeat;\r\n background-position: 0 0;\r\n background-size: 2px 100%;\r\n color: var(--px-gold-bright) !important;\r\n}\r\n/* 已选中的会话行也要有 hover 反馈:宿主把 selected 和 hover 写成同一个背景,\r\n * 我们的 selected 规则又在 hover 之后,不补这一条就会出现「悬停完全没反应」。 */\r\nhtml[data-pixel-ui] [role='treeitem'][aria-selected='true']:hover {\r\n background-color: var(--px-wood-mid) !important;\r\n}\r\n/* 未选中的会话/项目行:hover 时补 2px 金色左侧条,别只靠一档底色。 */\r\nhtml[data-pixel-ui] [role='treeitem']:hover:not([aria-selected='true']) {\r\n background-image: linear-gradient(var(--px-gold-deep), var(--px-gold-deep));\r\n background-repeat: no-repeat;\r\n background-position: 0 0;\r\n background-size: 2px 100%;\r\n color: var(--px-parchment) !important;\r\n}\r\nhtml[data-pixel-ui] [role='menuitem'][aria-current='page'] {\r\n background-color: var(--px-wood-dark) !important;\r\n background-image: linear-gradient(var(--px-gold), var(--px-gold));\r\n background-repeat: no-repeat;\r\n background-position: 0 0;\r\n background-size: 3px 100%;\r\n color: var(--px-gold-bright) !important;\r\n}\r\n/* 侧栏/列表的当前项:3px 金色左条,不占布局。 */\r\nhtml[data-pixel-ui] [aria-current='page'] {\r\n background-color: var(--px-wood-mid) !important;\r\n color: var(--px-gold-bright) !important;\r\n background-image: linear-gradient(var(--px-gold), var(--px-gold));\r\n background-repeat: no-repeat;\r\n background-position: 0 0;\r\n background-size: 3px 100%;\r\n}\r\nhtml[data-pixel-ui] [aria-current='page']:hover {\r\n background-color: var(--px-wood-mid) !important;\r\n background-image:\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold) 8%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 3px 100%, 4px 4px !important;\r\n background-position: 0 0, 0 0 !important;\r\n background-repeat: no-repeat, repeat !important;\r\n}\r\n/* 吸顶分组标题:粘住时补 2px 底线,和滚动内容分开。 */\r\nhtml[data-pixel-ui] [data-stuck] {\r\n border-bottom: 2px solid var(--px-wood-light) !important;\r\n background-image: repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold) 5%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 4px 4px !important;\r\n}\r\n/* 终端块 / diff 卡片:左侧运行条 + 代码块同款描边。 */\r\nhtml[data-pixel-ui] [data-terminal] {\r\n border: 2px solid var(--px-wood-light) !important;\r\n}\r\nhtml[data-pixel-ui] [data-terminal][data-running] {\r\n border-left: 3px solid var(--px-gold) !important;\r\n animation: px-running 1.1s steps(2, end) infinite;\r\n}\r\nhtml[data-pixel-ui] [data-diff] {\r\n border-left: 4px solid var(--px-gold-deep) !important;\r\n}\r\n/* 标签:左侧 2px 色条代替圆角/渐变;色条落在原有 8px 内边距里,不改宽。 */\r\nhtml[data-pixel-ui] [data-tone] {\r\n border-radius: 0 !important;\r\n background-image: linear-gradient(currentColor, currentColor);\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n background-size: 2px calc(100% - 4px);\r\n}\r\n\r\n/* ── 反馈层:toast / dialog / 思考中 / 状态点 ───────────────────── */\r\nhtml[data-pixel-ui] [role='alert'] {\r\n border: 2px solid var(--px-line) !important;\r\n border-left: 4px solid var(--px-gold) !important;\r\n background-color: var(--px-tooltip-bg) !important;\r\n color: var(--px-parchment) !important;\r\n animation: px-toast-in var(--px-t-slow) steps(3, end) both;\r\n}\r\nhtml[data-pixel-ui] [role='alert'][data-closing] {\r\n animation: px-toast-out 120ms steps(2, end) both;\r\n}\r\nhtml[data-pixel-ui] [role='dialog'] {\r\n border: 2px solid var(--px-line) !important;\r\n background-image:\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n linear-gradient(var(--px-gold), var(--px-gold)) !important;\r\n background-size: 10px 2px, 2px 10px, 10px 2px, 2px 10px !important;\r\n background-position: 0 0, 0 0, 100% 100%, 100% 100% !important;\r\n background-repeat: no-repeat !important;\r\n}\r\n/* 思考中的行:保留宿主文字,但把 1.5s 的平滑扫光改成 4 帧阶梯,\r\n * 并在左侧补一条 2px 的闪烁光标(位置由宿主 decoration 承担,不加布局)。 */\r\nhtml[data-pixel-ui] [data-shimmer] {\r\n position: relative;\r\n}\r\nhtml[data-pixel-ui] [data-shimmer] > [aria-hidden='true'] {\r\n background-image: linear-gradient(var(--px-gold), var(--px-gold));\r\n background-size: 2px 100%;\r\n background-position: 0 0;\r\n background-repeat: no-repeat;\r\n animation: px-blink 1.2s steps(1, end) infinite;\r\n}\r\nhtml[data-pixel-ui] [data-shimmer] > [aria-hidden='true'] * {\r\n color: var(--px-gold) !important;\r\n animation-duration: 1.2s !important;\r\n animation-timing-function: steps(4, end) !important;\r\n}\r\nhtml[data-pixel-ui] span[data-state='ongoing'] {\r\n animation: px-blink 1.1s steps(1, end) infinite;\r\n}\r\nhtml[data-pixel-ui] [data-state='ongoing'] * {\r\n animation-timing-function: steps(8, end) !important;\r\n}\r\n\r\n/* ── 像素光标(SVG data-URI 阶梯箭头) ──────────────────────────── */\r\nhtml[data-pixel-ui] body {\r\n cursor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' shape-rendering='crispEdges'%3E%3Cpath d='M2 2v17h3v-3h3v-3h3v-3h3v-3h3V2z' fill='%23FFFDF5' stroke='%231A0F06' stroke-width='2'/%3E%3C/svg%3E\") 2 2, auto;\r\n}\r\n/* 浅色纸面:白填充的箭头会和纸面糊在一起,换成深棕填充 + 纸白描边。 */\r\nhtml[data-pixel-theme='pixel-paper'] body {\r\n cursor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' shape-rendering='crispEdges'%3E%3Cpath d='M2 2v17h3v-3h3v-3h3v-3h3v-3h3V2z' fill='%233A2A10' stroke='%23FFFDF5' stroke-width='2'/%3E%3C/svg%3E\") 2 2, auto;\r\n}\r\nhtml[data-pixel-ui] button,\r\nhtml[data-pixel-ui] a,\r\nhtml[data-pixel-ui] select,\r\nhtml[data-pixel-ui] [role='tab'],\r\nhtml[data-pixel-ui] [role='menuitem'],\r\nhtml[data-pixel-ui] [role='switch'],\r\nhtml[data-pixel-ui] [role='treeitem'],\r\nhtml[data-pixel-ui] [role='option'],\r\nhtml[data-pixel-ui] [role='button'],\r\nhtml[data-pixel-ui] [role='link'],\r\nhtml[data-pixel-ui] [aria-selected],\r\nhtml[data-pixel-ui] [aria-current] {\r\n cursor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' shape-rendering='crispEdges'%3E%3Cpath d='M2 2v17h3v-3h3v-3h3v-3h3v-3h3V2z' fill='%23F4D03F' stroke='%231A0F06' stroke-width='2'/%3E%3C/svg%3E\") 2 2, pointer;\r\n}\r\n/* 宿主的 .sessionRow / .projectRow 只在行上写 cursor:pointer;子 span 若被\r\n * 宿主另写 cursor 会导致箭头/默认小手混用。让可交互行内的非文本子元素继承\r\n * 同一个像素手,输入框和 contenteditable 保持像素 I-beam。 */\r\nhtml[data-pixel-ui] :is(button, a, select, [role='tab'], [role='menuitem'], [role='switch'], [role='treeitem'], [role='option'], [role='button'], [role='link']) *:not(input):not(textarea):not([contenteditable='true']) {\r\n cursor: inherit !important;\r\n}\r\nhtml[data-pixel-ui] input,\r\nhtml[data-pixel-ui] textarea,\r\nhtml[data-pixel-ui] [contenteditable='true'] {\r\n cursor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' shape-rendering='crispEdges'%3E%3Cpath d='M5 3h4v2h2v2h2v2h2v2h2v2h2v6h-2v2h-4v2H5z' fill='%23FFFDF5' stroke='%231A0F06' stroke-width='2'/%3E%3C/svg%3E\") 4 3, text;\r\n}\r\n\r\n/* ── 设置页「像素主题」行 ─────────────────────────────────────────\r\n * 这一段**不跟随皮肤作用域**:像素主题激活时用 --px-* 值,\r\n * 现代默认(浅色/深色/跟随系统)回落到 --dsw-alias-* 宿主 token,\r\n * 保证行在任何外观下都清晰可点、对比度达标。\r\n * 触摸目标 ≥32px(WCAG 2.2 web 目标 24px 之上留手感余量)。 */\r\n.px-theme-row {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n padding: 12px 0;\r\n border-top: 2px solid var(--px-wood-pale, var(--dsw-alias-border-l2, #6b5a3a));\r\n}\r\n.px-theme-row-title {\r\n font-family: var(--px-font, inherit);\r\n font-size: 12px;\r\n font-variant-ligatures: none;\r\n color: var(--px-gold-bright, var(--dsw-alias-label-primary));\r\n}\r\n.px-theme-row-desc {\r\n font-size: 11px;\r\n line-height: 1.6;\r\n color: var(--px-text-light, var(--dsw-alias-label-secondary));\r\n}\r\n.px-theme-row-cubes {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n}\r\n.px-theme-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n min-height: 32px;\r\n padding: 6px 12px;\r\n font-family: var(--px-font, inherit);\r\n font-size: 11px;\r\n font-variant-ligatures: none;\r\n color: var(--px-text-on-dark, var(--dsw-alias-label-primary));\r\n background-color: var(--px-wood-dark, var(--dsw-alias-bg-layer-1));\r\n border: 2px solid var(--px-wood-darkest, var(--dsw-alias-border-l1));\r\n border-radius: 0 !important;\r\n cursor: pointer;\r\n transition:\r\n transform var(--px-t-fast, 80ms) steps(2, end),\r\n background-color var(--px-t-fast, 80ms) steps(2, end),\r\n background-image var(--px-t-fast, 80ms) steps(2, end);\r\n}\r\n.px-theme-btn:hover {\r\n background-color: var(--px-wood-mid, var(--dsw-alias-bg-layer-2));\r\n background-image: repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold, #F4D03F) 7%, transparent) 0 25%,\r\n transparent 0 50%\r\n );\r\n background-size: 4px 4px;\r\n}\r\n.px-theme-btn:active {\r\n transform: translate(1px, 1px);\r\n transition-duration: 0s;\r\n}\r\n.px-theme-btn:focus-visible {\r\n outline: 2px solid var(--px-gold, var(--dsw-alias-state-business-primary, currentColor));\r\n outline-offset: 2px;\r\n}\r\n.px-theme-btn-active {\r\n color: var(--px-accent-ink, var(--dsw-alias-label-on-accent, #fff));\r\n background-color: var(--px-accent-bg, var(--dsw-alias-brand-primary));\r\n background-image: repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-accent-ink, #1A0F06) 8%, transparent) 0 25%,\r\n transparent 0 50%\r\n );\r\n background-size: 4px 4px;\r\n border-color: var(--px-gold-deep, var(--dsw-alias-border-l2));\r\n}\r\n.px-theme-btn-active:hover {\r\n background-color: var(--px-accent-hover, var(--dsw-alias-button-primary-hover, var(--px-accent-bg)));\r\n}\r\n.px-theme-swatch {\r\n width: 10px;\r\n height: 10px;\r\n border: 2px solid #000;\r\n flex-shrink: 0;\r\n}\r\n\r\n/* ── 真 PNG 9-slice 素材层:全息 / 南瓜灯 / 便签本 ───────────────────\r\n * 三套素材主题共用下面这一层规则,差异全部收敛到 --pxa-* 变量\r\n * (图片、切片、边框宽度、重复方式、文字色)。素材在构建时由\r\n * scripts/asset-inline.mjs 转成 data URI:浏览器端不再依赖宿主素材路由,\r\n * 换素材只需要重新 build + 刷新页面,不必重启 DSH Desktop。\r\n * 素材:Complete UI Essential Pack v2.4 © Crusenho Agus Hennihuno,\r\n * CC BY 4.0;每套的源文件映射与署名见 assets/complete-ui/<theme>/ATTRIBUTION.md。\r\n *\r\n * v1.7 留下的两条硬规则:\r\n * ① Tooltip / Toast 不套大面板图,只换成 2px 主题色边(木刻版翻车点);\r\n * ② 横条主按钮和方形图标按钮用不同素材,绝不把 96×32 塞进方块。\r\n */\r\n\r\n/* 全息:深蓝 + 青。96×96 面板、96×32 主按钮、32×32 图标框。 */\r\nhtml[data-pixel-theme='pixel-hologram'] {\r\n --px-wood-darkest: #071426;\r\n --px-wood-dark: #10233B;\r\n --px-wood-mid: #1A2E4A;\r\n --px-wood-warm: #244A6A;\r\n --px-wood-light: #3E8FB0;\r\n --px-wood-pale: #9BC4D4;\r\n --px-text-on-dark: #E8F7FF;\r\n --px-text-light: #9BC4D4;\r\n --px-parchment: #E8F7FF;\r\n --px-gold: #14DCEE;\r\n --px-gold-bright: #7DF3FF;\r\n --px-gold-dark: #0FA8B8;\r\n --px-gold-deep: #0B6F7A;\r\n --px-sidebar-fill: #081624;\r\n --px-line: #1B5A6A;\r\n --px-accent-bg: #2C416D;\r\n --px-accent-hover: #385586;\r\n --px-accent-ink: #E8F7FF;\r\n --px-input-bg: #1A2E4A;\r\n --px-input-text: #E8F7FF;\r\n --px-input-ph: #8FB6C9;\r\n --px-input-caret: #14DCEE;\r\n --px-tooltip-bg: #0A1A2E;\r\n --px-code-bg: #071426;\r\n --px-code-ink: #7DF3FF;\r\n --px-code-meta: #9BC4D4;\r\n --px-ink-on-mid: #E8F7FF;\r\n --px-topbar-fill: #10233B;\r\n --px-dither: #0C1E33;\r\n --pxa-panel: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAABARJREFUeJztnUtugzAQhocIVekiioQ4ArfobbroojlPu8git+ktOAJCqrJIVUWhi9bEARv8GBii/p9UNbUpM5nBeLDHOCEDeVk3pvIhqiJL8rJuur+HjvGV4apD97Opfi6qIkuG6nuVeVk3249y8KSfT8XoiX1xkTuVLqGyXRjTLzUpst4fjpfzqXfwKn2ky/lEW9pt6O9K5lBSyX14fzua5NlYpY9E9LyhyKvaJNtV/pCdiGjUVm2hbgSXE3+/7jafT8Xol3Mh1gDfr7tNjHyTbB/5Y+XKViYnJET9K9DnxAPfyxluA0jXm8ptTkhtzd8F/X+GlB2t8xV8h6z3h6O6XepOWEkq9d94eH87bj/KmygTDpiZrhPaKOg3orjS/XusXKJuyfWmclWm345aB+j3aJ/ORapuyfWmcuux1rN7MqSo1Dmn0ImbWfqApRpiCQ6+6054qY71QdwBSzbiVLrpowjRUdCSDTgnLvZbpY/09fLcPhHnnFHQf2fMfpNHQSAMOECQqsgSOECQvKwbOEAYOECYqDAUEdEV1zBUpyqyBGEoEyFhaNsHfD4VbNOLwJ02CqqKLIET5gdRkDB4DlgAK+4MN+DOzWCcQoVKGA31R7eNLQzV54OJiFbdZFVl0Mv51PsxlYMrY3ZSn1VmBBGehMVBHyAMWoAwvT4AzEvavQW5RkHogHkIjoIAD70WAMIIGY4m6ixRAuEEZ0WgE5YFYagwKyL7KkUwPSnR7yrF9f5wpJHBJFM5IqI4MCcsDKIgRlyGo4moTdAlQifMistwtJ4dTQQHiAMHCAMHCIPURGEQhgqCvCBhjGkpIBzX54CbMiIk53Lh8hzQBcm5wrS3oKrIEirrZku7zXp/OPq8BQQdcxg3CzS6IAqanrysGyRmCYMwVBiEocwM5VWZFulhUp4Z3zDUmheEzLjpycu6sbYAZMZND8aChEEYKgw64QWA5FwmQpNz0QKYcFnMaHpXhPVBDFOS82C9BWEwbh5wCxIGzwEz0319fesApKjPh75SPiWC8TnxGQ0l0tYHwPg8XM4nrzViwZlxiIZ4QGacMIiChIEDhIEDhMGkPBPRryrA+oA4Ql9VgChIGNE+YGyXunuREQOLA6S+pLRxOeRP3gKkjTTEEnRbdBgqaaC5ZLPtprrU3VJj5Mec2zsMjYmClrpb6pS6DR2DfcTuCDhAGDhAALWZZ1VkSUJ0nZL8fbU6P18vz1GrL6fSS4Lu62ranCB9XpizE9a3bg3FNmVqkzvlcltdD1976Fe+KrMuU+VQ1iQwiD+9XOatORw+hKseXWy26BlGtQQOWIz/h6tenDJj9Ohi08uo6NTZckqRvKwbtbGxKtfL9OO45drKptLBdlH8AItA04fuFeYIAAAAAElFTkSuQmCC\");\r\n --pxa-panel-slice: 24 fill;\r\n --pxa-panel-width: 24px;\r\n --pxa-panel-repeat: stretch;\r\n --pxa-menu: var(--pxa-panel);\r\n --pxa-menu-slice: 20 fill;\r\n --pxa-menu-width: 10px;\r\n --pxa-button: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAANhJREFUaIHt2LENgzAQheGHlQkiCgbIasyBPIdXYwAXESuQJkY2MkqDzlL8fxUCitM72zpZAgAAAMwNVx/GddstC+lVtQHjuu3TvFjX0p0YvB7nl3n4MXhN86IYvHlx/+acY8q42AG18HG/fGEfDSB8ezF4OYnwreVHkSP8tlx6IPw2jgYQfhvFDoA99/sX3C0/bWhAA8UU1LCOLp2HHRpgKA8/Bq/36zkwBRmphS8xBZm4Cl9SeRuamsAN6D1SjlfhS9LA3b+NWvjStwEtCupNLXwAAIB+fQDKgHLEoJpwFQAAAABJRU5ErkJggg==\");\r\n --pxa-button-hover: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAKtJREFUaIHt2TEOwyAQRNEB5YQ+gg+2R8gV141JEMJKk2UL/qssews0IyiwBAAAACxXnj4c7r5yIbuaFnC4+7l6JRsySa/xJeHHse65ZVz7AcKPdeobfPM5ggh/PdO9Awg/TyX8XPX3CCJRQDIKSEYBySggGQUko4AkJuldSqGABC18qdsB9jiOf+rDl4YjyEQRkcbwpe46muuIWLPwJanw52uNWfgAAAD7ugDNuSljuyndMAAAAABJRU5ErkJggg==\");\r\n --pxa-button-active: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAL1JREFUaIHt2bENwyAUhOEDZYLIhQfwap7DYg5W8wAUkVdwisgOQkSp4BX8X2XZFOhOUDxLAAAAQHfu14dpP86eGxlVtYBpP8553XrvZTgpBj3Kl4TfTorhfr4y9vkCwm9rXjeV+d5XEOH3l2L4nADCt+MJ35b/vwQtUYAxCjBGAcYowBgFGKMAIykGvZanowADV/hSdgLyQRHaycOXiisoxUARDZXhS/qOoxlHtFULX5Icf776qIUPAAAwrje7uT3lHa4XNQAAAABJRU5ErkJggg==\");\r\n --pxa-button-slice: 8 20 fill;\r\n --pxa-button-width: 6px 10px;\r\n --pxa-button-ink: #E8F7FF;\r\n --pxa-button-hover-ink: #E8F7FF;\r\n --pxa-icon: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAMNJREFUWIXtl00KwkAMhd88quBCBOkRegtvpOfRG3mLHkEK4kKwJXU1/lRMC9pJF8lyXpL3QSBMAgDkZdXCIE7FOoRovjqWSc3PmwIAEPKyaqP5/LC/pDC/bXfLCMH4mMq860UtEQBIPeVnffIAgtmoevZBRILkWyGzhdpkiE7UEBGIiA7wTGoexdJc1eZDdPmmq+gJwgEcwBzA94D5CBzAAcwBfA+Yj6D/U4p6ZL0nujP7tz4dgHgupYhXL/vjFLA9z+878Ykw7yfaGgAAAABJRU5ErkJggg==\");\r\n --pxa-icon-slice: 8 fill;\r\n --pxa-icon-width: 5px;\r\n --pxa-input: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAFhJREFUWIXtziEZgDAUAOEbHxg0Yt3QmJUgBIEogSQBYoICUGB6z9wVuB+CSwDLXT+AvO1d59d5pKHrsZEAAQIECBAgQIAAAQIECAgHjABzWQF4nykUE9IPGr4I7mcYsWgAAAAASUVORK5CYII=\");\r\n --pxa-input-slice: 10 fill;\r\n --pxa-input-width: 8px;\r\n --pxa-input-ink: #E8F7FF;\r\n --pxa-placeholder: #9BC4D4;\r\n --pxa-caret: #14DCEE;\r\n --pxa-select: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAE9JREFUWIXt1KERACEMRNENcxUwCAqgNeq4RimBoQVQKHxi/lNx+1UkAAhm9yhjbc/h2bJJ0nfHa/8996Wx9mzZku/qiwACCCAg/BUDAMIdSUQP3t7ChOIAAAAASUVORK5CYII=\");\r\n --pxa-select-slice: 10 fill;\r\n --pxa-select-width: 8px;\r\n --pxa-ink: #E8F7FF;\r\n --pxa-accent: #14DCEE;\r\n --pxa-accent-bright: #7DF3FF;\r\n --pxa-hover-wash: rgba(20, 220, 238, 0.1);\r\n --pxa-tooltip-bg: #0A1A2E;\r\n --pxa-tooltip-ink: #E8F7FF;\r\n}\r\nhtml[data-pixel-theme='pixel-hologram'] body {\r\n background-color: var(--px-wood-darkest);\r\n background-image:\r\n linear-gradient(rgba(20, 220, 238, 0.045) 1px, transparent 1px),\r\n linear-gradient(90deg, rgba(20, 220, 238, 0.045) 1px, transparent 1px);\r\n background-size: 24px 24px;\r\n}\r\nhtml[data-pixel-theme='pixel-hologram'] ::-webkit-scrollbar-thumb {\r\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAFlJREFUWIXt0rENgDAMBdGDERAjsP9EjBCxAvQ0KPbvuFdGSs5SDJKkv1s6l/fzut9n49im3lyT8YrSAKl4aYBkHCZ34Cs++//Q2IFEPDZANR4ZoBOXJAngAWGqFA9rfCGtAAAAAElFTkSuQmCC\") center / 100% 100% no-repeat !important;\r\n border: 2px solid var(--px-wood-darkest) !important;\r\n}\r\nhtml[data-pixel-theme='pixel-hologram'] ::-webkit-scrollbar-track {\r\n background: var(--px-wood-dark);\r\n border-left: 2px solid var(--px-line);\r\n}\r\n\r\n/* 南瓜灯:暖橙藤蔓包边。frame_full 30px 只给对话框;菜单用 frame_simple,\r\n * 避免小块浮层被厚藤蔓包成“门板”。 */\r\nhtml[data-pixel-theme='pixel-pumpkin'] {\r\n --px-wood-darkest: #170D06;\r\n --px-wood-dark: #241409;\r\n --px-wood-mid: #2F1B0C;\r\n --px-wood-warm: #3A2210;\r\n --px-wood-light: #8A4A18;\r\n --px-wood-pale: #D89A5A;\r\n --px-text-on-dark: #FFE9C9;\r\n --px-text-light: #D8A76F;\r\n --px-parchment: #FFE9C9;\r\n --px-gold: #FF9E2C;\r\n --px-gold-bright: #FFC85E;\r\n --px-gold-dark: #D97706;\r\n --px-gold-deep: #8A4A18;\r\n --px-sidebar-fill: #1B0F07;\r\n --px-line: #0E0703;\r\n --px-accent-bg: #FF9E2C;\r\n --px-accent-hover: #FFB45C;\r\n --px-accent-ink: #2A1206;\r\n --px-input-bg: #3A2210;\r\n --px-input-text: #FFF6E6;\r\n --px-input-ph: #F2C795;\r\n --px-input-caret: #FFC85E;\r\n --px-tooltip-bg: #1C0F07;\r\n --px-code-bg: #120A05;\r\n --px-code-ink: #FFC85E;\r\n --px-code-meta: #D8A76F;\r\n --px-ink-on-mid: #FFE9C9;\r\n --px-topbar-fill: #241409;\r\n --px-dither: #20120A;\r\n --pxa-panel: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAEy1JREFUeJzlXX9slOd9/9jEOXzJaziDdzhEBhIhWynezQSpa5lV12pajGsnqhBUZbIsdShGW5ctia0kDVI7lHWCZS2b0nhjlSy0djXyH609m6hJjtOgzdhCjHUos4sWwAPiA8/n3TsfnD24/fHe97nnfd7neX/dGc7dV7J8997z8/t9vt/n+3x/PC/gE55/dXN28Ce7spOf/HXWbxvL2d5K698TPP/q5uyOr61hf4UOupD2CHEPqv9CodxPpel5c7WJfxkraBB+23v+1c3Z81NJROOTKARpxZ6PFyjzW7Ht4BNZAKhbew8A0P8nX0dZ+C+K1t7ffu+KY1ttB5/I3kr8FwDg6fqQqzrF7L8Y4LmT7NmdppW2+8efom7tPbQ2NmBvnW7t4Pd+adtHoe21HXwiS0hrbWzAvm+842lOxZ6PV3DVWDbxShaXzhhfJpIAgJETYby9/SpbMQStjQ2oPJZBS6MOrSkNRELA1majsxyHFKs91gbyiOtv35ifnAJZxZ7P869uzvohPgA85FQgm3gli6FhAIA+HkQsHsZo62W0vhBAXfwe2qNbMNp6GdPz5Tj40Sa8Pf9r1LXeA6Jb0AJAQxKYGM63BaDg9pBH3sgJo37dWuPRyWkNlccy6OhKsNXNE6LY8+n5wU9xfioJwNiHGp74Y09EsBcP3GAJjEFrpmejrZfRHt2ClkYdsbiGjq4E9PGgsWJ42NOJgtrrDhgFcqtWHw+it2aWIYsQV7f2Ho7eWp/vPxIy/m9tLqx/cT4Adl+8g0L2IWXh7NmdWZqoOGCtOwBMJE2f2W/cIPnvPdfShlxNTvtuT9YufQeA3ppZtEe3oKMrsSz92xHB7z7kqIb2XEvjZKjOMlgZaE1phgwA0LoD0MeD6LmWBqmLU2095gm5aI9v08QJXDmtKY3+x4MM+Xz9QvsX52OCSAhj+2vR374R0/PliMYnkT27M0t/0oY5kBKAVr84cMvqkAzeNOiJJLTuANOzz08l8f3jfyWtb9cegT4ehPbGlyxlRAKZ6hehf3E++njQEGuRkLEPvfQwekavMy44Oa1h5KWHgYkknAhhywGygZuAtBEHGNtfi5rwOjxdb8hi4ig37RHbT7X14MZrXSbNh/3OcYS4arG1GYNL1b77lwEjVE5s0d7THt0CABg482uMtl42xpErpyKELQHGtq02D3xasyueH6CwagBY2JQhjTZIG+i5lsb+l1/H/pdfl4/BDnFDw9C6AwX131szmycah3iaa//jQQwuVaOl0Tg3HPxoE/ofD1rxMJFE9q2nTESQbhapP9iRZTpvDmR6tkp2AsLK5NRFAtKvO7oS+X4Um/6+ijncTMyiDGV4uj7ENlMmkgTNppj9kxh+uj6EPz3wIupP9TvuHdKxCKK06u8/LAMUHKB1B1zJNyYHRYiEfLGprL1YXMPgUjV+K7weNeF1AIBofDJfQBBJxe5fFMN+9yHL5p0DEwcwGeVXz5YMyqu6aAEBIU6mAn4MRekfVjVzb51u7UfgCFObezqhf/s9KRfkT4icbPI7cP57QWy6p9P4f+kMW8G9NbNobWwwr/4cQqLxyfyCEE0VBYgJt2JYJgotRBWIQAQoBwyZb6roQc+eausx6dasDb9sGgkZExkahj6QwciJMOPCymMZJhKm58tx9NZ69qy3ZtY4MwxkWH1xc/YsJlyKYa07YNmHLNqYTFRC2AO8Is6knYTqzBT3oS7K9PKOrgSO3lqPgx9tQkdXAoNL1QCAwaVqaE1pdHQlMLZtNdqjW4yFwiNyaJitYDf986A1paEPZAraP0wg4JTMH+VM4/GBOFqNZShDND6Jk6G6POvJWN9BXbTUyZUnRNNYSMWj8QHIcyZ/WPLYv/bGl6yc4VHNdAP6eBCd506btSA/iBvbtlqtnQgdytRFfgJSc4MoUyXcaVnJ4ngVMlpaVyEmqKwohnuupXGqdb1UBItj4ufJG/9szdF2Ayd2G4sYz2iDOtW63qKdaEhKdXVbcLmapDA0DO0NQfOwQa65zzziYnENHbxSwX3urZnF+akkzk99AAx9gH/4y8OoP9VvaZInBCGeVj8ArPpcRf13Hrtn7MGLMxUI1C6xCoszFQjUXQcSd4wHezqBp+qBipvGynqnHC9cTyC9eiPmUrcAAJdvzuKfLulIr96Iz1xJABsqgeYvG/U+nrIMcHGmAoszFZbP/DjYb9FPLM9pgpbnP/5PVg8AFi/cdVWXcKCPB9G4a56V07oDDA+B2iX8cPou0gu3Wb0nq+7gM3f+m/2+OFOBWFzD5vAiADnyAaCcHog2cQv40E4sWgmplxwCqF/H/gsAattOC+KfiWICgEUMk32JTDXR+KS0zVhcQyyuofPc6TIR+UDuIDb82S9mAbBNRtzgSAdnx3/Ofs47LHprZs0HNACIhKAPZMyHNk7TkSFeNQ7+mYg0VXm+fWqX/032DID5rCOKYY+HQzs/MvtBJAIByTqyhTz25yfkhw67kyBPBAkBiIB2yOJBhmgZuOUq6ktEvmluW5tRTD8ygemLSIRYXMPb26+aXG797RutiLYziDWlpadA0kDEZyMnwkrEqIgi/i4SUuyDB74/sbxsfrRQRlsvs1O4xY+cIwq5NcUTMU8EKWsQIWhA+yrmzLYQzq3nigC5jokI/Gqn1c+D3cpViQw7EOvIzCwiEakMqZi8hiMTnV78yIiEmFiy9V0Of/aL2Y43F9l3mS1EH8gobT4qMTRyImxBfLE24TOpGfa5uWqD5XcVF/HcR2V6a2bx4dQcAKBvz+fZwhP3QT9+ZCKC8hxgWEYXHUM/tG5nh4YMVBswAY9IAhlCxbKJZH4h8Jo/1VVt+vq4ccAaORFmm7N40kdjA9qis678yIR0rTsAfcCqPBBYOKBYJmla3bLVQCtNhmQCHpEE4ZCc2HzZT1Mp9rm2qsqxLmAlbEujzpC8+6Kh+7MQTG4PtLP4KpUQHiIh80k4+9ZTWZGVtKY0+hGEfisINOoYBZhhDI9z1HZxcqXVoVqxPPCIdAJVWbdtEKc0V20wi6hIyHLSPzmtYW/umRbJl/N7cmccwBvl3NjyKc4m8ru7DdVUsrEBVntLLK4xAiSSSU+IXi6oraoycciR2LPGgdOvH4LTmOy4QB8PWl2SbkzS5Cc9OvQBfv/lQ7jxWpdSJ1dttKWCfMDgFOLEI8ergaHhwvwQwonfDphDxotJ2imentrizQz0+UxqpqSQD+Q54MjxarbwiuWHYCCRJrG4JnHIuDBJU7gKbweR2dKpE4JSRL4JJKbuovghJEDlHEMTLQetnOdnbH8txvbXMm44+f6FfDQFuelgIJ3+ShFo9R/a+Qh7ZvFN+PRDqIBU8M5zpw2fcCyuSR0jJuBC8chPSpoBYDhjekavm/ylHW8u4kjsWWNT+w0GFj+r8KoBUOK3HMjbqGWHFLb6J5LMDN1zLY3bLwSYvQMA85la/KW5jWmlEEG6AG2cOZbAX8n+KZo7aPUDnAjikc8GIcTza01ptDTqaI9uQeWxDEM+YJwNWhp1k7/UBEPDOHK8GuFQyHRAWungGD+bAxnyARtrqO0Jz4UdxM4G0ndgrmQ2Y9keAFhN3io/hNaUtgRutUVnWTlRqlg8YrIf+Up+8wO8aASlAL6NgZL8AK07wP54UHrERBDzA1hg6o1Bb3YQGxtIKXIB2YTIhm/nieNtX24Cf1VesfuSH7DSgNcKCdh3QRvUx0s5P0BxONEHMq7auV9ApgjxrEIn+N6aWZxqXW88LHJ+gJQADEES+WY6aHmN9SlhEIlAe8Jo62VLfplomgGc89R44GNxlyc/gAeFDaQUQcYJy50fYCIAk1NFSGxQQalrRp+mUrhw9Sr+Jn4OQ1f/HdtiAZMYPtW63lfgMQ9aU5pxASMAc8YUIN+cgGwgJW+Ug9lCahHDgHXR+Qj8BXKxoQY1RGdMXu0iFawfQUCSHwDkowb4WB/6zv8vdTCZpgFHnzgiIcMzpgj8dYpNLWp+gFhHZgMp5dVv8QsUUwwr8gNW8c4YSzAu5IGp+niQBaguLKRRhjJk7i4gvelJbF87Cwr25Tu6cjOwMpD/R2VsrrSCv1pVgc7rVdgcXsS7j6TxjV9txkvNiyZcIHHHhDdAEeycq/PbI79a3vwA3gsGlLYzRmkPEjbWFZEfcDJUh73dOjpgBHT1HZizn30JgmzeoqFxxeQHPHOgGs+89GU8092ADwavoiybxf9kSuckzK9+lSiWieFi5Qc81HnudFmqcUdWFqptAsoPALFRmG1OlccymN5uBGtNz5djcKkasWMZ6I1BYDwDrcmodyT2LPpafg7AW9zP/YS8KBaMb1ubQRc1AYZzfl8urrdu7T1E45NoE0PzoUY8wQPJDyhFSyhxgDS2cxnzA6QuSX4TIVlnumvHQ/ai12iBBwW2fvFLZwzx69Evrg9k8pbQxCtZdmUbB0wLkjljYnHNYgvxlb0oRAsc2vlIybgmVUY4E9BVZx794oyonG9cJIJJCyIiDCOfH0CyjjfG7YXHOEhZ1mIJggz5N17rAhaA+tx3rSmNFgCIbgGiGbTD6hdHLphLF5MzAIMIZ3dmH2h+gD4exOFfLpTMPgDIvWL3Iz9A6ZDJnt1pIN/BJC3axVcq2JmiLTcBFHrPHAfLlh9AdVUJdaXKAQRkD1qx+QFK1gPJ2gV3mLkPICKfwW9yfgC/+kkbelDcwAxxFL1X6D1FKyE/QJz8g1JLTSboYt1TtJLyA8KhEFLP3caOQ5ts87hkUFtVVRDRZHkBNNf/N/kBqedus5P2N0cPukZoUTlnue8pkgCVc7w93WILUZmh37+Avd0BAAanaBGgA4uGugp1RqR40ha5QLUvhEMhfHP0IADgR+1v25aVgdkHIOx9spO+k8sRyBHuPeOzcPUND2RD6zx32sgTjsU143QH+4NDvmHrPQnR+CSices9CR1vGptTB4C+lp+zVUs5WeFYABdb1rF2dhzahA8PW7sX009Tz93G/pdfBwD0Hfo8PjzsjgCO3OJDm2EXg9uc+FV2pocAwwShMklb70nwf9/+kdizbH/pO2C0z5zfMLgpGp9E//H8SZvKEXyaSiEcCuHivOFToENS66EGJF50hzzZXmMrOlzkBwCTiBx4EfWXBpXtEn75EHXlbSl0yUax79tnOrPH4FbyrCWSSYbAiy0GEYh7qn5WqUSUCER43jzC5i3M1+6wta9iznKZidgmYN4L70t+gPidPzeIUdZeTtp9B+ZMXAM42+P7Dswh9dxtZf882OUBqJ4Xkh9gMUUQEcgOxL/4QIpwF/cEkU+BQOY/5f0Pbm619XJIyouJfP90eBw5ETaJXc8E4NRzmbGSlBBA7hVbJT74x+tXvvuTwY3f4fMDMncXsHXft/DYk5OOdhAxVCOw61H88N8WrP7T+nJTGEegdgmB2iV8taoC9ZEFeXvc5IlrPvezR/F+KIU1q7OYni/H3+nrcH14Fd4PpfCv6xbwhf9Ygx8t3bH0v/0Ld4HEHdRHFvCLd6tx5WYAm8OLJr84zx3ifXOBXY8i8DsPGSL06Bp8/3+nsWa1YUZLr96IT/4MqN8wi/quh1H/lbtoOPzPDy4/QHa/mgiq4C8gb1Hkb+n1ckii9xeY+rcJGrYLKyl2foBthgwgubiat4krLmpiv3PhKwRuL982iZ49nej5wU9Ntvm26GxeF3cQg27650WFePMW3Y5luahKYv9yI0LL/vBj+xuzCn5/wJ7OotyvxhN398U7lncItEVn5YvAZ/8yWxXlB6yc9weQ6loE/ylv1BrbX+vqlt5C+m9p1NHRlTAlWKys9wcsw3u6ZAGvXt8hUGj/fORD6b4/QOGU8O0/LdI7BPRvv1eY/3aZ3x+wCjBkPq968WF4gEsVcUOlJTpYnPDiTIWhukkirQFDtdPfKUdg16PA6Qng4yno75TjF+9W461tN1yrnYsX7iKQvAh8PIXAt9qMtrz0X7tkIH5DpaOaiUjIaDPXhxQ3AFBx03R98uJMBb730Y3vFpQfAJj3CzvkqzYuMdNmud4h4Kl/H2rmA3l/AABvucJuyi6nbd5t/8uYpkXjLcr7AwDYX9jqckA0EZHTivkOATf9W/oWyrhNQ7U7yIlKge1J2MkZwco5JF7LkOkKfEYaAJAnxrnov9hqJk8M/iZ1+r3c8bImNy8+KDL4tc37LWvRWIqQhgpY42yBQt4fYAMyItoisUShEDFs5xO3e38Ac0laBkHfBzLQmqwDVU1ABbJ2ZPWcCOdpPDnRWMhicBLDdmmoqqQMHhzzA5wGp48HlZk1bid+P9+iofqtYDGsUDOdwDE/QBwUv6Hw5VRIdFzR3O9kGnD7yhG7tvjPdulXYrliAK9mOoHj+wMA5zv7WV6B5AUQdnf302D5u/uX6y0aYvqVrH9ZOf48INZTjUPUdOzAMT/A7ndZJzwRVG++EAft5oUNhb5Fw0v/sj5UBJCNwS3yAQcC+AUZ4Yggft6AIWvLaxte+5dxsYxwIsG9IB9YJgIQqDhItkoJ7LjKLYgi0U//fsWwV1hWAoigQoiXwRfShp+6fsSwF/g/qifG4m5A6KgAAAAASUVORK5CYII=\");\r\n --pxa-panel-slice: 30 fill;\r\n --pxa-panel-width: 30px;\r\n --pxa-panel-repeat: round;\r\n --pxa-menu: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAuFJREFUWIXFl79LG2EYxz93Go4EL3j+INqKFdriVMRJRAu6lNJi6NKpi4vUf0Chm10Vd8HFpS3tKLRbm4B1SJcgWYQOlaCYGJvTi01NSr0O+sZE7707k0C/S+7u836f5z3yPO/7Hlzo5asB+/3bxzYSufFGvKq4SB+pfElty2K48ka8iriwv47ZT97s099+xsrT2+dwfNMXb8SrigFsmfS3n5E+Upn9uAdb5vlzD96IF0AVAwrJECt9ofNZ9oUoJEOXA2UcqNt7wdXCWqnmP1nKddXcu/FGvIKr8ZROIRlirvuQD0Z/7YBkCMGd5MaqvW6xW97t7bweDQwufDYs8laOR8UQ5UygkmDDymAfdzIQKVeei9+dA42dA82RVXtlsaOJmOJaqfMzebKmScQweBjuufaWG1YGQMqEd3G1A1kXVNqILZPZ3SLpI7VSLAwZNZO4qqxpAkiZSC6LrYxvKkp1perDRWZ3i5VK1YeLNZO4qn3LAqA3HL7GqpO7xW4trJXQhy+NS7ku6CtW7qsrWSSUTURITMhPbF9dUK+a1gVZ05S+vZNOSiUU2+an+rc5XXCT5NXqDYc9u8B1L1hc7SBiGI5FdpPkDe0F9UzianJfe4EoFK/1/CbyE7vSBU6HhmZ1gVtsNZqIKfGUzqcXvaSPVOa6D2HIQJ/W6u6Cfcsia5psWBncYkcTMUUFmFouOxbK1HK57rcX8op9oyKUFeJVVlcRCsmKMGIYjt0gkjkxP7FbRgODC7fObOa6Dyneucv9H0W03j+UMwHKmQDxlE66dIL17Ddjz+9hfTtf5XRNQ9c0IoZxjQG0BYPYx514xfa1FAN87zkjb+XQtgO0BYO0BYP8Oj2lLRh0ZFnTbN5SLFtO52fyAFLWtAOJ26ECkDIvr+8DiZRPa54HDi/+34/lrfGUzgTOEsuljDfiFVwBWB+ZtCceFBwTRBMxxY0D1Out6YL1kclrn8/RRMwXb8T7D0nQvI83eiFSAAAAAElFTkSuQmCC\");\r\n --pxa-menu-slice: 12 fill;\r\n --pxa-menu-width: 12px;\r\n --pxa-button: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAABzElEQVR4nO2aMUvDQBTH3x2dhApOjk5ZBBFBcNCABedO4ifwQ4jOil/AzU8gTpkFheogCFIcMzk6FSx0PXmX3nlpLrGB9h6c7zeU5Hrvtfz/JLncewIc1PO+Ag/i4EXMjn2f7qruzgRge60YSFJfKEA+KOWIPc6lkmOKO9ceqK8zZZIxSyZJQaxfa+0lfrD4gckHheZ4BdTddpgwdGYH7s7zQD/9Pzm5SkrnQt1sKvOQcMX/hEnwPxczG7BSNWE4Ajl+//3CwOIvHp+mqL1cvX2rLJ+YMKD2ehXE0CF5FUQHas9XADGy9hWbWT5JWrwJM3SwAcSwAcSwAcSwAcSwAcSwAcRIroIRkg/4CqBG4p500941sxi8mg5HIHTl/vLIVve5IrZcbDEmSWF88VB0RXBRnq4zgldBxBQ1YeS4b29DFXw7pm17iEyO2ONcmvS8z/ShsN1bxgRfEs+DWhfy593KdnPEHudSl2MqPtaEtQF4Yk1ggmCaITpPH1043BrrgToTfJ0TbQ0zOWKPc/lLT9Rer4KyvZ5CE5hwoPj910dhW1KaTMDJs7Q1zOSIPc6lSU8Uv9SaiAMZ9Lx9omayS93cOkyO2OPAYR49fwDBAQQZqKqgBwAAAABJRU5ErkJggg==\");\r\n --pxa-button-hover: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAABlklEQVR4nO3aMUvDQBQH8JdDHIQKTo5OWVxEEDpoBsG1Hf0EfgMX0VlxcXTzEzi2q6AQHQqCFMdMjk4FCx1cTi7xzksuFyo0eZD+f0NJ0ruX8h5Jk7wQAQDAsgrsFfm8L0sHHbzkxilfJ3uyszsj2tnINoRR+R6SOBej7fNsToxf9lizID/PpA4GNQsjCjav09wL9YHkNyyJs5yrI8B32oFmrBQ33J8nDe16OR1fhbn1QN5uS/0nYSf/g2aN/7g226I1twjjCYnp298XGpK/eGU5VbkX63evzuUTNEPlPr0KAj4CV0F8VO5xBDAT3ltsqF8YZXfCwAcFYIYCMEMBmKEAzFAAZigAM4EuGKMkxhHATahn0lXPrmExSnM6nlCQdu4vj0x3Hx2xeplmTBjR9OLBbUkWW2ZQL/H03ql5F+Cjcp92wwbdQ9kbdM1pyFH2xPS/7xDpGG2fZ6vI57A/ov7oMTDtSFOEoiSm4emqs7l38+1/W6wiRtvn2XwxdPLVcq4frIrgjCYyg+cZ66NjtH0eWebJ5w82gMizrPsdPgAAAABJRU5ErkJggg==\");\r\n --pxa-button-active: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAABpUlEQVR4nO2aMUvFMBDHr0EQhCc4OTp1EUQEwUELPnB2dHbwQ4jOil/AzcHZ8c2CQnUQBHk4dnJ0emDhgVMkralpkxSF1x7E/28obXp3Lf8jaZoLEQAAsBGZF/JhWzqNdh5rdoqPo0052JgSrS+VDXHifkKW1mKE7mdixfjGtK1O5Pux1MFAx8QJRcsXhfZCHSB+z2RpqbnqAb5hB/TDXLPh5iTr6dH/k4PzuHYdyctVqT8SpvhvNO395UJmhRbsJIwnJPKXnxsaiD97XJoq7cXi1bM1fQL9oLQvZkGAD4FZEB9Ke/QAZoT3Fxt0T5yUf8KADySAGSSAGSSAGSSAGSSAGSSAGYEqGCNZih7AjVBr0m1r12A2ODUdTygqKvdne1V1HxWxbqmKMXFC+emtXZJslsxAt2AWxEw02hrK3bWczGHIwrVi+tc9RDpG6H4mLXqq4ef+dVBuzKoloUmWUn79aTUPDuf9u8VaYoTuZ+KLocXff7qLqnqwToILZdzEZ+tDxwjdz6RNTyW+Oq8+wqphREPnJi1tbOKz9aFjhO5HBr/R8wuC++L290wmRwAAAABJRU5ErkJggg==\");\r\n --pxa-button-slice: 6 8 12 8 fill;\r\n --pxa-button-width: 6px 8px 10px 8px;\r\n --pxa-button-ink: #FFF6E6;\r\n --pxa-button-hover-ink: #FFF6E6;\r\n --pxa-icon: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABe0lEQVR4nO2XP0oEMRTGv4StFkawsrRKI8giCBY6oBfYSjyBVxDEAyxewM4TiNVeQGG0EAQZLKeytBrYhW0jLzHZmZjJajGJxf6afZOX5Hu8zZ8Xhgby6VDCgR09M/qdne/LbG8BjDa1Q+TwUhXhcQ2fsq3456U0g3tH5GBb10qbRxcnqkJrAmC+tMdk4DbcXVW9Cp5NROubo6yjif/QKGsM5m9DZKNl2wcWvQawjaG1SZtv3L6yWOKuBmmrXZASnnIXkHb6DKDrSI2ByPVJmBK+DgDrvyAxPH0AVcRCxKUq/kMGymU9EJ2yBqc72RzHF5NGYdATVkPkqh5gSYrSRmXMkRgmb3Z0PXA6to+KFua2/GuGQuPIdz/VAczMy8UE4fLdUb1sfnt1k6hZ3IE51RqgAOjDBhEJtfgB8Mf3rNXg69jlWyUQmpMgbbULpgcn8nh3jpiQ+PjlQe8CMkwmfB27fKsEQnOSJtn2TUBQJtzOpqPPFyI0zvjI/gJjIqCQvIbvSgAAAABJRU5ErkJggg==\");\r\n --pxa-icon-slice: 4 4 10 4 fill;\r\n --pxa-icon-width: 4px 4px 6px 4px;\r\n --pxa-input: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAA5UlEQVR4nGNkQAL/X1b8Z6ADYBTvYISzGWCWH7Gmi+Vwi22Ogu1mBFs+VYuuloOBviDYEYwDYjmSI1jQxVatfAOmJz75RXX7jhZLYYgx0ctyELDufYbfAQMBmBizrzFuXiROf5tD/MCJkAnEdtD9TH8H3D4Mppg+pZj85zX8Rn8HXHwPLnuYGAYYMI06gGE0CgYYMI06gGE0CgYYMI06gG/OmdH2wP/R9gAMhIWLgOl8GTYGWgBszXIWdAGYI8IY6JgLPp/nYhgIAO6awTigxik9LQd5HOwIZMFN5o50cYTfyf1wewE2tktlQ86FQgAAAABJRU5ErkJggg==\");\r\n --pxa-input-slice: 6 fill;\r\n --pxa-input-width: 6px;\r\n --pxa-input-ink: #FFF6E6;\r\n --pxa-placeholder: #F2C795;\r\n --pxa-caret: #FFC85E;\r\n --pxa-select: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAU9JREFUWIXtlzFKA0EYhb9/DRZCAlsFD2AjyCIELLJCvEAqj5AuB9AmVRo9gN1WHkEPoGC2EBYkCGk8gVUgASthLLKzyc5O2Gp3LeY1M/zvzf8/2Fl4I+xAfd8qvZfunZi1XWjedtams/UGyDZq1s83OLncrF9vtr5bXqNMZ/ASxpIZUA+nRfeBv1nnS3tjzWuU6Uw+8JEwFrEOrwuBj9fY8BQtszC6+QXg+PCgkoHTae7u4sl4Ic+P3VqGA0wm6Re/HiJhLB7A4Gxd2cC9SP8KbzXqqfb5T/0G5kvUrK8av4TOgDPgDDgDzoAz4Ax4nSjJElGt+C+JSMxEVGsoDfxiKo7uC6VK0fglFABbMF1/HAGwL7BqXqNMZ+NlvJAWQCdKZDXq5Z5or59tAAZ7nGteo0xn8p0o2T5ONZ4urjITw/cXMWu70LztrE1n6w3wBwNidr7sF3ekAAAAAElFTkSuQmCC\");\r\n --pxa-select-slice: 6 fill;\r\n --pxa-select-width: 6px;\r\n --pxa-ink: #FFE9C9;\r\n --pxa-accent: #FF9E2C;\r\n --pxa-accent-bright: #FFC85E;\r\n --pxa-hover-wash: rgba(255, 158, 44, 0.12);\r\n --pxa-tooltip-bg: #1C0F07;\r\n --pxa-tooltip-ink: #FFE9C9;\r\n}\r\nhtml[data-pixel-theme='pixel-pumpkin'] body {\r\n background-color: var(--px-wood-darkest);\r\n background-image: repeating-conic-gradient(rgba(255, 158, 44, 0.045) 0 25%, transparent 0 50%);\r\n background-size: 4px 4px;\r\n}\r\n\r\n/* 便签本:撕角活页纸 + 铅笔光标。panel 的左边 18px 是活页孔,\r\n * 用 repeat round 让孔按比例排布,而不是被拉成长椭圆。 */\r\nhtml[data-pixel-theme='pixel-papernote'] {\r\n --px-wood-darkest: #F2E6D2;\r\n --px-wood-dark: #F6ECD9;\r\n --px-wood-mid: #EFE3CE;\r\n --px-wood-warm: #E6D7BC;\r\n --px-wood-light: #C9AF8A;\r\n --px-wood-pale: #A8895F;\r\n --px-text-on-dark: #3A2412;\r\n --px-text-light: #6E4E2E;\r\n --px-parchment: #FFFAF2;\r\n --px-gold: #6E3A10;\r\n --px-gold-bright: #8C4A16;\r\n --px-gold-dark: #5A2E0C;\r\n --px-gold-deep: #4A2408;\r\n --px-sidebar-fill: #F6ECD9;\r\n --px-line: #8C5A2C;\r\n --px-accent-bg: #A3551B;\r\n --px-accent-hover: #8C4713;\r\n --px-accent-ink: #FFF9F1;\r\n --px-input-bg: #FFF9F1;\r\n --px-input-text: #3A2412;\r\n --px-input-ph: #7A5A38;\r\n --px-input-caret: #8C4A16;\r\n --px-tooltip-bg: #2E1C0C;\r\n --px-code-bg: #F0E2CC;\r\n --px-code-ink: #6E3A10;\r\n --px-code-meta: #7A5A38;\r\n --px-ink-on-mid: #3A2412;\r\n --px-topbar-fill: #F6ECD9;\r\n --px-dither: #E9DAC0;\r\n --px-check: var(--px-check-light);\r\n --px-radio: var(--px-radio-light);\r\n --pxa-panel: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAABCVJREFUeJztnT2S8jAMhgVDT0XHQej3BtRwOrbmBvQcJB3VniBbEIMsSw6ByM5m32fmm4+JZcc/a8eWJXtx2FBLDnzfaBF+y3d832jh9d6a8DITxeWWYYEVEdHpeh4/N7t9Gyo6SX+3T5/NAVZmIlGvXZiMolfQ9kt/QXOJZZrL838Zt7nQcbe/Z0KmF+JZ6WpyXMaSCzJa2jKdV98jy9vzbrXMLEw2QtwALNJxu378PjU/aYa0SswVPBd3jDBN5hV5Kx7R+3nkcUW6shHUHiCFDhtq1UboY0gFzAWrzKxn8fpdEKUfSaL0I/pWAwAd1hOWRPfKtr7SwIHtF52uZzpsqF3xv/7HX3lzIdrt0+fgc8QQFU9DQ2DXQsABMWtcJYHab+DGiug5d+VTT6L70COfvRL2jtwU6cs7H5qtugsyIfzU/DzXCpRZBwBnupnQUj4Ezog6XhpiwAvxEV7mAoETbKiPVsLWRwXrgJFhyrkVEVM7bNe6/nq7hipiLMQIs5rjxsikERpXdUPmuNuXzdQ/Rl0Jn65n6II8MVURAeiCfGGzzbgB+G4OVsV+mOsAIlR8YdKFGChK2gOwEvZFbMikyjj0Al+6+o32hGUgcKZ3GkrQBbnBKv+woTZqAF7p0AWNjPi2nq7nuzLu+0aLsOqdq9HsJDBMMSO7INVOFIwPN0vR7IKgCyqHbp4OXZAfmmGWGogpqQ/ZPWFQHDRAZWAVUQNTFyQCgT+wjKtMtBKGXVAhpDIOdkEFkXZBRLqPGHBCOmhYXpLAEdMqoguELsiZXhcl6IL8EJ71aQ9gjnrAAVGv2JSvgXTUBoVoLs9DTLrvKuyCStBVfIB7pKqzIDAyynE9YaYJu6AamDtiDOiCyvDwlCfqKlo5VAi6oJHhCzFZ0TXy86+AMq4yWWUc9+CDLqgI8BGrQdZHDHZBRcFKuAZw0psOWAmXJusjFgSAH9gPmBbmqYnQBZVB3ZKELqgckTIugGOMneHT0OAflrvxAoxIThn3uHgAuiA/XlLGQRdUDHNHDNNRR1gvgH9AZaCKKE326GL0AH963VTRCEVJhyAMQ/7ALqgyfUPQcbsmvkL+qzdgTJbsmXGgKKoyDjhjWsbRUy+k3i8GPqfPMi66zA2MT68yDj5i/pi6oBAIigEfsRqY6wCM+2XQVsLadYbaVX5DriaU1/hNlaFl0mTlc63sXAZXGdaEXWOFIagGcgjiK2Gr6wAfkpVw8BODYZYjzPhtXj5iU7dtFUP8YUPtMnyE+b+hCb0cNpRP38Nl+uSHvMuS7XsH0zCEeh5+YFNfZrRj2o2j2814OTktTf5cnMcTpS/jchmr52j5kOlzty7+/oxc2HOZ1ZH1/KrwKcONn23DrD/Go1C7fRtupyBSToavSMgTn+DM5sYMzbh4ajeCaFbnv8g+yu7Ryv7IAAAAAElFTkSuQmCC\");\r\n --pxa-panel-slice: 12 8 12 18 fill;\r\n --pxa-panel-width: 12px 8px 12px 18px;\r\n --pxa-panel-repeat: stretch round;\r\n --pxa-menu: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAMZJREFUWIXtl7ENwyAQRR8WPZU7BqHPBtRmOlx7g/QexB2VJyBFbEKX7i5S+B0I6R+n/3RglpmKktaCsQB538A/ZN2PJ4RYp34veUfyTrQO25uvBQOAdzUfp0wBa8EQoloO7DJTWwa8qwBStwcwmhTAlQEtClKIDAoGBbZfSBrfmr4fESxAhYI+hBoUTC2ESmohzMc5KFCRPgW9+ZgFf0nBDz3JgBQiINSJ60k2ZsFnFuwbdyfyvr3/bpIFNGNhGQAtEtaCeQEYeX/dSgetuAAAAABJRU5ErkJggg==\");\r\n --pxa-menu-slice: 6 fill;\r\n --pxa-menu-width: 6px;\r\n --pxa-button: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAASlJREFUaIHt2iEOgzAUBuC/BI/C4Uk4AZ4boOnpiuYGeE6wZB6H2gk6scHagtvKS8b/qdEgXt5fuoQHQEQkRoULXQ4rUchV9Ivf89S96HJYc79BlxXMNJxb2Z/TdQtzvwFlZd0QtgDW5nuK5rwK/9k8bj/DELwnQJfVyZVdi9vfLoftFygvAB478Rz2tm5tCgR/vDx2fu+op+9jKelyWO58OQkA7npBiXQBV8cAhDEAYQxAGAMQxgCEMQBhDEAYAxDGAIQxAGHpbsUZHmz4rigafyBTt7sb+Kb0x4INnq6LZn5AFxncsSQnZHG4G/3zBMwjzDS8BvLhbPjoWKKv9QuUcqdhZhqAooEuMsm6LmEdyivgM5LkeR+Xrtvdd0HbBT/Iii9sPhGRsCcxOlS7B3jCOgAAAABJRU5ErkJggg==\");\r\n --pxa-button-hover: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAAAXNSR0IArs4c6QAAAR1JREFUaIHtmTEOgzAMRX+q7Ezd2CtxAnZuwNycLszcoDsnQGJnY+IEdAjQJKLq1Fhy/CbiLPbHGNkGhLxRV8bnHVtqR1LRLWHM58EP2g59Sp+SYeoWQCiCBlzwduiBsoEpC3dTNgQu/pH5BQCw0wg8qu0Q4UbqFBF2Gs+M14fxSA/umEd1Pj/v2LR/aYeetRBxbTN1i0AAdt+9TxzbXhNuZwHMFFcEOb/5H2T5F/ARAagdoEYEoHaAGhGA2gFqRABqB6gRAYLT3iDkhOsG5xfsvH6mQbsNAPs+IcgAO68AXJ/MeS7go2PD10xgirqcB/jDUcZ0C5SKdwDHdJgjpizgT7+7BUp3y54F0/gZGDJO+3g3cLkY4Uq8FRIEAW9z5lUxZXlYggAAAABJRU5ErkJggg==\");\r\n --pxa-button-active: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAASlJREFUaIHt2iEOgzAUBuC/BI/C4Uk4AZ4boOnpiuYGeE6wZB6H2gk6scHagtvKS8b/qdEgXt5fuoQHQEQkRoULXQ4rUchV9Ivf89S96HJYc79BlxXMNJxb2Z/TdQtzvwFlZd0QtgDW5nuK5rwK/9k8bj/DELwnQJfVyZVdi9vfLoftFygvAB478Rz2tm5tCgR/vDx2fu+op+9jKelyWO58OQkA7npBiXQBV8cAhDEAYQxAGAMQxgCEMQBhDEAYAxDGAIQxAGHpbsUZHmz4rigafyBTt7sb+Kb0x4INnq6LZn5AFxncsSQnZHG4G/3zBMwjzDS8BvLhbPjoWKKv9QuUcqdhZhqAooEuMsm6LmEdyivgM5LkeR+Xrtvdd0HbBT/Iii9sPhGRsCcxOlS7B3jCOgAAAABJRU5ErkJggg==\");\r\n --pxa-button-slice: 8 6 10 6 fill;\r\n --pxa-button-width: 6px 5px 8px 6px;\r\n --pxa-button-ink: #3A2412;\r\n --pxa-button-hover-ink: #6E3A10;\r\n --pxa-icon: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAMZJREFUWIXtl7ENwyAQRR8WPZU7BqHPBtRmOlx7g/QexB2VJyBFbEKX7i5S+B0I6R+n/3RglpmKktaCsQB538A/ZN2PJ4RYp34veUfyTrQO25uvBQOAdzUfp0wBa8EQoloO7DJTWwa8qwBStwcwmhTAlQEtClKIDAoGBbZfSBrfmr4fESxAhYI+hBoUTC2ESmohzMc5KFCRPgW9+ZgFf0nBDz3JgBQiINSJ60k2ZsFnFuwbdyfyvr3/bpIFNGNhGQAtEtaCeQEYeX/dSgetuAAAAABJRU5ErkJggg==\");\r\n --pxa-icon-slice: 6 fill;\r\n --pxa-icon-width: 6px;\r\n --pxa-input: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAAAXNSR0IArs4c6QAAAOVJREFUaIHtmbERhSAQRBeHFswshNwOiLU6je3g5xZiZhH8BJABYnYG7oWSrO84gjsFzzbDoXPOFyr/poDv54/7ap2pGbuxAEoJuqj8srZL1YrnB8AX2FiXStDxYBByCVM8WdY+q1/huK/Y9podpiXhHQhsM9wwAmptvhs7yA2otbZ/GKfyZCxEADsAGxHADsBGBLADsBEB7ABsRAA7ABsRwA7ARgSwA7ARAewAbEQAOwCbbyboZ2SRQUbkGijHxV0vSrJCF5uhXEaPpHtCfb5QMNYVVc9bojPCaiwuCUdYjwfS5egfS5w8Vq4TIVoAAAAASUVORK5CYII=\");\r\n --pxa-input-slice: 4 4 6 4 fill;\r\n --pxa-input-width: 4px 4px 5px 4px;\r\n --pxa-input-ink: #3A2412;\r\n --pxa-placeholder: #7A5A38;\r\n --pxa-caret: #8C4A16;\r\n --pxa-select: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAMZJREFUWIXtl7ENwyAQRR8WPZU7BqHPBtRmOlx7g/QexB2VJyBFbEKX7i5S+B0I6R+n/3RglpmKktaCsQB538A/ZN2PJ4RYp34veUfyTrQO25uvBQOAdzUfp0wBa8EQoloO7DJTWwa8qwBStwcwmhTAlQEtClKIDAoGBbZfSBrfmr4fESxAhYI+hBoUTC2ESmohzMc5KFCRPgW9+ZgFf0nBDz3JgBQiINSJ60k2ZsFnFuwbdyfyvr3/bpIFNGNhGQAtEtaCeQEYeX/dSgetuAAAAABJRU5ErkJggg==\");\r\n --pxa-select-slice: 6 fill;\r\n --pxa-select-width: 6px;\r\n --pxa-ink: #3A2412;\r\n --pxa-accent: #8C5A2C;\r\n --pxa-accent-bright: #6E3A10;\r\n --pxa-hover-wash: rgba(140, 90, 44, 0.14);\r\n --pxa-tooltip-bg: #2E1C0C;\r\n --pxa-tooltip-ink: #FFFAF2;\r\n --pxa-outline: #8C5A2C;\r\n}\r\nhtml[data-pixel-theme='pixel-papernote'] body {\r\n background-color: var(--px-wood-darkest);\r\n background-image: repeating-conic-gradient(rgba(140, 90, 44, 0.04) 0 25%, transparent 0 50%);\r\n background-size: 4px 4px;\r\n}\r\n/* 便签本:铅笔光标覆盖一切——按钮/链接/输入框/正文都不再退回像素手或\r\n * I-beam,否则一块纸面上会同时出现三种指针。热区在笔尖 (4,4):素材是\r\n * 左上笔尖、右下橡皮,之前写成 26 26 等于点在橡皮上。 */\r\nhtml[data-pixel-theme='pixel-papernote'] body,\r\nhtml[data-pixel-theme='pixel-papernote'] body * {\r\n cursor: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAWNJREFUWIVjYBgFIx0wogvEiDL8x6V4yWtM9ZQCFmyCX6wD4Oz19cEICbfY/9R2BBM+SWTLY91iGRZPCMIbQlR1wGRfHQzLGRgYqO4IrA6Y7KvDIGOkzvDk3E0Uy2GAmo7AGQJPzt1kqKxoYWgONcYqTy1H4HQAzHIFa3mGB0cf0swRWFN0jCjDf2SfwxyhYC2P1ZDYgnVkZ1GcmujlCLwa6OEIgopp7QiiFNLSEUS7lFaOICm+aOEIklMtsY64YdTKwMDAwNBqp4nXEWTlXUKOgFmuERrKwMDAwBD78gpOR5BdteJyxI/cJSiWwwAuR+CtjvGBJa8ZGGtXn4XzYZbfuXMHw3J8gGwHoDviimcDw507dxh8KisZnrz5Qx8HoDvCILWU4cmbPwwyIixEO4JqzasYUYb/7cwacD7METIiLHgTIVVBjCjD/8cSGnD8X0fnP6HqmuquQreQLj4fBaOAEgAArfrJfFZraPoAAAAASUVORK5CYII=\") 4 4, auto !important;\r\n}\r\n\r\n/* 云石:板岩底 + 白石框 + 钢青。白石的 20px 边框只给对话框和菜单;\r\n * 按钮/输入框本身是白石控件,文字用深墨色。 */\r\nhtml[data-pixel-theme='pixel-marble'] {\r\n --px-wood-darkest: #161C26;\r\n --px-wood-dark: #1F2836;\r\n --px-wood-mid: #2A3548;\r\n --px-wood-warm: #354258;\r\n --px-wood-light: #5C708C;\r\n --px-wood-pale: #AEBCCB;\r\n --px-text-on-dark: #E9F0F7;\r\n --px-text-light: #AEBCCB;\r\n --px-parchment: #E9F0F7;\r\n --px-gold: #7FB2E5;\r\n --px-gold-bright: #A9D1F2;\r\n --px-gold-dark: #5A88B8;\r\n --px-gold-deep: #3C5A7A;\r\n --px-sidebar-fill: #121821;\r\n --px-line: #0D1219;\r\n --px-accent-bg: #7FB2E5;\r\n --px-accent-hover: #9CC6EE;\r\n --px-accent-ink: #121A24;\r\n --px-input-bg: #E8EFF2;\r\n --px-input-text: #1B2230;\r\n --px-input-ph: #5A6B80;\r\n --px-input-caret: #5A88B8;\r\n --px-tooltip-bg: #1B2230;\r\n --px-code-bg: #1F2836;\r\n --px-code-ink: #A9D1F2;\r\n --px-code-meta: #AEBCCB;\r\n --px-ink-on-mid: #E9F0F7;\r\n --px-topbar-fill: #1F2836;\r\n --px-dither: #1B2330;\r\n --pxa-panel: url(\"data:image/png;base64,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\");\r\n --pxa-panel-slice: 20 fill;\r\n --pxa-panel-width: 20px;\r\n --pxa-panel-repeat: repeat;\r\n --pxa-menu: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAz5JREFUWIWlVz9IG1Ec/p5cszm4hLrUgHSR0jooBLo0jgoVxN0/OImDi4vDDaFkcWmhOIhEukukkWZsXIRAbmhBspSAcTG85aDZTuE6XH8vv/fu3eWMH4Tk7t6973u//xEA0Or0Qhgozs0I2/1xUZybESZXcW5GODaSwvSU9s1xe+8nkvD1aesIrU4vdGwP3EpN+36ZH268u1NSmxempzQivj6fn7QSmvc0AbYTJ4l7++YVGnKA5ZV59Wx7q6R+e+2u+r3+cQHr/l+N/LzuRQL4woYcWNU2fvwaKcw8hGcRDQytSRayuoBOIOUAfelrLkgiJByfNjWCUUgUkBVEmISFxVksLM6qa9Oazt7Gkmh1eiGdxBa9T3FBGkxrSTkYWoD8VD5ciwnhgVY9Sz8xX2sSu5VazJ1KABGbQggUtRyt6yvtulzZt4riQcjRlz5i1Ymr5bj98zu2Qc4R2nXwOMy04vsPAIYWIcvxLNjbWBIOoOcsT0VObpIBwItczrgTxISMip+J1KcWQv5Jep5zRMw9SXBanV7ILcAxrGwluIefAQRW4ucg1QJeuwuv3c1UoseFA0S1GohSz+azUcWG4yEIEDyGiRkRK0Reu4vqzR2AqMHY0Lq+Qs4RY5u/etaMdUgpB2h1euGEtEQ9gcpoubKP4DHEQxBkJs3qtonywWosv5ZX5rXWOg7cSk2JSNvL2oySsuIp2N4qwa3UVEXd3YlE8Hjy2t1s3bB+cakKEbmBx4PNNRRsRNiXUW8xe4E2eFK5LB+uxbriJ/eLVuF4ZeT3OQqv3ylCm4B8fhKi/39Uur33tT6wvVVS1+d1D/WLSy21osIUISnlzJkR0NOwL30I9+i7kk+NozA9hePTplJN6ckzhrddM7fpPcAegLS+fLAqtBjgvT5tDONrzbZtktrScXenpGLDGTXzAVAjlc2ktiEjqbtyy9A7mbKANqze3D27PphwTo42tThIg2luClYbstaS2ETEQX62BSEQmZSLGjXQkgu4aOUC079ZazmvbFTtCLY50rSYGsnMv1nHp02cHG0KAPj67WcmF5lzpK27kmtoBFAW6Etf8xuP2L2NJQEAZqxkiR+z2dFhqM78A9t9tgHLgs7zAAAAAElFTkSuQmCC\");\r\n --pxa-menu-slice: 12 fill;\r\n --pxa-menu-width: 12px;\r\n --pxa-menu-repeat: repeat;\r\n --pxa-button: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAZRJREFUaIHtmjFOwzAUhn8HBpZGSVWpuQALMwsXIRdA7Q1oszEgNWkXZtQeoN24FZUQRHRhKwN6KIpi+1kqvCHvG+3/fbbs2EmlAoqiKEpfMe2G14/PY7stS2Pj6m9n2xmq99X6xupy2+ptOZvD57bNy1XnWguCvbDKaaGNYD+ZyunJ0thE0pPoO947Vflb9AQIoxsgjL6EhdETIEiWxibSp18WPQHC6GeoMHoChNENEEY/Q4XRd4AwegUJoxsgSJbGRq8gYfQECKMbIEw0TgbSc+gt42SAs6+Lq4eb60vpufSSx6eXnytIT8H/Q2tuAGC22B7L+S0AYF8frOGuPpt8Xx+8dSFecvoyBNfpynPGbHo4DsrOyx2qIjfn1DEvdwAA2ogmd/fPAID1cuKdDOXXy4m3LsRLTl+G4Dpdec6YTQ/HQetM/P4xa7bYWn8PvL3XAIDRMPFOhvKjYeKtC/GS05chuE5XnjNm0xPiqIrcAI3P0KrIDTW22aymZrOadvbZ8py6EC8nR74Qpysf6uE42uv8Dc6z5hxuhT2FAAAAAElFTkSuQmCC\");\r\n --pxa-button-hover: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAZNJREFUaIHtmjFOw0AQRf8uFDS27CiSfQEaahouQi4QJTcITkeBhJM01FFyANJxKwoEiIoOimgky+CdWZQwheeVu3/+Tma867UUhxbPbx9f7bEyT11ovq1tayiei+XW+s27K75L1+XBeXflFYoL1YIQF9Y4LNQI8ZNpHJ4yT53XTqLvsGeqcVxsByhjDVDGXsLK2A5QpMxT5+3p18V2gDJ2DVXGdoAy1gBl7BqqjL0DlLEjSBlrgCJlnjo7gpSxHaCMNUAZX2SJdg69pcgSnHyeXdxeXZ5r59JL7h6e9keQ7YL/h2ruAaCqdyiypLMRobmQORcX4yvRkV+MJ/e7Y3wkHqSt6h0A4JQmaKCurn+YjGdrAMBmORElNJ6tsVlO2LgYX/LkNITUM6SXrNn0kXhQnQl3c//Ifge8vL4DAIaDjE2G9MNBxsbF+JKnJM8Yz5BesmbT5y8edg1Vxi/mI8fLjGOwmI/sn3HaeGDfCe1E+gbV3DcHuhqxXU3ddjUVN4m0XFyMr0RHfjGeIX2sj8SjXedvMgbJ/79aVMIAAAAASUVORK5CYII=\");\r\n --pxa-button-active: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAZNJREFUaIHtmjFOw0AQRf8uFDS27CiSfQEaahouQi4QJTcITkeBhJM01FFyANJxKwoEiIoOimgky+CdWZQwheeVu3/+Tma867UUhxbPbx9f7bEyT11ovq1tayiei+XW+s27K75L1+XBeXflFYoL1YIQF9Y4LNQI8ZNpHJ4yT53XTqLvsGeqcVxsByhjDVDGXsLK2A5QpMxT5+3p18V2gDJ2DVXGdoAy1gBl7BqqjL0DlLEjSBlrgCJlnjo7gpSxHaCMNUAZX2SJdg69pcgSnHyeXdxeXZ5r59JL7h6e9keQ7YL/h2ruAaCqdyiypLMRobmQORcX4yvRkV+MJ/e7Y3wkHqSt6h0A4JQmaKCurn+YjGdrAMBmORElNJ6tsVlO2LgYX/LkNITUM6SXrNn0kXhQnQl3c//Ifge8vL4DAIaDjE2G9MNBxsbF+JKnJM8Yz5BesmbT5y8edg1Vxi/mI8fLjGOwmI/sn3HaeGDfCe1E+gbV3DcHuhqxXU3ddjUVN4m0XFyMr0RHfjGeIX2sj8SjXedvMgbJ/79aVMIAAAAASUVORK5CYII=\");\r\n --pxa-button-slice: 5 8 6 8 fill;\r\n --pxa-button-width: 5px 6px 6px 6px;\r\n --pxa-button-ink: #1B2230;\r\n --pxa-button-hover-ink: #1B2230;\r\n --pxa-icon: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAQ9JREFUWIXtV7sKwkAQnI0WNgmJCOYHbKxt/BH9AdE/8NFZCEZtrCX5AO38qxRBxcouFrLhPFw73SIZOAgz5Gayexs4oELZQTaRXu+5zYWBR5IeBh59ekfSzL3eAkib/AochDTMzRCOhrEJsX//gnoF1AOoHkJAuQJh4JFT+kNYjaF6APUxrM6A+o+oaoF+gLbvqpm3fRe1R6O77Pc6KgFW+/OrBRpVePOcrY85I73ei2VytmYvSZf2nK2POQDUOcQ8OgEAovmgCDaaHgAA8XaM0fSAeDsWv0jSbZ59GMXFhBOZyC43AECr6SO73NBq+mIASZf4zWJIgDGGm8WQmGQkuwkluwnxs+j+Rbd52+cJri7Wy++hebcAAAAASUVORK5CYII=\");\r\n --pxa-icon-slice: 6 fill;\r\n --pxa-icon-width: 6px;\r\n --pxa-input: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAOVJREFUWIVjZGBgYEgrn/O/qSKMgRCQEORjfPH+039CahgYGBgIqYMBlvL2lf/ff/hMjFqiDCXWYhhgIkUxLcDIdoCEIB/jgDrgxftP/0d2FAwuB8Rl9Q2cAx48esKwaFrRwDjg/KXrDApyMgNiOQMDAwOToZ7mgFnOwDDSCyIGhsGUDQcCjBbFow5AccCA1wUDBZjOX7rOwMDAMHCVEQMDw8itjAa8LhgtCfE6oLptOU5N1W3L4ZhYgEs9I6xzKijACxd88+4Dg4iQAFaD3rz7AGfjUoNLDzb1TAwMDANmeWdlOCMAdVNaL5kcHLkAAAAASUVORK5CYII=\");\r\n --pxa-input-slice: 6 fill;\r\n --pxa-input-width: 6px;\r\n --pxa-input-ink: #1B2230;\r\n --pxa-placeholder: #5A6B80;\r\n --pxa-caret: #5A88B8;\r\n --pxa-select: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAANBJREFUWIVjYBgFo2AUjIIBBowMDAwMaeVz/jdVhKFIPHj+noGBgYFBQVIQrxi6HLI8PvVwB6SVz/kvKMDLUJjhiWEQLQHMUSwwAXpZjG4fk6AAL10tRgdM7z98HlgHDKjtow4YFA4YzQUDajsDUkmIrcynJYAXxYICvAzo0YBeeRBTqcDUkaqX5f2Hzwx6WkoMazadwWnw42evGRgYGBhkpUTxOuDxs9cYagjpZZyycN9/ZM3IhsA0owN0eZg+YgCy2s7KcEaiNI2CUTAKaAkA7J1WLFOXtqgAAAAASUVORK5CYII=\");\r\n --pxa-select-slice: 6 fill;\r\n --pxa-select-width: 6px;\r\n --pxa-select-ink: #1B2230;\r\n --pxa-ink: #E9F0F7;\r\n --pxa-accent: #7FB2E5;\r\n --pxa-accent-bright: #A9D1F2;\r\n --pxa-hover-wash: rgba(127, 178, 229, 0.14);\r\n --pxa-tooltip-bg: #1B2230;\r\n --pxa-tooltip-ink: #E9F0F7;\r\n}\r\nhtml[data-pixel-theme='pixel-marble'] body {\r\n background-color: var(--px-wood-darkest);\r\n background-image: repeating-conic-gradient(rgba(127, 178, 229, 0.035) 0 25%, transparent 0 50%);\r\n background-size: 4px 4px;\r\n}\r\n\r\n/* ── 共用 9-slice 规则:只在素材主题生效 ─────────────────────────── */\r\n/* 便签的纸面几乎与页面同色,补 2px 墨线把「纸」钉出来;其他素材主题的\r\n * 边缘本身对比足够,--pxa-outline 不设即透明。 */\r\nhtml[data-pixel-asset] [role='dialog'],\r\nhtml[data-pixel-asset] [data-menu-material] {\r\n outline: 2px solid var(--pxa-outline, transparent);\r\n outline-offset: -2px;\r\n}\r\nhtml[data-pixel-asset] [role='dialog'] {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-panel-width, 24px) !important;\r\n border-image: var(--pxa-panel) var(--pxa-panel-slice, 24 fill) / var(--pxa-panel-width, 24px) / 0 var(--pxa-panel-repeat, stretch) !important;\r\n background: transparent !important;\r\n color: var(--pxa-ink) !important;\r\n box-sizing: border-box !important;\r\n}\r\nhtml[data-pixel-asset] [data-menu-material] {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-menu-width, 10px) !important;\r\n border-image: var(--pxa-menu) var(--pxa-menu-slice, 10 fill) / var(--pxa-menu-width, 10px) / 0 var(--pxa-menu-repeat, stretch) !important;\r\n background: transparent !important;\r\n box-sizing: border-box !important;\r\n overflow-x: hidden !important;\r\n}\r\nhtml[data-pixel-asset] [role='menu']:not([data-menu-material]) {\r\n border: 0 !important;\r\n border-image: none !important;\r\n background: transparent !important;\r\n}\r\nhtml[data-pixel-asset] [role='menuitem'] {\r\n color: var(--pxa-ink) !important;\r\n background: transparent !important;\r\n background-image: none !important;\r\n}\r\nhtml[data-pixel-asset] [role='menuitem']:hover {\r\n color: var(--pxa-accent-bright) !important;\r\n background-color: var(--pxa-hover-wash) !important;\r\n background-image: none !important;\r\n}\r\nhtml[data-pixel-asset] button[class*='primary'],\r\nhtml[data-pixel-asset] button[class*='Primary'] {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-button-width) !important;\r\n border-image: var(--pxa-button) var(--pxa-button-slice) / var(--pxa-button-width) / 0 stretch !important;\r\n background: transparent !important;\r\n color: var(--pxa-button-ink) !important;\r\n min-height: 32px;\r\n}\r\nhtml[data-pixel-asset] button[class*='primary']:hover,\r\nhtml[data-pixel-asset] button[class*='Primary']:hover {\r\n border-image-source: var(--pxa-button-hover) !important;\r\n color: var(--pxa-button-hover-ink, var(--pxa-button-ink)) !important;\r\n background: transparent !important;\r\n background-image: none !important;\r\n}\r\nhtml[data-pixel-asset] button[class*='primary']:active,\r\nhtml[data-pixel-asset] button[class*='Primary']:active {\r\n border-image-source: var(--pxa-button-active, var(--pxa-button)) !important;\r\n transform: translate(1px, 1px) !important;\r\n transition-duration: 0s !important;\r\n}\r\n/* 图标主按钮(发送/关闭):用方形图标框,绝不把横条按钮塞进方块。 */\r\nhtml[data-pixel-asset] button[class*='primary']:has(> svg:only-child),\r\nhtml[data-pixel-asset] button[class*='Primary']:has(> svg:only-child) {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-icon-width) !important;\r\n border-image: var(--pxa-icon) var(--pxa-icon-slice) / var(--pxa-icon-width) / 0 stretch !important;\r\n background: transparent !important;\r\n color: var(--pxa-button-ink) !important;\r\n min-height: 0;\r\n}\r\nhtml[data-pixel-asset] button[class*='primary']:has(> svg:only-child):hover,\r\nhtml[data-pixel-asset] button[class*='Primary']:has(> svg:only-child):hover {\r\n border-image-source: var(--pxa-icon) !important;\r\n color: var(--pxa-accent-bright) !important;\r\n}\r\nhtml[data-pixel-asset] input:not([type='checkbox']):not([type='radio']):not([type='range']),\r\nhtml[data-pixel-asset] textarea,\r\nhtml[data-pixel-asset] [contenteditable='true'] {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-input-width, 8px) !important;\r\n border-image: var(--pxa-input) var(--pxa-input-slice, 10 fill) / var(--pxa-input-width, 8px) / 0 stretch !important;\r\n background: transparent !important;\r\n color: var(--pxa-input-ink) !important;\r\n caret-color: var(--pxa-caret) !important;\r\n box-sizing: border-box !important;\r\n}\r\nhtml[data-pixel-asset] input::placeholder,\r\nhtml[data-pixel-asset] textarea::placeholder {\r\n color: var(--pxa-placeholder) !important;\r\n -webkit-text-fill-color: var(--pxa-placeholder) !important;\r\n opacity: 1;\r\n}\r\nhtml[data-pixel-asset] [contenteditable='true']:empty::before {\r\n color: var(--pxa-placeholder) !important;\r\n -webkit-text-fill-color: var(--pxa-placeholder) !important;\r\n}\r\nhtml[data-pixel-asset] [role='menuitem'][aria-current='page'],\r\nhtml[data-pixel-asset] [role='treeitem'][aria-selected='true'] {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-select-width, 8px) !important;\r\n border-image: var(--pxa-select) var(--pxa-select-slice, 10 fill) / var(--pxa-select-width, 8px) / 0 stretch !important;\r\n background: transparent !important;\r\n background-image: none !important;\r\n color: var(--pxa-select-ink, var(--pxa-ink)) !important;\r\n box-sizing: border-box !important;\r\n}\r\n/* 浮层只换颜色:2px 主题色边 + 实色底,不套面板图。 */\r\nhtml[data-pixel-asset] [role='tooltip'] {\r\n border: 2px solid var(--pxa-accent) !important;\r\n border-image: none !important;\r\n background-color: var(--pxa-tooltip-bg) !important;\r\n color: var(--pxa-tooltip-ink) !important;\r\n}\r\nhtml[data-pixel-asset] [role='alert'] {\r\n border: 2px solid var(--pxa-accent) !important;\r\n border-left: 4px solid var(--pxa-accent) !important;\r\n border-image: none !important;\r\n background-color: var(--pxa-tooltip-bg) !important;\r\n color: var(--pxa-tooltip-ink) !important;\r\n}\r\nhtml[data-pixel-asset] [role='dialog'] button:not(:disabled):not([class*='primary']):not([class*='Primary']):hover {\r\n background-color: var(--pxa-hover-wash) !important;\r\n}\r\nhtml[data-pixel-asset] [role='tab']::after {\r\n background: var(--pxa-accent) !important;\r\n}\r\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BA,mBAAmC;AACnC,8BAA4B;;;AC/B5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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",
4
+ "sourcesContent": ["/**\r\n * dsh-pixel-ui — browser half (the pixel skin).\r\n *\r\n * Registers nine pixel themes on the ThemeService seam\r\n * (`ctx.theme.register` with --dsw-alias-* token overrides): wood (dark),\r\n * paper (light), warm (dark), retro-green (dark), hologram / pumpkin /\r\n * papernote / marble / mithril (real 9-slice sprites, two light + three dark). The stylesheet\r\n * carries the pixel borders, fonts, cursors, and the asset-theme 9-slice\r\n * layer that alias tokens alone cannot express, scoped to `html[data-pixel-ui]`\r\n * with a `data-pixel-theme` variant attribute, plus `data-pixel-asset` while\r\n * one of the sprite themes is active.\r\n *\r\n * Theme-choice memory is two-layered on purpose:\r\n * 1. the browser `localStorage` mirror (instant, per-origin);\r\n * 2. the host-side durable preference (`/dsh-pixel-ui/preference`,\r\n * stored under $DSH_HOME) which survives DSH Desktop's per-launch\r\n * random local port — the origin (port included) changes on every\r\n * restart, so the mirror alone forgets the choice.\r\n * The host file is authoritative whenever the mirror is absent (new port);\r\n * explicit user picks are written to both layers at once.\r\n *\r\n * The host settings scope persists only the built-in preferences\r\n * (light/dark/system), so switching model / reasoning-effort re-applies that\r\n * built-in and would visibly drop the skin. We keep the user's intended\r\n * theme and re-assert a pixel theme whenever a built-in arrives without an\r\n * explicit choice in the settings row below (restore must be a user action,\r\n * not an app-forced re-init).\r\n *\r\n * @module dsh-pixel-ui/client\r\n */\r\nimport { createElement as h } from 'react'\r\nimport { defineStore } from '@deepseek-ai/dsh-client-store'\r\nimport cssText from './pixel.css'\r\n\r\n/** Plugin name; also the patch row id. */\r\nexport const name = 'dsh-pixel-ui'\r\n\r\n/** Required services: the theme runtime, the settings item slot, the locale. */\r\nexport const inject = ['slots', 'theme', 'locale']\r\n\r\n/** localStorage key carrying the per-origin theme mirror. */\r\nconst THEME_STORAGE_KEY = 'dsh-pixel-ui:theme'\r\n\r\n/** Host-backed durable preference route (registered by the node half). */\r\nconst PREFERENCE_URL = '/dsh-pixel-ui/preference'\r\n\r\n/**\r\n * Page-bootstrap global written by the node half's index injection. DSH\r\n * Desktop renders from `dsh-app://app/`, where the relative fetch above can\r\n * never reach the loopback route, so the injection is the transport that\r\n * exists on both deployments.\r\n */\r\nconst BOOTSTRAP_GLOBAL = '__DSH_PIXEL_UI__'\r\n\r\n/** Default skin for a first run (no mirror, no durable preference). */\r\nconst DEFAULT_SKIN = 'pixel-wood'\r\n\r\n/**\r\n * The nine pixel themes (Agent Xi palettes + five sprite palettes).\r\n *\r\n * Every theme declares the same 23 tokens: the 17 --dsw-alias-* palette\r\n * tokens used by the flat skin, plus six --dsw-specific-* surfaces that the\r\n * Host paints itself (user bubble, composer input, menu surface, selection\r\n * button, tip). Theming those through tokens keeps host-native surfaces in\r\n * palette without a single class-name selector.\r\n */\r\nconst THEMES = [\r\n {\r\n id: 'pixel-wood',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#1A0F06',\r\n '--dsw-alias-bg-layer-1': '#2C1A0C',\r\n '--dsw-alias-bg-layer-2': '#3A2515',\r\n '--dsw-alias-bg-overlay': '#241408',\r\n '--dsw-alias-border-l1': '#4A3020',\r\n '--dsw-alias-border-l2': '#8B6B45',\r\n '--dsw-alias-brand-primary': '#F4D03F',\r\n '--dsw-alias-label-primary': '#F5E6C8',\r\n '--dsw-alias-label-secondary': '#AC8A63',\r\n '--dsw-alias-state-error-primary': '#E74C3C',\r\n '--dsw-alias-state-success-primary': '#7DCE82',\r\n '--dsw-alias-state-warn-primary': '#F39C12',\r\n '--dsw-alias-state-idle-primary': '#7A5C3E',\r\n '--dsw-specific-sidebar-fill': '#241408',\r\n '--dsw-alias-button-primary-fill': '#F4D03F',\r\n '--dsw-alias-button-primary-hover': '#FFE066',\r\n '--dsw-alias-label-primary-foreground': '#1A0F06',\r\n '--dsw-specific-bubble': '#3A2515',\r\n '--dsw-specific-bubble-highlight': '#4A3020',\r\n '--dsw-specific-menu': '#241408',\r\n '--dsw-specific-input-major': '#1A0F06',\r\n '--dsw-specific-selector': '#4A3020',\r\n '--dsw-specific-tip': '#3A2515',\r\n },\r\n },\r\n {\r\n id: 'pixel-paper',\r\n colorScheme: 'light',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#F0E8D8',\r\n '--dsw-alias-bg-layer-1': '#E8DCC8',\r\n '--dsw-alias-bg-layer-2': '#DDD0B8',\r\n '--dsw-alias-bg-overlay': '#E2D6BE',\r\n '--dsw-alias-border-l1': '#D4C4A8',\r\n '--dsw-alias-border-l2': '#7A6A4A',\r\n '--dsw-alias-brand-primary': '#8A6400',\r\n '--dsw-alias-label-primary': '#3A2A10',\r\n '--dsw-alias-label-secondary': '#6B5020',\r\n '--dsw-alias-state-error-primary': '#8B2020',\r\n '--dsw-alias-state-success-primary': '#3A7A40',\r\n '--dsw-alias-state-warn-primary': '#805000',\r\n '--dsw-alias-state-idle-primary': '#847458',\r\n '--dsw-specific-sidebar-fill': '#E8DCC8',\r\n '--dsw-alias-button-primary-fill': '#7A5A00',\r\n '--dsw-alias-button-primary-hover': '#5C4400',\r\n '--dsw-alias-label-primary-foreground': '#FFFDF5',\r\n '--dsw-specific-bubble': '#E3D4B8',\r\n '--dsw-specific-bubble-highlight': '#D8C7A6',\r\n '--dsw-specific-menu': '#FFFDF5',\r\n '--dsw-specific-input-major': '#FFFDF5',\r\n '--dsw-specific-selector': '#D4C4A8',\r\n '--dsw-specific-tip': '#D4C4A8',\r\n },\r\n },\r\n {\r\n id: 'pixel-warm',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#1E0E04',\r\n '--dsw-alias-bg-layer-1': '#34180A',\r\n '--dsw-alias-bg-layer-2': '#4A2210',\r\n '--dsw-alias-bg-overlay': '#2A1308',\r\n '--dsw-alias-border-l1': '#5C2E16',\r\n '--dsw-alias-border-l2': '#A86B40',\r\n '--dsw-alias-brand-primary': '#FF8C42',\r\n '--dsw-alias-label-primary': '#F0C8A0',\r\n '--dsw-alias-label-secondary': '#C08A5C',\r\n '--dsw-alias-state-error-primary': '#D93B3B',\r\n '--dsw-alias-state-success-primary': '#6DBF6D',\r\n '--dsw-alias-state-warn-primary': '#FF8C42',\r\n '--dsw-alias-state-idle-primary': '#8A5A38',\r\n '--dsw-specific-sidebar-fill': '#2A1308',\r\n '--dsw-alias-button-primary-fill': '#FF8C42',\r\n '--dsw-alias-button-primary-hover': '#FFA64D',\r\n '--dsw-alias-label-primary-foreground': '#1E0E04',\r\n '--dsw-specific-bubble': '#4A2210',\r\n '--dsw-specific-bubble-highlight': '#5C2E16',\r\n '--dsw-specific-menu': '#2A1308',\r\n '--dsw-specific-input-major': '#1E0E04',\r\n '--dsw-specific-selector': '#5C2E16',\r\n '--dsw-specific-tip': '#4A2210',\r\n },\r\n },\r\n {\r\n id: 'pixel-retro',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#0A0E0A',\r\n '--dsw-alias-bg-layer-1': '#0E140E',\r\n '--dsw-alias-bg-layer-2': '#121A12',\r\n '--dsw-alias-bg-overlay': '#0C100C',\r\n '--dsw-alias-border-l1': '#2A402A',\r\n '--dsw-alias-border-l2': '#4A7A4A',\r\n '--dsw-alias-brand-primary': '#33FF33',\r\n '--dsw-alias-label-primary': '#33FF33',\r\n '--dsw-alias-label-secondary': '#22AA22',\r\n '--dsw-alias-state-error-primary': '#FF3333',\r\n '--dsw-alias-state-success-primary': '#33FF33',\r\n '--dsw-alias-state-warn-primary': '#FFCC33',\r\n '--dsw-alias-state-idle-primary': '#359035',\r\n '--dsw-specific-sidebar-fill': '#0C100C',\r\n '--dsw-alias-button-primary-fill': '#33FF33',\r\n '--dsw-alias-button-primary-hover': '#66FF66',\r\n '--dsw-alias-label-primary-foreground': '#0A0E0A',\r\n '--dsw-specific-bubble': '#101A10',\r\n '--dsw-specific-bubble-highlight': '#162016',\r\n '--dsw-specific-menu': '#0C100C',\r\n '--dsw-specific-input-major': '#0A0E0A',\r\n '--dsw-specific-selector': '#2A402A',\r\n '--dsw-specific-tip': '#162016',\r\n },\r\n },\r\n {\r\n id: 'pixel-hologram',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#071426',\r\n '--dsw-alias-bg-layer-1': '#10233B',\r\n '--dsw-alias-bg-layer-2': '#1A2E4A',\r\n '--dsw-alias-bg-overlay': '#0A1A2E',\r\n '--dsw-alias-border-l1': '#244A6A',\r\n '--dsw-alias-border-l2': '#3E8FB0',\r\n '--dsw-alias-brand-primary': '#14DCEE',\r\n '--dsw-alias-label-primary': '#E8F7FF',\r\n '--dsw-alias-label-secondary': '#9BC4D4',\r\n '--dsw-alias-state-error-primary': '#FF6B7A',\r\n '--dsw-alias-state-success-primary': '#6FE3C1',\r\n '--dsw-alias-state-warn-primary': '#FFD166',\r\n '--dsw-alias-state-idle-primary': '#52748C',\r\n '--dsw-specific-sidebar-fill': '#081624',\r\n '--dsw-alias-button-primary-fill': '#2C416D',\r\n '--dsw-alias-button-primary-hover': '#385586',\r\n '--dsw-alias-label-primary-foreground': '#E8F7FF',\r\n '--dsw-specific-bubble': '#12314F',\r\n '--dsw-specific-bubble-highlight': '#1A3E60',\r\n '--dsw-specific-menu': '#0A1A2E',\r\n '--dsw-specific-input-major': '#10233B',\r\n '--dsw-specific-selector': '#244A6A',\r\n '--dsw-specific-tip': '#0A1A2E',\r\n },\r\n },\r\n {\r\n id: 'pixel-pumpkin',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#170D06',\r\n '--dsw-alias-bg-layer-1': '#241409',\r\n '--dsw-alias-bg-layer-2': '#2F1B0C',\r\n '--dsw-alias-bg-overlay': '#1C0F07',\r\n '--dsw-alias-border-l1': '#4A2A12',\r\n '--dsw-alias-border-l2': '#C4741F',\r\n '--dsw-alias-brand-primary': '#FF9E2C',\r\n '--dsw-alias-label-primary': '#FFE9C9',\r\n '--dsw-alias-label-secondary': '#D8A76F',\r\n '--dsw-alias-state-error-primary': '#FF7A66',\r\n '--dsw-alias-state-success-primary': '#9BD57A',\r\n '--dsw-alias-state-warn-primary': '#FFC24B',\r\n '--dsw-alias-state-idle-primary': '#A06A3E',\r\n '--dsw-specific-sidebar-fill': '#1B0F07',\r\n '--dsw-alias-button-primary-fill': '#8A3E0C',\r\n '--dsw-alias-button-primary-hover': '#A64E10',\r\n '--dsw-alias-label-primary-foreground': '#FFF6E6',\r\n '--dsw-specific-bubble': '#5A2E10',\r\n '--dsw-specific-bubble-highlight': '#6E3A14',\r\n '--dsw-specific-menu': '#241409',\r\n '--dsw-specific-input-major': '#2A170A',\r\n '--dsw-specific-selector': '#4A2A12',\r\n '--dsw-specific-tip': '#3A2210',\r\n },\r\n },\r\n {\r\n id: 'pixel-papernote',\r\n colorScheme: 'light',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#F2E6D2',\r\n '--dsw-alias-bg-layer-1': '#F6ECD9',\r\n '--dsw-alias-bg-layer-2': '#EEE1C9',\r\n '--dsw-alias-bg-overlay': '#FFFAF2',\r\n '--dsw-alias-border-l1': '#E2D1B4',\r\n '--dsw-alias-border-l2': '#8C5A2C',\r\n '--dsw-alias-brand-primary': '#9A5518',\r\n '--dsw-alias-label-primary': '#3A2412',\r\n '--dsw-alias-label-secondary': '#6E4E2E',\r\n '--dsw-alias-state-error-primary': '#A33225',\r\n '--dsw-alias-state-success-primary': '#3F7A3A',\r\n '--dsw-alias-state-warn-primary': '#8A5A00',\r\n '--dsw-alias-state-idle-primary': '#94795C',\r\n '--dsw-specific-sidebar-fill': '#F6ECD9',\r\n '--dsw-alias-button-primary-fill': '#A3551B',\r\n '--dsw-alias-button-primary-hover': '#8C4713',\r\n '--dsw-alias-label-primary-foreground': '#FFF9F1',\r\n '--dsw-specific-bubble': '#F3DCBC',\r\n '--dsw-specific-bubble-highlight': '#EBC9A0',\r\n '--dsw-specific-menu': '#FFFAF2',\r\n '--dsw-specific-input-major': '#FFF9F1',\r\n '--dsw-specific-selector': '#DCC7A4',\r\n '--dsw-specific-tip': '#E6D7BC',\r\n },\r\n },\r\n {\r\n id: 'pixel-marble',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#161C26',\r\n '--dsw-alias-bg-layer-1': '#1F2836',\r\n '--dsw-alias-bg-layer-2': '#2A3548',\r\n '--dsw-alias-bg-overlay': '#1B2230',\r\n '--dsw-alias-border-l1': '#3C4A60',\r\n '--dsw-alias-border-l2': '#A9C0DA',\r\n '--dsw-alias-brand-primary': '#7FB2E5',\r\n '--dsw-alias-label-primary': '#E9F0F7',\r\n '--dsw-alias-label-secondary': '#AEBCCB',\r\n '--dsw-alias-state-error-primary': '#FF7A7A',\r\n '--dsw-alias-state-success-primary': '#7BE3B0',\r\n '--dsw-alias-state-warn-primary': '#FFC857',\r\n '--dsw-alias-state-idle-primary': '#6F8098',\r\n '--dsw-specific-sidebar-fill': '#121821',\r\n '--dsw-alias-button-primary-fill': '#E8EFF2',\r\n '--dsw-alias-button-primary-hover': '#F6FAFD',\r\n '--dsw-alias-label-primary-foreground': '#1B2230',\r\n '--dsw-specific-bubble': '#2A3548',\r\n '--dsw-specific-bubble-highlight': '#354258',\r\n '--dsw-specific-menu': '#1B2230',\r\n '--dsw-specific-input-major': '#1F2836',\r\n '--dsw-specific-selector': '#3C4A60',\r\n '--dsw-specific-tip': '#2A3548',\r\n },\r\n },\r\n {\r\n id: 'pixel-mithril',\r\n colorScheme: 'dark',\r\n tokens: {\r\n '--dsw-alias-bg-base': '#120E24',\r\n '--dsw-alias-bg-layer-1': '#1A1430',\r\n '--dsw-alias-bg-layer-2': '#241C42',\r\n '--dsw-alias-bg-overlay': '#171129',\r\n '--dsw-alias-border-l1': '#3A3260',\r\n '--dsw-alias-border-l2': '#9A93D6',\r\n '--dsw-alias-brand-primary': '#B49BFF',\r\n '--dsw-alias-label-primary': '#F0ECFF',\r\n '--dsw-alias-label-secondary': '#BDB4E0',\r\n '--dsw-alias-state-error-primary': '#FF7A8A',\r\n '--dsw-alias-state-success-primary': '#7BE3B0',\r\n '--dsw-alias-state-warn-primary': '#FFD166',\r\n '--dsw-alias-state-idle-primary': '#776E9C',\r\n '--dsw-specific-sidebar-fill': '#0F0B1E',\r\n '--dsw-alias-button-primary-fill': '#9CA1A5',\r\n '--dsw-alias-button-primary-hover': '#B7BCC0',\r\n '--dsw-alias-label-primary-foreground': '#12101E',\r\n '--dsw-specific-bubble': '#241C42',\r\n '--dsw-specific-bubble-highlight': '#2E2552',\r\n '--dsw-specific-menu': '#171129',\r\n '--dsw-specific-input-major': '#1A1430',\r\n '--dsw-specific-selector': '#3A3260',\r\n '--dsw-specific-tip': '#241C42',\r\n },\r\n },\r\n]\r\n\r\nconst PIXEL_IDS = THEMES.map((theme) => theme.id)\r\n\r\n/** Themes whose surfaces come from 9-slice sprites (not just flat colors). */\r\nconst ASSET_IDS = new Set(['pixel-hologram', 'pixel-pumpkin', 'pixel-papernote', 'pixel-marble', 'pixel-mithril'])\r\n\r\n/** Built-in preference ids; together with the pixel ids they are restorable. */\r\nconst RESTORABLE_IDS = new Set(['light', 'dark', 'system', ...PIXEL_IDS])\r\n\r\n/** Settings-row copy (zh is the key-set source of truth; en mirrors it). */\r\nconst LOCALE_NS = 'settings.pixel-ui'\r\nconst MESSAGES = {\r\n zh: {\r\n 'row.title': '像素主题',\r\n 'row.desc': '选择后立即生效并跨重启记忆;「现代默认」回到宿主外观',\r\n 'theme.pixel-wood': '像素·木屋',\r\n 'theme.pixel-paper': '像素·羊皮纸',\r\n 'theme.pixel-warm': '像素·暖阳',\r\n 'theme.pixel-retro': '像素·终端绿',\r\n 'theme.pixel-hologram': '像素·全息',\r\n 'theme.pixel-pumpkin': '像素·南瓜灯',\r\n 'theme.pixel-papernote': '像素·便签本',\r\n 'theme.pixel-marble': '像素·云石',\r\n 'theme.pixel-mithril': '像素·秘银',\r\n 'theme.system': '现代默认',\r\n },\r\n en: {\r\n 'row.title': 'Pixel theme',\r\n 'row.desc': 'Applies instantly and persists across restarts; “Modern default” returns to the host appearance',\r\n 'theme.pixel-wood': 'Pixel · Wood',\r\n 'theme.pixel-paper': 'Pixel · Paper',\r\n 'theme.pixel-warm': 'Pixel · Warm',\r\n 'theme.pixel-retro': 'Pixel · Terminal Green',\r\n 'theme.pixel-hologram': 'Pixel · Hologram',\r\n 'theme.pixel-pumpkin': 'Pixel · Pumpkin',\r\n 'theme.pixel-papernote': 'Pixel · Papernote',\r\n 'theme.pixel-marble': 'Pixel · Marble',\r\n 'theme.pixel-mithril': 'Pixel · Mithril',\r\n 'theme.system': 'Modern default',\r\n },\r\n}\r\n\r\n/** Settings row choices: the nine skins plus the modern default escape. */\r\nconst THEME_CHOICES = [\r\n { id: 'pixel-wood', swatch: '#F4D03F' },\r\n { id: 'pixel-paper', swatch: '#FFFDF5' },\r\n { id: 'pixel-warm', swatch: '#FF8C42' },\r\n { id: 'pixel-retro', swatch: '#33FF33' },\r\n { id: 'pixel-hologram', swatch: '#14DCEE' },\r\n { id: 'pixel-pumpkin', swatch: '#FF9E2C' },\r\n { id: 'pixel-papernote', swatch: '#F3DCBC' },\r\n { id: 'pixel-marble', swatch: '#E8EFF2' },\r\n { id: 'pixel-mithril', swatch: '#B49BFF' },\r\n { id: 'system', swatch: '#7A7A7A' },\r\n]\r\n\r\n/** Fallback translator for environments where the slot props carry no `t`. */\r\nconst fallbackT = (key) => key\r\n\r\n/**\r\n * Declares the theme row slot store: a mirror of the theme service\r\n * preference, written only by the plugin's apply-world change listener\r\n * (same shape as the ui-theme Appearance row store).\r\n * @returns the store handle.\r\n */\r\nfunction createThemeRowStore() {\r\n return defineStore({\r\n init: () => ({ preference: null, revision: -1 }),\r\n actions: {\r\n sync: (draft, preference, revision) => {\r\n if (revision <= draft.revision) return\r\n draft.preference = preference\r\n draft.revision = revision\r\n },\r\n },\r\n })\r\n}\r\n\r\n/**\r\n * General-section row: switch between the nine pixel skins and back to the\r\n * modern default. Reads selection state through props.useStore, localized\r\n * copy through props.t, and writes through the injected setTheme callback.\r\n * Each button carries aria-pressed so the current pick is announced, and the\r\n * swatch is decorative (the visible label names the theme).\r\n * @param props - slot shares (useStore, t + injected face).\r\n * @returns the row element tree.\r\n */\r\nfunction ThemeRow(props) {\r\n const preference = props.useStore((state) => state.preference)\r\n const t = typeof props.t === 'function' ? props.t : fallbackT\r\n return h('div', { className: 'px-theme-row', role: 'group', 'aria-label': t('row.title') },\r\n h('div', { className: 'px-theme-row-title' }, t('row.title')),\r\n h('div', { className: 'px-theme-row-desc' }, t('row.desc')),\r\n h('div', { className: 'px-theme-row-cubes' },\r\n THEME_CHOICES.map((choice) => h('button', {\r\n key: choice.id,\r\n type: 'button',\r\n className: 'px-theme-btn' + (preference === choice.id ? ' px-theme-btn-active' : ''),\r\n 'aria-pressed': preference === choice.id,\r\n onClick: () => { props.setTheme(choice.id) },\r\n },\r\n h('span', { className: 'px-theme-swatch', 'aria-hidden': 'true', style: { background: choice.swatch } }),\r\n t(`theme.${choice.id}`),\r\n )),\r\n ),\r\n )\r\n}\r\n\r\n/**\r\n * Read the per-origin mirror; storage failures read as unset. Values outside\r\n * the restorable set (stale ids from an older install, corrupt data) read as\r\n * unset so a first run can still reach the default skin.\r\n * @returns the stored restorable id or null.\r\n */\r\nfunction readLocalTheme() {\r\n try {\r\n const value = localStorage.getItem(THEME_STORAGE_KEY)\r\n return RESTORABLE_IDS.has(value) ? value : null\r\n } catch { return null }\r\n}\r\n\r\n/**\r\n * Write the per-origin mirror; storage failures are non-fatal.\r\n * @param id - theme id to mirror.\r\n */\r\nfunction writeLocalTheme(id) {\r\n try { localStorage.setItem(THEME_STORAGE_KEY, id) } catch { /* best-effort */ }\r\n}\r\n\r\n/**\r\n * Read the host-side durable preference from the index-injection bootstrap\r\n * (desktop transport). Values outside the restorable set read as unset.\r\n * @returns the restorable id or null.\r\n */\r\nfunction readBootTheme() {\r\n try {\r\n const theme = globalThis[BOOTSTRAP_GLOBAL]?.theme\r\n return typeof theme === 'string' && RESTORABLE_IDS.has(theme) ? theme : null\r\n } catch { return null }\r\n}\r\n\r\n/**\r\n * Read the host-side durable preference over the HTTP route (Web transport).\r\n * Any failure (desktop `dsh-app://` origin, old host without the route,\r\n * offline, non-JSON) reads as unset so the local mirror stays usable.\r\n * @returns the restorable id or null.\r\n */\r\nasync function readHostTheme() {\r\n const injected = readBootTheme()\r\n if (injected !== null) return injected\r\n try {\r\n const res = await fetch(PREFERENCE_URL, { headers: { accept: 'application/json' } })\r\n if (!res.ok) return null\r\n const body = await res.json()\r\n const theme = body?.theme\r\n return typeof theme === 'string' && RESTORABLE_IDS.has(theme) ? theme : null\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\n/**\r\n * Write the host-side durable preference (fire-and-forget): a failed PUT\r\n * only costs the cross-port memory, never the current session.\r\n * @param id - theme id to persist.\r\n */\r\nfunction writeHostTheme(id) {\r\n try {\r\n fetch(PREFERENCE_URL, {\r\n method: 'PUT',\r\n headers: { 'content-type': 'application/json' },\r\n body: JSON.stringify({ theme: id }),\r\n }).catch(() => { /* host unavailable: local mirror still holds */ })\r\n } catch { /* fetch missing: ignore */ }\r\n}\r\n\r\n/** Client plugin body: register the nine themes, restore/persist the choice, inject CSS, locale and the settings row. */\r\nexport function apply(ctx) {\r\n // Scope attributes mirror the active theme, so the stylesheet only shades\r\n // while a pixel theme is selected and the variant rules can pick the palette.\r\n // `data-pixel-asset` marks the sprite themes so the shared 9-slice layer runs\r\n // only for them (flat themes stay flat).\r\n const syncScope = () => {\r\n const active = ctx.theme.getTheme().active\r\n const on = PIXEL_IDS.includes(active.id)\r\n document.documentElement.toggleAttribute('data-pixel-ui', on)\r\n if (on) {\r\n document.documentElement.setAttribute('data-pixel-theme', active.id)\r\n document.documentElement.toggleAttribute('data-pixel-asset', ASSET_IDS.has(active.id))\r\n } else {\r\n document.documentElement.removeAttribute('data-pixel-theme')\r\n document.documentElement.removeAttribute('data-pixel-asset')\r\n }\r\n return on\r\n }\r\n\r\n // True only for the moment the user picks a theme in the settings row below.\r\n let explicit = false\r\n // True from `apply` until the restore below has written the intended skin.\r\n // While it is up, a built-in preference arriving is the Host's own initial\r\n // state (settings scope load, theme registration publish) and must not win\r\n // over the skin the user actually chose.\r\n let restoring = true\r\n\r\n ctx.on('theme/change', (snapshot) => {\r\n syncScope()\r\n const pref = snapshot.preference\r\n if (explicit) {\r\n explicit = false\r\n writeLocalTheme(pref)\r\n writeHostTheme(pref)\r\n return\r\n }\r\n if (PIXEL_IDS.includes(pref)) {\r\n writeLocalTheme(pref)\r\n writeHostTheme(pref)\r\n return\r\n }\r\n const want = readLocalTheme()\r\n if (want !== null && PIXEL_IDS.includes(want)) {\r\n // Host reapplied a built-in (model / reasoning switch, or its own\r\n // startup preference): re-assert the skin the user chose.\r\n try { ctx.theme.setTheme(want) } catch { /* ignore */ }\r\n return\r\n }\r\n if (restoring || want === null) {\r\n // No recorded choice yet: the built-in arriving is the Host's own\r\n // initial state. Recording it here would poison the restore below into\r\n // modern UI, so skip (the restore writes the intended skin itself).\r\n return\r\n }\r\n // A genuine built-in choice (e.g. user clicked Modern default): adopt it.\r\n writeLocalTheme(pref)\r\n writeHostTheme(pref)\r\n })\r\n\r\n ctx.effect(() => {\r\n const disposers = THEMES.map((definition) => ctx.theme.register(definition))\r\n return () => { for (const dispose of disposers) dispose() }\r\n }, 'dsh-pixel-ui: theme registration')\r\n\r\n // Restore the last choice. The per-origin mirror paints instantly; when it\r\n // is absent the injected / routed durable preference is the memory, so the\r\n // first setTheme waits for it instead of flashing the default skin.\r\n const applyTarget = (target) => {\r\n try { ctx.theme.setTheme(target) } catch { /* unknown id: keep current */ }\r\n syncScope()\r\n writeLocalTheme(target)\r\n return ctx.theme.getTheme().active.id === target\r\n }\r\n\r\n const restore = async () => {\r\n const local = readLocalTheme()\r\n if (local !== null) {\r\n applyTarget(local)\r\n const host = await readHostTheme()\r\n if (host !== null && host !== ctx.theme.getTheme().preference) applyTarget(host)\r\n return\r\n }\r\n const host = await readHostTheme()\r\n // A fresh install has no memory anywhere: pick the default skin, and retry\r\n // once because a Host that applies its own preference late would otherwise\r\n // leave the page in modern UI until the next interaction.\r\n if (!applyTarget(host ?? DEFAULT_SKIN)) {\r\n await new Promise((resolve) => { setTimeout(resolve, 120) })\r\n applyTarget(host ?? DEFAULT_SKIN)\r\n }\r\n }\r\n\r\n // `restoring` must drop the moment the intended skin is applied — not when\r\n // the durable read settles. A Host preference landing inside that window\r\n // (settings scope load, theme registration publish) would otherwise be\r\n // adopted as a \"real\" choice and silently drop the skin.\r\n const settle = () => { restoring = false }\r\n void restore().then(settle, settle)\r\n\r\n ctx.effect(() => ctx.locale.register(LOCALE_NS, MESSAGES), 'dsh-pixel-ui: settings row dictionaries')\r\n\r\n // Pixel theme row in the General settings section (alongside Appearance).\r\n const rowStore = createThemeRowStore()\r\n let bound = undefined\r\n const syncRow = (snapshot) => { bound?.sync(snapshot.preference, snapshot.revision) }\r\n ctx.on('theme/change', syncRow)\r\n ctx.slots.inject('settings.general.item', () => ctx.slots.register({\r\n name: 'settings.general.item',\r\n id: 'pixel-theme',\r\n order: 20,\r\n store: rowStore,\r\n locale: LOCALE_NS,\r\n inject: (actions) => {\r\n bound = actions\r\n // Re-sync from the getter so no event is lost between registration and\r\n // first render (the store's revision guard drops stale duplicates).\r\n syncRow(ctx.theme.getTheme())\r\n return { setTheme: (id) => { explicit = true; ctx.theme.setTheme(id) } }\r\n },\r\n }, ThemeRow))\r\n\r\n ctx.effect(() => {\r\n const style = document.createElement('style')\r\n style.dataset.plugin = 'dsh-pixel-ui'\r\n style.textContent = cssText\r\n document.head.appendChild(style)\r\n return () => {\r\n style.remove()\r\n document.documentElement.removeAttribute('data-pixel-ui')\r\n document.documentElement.removeAttribute('data-pixel-theme')\r\n }\r\n }, 'dsh-pixel-ui: stylesheet')\r\n}\r\n", "/* dsh-pixel-ui — 星露谷风像素皮肤(木屋/羊皮纸/暖阳/终端绿/全息/南瓜灯/便签本)\r\n *\r\n * 设计原则(v1.5.0 重写,依据是桌面端实测):\r\n *\r\n * 1. **完全平面(flat)**。用户 2026-10-01 的决定:不要立体效果。\r\n * 所以本表里**没有任何 box-shadow / text-shadow**——凸起、凹陷、浮雕、\r\n * 文字投影全部取消。像素的层次改由三样东西表达:\r\n * ① 整像素描边(2px,内容层 1px);\r\n * ② 平涂色块之间的一档明度差(主题色板自带);\r\n * ③ 2px 棋盘抖动(--px-dither)与手绘 SVG 像素图形。\r\n * 历史上用半透明 inset/outset 做 bevel,在 1.25 DPR 上会渲染成亚像素\r\n * 灰阶毛边,那正是用户最早报的「伪像素」。\r\n *\r\n * 2. **只做 token 表达不了的事**。颜色、背景、文字色交给主题 token;本表负责\r\n * 方角、2px 整像素描边、像素字体、位图缩放、像素光标、像素滚动条。\r\n *\r\n * 3. **选择器必须是「确定的类型」,不许再用 `[class*='card']` 这种子串扫射**。\r\n * v1.4 的 `[class*=...]` 规则命中了宿主大量它没打算命中的元素(`.xz4KEq_*`、\r\n * `.Dc7zOa_*`、`.Hqq-bq_*`、图标类…),结果整个界面被盖上一层厚重黑框,\r\n * 读起来像「处处凹陷的印章」——用户报的「伪像素 / 凹陷」就是它。\r\n * 这里只保留三类选择器:\r\n * a) 真正的 HTML 语义(button/input/table/pre/hr/…);\r\n * b) 稳定的 ARIA 与 data 属性([role=tab]、[aria-selected]、[data-theme]);\r\n * c) 本插件自己的类名(.px-*)与宿主主题 token(--dsw-*)。\r\n *\r\n * 4. **1px 细线只在内容层出现**(表格内线),装饰框一律 2px 起:\r\n * 像素风里 1px 装饰线在非整数缩放下必然糊成灰线。\r\n *\r\n * 5. **动效是像素动效(v1.6.0)**:只用 `steps()` 阶梯、逐帧闪烁和 sprite\r\n * 位移;不做平滑插值、不做 width/height 动画、不移动布局。所有动画都在\r\n * `prefers-reduced-motion: reduce` 下关掉。动效只表达「状态正在变化」\r\n * (思考中/运行中/选中/按下/提示进入),不拿来做装饰。\r\n *\r\n * 作用域 html[data-pixel-ui]:任一像素主题激活时生效,data-pixel-theme 区分配色;\r\n * data-pixel-asset 只在三套真素材主题(全息/南瓜灯/便签本)出现,驱动共用\r\n * 9-slice 层。前四套仍是零素材、零阴影的纯平面皮肤。\r\n */\r\n\r\n@font-face {\r\n font-family: 'Fusion Pixel 12';\r\n src: url('/dsh-pixel-ui/fonts/fusion-pixel-12px.woff2') format('woff2');\r\n font-weight: 400;\r\n font-style: normal;\r\n font-display: swap;\r\n}\r\n@font-face {\r\n font-family: 'Press Start 2P';\r\n src: url('/dsh-pixel-ui/fonts/PressStart2P-Regular.ttf') format('truetype');\r\n font-weight: 400;\r\n font-style: normal;\r\n font-display: swap;\r\n}\r\n\r\n/* ── 基础令牌(木屋=暗色基准,其余主题覆盖配色) ─────────────────── */\r\nhtml[data-pixel-ui] {\r\n /* 木色阶 */\r\n --px-wood-darkest: #1A0F06;\r\n --px-wood-dark: #2C1A0C;\r\n --px-wood-mid: #3A2515;\r\n --px-wood-warm: #4A3020;\r\n --px-wood-light: #6B4C2E;\r\n --px-wood-pale: #8B6B45;\r\n /* 金色阶 */\r\n --px-gold: #F4D03F;\r\n --px-gold-bright: #FFE066;\r\n --px-gold-dark: #C99A00;\r\n --px-gold-deep: #8B6B00;\r\n --px-parchment: #F5E6C8;\r\n --px-text-on-dark: #E8D5B0;\r\n --px-text-light: #AC8A63;\r\n /* 输入件 */\r\n --px-input-bg: #1A0F06;\r\n --px-input-text: #FFFDF5;\r\n --px-input-caret: #F4D03F;\r\n --px-input-ph: #B08A5E;\r\n /* 勾/点:暗色主题用深木色;纸面/便签本用预置的纸白版本(--px-*-light) */\r\n --px-check: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' shape-rendering='crispEdges'%3E%3Cg fill='%231A0F06'%3E%3Crect x='0' y='4' width='2' height='2'/%3E%3Crect x='0' y='6' width='2' height='2'/%3E%3Crect x='2' y='6' width='2' height='2'/%3E%3Crect x='2' y='8' width='2' height='2'/%3E%3Crect x='4' y='4' width='2' height='2'/%3E%3Crect x='4' y='6' width='2' height='2'/%3E%3Crect x='4' y='8' width='2' height='2'/%3E%3Crect x='4' y='10' width='2' height='2'/%3E%3Crect x='6' y='2' width='2' height='2'/%3E%3Crect x='6' y='4' width='2' height='2'/%3E%3Crect x='6' y='6' width='2' height='2'/%3E%3Crect x='6' y='8' width='2' height='2'/%3E%3Crect x='8' y='0' width='2' height='2'/%3E%3Crect x='8' y='2' width='2' height='2'/%3E%3Crect x='8' y='4' width='2' height='2'/%3E%3Crect x='8' y='6' width='2' height='2'/%3E%3Crect x='10' y='0' width='2' height='2'/%3E%3Crect x='10' y='2' width='2' height='2'/%3E%3Crect x='10' y='4' width='2' height='2'/%3E%3C/g%3E%3C/svg%3E\");\r\n --px-radio: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' shape-rendering='crispEdges'%3E%3Crect x='0' y='0' width='8' height='8' fill='%231A0F06'/%3E%3C/svg%3E\");\r\n --px-check-light: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' shape-rendering='crispEdges'%3E%3Cg fill='%23FFFDF5'%3E%3Crect x='0' y='4' width='2' height='2'/%3E%3Crect x='0' y='6' width='2' height='2'/%3E%3Crect x='2' y='6' width='2' height='2'/%3E%3Crect x='2' y='8' width='2' height='2'/%3E%3Crect x='4' y='4' width='2' height='2'/%3E%3Crect x='4' y='6' width='2' height='2'/%3E%3Crect x='4' y='8' width='2' height='2'/%3E%3Crect x='4' y='10' width='2' height='2'/%3E%3Crect x='6' y='2' width='2' height='2'/%3E%3Crect x='6' y='4' width='2' height='2'/%3E%3Crect x='6' y='6' width='2' height='2'/%3E%3Crect x='6' y='8' width='2' height='2'/%3E%3Crect x='8' y='0' width='2' height='2'/%3E%3Crect x='8' y='2' width='2' height='2'/%3E%3Crect x='8' y='4' width='2' height='2'/%3E%3Crect x='8' y='6' width='2' height='2'/%3E%3Crect x='10' y='0' width='2' height='2'/%3E%3Crect x='10' y='2' width='2' height='2'/%3E%3Crect x='10' y='4' width='2' height='2'/%3E%3C/g%3E%3C/svg%3E\");\r\n --px-radio-light: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' shape-rendering='crispEdges'%3E%3Crect x='0' y='0' width='8' height='8' fill='%23FFFDF5'/%3E%3C/svg%3E\");\r\n /* 代码 */\r\n --px-code-bg: #241408;\r\n --px-code-ink: #FFE066;\r\n /* 提示框 */\r\n --px-tooltip-bg: #1A0F06;\r\n /* 强调面 */\r\n --px-accent-bg: #F4D03F;\r\n --px-accent-ink: #1A0F06;\r\n --px-ink-on-mid: #F5E6C8;\r\n /* 描边色:平面皮肤唯一的「线」色,2px 整像素 */\r\n --px-line: #140B04;\r\n /* 纹理:2px 棋盘抖动 */\r\n --px-dither: #241408;\r\n /* 暗角(CRT 只保留暗角,扫描线在非整数 DPR 上必糊) */\r\n --px-vignette: rgba(0, 0, 0, 0.2);\r\n /* 内容列宽:宿主把 --dsh-conversation-column-width 写死成 0,\r\n * clamp(680px, 0 * .64, 920px) 恒取 680px 下限 → 宽屏上正文只占中间一条\r\n * (踩坑 #7)。这里补上那个变量应有的值:正文随视口撑开。 */\r\n --px-chat-width: clamp(680px, calc(64vw - 140px), 1200px);\r\n /* 侧栏 / 顶栏底 */\r\n --px-sidebar-fill: #241408;\r\n --px-topbar-fill: #2C1A0C;\r\n /* 字体栈 */\r\n --px-font: 'Fusion Pixel 12', 'Press Start 2P', monospace;\r\n --px-mono: 'Cascadia Code', 'Consolas', 'Courier New', monospace;\r\n /* 动效:像素动画只走阶梯,不使用平滑曲线(v1.6.0) */\r\n --px-t-fast: 80ms;\r\n --px-t-mid: 140ms;\r\n --px-t-slow: 220ms;\r\n --px-step-2: steps(2, end);\r\n --px-step-4: steps(4, end);\r\n --px-step-8: steps(8, end);\r\n /* 主按钮悬停底色;与 --px-accent-bg / --px-accent-ink 配对做对比度审计 */\r\n --px-accent-hover: #FFE066;\r\n}\r\n\r\n/* ── 四主题配色(Agent Xi 同款) ─────────────────────────────────── */\r\nhtml[data-pixel-theme='pixel-paper'] {\r\n --px-wood-darkest: #F0E8D8;\r\n --px-wood-dark: #E8DCC8;\r\n --px-wood-mid: #DDD0B8;\r\n --px-wood-warm: #D4C4A8;\r\n --px-wood-light: #B8A080;\r\n --px-wood-pale: #9B8B6B;\r\n --px-gold: #A07000;\r\n --px-gold-bright: #6B4F00;\r\n --px-gold-dark: #8A6400;\r\n --px-gold-deep: #7A5A00;\r\n --px-parchment: #FFFDF5;\r\n --px-text-on-dark: #3A2A10;\r\n --px-text-light: #6B5020;\r\n --px-input-bg: #FFFDF5;\r\n --px-input-text: #3A2A10;\r\n --px-input-caret: #8A6400;\r\n --px-input-ph: #8B7040;\r\n /* 深金底上的深木色勾看不清,纸面主题改成纸白勾/点 */\r\n --px-check: var(--px-check-light);\r\n --px-radio: var(--px-radio-light);\r\n --px-code-bg: #E0D4BC;\r\n --px-code-ink: #5C4400;\r\n --px-tooltip-bg: #2A1B08;\r\n --px-accent-bg: #7A5A00;\r\n --px-accent-ink: #FFFDF5;\r\n --px-ink-on-mid: #3A2A10;\r\n --px-line: #8B7040;\r\n --px-dither: #D8C9AC;\r\n --px-vignette: rgba(0, 0, 0, 0.07);\r\n --px-sidebar-fill: #E8DCC8;\r\n --px-topbar-fill: #E8DCC8;\r\n --px-accent-hover: #5C4400;\r\n}\r\nhtml[data-pixel-theme='pixel-warm'] {\r\n --px-wood-darkest: #1E0E04;\r\n --px-wood-dark: #34180A;\r\n --px-wood-mid: #4A2210;\r\n --px-wood-warm: #5C2E16;\r\n --px-wood-light: #8B4A28;\r\n --px-wood-pale: #A86B40;\r\n --px-gold: #FF8C42;\r\n --px-gold-bright: #FFA64D;\r\n --px-gold-dark: #D96E30;\r\n --px-gold-deep: #A05020;\r\n --px-parchment: #FFF0E0;\r\n --px-text-on-dark: #F0C8A0;\r\n --px-text-light: #C08A5C;\r\n --px-input-bg: #1E0E04;\r\n --px-input-text: #FFFBF5;\r\n --px-input-caret: #FF8C42;\r\n --px-input-ph: #C08A5C;\r\n --px-code-bg: #2A1308;\r\n --px-code-ink: #FFA64D;\r\n --px-tooltip-bg: #1E0E04;\r\n --px-accent-bg: #FF8C42;\r\n --px-accent-ink: #1E0E04;\r\n --px-ink-on-mid: #FFF0E0;\r\n --px-line: #150801;\r\n --px-dither: #2A1308;\r\n --px-sidebar-fill: #2A1308;\r\n --px-topbar-fill: #34180A;\r\n --px-accent-hover: #FFA64D;\r\n}\r\nhtml[data-pixel-theme='pixel-retro'] {\r\n --px-wood-darkest: #0A0E0A;\r\n --px-wood-dark: #0E140E;\r\n --px-wood-mid: #121A12;\r\n --px-wood-warm: #162016;\r\n --px-wood-light: #2A402A;\r\n --px-wood-pale: #3A5A3A;\r\n --px-gold: #33FF33;\r\n --px-gold-bright: #66FF66;\r\n --px-gold-dark: #00CC00;\r\n --px-gold-deep: #009900;\r\n --px-parchment: #B8F0B8;\r\n --px-text-on-dark: #33FF33;\r\n --px-text-light: #22AA22;\r\n --px-input-bg: #0A0E0A;\r\n --px-input-text: #33FF33;\r\n --px-input-caret: #33FF33;\r\n --px-input-ph: #22AA22;\r\n --px-code-bg: #0E140E;\r\n --px-code-ink: #66FF66;\r\n --px-tooltip-bg: #0A0E0A;\r\n --px-accent-bg: #33FF33;\r\n --px-accent-ink: #0A0E0A;\r\n --px-ink-on-mid: #B8F0B8;\r\n --px-line: #040704;\r\n --px-dither: #101A10;\r\n --px-sidebar-fill: #0C100C;\r\n --px-topbar-fill: #0E140E;\r\n --px-accent-hover: #66FF66;\r\n}\r\n\r\n/* ── 内容列宽(桌面端「一半一半」的修正,踩坑 #7) ──────────────────\r\n * 宿主只在样式表里声明 `--dsh-chat-content-width: var(--dsh-chat-user-width,\r\n * clamp(680px, calc(var(--dsh-conversation-column-width, 0px) * .64), 920px))`,\r\n * 而 `--dsh-conversation-column-width` 全仓无人赋值 → clamp 恒取 680px。\r\n * 在根作用域用 !important 把两个变量补上(宿主会把 user-width 以内联样式写在\r\n * 容器上,只有 !important 能压过内联)。 */\r\nhtml[data-pixel-ui] {\r\n --dsh-conversation-column-width: calc(100vw - 280px) !important;\r\n --dsh-chat-user-width: var(--px-chat-width) !important;\r\n --dsh-chat-content-width: var(--px-chat-width) !important;\r\n}\r\n/* 兜底:万一宿主把列宽写死在自己的样式层,这里同权重覆盖。 */\r\nhtml[data-pixel-ui] [class*='xz4KEq_column'] {\r\n max-width: var(--px-chat-width);\r\n}\r\n\r\n/* ── 全局:方角、禁次像素平滑、位图缩放 ─────────────────────────── */\r\nhtml[data-pixel-ui] * {\r\n border-radius: 0 !important;\r\n}\r\nhtml[data-pixel-ui] body {\r\n -webkit-font-smoothing: none;\r\n -moz-osx-font-smoothing: grayscale;\r\n text-rendering: geometricPrecision;\r\n font-family: var(--px-font) !important;\r\n /* 0.01em 会把字形推到半像素 → 灰边;像素字体必须整像素落位 */\r\n letter-spacing: 0;\r\n}\r\nhtml[data-pixel-ui] img,\r\nhtml[data-pixel-ui] canvas,\r\nhtml[data-pixel-ui] video {\r\n image-rendering: pixelated;\r\n}\r\nhtml[data-pixel-ui] ::selection {\r\n background: var(--px-accent-bg);\r\n color: var(--px-accent-ink);\r\n}\r\nhtml[data-pixel-ui] :focus-visible {\r\n outline: 2px solid var(--px-gold) !important;\r\n outline-offset: 1px;\r\n}\r\nhtml[data-pixel-ui] {\r\n accent-color: var(--px-gold);\r\n}\r\n\r\n/* 像素动效:闪烁 / 思考条 / 提示进入 / 运行中。全部走 steps 或离散帧。 */\r\n@keyframes px-blink {\r\n 0%, 55% { opacity: 1; }\r\n 56%, 100% { opacity: 0.35; }\r\n}\r\n@keyframes px-toast-in {\r\n from { opacity: 0; transform: translateY(8px); }\r\n to { opacity: 1; transform: translateY(0); }\r\n}\r\n@keyframes px-toast-out {\r\n from { opacity: 1; transform: translateY(0); }\r\n to { opacity: 0; transform: translateY(4px); }\r\n}\r\n@keyframes px-running {\r\n 0%, 100% { border-left-color: var(--px-gold); }\r\n 50% { border-left-color: var(--px-wood-light); }\r\n}\r\n\r\n/* 暗角:只保留径向暗角(扫描线在 1.25 DPR 上必糊成灰膜)。 */\r\nhtml[data-pixel-ui] body::after {\r\n content: \"\";\r\n position: fixed;\r\n inset: 0;\r\n z-index: 2147483647;\r\n pointer-events: none;\r\n background: radial-gradient(ellipse at center, transparent 70%, var(--px-vignette) 100%);\r\n}\r\n@media (prefers-reduced-motion: reduce) {\r\n html[data-pixel-ui] * {\r\n transition: none !important;\r\n animation: none !important;\r\n }\r\n html[data-pixel-ui] *::before,\r\n html[data-pixel-ui] *::after {\r\n transition: none !important;\r\n animation: none !important;\r\n }\r\n}\r\n\r\n/* ── 像素滚动条:方、10px、木色 ─────────────────────────────────── */\r\nhtml[data-pixel-ui] {\r\n scrollbar-color: var(--px-wood-light) var(--px-wood-darkest);\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar {\r\n width: 8px;\r\n height: 8px;\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar-track {\r\n background: var(--px-wood-darkest);\r\n border-left: 2px solid var(--px-wood-dark);\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar-thumb {\r\n background-color: var(--px-wood-light);\r\n border: 2px solid var(--px-wood-darkest);\r\n /* 4×2 的握把,比整条渐变更像像素滚动条 */\r\n background-image: linear-gradient(var(--px-wood-pale), var(--px-wood-pale));\r\n background-size: 4px 2px;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar-thumb:hover {\r\n background-color: var(--px-wood-pale);\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar-thumb:active {\r\n background-color: var(--px-gold-dark);\r\n}\r\nhtml[data-pixel-ui] ::-webkit-scrollbar-corner {\r\n background: var(--px-wood-darkest);\r\n}\r\n\r\n/* ── 排版:装饰性文字走像素字体;正文/代码走 mono ────────────────── */\r\nhtml[data-pixel-ui] h1,\r\nhtml[data-pixel-ui] h2,\r\nhtml[data-pixel-ui] h3,\r\nhtml[data-pixel-ui] h4,\r\nhtml[data-pixel-ui] summary,\r\nhtml[data-pixel-ui] button,\r\nhtml[data-pixel-ui] label,\r\nhtml[data-pixel-ui] legend,\r\nhtml[data-pixel-ui] [role='tab'],\r\nhtml[data-pixel-ui] [role='menuitem'],\r\nhtml[data-pixel-ui] [role='tooltip'],\r\nhtml[data-pixel-ui] [role='switch'] {\r\n font-family: var(--px-font) !important;\r\n font-variant-ligatures: none;\r\n}\r\nhtml[data-pixel-ui] h1,\r\nhtml[data-pixel-ui] h2,\r\nhtml[data-pixel-ui] h3 {\r\n color: var(--px-gold-bright) !important;\r\n}\r\n/* 正文/代码层:mono、不加字阴影、长 token 允许断行(像素字体更宽) */\r\nhtml[data-pixel-ui] pre,\r\nhtml[data-pixel-ui] code,\r\nhtml[data-pixel-ui] kbd,\r\nhtml[data-pixel-ui] textarea,\r\nhtml[data-pixel-ui] input,\r\nhtml[data-pixel-ui] p,\r\nhtml[data-pixel-ui] li,\r\nhtml[data-pixel-ui] td,\r\nhtml[data-pixel-ui] th {\r\n font-family: var(--px-mono) !important;\r\n}\r\nhtml[data-pixel-ui] p,\r\nhtml[data-pixel-ui] li {\r\n overflow-wrap: anywhere;\r\n}\r\nhtml[data-pixel-ui] li::marker {\r\n color: var(--px-gold);\r\n}\r\nhtml[data-pixel-ui] kbd {\r\n color: var(--px-text-light) !important;\r\n font-family: var(--px-font) !important;\r\n font-size: 11px;\r\n font-variant-ligatures: none;\r\n}\r\nhtml[data-pixel-ui] mark {\r\n background: var(--px-gold) !important;\r\n color: var(--px-accent-ink) !important;\r\n}\r\n\r\n/* ── 按钮:默认只继承宿主的底与形(宿主大量图标按钮本来就是透明的),\r\n * 只把方角、像素字与「按下去掉一档」的反馈补齐;实心块只在悬停/选中时出现。\r\n * v1.4 给**所有** button 套 2px 黑框 + 内阴影,图标按钮全变成厚盒子,\r\n * 这是用户报「处处凹陷」的主因之一。 ─────────────────────────────── */\r\nhtml[data-pixel-ui] button {\r\n font-size: 12px;\r\n letter-spacing: 0;\r\n border: none !important;\r\n font-variant-ligatures: none;\r\n transition:\r\n background-color var(--px-t-fast) var(--px-step-2),\r\n color var(--px-t-fast) var(--px-step-2),\r\n transform var(--px-t-fast) var(--px-step-2);\r\n}\r\n/* 主按钮/危险按钮的底色由宿主 token 负责,这里不能再把它们刷成木色,\r\n * 否则 hover 时深字落在深底上(v1.5.0 的 generic hover 就踩过这个)。\r\n * 只给「普通按钮」用木色 hover。用 wood-mid 而不是 wood-dark:\r\n * 纸面主题的 wood-dark 和 sidebar 同色,hover 会完全看不见。 */\r\nhtml[data-pixel-ui] button:not(:disabled):not([class*='primary']):not([class*='Primary']):not([class*='danger']):not([class*='Danger']):hover {\r\n background-color: var(--px-wood-mid) !important;\r\n}\r\n/* 主按钮:实心块 + 2px 描边;hover 由 --dsw-alias-button-primary-hover 控制,\r\n * dither 是叠加的 2px 棋盘(不改变底色)。 */\r\nhtml[data-pixel-ui] button[class*='primary']:hover:not(:disabled),\r\nhtml[data-pixel-ui] button[class*='Primary']:hover:not(:disabled) {\r\n background-image: repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-accent-ink) 10%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 4px 4px !important;\r\n}\r\n/* 按下去只做 1px 的整像素位移,不改布局尺寸;松开即回。 */\r\nhtml[data-pixel-ui] button:not(:disabled):active {\r\n transform: translate(1px, 1px);\r\n transition-duration: 0s;\r\n}\r\n/* 已经按下的切换按钮用木色底 + 金色字,和普通 hover 区分开。\r\n * 设置页的像素主题按钮自己管理选中态,不能被这条刷掉。 */\r\nhtml[data-pixel-ui] button[aria-pressed='true']:not(.px-theme-btn) {\r\n background-color: var(--px-wood-mid) !important;\r\n color: var(--px-gold-bright) !important;\r\n}\r\n/* 宿主的 primary token 已能上色;这里再兜一层,保证 token 缺失/第三方按钮\r\n * 也跟随主题,不把宿主默认蓝带进木屋/羊皮纸。 */\r\nhtml[data-pixel-ui] button[class*='primary'],\r\nhtml[data-pixel-ui] button[class*='Primary'] {\r\n background-color: var(--px-accent-bg) !important;\r\n background-image: none !important;\r\n color: var(--px-accent-ink) !important;\r\n border: 2px solid var(--px-line) !important;\r\n}\r\nhtml[data-pixel-ui] button[class*='primary']:hover:not(:disabled),\r\nhtml[data-pixel-ui] button[class*='Primary']:hover:not(:disabled) {\r\n background-color: var(--px-accent-hover) !important;\r\n}\r\nhtml[data-pixel-ui] button[class*='danger'],\r\nhtml[data-pixel-ui] button[class*='Danger'] {\r\n border: 2px solid var(--px-line) !important;\r\n}\r\nhtml[data-pixel-ui] button:disabled {\r\n opacity: 0.55;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* ── 页签(对话/轨迹/记忆):文字 + 金下沿,**不加边框**\r\n * v1.4 给页签套了 2px 黑框,整条读起来像凹陷的输入框(用户报「凹陷了」)。\r\n * 平面皮肤里「选中」只用颜色 + 一条整像素下边线表达,不做凹凸。 */\r\nhtml[data-pixel-ui] [role='tab'] {\r\n position: relative;\r\n font-size: 13px;\r\n font-variant-ligatures: none;\r\n border: none !important;\r\n border-bottom: 3px solid transparent !important;\r\n background-color: transparent !important;\r\n color: var(--px-text-light) !important;\r\n transition: color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] [role='tab']::after {\r\n content: \"\";\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n bottom: -3px;\r\n height: 2px;\r\n background: var(--px-gold);\r\n pointer-events: none;\r\n transform: scaleX(0);\r\n transform-origin: left center;\r\n transition:\r\n transform var(--px-t-mid) var(--px-step-4),\r\n height var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] [role='tab']:hover {\r\n color: var(--px-text-on-dark) !important;\r\n}\r\nhtml[data-pixel-ui] [role='tab']:hover::after {\r\n transform: scaleX(1);\r\n}\r\nhtml[data-pixel-ui] [role='tab'][aria-selected='true'] {\r\n color: var(--px-gold-bright) !important;\r\n background-color: transparent !important;\r\n border-bottom-color: transparent !important;\r\n}\r\nhtml[data-pixel-ui] [role='tab'][aria-selected='true']::after {\r\n height: 3px;\r\n transform: scaleX(1);\r\n}\r\n\r\n/* ── 输入件:黑木底 + 羊皮纸字 + 金框,聚焦金环 ───────────────────\r\n * 只给「真正的输入面」上底和框,`select` 与只读输入保留宿主的形,\r\n * 否则设置页里成排的选择器全变成黑盒子。 */\r\nhtml[data-pixel-ui] input:not([type='checkbox']):not([type='radio']),\r\nhtml[data-pixel-ui] textarea,\r\nhtml[data-pixel-ui] [contenteditable='true'] {\r\n font-size: 12px;\r\n letter-spacing: 0;\r\n font-variant-ligatures: none;\r\n color: var(--px-input-text) !important;\r\n -webkit-text-fill-color: var(--px-input-text) !important;\r\n caret-color: var(--px-input-caret) !important;\r\n caret-shape: block;\r\n background-color: var(--px-input-bg) !important;\r\n border: 2px solid var(--px-gold-deep) !important;\r\n transition: border-color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] input:not([type='checkbox']):not([type='radio']):hover:not(:focus),\r\nhtml[data-pixel-ui] textarea:hover:not(:focus),\r\nhtml[data-pixel-ui] [contenteditable='true']:hover:not(:focus) {\r\n border-color: var(--px-gold-dark) !important;\r\n}\r\nhtml[data-pixel-ui] input:focus,\r\nhtml[data-pixel-ui] textarea:focus,\r\nhtml[data-pixel-ui] [contenteditable='true']:focus {\r\n border-color: var(--px-gold) !important;\r\n outline: none !important;\r\n}\r\nhtml[data-pixel-ui] select {\r\n color: var(--px-input-text) !important;\r\n background-color: transparent !important;\r\n border: 2px solid var(--px-gold-deep) !important;\r\n transition: border-color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] select:hover:not(:focus) {\r\n border-color: var(--px-gold-dark) !important;\r\n}\r\nhtml[data-pixel-ui] select:focus {\r\n border-color: var(--px-gold) !important;\r\n outline: none !important;\r\n}\r\nhtml[data-pixel-ui] input::placeholder,\r\nhtml[data-pixel-ui] textarea::placeholder {\r\n color: var(--px-input-ph) !important;\r\n -webkit-text-fill-color: var(--px-input-ph) !important;\r\n opacity: 1;\r\n}\r\nhtml[data-pixel-ui] [contenteditable='true']:empty::before {\r\n color: var(--px-input-ph) !important;\r\n -webkit-text-fill-color: var(--px-input-ph) !important;\r\n}\r\n\r\n/* ── 选择件:复选框 / 单选 / 开关 / 滑块 ───────────────────────── */\r\nhtml[data-pixel-ui] input[type='checkbox'],\r\nhtml[data-pixel-ui] input[type='radio'] {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n width: 14px;\r\n height: 14px;\r\n padding: 0;\r\n flex-shrink: 0;\r\n background-color: var(--px-input-bg) !important;\r\n border: 2px solid var(--px-line) !important;\r\n transition:\r\n background-color var(--px-t-fast) var(--px-step-2),\r\n border-color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] input[type='checkbox']:not(:checked):hover,\r\nhtml[data-pixel-ui] input[type='radio']:not(:checked):hover {\r\n border-color: var(--px-gold-dark) !important;\r\n}\r\nhtml[data-pixel-ui] input[type='checkbox']:checked {\r\n background-color: var(--px-gold) !important;\r\n /* 12×12 手绘像素对勾(2px 阶梯),颜色由 --px-check 按主题切换 */\r\n background-image: var(--px-check) !important;\r\n background-repeat: no-repeat !important;\r\n background-position: 3px 1px !important;\r\n border: 2px solid var(--px-line) !important;\r\n}\r\nhtml[data-pixel-ui] input[type='radio']:checked {\r\n background-color: var(--px-gold) !important;\r\n /* 平色时代没有 inset 灰阶可用:8×8 手绘像素方点,颜色由 --px-radio 切换 */\r\n background-image: var(--px-radio) !important;\r\n background-size: 6px 6px !important;\r\n background-position: 2px 2px !important;\r\n background-repeat: no-repeat !important;\r\n}\r\nhtml[data-pixel-ui] select {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n padding-right: 28px !important;\r\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8' shape-rendering='crispEdges'%3E%3Crect x='0' y='0' width='8' height='2'/%3E%3Crect x='1' y='2' width='6' height='2'/%3E%3Crect x='2' y='4' width='4' height='2'/%3E%3Crect x='3' y='6' width='2' height='2'/%3E%3C/svg%3E\") !important;\r\n background-repeat: no-repeat !important;\r\n background-position: right 8px center !important;\r\n}\r\nhtml[data-pixel-ui] select option {\r\n background-color: var(--px-input-bg);\r\n color: var(--px-input-text);\r\n}\r\nhtml[data-pixel-ui] [role='switch'] {\r\n border: 2px solid var(--px-line) !important;\r\n background-color: var(--px-wood-dark) !important;\r\n transition: border-color var(--px-t-fast) var(--px-step-2), background-color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] [role='switch']:hover {\r\n border-color: var(--px-gold-dark) !important;\r\n}\r\nhtml[data-pixel-ui] input[type='range'] {\r\n appearance: none;\r\n -webkit-appearance: none;\r\n height: 14px;\r\n padding: 0;\r\n border: none !important;\r\n background: transparent !important;\r\n}\r\nhtml[data-pixel-ui] input[type='range']::-webkit-slider-runnable-track {\r\n height: 8px;\r\n border: 2px solid var(--px-line);\r\n background-color: var(--px-wood-mid);\r\n}\r\nhtml[data-pixel-ui] input[type='range']::-webkit-slider-thumb {\r\n -webkit-appearance: none;\r\n width: 12px;\r\n height: 14px;\r\n margin-top: -5px;\r\n background-color: var(--px-gold);\r\n border: 2px solid var(--px-line);\r\n transition: background-color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] input[type='range']::-webkit-slider-thumb:hover {\r\n background-color: var(--px-gold-bright);\r\n}\r\nhtml[data-pixel-ui] input[type='range']::-moz-range-track {\r\n height: 8px;\r\n border: 2px solid var(--px-line);\r\n background: var(--px-wood-mid);\r\n}\r\nhtml[data-pixel-ui] input[type='range']::-moz-range-thumb {\r\n width: 12px;\r\n height: 14px;\r\n background-color: var(--px-gold);\r\n border: 2px solid var(--px-line);\r\n border-radius: 0;\r\n}\r\n\r\n/* ── 内容层:代码块 / 行内代码 / 引用 / 表格 / 分隔线 ─────────────── */\r\nhtml[data-pixel-ui] pre {\r\n background: var(--px-code-bg) !important;\r\n color: var(--px-text-on-dark) !important;\r\n border: 2px solid var(--px-wood-light) !important;\r\n border-left: 4px solid var(--px-gold-deep) !important;\r\n}\r\n/* 代码块顶栏:像终端窗口的 title bar,2px 底线 + 左侧金色方块。 */\r\nhtml[data-pixel-ui] [data-code-block-banner] {\r\n background-color: var(--px-wood-mid) !important;\r\n color: var(--px-text-light) !important;\r\n border-bottom: 2px solid var(--px-line) !important;\r\n border-left: 4px solid var(--px-gold) !important;\r\n font-family: var(--px-font) !important;\r\n font-size: 11px;\r\n letter-spacing: 0;\r\n font-variant-ligatures: none;\r\n}\r\nhtml[data-pixel-ui] [data-code-block-banner] button {\r\n background: transparent !important;\r\n color: var(--px-text-on-dark) !important;\r\n border: none !important;\r\n padding: 0 4px;\r\n}\r\nhtml[data-pixel-ui] code {\r\n background: var(--px-code-bg) !important;\r\n color: var(--px-code-ink) !important;\r\n border: none !important;\r\n padding: 0 3px;\r\n}\r\nhtml[data-pixel-ui] pre code {\r\n background: transparent !important;\r\n color: inherit !important;\r\n padding: 0;\r\n}\r\nhtml[data-pixel-ui] blockquote {\r\n border: 2px solid var(--px-wood-light) !important;\r\n border-left: 4px solid var(--px-gold) !important;\r\n background-color: var(--px-wood-dark) !important;\r\n background-image: repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold) 5%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 4px 4px !important;\r\n color: var(--px-text-on-dark) !important;\r\n padding: 6px 10px;\r\n}\r\nhtml[data-pixel-ui] hr {\r\n border: none !important;\r\n height: 2px;\r\n background: repeating-linear-gradient(\r\n 90deg,\r\n var(--px-wood-light) 0 2px,\r\n transparent 2px 4px\r\n ) !important;\r\n}\r\nhtml[data-pixel-ui] table {\r\n border: 2px solid var(--px-wood-warm) !important;\r\n border-collapse: collapse;\r\n}\r\nhtml[data-pixel-ui] tbody tr:nth-child(even) td {\r\n background-color: color-mix(in srgb, var(--px-wood-mid) 32%, transparent) !important;\r\n}\r\nhtml[data-pixel-ui] tbody tr:hover td {\r\n background-color: var(--px-wood-mid) !important;\r\n}\r\nhtml[data-pixel-ui] th {\r\n background-color: var(--px-wood-warm) !important;\r\n color: var(--px-ink-on-mid) !important;\r\n font-family: var(--px-font) !important;\r\n font-size: 12px;\r\n border: 1px solid var(--px-wood-light) !important;\r\n}\r\nhtml[data-pixel-ui] td {\r\n border: 1px solid var(--px-wood-light) !important;\r\n}\r\nhtml[data-pixel-ui] a {\r\n color: var(--px-gold-bright) !important;\r\n text-decoration-color: var(--px-gold-dark);\r\n text-decoration-thickness: 2px;\r\n text-underline-offset: 3px;\r\n transition: color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] a:hover {\r\n color: var(--px-gold) !important;\r\n}\r\nhtml[data-pixel-ui] summary {\r\n cursor: pointer;\r\n color: var(--px-gold-bright) !important;\r\n transition: color var(--px-t-fast) var(--px-step-2);\r\n}\r\nhtml[data-pixel-ui] summary:hover {\r\n color: var(--px-gold) !important;\r\n}\r\n\r\n/* ── 工具提示 / 菜单 / 状态条 ──────────────────────────────────── */\r\nhtml[data-pixel-ui] [role='tooltip'] {\r\n font-size: 11px;\r\n line-height: 1.6;\r\n color: var(--px-parchment) !important;\r\n background: var(--px-tooltip-bg) !important;\r\n border: 2px solid var(--px-gold-deep) !important;\r\n background-image:\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n linear-gradient(var(--px-gold), var(--px-gold)) !important;\r\n background-size: 6px 2px, 2px 6px !important;\r\n background-position: 0 0, 0 0 !important;\r\n background-repeat: no-repeat !important;\r\n}\r\nhtml[data-pixel-ui] [data-menu-material],\r\nhtml[data-pixel-ui] [role='menu'] {\r\n border: 2px solid var(--px-line) !important;\r\n /* 2px 描边不能再把固定宽度的菜单撑出 4px 横向滚动条 */\r\n box-sizing: border-box !important;\r\n overflow-x: hidden !important;\r\n}\r\n/* 菜单的滚动容器在 role=menu 的内部(宿主 _viewport_),只给外层\r\n * overflow-x:hidden 拦不住内部那一条;菜单不需要横向滚动,一律 clip。 */\r\nhtml[data-pixel-ui] [role='menu'] *,\r\nhtml[data-pixel-ui] [data-menu-material] * {\r\n overflow-x: clip !important;\r\n}\r\nhtml[data-pixel-ui] [role='dialog'] {\r\n /* dialog 默认 content-box 时,2px 边框同样会撑出内部横向滚动条 */\r\n box-sizing: border-box !important;\r\n}\r\nhtml[data-pixel-ui] [role='dialog'] nav,\r\nhtml[data-pixel-ui] [role='dialog'] [role='tablist'] {\r\n overflow-x: hidden !important;\r\n}\r\n/* 设置页左侧导航是“列 flex + 按钮”的结构:按钮的 min-width:auto 会把\r\n * 像素字体的 min-content 宽度顶出去,navList 就会出现横向滚动条。 */\r\nhtml[data-pixel-ui] [role='dialog'] button {\r\n min-width: 0;\r\n}\r\n/* 设置对话框的底色正好是 wood-mid;通用 hover 也是 wood-mid,等于没变。\r\n * 对话框内普通按钮改用 wood-warm,至少和面板底色差一档明度。 */\r\nhtml[data-pixel-ui] [role='dialog'] button:not(:disabled):not([class*='primary']):not([class*='Primary']):not([class*='danger']):not([class*='Danger']):hover {\r\n background-color: var(--px-wood-warm) !important;\r\n}\r\n/* 设置页左导航是 div.navList(直接子级全是 button,其中一个是 aria-current),\r\n * overflow-y:auto 会把 overflow-x 也算成 auto;内容只要宽 1px 就冒横向滚动条。 */\r\nhtml[data-pixel-ui] [role='dialog'] div:has(> button[aria-current]) {\r\n overflow-x: hidden !important;\r\n}\r\nhtml[data-pixel-ui] [role='menuitem']:hover,\r\nhtml[data-pixel-ui] [role='option']:hover,\r\nhtml[data-pixel-ui] [role='treeitem']:hover {\r\n background-color: var(--px-wood-mid) !important;\r\n}\r\n/* 菜单项即使不在 [role=menu] 外壳里(宿主 portal/自定义菜单)也要有\r\n * 可见的文字色变化 + 金色左条,不能只赌底色和菜单面不同。 */\r\nhtml[data-pixel-ui] [role='menuitem']:hover {\r\n color: var(--px-gold-bright) !important;\r\n background-image:\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold) 8%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 3px 100%, 4px 4px !important;\r\n background-position: 0 0, 0 0 !important;\r\n background-repeat: no-repeat, repeat !important;\r\n}\r\nhtml[data-pixel-ui] [role='option']:hover {\r\n color: var(--px-gold-bright) !important;\r\n}\r\n/* 菜单项(设置/意见反馈/退出登录…)在宿主里是 button[role=menuitem],\r\n * 菜单表面本身可能是 wood-mid 或宿主灰;只换底色仍然可能看不见。\r\n * 这里固定叠 3px 金色左条 + 2px dither,并把文字提到 gold-bright。 */\r\nhtml[data-pixel-ui] [role='menu'] [role='menuitem']:hover,\r\nhtml[data-pixel-ui] [data-menu-material] [role='menuitem']:hover,\r\nhtml[data-pixel-ui] [role='menu'] button:hover,\r\nhtml[data-pixel-ui] [data-menu-material] button:hover {\r\n background-color: var(--px-wood-mid) !important;\r\n color: var(--px-gold-bright) !important;\r\n background-image:\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold) 8%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 3px 100%, 4px 4px !important;\r\n background-position: 0 0, 0 0 !important;\r\n background-repeat: no-repeat, repeat !important;\r\n}\r\nhtml[data-pixel-ui] [role='menuitem'] {\r\n transition:\r\n background-color var(--px-t-fast) var(--px-step-2),\r\n color var(--px-t-fast) var(--px-step-2);\r\n}\r\n/* 危险菜单项(退出登录等)保留红色语义,不跟着菜单 hover 变金。 */\r\nhtml[data-pixel-ui] button[role='menuitem'][class*='danger']:hover {\r\n color: var(--px-state-error, var(--dsw-alias-state-error-primary, #E74C3C)) !important;\r\n background-image: linear-gradient(\r\n var(--px-state-error, var(--dsw-alias-state-error-primary, #E74C3C)),\r\n var(--px-state-error, var(--dsw-alias-state-error-primary, #E74C3C))\r\n ) !important;\r\n background-size: 3px 100% !important;\r\n background-repeat: no-repeat !important;\r\n}\r\nhtml[data-pixel-ui] [role='treeitem'][aria-selected='true'] {\r\n background-color: var(--px-wood-dark) !important;\r\n background-image: linear-gradient(var(--px-gold), var(--px-gold));\r\n background-repeat: no-repeat;\r\n background-position: 0 0;\r\n background-size: 2px 100%;\r\n color: var(--px-gold-bright) !important;\r\n}\r\n/* 已选中的会话行也要有 hover 反馈:宿主把 selected 和 hover 写成同一个背景,\r\n * 我们的 selected 规则又在 hover 之后,不补这一条就会出现「悬停完全没反应」。 */\r\nhtml[data-pixel-ui] [role='treeitem'][aria-selected='true']:hover {\r\n background-color: var(--px-wood-mid) !important;\r\n}\r\n/* 未选中的会话/项目行:hover 时补 2px 金色左侧条,别只靠一档底色。 */\r\nhtml[data-pixel-ui] [role='treeitem']:hover:not([aria-selected='true']) {\r\n background-image: linear-gradient(var(--px-gold-deep), var(--px-gold-deep));\r\n background-repeat: no-repeat;\r\n background-position: 0 0;\r\n background-size: 2px 100%;\r\n color: var(--px-parchment) !important;\r\n}\r\nhtml[data-pixel-ui] [role='menuitem'][aria-current='page'] {\r\n background-color: var(--px-wood-dark) !important;\r\n background-image: linear-gradient(var(--px-gold), var(--px-gold));\r\n background-repeat: no-repeat;\r\n background-position: 0 0;\r\n background-size: 3px 100%;\r\n color: var(--px-gold-bright) !important;\r\n}\r\n/* 侧栏/列表的当前项:3px 金色左条,不占布局。 */\r\nhtml[data-pixel-ui] [aria-current='page'] {\r\n background-color: var(--px-wood-mid) !important;\r\n color: var(--px-gold-bright) !important;\r\n background-image: linear-gradient(var(--px-gold), var(--px-gold));\r\n background-repeat: no-repeat;\r\n background-position: 0 0;\r\n background-size: 3px 100%;\r\n}\r\nhtml[data-pixel-ui] [aria-current='page']:hover {\r\n background-color: var(--px-wood-mid) !important;\r\n background-image:\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold) 8%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 3px 100%, 4px 4px !important;\r\n background-position: 0 0, 0 0 !important;\r\n background-repeat: no-repeat, repeat !important;\r\n}\r\n/* 吸顶分组标题:粘住时补 2px 底线,和滚动内容分开。 */\r\nhtml[data-pixel-ui] [data-stuck] {\r\n border-bottom: 2px solid var(--px-wood-light) !important;\r\n background-image: repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold) 5%, transparent) 0 25%,\r\n transparent 0 50%\r\n ) !important;\r\n background-size: 4px 4px !important;\r\n}\r\n/* 终端块 / diff 卡片:左侧运行条 + 代码块同款描边。 */\r\nhtml[data-pixel-ui] [data-terminal] {\r\n border: 2px solid var(--px-wood-light) !important;\r\n}\r\nhtml[data-pixel-ui] [data-terminal][data-running] {\r\n border-left: 3px solid var(--px-gold) !important;\r\n animation: px-running 1.1s steps(2, end) infinite;\r\n}\r\nhtml[data-pixel-ui] [data-diff] {\r\n border-left: 4px solid var(--px-gold-deep) !important;\r\n}\r\n/* 标签:左侧 2px 色条代替圆角/渐变;色条落在原有 8px 内边距里,不改宽。 */\r\nhtml[data-pixel-ui] [data-tone] {\r\n border-radius: 0 !important;\r\n background-image: linear-gradient(currentColor, currentColor);\r\n background-repeat: no-repeat;\r\n background-position: 0 center;\r\n background-size: 2px calc(100% - 4px);\r\n}\r\n\r\n/* ── 反馈层:toast / dialog / 思考中 / 状态点 ───────────────────── */\r\nhtml[data-pixel-ui] [role='alert'] {\r\n border: 2px solid var(--px-line) !important;\r\n border-left: 4px solid var(--px-gold) !important;\r\n background-color: var(--px-tooltip-bg) !important;\r\n color: var(--px-parchment) !important;\r\n animation: px-toast-in var(--px-t-slow) steps(3, end) both;\r\n}\r\nhtml[data-pixel-ui] [role='alert'][data-closing] {\r\n animation: px-toast-out 120ms steps(2, end) both;\r\n}\r\nhtml[data-pixel-ui] [role='dialog'] {\r\n border: 2px solid var(--px-line) !important;\r\n background-image:\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n linear-gradient(var(--px-gold), var(--px-gold)),\r\n linear-gradient(var(--px-gold), var(--px-gold)) !important;\r\n background-size: 10px 2px, 2px 10px, 10px 2px, 2px 10px !important;\r\n background-position: 0 0, 0 0, 100% 100%, 100% 100% !important;\r\n background-repeat: no-repeat !important;\r\n}\r\n/* 思考中的行:保留宿主文字,但把 1.5s 的平滑扫光改成 4 帧阶梯,\r\n * 并在左侧补一条 2px 的闪烁光标(位置由宿主 decoration 承担,不加布局)。 */\r\nhtml[data-pixel-ui] [data-shimmer] {\r\n position: relative;\r\n}\r\nhtml[data-pixel-ui] [data-shimmer] > [aria-hidden='true'] {\r\n background-image: linear-gradient(var(--px-gold), var(--px-gold));\r\n background-size: 2px 100%;\r\n background-position: 0 0;\r\n background-repeat: no-repeat;\r\n animation: px-blink 1.2s steps(1, end) infinite;\r\n}\r\nhtml[data-pixel-ui] [data-shimmer] > [aria-hidden='true'] * {\r\n color: var(--px-gold) !important;\r\n animation-duration: 1.2s !important;\r\n animation-timing-function: steps(4, end) !important;\r\n}\r\nhtml[data-pixel-ui] span[data-state='ongoing'] {\r\n animation: px-blink 1.1s steps(1, end) infinite;\r\n}\r\nhtml[data-pixel-ui] [data-state='ongoing'] * {\r\n animation-timing-function: steps(8, end) !important;\r\n}\r\n\r\n/* ── 像素光标(SVG data-URI 阶梯箭头) ──────────────────────────── */\r\nhtml[data-pixel-ui] body {\r\n cursor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' shape-rendering='crispEdges'%3E%3Cpath d='M2 2v17h3v-3h3v-3h3v-3h3v-3h3V2z' fill='%23FFFDF5' stroke='%231A0F06' stroke-width='2'/%3E%3C/svg%3E\") 2 2, auto;\r\n}\r\n/* 浅色纸面:白填充的箭头会和纸面糊在一起,换成深棕填充 + 纸白描边。 */\r\nhtml[data-pixel-theme='pixel-paper'] body {\r\n cursor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' shape-rendering='crispEdges'%3E%3Cpath d='M2 2v17h3v-3h3v-3h3v-3h3v-3h3V2z' fill='%233A2A10' stroke='%23FFFDF5' stroke-width='2'/%3E%3C/svg%3E\") 2 2, auto;\r\n}\r\nhtml[data-pixel-ui] button,\r\nhtml[data-pixel-ui] a,\r\nhtml[data-pixel-ui] select,\r\nhtml[data-pixel-ui] [role='tab'],\r\nhtml[data-pixel-ui] [role='menuitem'],\r\nhtml[data-pixel-ui] [role='switch'],\r\nhtml[data-pixel-ui] [role='treeitem'],\r\nhtml[data-pixel-ui] [role='option'],\r\nhtml[data-pixel-ui] [role='button'],\r\nhtml[data-pixel-ui] [role='link'],\r\nhtml[data-pixel-ui] [aria-selected],\r\nhtml[data-pixel-ui] [aria-current] {\r\n cursor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' shape-rendering='crispEdges'%3E%3Cpath d='M2 2v17h3v-3h3v-3h3v-3h3v-3h3V2z' fill='%23F4D03F' stroke='%231A0F06' stroke-width='2'/%3E%3C/svg%3E\") 2 2, pointer;\r\n}\r\n/* 宿主的 .sessionRow / .projectRow 只在行上写 cursor:pointer;子 span 若被\r\n * 宿主另写 cursor 会导致箭头/默认小手混用。让可交互行内的非文本子元素继承\r\n * 同一个像素手,输入框和 contenteditable 保持像素 I-beam。 */\r\nhtml[data-pixel-ui] :is(button, a, select, [role='tab'], [role='menuitem'], [role='switch'], [role='treeitem'], [role='option'], [role='button'], [role='link']) *:not(input):not(textarea):not([contenteditable='true']) {\r\n cursor: inherit !important;\r\n}\r\nhtml[data-pixel-ui] input,\r\nhtml[data-pixel-ui] textarea,\r\nhtml[data-pixel-ui] [contenteditable='true'] {\r\n cursor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' shape-rendering='crispEdges'%3E%3Cpath d='M5 3h4v2h2v2h2v2h2v2h2v2h2v6h-2v2h-4v2H5z' fill='%23FFFDF5' stroke='%231A0F06' stroke-width='2'/%3E%3C/svg%3E\") 4 3, text;\r\n}\r\n\r\n/* ── 设置页「像素主题」行 ─────────────────────────────────────────\r\n * 这一段**不跟随皮肤作用域**:像素主题激活时用 --px-* 值,\r\n * 现代默认(浅色/深色/跟随系统)回落到 --dsw-alias-* 宿主 token,\r\n * 保证行在任何外观下都清晰可点、对比度达标。\r\n * 触摸目标 ≥32px(WCAG 2.2 web 目标 24px 之上留手感余量)。 */\r\n.px-theme-row {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n padding: 12px 0;\r\n border-top: 2px solid var(--px-wood-pale, var(--dsw-alias-border-l2, #6b5a3a));\r\n}\r\n.px-theme-row-title {\r\n font-family: var(--px-font, inherit);\r\n font-size: 12px;\r\n font-variant-ligatures: none;\r\n color: var(--px-gold-bright, var(--dsw-alias-label-primary));\r\n}\r\n.px-theme-row-desc {\r\n font-size: 11px;\r\n line-height: 1.6;\r\n color: var(--px-text-light, var(--dsw-alias-label-secondary));\r\n}\r\n.px-theme-row-cubes {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n}\r\n.px-theme-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n min-height: 32px;\r\n padding: 6px 12px;\r\n font-family: var(--px-font, inherit);\r\n font-size: 11px;\r\n font-variant-ligatures: none;\r\n color: var(--px-text-on-dark, var(--dsw-alias-label-primary));\r\n background-color: var(--px-wood-dark, var(--dsw-alias-bg-layer-1));\r\n border: 2px solid var(--px-wood-darkest, var(--dsw-alias-border-l1));\r\n border-radius: 0 !important;\r\n cursor: pointer;\r\n transition:\r\n transform var(--px-t-fast, 80ms) steps(2, end),\r\n background-color var(--px-t-fast, 80ms) steps(2, end),\r\n background-image var(--px-t-fast, 80ms) steps(2, end);\r\n}\r\n.px-theme-btn:hover {\r\n background-color: var(--px-wood-mid, var(--dsw-alias-bg-layer-2));\r\n background-image: repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-gold, #F4D03F) 7%, transparent) 0 25%,\r\n transparent 0 50%\r\n );\r\n background-size: 4px 4px;\r\n}\r\n.px-theme-btn:active {\r\n transform: translate(1px, 1px);\r\n transition-duration: 0s;\r\n}\r\n.px-theme-btn:focus-visible {\r\n outline: 2px solid var(--px-gold, var(--dsw-alias-state-business-primary, currentColor));\r\n outline-offset: 2px;\r\n}\r\n.px-theme-btn-active {\r\n color: var(--px-accent-ink, var(--dsw-alias-label-on-accent, #fff));\r\n background-color: var(--px-accent-bg, var(--dsw-alias-brand-primary));\r\n background-image: repeating-conic-gradient(\r\n color-mix(in srgb, var(--px-accent-ink, #1A0F06) 8%, transparent) 0 25%,\r\n transparent 0 50%\r\n );\r\n background-size: 4px 4px;\r\n border-color: var(--px-gold-deep, var(--dsw-alias-border-l2));\r\n}\r\n.px-theme-btn-active:hover {\r\n background-color: var(--px-accent-hover, var(--dsw-alias-button-primary-hover, var(--px-accent-bg)));\r\n}\r\n.px-theme-swatch {\r\n width: 10px;\r\n height: 10px;\r\n border: 2px solid #000;\r\n flex-shrink: 0;\r\n}\r\n\r\n/* ── 真 PNG 9-slice 素材层:全息 / 南瓜灯 / 便签本 ───────────────────\r\n * 三套素材主题共用下面这一层规则,差异全部收敛到 --pxa-* 变量\r\n * (图片、切片、边框宽度、重复方式、文字色)。素材在构建时由\r\n * scripts/asset-inline.mjs 转成 data URI:浏览器端不再依赖宿主素材路由,\r\n * 换素材只需要重新 build + 刷新页面,不必重启 DSH Desktop。\r\n * 素材:Complete UI Essential Pack v2.4 © Crusenho Agus Hennihuno,\r\n * CC BY 4.0;每套的源文件映射与署名见 assets/complete-ui/<theme>/ATTRIBUTION.md。\r\n *\r\n * v1.7 留下的两条硬规则:\r\n * ① Tooltip / Toast 不套大面板图,只换成 2px 主题色边(木刻版翻车点);\r\n * ② 横条主按钮和方形图标按钮用不同素材,绝不把 96×32 塞进方块。\r\n */\r\n\r\n/* 全息:深蓝 + 青。96×96 面板、96×32 主按钮、32×32 图标框。 */\r\nhtml[data-pixel-theme='pixel-hologram'] {\r\n --px-wood-darkest: #071426;\r\n --px-wood-dark: #10233B;\r\n --px-wood-mid: #1A2E4A;\r\n --px-wood-warm: #244A6A;\r\n --px-wood-light: #3E8FB0;\r\n --px-wood-pale: #9BC4D4;\r\n --px-text-on-dark: #E8F7FF;\r\n --px-text-light: #9BC4D4;\r\n --px-parchment: #E8F7FF;\r\n --px-gold: #14DCEE;\r\n --px-gold-bright: #7DF3FF;\r\n --px-gold-dark: #0FA8B8;\r\n --px-gold-deep: #0B6F7A;\r\n --px-sidebar-fill: #081624;\r\n --px-line: #1B5A6A;\r\n --px-accent-bg: #2C416D;\r\n --px-accent-hover: #385586;\r\n --px-accent-ink: #E8F7FF;\r\n --px-input-bg: #1A2E4A;\r\n --px-input-text: #E8F7FF;\r\n --px-input-ph: #8FB6C9;\r\n --px-input-caret: #14DCEE;\r\n --px-tooltip-bg: #0A1A2E;\r\n --px-code-bg: #071426;\r\n --px-code-ink: #7DF3FF;\r\n --px-code-meta: #9BC4D4;\r\n --px-ink-on-mid: #E8F7FF;\r\n --px-topbar-fill: #10233B;\r\n --px-dither: #0C1E33;\r\n --pxa-panel: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAABARJREFUeJztnUtugzAQhocIVekiioQ4ArfobbroojlPu8git+ktOAJCqrJIVUWhi9bEARv8GBii/p9UNbUpM5nBeLDHOCEDeVk3pvIhqiJL8rJuur+HjvGV4apD97Opfi6qIkuG6nuVeVk3249y8KSfT8XoiX1xkTuVLqGyXRjTLzUpst4fjpfzqXfwKn2ky/lEW9pt6O9K5lBSyX14fzua5NlYpY9E9LyhyKvaJNtV/pCdiGjUVm2hbgSXE3+/7jafT8Xol3Mh1gDfr7tNjHyTbB/5Y+XKViYnJET9K9DnxAPfyxluA0jXm8ptTkhtzd8F/X+GlB2t8xV8h6z3h6O6XepOWEkq9d94eH87bj/KmygTDpiZrhPaKOg3orjS/XusXKJuyfWmclWm345aB+j3aJ/ORapuyfWmcuux1rN7MqSo1Dmn0ImbWfqApRpiCQ6+6054qY71QdwBSzbiVLrpowjRUdCSDTgnLvZbpY/09fLcPhHnnFHQf2fMfpNHQSAMOECQqsgSOECQvKwbOEAYOECYqDAUEdEV1zBUpyqyBGEoEyFhaNsHfD4VbNOLwJ02CqqKLIET5gdRkDB4DlgAK+4MN+DOzWCcQoVKGA31R7eNLQzV54OJiFbdZFVl0Mv51PsxlYMrY3ZSn1VmBBGehMVBHyAMWoAwvT4AzEvavQW5RkHogHkIjoIAD70WAMIIGY4m6ixRAuEEZ0WgE5YFYagwKyL7KkUwPSnR7yrF9f5wpJHBJFM5IqI4MCcsDKIgRlyGo4moTdAlQifMistwtJ4dTQQHiAMHCAMHCIPURGEQhgqCvCBhjGkpIBzX54CbMiIk53Lh8hzQBcm5wrS3oKrIEirrZku7zXp/OPq8BQQdcxg3CzS6IAqanrysGyRmCYMwVBiEocwM5VWZFulhUp4Z3zDUmheEzLjpycu6sbYAZMZND8aChEEYKgw64QWA5FwmQpNz0QKYcFnMaHpXhPVBDFOS82C9BWEwbh5wCxIGzwEz0319fesApKjPh75SPiWC8TnxGQ0l0tYHwPg8XM4nrzViwZlxiIZ4QGacMIiChIEDhIEDhMGkPBPRryrA+oA4Ql9VgChIGNE+YGyXunuREQOLA6S+pLRxOeRP3gKkjTTEEnRbdBgqaaC5ZLPtprrU3VJj5Mec2zsMjYmClrpb6pS6DR2DfcTuCDhAGDhAALWZZ1VkSUJ0nZL8fbU6P18vz1GrL6fSS4Lu62ranCB9XpizE9a3bg3FNmVqkzvlcltdD1976Fe+KrMuU+VQ1iQwiD+9XOatORw+hKseXWy26BlGtQQOWIz/h6tenDJj9Ohi08uo6NTZckqRvKwbtbGxKtfL9OO45drKptLBdlH8AItA04fuFeYIAAAAAElFTkSuQmCC\");\r\n --pxa-panel-slice: 24 fill;\r\n --pxa-panel-width: 24px;\r\n --pxa-panel-repeat: stretch;\r\n --pxa-menu: var(--pxa-panel);\r\n --pxa-menu-slice: 20 fill;\r\n --pxa-menu-width: 10px;\r\n --pxa-button: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAANhJREFUaIHt2LENgzAQheGHlQkiCgbIasyBPIdXYwAXESuQJkY2MkqDzlL8fxUCitM72zpZAgAAAMwNVx/GddstC+lVtQHjuu3TvFjX0p0YvB7nl3n4MXhN86IYvHlx/+acY8q42AG18HG/fGEfDSB8ezF4OYnwreVHkSP8tlx6IPw2jgYQfhvFDoA99/sX3C0/bWhAA8UU1LCOLp2HHRpgKA8/Bq/36zkwBRmphS8xBZm4Cl9SeRuamsAN6D1SjlfhS9LA3b+NWvjStwEtCupNLXwAAIB+fQDKgHLEoJpwFQAAAABJRU5ErkJggg==\");\r\n --pxa-button-hover: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAKtJREFUaIHt2TEOwyAQRNEB5YQ+gg+2R8gV141JEMJKk2UL/qssews0IyiwBAAAACxXnj4c7r5yIbuaFnC4+7l6JRsySa/xJeHHse65ZVz7AcKPdeobfPM5ggh/PdO9Awg/TyX8XPX3CCJRQDIKSEYBySggGQUko4AkJuldSqGABC18qdsB9jiOf+rDl4YjyEQRkcbwpe46muuIWLPwJanw52uNWfgAAAD7ugDNuSljuyndMAAAAABJRU5ErkJggg==\");\r\n --pxa-button-active: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAL1JREFUaIHt2bENwyAUhOEDZYLIhQfwap7DYg5W8wAUkVdwisgOQkSp4BX8X2XZFOhOUDxLAAAAQHfu14dpP86eGxlVtYBpP8553XrvZTgpBj3Kl4TfTorhfr4y9vkCwm9rXjeV+d5XEOH3l2L4nADCt+MJ35b/vwQtUYAxCjBGAcYowBgFGKMAIykGvZanowADV/hSdgLyQRHaycOXiisoxUARDZXhS/qOoxlHtFULX5Icf776qIUPAAAwrje7uT3lHa4XNQAAAABJRU5ErkJggg==\");\r\n --pxa-button-slice: 8 20 fill;\r\n --pxa-button-width: 6px 10px;\r\n --pxa-button-ink: #E8F7FF;\r\n --pxa-button-hover-ink: #E8F7FF;\r\n --pxa-icon: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAMNJREFUWIXtl00KwkAMhd88quBCBOkRegtvpOfRG3mLHkEK4kKwJXU1/lRMC9pJF8lyXpL3QSBMAgDkZdXCIE7FOoRovjqWSc3PmwIAEPKyaqP5/LC/pDC/bXfLCMH4mMq860UtEQBIPeVnffIAgtmoevZBRILkWyGzhdpkiE7UEBGIiA7wTGoexdJc1eZDdPmmq+gJwgEcwBzA94D5CBzAAcwBfA+Yj6D/U4p6ZL0nujP7tz4dgHgupYhXL/vjFLA9z+878Ykw7yfaGgAAAABJRU5ErkJggg==\");\r\n --pxa-icon-slice: 8 fill;\r\n --pxa-icon-width: 5px;\r\n --pxa-input: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAFhJREFUWIXtziEZgDAUAOEbHxg0Yt3QmJUgBIEogSQBYoICUGB6z9wVuB+CSwDLXT+AvO1d59d5pKHrsZEAAQIECBAgQIAAAQIECAgHjABzWQF4nykUE9IPGr4I7mcYsWgAAAAASUVORK5CYII=\");\r\n --pxa-input-slice: 10 fill;\r\n --pxa-input-width: 8px;\r\n --pxa-input-ink: #E8F7FF;\r\n --pxa-placeholder: #9BC4D4;\r\n --pxa-caret: #14DCEE;\r\n --pxa-select: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAE9JREFUWIXt1KERACEMRNENcxUwCAqgNeq4RimBoQVQKHxi/lNx+1UkAAhm9yhjbc/h2bJJ0nfHa/8996Wx9mzZku/qiwACCCAg/BUDAMIdSUQP3t7ChOIAAAAASUVORK5CYII=\");\r\n --pxa-select-slice: 10 fill;\r\n --pxa-select-width: 8px;\r\n --pxa-ink: #E8F7FF;\r\n --pxa-accent: #14DCEE;\r\n --pxa-accent-bright: #7DF3FF;\r\n --pxa-hover-wash: rgba(20, 220, 238, 0.1);\r\n --pxa-tooltip-bg: #0A1A2E;\r\n --pxa-tooltip-ink: #E8F7FF;\r\n}\r\nhtml[data-pixel-theme='pixel-hologram'] body {\r\n background-color: var(--px-wood-darkest);\r\n background-image:\r\n linear-gradient(rgba(20, 220, 238, 0.045) 1px, transparent 1px),\r\n linear-gradient(90deg, rgba(20, 220, 238, 0.045) 1px, transparent 1px);\r\n background-size: 24px 24px;\r\n}\r\nhtml[data-pixel-theme='pixel-hologram'] ::-webkit-scrollbar-thumb {\r\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAFlJREFUWIXt0rENgDAMBdGDERAjsP9EjBCxAvQ0KPbvuFdGSs5SDJKkv1s6l/fzut9n49im3lyT8YrSAKl4aYBkHCZ34Cs++//Q2IFEPDZANR4ZoBOXJAngAWGqFA9rfCGtAAAAAElFTkSuQmCC\") center / 100% 100% no-repeat !important;\r\n border: 2px solid var(--px-wood-darkest) !important;\r\n}\r\nhtml[data-pixel-theme='pixel-hologram'] ::-webkit-scrollbar-track {\r\n background: var(--px-wood-dark);\r\n border-left: 2px solid var(--px-line);\r\n}\r\n\r\n/* 南瓜灯:暖橙藤蔓包边。frame_full 30px 只给对话框;菜单用 frame_simple,\r\n * 避免小块浮层被厚藤蔓包成“门板”。 */\r\nhtml[data-pixel-theme='pixel-pumpkin'] {\r\n --px-wood-darkest: #170D06;\r\n --px-wood-dark: #241409;\r\n --px-wood-mid: #2F1B0C;\r\n --px-wood-warm: #3A2210;\r\n --px-wood-light: #8A4A18;\r\n --px-wood-pale: #D89A5A;\r\n --px-text-on-dark: #FFE9C9;\r\n --px-text-light: #D8A76F;\r\n --px-parchment: #FFE9C9;\r\n --px-gold: #FF9E2C;\r\n --px-gold-bright: #FFC85E;\r\n --px-gold-dark: #D97706;\r\n --px-gold-deep: #8A4A18;\r\n --px-sidebar-fill: #1B0F07;\r\n --px-line: #0E0703;\r\n --px-accent-bg: #FF9E2C;\r\n --px-accent-hover: #FFB45C;\r\n --px-accent-ink: #2A1206;\r\n --px-input-bg: #3A2210;\r\n --px-input-text: #FFF6E6;\r\n --px-input-ph: #F2C795;\r\n --px-input-caret: #FFC85E;\r\n --px-tooltip-bg: #1C0F07;\r\n --px-code-bg: #120A05;\r\n --px-code-ink: #FFC85E;\r\n --px-code-meta: #D8A76F;\r\n --px-ink-on-mid: #FFE9C9;\r\n --px-topbar-fill: #241409;\r\n --px-dither: #20120A;\r\n --pxa-panel: url(\"data:image/png;base64,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\");\r\n --pxa-panel-slice: 30 fill;\r\n --pxa-panel-width: 30px;\r\n --pxa-panel-repeat: round;\r\n --pxa-menu: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAuFJREFUWIXFl79LG2EYxz93Go4EL3j+INqKFdriVMRJRAu6lNJi6NKpi4vUf0Chm10Vd8HFpS3tKLRbm4B1SJcgWYQOlaCYGJvTi01NSr0O+sZE7707k0C/S+7u836f5z3yPO/7Hlzo5asB+/3bxzYSufFGvKq4SB+pfElty2K48ka8iriwv47ZT97s099+xsrT2+dwfNMXb8SrigFsmfS3n5E+Upn9uAdb5vlzD96IF0AVAwrJECt9ofNZ9oUoJEOXA2UcqNt7wdXCWqnmP1nKddXcu/FGvIKr8ZROIRlirvuQD0Z/7YBkCMGd5MaqvW6xW97t7bweDQwufDYs8laOR8UQ5UygkmDDymAfdzIQKVeei9+dA42dA82RVXtlsaOJmOJaqfMzebKmScQweBjuufaWG1YGQMqEd3G1A1kXVNqILZPZ3SLpI7VSLAwZNZO4qqxpAkiZSC6LrYxvKkp1perDRWZ3i5VK1YeLNZO4qn3LAqA3HL7GqpO7xW4trJXQhy+NS7ku6CtW7qsrWSSUTURITMhPbF9dUK+a1gVZ05S+vZNOSiUU2+an+rc5XXCT5NXqDYc9u8B1L1hc7SBiGI5FdpPkDe0F9UzianJfe4EoFK/1/CbyE7vSBU6HhmZ1gVtsNZqIKfGUzqcXvaSPVOa6D2HIQJ/W6u6Cfcsia5psWBncYkcTMUUFmFouOxbK1HK57rcX8op9oyKUFeJVVlcRCsmKMGIYjt0gkjkxP7FbRgODC7fObOa6Dyneucv9H0W03j+UMwHKmQDxlE66dIL17Ddjz+9hfTtf5XRNQ9c0IoZxjQG0BYPYx514xfa1FAN87zkjb+XQtgO0BYO0BYP8Oj2lLRh0ZFnTbN5SLFtO52fyAFLWtAOJ26ECkDIvr+8DiZRPa54HDi/+34/lrfGUzgTOEsuljDfiFVwBWB+ZtCceFBwTRBMxxY0D1Out6YL1kclrn8/RRMwXb8T7D0nQvI83eiFSAAAAAElFTkSuQmCC\");\r\n --pxa-menu-slice: 12 fill;\r\n --pxa-menu-width: 12px;\r\n --pxa-button: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAABzElEQVR4nO2aMUvDQBTH3x2dhApOjk5ZBBFBcNCABedO4ifwQ4jOil/AzU8gTpkFheogCFIcMzk6FSx0PXmX3nlpLrGB9h6c7zeU5Hrvtfz/JLncewIc1PO+Ag/i4EXMjn2f7qruzgRge60YSFJfKEA+KOWIPc6lkmOKO9ceqK8zZZIxSyZJQaxfa+0lfrD4gckHheZ4BdTddpgwdGYH7s7zQD/9Pzm5SkrnQt1sKvOQcMX/hEnwPxczG7BSNWE4Ajl+//3CwOIvHp+mqL1cvX2rLJ+YMKD2ehXE0CF5FUQHas9XADGy9hWbWT5JWrwJM3SwAcSwAcSwAcSwAcSwAcSwAcRIroIRkg/4CqBG4p500941sxi8mg5HIHTl/vLIVve5IrZcbDEmSWF88VB0RXBRnq4zgldBxBQ1YeS4b29DFXw7pm17iEyO2ONcmvS8z/ShsN1bxgRfEs+DWhfy593KdnPEHudSl2MqPtaEtQF4Yk1ggmCaITpPH1043BrrgToTfJ0TbQ0zOWKPc/lLT9Rer4KyvZ5CE5hwoPj910dhW1KaTMDJs7Q1zOSIPc6lSU8Uv9SaiAMZ9Lx9omayS93cOkyO2OPAYR49fwDBAQQZqKqgBwAAAABJRU5ErkJggg==\");\r\n --pxa-button-hover: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAABlklEQVR4nO3aMUvDQBQH8JdDHIQKTo5OWVxEEDpoBsG1Hf0EfgMX0VlxcXTzEzi2q6AQHQqCFMdMjk4FCx1cTi7xzksuFyo0eZD+f0NJ0ruX8h5Jk7wQAQDAsgrsFfm8L0sHHbzkxilfJ3uyszsj2tnINoRR+R6SOBej7fNsToxf9lizID/PpA4GNQsjCjav09wL9YHkNyyJs5yrI8B32oFmrBQ33J8nDe16OR1fhbn1QN5uS/0nYSf/g2aN/7g226I1twjjCYnp298XGpK/eGU5VbkX63evzuUTNEPlPr0KAj4CV0F8VO5xBDAT3ltsqF8YZXfCwAcFYIYCMEMBmKEAzFAAZigAM4EuGKMkxhHATahn0lXPrmExSnM6nlCQdu4vj0x3Hx2xeplmTBjR9OLBbUkWW2ZQL/H03ql5F+Cjcp92wwbdQ9kbdM1pyFH2xPS/7xDpGG2fZ6vI57A/ov7oMTDtSFOEoiSm4emqs7l38+1/W6wiRtvn2XwxdPLVcq4frIrgjCYyg+cZ66NjtH0eWebJ5w82gMizrPsdPgAAAABJRU5ErkJggg==\");\r\n --pxa-button-active: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAABpUlEQVR4nO2aMUvFMBDHr0EQhCc4OTp1EUQEwUELPnB2dHbwQ4jOil/AzcHZ8c2CQnUQBHk4dnJ0emDhgVMkralpkxSF1x7E/28obXp3Lf8jaZoLEQAAsBGZF/JhWzqNdh5rdoqPo0052JgSrS+VDXHifkKW1mKE7mdixfjGtK1O5Pux1MFAx8QJRcsXhfZCHSB+z2RpqbnqAb5hB/TDXLPh5iTr6dH/k4PzuHYdyctVqT8SpvhvNO395UJmhRbsJIwnJPKXnxsaiD97XJoq7cXi1bM1fQL9oLQvZkGAD4FZEB9Ke/QAZoT3Fxt0T5yUf8KADySAGSSAGSSAGSSAGSSAGSSAGYEqGCNZih7AjVBr0m1r12A2ODUdTygqKvdne1V1HxWxbqmKMXFC+emtXZJslsxAt2AWxEw02hrK3bWczGHIwrVi+tc9RDpG6H4mLXqq4ef+dVBuzKoloUmWUn79aTUPDuf9u8VaYoTuZ+KLocXff7qLqnqwToILZdzEZ+tDxwjdz6RNTyW+Oq8+wqphREPnJi1tbOKz9aFjhO5HBr/R8wuC++L290wmRwAAAABJRU5ErkJggg==\");\r\n --pxa-button-slice: 6 8 12 8 fill;\r\n --pxa-button-width: 6px 8px 10px 8px;\r\n --pxa-button-ink: #FFF6E6;\r\n --pxa-button-hover-ink: #FFF6E6;\r\n --pxa-icon: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABe0lEQVR4nO2XP0oEMRTGv4StFkawsrRKI8giCBY6oBfYSjyBVxDEAyxewM4TiNVeQGG0EAQZLKeytBrYhW0jLzHZmZjJajGJxf6afZOX5Hu8zZ8Xhgby6VDCgR09M/qdne/LbG8BjDa1Q+TwUhXhcQ2fsq3456U0g3tH5GBb10qbRxcnqkJrAmC+tMdk4DbcXVW9Cp5NROubo6yjif/QKGsM5m9DZKNl2wcWvQawjaG1SZtv3L6yWOKuBmmrXZASnnIXkHb6DKDrSI2ByPVJmBK+DgDrvyAxPH0AVcRCxKUq/kMGymU9EJ2yBqc72RzHF5NGYdATVkPkqh5gSYrSRmXMkRgmb3Z0PXA6to+KFua2/GuGQuPIdz/VAczMy8UE4fLdUb1sfnt1k6hZ3IE51RqgAOjDBhEJtfgB8Mf3rNXg69jlWyUQmpMgbbULpgcn8nh3jpiQ+PjlQe8CMkwmfB27fKsEQnOSJtn2TUBQJtzOpqPPFyI0zvjI/gJjIqCQvIbvSgAAAABJRU5ErkJggg==\");\r\n --pxa-icon-slice: 4 4 10 4 fill;\r\n --pxa-icon-width: 4px 4px 6px 4px;\r\n --pxa-input: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAA5UlEQVR4nGNkQAL/X1b8Z6ADYBTvYISzGWCWH7Gmi+Vwi22Ogu1mBFs+VYuuloOBviDYEYwDYjmSI1jQxVatfAOmJz75RXX7jhZLYYgx0ctyELDufYbfAQMBmBizrzFuXiROf5tD/MCJkAnEdtD9TH8H3D4Mppg+pZj85zX8Rn8HXHwPLnuYGAYYMI06gGE0CgYYMI06gGE0CgYYMI06gG/OmdH2wP/R9gAMhIWLgOl8GTYGWgBszXIWdAGYI8IY6JgLPp/nYhgIAO6awTigxik9LQd5HOwIZMFN5o50cYTfyf1wewE2tktlQ86FQgAAAABJRU5ErkJggg==\");\r\n --pxa-input-slice: 6 fill;\r\n --pxa-input-width: 6px;\r\n --pxa-input-ink: #FFF6E6;\r\n --pxa-placeholder: #F2C795;\r\n --pxa-caret: #FFC85E;\r\n --pxa-select: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAU9JREFUWIXtlzFKA0EYhb9/DRZCAlsFD2AjyCIELLJCvEAqj5AuB9AmVRo9gN1WHkEPoGC2EBYkCGk8gVUgASthLLKzyc5O2Gp3LeY1M/zvzf8/2Fl4I+xAfd8qvZfunZi1XWjedtams/UGyDZq1s83OLncrF9vtr5bXqNMZ/ASxpIZUA+nRfeBv1nnS3tjzWuU6Uw+8JEwFrEOrwuBj9fY8BQtszC6+QXg+PCgkoHTae7u4sl4Ic+P3VqGA0wm6Re/HiJhLB7A4Gxd2cC9SP8KbzXqqfb5T/0G5kvUrK8av4TOgDPgDDgDzoAz4Ax4nSjJElGt+C+JSMxEVGsoDfxiKo7uC6VK0fglFABbMF1/HAGwL7BqXqNMZ+NlvJAWQCdKZDXq5Z5or59tAAZ7nGteo0xn8p0o2T5ONZ4urjITw/cXMWu70LztrE1n6w3wBwNidr7sF3ekAAAAAElFTkSuQmCC\");\r\n --pxa-select-slice: 6 fill;\r\n --pxa-select-width: 6px;\r\n --pxa-ink: #FFE9C9;\r\n --pxa-accent: #FF9E2C;\r\n --pxa-accent-bright: #FFC85E;\r\n --pxa-hover-wash: rgba(255, 158, 44, 0.12);\r\n --pxa-tooltip-bg: #1C0F07;\r\n --pxa-tooltip-ink: #FFE9C9;\r\n}\r\nhtml[data-pixel-theme='pixel-pumpkin'] body {\r\n background-color: var(--px-wood-darkest);\r\n background-image: repeating-conic-gradient(rgba(255, 158, 44, 0.045) 0 25%, transparent 0 50%);\r\n background-size: 4px 4px;\r\n}\r\n\r\n/* 便签本:撕角活页纸 + 铅笔光标。panel 的左边 18px 是活页孔,\r\n * 用 repeat round 让孔按比例排布,而不是被拉成长椭圆。 */\r\nhtml[data-pixel-theme='pixel-papernote'] {\r\n --px-wood-darkest: #F2E6D2;\r\n --px-wood-dark: #F6ECD9;\r\n --px-wood-mid: #EFE3CE;\r\n --px-wood-warm: #E6D7BC;\r\n --px-wood-light: #C9AF8A;\r\n --px-wood-pale: #A8895F;\r\n --px-text-on-dark: #3A2412;\r\n --px-text-light: #6E4E2E;\r\n --px-parchment: #FFFAF2;\r\n --px-gold: #6E3A10;\r\n --px-gold-bright: #8C4A16;\r\n --px-gold-dark: #5A2E0C;\r\n --px-gold-deep: #4A2408;\r\n --px-sidebar-fill: #F6ECD9;\r\n --px-line: #8C5A2C;\r\n --px-accent-bg: #A3551B;\r\n --px-accent-hover: #8C4713;\r\n --px-accent-ink: #FFF9F1;\r\n --px-input-bg: #FFF9F1;\r\n --px-input-text: #3A2412;\r\n --px-input-ph: #7A5A38;\r\n --px-input-caret: #8C4A16;\r\n --px-tooltip-bg: #2E1C0C;\r\n --px-code-bg: #F0E2CC;\r\n --px-code-ink: #6E3A10;\r\n --px-code-meta: #7A5A38;\r\n --px-ink-on-mid: #3A2412;\r\n --px-topbar-fill: #F6ECD9;\r\n --px-dither: #E9DAC0;\r\n --px-check: var(--px-check-light);\r\n --px-radio: var(--px-radio-light);\r\n --pxa-panel: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAABCVJREFUeJztnT2S8jAMhgVDT0XHQej3BtRwOrbmBvQcJB3VniBbEIMsSw6ByM5m32fmm4+JZcc/a8eWJXtx2FBLDnzfaBF+y3d832jh9d6a8DITxeWWYYEVEdHpeh4/N7t9Gyo6SX+3T5/NAVZmIlGvXZiMolfQ9kt/QXOJZZrL838Zt7nQcbe/Z0KmF+JZ6WpyXMaSCzJa2jKdV98jy9vzbrXMLEw2QtwALNJxu378PjU/aYa0SswVPBd3jDBN5hV5Kx7R+3nkcUW6shHUHiCFDhtq1UboY0gFzAWrzKxn8fpdEKUfSaL0I/pWAwAd1hOWRPfKtr7SwIHtF52uZzpsqF3xv/7HX3lzIdrt0+fgc8QQFU9DQ2DXQsABMWtcJYHab+DGiug5d+VTT6L70COfvRL2jtwU6cs7H5qtugsyIfzU/DzXCpRZBwBnupnQUj4Ezog6XhpiwAvxEV7mAoETbKiPVsLWRwXrgJFhyrkVEVM7bNe6/nq7hipiLMQIs5rjxsikERpXdUPmuNuXzdQ/Rl0Jn65n6II8MVURAeiCfGGzzbgB+G4OVsV+mOsAIlR8YdKFGChK2gOwEvZFbMikyjj0Al+6+o32hGUgcKZ3GkrQBbnBKv+woTZqAF7p0AWNjPi2nq7nuzLu+0aLsOqdq9HsJDBMMSO7INVOFIwPN0vR7IKgCyqHbp4OXZAfmmGWGogpqQ/ZPWFQHDRAZWAVUQNTFyQCgT+wjKtMtBKGXVAhpDIOdkEFkXZBRLqPGHBCOmhYXpLAEdMqoguELsiZXhcl6IL8EJ71aQ9gjnrAAVGv2JSvgXTUBoVoLs9DTLrvKuyCStBVfIB7pKqzIDAyynE9YaYJu6AamDtiDOiCyvDwlCfqKlo5VAi6oJHhCzFZ0TXy86+AMq4yWWUc9+CDLqgI8BGrQdZHDHZBRcFKuAZw0psOWAmXJusjFgSAH9gPmBbmqYnQBZVB3ZKELqgckTIugGOMneHT0OAflrvxAoxIThn3uHgAuiA/XlLGQRdUDHNHDNNRR1gvgH9AZaCKKE326GL0AH963VTRCEVJhyAMQ/7ALqgyfUPQcbsmvkL+qzdgTJbsmXGgKKoyDjhjWsbRUy+k3i8GPqfPMi66zA2MT68yDj5i/pi6oBAIigEfsRqY6wCM+2XQVsLadYbaVX5DriaU1/hNlaFl0mTlc63sXAZXGdaEXWOFIagGcgjiK2Gr6wAfkpVw8BODYZYjzPhtXj5iU7dtFUP8YUPtMnyE+b+hCb0cNpRP38Nl+uSHvMuS7XsH0zCEeh5+YFNfZrRj2o2j2814OTktTf5cnMcTpS/jchmr52j5kOlzty7+/oxc2HOZ1ZH1/KrwKcONn23DrD/Go1C7fRtupyBSToavSMgTn+DM5sYMzbh4ajeCaFbnv8g+yu7Ryv7IAAAAAElFTkSuQmCC\");\r\n --pxa-panel-slice: 12 8 12 18 fill;\r\n --pxa-panel-width: 12px 8px 12px 18px;\r\n --pxa-panel-repeat: stretch round;\r\n --pxa-menu: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAMZJREFUWIXtl7ENwyAQRR8WPZU7BqHPBtRmOlx7g/QexB2VJyBFbEKX7i5S+B0I6R+n/3RglpmKktaCsQB538A/ZN2PJ4RYp34veUfyTrQO25uvBQOAdzUfp0wBa8EQoloO7DJTWwa8qwBStwcwmhTAlQEtClKIDAoGBbZfSBrfmr4fESxAhYI+hBoUTC2ESmohzMc5KFCRPgW9+ZgFf0nBDz3JgBQiINSJ60k2ZsFnFuwbdyfyvr3/bpIFNGNhGQAtEtaCeQEYeX/dSgetuAAAAABJRU5ErkJggg==\");\r\n --pxa-menu-slice: 6 fill;\r\n --pxa-menu-width: 6px;\r\n --pxa-button: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAASlJREFUaIHt2iEOgzAUBuC/BI/C4Uk4AZ4boOnpiuYGeE6wZB6H2gk6scHagtvKS8b/qdEgXt5fuoQHQEQkRoULXQ4rUchV9Ivf89S96HJYc79BlxXMNJxb2Z/TdQtzvwFlZd0QtgDW5nuK5rwK/9k8bj/DELwnQJfVyZVdi9vfLoftFygvAB478Rz2tm5tCgR/vDx2fu+op+9jKelyWO58OQkA7npBiXQBV8cAhDEAYQxAGAMQxgCEMQBhDEAYAxDGAIQxAGHpbsUZHmz4rigafyBTt7sb+Kb0x4INnq6LZn5AFxncsSQnZHG4G/3zBMwjzDS8BvLhbPjoWKKv9QuUcqdhZhqAooEuMsm6LmEdyivgM5LkeR+Xrtvdd0HbBT/Iii9sPhGRsCcxOlS7B3jCOgAAAABJRU5ErkJggg==\");\r\n --pxa-button-hover: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAAAXNSR0IArs4c6QAAAR1JREFUaIHtmTEOgzAMRX+q7Ezd2CtxAnZuwNycLszcoDsnQGJnY+IEdAjQJKLq1Fhy/CbiLPbHGNkGhLxRV8bnHVtqR1LRLWHM58EP2g59Sp+SYeoWQCiCBlzwduiBsoEpC3dTNgQu/pH5BQCw0wg8qu0Q4UbqFBF2Gs+M14fxSA/umEd1Pj/v2LR/aYeetRBxbTN1i0AAdt+9TxzbXhNuZwHMFFcEOb/5H2T5F/ARAagdoEYEoHaAGhGA2gFqRABqB6gRAYLT3iDkhOsG5xfsvH6mQbsNAPs+IcgAO68AXJ/MeS7go2PD10xgirqcB/jDUcZ0C5SKdwDHdJgjpizgT7+7BUp3y54F0/gZGDJO+3g3cLkY4Uq8FRIEAW9z5lUxZXlYggAAAABJRU5ErkJggg==\");\r\n --pxa-button-active: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAASlJREFUaIHt2iEOgzAUBuC/BI/C4Uk4AZ4boOnpiuYGeE6wZB6H2gk6scHagtvKS8b/qdEgXt5fuoQHQEQkRoULXQ4rUchV9Ivf89S96HJYc79BlxXMNJxb2Z/TdQtzvwFlZd0QtgDW5nuK5rwK/9k8bj/DELwnQJfVyZVdi9vfLoftFygvAB478Rz2tm5tCgR/vDx2fu+op+9jKelyWO58OQkA7npBiXQBV8cAhDEAYQxAGAMQxgCEMQBhDEAYAxDGAIQxAGHpbsUZHmz4rigafyBTt7sb+Kb0x4INnq6LZn5AFxncsSQnZHG4G/3zBMwjzDS8BvLhbPjoWKKv9QuUcqdhZhqAooEuMsm6LmEdyivgM5LkeR+Xrtvdd0HbBT/Iii9sPhGRsCcxOlS7B3jCOgAAAABJRU5ErkJggg==\");\r\n --pxa-button-slice: 8 6 10 6 fill;\r\n --pxa-button-width: 6px 5px 8px 6px;\r\n --pxa-button-ink: #3A2412;\r\n --pxa-button-hover-ink: #6E3A10;\r\n --pxa-icon: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAMZJREFUWIXtl7ENwyAQRR8WPZU7BqHPBtRmOlx7g/QexB2VJyBFbEKX7i5S+B0I6R+n/3RglpmKktaCsQB538A/ZN2PJ4RYp34veUfyTrQO25uvBQOAdzUfp0wBa8EQoloO7DJTWwa8qwBStwcwmhTAlQEtClKIDAoGBbZfSBrfmr4fESxAhYI+hBoUTC2ESmohzMc5KFCRPgW9+ZgFf0nBDz3JgBQiINSJ60k2ZsFnFuwbdyfyvr3/bpIFNGNhGQAtEtaCeQEYeX/dSgetuAAAAABJRU5ErkJggg==\");\r\n --pxa-icon-slice: 6 fill;\r\n --pxa-icon-width: 6px;\r\n --pxa-input: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAAAXNSR0IArs4c6QAAAOVJREFUaIHtmbERhSAQRBeHFswshNwOiLU6je3g5xZiZhH8BJABYnYG7oWSrO84gjsFzzbDoXPOFyr/poDv54/7ap2pGbuxAEoJuqj8srZL1YrnB8AX2FiXStDxYBByCVM8WdY+q1/huK/Y9podpiXhHQhsM9wwAmptvhs7yA2otbZ/GKfyZCxEADsAGxHADsBGBLADsBEB7ABsRAA7ABsRwA7ARgSwA7ARAewAbEQAOwCbbyboZ2SRQUbkGijHxV0vSrJCF5uhXEaPpHtCfb5QMNYVVc9bojPCaiwuCUdYjwfS5egfS5w8Vq4TIVoAAAAASUVORK5CYII=\");\r\n --pxa-input-slice: 4 4 6 4 fill;\r\n --pxa-input-width: 4px 4px 5px 4px;\r\n --pxa-input-ink: #3A2412;\r\n --pxa-placeholder: #7A5A38;\r\n --pxa-caret: #8C4A16;\r\n --pxa-select: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAMZJREFUWIXtl7ENwyAQRR8WPZU7BqHPBtRmOlx7g/QexB2VJyBFbEKX7i5S+B0I6R+n/3RglpmKktaCsQB538A/ZN2PJ4RYp34veUfyTrQO25uvBQOAdzUfp0wBa8EQoloO7DJTWwa8qwBStwcwmhTAlQEtClKIDAoGBbZfSBrfmr4fESxAhYI+hBoUTC2ESmohzMc5KFCRPgW9+ZgFf0nBDz3JgBQiINSJ60k2ZsFnFuwbdyfyvr3/bpIFNGNhGQAtEtaCeQEYeX/dSgetuAAAAABJRU5ErkJggg==\");\r\n --pxa-select-slice: 6 fill;\r\n --pxa-select-width: 6px;\r\n --pxa-ink: #3A2412;\r\n --pxa-accent: #8C5A2C;\r\n --pxa-accent-bright: #6E3A10;\r\n --pxa-hover-wash: rgba(140, 90, 44, 0.14);\r\n --pxa-tooltip-bg: #2E1C0C;\r\n --pxa-tooltip-ink: #FFFAF2;\r\n --pxa-outline: #8C5A2C;\r\n}\r\nhtml[data-pixel-theme='pixel-papernote'] body {\r\n background-color: var(--px-wood-darkest);\r\n background-image: repeating-conic-gradient(rgba(140, 90, 44, 0.04) 0 25%, transparent 0 50%);\r\n background-size: 4px 4px;\r\n}\r\n/* 便签本:铅笔光标覆盖一切——按钮/链接/输入框/正文都不再退回像素手或\r\n * I-beam,否则一块纸面上会同时出现三种指针。热区在笔尖 (4,4):素材是\r\n * 左上笔尖、右下橡皮,之前写成 26 26 等于点在橡皮上。 */\r\nhtml[data-pixel-theme='pixel-papernote'] body,\r\nhtml[data-pixel-theme='pixel-papernote'] body * {\r\n cursor: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAWNJREFUWIVjYBgFIx0wogvEiDL8x6V4yWtM9ZQCFmyCX6wD4Oz19cEICbfY/9R2BBM+SWTLY91iGRZPCMIbQlR1wGRfHQzLGRgYqO4IrA6Y7KvDIGOkzvDk3E0Uy2GAmo7AGQJPzt1kqKxoYWgONcYqTy1H4HQAzHIFa3mGB0cf0swRWFN0jCjDf2SfwxyhYC2P1ZDYgnVkZ1GcmujlCLwa6OEIgopp7QiiFNLSEUS7lFaOICm+aOEIklMtsY64YdTKwMDAwNBqp4nXEWTlXUKOgFmuERrKwMDAwBD78gpOR5BdteJyxI/cJSiWwwAuR+CtjvGBJa8ZGGtXn4XzYZbfuXMHw3J8gGwHoDviimcDw507dxh8KisZnrz5Qx8HoDvCILWU4cmbPwwyIixEO4JqzasYUYb/7cwacD7METIiLHgTIVVBjCjD/8cSGnD8X0fnP6HqmuquQreQLj4fBaOAEgAArfrJfFZraPoAAAAASUVORK5CYII=\") 4 4, auto !important;\r\n}\r\n\r\n/* 云石:板岩底 + 白石框 + 钢青。白石的 20px 边框只给对话框和菜单;\r\n * 按钮/输入框本身是白石控件,文字用深墨色。 */\r\nhtml[data-pixel-theme='pixel-marble'] {\r\n --px-wood-darkest: #161C26;\r\n --px-wood-dark: #1F2836;\r\n --px-wood-mid: #2A3548;\r\n --px-wood-warm: #354258;\r\n --px-wood-light: #5C708C;\r\n --px-wood-pale: #AEBCCB;\r\n --px-text-on-dark: #E9F0F7;\r\n --px-text-light: #AEBCCB;\r\n --px-parchment: #E9F0F7;\r\n --px-gold: #7FB2E5;\r\n --px-gold-bright: #A9D1F2;\r\n --px-gold-dark: #5A88B8;\r\n --px-gold-deep: #3C5A7A;\r\n --px-sidebar-fill: #121821;\r\n --px-line: #0D1219;\r\n --px-accent-bg: #7FB2E5;\r\n --px-accent-hover: #9CC6EE;\r\n --px-accent-ink: #121A24;\r\n --px-input-bg: #E8EFF2;\r\n --px-input-text: #1B2230;\r\n --px-input-ph: #5A6B80;\r\n --px-input-caret: #5A88B8;\r\n --px-tooltip-bg: #1B2230;\r\n --px-code-bg: #1F2836;\r\n --px-code-ink: #A9D1F2;\r\n --px-code-meta: #AEBCCB;\r\n --px-ink-on-mid: #E9F0F7;\r\n --px-topbar-fill: #1F2836;\r\n --px-dither: #1B2330;\r\n --pxa-panel: url(\"data:image/png;base64,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\");\r\n --pxa-panel-slice: 20 fill;\r\n --pxa-panel-width: 20px;\r\n --pxa-panel-repeat: repeat;\r\n --pxa-menu: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAz5JREFUWIWlVz9IG1Ec/p5cszm4hLrUgHSR0jooBLo0jgoVxN0/OImDi4vDDaFkcWmhOIhEukukkWZsXIRAbmhBspSAcTG85aDZTuE6XH8vv/fu3eWMH4Tk7t6973u//xEA0Or0Qhgozs0I2/1xUZybESZXcW5GODaSwvSU9s1xe+8nkvD1aesIrU4vdGwP3EpN+36ZH268u1NSmxempzQivj6fn7QSmvc0AbYTJ4l7++YVGnKA5ZV59Wx7q6R+e+2u+r3+cQHr/l+N/LzuRQL4woYcWNU2fvwaKcw8hGcRDQytSRayuoBOIOUAfelrLkgiJByfNjWCUUgUkBVEmISFxVksLM6qa9Oazt7Gkmh1eiGdxBa9T3FBGkxrSTkYWoD8VD5ciwnhgVY9Sz8xX2sSu5VazJ1KABGbQggUtRyt6yvtulzZt4riQcjRlz5i1Ymr5bj98zu2Qc4R2nXwOMy04vsPAIYWIcvxLNjbWBIOoOcsT0VObpIBwItczrgTxISMip+J1KcWQv5Jep5zRMw9SXBanV7ILcAxrGwluIefAQRW4ucg1QJeuwuv3c1UoseFA0S1GohSz+azUcWG4yEIEDyGiRkRK0Reu4vqzR2AqMHY0Lq+Qs4RY5u/etaMdUgpB2h1euGEtEQ9gcpoubKP4DHEQxBkJs3qtonywWosv5ZX5rXWOg7cSk2JSNvL2oySsuIp2N4qwa3UVEXd3YlE8Hjy2t1s3bB+cakKEbmBx4PNNRRsRNiXUW8xe4E2eFK5LB+uxbriJ/eLVuF4ZeT3OQqv3ylCm4B8fhKi/39Uur33tT6wvVVS1+d1D/WLSy21osIUISnlzJkR0NOwL30I9+i7kk+NozA9hePTplJN6ckzhrddM7fpPcAegLS+fLAqtBjgvT5tDONrzbZtktrScXenpGLDGTXzAVAjlc2ktiEjqbtyy9A7mbKANqze3D27PphwTo42tThIg2luClYbstaS2ETEQX62BSEQmZSLGjXQkgu4aOUC079ZazmvbFTtCLY50rSYGsnMv1nHp02cHG0KAPj67WcmF5lzpK27kmtoBFAW6Etf8xuP2L2NJQEAZqxkiR+z2dFhqM78A9t9tgHLgs7zAAAAAElFTkSuQmCC\");\r\n --pxa-menu-slice: 12 fill;\r\n --pxa-menu-width: 12px;\r\n --pxa-menu-repeat: repeat;\r\n --pxa-button: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAZRJREFUaIHtmjFOwzAUhn8HBpZGSVWpuQALMwsXIRdA7Q1oszEgNWkXZtQeoN24FZUQRHRhKwN6KIpi+1kqvCHvG+3/fbbs2EmlAoqiKEpfMe2G14/PY7stS2Pj6m9n2xmq99X6xupy2+ptOZvD57bNy1XnWguCvbDKaaGNYD+ZyunJ0thE0pPoO947Vflb9AQIoxsgjL6EhdETIEiWxibSp18WPQHC6GeoMHoChNENEEY/Q4XRd4AwegUJoxsgSJbGRq8gYfQECKMbIEw0TgbSc+gt42SAs6+Lq4eb60vpufSSx6eXnytIT8H/Q2tuAGC22B7L+S0AYF8frOGuPpt8Xx+8dSFecvoyBNfpynPGbHo4DsrOyx2qIjfn1DEvdwAA2ogmd/fPAID1cuKdDOXXy4m3LsRLTl+G4Dpdec6YTQ/HQetM/P4xa7bYWn8PvL3XAIDRMPFOhvKjYeKtC/GS05chuE5XnjNm0xPiqIrcAI3P0KrIDTW22aymZrOadvbZ8py6EC8nR74Qpysf6uE42uv8Dc6z5hxuhT2FAAAAAElFTkSuQmCC\");\r\n --pxa-button-hover: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAZNJREFUaIHtmjFOw0AQRf8uFDS27CiSfQEaahouQi4QJTcITkeBhJM01FFyANJxKwoEiIoOimgky+CdWZQwheeVu3/+Tma867UUhxbPbx9f7bEyT11ovq1tayiei+XW+s27K75L1+XBeXflFYoL1YIQF9Y4LNQI8ZNpHJ4yT53XTqLvsGeqcVxsByhjDVDGXsLK2A5QpMxT5+3p18V2gDJ2DVXGdoAy1gBl7BqqjL0DlLEjSBlrgCJlnjo7gpSxHaCMNUAZX2SJdg69pcgSnHyeXdxeXZ5r59JL7h6e9keQ7YL/h2ruAaCqdyiypLMRobmQORcX4yvRkV+MJ/e7Y3wkHqSt6h0A4JQmaKCurn+YjGdrAMBmORElNJ6tsVlO2LgYX/LkNITUM6SXrNn0kXhQnQl3c//Ifge8vL4DAIaDjE2G9MNBxsbF+JKnJM8Yz5BesmbT5y8edg1Vxi/mI8fLjGOwmI/sn3HaeGDfCe1E+gbV3DcHuhqxXU3ddjUVN4m0XFyMr0RHfjGeIX2sj8SjXedvMgbJ/79aVMIAAAAASUVORK5CYII=\");\r\n --pxa-button-active: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAZNJREFUaIHtmjFOw0AQRf8uFDS27CiSfQEaahouQi4QJTcITkeBhJM01FFyANJxKwoEiIoOimgky+CdWZQwheeVu3/+Tma867UUhxbPbx9f7bEyT11ovq1tayiei+XW+s27K75L1+XBeXflFYoL1YIQF9Y4LNQI8ZNpHJ4yT53XTqLvsGeqcVxsByhjDVDGXsLK2A5QpMxT5+3p18V2gDJ2DVXGdoAy1gBl7BqqjL0DlLEjSBlrgCJlnjo7gpSxHaCMNUAZX2SJdg69pcgSnHyeXdxeXZ5r59JL7h6e9keQ7YL/h2ruAaCqdyiypLMRobmQORcX4yvRkV+MJ/e7Y3wkHqSt6h0A4JQmaKCurn+YjGdrAMBmORElNJ6tsVlO2LgYX/LkNITUM6SXrNn0kXhQnQl3c//Ifge8vL4DAIaDjE2G9MNBxsbF+JKnJM8Yz5BesmbT5y8edg1Vxi/mI8fLjGOwmI/sn3HaeGDfCe1E+gbV3DcHuhqxXU3ddjUVN4m0XFyMr0RHfjGeIX2sj8SjXedvMgbJ/79aVMIAAAAASUVORK5CYII=\");\r\n --pxa-button-slice: 5 8 6 8 fill;\r\n --pxa-button-width: 5px 6px 6px 6px;\r\n --pxa-button-ink: #1B2230;\r\n --pxa-button-hover-ink: #1B2230;\r\n --pxa-icon: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAQ9JREFUWIXtV7sKwkAQnI0WNgmJCOYHbKxt/BH9AdE/8NFZCEZtrCX5AO38qxRBxcouFrLhPFw73SIZOAgz5Gayexs4oELZQTaRXu+5zYWBR5IeBh59ekfSzL3eAkib/AochDTMzRCOhrEJsX//gnoF1AOoHkJAuQJh4JFT+kNYjaF6APUxrM6A+o+oaoF+gLbvqpm3fRe1R6O77Pc6KgFW+/OrBRpVePOcrY85I73ei2VytmYvSZf2nK2POQDUOcQ8OgEAovmgCDaaHgAA8XaM0fSAeDsWv0jSbZ59GMXFhBOZyC43AECr6SO73NBq+mIASZf4zWJIgDGGm8WQmGQkuwkluwnxs+j+Rbd52+cJri7Wy++hebcAAAAASUVORK5CYII=\");\r\n --pxa-icon-slice: 6 fill;\r\n --pxa-icon-width: 6px;\r\n --pxa-input: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAOVJREFUWIVjZGBgYEgrn/O/qSKMgRCQEORjfPH+039CahgYGBgIqYMBlvL2lf/ff/hMjFqiDCXWYhhgIkUxLcDIdoCEIB/jgDrgxftP/0d2FAwuB8Rl9Q2cAx48esKwaFrRwDjg/KXrDApyMgNiOQMDAwOToZ7mgFnOwDDSCyIGhsGUDQcCjBbFow5AccCA1wUDBZjOX7rOwMDAMHCVEQMDw8itjAa8LhgtCfE6oLptOU5N1W3L4ZhYgEs9I6xzKijACxd88+4Dg4iQAFaD3rz7AGfjUoNLDzb1TAwMDANmeWdlOCMAdVNaL5kcHLkAAAAASUVORK5CYII=\");\r\n --pxa-input-slice: 6 fill;\r\n --pxa-input-width: 6px;\r\n --pxa-input-ink: #1B2230;\r\n --pxa-placeholder: #5A6B80;\r\n --pxa-caret: #5A88B8;\r\n --pxa-select: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAANBJREFUWIVjYBgFo2AUjIIBBowMDAwMaeVz/jdVhKFIPHj+noGBgYFBQVIQrxi6HLI8PvVwB6SVz/kvKMDLUJjhiWEQLQHMUSwwAXpZjG4fk6AAL10tRgdM7z98HlgHDKjtow4YFA4YzQUDajsDUkmIrcynJYAXxYICvAzo0YBeeRBTqcDUkaqX5f2Hzwx6WkoMazadwWnw42evGRgYGBhkpUTxOuDxs9cYagjpZZyycN9/ZM3IhsA0owN0eZg+YgCy2s7KcEaiNI2CUTAKaAkA7J1WLFOXtqgAAAAASUVORK5CYII=\");\r\n --pxa-select-slice: 6 fill;\r\n --pxa-select-width: 6px;\r\n --pxa-select-ink: #1B2230;\r\n --pxa-ink: #E9F0F7;\r\n --pxa-accent: #7FB2E5;\r\n --pxa-accent-bright: #A9D1F2;\r\n --pxa-hover-wash: rgba(127, 178, 229, 0.14);\r\n --pxa-tooltip-bg: #1B2230;\r\n --pxa-tooltip-ink: #E9F0F7;\r\n}\r\nhtml[data-pixel-theme='pixel-marble'] body {\r\n background-color: var(--px-wood-darkest);\r\n background-image: repeating-conic-gradient(rgba(127, 178, 229, 0.035) 0 25%, transparent 0 50%);\r\n background-size: 4px 4px;\r\n}\r\n\r\n/* 秘银:靛紫底 + 银蓝薄框 + 紫高光。96×96 的 Frame_Standard 银边只在左右,\r\n * 做对话框像幕布;这里统一用 32×32 Frame_Lite 的 6px 四边薄框。 */\r\nhtml[data-pixel-theme='pixel-mithril'] {\r\n --px-wood-darkest: #120E24;\r\n --px-wood-dark: #1A1430;\r\n --px-wood-mid: #241C42;\r\n --px-wood-warm: #2E2552;\r\n --px-wood-light: #4A3F7A;\r\n --px-wood-pale: #BDB4E0;\r\n --px-text-on-dark: #F0ECFF;\r\n --px-text-light: #BDB4E0;\r\n --px-parchment: #F0ECFF;\r\n --px-gold: #B49BFF;\r\n --px-gold-bright: #D3C4FF;\r\n --px-gold-dark: #8A6FE0;\r\n --px-gold-deep: #5A4A9A;\r\n --px-sidebar-fill: #0F0B1E;\r\n --px-line: #0B0817;\r\n --px-accent-bg: #B49BFF;\r\n --px-accent-hover: #C9B6FF;\r\n --px-accent-ink: #1A1030;\r\n --px-input-bg: #646C79;\r\n --px-input-text: #FFFFFF;\r\n --px-input-ph: #F2F5FF;\r\n --px-input-caret: #D3C4FF;\r\n --px-tooltip-bg: #171129;\r\n --px-code-bg: #171129;\r\n --px-code-ink: #D3C4FF;\r\n --px-code-meta: #BDB4E0;\r\n --px-ink-on-mid: #F0ECFF;\r\n --px-topbar-fill: #1A1430;\r\n --px-dither: #1E1738;\r\n --pxa-panel: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAexJREFUWIXFVzGvgjAQ/uAxmjgQCIs4OzgaB/+CP5e/wEAYGZiBhUAcTBw1vMF39Vpa0ReLX+Jg73p3vV6/4xwwbPbHARqUWeK8o/OOnsOV4zAAAKzWEZqqBQDUXS8ZiMMAq3Uk/jdVO9JR9XS2KBBnsz8O3DEApHmBw24rGWyqVnL8CtQ99J8H7XHHPNo0L146DclMGSPUXS8ORbbqrr8HwJ3XXY/L+STWFksfddePDJNOrTjV7dVhtY7GAZDzH+9RJ9wgB+mo8md76Wr5FbgkpBTqHOl+JvmzvZfzCWleiCsos8QRAZhSZRsigMNuizgMsFj6uF21T/ijiMMAm/1xcAFz+m2BP09Xtzgn3DJLnLrrv+IcgPwMOfnYBC94VxWqPPBJ0FMEHmzomrqWDdyuAxZLXzQ94C8DauOxDV5vk0xoC+TvK0yo5YE5mZC3b4kJbXIBFeDb3dAGpG5ITDgn+GFFBlbraBYmVHvOrEwIyN+Soh3PAU7DHF8pQn4NnqkXmLiArmeKK55dIy96D5C/+2vc62Cx9LWbKY0muarHQY2IE5E0mPAgKDC+3lStkOnkpMNtcOianhjNVBZM82IUrTodmZiTmG5qvEvz4jGc6k6jBmSCaa86uJIerZVZ4kyO3QR1rP7PPtLla7+860qJT47YMQAAAABJRU5ErkJggg==\");\r\n --pxa-panel-slice: 6 fill;\r\n --pxa-panel-width: 6px;\r\n --pxa-panel-repeat: stretch;\r\n --pxa-menu: var(--pxa-panel);\r\n --pxa-menu-slice: 6 fill;\r\n --pxa-menu-width: 6px;\r\n --pxa-menu-repeat: stretch;\r\n --pxa-button: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAActJREFUaIHtmsFuwjAMhp2uD7DLGBIDzkhwrEDiFXio7Z36CpWocixSpd22adK07b4jO0xmaZKWZCx1BP6OsfM3smli6ghoYbbc7AEA6jIXtnGbrWtu7Hqn6vqsUcVwRtbZAgpZGRPW2QIAwGrrmhu73qm6PmsE+E2KAPgJPj6A6YdCVlCXuUjbjDpd2fTxodQLpenqa/uRp/rWU8jK6ojiXW+Kiw+lXihNV189trPlZp+qk9Bhlc1bRbpsPj6UeqE0XXwxxvjGNM4AlwQwf2crd4cY4xmQUC/q0uEEEJPohzDTH7PlZp8ANE/uQlawlTuyRZ0ruP8jGPPGFsR/xsKjx/jq8/Xx4Utc309Gt1wFBeRuNIAEBBSyAow1V0ERwAkghhNADJehhHAZ2iOtZWhd5sLnqx9zGuqHT6MK4jI0HKtsbu0Z8CFMDCeAGK8qaCt3Tgd07H7UmojRETvW13Ttj8buR6WptiStHbFjQv/d+Kbyo9LUY1yXueBrKUQYZejL0xvlei4KNdapzTCeDg1HdbzLpo6rY+PpMGo93Ref4TPH59nIYQuaDG4MIxOO5/cP7gfEQONyLr8F/YC/fgAlAQDmDWkmDOp19W+opr3bUvZHnwAAAABJRU5ErkJggg==\");\r\n --pxa-button-hover: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAbhJREFUaIHtmsFOg0AQhv/FPoAXa5Pa9tykPRKa9BX6UPpOvAJJyR4hIfGmxsSod494MGOWZaGLCkPsfMfdf382s8AOzAKCIAhsqKaOdXQoAaBIY+Vqd/W1jR2739DzJGpCYh9ukeisNmAfbgHA2dc2dux+Q8+TFkQBX8GnCwjDkOgMRRqrSVOnTdtd00XD6deXp6/WdZNP7FdPojOnkMzbnhQfDadfX56+Wju26+hQTsxBJNiFm0aTtr4uGk6/vjx9tBRjemIqe4DPAgg/56jz7xjTHhBwT+rckQVgJrA3YWE41tGhDIDqzp3oDEeds03qv0Lvf4JiXnkFycdY/9gxvnh/vr/7UJe3y/m1ZEE9cjOfIoBCojNQrCULGgGyAMzIAjAjaSgjkoYOSGMaWqSx6vLXT/gd5o/PWhYkaWh/7MKNs2YgmzAzsgDMdMqCjjr32qDHruP2JGoVsVN1Td/66Nh1XJ5mSdJZETtl9NeFby4dl6cd4yKNlRxLYaKWhj49vHDO56wwY105GbecXgEAFqtZTWi2t/WZ7WbbYjUbtZ+tpWt0GeN77cfXt+rJOEL+Cw2DeU70E2+ktChGMXYMAAAAAElFTkSuQmCC\");\r\n --pxa-button-active: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAAAgCAYAAADtwH1UAAAAAXNSR0IArs4c6QAAAbxJREFUaIHtmrFugzAQhs+UB+jSNFKaZEZKRkSkvAIP1b4Tr4AE8ggSUre2qlS13TvSobrK2IaYNnAo3Df6fv9YZ8AHNgDDzBnRFgiiuAYAqPJE2Nptsa6+U/cbe5yIIUSO4R5SWRgdjuEeAMAa6+o7db+xx4kTIgB+ko8XYMYhlQVUeSL8tqBO113TR0PpN5Snq9Z2k/v6qyeVhVWI5l1PiouG0m8oT1etntsgimtf7YSCQ7hrNemK9dFQ+g3l6aLFHOMT01gDXCaA+TuZLH9zjGuARz2oucMTQIynL8LMeARRXHsAzZU7lQVksiQb1KWC738Ec954BfHH2PDoOb76fH18+BLX95vVLVdBA3K3WoAHAlJZAOaaq6AJwBNADE8AMVyGEsJl6Ii0lqFVnog+f/2Y/6H++DSqIC5Dh+MQ7qx7BrwIE8MTQEyvKiiTpdMCPXUdtSdi7Iid2td03R+duo7KU92StO6InTI698Y3lY7KU89xlSeCj6UQYZShL09vlOOZFWqufVtgvV0aQrW9K6a2q23r7XLSfroWr9GnT59rI42jiZvFjSFgzs/z+0fzaCLCP+bGQT2o+w3agrbYSKXf0wAAAABJRU5ErkJggg==\");\r\n --pxa-button-slice: 6 6 10 6 fill;\r\n --pxa-button-width: 6px 6px 9px 6px;\r\n --pxa-button-ink: #12101E;\r\n --pxa-button-hover-ink: #12101E;\r\n --pxa-icon: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAVlJREFUWIXlV02ugkAM7ky4gsbNe65JdEkw8QoclyuQQGYJCWt1Y/QQuHivpDN2fgjCLPx2tJ1+tfSTjgAL0rwYAAD6phScnfO5ztryvQUgztkRKtW+JT9nRwAA1uc6a9qwEIHkmHgtVKqFvilFYnOasHVkSoz5I9O8GAS2nraW6wYmdnXKF2PmrlQLCUd+yg5WEpcvJAY5xlfwPwzeGZhLbIOcfOLDiFpAmheDNPW/FGrVaQrBVy7pA8DfkNSqW6wQOvB9UwrJOZfAKTuw/xOyb0qBxhAZfhrxhzAWuTaEMRFNhpoKYsgQoakgigzpw9oy/G4VjEM4RQW16rwDGhJDoW1Evp3OtxP6Yrh1j92KbUnmLqYmh3UrdskxRKpT5DwO4e1yDz40F5Qr4Rw/+x1bFNpdPmp3xbMF+IJdXeJ8IV2N/jXULqe/280qpNfHU7+c0iLWKIBe0V+Hve4WMcTm8AAAAABJRU5ErkJggg==\");\r\n --pxa-icon-slice: 6 fill;\r\n --pxa-icon-width: 6px;\r\n --pxa-input: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAYFJREFUWIXlV81Kw0AQ/rKKIoQogYRckpx9Al/Cx+1L9Al6Nl4kgYKlKopQD2HCZDa72bbJRuh3aWFnvpnMzs9OAAMen54PALBZrwKTzJC81Bnj0QQ5wijGfrfVlIhM6oRRDACazhAPcXREpDwGTuSqY+LZrFfBtYsxbshk9FTHNAdkqIo0QVU3TmRFmgCAVV46NxgBIgKAvMycjLvIDjlmvAJOdowTJvnXlzcAbYR5FBTQZuRQtk+JvMx6kQXa5Ff0Z1braCNQ1U339fSrSOCckjoFVIZqXHRe9BzY77Yo0uTopJvMAV/gCa9kAlZ105XMnKBZoABomekTykcPkAijuCv9/1UFF+EAv+6uFfuAnAVaKwaWaURXlI03t3f4+f7C+8cngt8D7h/CSQ3JYdSbBYv2Ae8WpQNLNCKC1yqQoOs2vglNAykvM+uZTZfDuheMPcPPPefQHBirBCIfkuOGXSvKaTPihJxYbk7SqMu2ZF1OTUsoP7e9qG36rlv37PgDpinFryEHyfIAAAAASUVORK5CYII=\");\r\n --pxa-input-slice: 6 fill;\r\n --pxa-input-width: 6px;\r\n --pxa-input-ink: #FFFFFF;\r\n --pxa-placeholder: #F2F5FF;\r\n --pxa-caret: #D3C4FF;\r\n --pxa-select: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAbFJREFUWIXtV6GOwkAQfbtB1RNwDQhCSM5UnMGcqSPBofgCPogvQJ0jwZ3BYBBnSAhBQOog+NqeaGaZXXrbvYMthpeQdFh23qM7szMjgiAAAHT7gwwO2K0Wwrb+Vz8iCAK1aTIeYrs/oNdpqx9yezqbW0XY/HBf3I+I4pG2qQzL9cYq4OP9rdQHF1ErIk+SEwAgDJvqGQCO54uTwFajrmzuIwybAPI3MRkPMZ3NcwEcSXJSREWEthjYrRai2x9kfJ/pg0QQNAGcvCzYbCK4naYpACCKR0pYGDbVG5cAbs7+v+Q2fH99aj4pQCU3zNdTBSQ3eMD5Ag9EJcAl/R4F+pOFR/AMSOB6w7nk+b0gDuLUrmLg8RlAaUigmxfIM0NQMfIFU4AJaV2tAC8BLwE1AF7T0ISZhpLIqZNx7enuISeuKB5lEsg7IgBaJ+MLxEGclRcjglYNqyxGVI61amgu+oTZc1TekBCsDYmPTODpB1yPoEbGdn9QR3A8X34Vcc9o1mrU7W05cBsHfLAgYWWjWdlgwvH00UySs+lsrs6l12lrH/puud44CTT3mc/acPrs8fwH1IMJs2mWBVMAAAAASUVORK5CYII=\");\r\n --pxa-select-slice: 6 fill;\r\n --pxa-select-width: 6px;\r\n --pxa-ink: #F0ECFF;\r\n --pxa-accent: #B49BFF;\r\n --pxa-accent-bright: #D3C4FF;\r\n --pxa-hover-wash: rgba(180, 155, 255, 0.12);\r\n --pxa-tooltip-bg: #171129;\r\n --pxa-tooltip-ink: #F0ECFF;\r\n}\r\nhtml[data-pixel-theme='pixel-mithril'] body {\r\n background-color: var(--px-wood-darkest);\r\n background-image: repeating-conic-gradient(rgba(180, 155, 255, 0.04) 0 25%, transparent 0 50%);\r\n background-size: 4px 4px;\r\n}\r\n\r\n/* ── 共用 9-slice 规则:只在素材主题生效 ─────────────────────────── */\r\n/* 便签的纸面几乎与页面同色,补 2px 墨线把「纸」钉出来;其他素材主题的\r\n * 边缘本身对比足够,--pxa-outline 不设即透明。 */\r\nhtml[data-pixel-asset] [role='dialog'],\r\nhtml[data-pixel-asset] [data-menu-material] {\r\n outline: 2px solid var(--pxa-outline, transparent);\r\n outline-offset: -2px;\r\n}\r\nhtml[data-pixel-asset] [role='dialog'] {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-panel-width, 24px) !important;\r\n border-image: var(--pxa-panel) var(--pxa-panel-slice, 24 fill) / var(--pxa-panel-width, 24px) / 0 var(--pxa-panel-repeat, stretch) !important;\r\n background: transparent !important;\r\n color: var(--pxa-ink) !important;\r\n box-sizing: border-box !important;\r\n}\r\nhtml[data-pixel-asset] [data-menu-material] {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-menu-width, 10px) !important;\r\n border-image: var(--pxa-menu) var(--pxa-menu-slice, 10 fill) / var(--pxa-menu-width, 10px) / 0 var(--pxa-menu-repeat, stretch) !important;\r\n background: transparent !important;\r\n box-sizing: border-box !important;\r\n overflow-x: hidden !important;\r\n}\r\nhtml[data-pixel-asset] [role='menu']:not([data-menu-material]) {\r\n border: 0 !important;\r\n border-image: none !important;\r\n background: transparent !important;\r\n}\r\nhtml[data-pixel-asset] [role='menuitem'] {\r\n color: var(--pxa-ink) !important;\r\n background: transparent !important;\r\n background-image: none !important;\r\n}\r\nhtml[data-pixel-asset] [role='menuitem']:hover {\r\n color: var(--pxa-accent-bright) !important;\r\n background-color: var(--pxa-hover-wash) !important;\r\n background-image: none !important;\r\n}\r\nhtml[data-pixel-asset] button[class*='primary'],\r\nhtml[data-pixel-asset] button[class*='Primary'] {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-button-width) !important;\r\n border-image: var(--pxa-button) var(--pxa-button-slice) / var(--pxa-button-width) / 0 stretch !important;\r\n background: transparent !important;\r\n color: var(--pxa-button-ink) !important;\r\n min-height: 32px;\r\n}\r\nhtml[data-pixel-asset] button[class*='primary']:hover,\r\nhtml[data-pixel-asset] button[class*='Primary']:hover {\r\n border-image-source: var(--pxa-button-hover) !important;\r\n color: var(--pxa-button-hover-ink, var(--pxa-button-ink)) !important;\r\n background: transparent !important;\r\n background-image: none !important;\r\n}\r\nhtml[data-pixel-asset] button[class*='primary']:active,\r\nhtml[data-pixel-asset] button[class*='Primary']:active {\r\n border-image-source: var(--pxa-button-active, var(--pxa-button)) !important;\r\n transform: translate(1px, 1px) !important;\r\n transition-duration: 0s !important;\r\n}\r\n/* 图标主按钮(发送/关闭):用方形图标框,绝不把横条按钮塞进方块。 */\r\nhtml[data-pixel-asset] button[class*='primary']:has(> svg:only-child),\r\nhtml[data-pixel-asset] button[class*='Primary']:has(> svg:only-child) {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-icon-width) !important;\r\n border-image: var(--pxa-icon) var(--pxa-icon-slice) / var(--pxa-icon-width) / 0 stretch !important;\r\n background: transparent !important;\r\n color: var(--pxa-button-ink) !important;\r\n min-height: 0;\r\n}\r\nhtml[data-pixel-asset] button[class*='primary']:has(> svg:only-child):hover,\r\nhtml[data-pixel-asset] button[class*='Primary']:has(> svg:only-child):hover {\r\n border-image-source: var(--pxa-icon) !important;\r\n color: var(--pxa-accent-bright) !important;\r\n}\r\nhtml[data-pixel-asset] input:not([type='checkbox']):not([type='radio']):not([type='range']),\r\nhtml[data-pixel-asset] textarea,\r\nhtml[data-pixel-asset] [contenteditable='true'] {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-input-width, 8px) !important;\r\n border-image: var(--pxa-input) var(--pxa-input-slice, 10 fill) / var(--pxa-input-width, 8px) / 0 stretch !important;\r\n background: transparent !important;\r\n color: var(--pxa-input-ink) !important;\r\n caret-color: var(--pxa-caret) !important;\r\n box-sizing: border-box !important;\r\n}\r\nhtml[data-pixel-asset] input::placeholder,\r\nhtml[data-pixel-asset] textarea::placeholder {\r\n color: var(--pxa-placeholder) !important;\r\n -webkit-text-fill-color: var(--pxa-placeholder) !important;\r\n opacity: 1;\r\n}\r\nhtml[data-pixel-asset] [contenteditable='true']:empty::before {\r\n color: var(--pxa-placeholder) !important;\r\n -webkit-text-fill-color: var(--pxa-placeholder) !important;\r\n}\r\nhtml[data-pixel-asset] [role='menuitem'][aria-current='page'],\r\nhtml[data-pixel-asset] [role='treeitem'][aria-selected='true'] {\r\n border: 0 solid transparent !important;\r\n border-width: var(--pxa-select-width, 8px) !important;\r\n border-image: var(--pxa-select) var(--pxa-select-slice, 10 fill) / var(--pxa-select-width, 8px) / 0 stretch !important;\r\n background: transparent !important;\r\n background-image: none !important;\r\n color: var(--pxa-select-ink, var(--pxa-ink)) !important;\r\n box-sizing: border-box !important;\r\n}\r\n/* 浮层只换颜色:2px 主题色边 + 实色底,不套面板图。 */\r\nhtml[data-pixel-asset] [role='tooltip'] {\r\n border: 2px solid var(--pxa-accent) !important;\r\n border-image: none !important;\r\n background-color: var(--pxa-tooltip-bg) !important;\r\n color: var(--pxa-tooltip-ink) !important;\r\n}\r\nhtml[data-pixel-asset] [role='alert'] {\r\n border: 2px solid var(--pxa-accent) !important;\r\n border-left: 4px solid var(--pxa-accent) !important;\r\n border-image: none !important;\r\n background-color: var(--pxa-tooltip-bg) !important;\r\n color: var(--pxa-tooltip-ink) !important;\r\n}\r\nhtml[data-pixel-asset] [role='dialog'] button:not(:disabled):not([class*='primary']):not([class*='Primary']):hover {\r\n background-color: var(--pxa-hover-wash) !important;\r\n}\r\nhtml[data-pixel-asset] [role='tab']::after {\r\n background: var(--pxa-accent) !important;\r\n}\r\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BA,mBAAmC;AACnC,8BAA4B;;;AC/B5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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",
6
6
  "names": ["h", "host"]
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-pixel-ui",
3
- "version": "1.9.0",
4
- "description": "DSH 像素皮肤:Agent Xi 风格八主题(木屋/羊皮纸/暖阳/终端绿/全息/南瓜灯/便签本/云石)+ fusion-pixel/Press Start 2P 像素字体;四套真素材主题用 Complete UI 的 9-slice PNG(构建期内联,离线可用),其余四套完全平面、阶梯像素动效、内容列宽随视口撑开;宿主侧记忆主题选择,桌面端 dsh-app:// 也能恢复",
3
+ "version": "1.10.0",
4
+ "description": "DSH 像素皮肤:Agent Xi 风格九主题(木屋/羊皮纸/暖阳/终端绿/全息/南瓜灯/便签本/云石/秘银)+ fusion-pixel/Press Start 2P 像素字体;五套真素材主题用 Complete UI 的 9-slice PNG(构建期内联,离线可用),其余四套完全平面、阶梯像素动效、内容列宽随视口撑开;宿主侧记忆主题选择,桌面端 dsh-app:// 也能恢复",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "files": [