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/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(64px + var(--dsr-safe-b)); }
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 76px;
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: 84px; }
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; font-size: 22px; }
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; background: var(--dsr-nav-bg); backdrop-filter: blur(12px);
559
- border-top: 1px solid var(--dsr-line);
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-btn {
563
- flex: 1; display: flex; flex-direction: column; align-items: center; gap: 2px;
564
- padding: 8px 0 7px; color: var(--dsr-nav-muted); font-size: 11px; position: relative;
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 .nav-ico { font-size: 19px; line-height: 1; }
567
- .nav-btn.active { color: var(--dsr-nav-active); }
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: 4px; left: calc(50% + 10px);
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); outline: none; }
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
  }
@@ -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"] {
@@ -1,10 +1,18 @@
1
1
  {
2
- "version": "0.6.6",
2
+ "version": "0.6.8",
3
3
  "apkUrl": "dsh-remote.apk",
4
- "sha256": "ddb80405e8b8b3183295bf150504621a0f900cd6507025600a33ab399d21f10b",
5
- "releasedAt": "2026-08-21T07:09:29.907Z",
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": "新增新建工作区,按当前文件目录创建文件夹并自动打开会话;优化工作区排序分组、路径显示和小屏布局。"
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "0.6.6"
2
+ "version": "0.6.8"
3
3
  }