dsh-remote-plugin 0.6.18 → 0.6.19

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,14 @@
1
1
  {
2
- "version": "0.6.18",
2
+ "version": "0.6.19",
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": "d79c732efa12a8f303a89fd9e707fdcd4c0e30a29515b222157ae48a6c07260b",
5
+ "releasedAt": "2026-08-30T04:41:52.453Z",
6
+ "notes": "0.6.19:全面优化手机端、桌面端、管理页和插件页的布局、动效与响应式体验,并支持减少动态效果偏好;重做蓝色、草原、音乐厅等主题的明暗层级和文字图标对比度,新增利落的黑白配色;统一主页图标配色并修正设置齿轮中心孔偏移;目标面板支持收起为始终可见的侧边入口,保留运行状态、可随时恢复,并按会话与目标在本地记忆。",
7
7
  "history": [
8
+ {
9
+ "version": "0.6.19",
10
+ "notes": "0.6.19:全面优化手机端、桌面端、管理页和插件页的布局、动效与响应式体验,并支持减少动态效果偏好;重做蓝色、草原、音乐厅等主题的明暗层级和文字图标对比度,新增利落的黑白配色;统一主页图标配色并修正设置齿轮中心孔偏移;目标面板支持收起为始终可见的侧边入口,保留运行状态、可随时恢复,并按会话与目标在本地记忆。"
11
+ },
8
12
  {
9
13
  "version": "0.6.18",
10
14
  "notes": "0.6.18:新增独立 Token 量趋势统计并保留原有费用趋势;服务器连接身份改为地址加令牌,支持同地址不同令牌并兼容旧配置;投票在网关不可达时尝试直连公网收集器托底(需收集器允许 App/Web CORS);修复 Windows 下 gateway-stats 调用 zstd 时弹出终端窗口的问题,并补充回归测试;同步完善相关模块文档。"
@@ -40,10 +44,6 @@
40
44
  {
41
45
  "version": "0.6.10",
42
46
  "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.19"
3
3
  }