dsh-remote-plugin 0.6.6 → 0.6.8
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.en.md +31 -25
- package/README.md +30 -24
- package/apk/dsh-remote.apk +0 -0
- package/client.js +11 -9
- package/gateway.cjs +119 -1
- package/index.mjs +10 -1
- package/package.json +1 -1
- package/public/admin.html +103 -7
- package/public/admin.js +24 -0
- package/public/announcements.json +12 -0
- package/public/app.js +850 -57
- package/public/desktop/desktop.css +170 -20
- package/public/desktop/desktop.html +102 -13
- package/public/desktop/desktop.js +422 -26
- package/public/desktop/i18n.js +33 -1
- package/public/index.html +200 -40
- package/public/plugin.html +151 -0
- package/public/plugin.js +179 -0
- package/public/styles.css +220 -15
- package/public/theme-vars.css +9 -0
- package/public/update.json +12 -4
- package/public/version.json +1 -1
package/public/styles.css
CHANGED
|
@@ -20,7 +20,7 @@ html, body {
|
|
|
20
20
|
overscroll-behavior-y: none;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
body { padding-bottom: calc(
|
|
23
|
+
body { padding-bottom: calc(92px + var(--dsr-safe-b)); }
|
|
24
24
|
|
|
25
25
|
.hidden { display: none !important; }
|
|
26
26
|
.muted { color: var(--dsr-muted); font-size: 12px; }
|
|
@@ -55,9 +55,10 @@ button {
|
|
|
55
55
|
}
|
|
56
56
|
.icon-btn {
|
|
57
57
|
width: 34px; height: 34px; border-radius: 10px;
|
|
58
|
-
background: var(--dsr-panel); border: 1px solid var(--dsr-line);
|
|
58
|
+
background: var(--dsr-panel); border: 1px solid var(--dsr-line); color: var(--dsr-accent-strong);
|
|
59
59
|
font-size: 17px; display: grid; place-items: center;
|
|
60
60
|
}
|
|
61
|
+
.icon-btn svg { width: 19px; height: 19px; display: block; }
|
|
61
62
|
.icon-btn:active { background: var(--dsr-panel-2); }
|
|
62
63
|
/* 顶栏按钮统一: 反馈/刷新/连接徽章同高同基线 */
|
|
63
64
|
.topbar-btn {
|
|
@@ -66,6 +67,9 @@ button {
|
|
|
66
67
|
line-height: 1; vertical-align: middle; flex-shrink: 0;
|
|
67
68
|
}
|
|
68
69
|
.topbar-right .topbar-btn.icon-btn { width: 44px; padding: 0; font-size: 19px; border-radius: 12px; }
|
|
70
|
+
.topbar-right #btn-donate { color: var(--dsr-accent-2); }
|
|
71
|
+
.topbar-right #btn-feedback { color: var(--dsr-info); }
|
|
72
|
+
.topbar-right #btn-refresh { color: var(--dsr-success); }
|
|
69
73
|
.topbar-right .topbar-btn.conn-badge { padding: 0 14px; border-radius: 999px; font-size: 12.5px; }
|
|
70
74
|
.mini-btn {
|
|
71
75
|
padding: 5px 11px; border-radius: 9px; font-size: 13px;
|
|
@@ -196,8 +200,41 @@ a.mini-btn { text-decoration: none; display: inline-flex; align-items: center; }
|
|
|
196
200
|
}
|
|
197
201
|
.sc-badge.goal-active { background: var(--dsr-info-soft); color: var(--dsr-info); border-color: var(--dsr-info-line); }
|
|
198
202
|
.sc-arrow { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); color: var(--dsr-muted); }
|
|
203
|
+
.session-swipe { position: relative; overflow: hidden; border-radius: var(--dsr-radius); background: var(--dsr-error); touch-action: pan-y; }
|
|
204
|
+
.session-swipe .session-card { position: relative; z-index: 1; transform: translateX(var(--swipe-x, 0)); transition: transform .18s ease; }
|
|
205
|
+
.session-swipe.revealed .session-card { transform: translateX(-92px); }
|
|
206
|
+
.session-swipe .wb-session { position: relative; z-index: 1; transform: translateX(var(--swipe-x, 0)); transition: transform .18s ease; }
|
|
207
|
+
.session-swipe.revealed .wb-session { transform: translateX(-92px); }
|
|
208
|
+
.wb-sessions .session-swipe { border-radius: 8px; }
|
|
209
|
+
.sc-archive-btn { position: absolute; inset: 0 0 0 auto; z-index: 0; width: 92px; display: grid; place-items: center; padding: 0; background: var(--dsr-error); color: #fff; font-size: 13px; font-weight: 700; }
|
|
210
|
+
.sc-archive-btn:active { filter: brightness(.9); }
|
|
199
211
|
.empty { text-align: center; color: var(--dsr-muted); padding: 34px 0; }
|
|
200
212
|
|
|
213
|
+
/* ---------- 工作台与归档会话 ---------- */
|
|
214
|
+
.workbench-bar { margin: 0 0 2px; border-radius: var(--dsr-radius); overflow: hidden; }
|
|
215
|
+
.workbench-bar .wb-toggle {
|
|
216
|
+
width: 100%; display: flex; align-items: center; gap: 8px; padding: 10px 13px;
|
|
217
|
+
font: inherit; text-align: left; border: 1px solid var(--dsr-line);
|
|
218
|
+
background: var(--dsr-panel); color: var(--dsr-text);
|
|
219
|
+
}
|
|
220
|
+
.workbench-bar.unbound .wb-toggle { color: var(--dsr-muted); cursor: default; }
|
|
221
|
+
.workbench-bar.unbound .wb-chevron { visibility: hidden; }
|
|
222
|
+
.workbench-bar.bound .wb-toggle { background: var(--dsr-accent-soft); border-color: var(--dsr-accent-line); color: var(--dsr-accent-strong); font-weight: 600; }
|
|
223
|
+
.wb-label { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
224
|
+
.wb-chevron { flex-shrink: 0; font-size: 11px; color: var(--dsr-muted); transition: transform .15s ease; }
|
|
225
|
+
.workbench-bar.bound .wb-toggle[aria-expanded="true"] .wb-chevron { transform: rotate(180deg); }
|
|
226
|
+
.wb-panel { background: var(--dsr-bg-2); border: 1px solid var(--dsr-line); border-top: none; border-radius: 0 0 var(--dsr-radius) var(--dsr-radius); padding: 8px; display: flex; flex-direction: column; gap: 6px; }
|
|
227
|
+
.wb-project { background: var(--dsr-panel); border: 1px solid var(--dsr-line); border-radius: 10px; overflow: hidden; }
|
|
228
|
+
.wb-project-head { display: flex; align-items: center; gap: 7px; padding: 9px 10px; cursor: pointer; }
|
|
229
|
+
.wb-project-title { flex: 1; min-width: 0; font-size: 13.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
230
|
+
.wb-new { padding: 3px 9px; font-size: 12px; }
|
|
231
|
+
.wb-sessions { display: flex; flex-direction: column; gap: 4px; padding: 0 6px 6px; }
|
|
232
|
+
.wb-session { width: 100%; display: flex; align-items: center; gap: 8px; background: var(--dsr-bg-2); border: 1px solid var(--dsr-line); border-radius: 8px; padding: 7px 9px; text-align: left; color: var(--dsr-text); font: inherit; }
|
|
233
|
+
.wb-session-title { flex: 1; min-width: 0; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
234
|
+
.wb-session-meta { flex-shrink: 0; font-size: 11px; color: var(--dsr-muted); }
|
|
235
|
+
.wb-empty { font-size: 12px; color: var(--dsr-muted); text-align: center; padding: 10px 0; }
|
|
236
|
+
.archived-toggle { width: 100%; display: block; text-align: center; padding: 9px 0; margin-top: 2px; border-radius: 9px; background: var(--dsr-panel); border: 1px dashed var(--dsr-line); color: var(--dsr-muted); font-size: 12px; }
|
|
237
|
+
|
|
201
238
|
/* ---------- 会话详情 ---------- */
|
|
202
239
|
body.in-session { overflow: hidden; height: 100vh; height: 100dvh; }
|
|
203
240
|
body.in-session .topbar { display: none; }
|
|
@@ -206,8 +243,9 @@ body.in-session .main {
|
|
|
206
243
|
display: flex;
|
|
207
244
|
flex-direction: column;
|
|
208
245
|
overflow: hidden;
|
|
209
|
-
padding: 12px 12px
|
|
246
|
+
padding: 12px 12px 0;
|
|
210
247
|
}
|
|
248
|
+
body.in-session .bottom-nav { display: none; }
|
|
211
249
|
body.in-session .view {
|
|
212
250
|
flex: 1;
|
|
213
251
|
min-height: 0;
|
|
@@ -243,6 +281,8 @@ body.in-session .view {
|
|
|
243
281
|
}
|
|
244
282
|
.session-head .session-title { flex-shrink: 1; }
|
|
245
283
|
.session-head-meta { flex: 1; min-width: 0; }
|
|
284
|
+
.session-send-btn { flex: 0 0 auto; min-height: 38px; padding: 0 13px; border-radius: 12px; border: 1px solid var(--dsr-accent-line); background: var(--dsr-accent-soft); color: var(--dsr-accent-strong); font: inherit; font-size: 13px; font-weight: 700; }
|
|
285
|
+
.session-send-btn:active { filter: brightness(.92); }
|
|
246
286
|
.session-title {
|
|
247
287
|
font-size: 16px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
|
|
248
288
|
}
|
|
@@ -284,6 +324,8 @@ body.in-session .view {
|
|
|
284
324
|
padding-right: 16px;
|
|
285
325
|
scrollbar-width: none;
|
|
286
326
|
}
|
|
327
|
+
body.in-session .history { padding-bottom: calc(76px + var(--dsr-safe-b)); }
|
|
328
|
+
body.in-session.has-composer-images .history { padding-bottom: calc(146px + var(--dsr-safe-b)); }
|
|
287
329
|
.history::-webkit-scrollbar { display: none; }
|
|
288
330
|
.history-more { text-align: center; margin: 4px 0; }
|
|
289
331
|
|
|
@@ -333,6 +375,16 @@ body.in-session .view {
|
|
|
333
375
|
padding: 5px 12px; border-radius: 999px; max-width: 92%;
|
|
334
376
|
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
|
|
335
377
|
}
|
|
378
|
+
.event.event-detail {
|
|
379
|
+
align-self: stretch; max-width: 96%; white-space: normal; overflow: visible;
|
|
380
|
+
border-radius: 12px; padding: 8px 10px; line-height: 1.45;
|
|
381
|
+
}
|
|
382
|
+
.event.event-detail summary { white-space: normal; overflow-wrap: anywhere; cursor: pointer; }
|
|
383
|
+
.event.event-detail pre {
|
|
384
|
+
margin: 8px 0 0; max-height: 280px; overflow: auto; white-space: pre-wrap;
|
|
385
|
+
overflow-wrap: anywhere; word-break: break-word; font: 12px/1.55 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
386
|
+
background: var(--dsr-code-bg); border-radius: 8px; padding: 9px 10px;
|
|
387
|
+
}
|
|
336
388
|
.tool {
|
|
337
389
|
align-self: flex-start; max-width: 96%; background: var(--dsr-panel);
|
|
338
390
|
border: 1px solid var(--dsr-line); border-left: 3px solid var(--dsr-accent-2);
|
|
@@ -361,10 +413,26 @@ body.in-session .view {
|
|
|
361
413
|
background: var(--dsr-composer-bg); backdrop-filter: blur(10px);
|
|
362
414
|
border-top: 1px solid var(--dsr-line);
|
|
363
415
|
}
|
|
416
|
+
.composer-attachments {
|
|
417
|
+
display: flex; gap: 8px; overflow-x: auto; padding: 8px 12px 0;
|
|
418
|
+
scrollbar-width: none;
|
|
419
|
+
}
|
|
420
|
+
.composer-attachments::-webkit-scrollbar { display: none; }
|
|
421
|
+
.composer-attachment { position: relative; flex: 0 0 58px; width: 58px; height: 58px; border-radius: 11px; overflow: hidden; border: 1px solid var(--dsr-line); background: var(--dsr-panel); }
|
|
422
|
+
.composer-attachment img { width: 100%; height: 100%; object-fit: cover; display: block; }
|
|
423
|
+
.composer-attachment-remove { position: absolute; top: 3px; right: 3px; width: 19px; height: 19px; border-radius: 50%; border: 1px solid rgba(0,0,0,.18); background: rgba(0,0,0,.62); color: #fff; font-size: 14px; line-height: 16px; padding: 0; }
|
|
424
|
+
.composer-image-btn { flex: 0 0 42px; width: 42px; height: 42px; display: grid; place-items: center; border-radius: 14px; color: var(--dsr-info); background: var(--dsr-panel); border: 1px solid var(--dsr-line); }
|
|
425
|
+
.composer-image-btn svg { width: 20px; height: 20px; }
|
|
426
|
+
.composer-image-btn:active, .composer-image-btn.active { color: var(--dsr-accent-strong); background: var(--dsr-accent-soft); border-color: var(--dsr-accent-line); }
|
|
427
|
+
.composer-image-menu { position: absolute; right: 12px; bottom: 58px; z-index: 4; display: flex; gap: 7px; padding: 7px; border: 1px solid var(--dsr-line); border-radius: 14px; background: var(--dsr-bg-2); box-shadow: 0 12px 30px var(--dsr-shadow); }
|
|
428
|
+
.composer-image-option { display: inline-flex; align-items: center; gap: 5px; min-height: 34px; padding: 6px 10px; border: 1px solid var(--dsr-line); border-radius: 10px; background: var(--dsr-panel); color: var(--dsr-text); font: inherit; font-size: 12px; }
|
|
429
|
+
.composer-image-option svg { width: 16px; height: 16px; color: var(--dsr-info); }
|
|
364
430
|
.composer {
|
|
365
431
|
display: flex; gap: 8px; align-items: flex-end;
|
|
366
432
|
padding: 8px 12px calc(8px + var(--dsr-safe-b));
|
|
367
433
|
}
|
|
434
|
+
.composer-input-wrap { flex: 1; min-width: 0; position: relative; display: flex; align-items: flex-end; }
|
|
435
|
+
.composer-input-wrap textarea { width: 100%; min-width: 0; }
|
|
368
436
|
.composer textarea {
|
|
369
437
|
flex: 1; resize: none; background: var(--dsr-panel); color: var(--dsr-text);
|
|
370
438
|
border: 1px solid var(--dsr-line); border-radius: 16px;
|
|
@@ -372,6 +440,23 @@ body.in-session .view {
|
|
|
372
440
|
max-height: 120px; outline: none;
|
|
373
441
|
}
|
|
374
442
|
.composer textarea:focus { border-color: var(--dsr-accent-line); }
|
|
443
|
+
.composer-fs-btn { position: absolute; top: 5px; right: 6px; z-index: 2; width: 27px; height: 27px; display: grid; place-items: center; border-radius: 8px; background: var(--dsr-bg-2); border: 1px solid var(--dsr-line); color: var(--dsr-muted); }
|
|
444
|
+
.composer-fs-btn:active { color: var(--dsr-accent-strong); border-color: var(--dsr-accent-line); }
|
|
445
|
+
.composer-fs-btn svg { width: 15px; height: 15px; }
|
|
446
|
+
.composer-input-wrap.has-fs-btn textarea { padding-right: 38px; }
|
|
447
|
+
.composer-fs-handle { display: none; }
|
|
448
|
+
.composer-wrap.fs { position: fixed; top: calc(54px + var(--dsr-safe-top)); left: 0; right: 0; bottom: 0; max-width: none; height: auto; z-index: 35; display: flex; flex-direction: column; background: var(--dsr-composer-bg); }
|
|
449
|
+
.composer-wrap.fs .composer-menu { display: none; }
|
|
450
|
+
.composer-wrap.fs .composer-fs-handle { display: flex; align-items: center; justify-content: center; flex: none; height: 28px; touch-action: pan-y; }
|
|
451
|
+
.composer-fs-handle span { width: 38px; height: 4px; border-radius: 999px; background: var(--dsr-line); }
|
|
452
|
+
.composer-wrap.fs .composer { flex: 1; align-items: stretch; padding-bottom: calc(8px + var(--dsr-safe-b)); }
|
|
453
|
+
.composer-wrap.fs .composer-input-wrap { align-items: stretch; }
|
|
454
|
+
.composer-wrap.fs .composer-input-wrap textarea { height: 100%; max-height: none; resize: none; }
|
|
455
|
+
.composer-wrap.fs .composer-fs-btn { top: 7px; right: 7px; width: 30px; height: 30px; }
|
|
456
|
+
.composer-wrap.fs .plus-btn { display: none; }
|
|
457
|
+
.composer-wrap.fs .composer-image-btn, .composer-wrap.fs .composer-image-menu, .composer-wrap.fs .send-btn { display: none; }
|
|
458
|
+
.composer-wrap.fs .composer-image-menu { bottom: 58px; }
|
|
459
|
+
body.composer-fullscreen { overflow: hidden; }
|
|
375
460
|
.plus-btn {
|
|
376
461
|
flex-shrink: 0; width: 42px; height: 42px; border-radius: 14px;
|
|
377
462
|
background: var(--dsr-panel); color: var(--dsr-info); border: 1px solid var(--dsr-line);
|
|
@@ -409,7 +494,65 @@ body.in-session .view {
|
|
|
409
494
|
}
|
|
410
495
|
.model-chip.current { color: var(--dsr-info); border-color: var(--dsr-info-line); background: var(--dsr-info-soft); }
|
|
411
496
|
.model-provider { font-size: 11px; color: var(--dsr-muted); margin: 7px 0 5px; }
|
|
412
|
-
body.in-session .main { padding-bottom:
|
|
497
|
+
body.in-session .main { padding-bottom: 0; }
|
|
498
|
+
|
|
499
|
+
/* ---------- 系统总览 · A 方案 ---------- */
|
|
500
|
+
.overview-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin:2px 0 16px; }
|
|
501
|
+
.overview-eyebrow { color:var(--dsr-accent-strong); font-size:10px; font-weight:800; letter-spacing:1.7px; line-height:1.3; }
|
|
502
|
+
.overview-title { margin:3px 0 2px; font-size:25px; line-height:1.18; letter-spacing:-.4px; }
|
|
503
|
+
.overview-subtitle { margin:0; color:var(--dsr-muted); font-size:12px; }
|
|
504
|
+
.overview-refresh { width:34px; height:34px; padding:0; border-radius:11px; font-size:18px; line-height:1; }
|
|
505
|
+
.overview-refresh { color: var(--dsr-accent-strong); }
|
|
506
|
+
.overview-refresh svg { width:17px; height:17px; display:block; }
|
|
507
|
+
.overview-pulse-card { position:relative; overflow:hidden; display:grid; grid-template-columns:minmax(0,1fr) auto; gap:8px 12px; align-items:center; padding:14px; margin-bottom:14px; border:1px solid var(--dsr-accent-line); border-radius:16px; background:linear-gradient(135deg,var(--dsr-panel),var(--dsr-bg-2)); box-shadow:0 10px 26px var(--dsr-shadow); }
|
|
508
|
+
.overview-pulse-card::after { content:""; position:absolute; width:110px; height:110px; right:-45px; top:-55px; border-radius:50%; background:var(--dsr-accent-soft); filter:blur(3px); pointer-events:none; }
|
|
509
|
+
.overview-pulse-copy { min-width:0; align-self:start; }
|
|
510
|
+
.overview-status { margin-top:6px; font-size:20px; font-weight:780; letter-spacing:-.3px; }
|
|
511
|
+
.overview-status-desc { margin-top:4px; color:var(--dsr-muted); font-size:11px; }
|
|
512
|
+
.overview-primary-action { display:inline-flex; align-items:center; justify-content:center; min-height:34px; margin-top:13px; padding:7px 13px; border:1px solid var(--dsr-accent-strong); border-radius:10px; background:var(--dsr-accent-strong); color:var(--dsr-on-accent); font:inherit; font-size:12px; font-weight:750; cursor:pointer; transition:transform .18s ease, filter .18s ease; }
|
|
513
|
+
.overview-primary-action:hover, .overview-primary-action:focus-visible { filter:brightness(1.08); transform:translateY(-1px); }
|
|
514
|
+
.overview-primary-action:disabled { opacity:.65; cursor:wait; transform:none; }
|
|
515
|
+
.overview-pulse-card.status-degraded { border-color:var(--dsr-warning-line); }
|
|
516
|
+
.overview-pulse-card.status-degraded .overview-primary-action { border-color:var(--dsr-warning); background:var(--dsr-warning); color:var(--dsr-on-warning); }
|
|
517
|
+
.overview-pulse-card.status-offline { border-color:var(--dsr-error-line); }
|
|
518
|
+
.overview-pulse-card.status-offline .overview-primary-action { border-color:var(--dsr-error); background:var(--dsr-error); color:var(--dsr-neutral-9); }
|
|
519
|
+
.system-pulse-ring { --pulse-pct:0%; position:relative; z-index:1; width:92px; height:92px; padding:7px; border-radius:50%; background:conic-gradient(var(--dsr-accent) 0 var(--pulse-pct),var(--dsr-line) var(--pulse-pct) 100%); box-shadow:0 0 20px var(--dsr-glow); }
|
|
520
|
+
.system-pulse-ring::before { content:""; position:absolute; inset:6px; border-radius:50%; border:1px solid var(--dsr-accent-line); opacity:.7; }
|
|
521
|
+
.system-pulse-core { position:relative; display:flex; flex-direction:column; align-items:center; justify-content:center; width:100%; height:100%; border-radius:50%; background:var(--dsr-bg-2); color:var(--dsr-muted); }
|
|
522
|
+
.system-pulse-core strong { max-width:100%; color:var(--dsr-text); font-size:14px; line-height:1.05; letter-spacing:.2px; text-align:center; white-space:nowrap; }
|
|
523
|
+
.system-pulse-core span { max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; margin-top:4px; font-size:8px; text-align:center; }
|
|
524
|
+
.overview-links { grid-column:1 / -1; display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:6px; padding-top:8px; border-top:1px solid var(--dsr-line); }
|
|
525
|
+
.overview-link { min-width:0; display:grid; grid-template-columns:auto 1fr; align-items:center; gap:4px 6px; padding-top:9px; color:var(--dsr-muted); font-size:10px; }
|
|
526
|
+
.overview-link i { width:6px; height:6px; border-radius:50%; background:var(--dsr-muted); box-shadow:0 0 0 3px var(--dsr-line); }
|
|
527
|
+
.overview-link b { grid-column:2; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--dsr-text); font-size:10px; font-weight:650; }
|
|
528
|
+
.overview-link.ok i { background:var(--dsr-success); box-shadow:0 0 0 3px var(--dsr-success-soft); }
|
|
529
|
+
.overview-link.warn i { background:var(--dsr-warning); box-shadow:0 0 0 3px var(--dsr-warning-soft); }
|
|
530
|
+
.overview-link.off i { background:var(--dsr-error); box-shadow:0 0 0 3px var(--dsr-error-soft); }
|
|
531
|
+
.overview-section-head { display:flex; align-items:center; justify-content:space-between; gap:10px; margin:17px 1px 8px; font-size:12px; font-weight:750; letter-spacing:.3px; }
|
|
532
|
+
.overview-section-meta { color:var(--dsr-muted); font-size:11px; font-weight:500; }
|
|
533
|
+
.overview-attention-list, .overview-session-list { display:flex; flex-direction:column; gap:7px; }
|
|
534
|
+
.overview-attention-item, .overview-session-item { width:100%; display:flex; align-items:center; gap:10px; min-width:0; padding:11px 12px; border:1px solid var(--dsr-line); border-radius:13px; background:var(--dsr-panel); color:var(--dsr-text); text-align:left; }
|
|
535
|
+
button.overview-attention-item, button.overview-session-item { cursor:pointer; }
|
|
536
|
+
.overview-attention-item { border-left:3px solid var(--dsr-warning); }
|
|
537
|
+
.overview-attention-item.question { border-left-color:var(--dsr-accent-2); }
|
|
538
|
+
.overview-item-mark { flex:0 0 auto; width:25px; height:25px; display:grid; place-items:center; border-radius:8px; background:var(--dsr-warning-soft); color:var(--dsr-warning); font-size:12px; }
|
|
539
|
+
.overview-attention-item.question .overview-item-mark { background:var(--dsr-accent-2-soft); color:var(--dsr-accent-2); }
|
|
540
|
+
.overview-item-copy { min-width:0; flex:1; }
|
|
541
|
+
.overview-item-title { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:12.5px; font-weight:650; }
|
|
542
|
+
.overview-item-desc { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; margin-top:2px; color:var(--dsr-muted); font-size:11px; }
|
|
543
|
+
.overview-item-arrow { color:var(--dsr-muted); font-size:18px; }
|
|
544
|
+
.overview-item-actions { flex:0 0 auto; display:flex; gap:4px; }
|
|
545
|
+
.overview-item-actions .mini-btn { padding:4px 7px; font-size:10px; }
|
|
546
|
+
.overview-metric-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:7px; }
|
|
547
|
+
.overview-metric { min-width:0; padding:11px 12px; border:1px solid var(--dsr-line); border-radius:13px; background:var(--dsr-panel); }
|
|
548
|
+
.overview-metric span { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--dsr-muted); font-size:10.5px; }
|
|
549
|
+
.overview-metric strong { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; margin-top:5px; color:var(--dsr-text); font-size:15px; font-weight:700; }
|
|
550
|
+
.overview-session-item { cursor:pointer; }
|
|
551
|
+
.overview-session-item .overview-item-mark { background:var(--dsr-info-soft); color:var(--dsr-info); }
|
|
552
|
+
.overview-session-item.running .overview-item-mark { background:var(--dsr-success-soft); color:var(--dsr-success); }
|
|
553
|
+
.overview-session-item .overview-item-desc { font-variant-numeric:tabular-nums; }
|
|
554
|
+
.overview-empty { padding:10px 12px; border:1px dashed var(--dsr-line); border-radius:13px; color:var(--dsr-muted); font-size:12px; text-align:center; }
|
|
555
|
+
.overview-legacy { display:none; }
|
|
413
556
|
|
|
414
557
|
/* ---------- 待办 ---------- */
|
|
415
558
|
.pending-list, .jobs-list { display: flex; flex-direction: column; gap: 8px; }
|
|
@@ -459,7 +602,8 @@ body.in-session .main { padding-bottom: 84px; }
|
|
|
459
602
|
padding: 11px 13px; min-width: 0;
|
|
460
603
|
}
|
|
461
604
|
.fs-row:active { background: var(--dsr-panel-2); }
|
|
462
|
-
.fs-ico { flex-shrink: 0;
|
|
605
|
+
.fs-ico { flex-shrink: 0; width: 22px; height: 22px; display:grid; place-items:center; color:var(--dsr-info); }
|
|
606
|
+
.fs-ico svg { width:20px; height:20px; display:block; }
|
|
463
607
|
.fs-meta { flex: 1; min-width: 0; display: flex; flex-direction: column; }
|
|
464
608
|
.fs-name {
|
|
465
609
|
font-size: 14.5px; font-weight: 600; white-space: nowrap;
|
|
@@ -482,6 +626,7 @@ body.in-session .main { padding-bottom: 84px; }
|
|
|
482
626
|
.setting-name { font-size: 14.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
483
627
|
.setting-desc { font-size: 12px; color: var(--dsr-muted); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
484
628
|
.setting-desc.expanded { white-space: normal; overflow: visible; text-overflow: clip; word-break: break-word; }
|
|
629
|
+
.setting-select { min-width: 112px; max-width: 145px; padding: 7px 9px; border-radius: 10px; border: 1px solid var(--dsr-line); background: var(--dsr-bg-2); color: var(--dsr-text); font: inherit; font-size: 12px; }
|
|
485
630
|
.setting-actions { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
|
|
486
631
|
.about { text-align: center; color: var(--dsr-muted); font-size: 12px; margin-top: 16px; line-height: 1.8; }
|
|
487
632
|
|
|
@@ -555,18 +700,41 @@ body.in-session .main { padding-bottom: 84px; }
|
|
|
555
700
|
/* ---------- 底部导航 ---------- */
|
|
556
701
|
.bottom-nav {
|
|
557
702
|
position: fixed; left: 0; right: 0; bottom: 0; z-index: 25;
|
|
558
|
-
display: flex;
|
|
559
|
-
|
|
560
|
-
padding-bottom: var(--dsr-safe-b);
|
|
703
|
+
display: flex; align-items: flex-end; min-height: 88px; gap: 3px; isolation: isolate;
|
|
704
|
+
padding: 0 8px var(--dsr-safe-b); background: transparent; border-top: none;
|
|
561
705
|
}
|
|
562
|
-
.nav-
|
|
563
|
-
|
|
564
|
-
|
|
706
|
+
.nav-wave { position: absolute; inset: 0; z-index: -1; overflow: hidden; pointer-events: none; filter: drop-shadow(0 -8px 20px var(--dsr-shadow)); }
|
|
707
|
+
.nav-wave svg { width: 100%; height: 100%; display: block; overflow: visible; }
|
|
708
|
+
.nav-wave-fill { fill: var(--dsr-nav-bg); }
|
|
709
|
+
.nav-wave-line { fill: none; stroke: var(--dsr-accent-line); stroke-width: .55; vector-effect: non-scaling-stroke; }
|
|
710
|
+
.nav-wave::after { content: ''; position: absolute; left: 10%; right: 10%; top: 28%; height: 1px; background: linear-gradient(90deg, transparent, var(--dsr-accent-2-line), var(--dsr-accent-line), transparent); opacity: .45;
|
|
565
711
|
}
|
|
566
|
-
.nav-btn
|
|
567
|
-
|
|
712
|
+
.nav-btn {
|
|
713
|
+
flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: 4px;
|
|
714
|
+
min-width: 0; min-height: 69px; padding: 7px 2px 5px; color: var(--dsr-nav-muted); font-size: 11px; position: relative;
|
|
715
|
+
border-radius: 14px 14px 0 0; touch-action: manipulation;
|
|
716
|
+
}
|
|
717
|
+
.nav-btn .nav-ico { width: 22px; height: 22px; display: grid; place-items: center; line-height: 1; transition: transform .18s ease, color .18s ease; }
|
|
718
|
+
.nav-btn .nav-ico svg { width: 21px; height: 21px; display: block; }
|
|
719
|
+
.nav-btn:nth-of-type(1) { --nav-tint: var(--dsr-info); }
|
|
720
|
+
.nav-btn:nth-of-type(2) { --nav-tint: var(--dsr-success); }
|
|
721
|
+
.nav-btn:nth-of-type(4) { --nav-tint: var(--dsr-warning); }
|
|
722
|
+
.nav-btn:nth-of-type(5) { --nav-tint: var(--dsr-accent-2); }
|
|
723
|
+
.nav-btn:not(.nav-home) .nav-ico { color: var(--nav-tint, var(--dsr-nav-muted)); opacity: .82; }
|
|
724
|
+
.nav-btn:not(.nav-home) > span:last-of-type { color: var(--dsr-nav-muted); }
|
|
725
|
+
.nav-btn.active:not(.nav-home) { color: var(--dsr-nav-active); }
|
|
726
|
+
.nav-btn.active:not(.nav-home) .nav-ico { transform: translateY(-1px); opacity: 1; }
|
|
727
|
+
.nav-btn.active:not(.nav-home)::after { content: ''; position: absolute; bottom: 3px; width: 4px; height: 4px; border-radius: 50%; background: var(--dsr-nav-active); box-shadow: 0 0 10px var(--dsr-glow); }
|
|
728
|
+
.nav-home { z-index: 2; transform: translateY(-13px); color: var(--dsr-nav-muted); }
|
|
729
|
+
.nav-home-orb { width: 56px; height: 56px; display: grid; place-items: center; border-radius: 50%; background: var(--dsr-bg-2); border: 1px solid var(--dsr-accent-line); box-shadow: 0 5px 18px var(--dsr-shadow); transition: transform .18s ease, background .18s ease, box-shadow .18s ease; }
|
|
730
|
+
.nav-home .nav-ico { width: 30px; height: 30px; color: var(--dsr-accent-strong); }
|
|
731
|
+
.nav-home .nav-ico svg { width: 29px; height: 29px; }
|
|
732
|
+
.nav-home.active { color: var(--dsr-nav-active); }
|
|
733
|
+
.nav-home.active .nav-home-orb { background: radial-gradient(circle at 34% 27%, var(--dsr-info), var(--dsr-accent) 42%, var(--dsr-accent-2)); border-color: var(--dsr-accent); color: var(--dsr-on-accent); box-shadow: 0 7px 24px var(--dsr-glow), inset 0 0 0 1px rgba(255,255,255,.32); }
|
|
734
|
+
.nav-home.active .nav-ico { color: var(--dsr-on-accent); transform: none; }
|
|
735
|
+
.nav-home:active .nav-home-orb { transform: scale(.96); }
|
|
568
736
|
.nav-badge {
|
|
569
|
-
position: absolute; top:
|
|
737
|
+
position: absolute; top: 1px; left: calc(50% + 19px); z-index: 3;
|
|
570
738
|
background: var(--dsr-nav-badge-bg); color: var(--dsr-nav-badge-text); border-radius: 999px;
|
|
571
739
|
font-size: 10px; font-weight: 800; padding: 0 6px; line-height: 16px;
|
|
572
740
|
}
|
|
@@ -592,7 +760,7 @@ body.in-session .main { padding-bottom: 84px; }
|
|
|
592
760
|
padding: 9px 10px; border-radius: 13px; border: none; background: transparent; color: var(--dsr-text);
|
|
593
761
|
font: inherit; text-align: left; cursor: pointer; text-decoration: none;
|
|
594
762
|
}
|
|
595
|
-
.sheet-item:hover, .sheet-item:focus-visible { background: var(--dsr-bg);
|
|
763
|
+
.sheet-item:hover, .sheet-item:focus-visible { background: var(--dsr-bg); }
|
|
596
764
|
.sheet-item.primary { background: var(--dsr-accent-soft); border: 1px solid var(--dsr-accent-line); }
|
|
597
765
|
.sheet-item.primary:hover { background: var(--dsr-accent-soft); filter: brightness(1.03); }
|
|
598
766
|
.sheet-ico {
|
|
@@ -648,6 +816,26 @@ body.in-session .main { padding-bottom: 84px; }
|
|
|
648
816
|
border: 1px solid var(--dsr-line); border-radius: 10px; padding: 9px 11px; font: inherit; outline: none;
|
|
649
817
|
}
|
|
650
818
|
.modal-actions { display: flex; gap: 9px; margin-top: 14px; }
|
|
819
|
+
.archive-modal-desc { margin: 0 0 12px; color: var(--dsr-muted); line-height: 1.55; }
|
|
820
|
+
.archive-summary { border: 1px solid var(--dsr-line); border-radius: 12px; background: var(--dsr-panel); padding: 10px 12px; }
|
|
821
|
+
.archive-summary-row { display: grid; grid-template-columns: 62px minmax(0, 1fr); gap: 10px; align-items: start; padding: 6px 0; font-size: 13px; }
|
|
822
|
+
.archive-summary-row + .archive-summary-row { border-top: 1px solid var(--dsr-line); }
|
|
823
|
+
.archive-summary-row > span { color: var(--dsr-muted); }
|
|
824
|
+
.archive-summary-row strong, .archive-summary-row code { min-width: 0; color: var(--dsr-text); overflow-wrap: anywhere; word-break: break-word; }
|
|
825
|
+
.archive-confirm-btn { flex: 1; padding: 11px 14px; border-radius: 12px; font-size: 15px; font-weight: 700; border: 1px solid var(--dsr-error); background: var(--dsr-error); color: #fff; }
|
|
826
|
+
.archive-confirm-btn:active { filter: brightness(.9); }
|
|
827
|
+
.announcement-card { border-top: 3px solid var(--dsr-accent); }
|
|
828
|
+
.announcement-kicker { color: var(--dsr-accent-strong); font-size: 12px; font-weight: 700; letter-spacing: .04em; margin-bottom: 6px; }
|
|
829
|
+
.announcement-content { line-height: 1.7; overflow-wrap: anywhere; word-break: break-word; }
|
|
830
|
+
.announcement-action { display: inline-block; margin-top: 12px; color: var(--dsr-accent-strong); font-size: 13px; font-weight: 600; text-decoration: none; }
|
|
831
|
+
.announcement-action:hover { text-decoration: underline; }
|
|
832
|
+
.announcement-history-card { max-width: 520px; }
|
|
833
|
+
.announcement-history-list { display: flex; flex-direction: column; gap: 8px; }
|
|
834
|
+
.announcement-history-item { border: 1px solid var(--dsr-line); border-radius: 12px; background: var(--dsr-panel); padding: 10px 12px; }
|
|
835
|
+
.announcement-history-item summary { cursor: pointer; display: flex; align-items: baseline; justify-content: space-between; gap: 10px; font-weight: 700; overflow-wrap: anywhere; }
|
|
836
|
+
.announcement-history-item summary small { flex: 0 0 auto; color: var(--dsr-muted); font-size: 11px; font-weight: 400; }
|
|
837
|
+
.announcement-history-item .announcement-history-content { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--dsr-line); line-height: 1.65; overflow-wrap: anywhere; word-break: break-word; }
|
|
838
|
+
.announcement-history-item .announcement-action { margin-top: 8px; }
|
|
651
839
|
.kv { display: flex; justify-content: space-between; gap: 10px; font-size: 13px; padding: 3px 0; }
|
|
652
840
|
.kv .k { color: var(--dsr-muted); } .kv .v { word-break: break-all; text-align: right; }
|
|
653
841
|
|
|
@@ -700,7 +888,24 @@ body.in-session .main { padding-bottom: 84px; }
|
|
|
700
888
|
.toast.err { border-color: var(--dsr-error-line); color: var(--dsr-error); }
|
|
701
889
|
.toast.ok { border-color: var(--dsr-success-line); color: var(--dsr-success); }
|
|
702
890
|
|
|
891
|
+
/* 键盘焦点:保证深浅皮肤和移动端外接键盘都有清晰反馈 */
|
|
892
|
+
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible {
|
|
893
|
+
outline: 2px solid var(--dsr-accent);
|
|
894
|
+
outline-offset: 2px;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
@media (prefers-reduced-motion: reduce) {
|
|
898
|
+
*, *::before, *::after {
|
|
899
|
+
animation-duration: .01ms !important;
|
|
900
|
+
animation-iteration-count: 1 !important;
|
|
901
|
+
transition-duration: .01ms !important;
|
|
902
|
+
scroll-behavior: auto !important;
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
|
|
703
906
|
@media (min-width: 560px) {
|
|
704
907
|
.stat-strip { grid-template-columns: repeat(3, 1fr); }
|
|
705
908
|
.msg { max-width: 78%; }
|
|
909
|
+
.overview-pulse-card { grid-template-columns:1fr auto; }
|
|
910
|
+
.overview-metric-grid { grid-template-columns:repeat(4,minmax(0,1fr)); }
|
|
706
911
|
}
|
package/public/theme-vars.css
CHANGED
|
@@ -9,6 +9,15 @@
|
|
|
9
9
|
--dsr-safe-b: max(env(safe-area-inset-bottom, 0px), var(--native-bottom, 0px));
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
html,
|
|
13
|
+
html[data-theme="default"],
|
|
14
|
+
html[data-theme="dark"] { color-scheme: dark; }
|
|
15
|
+
html[data-theme="light"],
|
|
16
|
+
html[data-theme="neutral"] { color-scheme: light; }
|
|
17
|
+
@media (prefers-color-scheme: light) {
|
|
18
|
+
html:not([data-theme]) { color-scheme: light; }
|
|
19
|
+
}
|
|
20
|
+
|
|
12
21
|
/* ============ 深空「默认」: 经典深蓝紫(保留原配色) ============ */
|
|
13
22
|
:root,
|
|
14
23
|
html[data-theme="default"] {
|
package/public/update.json
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.6.
|
|
2
|
+
"version": "0.6.8",
|
|
3
3
|
"apkUrl": "dsh-remote.apk",
|
|
4
|
-
"sha256": "
|
|
5
|
-
"releasedAt": "2026-08-
|
|
6
|
-
"notes": "
|
|
4
|
+
"sha256": "e3f1e98bb3a1c2093182bbfa12c72411613a188d1c822b8c452cbbbe011707ef",
|
|
5
|
+
"releasedAt": "2026-08-21T17:13:45.607Z",
|
|
6
|
+
"notes": "0.6.8 正式版:重构手机端、桌面端和插件管理界面;新增工作台、图片附件、历史公告和全屏输入;修复会话布局、系统提示裁切、主题图标对比度与全屏输入高度问题。",
|
|
7
7
|
"history": [
|
|
8
|
+
{
|
|
9
|
+
"version": "0.6.8",
|
|
10
|
+
"notes": "0.6.8 正式版:重构手机端、桌面端和插件管理界面;新增工作台、图片附件、历史公告和全屏输入;修复会话布局、系统提示裁切、主题图标对比度与全屏输入高度问题。"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"version": "0.6.7",
|
|
14
|
+
"notes": "修复手机端左滑归档松手后按钮不固定;新增云端公告弹窗,支持按 App 版本和有效期定向发布;新增工作台绑定与项目级会话;新增手机端左滑归档和二次确认;新增手机回车行为设置;新增归档会话折叠和 /permission 参数选择。"
|
|
15
|
+
},
|
|
8
16
|
{
|
|
9
17
|
"version": "0.6.6",
|
|
10
18
|
"notes": "新增新建工作区,按当前文件目录创建文件夹并自动打开会话;优化工作区排序分组、路径显示和小屏布局。"
|
package/public/version.json
CHANGED