dsh-remote-plugin 0.6.18 → 0.6.20

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.
@@ -1,5 +1,5 @@
1
- /* DSH Remote · 移动优先 · 四皮肤(默认深空/深色落日/亮色易北爱乐厅/中性草原孤塔)
2
- * 统一 --dsr-* 变量; 主题由 <html data-theme="dark|light|neutral"> 驱动, theme.js 持久化。
1
+ /* DSH Remote · 移动优先 · 五皮肤(默认深空/深色落日/亮色易北爱乐厅/中性草原孤塔/黑曜白)
2
+ * 统一 --dsr-* 变量; 主题由 <html data-theme="default|dark|light|neutral|mono"> 驱动, theme.js 持久化。
3
3
  * 红绿色弱友好原则: 状态语义色之外, 品牌色使用蓝/青 + 橙/紫系, 避免红绿配对。 */
4
4
 
5
5
  /* ============ 通用变量 ============ */
@@ -11,14 +11,15 @@
11
11
 
12
12
  html,
13
13
  html[data-theme="default"],
14
- html[data-theme="dark"] { color-scheme: dark; }
14
+ html[data-theme="dark"],
15
+ html[data-theme="mono"] { color-scheme: dark; }
15
16
  html[data-theme="light"],
16
17
  html[data-theme="neutral"] { color-scheme: light; }
17
18
  @media (prefers-color-scheme: light) {
18
19
  html:not([data-theme]) { color-scheme: light; }
19
20
  }
20
21
 
21
- /* ============ 深空「默认」: 经典深蓝紫(保留原配色) ============ */
22
+ /* ============ 深空「默认」: 石墨中性色表面 + 单一清蓝色阶 ============ */
22
23
  :root,
23
24
  html[data-theme="default"] {
24
25
  /* 中性灰阶 0(白) → 9(近黑) */
@@ -33,27 +34,27 @@ html[data-theme="default"] {
33
34
  --dsr-neutral-8: #2B3442;
34
35
  --dsr-neutral-9: #1A212C;
35
36
 
36
- --dsr-bg: #0B0E1A;
37
- --dsr-bg-2: #101528;
38
- --dsr-panel: #151B33;
39
- --dsr-panel-2: #1B2340;
40
- --dsr-line: #263056;
41
- --dsr-divider: rgba(232, 236, 255, .16);
42
- --dsr-text: #E8ECFF;
43
- --dsr-muted: #8B94BD;
44
- --dsr-text-disabled: rgba(232, 236, 255, .45);
45
-
46
- --dsr-accent: #5B8CFF;
47
- --dsr-on-accent: #FFFFFF;
48
- --dsr-accent-strong: #6FA0FF;
49
- --dsr-accent-soft: #5B8CFF1F;
50
- --dsr-accent-line: #5B8CFF66;
51
- --dsr-accent-2: #B48CFF;
52
- --dsr-accent-2-strong: #B48CFF;
53
- --dsr-accent-2-soft: #B48CFF21;
54
- --dsr-accent-2-line: #B48CFF66;
55
- --dsr-brand-a: #5B8CFF;
56
- --dsr-brand-b: #B48CFF;
37
+ --dsr-bg: #0D1117;
38
+ --dsr-bg-2: #11161E;
39
+ --dsr-panel: #161B22;
40
+ --dsr-panel-2: #21262D;
41
+ --dsr-line: #30363D;
42
+ --dsr-divider: rgba(240, 246, 252, .14);
43
+ --dsr-text: #F0F6FC;
44
+ --dsr-muted: #A7B0BC;
45
+ --dsr-text-disabled: #6E7681;
46
+
47
+ --dsr-accent: #58A6FF;
48
+ --dsr-on-accent: #07111F;
49
+ --dsr-accent-strong: #79C0FF;
50
+ --dsr-accent-soft: #58A6FF1F;
51
+ --dsr-accent-line: #58A6FF66;
52
+ --dsr-accent-2: #A5D6FF;
53
+ --dsr-accent-2-strong: #CAEAFF;
54
+ --dsr-accent-2-soft: #A5D6FF1A;
55
+ --dsr-accent-2-line: #A5D6FF59;
56
+ --dsr-brand-a: #58A6FF;
57
+ --dsr-brand-b: #A5D6FF;
57
58
 
58
59
  --dsr-success: #4BCF7E;
59
60
  --dsr-success-soft: #4BCF7E21;
@@ -69,24 +70,24 @@ html[data-theme="default"] {
69
70
  --dsr-info-soft: #7DCFFF21;
70
71
  --dsr-info-line: #7DCFFF66;
71
72
 
72
- --dsr-head-bg: rgba(11, 14, 26, .94);
73
- --dsr-nav-bg: rgba(16, 21, 40, .94);
74
- --dsr-nav-muted: #8B94BD;
75
- --dsr-nav-active: #6FA0FF;
73
+ --dsr-head-bg: rgba(13, 17, 23, .94);
74
+ --dsr-nav-bg: rgba(22, 27, 34, .95);
75
+ --dsr-nav-muted: #A7B0BC;
76
+ --dsr-nav-active: #79C0FF;
76
77
  --dsr-nav-badge-bg: #FF9E64;
77
78
  --dsr-nav-badge-text: #1A120B;
78
- --dsr-composer-bg: rgba(11, 14, 26, .92);
79
+ --dsr-composer-bg: rgba(22, 27, 34, .94);
79
80
  --dsr-overlay: rgba(5, 7, 14, .66);
80
81
  --dsr-code-bg: rgba(0, 0, 0, .28);
81
82
  --dsr-shadow: rgba(0, 0, 0, .4);
82
- --dsr-glow: rgba(91, 140, 255, .8);
83
- --dsr-head-running-bg: linear-gradient(90deg, rgba(11, 14, 26, .94), rgba(35, 65, 150, .92), rgba(125, 207, 255, .6), rgba(35, 65, 150, .92), rgba(11, 14, 26, .94));
84
- --dsr-head-running-line: rgba(91, 140, 255, .55);
85
- --dsr-head-interrupted-bg: linear-gradient(90deg, rgba(11, 14, 26, .94), rgba(90, 26, 12, .92), rgba(255, 158, 100, .55), rgba(90, 26, 12, .92), rgba(11, 14, 26, .94));
83
+ --dsr-glow: rgba(88, 166, 255, .56);
84
+ --dsr-head-running-bg: linear-gradient(90deg, rgba(13, 17, 23, .96), rgba(24, 52, 82, .94), rgba(88, 166, 255, .45), rgba(24, 52, 82, .94), rgba(13, 17, 23, .96));
85
+ --dsr-head-running-line: rgba(88, 166, 255, .55);
86
+ --dsr-head-interrupted-bg: linear-gradient(90deg, rgba(13, 17, 23, .96), rgba(74, 34, 23, .92), rgba(255, 158, 100, .48), rgba(74, 34, 23, .92), rgba(13, 17, 23, .96));
86
87
  --dsr-head-interrupted-line: rgba(255, 158, 100, .55);
87
88
  }
88
89
 
89
- /* ============ 深色「落日」: 深钴蓝底 + 琥珀橙强调 ============ */
90
+ /* ============ 深色「落日」: 暖炭色表面 + 琥珀珊瑚同系强调 ============ */
90
91
  html[data-theme="dark"] {
91
92
  /* 中性灰阶 0(白) → 9(近黑) */
92
93
  --dsr-neutral-0: #FFFFFF;
@@ -101,36 +102,36 @@ html[data-theme="dark"] {
101
102
  --dsr-neutral-9: #1A212C;
102
103
 
103
104
  /* 表面与文字 */
104
- --dsr-bg: #05348B;
105
- --dsr-bg-2: #0B3E86;
106
- --dsr-panel: #0D438F;
107
- --dsr-panel-2: #164E9E;
108
- --dsr-line: #2E5A8C;
109
- --dsr-divider: rgba(255, 255, 255, .16);
110
- --dsr-text: #FFFFFF;
111
- --dsr-muted: rgba(255, 255, 255, .85);
112
- --dsr-text-disabled: rgba(255, 255, 255, .48);
105
+ --dsr-bg: #161316;
106
+ --dsr-bg-2: #1D1819;
107
+ --dsr-panel: #251D1D;
108
+ --dsr-panel-2: #302323;
109
+ --dsr-line: #4A3532;
110
+ --dsr-divider: rgba(255, 244, 230, .15);
111
+ --dsr-text: #FFF4E6;
112
+ --dsr-muted: #D2BEB0;
113
+ --dsr-text-disabled: #8E7B73;
113
114
 
114
115
  /* 品牌强调(琥珀橙)与点缀(米色) */
115
- --dsr-accent: #F9A647;
116
+ --dsr-accent: #FFB86B;
116
117
  --dsr-on-accent: #1A120B;
117
- --dsr-accent-strong: #F9A647;
118
- --dsr-accent-soft: #F9A64721;
119
- --dsr-accent-line: #F9A64766;
120
- --dsr-accent-2: #EDCFAB;
121
- --dsr-accent-2-strong: #EDCFAB;
122
- --dsr-accent-2-soft: #EDCFAB21;
123
- --dsr-accent-2-line: #EDCFAB66;
124
- --dsr-brand-a: #F9A647;
125
- --dsr-brand-b: #EDCFAB;
126
-
127
- /* 状态色(WCAG 对比度按深钴蓝底校准) */
118
+ --dsr-accent-strong: #FFD08A;
119
+ --dsr-accent-soft: #FFB86B1F;
120
+ --dsr-accent-line: #FFB86B70;
121
+ --dsr-accent-2: #FF8A65;
122
+ --dsr-accent-2-strong: #FFA083;
123
+ --dsr-accent-2-soft: #FF8A651F;
124
+ --dsr-accent-2-line: #FF8A6566;
125
+ --dsr-brand-a: #FFB86B;
126
+ --dsr-brand-b: #FF8A65;
127
+
128
+ /* 状态色(WCAG 对比度按暖炭底校准) */
128
129
  --dsr-success: #7EE2A8;
129
130
  --dsr-success-soft: #7EE2A821;
130
131
  --dsr-success-line: #7EE2A866;
131
- --dsr-warning: #F9A647;
132
- --dsr-warning-soft: #F9A64721;
133
- --dsr-warning-line: #F9A64766;
132
+ --dsr-warning: #FFB86B;
133
+ --dsr-warning-soft: #FFB86B21;
134
+ --dsr-warning-line: #FFB86B66;
134
135
  --dsr-on-warning: #1A120B;
135
136
  --dsr-error: #FFB4A6;
136
137
  --dsr-error-soft: #FFB4A624;
@@ -140,24 +141,24 @@ html[data-theme="dark"] {
140
141
  --dsr-info-line: #7DCFFF66;
141
142
 
142
143
  /* 悬浮/遮罩/特殊表面 */
143
- --dsr-head-bg: rgba(4, 32, 90, .94);
144
- --dsr-nav-bg: rgba(7, 38, 104, .94);
145
- --dsr-nav-muted: rgba(255, 255, 255, .85);
146
- --dsr-nav-active: #F9A647;
147
- --dsr-nav-badge-bg: #F9A647;
144
+ --dsr-head-bg: rgba(22, 19, 22, .95);
145
+ --dsr-nav-bg: rgba(37, 29, 29, .96);
146
+ --dsr-nav-muted: #D2BEB0;
147
+ --dsr-nav-active: #FFD08A;
148
+ --dsr-nav-badge-bg: #FFB86B;
148
149
  --dsr-nav-badge-text: #1A120B;
149
- --dsr-composer-bg: rgba(5, 42, 110, .92);
150
- --dsr-overlay: rgba(2, 10, 32, .66);
150
+ --dsr-composer-bg: rgba(37, 29, 29, .95);
151
+ --dsr-overlay: rgba(12, 7, 8, .74);
151
152
  --dsr-code-bg: rgba(0, 0, 0, .28);
152
153
  --dsr-shadow: rgba(0, 0, 0, .4);
153
- --dsr-glow: rgba(249, 166, 71, .55);
154
- --dsr-head-running-bg: linear-gradient(90deg, rgba(4, 32, 90, .94), rgba(30, 77, 123, .92), rgba(125, 207, 255, .55), rgba(30, 77, 123, .92), rgba(4, 32, 90, .94));
155
- --dsr-head-running-line: rgba(249, 166, 71, .55);
156
- --dsr-head-interrupted-bg: linear-gradient(90deg, rgba(4, 32, 90, .94), rgba(90, 26, 12, .92), rgba(255, 180, 166, .55), rgba(90, 26, 12, .92), rgba(4, 32, 90, .94));
154
+ --dsr-glow: rgba(255, 184, 107, .46);
155
+ --dsr-head-running-bg: linear-gradient(90deg, rgba(22, 19, 22, .96), rgba(94, 49, 34, .94), rgba(255, 184, 107, .45), rgba(94, 49, 34, .94), rgba(22, 19, 22, .96));
156
+ --dsr-head-running-line: rgba(255, 184, 107, .58);
157
+ --dsr-head-interrupted-bg: linear-gradient(90deg, rgba(22, 19, 22, .96), rgba(94, 38, 31, .94), rgba(255, 138, 101, .45), rgba(94, 38, 31, .94), rgba(22, 19, 22, .96));
157
158
  --dsr-head-interrupted-line: rgba(255, 180, 166, .55);
158
159
  }
159
160
 
160
- /* ============ 亮色「易北爱乐厅」: 米白底 + 沙金强调 ============ */
161
+ /* ============ 亮色「易北爱乐厅」: 玻璃白表面 + 易北青蓝单色阶 ============ */
161
162
  html[data-theme="light"] {
162
163
  --dsr-neutral-0: #FFFFFF;
163
164
  --dsr-neutral-1: #FAF9F7;
@@ -170,28 +171,28 @@ html[data-theme="light"] {
170
171
  --dsr-neutral-8: #3F3C37;
171
172
  --dsr-neutral-9: #2B2B2B;
172
173
 
173
- --dsr-bg: #EFEEEC;
174
- --dsr-bg-2: #E5E1D9;
175
- --dsr-panel: #FAF8F5;
174
+ --dsr-bg: #F5F7F8;
175
+ --dsr-bg-2: #E8EDF0;
176
+ --dsr-panel: #FFFFFF;
176
177
  --dsr-panel-2: #FFFFFF;
177
- --dsr-line: #D8D2C6;
178
- --dsr-divider: rgba(43, 43, 43, .12);
179
- --dsr-text: #2B2B2B;
180
- --dsr-muted: #6E6A63;
181
- --dsr-text-disabled: #A8A39A;
182
-
183
- /* 沙金(填充/按钮) + 深沙金(小字号文字) + 浅桃粉(点缀) */
184
- --dsr-accent: #E6BC7B;
185
- --dsr-on-accent: #2B2B2B;
186
- --dsr-accent-strong: #7A5A24;
187
- --dsr-accent-soft: #E6BC7B40;
188
- --dsr-accent-line: #C89A4E66;
189
- --dsr-accent-2: #6E5A8C;
190
- --dsr-accent-2-strong: #6E5A8C;
191
- --dsr-accent-2-soft: #6E5A8C1F;
192
- --dsr-accent-2-line: #6E5A8C59;
193
- --dsr-brand-a: #E6BC7B;
194
- --dsr-brand-b: #EDD4C2;
178
+ --dsr-line: #C7D2D8;
179
+ --dsr-divider: rgba(24, 33, 38, .13);
180
+ --dsr-text: #182126;
181
+ --dsr-muted: #52616A;
182
+ --dsr-text-disabled: #7B8990;
183
+
184
+ /* 深青蓝负责交互,同色阶浅青蓝负责柔和强调;铜色仅用于品牌点缀。 */
185
+ --dsr-accent: #176B87;
186
+ --dsr-on-accent: #FFFFFF;
187
+ --dsr-accent-strong: #0F5268;
188
+ --dsr-accent-soft: #176B871A;
189
+ --dsr-accent-line: #176B8759;
190
+ --dsr-accent-2: #4B879C;
191
+ --dsr-accent-2-strong: #2E6E84;
192
+ --dsr-accent-2-soft: #4B879C1A;
193
+ --dsr-accent-2-line: #4B879C59;
194
+ --dsr-brand-a: #176B87;
195
+ --dsr-brand-b: #B8613E;
195
196
 
196
197
  --dsr-success: #237A46;
197
198
  --dsr-success-soft: #237A461A;
@@ -207,24 +208,24 @@ html[data-theme="light"] {
207
208
  --dsr-info-soft: #2563C01A;
208
209
  --dsr-info-line: #2563C059;
209
210
 
210
- --dsr-head-bg: rgba(239, 238, 236, .94);
211
- --dsr-nav-bg: rgba(250, 248, 245, .94);
212
- --dsr-nav-muted: #6E6A63;
213
- --dsr-nav-active: #7A5A24;
211
+ --dsr-head-bg: rgba(245, 247, 248, .96);
212
+ --dsr-nav-bg: rgba(255, 255, 255, .96);
213
+ --dsr-nav-muted: #52616A;
214
+ --dsr-nav-active: #0F5268;
214
215
  --dsr-nav-badge-bg: #965A0B;
215
216
  --dsr-nav-badge-text: #FFFFFF;
216
- --dsr-composer-bg: rgba(250, 248, 245, .92);
217
- --dsr-overlay: rgba(43, 43, 43, .4);
217
+ --dsr-composer-bg: rgba(255, 255, 255, .95);
218
+ --dsr-overlay: rgba(24, 33, 38, .42);
218
219
  --dsr-code-bg: rgba(0, 0, 0, .06);
219
- --dsr-shadow: rgba(43, 43, 43, .18);
220
- --dsr-glow: rgba(198, 154, 78, .45);
221
- --dsr-head-running-bg: linear-gradient(90deg, rgba(239, 238, 236, .94), rgba(230, 188, 123, .45), rgba(255, 255, 255, .65), rgba(230, 188, 123, .45), rgba(239, 238, 236, .94));
222
- --dsr-head-running-line: rgba(122, 90, 36, .55);
223
- --dsr-head-interrupted-bg: linear-gradient(90deg, rgba(239, 238, 236, .94), rgba(183, 66, 63, .18), rgba(255, 255, 255, .65), rgba(183, 66, 63, .18), rgba(239, 238, 236, .94));
220
+ --dsr-shadow: rgba(24, 33, 38, .17);
221
+ --dsr-glow: rgba(23, 107, 135, .35);
222
+ --dsr-head-running-bg: linear-gradient(90deg, rgba(245, 247, 248, .96), rgba(75, 135, 156, .26), rgba(255, 255, 255, .82), rgba(75, 135, 156, .26), rgba(245, 247, 248, .96));
223
+ --dsr-head-running-line: rgba(23, 107, 135, .58);
224
+ --dsr-head-interrupted-bg: linear-gradient(90deg, rgba(245, 247, 248, .96), rgba(183, 66, 63, .18), rgba(255, 255, 255, .82), rgba(183, 66, 63, .18), rgba(245, 247, 248, .96));
224
225
  --dsr-head-interrupted-line: rgba(183, 66, 63, .55);
225
226
  }
226
227
 
227
- /* ============ 中性「草原孤塔」: 鼠尾草底 + 橄榄绿块 + 陶土红点缀(莫兰迪自然系) ============ */
228
+ /* ============ 中性「草原孤塔」: 高明度鼠尾草表面 + 林地绿单色阶 ============ */
228
229
  html[data-theme="neutral"] {
229
230
  --dsr-neutral-0: #FFFFFF;
230
231
  --dsr-neutral-1: #FAF7EE;
@@ -237,28 +238,28 @@ html[data-theme="neutral"] {
237
238
  --dsr-neutral-8: #454133;
238
239
  --dsr-neutral-9: #2B2B2B;
239
240
 
240
- --dsr-bg: #DDD4B8;
241
- --dsr-bg-2: #D2C9AC;
242
- --dsr-panel: #E6DFC8;
243
- --dsr-panel-2: #F1EDDF;
244
- --dsr-line: #B8AF91;
245
- --dsr-divider: rgba(43, 43, 43, .14);
246
- --dsr-text: #2B2B2B;
247
- --dsr-muted: #5E5A45;
248
- --dsr-text-disabled: #9A937C;
241
+ --dsr-bg: #EEF1E8;
242
+ --dsr-bg-2: #E2E8DB;
243
+ --dsr-panel: #FAFBF6;
244
+ --dsr-panel-2: #FFFFFF;
245
+ --dsr-line: #C2CCB7;
246
+ --dsr-divider: rgba(31, 40, 28, .13);
247
+ --dsr-text: #1F281C;
248
+ --dsr-muted: #4E5D49;
249
+ --dsr-text-disabled: #768171;
249
250
 
250
251
  /* 橄榄军绿 = 主色(按钮/开关/底部导航块); 陶土砖红 = 强调(徽标/图标/链接) */
251
- --dsr-accent: #585818;
252
+ --dsr-accent: #47643C;
252
253
  --dsr-on-accent: #F5F1E3;
253
- --dsr-accent-strong: #585818;
254
- --dsr-accent-soft: #5858181F;
255
- --dsr-accent-line: #58581866;
256
- --dsr-accent-2: #832D15;
257
- --dsr-accent-2-strong: #832D15;
258
- --dsr-accent-2-soft: #832D151F;
259
- --dsr-accent-2-line: #832D1566;
260
- --dsr-brand-a: #585818;
261
- --dsr-brand-b: #832D15;
254
+ --dsr-accent-strong: #36502E;
255
+ --dsr-accent-soft: #47643C1F;
256
+ --dsr-accent-line: #47643C66;
257
+ --dsr-accent-2: #789568;
258
+ --dsr-accent-2-strong: #5D7C50;
259
+ --dsr-accent-2-soft: #7895681F;
260
+ --dsr-accent-2-line: #78956866;
261
+ --dsr-brand-a: #47643C;
262
+ --dsr-brand-b: #A95F3F;
262
263
 
263
264
  --dsr-success: #1E5C33;
264
265
  --dsr-success-soft: #1E5C331F;
@@ -274,21 +275,97 @@ html[data-theme="neutral"] {
274
275
  --dsr-info-soft: #1F4E7A1F;
275
276
  --dsr-info-line: #1F4E7A66;
276
277
 
277
- --dsr-head-bg: rgba(221, 212, 184, .94);
278
- --dsr-nav-bg: #585818;
279
- --dsr-nav-muted: rgba(245, 241, 227, .8);
280
- --dsr-nav-active: #F5F1E3;
281
- --dsr-nav-badge-bg: #832D15;
282
- --dsr-nav-badge-text: #F5F1E3;
283
- --dsr-composer-bg: rgba(230, 223, 200, .92);
278
+ --dsr-head-bg: rgba(238, 241, 232, .96);
279
+ --dsr-nav-bg: rgba(250, 251, 246, .96);
280
+ --dsr-nav-muted: #5B6856;
281
+ --dsr-nav-active: #36502E;
282
+ --dsr-nav-badge-bg: #A95F3F;
283
+ --dsr-nav-badge-text: #FFFFFF;
284
+ --dsr-composer-bg: rgba(250, 251, 246, .95);
284
285
  --dsr-overlay: rgba(43, 43, 43, .4);
285
286
  --dsr-code-bg: rgba(0, 0, 0, .07);
286
- --dsr-shadow: rgba(43, 43, 43, .2);
287
- --dsr-glow: rgba(88, 88, 24, .5);
288
- --dsr-head-running-bg: linear-gradient(90deg, rgba(221, 212, 184, .94), rgba(88, 88, 24, .30), rgba(245, 241, 227, .65), rgba(88, 88, 24, .30), rgba(221, 212, 184, .94));
289
- --dsr-head-running-line: rgba(88, 88, 24, .55);
290
- --dsr-head-interrupted-bg: linear-gradient(90deg, rgba(221, 212, 184, .94), rgba(131, 45, 21, .20), rgba(245, 241, 227, .65), rgba(131, 45, 21, .20), rgba(221, 212, 184, .94));
291
- --dsr-head-interrupted-line: rgba(131, 45, 21, .55);
287
+ --dsr-shadow: rgba(31, 40, 28, .17);
288
+ --dsr-glow: rgba(71, 100, 60, .36);
289
+ --dsr-head-running-bg: linear-gradient(90deg, rgba(238, 241, 232, .96), rgba(120, 149, 104, .26), rgba(255, 255, 255, .78), rgba(120, 149, 104, .26), rgba(238, 241, 232, .96));
290
+ --dsr-head-running-line: rgba(71, 100, 60, .58);
291
+ --dsr-head-interrupted-bg: linear-gradient(90deg, rgba(238, 241, 232, .96), rgba(169, 95, 63, .18), rgba(255, 255, 255, .78), rgba(169, 95, 63, .18), rgba(238, 241, 232, .96));
292
+ --dsr-head-interrupted-line: rgba(169, 95, 63, .58);
293
+ }
294
+
295
+ /* ============ 黑白「黑曜白」: 纯灰阶层次 + 冷白高光 ============ */
296
+ html[data-theme="mono"] {
297
+ --dsr-neutral-0: #FFFFFF;
298
+ --dsr-neutral-1: #F5F5F5;
299
+ --dsr-neutral-2: #E5E5E5;
300
+ --dsr-neutral-3: #D4D4D4;
301
+ --dsr-neutral-4: #A3A3A3;
302
+ --dsr-neutral-5: #737373;
303
+ --dsr-neutral-6: #525252;
304
+ --dsr-neutral-7: #333333;
305
+ --dsr-neutral-8: #171717;
306
+ --dsr-neutral-9: #050505;
307
+
308
+ --dsr-bg: #050505;
309
+ --dsr-bg-2: #0A0A0A;
310
+ --dsr-panel: #111111;
311
+ --dsr-panel-2: #1A1A1A;
312
+ --dsr-line: #333333;
313
+ --dsr-divider: rgba(255, 255, 255, .14);
314
+ --dsr-text: #F5F5F5;
315
+ --dsr-muted: #A3A3A3;
316
+ --dsr-text-disabled: #737373;
317
+
318
+ --dsr-accent: #F5F5F5;
319
+ --dsr-on-accent: #050505;
320
+ --dsr-accent-strong: #FFFFFF;
321
+ --dsr-accent-soft: rgba(255, 255, 255, .10);
322
+ --dsr-accent-line: rgba(255, 255, 255, .38);
323
+ --dsr-accent-2: #A3A3A3;
324
+ --dsr-accent-2-strong: #D4D4D4;
325
+ --dsr-accent-2-soft: rgba(163, 163, 163, .12);
326
+ --dsr-accent-2-line: rgba(212, 212, 212, .32);
327
+ --dsr-brand-a: #FFFFFF;
328
+ --dsr-brand-b: #737373;
329
+
330
+ --dsr-success: #D4D4D4;
331
+ --dsr-success-soft: rgba(212, 212, 212, .10);
332
+ --dsr-success-line: rgba(212, 212, 212, .36);
333
+ --dsr-warning: #E5E5E5;
334
+ --dsr-warning-soft: rgba(229, 229, 229, .11);
335
+ --dsr-warning-line: rgba(229, 229, 229, .40);
336
+ --dsr-on-warning: #050505;
337
+ --dsr-error: #FFFFFF;
338
+ --dsr-error-soft: rgba(255, 255, 255, .13);
339
+ --dsr-error-line: rgba(255, 255, 255, .48);
340
+ --dsr-info: #BDBDBD;
341
+ --dsr-info-soft: rgba(189, 189, 189, .10);
342
+ --dsr-info-line: rgba(189, 189, 189, .34);
343
+
344
+ --dsr-head-bg: rgba(5, 5, 5, .96);
345
+ --dsr-nav-bg: rgba(10, 10, 10, .96);
346
+ --dsr-nav-muted: #8A8A8A;
347
+ --dsr-nav-active: #FFFFFF;
348
+ --dsr-nav-badge-bg: #F5F5F5;
349
+ --dsr-nav-badge-text: #050505;
350
+ --dsr-composer-bg: rgba(10, 10, 10, .95);
351
+ --dsr-overlay: rgba(0, 0, 0, .78);
352
+ --dsr-code-bg: rgba(255, 255, 255, .055);
353
+ --dsr-shadow: rgba(0, 0, 0, .72);
354
+ --dsr-glow: rgba(255, 255, 255, .30);
355
+ --dsr-head-running-bg: linear-gradient(90deg, rgba(5, 5, 5, .97), rgba(38, 38, 38, .95), rgba(245, 245, 245, .36), rgba(38, 38, 38, .95), rgba(5, 5, 5, .97));
356
+ --dsr-head-running-line: rgba(255, 255, 255, .46);
357
+ --dsr-head-interrupted-bg: linear-gradient(90deg, rgba(5, 5, 5, .97), rgba(28, 28, 28, .95), rgba(163, 163, 163, .32), rgba(28, 28, 28, .95), rgba(5, 5, 5, .97));
358
+ --dsr-head-interrupted-line: rgba(212, 212, 212, .42);
359
+ }
360
+
361
+ html[data-theme="mono"] body {
362
+ background-image: radial-gradient(ellipse 82% 46% at 50% -16%, rgba(255, 255, 255, .085), transparent 72%);
363
+ background-attachment: fixed;
364
+ }
365
+ html[data-theme="mono"] .brand-dot,
366
+ html[data-theme="mono"] .plugin-brand-mark {
367
+ background: #F5F5F5;
368
+ box-shadow: 0 0 0 3px rgba(255, 255, 255, .08), 0 0 18px rgba(255, 255, 255, .38);
292
369
  }
293
370
 
294
371
  /* 无 JS 或 JS 前: 跟随系统深浅偏好 */
@@ -305,27 +382,27 @@ html[data-theme="neutral"] {
305
382
  --dsr-neutral-8: #3F3C37;
306
383
  --dsr-neutral-9: #2B2B2B;
307
384
 
308
- --dsr-bg: #EFEEEC;
309
- --dsr-bg-2: #E5E1D9;
310
- --dsr-panel: #FAF8F5;
385
+ --dsr-bg: #F5F7F8;
386
+ --dsr-bg-2: #E8EDF0;
387
+ --dsr-panel: #FFFFFF;
311
388
  --dsr-panel-2: #FFFFFF;
312
- --dsr-line: #D8D2C6;
313
- --dsr-divider: rgba(43, 43, 43, .12);
314
- --dsr-text: #2B2B2B;
315
- --dsr-muted: #6E6A63;
316
- --dsr-text-disabled: #A8A39A;
317
-
318
- --dsr-accent: #E6BC7B;
319
- --dsr-on-accent: #2B2B2B;
320
- --dsr-accent-strong: #7A5A24;
321
- --dsr-accent-soft: #E6BC7B40;
322
- --dsr-accent-line: #C89A4E66;
323
- --dsr-accent-2: #6E5A8C;
324
- --dsr-accent-2-strong: #6E5A8C;
325
- --dsr-accent-2-soft: #6E5A8C1F;
326
- --dsr-accent-2-line: #6E5A8C59;
327
- --dsr-brand-a: #E6BC7B;
328
- --dsr-brand-b: #EDD4C2;
389
+ --dsr-line: #C7D2D8;
390
+ --dsr-divider: rgba(24, 33, 38, .13);
391
+ --dsr-text: #182126;
392
+ --dsr-muted: #52616A;
393
+ --dsr-text-disabled: #7B8990;
394
+
395
+ --dsr-accent: #176B87;
396
+ --dsr-on-accent: #FFFFFF;
397
+ --dsr-accent-strong: #0F5268;
398
+ --dsr-accent-soft: #176B871A;
399
+ --dsr-accent-line: #176B8759;
400
+ --dsr-accent-2: #4B879C;
401
+ --dsr-accent-2-strong: #2E6E84;
402
+ --dsr-accent-2-soft: #4B879C1A;
403
+ --dsr-accent-2-line: #4B879C59;
404
+ --dsr-brand-a: #176B87;
405
+ --dsr-brand-b: #B8613E;
329
406
 
330
407
  --dsr-success: #237A46;
331
408
  --dsr-success-soft: #237A461A;
@@ -341,20 +418,20 @@ html[data-theme="neutral"] {
341
418
  --dsr-info-soft: #2563C01A;
342
419
  --dsr-info-line: #2563C059;
343
420
 
344
- --dsr-head-bg: rgba(239, 238, 236, .94);
345
- --dsr-nav-bg: rgba(250, 248, 245, .94);
346
- --dsr-nav-muted: #6E6A63;
347
- --dsr-nav-active: #7A5A24;
421
+ --dsr-head-bg: rgba(245, 247, 248, .96);
422
+ --dsr-nav-bg: rgba(255, 255, 255, .96);
423
+ --dsr-nav-muted: #52616A;
424
+ --dsr-nav-active: #0F5268;
348
425
  --dsr-nav-badge-bg: #965A0B;
349
426
  --dsr-nav-badge-text: #FFFFFF;
350
- --dsr-composer-bg: rgba(250, 248, 245, .92);
351
- --dsr-overlay: rgba(43, 43, 43, .4);
427
+ --dsr-composer-bg: rgba(255, 255, 255, .95);
428
+ --dsr-overlay: rgba(24, 33, 38, .42);
352
429
  --dsr-code-bg: rgba(0, 0, 0, .06);
353
- --dsr-shadow: rgba(43, 43, 43, .18);
354
- --dsr-glow: rgba(198, 154, 78, .45);
355
- --dsr-head-running-bg: linear-gradient(90deg, rgba(239, 238, 236, .94), rgba(230, 188, 123, .45), rgba(255, 255, 255, .65), rgba(230, 188, 123, .45), rgba(239, 238, 236, .94));
356
- --dsr-head-running-line: rgba(122, 90, 36, .55);
357
- --dsr-head-interrupted-bg: linear-gradient(90deg, rgba(239, 238, 236, .94), rgba(183, 66, 63, .18), rgba(255, 255, 255, .65), rgba(183, 66, 63, .18), rgba(239, 238, 236, .94));
430
+ --dsr-shadow: rgba(24, 33, 38, .17);
431
+ --dsr-glow: rgba(23, 107, 135, .35);
432
+ --dsr-head-running-bg: linear-gradient(90deg, rgba(245, 247, 248, .96), rgba(75, 135, 156, .26), rgba(255, 255, 255, .82), rgba(75, 135, 156, .26), rgba(245, 247, 248, .96));
433
+ --dsr-head-running-line: rgba(23, 107, 135, .58);
434
+ --dsr-head-interrupted-bg: linear-gradient(90deg, rgba(245, 247, 248, .96), rgba(183, 66, 63, .18), rgba(255, 255, 255, .82), rgba(183, 66, 63, .18), rgba(245, 247, 248, .96));
358
435
  --dsr-head-interrupted-line: rgba(183, 66, 63, .55);
359
436
  }
360
437
  }
package/public/theme.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /* DSH Remote 皮肤系统 · 零依赖
2
- * html[data-theme] = default(默认深空) | dark(落日) | light(易北爱乐厅) | neutral(草原孤塔)
2
+ * html[data-theme] = default(默认深空) | dark(落日) | light(易北爱乐厅) | neutral(草原孤塔) | mono(黑曜白)
3
3
  * 优先级: localStorage dshTheme > prefers-color-scheme(浅→light, 深→default)
4
4
  * set() 写入用户显式选择; applyCurrent() 只应用不写, 用于跟随系统变化。 */
5
5
  'use strict'
6
6
  ;(function () {
7
7
  const KEY = 'dshTheme'
8
- const VALID = ['default', 'dark', 'light', 'neutral']
8
+ const VALID = ['default', 'dark', 'light', 'neutral', 'mono']
9
9
  const mq = window.matchMedia('(prefers-color-scheme: light)')
10
10
  const store = {
11
11
  get(k) { try { return localStorage.getItem(k) } catch { return null } },
@@ -1,10 +1,18 @@
1
1
  {
2
- "version": "0.6.18",
2
+ "version": "0.6.20",
3
3
  "apkUrl": "dsh-remote.apk",
4
- "sha256": "f55ce7284c8f32308fb605bbec3fb432dc73521bb5486c40b48353343e9b63c4",
5
- "releasedAt": "2026-08-29T06:47:44.726Z",
6
- "notes": "0.6.18:新增独立 Token 量趋势统计并保留原有费用趋势;服务器连接身份改为地址加令牌,支持同地址不同令牌并兼容旧配置;投票在网关不可达时尝试直连公网收集器托底(需收集器允许 App/Web CORS);修复 Windows gateway-stats 调用 zstd 时弹出终端窗口的问题,并补充回归测试;同步完善相关模块文档。",
4
+ "sha256": "a5793085029414356a0a4faf411eb3c99bc934cdbf3ae387cc9c4c06738cf0c1",
5
+ "releasedAt": "2026-08-30T14:51:29.621Z",
6
+ "notes": "0.6.20:适配 DSH 0.1.2-alpha.1 的新版客户端模块、认证、斜杠 RPC remote.mux 实时协议,同时保留旧版 DSH 的自动回退;修复斜杠命令因 commands.execute 参数变化触发 aborted 报错,以及新版历史、工作区、模型、目标和子代理等接口不兼容问题;审批与用户提问现在会在所属对话内完整显示并可直接处理,主页仍保留全局待办入口,长工具参数、原因和调用标识不再被截断。",
7
7
  "history": [
8
+ {
9
+ "version": "0.6.20",
10
+ "notes": "0.6.20:适配 DSH 0.1.2-alpha.1 的新版客户端模块、认证、斜杠 RPC 与 remote.mux 实时协议,同时保留旧版 DSH 的自动回退;修复斜杠命令因 commands.execute 参数变化触发 aborted 报错,以及新版历史、工作区、模型、目标和子代理等接口不兼容问题;审批与用户提问现在会在所属对话内完整显示并可直接处理,主页仍保留全局待办入口,长工具参数、原因和调用标识不再被截断。"
11
+ },
12
+ {
13
+ "version": "0.6.19",
14
+ "notes": "0.6.19:全面优化手机端、桌面端、管理页和插件页的布局、动效与响应式体验,并支持减少动态效果偏好;重做蓝色、草原、音乐厅等主题的明暗层级和文字图标对比度,新增利落的黑白配色;统一主页图标配色并修正设置齿轮中心孔偏移;目标面板支持收起为始终可见的侧边入口,保留运行状态、可随时恢复,并按会话与目标在本地记忆。"
15
+ },
8
16
  {
9
17
  "version": "0.6.18",
10
18
  "notes": "0.6.18:新增独立 Token 量趋势统计并保留原有费用趋势;服务器连接身份改为地址加令牌,支持同地址不同令牌并兼容旧配置;投票在网关不可达时尝试直连公网收集器托底(需收集器允许 App/Web CORS);修复 Windows 下 gateway-stats 调用 zstd 时弹出终端窗口的问题,并补充回归测试;同步完善相关模块文档。"
@@ -36,14 +44,6 @@
36
44
  {
37
45
  "version": "0.6.11",
38
46
  "notes": "0.6.11 正式版:新增按 DSH 工作区筛选、切换和创建会话,文件页支持切换工作区并直接预览常见文本与 Markdown;修复工作区筛选未正确收敛会话、工作区位于默认文件根外时无法查看,以及新会话工作区名称与完整路径显示异常;新增投票公告及隐私化汇总;统一手机端应用内选择抽屉;周末全天按谷时并修复重复峰谷提醒;插件侧栏图标采用亮色背景并随插件自身四套皮肤切换配色;加强网关安装、连接与故障排查引导。"
39
- },
40
- {
41
- "version": "0.6.10",
42
- "notes": "0.6.10 正式版:修复 DSH/网关重启后事件通道不自动恢复、启动阶段网卡读取异常、同源状态误报、双通道总览卡在 3/4、图片后实时回复不可见及子代理重复;新增完整用户链路与重启生命周期测试;公网反馈切换到安全的 HTTPS 临时入口并加强来源 IP 防伪造、节流与隐私保护。"
43
- },
44
- {
45
- "version": "0.6.9",
46
- "notes": "0.6.9 正式版:全面优化网络连接稳定性,重构网关实时链路与连接管理;修复 downlink-only 心跳断联、网关重启风暴和 WebSocket 状态竞态;新增 VPN 友好 Ping/Pong、集中 mux/host collector、短时 WebSocket ticket、CORS 收紧与统计旁路优化。"
47
47
  }
48
48
  ]
49
49
  }
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "0.6.18"
2
+ "version": "0.6.20"
3
3
  }