@hyzyn/dsh-docker 0.9.5 → 0.9.6

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.
@@ -7,7 +7,9 @@
7
7
  * - 几何(圆角 / 控件高度 / 间距)统一用 --dk-* 令牌,禁止在规则里写魔法数字;
8
8
  * - 三档层级:base(面板底)→ layer-2(栏 / 卡片底)→ layer-3(行 / 输入底);
9
9
  * - 交互元素必须有 hover / active / :focus-visible / :disabled 四态;
10
- * - 状态色只用在徽章与进度条上,正文保持中性,避免彩色噪音。
10
+ * - 状态色只用在徽章与进度条上,正文保持中性,避免彩色噪音;
11
+ * - 文字角色对齐宿主设置类组件:font-size 一律配官方成对行高(11/16 · 12/18 · 13/20 · 14/20 · 16/24),
12
+ * 字重只用 400/500/600——标题与行名 500、强调(弹窗标题 / 选中态 / 告警)600,不用 700。
11
13
  *
12
14
  * 由 scripts/build-client.mjs 以 text loader 内联进 client.js。
13
15
  */
@@ -20,11 +22,13 @@
20
22
  * 完成替换;只在 :root 声明会永远拿到浅色值。
21
23
  */
22
24
  :where(html, body) {
23
- --dk-r-xs: 4px;
24
- --dk-r-sm: 6px;
25
- --dk-r-md: 8px;
26
- --dk-r-lg: 10px;
27
- --dk-r-xl: 12px;
25
+ /* 圆角对齐官方六档(docs/ui-radius.zh.md):私有名只做宿主令牌的中转,
26
+ 不自造 6/8/10/12 这套「整体偏紧一格」的平行尺度。 */
27
+ --dk-r-xs: var(--dsw-radius-xs, 4px);
28
+ --dk-r-sm: var(--dsw-radius-sm, 8px);
29
+ --dk-r-md: var(--dsw-radius-md, 12px);
30
+ --dk-r-lg: var(--dsw-radius-lg, 16px);
31
+ --dk-r-xl: var(--dsw-radius-xl, 20px);
28
32
  --dk-r-pill: 999px;
29
33
  --dk-h-sm: 24px;
30
34
  --dk-h-md: 28px;
@@ -36,31 +40,54 @@
36
40
  --dk-gap-xl: 16px;
37
41
  /* 设置卡片标题行内边距:对齐 DSH 内置卡片 / 其他插件卡片(pM_pluginCard、tt_card) */
38
42
  --dk-pad-cardHead: 14px 16px;
39
- --dk-mono: "SF Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
43
+ /* 等宽字体走宿主契约变量(--ds-font-family-code,主题所有);宿主不在时退回本包原栈。 */
44
+ --dk-mono: var(--ds-font-family-code, "SF Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace);
40
45
  --dk-ease: cubic-bezier(.2, .8, .2, 1);
41
46
  --dk-dur: .16s;
42
- --dk-accent: var(--dsw-alias-state-business-primary, #4d6bfe);
43
- --dk-danger: var(--dsw-alias-state-error-primary, #d1242f);
44
- --dk-success: var(--dsw-alias-state-success-primary, #1a7f37);
45
- --dk-warn: var(--dsw-alias-state-warn-primary, #bf8700);
46
- --dk-border: var(--dsw-alias-border-l1, rgba(127, 127, 127, .22));
47
- --dk-border-strong: var(--dsw-alias-border-l2, rgba(127, 127, 127, .32));
48
- --dk-hover: var(--dsw-alias-interactive-bg-hover, rgba(127, 127, 127, .1));
49
- --dk-hover-solid: var(--dsw-alias-interactive-bg-hover-solid, rgba(127, 127, 127, .16));
50
- --dk-label: var(--dsw-alias-label-primary, #1a1a1a);
51
- --dk-label-2: var(--dsw-alias-label-secondary, #555);
47
+ /* 颜色一律只引用宿主主题令牌(--dsw-*),**不带颜色字面量兜底**:兜底只在取不到值时
48
+ 生效,而这些令牌是存在的——所以它平时永远测不到,只会在宿主改名后安静地顶上一份
49
+ 与主题不同的颜色。本包没有 preview harness,脱离宿主时的配色由 dev 环境的假主题
50
+ 负责,生产 CSS 只引用主题令牌。 */
51
+ --dk-accent: var(--dsw-alias-state-business-primary);
52
+ --dk-danger: var(--dsw-alias-state-error-primary);
53
+ --dk-success: var(--dsw-alias-state-success-primary);
54
+ --dk-warn: var(--dsw-alias-state-warn-primary);
55
+ --dk-border: var(--dsw-alias-border-l1);
56
+ /* 域调色板:日志级别色(.dk_logLevel[data-level])与终端仿真色是终端语义色,不属于
57
+ 主题色板——它们**只在本定义位登记一次**(见下方 --dk-log-*),规则体一律 var() 读。 */
58
+ --dk-border-strong: var(--dsw-alias-border-l2);
59
+ --dk-hover: var(--dsw-alias-interactive-bg-hover);
60
+ --dk-hover-solid: var(--dsw-alias-interactive-bg-hover-solid);
61
+ --dk-label: var(--dsw-alias-label-primary);
62
+ --dk-label-2: var(--dsw-alias-label-secondary);
52
63
  --dk-label-dimmed: var(--dsw-alias-label-dimmed, var(--dk-label-3));
53
- --dk-label-3: var(--dsw-alias-label-tertiary, #888);
54
- --dk-surface: var(--dsw-alias-bg-base, #fff);
55
- --dk-surface-solid: var(--dsw-alias-bg-layer-2, var(--dsw-alias-bg-base, #fff));
56
- --dk-surface-2: var(--dsw-alias-bg-layer-2, #f2f2f2);
57
- --dk-surface-3: var(--dsw-alias-bg-layer-3, #e8e8e8);
58
- --dk-input: var(--dsw-specific-input-major, var(--dsw-alias-bg-base, #fff));
59
- --dk-shadow: 0 16px 40px -12px rgba(0, 0, 0, .32), var(--dsw-shadow-lv3, 0 4px 12px rgba(0, 0, 0, .12));
60
- --dk-shadow-lg: 0 32px 72px -24px rgba(0, 0, 0, .48), 0 2px 8px rgba(0, 0, 0, .16);
64
+ --dk-label-3: var(--dsw-alias-label-tertiary);
65
+ --dk-surface: var(--dsw-alias-bg-base);
66
+ --dk-surface-solid: var(--dsw-alias-bg-layer-2);
67
+ --dk-surface-2: var(--dsw-alias-bg-layer-2);
68
+ --dk-surface-3: var(--dsw-alias-bg-layer-3);
69
+ /* 设置卡片材质:与宿主 base.css 的权威卡片同源(settings-account / plugin-inventory /
70
+ agent-preset 三处逐字相同:`.5px solid settings-card-stroke` + radius-xl + settings-card-fill)。
71
+ 只做宿主令牌的中转,不自带脱离宿主时的兜底配色(同上:兜底由 dev 假主题负责)。 */
72
+ --dk-surface-card: var(--dsw-alias-settings-card-fill);
73
+ --dk-stroke-card: var(--dsw-alias-settings-card-stroke);
74
+ --dk-input: var(--dsw-specific-input-major);
75
+ /* elevation 一律取宿主的三档权威令牌,本包不自造阴影配方(自造的那份是第二份 elevation
76
+ 权威,会和主题的层级语言对不上):
77
+ -panel 浮层:卡片悬停 / 菜单 / toast(本包默认浮起档)
78
+ -prominent 更高一层:对话框 / 悬浮按钮
79
+ -soft 柔光:选中态(规则里直接写 var(--dsw-elevation-soft))。 */
80
+ --dk-shadow: var(--dsw-elevation-panel);
81
+ --dk-shadow-lg: var(--dsw-elevation-prominent);
61
82
  --dk-ring: 0 0 0 2px color-mix(in srgb, var(--dk-accent) 42%, transparent);
62
83
  --dk-log-bg: #0b0e14;
63
84
  --dk-log-fg: #d7dce5;
85
+ --dk-log-trace: #8a93a5;
86
+ --dk-log-debug: #8a93a5;
87
+ --dk-log-info: #6ea8fe;
88
+ --dk-log-warn: #e0a94a;
89
+ --dk-log-error: #ff6b6b;
90
+ --dk-log-ts: #7f8899;
64
91
  }
65
92
 
66
93
  /* ============================ 通用 ============================ */
@@ -108,6 +135,7 @@
108
135
  border-radius: var(--dk-r-md);
109
136
  color: var(--dk-label-2);
110
137
  font-size: 13px;
138
+ line-height: 20px;
111
139
  white-space: nowrap;
112
140
  cursor: pointer;
113
141
  user-select: none;
@@ -165,6 +193,7 @@
165
193
  align-items: center;
166
194
  gap: var(--dk-gap-xs);
167
195
  font-size: 11px;
196
+ line-height: 16px;
168
197
  color: var(--dk-label-3);
169
198
  font-variant-numeric: tabular-nums;
170
199
  }
@@ -173,6 +202,7 @@
173
202
  width: 6px;
174
203
  height: 6px;
175
204
  border-radius: var(--dk-r-pill);
205
+ corner-shape: round;
176
206
  background: var(--dk-label-3);
177
207
  }
178
208
 
@@ -190,7 +220,8 @@
190
220
  align-items: center;
191
221
  justify-content: center;
192
222
  padding: clamp(8px, 3vh, 32px);
193
- background: color-mix(in srgb, #000 42%, transparent);
223
+ /* 宿主权威遮罩(浅 24% / 深 50%);原来的固定 42% 浅色下更深、深色下更浅 */
224
+ background: var(--dsw-alias-bg-mask-1);
194
225
  backdrop-filter: blur(2px);
195
226
  animation: dk_fade var(--dk-dur) var(--dk-ease);
196
227
  }
@@ -207,13 +238,13 @@
207
238
  height: min(820px, 100%);
208
239
  min-height: 420px;
209
240
  overflow: hidden;
210
- border: 1px solid var(--dk-border-strong);
241
+ border: 0;
211
242
  border-radius: var(--dk-r-xl);
212
243
  background: var(--dk-surface-solid);
213
244
  color: var(--dk-label);
214
- box-shadow: var(--dk-shadow-lg);
245
+ box-shadow: var(--dsw-elevation-prominent);
215
246
  font-size: 13px;
216
- line-height: 1.5;
247
+ line-height: 20px;
217
248
  }
218
249
 
219
250
  /*
@@ -240,7 +271,7 @@
240
271
  flex-direction: column;
241
272
  height: min(46%, 380px);
242
273
  min-height: 180px;
243
- border-top: 1px solid var(--dk-border-strong);
274
+ border-top: 0.5px solid var(--dk-border-strong);
244
275
  background: var(--dk-surface-2);
245
276
  animation: dk_drawerIn var(--dk-dur) var(--dk-ease);
246
277
  }
@@ -285,7 +316,7 @@
285
316
  flex: 0 0 auto;
286
317
  min-height: 34px;
287
318
  padding: var(--dk-gap-xs) var(--dk-gap-lg);
288
- border-bottom: 1px solid var(--dk-border);
319
+ border-bottom: 0.5px solid var(--dk-border);
289
320
  }
290
321
 
291
322
  .dk_drawerIcon {
@@ -297,7 +328,8 @@
297
328
  .dk_drawerTitle {
298
329
  min-width: 0;
299
330
  font-size: 12px;
300
- font-weight: 600;
331
+ line-height: 18px;
332
+ font-weight: 500;
301
333
  white-space: nowrap;
302
334
  overflow: hidden;
303
335
  text-overflow: ellipsis;
@@ -306,7 +338,8 @@
306
338
  .dk_drawerHint {
307
339
  flex: none;
308
340
  color: var(--dk-label-3);
309
- font-size: 11px;
341
+ font-size: 12px;
342
+ line-height: 18px;
310
343
  white-space: nowrap;
311
344
  }
312
345
 
@@ -326,7 +359,7 @@
326
359
  flex-wrap: wrap;
327
360
  min-height: 44px;
328
361
  padding: var(--dk-gap-sm) var(--dk-gap-lg);
329
- border-bottom: 1px solid var(--dk-border);
362
+ border-bottom: 0.5px solid var(--dk-border);
330
363
  background: var(--dk-surface-2);
331
364
  }
332
365
 
@@ -348,7 +381,8 @@
348
381
 
349
382
  .dk_title {
350
383
  font-size: 13px;
351
- font-weight: 600;
384
+ line-height: 20px;
385
+ font-weight: 500;
352
386
  letter-spacing: .2px;
353
387
  }
354
388
 
@@ -369,9 +403,12 @@
369
403
  transition: background var(--dk-dur) var(--dk-ease), color var(--dk-dur) var(--dk-ease), opacity var(--dk-dur) var(--dk-ease);
370
404
  }
371
405
 
372
- .dk_iconBtn:hover { background: var(--dk-hover); color: var(--dk-label); }
373
- .dk_iconBtn:focus-visible { outline: none; box-shadow: var(--dk-ring); }
374
- .dk_iconBtn:disabled { opacity: .45; cursor: not-allowed; }
406
+ .dk_iconBtn:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover); color: var(--dk-label); }
407
+ /* 图标按钮也补按下态:与描边/填充按钮同一套 active 语言(官方 interactive-bg-active) */
408
+ .dk_iconBtn:active:not(:disabled) { background: var(--dsw-alias-interactive-bg-active); }
409
+ /* 焦点环换成宿主官方那条 outline(同 .dk_btn),不再用私有 --dk-ring */
410
+ .dk_iconBtn:focus-visible { outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary)); }
411
+ .dk_iconBtn:disabled { opacity: .4; cursor: not-allowed; }
375
412
 
376
413
  /*
377
414
  * 刷新中的图标自己转(data-spin 由各处的 refresh 按钮按 loading 打):
@@ -389,7 +426,7 @@
389
426
  flex: 0 0 auto;
390
427
  flex-wrap: wrap;
391
428
  padding: var(--dk-gap-md) var(--dk-gap-lg);
392
- border-bottom: 1px solid var(--dk-border);
429
+ border-bottom: 0.5px solid var(--dk-border);
393
430
  }
394
431
 
395
432
  /*
@@ -408,11 +445,13 @@
408
445
  .dk_input {
409
446
  height: var(--dk-h-lg);
410
447
  padding: 0 var(--dk-gap-md);
411
- border: 1px solid var(--dk-border-strong);
412
- border-radius: var(--dk-r-sm);
448
+ border: 0.5px solid var(--dk-border-strong);
449
+ /* H32 标准控件 → R12(官方 ui-radius 组件尺寸映射) */
450
+ border-radius: var(--dk-r-md);
413
451
  background: var(--dk-input);
414
452
  color: var(--dk-label);
415
453
  font-size: 13px;
454
+ line-height: 20px;
416
455
  font-family: inherit;
417
456
  transition: border-color var(--dk-dur) var(--dk-ease), box-shadow var(--dk-dur) var(--dk-ease);
418
457
  }
@@ -443,7 +482,7 @@
443
482
  .dk_seg {
444
483
  display: inline-flex;
445
484
  padding: 2px;
446
- border: 1px solid var(--dk-border);
485
+ border: 0.5px solid var(--dk-border);
447
486
  border-radius: var(--dk-r-md);
448
487
  background: var(--dk-surface-2);
449
488
  /*
@@ -468,6 +507,8 @@
468
507
  background: transparent;
469
508
  color: var(--dk-label-2);
470
509
  font-size: 12px;
510
+ /* 官方规范:字号必须与行高配对。分段按钮不是 Button 变体、尺寸不动,只补上配对的 18px */
511
+ line-height: 18px;
471
512
  font-family: inherit;
472
513
  cursor: pointer;
473
514
  transition: background var(--dk-dur) var(--dk-ease), color var(--dk-dur) var(--dk-ease);
@@ -487,7 +528,7 @@
487
528
  background: color-mix(in srgb, var(--dk-accent) 18%, transparent);
488
529
  color: var(--dk-label);
489
530
  font-weight: 600;
490
- box-shadow: 0 1px 2px rgba(0, 0, 0, .12);
531
+ box-shadow: var(--dsw-elevation-soft);
491
532
  }
492
533
 
493
534
  .dk_check {
@@ -495,15 +536,35 @@
495
536
  align-items: center;
496
537
  gap: var(--dk-gap-sm);
497
538
  font-size: 12px;
539
+ line-height: 18px;
498
540
  color: var(--dk-label-2);
499
541
  cursor: pointer;
500
542
  user-select: none;
501
543
  }
502
544
 
503
- .dk_check input { accent-color: var(--dk-accent); }
504
- /* 同上:复选框的 cursor 不随 label 继承(UA 样式),要单独写 */
545
+ /*
546
+ * 复选框的「选中态」走宿主的中性 brand,不走 --dk-accent。
547
+ * 宿主 dsh-client-ui-primitives/lib/Checkbox.module.css 是 16×16 +
548
+ * `accent-color: var(--dsw-alias-brand-primary)`(浅色近黑、深色近白);--dk-accent 是本包的
549
+ * **强调蓝**(business-primary #4176e6),它给状态与徽标用——宿主 Switch 的开启态同样是
550
+ * brand-primary。两个复选框共用一条规则,免得漂成两套(判据见 client-style-spec 检查十四)。
551
+ * cursor 要单独写:复选框的 cursor 不随 label 继承(UA 样式)。
552
+ */
505
553
  .dk_check input[type="checkbox"],
506
- .dk_capRow input[type="checkbox"] { cursor: pointer; }
554
+ .dk_capRow input[type="checkbox"] {
555
+ width: 16px;
556
+ height: 16px;
557
+ margin: 0;
558
+ flex: none;
559
+ cursor: pointer;
560
+ accent-color: var(--dsw-alias-brand-primary);
561
+ }
562
+
563
+ .dk_check input[type="checkbox"]:focus-visible,
564
+ .dk_capRow input[type="checkbox"]:focus-visible {
565
+ outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));
566
+ outline-offset: 2px;
567
+ }
507
568
 
508
569
  /*
509
570
  * 工具条末尾的两个开关(含已停止 / 自动刷新)成组:它们是一个「开关簇」,工具条在宽面板里
@@ -518,39 +579,55 @@
518
579
 
519
580
  /* ============================ 按钮 ============================ */
520
581
 
582
+ /*
583
+ * 描边按钮 = 宿主 Button variant="outline" size="sm"。本包控件都是 H28 档,
584
+ * 故取官方 sm 尺(H28 / R8 / 12px / 18px / padding 0 10px);几何声明与下面的
585
+ * .dk_btnPrimary / .dk_btnDanger 逐项一致——官方要求各变体保持同尺寸同圆角。
586
+ */
521
587
  .dk_btn {
588
+ box-sizing: border-box;
522
589
  display: inline-flex;
523
590
  align-items: center;
524
591
  justify-content: center;
525
- gap: var(--dk-gap-sm);
526
- height: var(--dk-h-md);
527
- padding: 0 var(--dk-gap-lg);
528
- border: 1px solid var(--dk-border-strong);
529
- border-radius: var(--dk-r-sm);
530
- background: var(--dk-surface-solid);
531
- color: var(--dk-label);
532
- font-size: 12px;
592
+ gap: 4px;
593
+ height: 28px;
594
+ padding: 0 10px;
595
+ border: 0.5px solid var(--dsw-alias-border-l3);
596
+ border-radius: var(--dsw-radius-sm);
597
+ /* 官方 Button variant="outline":transparent 底。实心底(--dk-surface-solid)会让
598
+ 按钮在 --dk-surface-2 的行底上变成不透明白块——与官方「卸载」按钮观感对不上。 */
599
+ background: transparent;
600
+ color: var(--dsw-alias-label-primary);
533
601
  font-family: inherit;
534
- cursor: pointer;
602
+ font-size: 12px;
603
+ line-height: 18px;
535
604
  white-space: nowrap;
605
+ cursor: pointer;
536
606
  transition: background var(--dk-dur) var(--dk-ease), border-color var(--dk-dur) var(--dk-ease), color var(--dk-dur) var(--dk-ease);
537
607
  }
538
608
 
539
- .dk_btn:hover { background: var(--dk-hover); }
540
- .dk_btn:active { background: var(--dk-hover-solid); }
541
- .dk_btn:focus-visible { outline: none; box-shadow: var(--dk-ring); }
542
- .dk_btn:disabled { opacity: .45; cursor: not-allowed; }
609
+ .dk_btn:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover); }
610
+ /* 官方 ghost 的按下态:active 用 interactive-bg-active,不是 hover-solid(那是更深的悬停灰) */
611
+ .dk_btn:active:not(:disabled) { background: var(--dsw-alias-interactive-bg-active); }
612
+ /*
613
+ * 焦点环不自造:宿主 51 处组件用的就是这条 outline。私有 --dk-ring(outline:none + box-shadow)
614
+ * 会把宿主全局的 :focus-visible 一并顶掉,键盘用户就没有官方那圈环了。
615
+ */
616
+ .dk_btn:focus-visible { outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary)); }
617
+ .dk_btn:disabled { opacity: .4; cursor: not-allowed; }
543
618
 
544
619
  .dk_btnPrimary {
545
620
  border-color: transparent;
546
- background: var(--dk-accent);
547
- color: #fff;
621
+ background: var(--dsw-alias-button-primary-fill);
622
+ color: var(--dsw-alias-label-primary-foreground);
548
623
  }
549
624
 
550
- .dk_btnPrimary:hover { background: color-mix(in srgb, var(--dk-accent) 86%, #000); }
625
+ /* 基线 .dk_btn:hover / :active 带 :not(:disabled)(权重同为 (0,3,0)),靠这里更靠后取胜 */
626
+ .dk_btnPrimary:hover:not(:disabled) { background: var(--dsw-alias-button-primary-hover); }
551
627
 
552
- .dk_btnDanger { border-color: color-mix(in srgb, var(--dk-danger) 40%, transparent); color: var(--dk-danger); }
553
- .dk_btnDanger:hover { background: color-mix(in srgb, var(--dk-danger) 12%, transparent); }
628
+ .dk_btnDanger { border-color: color-mix(in srgb, var(--dk-danger) 30%, transparent); color: var(--dk-danger); } /* 官方 danger 是 30% 红描边 */
629
+ /* 选择器补 :not(:disabled) 只为跟上基线 .dk_btn:hover 的权重(否则红色 hover 会被灰色盖掉);声明未动 */
630
+ .dk_btnDanger:hover:not(:disabled) { background: color-mix(in srgb, var(--dk-danger) 8%, transparent); } /* 官方把 hover 底重绑成 8% 红 */
554
631
 
555
632
  /* ============================ 主体 / 容器卡片 ============================ */
556
633
 
@@ -641,10 +718,12 @@
641
718
  padding: 4px var(--dk-gap-lg);
642
719
  border: 1px solid color-mix(in srgb, var(--dk-accent) 42%, transparent);
643
720
  border-radius: var(--dk-r-pill);
721
+ corner-shape: round;
644
722
  background: color-mix(in srgb, var(--dk-accent) 12%, var(--dk-surface-solid));
645
723
  backdrop-filter: blur(6px);
646
- box-shadow: 0 2px 10px rgba(0, 0, 0, .10);
724
+ box-shadow: var(--dsw-elevation-panel);
647
725
  font-size: 12px;
726
+ line-height: 18px;
648
727
  color: var(--dk-accent);
649
728
  }
650
729
 
@@ -687,7 +766,7 @@
687
766
  flex-direction: column;
688
767
  gap: var(--dk-gap-sm);
689
768
  padding: var(--dk-gap-lg);
690
- border: 1px solid var(--dk-border);
769
+ border: 0.5px solid var(--dk-border);
691
770
  border-radius: var(--dk-r-lg);
692
771
  background: var(--dk-surface-solid);
693
772
  cursor: pointer;
@@ -717,7 +796,8 @@
717
796
  flex: 1 1 auto;
718
797
  min-width: 0;
719
798
  font-size: 13px;
720
- font-weight: 600;
799
+ line-height: 20px;
800
+ font-weight: 500;
721
801
  overflow: hidden;
722
802
  text-overflow: ellipsis;
723
803
  white-space: nowrap;
@@ -736,6 +816,7 @@
736
816
  gap: var(--dk-gap-md);
737
817
  align-items: baseline;
738
818
  font-size: 12px;
819
+ line-height: 18px;
739
820
  }
740
821
 
741
822
  .dk_cardLabel {
@@ -756,16 +837,17 @@
756
837
  gap: var(--dk-gap-xs);
757
838
  margin-top: var(--dk-gap-sm);
758
839
  padding-top: var(--dk-gap-sm);
759
- border-top: 1px solid var(--dk-border);
840
+ border-top: 0.5px solid var(--dk-border);
760
841
  }
761
842
 
762
843
  .dk_actionBar .dk_iconBtn {
763
- border: 1px solid var(--dk-border);
844
+ /* 描边走官方 .outline 用的 --dsw-alias-border-l3,与它旁边的 .dk_btn 同一条线;尺寸维持不变 */
845
+ border: 0.5px solid var(--dsw-alias-border-l3);
764
846
  background: var(--dk-surface-2);
765
847
  }
766
848
 
767
849
  .dk_actionBar .dk_iconBtn:hover:not(:disabled) {
768
- background: var(--dk-hover-solid);
850
+ background: var(--dsw-alias-interactive-bg-hover);
769
851
  color: var(--dk-label);
770
852
  }
771
853
 
@@ -796,11 +878,12 @@
796
878
  height: 20px;
797
879
  padding: 0 var(--dk-gap-sm);
798
880
  border-radius: var(--dk-r-pill);
799
- border: 1px solid var(--dk-border-strong);
881
+ corner-shape: round;
882
+ border: 0.5px solid var(--dk-border-strong);
800
883
  background: var(--dk-surface-2);
801
884
  color: var(--dk-label-2);
802
885
  font-size: 11px;
803
- line-height: 1;
886
+ line-height: 16px;
804
887
  white-space: nowrap;
805
888
  /* 启停后状态徽标会从「运行中」翻到「已停止」:给个过渡,别硬切 */
806
889
  transition: background-color var(--dk-dur) var(--dk-ease), border-color var(--dk-dur) var(--dk-ease), color var(--dk-dur) var(--dk-ease);
@@ -811,6 +894,7 @@
811
894
  width: 6px;
812
895
  height: 6px;
813
896
  border-radius: var(--dk-r-pill);
897
+ corner-shape: round;
814
898
  background: currentColor;
815
899
  opacity: .8;
816
900
  }
@@ -833,6 +917,7 @@
833
917
  background: var(--dk-surface-3);
834
918
  color: var(--dk-label-2);
835
919
  font-size: 11px;
920
+ line-height: 16px;
836
921
  }
837
922
 
838
923
  /* 需关注原因徽标(总览异常表) */
@@ -847,6 +932,7 @@
847
932
  background: var(--dk-surface-3);
848
933
  color: var(--dk-label-2);
849
934
  font-size: 11px;
935
+ line-height: 16px;
850
936
  white-space: nowrap;
851
937
  }
852
938
 
@@ -870,7 +956,8 @@
870
956
  .dk_detailTitle {
871
957
  min-width: 0;
872
958
  font-size: 13px;
873
- font-weight: 600;
959
+ line-height: 20px;
960
+ font-weight: 500;
874
961
  overflow: hidden;
875
962
  text-overflow: ellipsis;
876
963
  white-space: nowrap;
@@ -879,7 +966,8 @@
879
966
  .dk_detailSub {
880
967
  flex: none;
881
968
  color: var(--dk-label-3);
882
- font-size: 11px;
969
+ font-size: 12px;
970
+ line-height: 18px;
883
971
  font-family: var(--dk-mono);
884
972
  }
885
973
 
@@ -890,7 +978,7 @@
890
978
  flex: 0 0 auto;
891
979
  flex-wrap: wrap; /* 窄面板下过滤行换行,而不是把右侧控件裁掉(D60) */
892
980
  padding: 0 var(--dk-gap-lg);
893
- border-bottom: 1px solid var(--dk-border);
981
+ border-bottom: 0.5px solid var(--dk-border);
894
982
  }
895
983
 
896
984
  .dk_filterBar {
@@ -923,6 +1011,7 @@
923
1011
  background: transparent;
924
1012
  color: var(--dk-label-2);
925
1013
  font-size: 12px;
1014
+ line-height: 18px;
926
1015
  font-family: inherit;
927
1016
  cursor: pointer;
928
1017
  }
@@ -953,22 +1042,25 @@
953
1042
 
954
1043
  .dk_toolLabel {
955
1044
  color: var(--dk-label-3);
956
- font-size: 11px;
957
- font-weight: 600;
1045
+ font-size: 12px;
1046
+ line-height: 18px;
1047
+ font-weight: 500;
958
1048
  letter-spacing: .4px;
959
1049
  }
960
1050
 
961
- .dk_selectSm { height: var(--dk-h-md); padding: 0 var(--dk-gap-sm); font-size: 12px; }
1051
+ .dk_selectSm { height: var(--dk-h-md); padding: 0 var(--dk-gap-sm); font-size: 12px; line-height: 18px; }
962
1052
 
963
1053
  .dk_pill {
964
1054
  min-width: 44px;
965
1055
  height: var(--dk-h-md);
966
1056
  padding: 0 var(--dk-gap-md);
967
- border: 1px solid var(--dk-border-strong);
1057
+ border: 0.5px solid var(--dk-border-strong);
968
1058
  border-radius: var(--dk-r-pill);
1059
+ corner-shape: round;
969
1060
  background: var(--dk-surface-2);
970
1061
  color: var(--dk-label-3);
971
1062
  font-size: 12px;
1063
+ line-height: 18px;
972
1064
  font-family: inherit;
973
1065
  cursor: pointer;
974
1066
  transition: background var(--dk-dur) var(--dk-ease), color var(--dk-dur) var(--dk-ease), border-color var(--dk-dur) var(--dk-ease);
@@ -1004,6 +1096,7 @@
1004
1096
  cursor: not-allowed;
1005
1097
  }
1006
1098
 
1099
+ /*
1007
1100
  .dk_pill:disabled:hover { background: var(--dk-surface-2); }
1008
1101
 
1009
1102
  /* FOLLOW 连接状态行:小圆点 + 文案(连接错误只在这里表达,不弹横幅刷屏) */
@@ -1013,10 +1106,11 @@
1013
1106
  gap: var(--dk-gap-sm);
1014
1107
  flex: 0 0 auto;
1015
1108
  padding: var(--dk-gap-xs) var(--dk-gap-lg);
1016
- border-bottom: 1px solid var(--dk-border);
1109
+ border-bottom: 0.5px solid var(--dk-border);
1017
1110
  background: var(--dk-surface-2);
1018
1111
  color: var(--dk-label-3);
1019
- font-size: 11px;
1112
+ font-size: 12px;
1113
+ line-height: 18px;
1020
1114
  }
1021
1115
 
1022
1116
  .dk_followState::before {
@@ -1024,6 +1118,7 @@
1024
1118
  width: 6px;
1025
1119
  height: 6px;
1026
1120
  border-radius: 50%;
1121
+ corner-shape: round;
1027
1122
  background: var(--dk-label-3);
1028
1123
  }
1029
1124
 
@@ -1040,14 +1135,16 @@
1040
1135
  z-index: 2;
1041
1136
  height: var(--dk-h-md);
1042
1137
  padding: 0 var(--dk-gap-md);
1043
- border: 1px solid var(--dk-border-strong);
1138
+ border: 0;
1044
1139
  border-radius: var(--dk-r-pill);
1140
+ corner-shape: round;
1045
1141
  background: var(--dk-surface-2);
1046
1142
  color: var(--dk-label);
1047
- font-size: 11px;
1143
+ font-size: 12px;
1144
+ line-height: 18px;
1048
1145
  font-family: inherit;
1049
1146
  cursor: pointer;
1050
- box-shadow: 0 2px 10px rgba(0, 0, 0, .28);
1147
+ box-shadow: var(--dsw-elevation-prominent);
1051
1148
  }
1052
1149
 
1053
1150
  .dk_backToBottom:hover { background: var(--dk-hover-solid); }
@@ -1100,7 +1197,8 @@
1100
1197
  transform: translateY(-50%);
1101
1198
  white-space: nowrap;
1102
1199
  color: var(--dk-label-3);
1103
- font-size: 11px;
1200
+ font-size: 12px;
1201
+ line-height: 18px;
1104
1202
  font-variant-numeric: tabular-nums;
1105
1203
  }
1106
1204
 
@@ -1113,7 +1211,7 @@
1113
1211
  color: var(--dk-log-fg);
1114
1212
  font-family: var(--dk-mono);
1115
1213
  font-size: 12px;
1116
- line-height: 1.6;
1214
+ line-height: 18px;
1117
1215
  /*
1118
1216
  * 关掉浏览器的滚动锚定(D152):窗口化会把垫高与行**成批地换掉**,Chrome 的锚定
1119
1217
  * 会挑一个节点把 scrollTop 拽回去,跟「贴底钉住 / 锚点修正」互相打架——表现就是
@@ -1148,7 +1246,7 @@
1148
1246
  .dk_logLine mark {
1149
1247
  background: color-mix(in srgb, var(--dk-warn) 62%, transparent);
1150
1248
  color: inherit;
1151
- border-radius: 2px;
1249
+ border-radius: var(--dsw-radius-xs);
1152
1250
  }
1153
1251
 
1154
1252
  /*
@@ -1167,16 +1265,17 @@
1167
1265
  font-weight: 600;
1168
1266
  }
1169
1267
 
1170
- .dk_logLevel[data-level="TRACE"] { color: #8a93a5; }
1171
- .dk_logLevel[data-level="DEBUG"] { color: #8a93a5; }
1172
- .dk_logLevel[data-level="INFO"] { color: #6ea8fe; }
1173
- .dk_logLevel[data-level="WARN"] { color: #e0a94a; }
1174
- .dk_logLevel[data-level="ERROR"] { color: #ff6b6b; }
1175
- .dk_logLevel[data-level="FATAL"] { color: #ff6b6b; font-weight: 700; }
1268
+ /* 日志级别色:域调色板,值登记在 :where(html, body) 的 --dk-log-*(唯一登记处),这里只 var() 读 */
1269
+ .dk_logLevel[data-level="TRACE"] { color: var(--dk-log-trace); }
1270
+ .dk_logLevel[data-level="DEBUG"] { color: var(--dk-log-debug); }
1271
+ .dk_logLevel[data-level="INFO"] { color: var(--dk-log-info); }
1272
+ .dk_logLevel[data-level="WARN"] { color: var(--dk-log-warn); }
1273
+ .dk_logLevel[data-level="ERROR"] { color: var(--dk-log-error); }
1274
+ .dk_logLevel[data-level="FATAL"] { color: var(--dk-log-error); font-weight: 600; }
1176
1275
 
1177
- .dk_logTs { margin-right: var(--dk-gap-sm); color: #7f8899; }
1276
+ .dk_logTs { margin-right: var(--dk-gap-sm); color: var(--dk-log-ts); }
1178
1277
  .dk_logText { color: inherit; }
1179
- .dk_logMore { color: #7f8899; font-style: italic; }
1278
+ .dk_logMore { color: var(--dk-log-ts); font-style: italic; }
1180
1279
 
1181
1280
  /* ------------------------------------------------------------------ *
1182
1281
  * 日志 → 会话桥:右键菜单 / 预览卡片 / 失败提示
@@ -1197,20 +1296,21 @@
1197
1296
  min-width: 220px;
1198
1297
  max-width: 320px;
1199
1298
  padding: var(--dk-gap-xs);
1200
- border: 1px solid var(--dk-border-strong);
1299
+ border: 0;
1201
1300
  border-radius: var(--dk-r-md);
1202
1301
  background: var(--dk-surface-solid);
1203
- box-shadow: var(--dk-shadow);
1302
+ box-shadow: var(--dsw-elevation-prominent);
1204
1303
  color: var(--dk-label);
1205
1304
  font-size: 12px;
1305
+ line-height: 18px;
1206
1306
  }
1207
1307
 
1208
- .dk_menuHead { padding: 6px 8px 2px; font-weight: 600; }
1308
+ .dk_menuHead { padding: 6px 8px 2px; font-weight: 500; }
1209
1309
  .dk_menuSub {
1210
1310
  padding: 0 8px 6px;
1211
1311
  color: var(--dk-label-3);
1212
- font-size: 11px;
1213
- line-height: 1.5;
1312
+ font-size: 12px;
1313
+ line-height: 18px;
1214
1314
  word-break: break-all;
1215
1315
  }
1216
1316
 
@@ -1233,15 +1333,15 @@
1233
1333
  .dk_menuItem:focus-visible { outline: none; box-shadow: var(--dk-ring); }
1234
1334
  .dk_menuItem:disabled { cursor: not-allowed; }
1235
1335
  .dk_menuItem:disabled .dk_menuItemLabel { color: var(--dk-label-3); }
1236
- .dk_menuItemHint { color: var(--dk-label-3); font-size: 11px; }
1336
+ .dk_menuItemHint { color: var(--dk-label-3); font-size: 12px; line-height: 18px; }
1237
1337
 
1238
1338
  .dk_menuNote {
1239
1339
  margin-top: var(--dk-gap-xs);
1240
1340
  padding: 6px 8px 2px;
1241
- border-top: 1px solid var(--dk-border);
1341
+ border-top: 0.5px solid var(--dk-border);
1242
1342
  color: var(--dk-label-3);
1243
- font-size: 11px;
1244
- line-height: 1.5;
1343
+ font-size: 12px;
1344
+ line-height: 18px;
1245
1345
  }
1246
1346
 
1247
1347
  .dk_askToast {
@@ -1257,7 +1357,7 @@
1257
1357
  box-shadow: var(--dk-shadow);
1258
1358
  color: var(--dk-danger);
1259
1359
  font-size: 12px;
1260
- line-height: 1.6;
1360
+ line-height: 18px;
1261
1361
  }
1262
1362
 
1263
1363
  /* 成功回执:同一枚 toast 换配色(默认那套是「失败」的红) */
@@ -1272,6 +1372,7 @@
1272
1372
  grid-template-columns: 92px 1fr;
1273
1373
  gap: var(--dk-gap-xs) var(--dk-gap-md);
1274
1374
  font-size: 12px;
1375
+ line-height: 18px;
1275
1376
  }
1276
1377
 
1277
1378
  .dk_kvKey { color: var(--dk-label-3); }
@@ -1299,7 +1400,7 @@
1299
1400
  color: var(--dk-log-fg);
1300
1401
  font-family: var(--dk-mono);
1301
1402
  font-size: 12px;
1302
- line-height: 1.55;
1403
+ line-height: 18px;
1303
1404
  white-space: pre-wrap;
1304
1405
  word-break: break-word;
1305
1406
  max-height: none;
@@ -1308,7 +1409,7 @@
1308
1409
  .dk_logBox mark {
1309
1410
  background: color-mix(in srgb, var(--dk-warn) 55%, transparent);
1310
1411
  color: inherit;
1311
- border-radius: 2px;
1412
+ border-radius: var(--dsw-radius-xs);
1312
1413
  }
1313
1414
 
1314
1415
  /* 统计 */
@@ -1316,12 +1417,13 @@
1316
1417
  width: 100%;
1317
1418
  border-collapse: collapse;
1318
1419
  font-size: 12px;
1420
+ line-height: 18px;
1319
1421
  }
1320
1422
 
1321
1423
  .dk_stats th,
1322
1424
  .dk_stats td {
1323
1425
  padding: var(--dk-gap-sm) var(--dk-gap-md);
1324
- border-bottom: 1px solid var(--dk-border);
1426
+ border-bottom: 0.5px solid var(--dk-border);
1325
1427
  text-align: left;
1326
1428
  white-space: nowrap;
1327
1429
  }
@@ -1338,6 +1440,7 @@
1338
1440
  width: 72px;
1339
1441
  height: 6px;
1340
1442
  border-radius: var(--dk-r-pill);
1443
+ corner-shape: round;
1341
1444
  background: var(--dk-surface-3);
1342
1445
  overflow: hidden;
1343
1446
  }
@@ -1346,6 +1449,7 @@
1346
1449
  position: absolute;
1347
1450
  inset: 0 auto 0 0;
1348
1451
  border-radius: var(--dk-r-pill);
1452
+ corner-shape: round;
1349
1453
  background: var(--dk-accent);
1350
1454
  transition: width var(--dk-dur) var(--dk-ease);
1351
1455
  }
@@ -1391,12 +1495,13 @@
1391
1495
  width: 100%;
1392
1496
  border-collapse: collapse;
1393
1497
  font-size: 12px;
1498
+ line-height: 18px;
1394
1499
  }
1395
1500
 
1396
1501
  .dk_images th,
1397
1502
  .dk_images td {
1398
1503
  padding: var(--dk-gap-sm) var(--dk-gap-md);
1399
- border-bottom: 1px solid var(--dk-border);
1504
+ border-bottom: 0.5px solid var(--dk-border);
1400
1505
  text-align: left;
1401
1506
  white-space: nowrap;
1402
1507
  }
@@ -1419,17 +1524,18 @@
1419
1524
  justify-content: center;
1420
1525
  width: 16px;
1421
1526
  height: 16px;
1422
- border: 1px solid var(--dk-border-strong);
1527
+ border: 0.5px solid var(--dk-border-strong);
1423
1528
  border-radius: var(--dk-r-xs);
1424
1529
  background: var(--dk-input);
1425
1530
  color: transparent;
1426
1531
  font-size: 11px;
1427
- line-height: 1;
1532
+ line-height: 16px;
1428
1533
  transition: background var(--dk-dur) var(--dk-ease), border-color var(--dk-dur) var(--dk-ease), color var(--dk-dur) var(--dk-ease);
1429
1534
  }
1430
1535
 
1431
1536
  .dk_pick::after { content: '✓'; }
1432
- .dk_pick[data-on="1"] { background: var(--dk-accent); border-color: var(--dk-accent); color: #fff; }
1537
+ /* 实心填充上的文字走宿主官方前景令牌(浅色档 #fff、深色档深墨色) */
1538
+ .dk_pick[data-on="1"] { background: var(--dk-accent); border-color: var(--dk-accent); color: var(--dsw-alias-label-primary-foreground); }
1433
1539
 
1434
1540
  /* 选择态:整张卡片就是勾选开关,动作条收起(否则一边多选一边能点到启停删) */
1435
1541
  .dk_card[data-pick="1"] .dk_actionBar { display: none; }
@@ -1443,7 +1549,7 @@
1443
1549
  gap: var(--dk-gap-sm);
1444
1550
  flex: 0 0 auto;
1445
1551
  padding: var(--dk-gap-sm) var(--dk-gap-lg);
1446
- border-bottom: 1px solid var(--dk-border);
1552
+ border-bottom: 0.5px solid var(--dk-border);
1447
1553
  background: var(--dk-surface-2);
1448
1554
  }
1449
1555
 
@@ -1462,7 +1568,8 @@
1462
1568
  }
1463
1569
 
1464
1570
  .dk_pickPresetsLabel {
1465
- font-size: 11px;
1571
+ font-size: 12px;
1572
+ line-height: 18px;
1466
1573
  color: var(--dk-label-3);
1467
1574
  }
1468
1575
 
@@ -1470,11 +1577,13 @@
1470
1577
  .dk_chip {
1471
1578
  height: var(--dk-h-sm);
1472
1579
  padding: 0 var(--dk-gap-md);
1473
- border: 1px solid var(--dk-border-strong);
1580
+ border: 0.5px solid var(--dk-border-strong);
1474
1581
  border-radius: var(--dk-r-pill);
1582
+ corner-shape: round;
1475
1583
  background: var(--dk-surface-solid);
1476
1584
  color: var(--dk-label-2);
1477
1585
  font-size: 11px;
1586
+ line-height: 16px;
1478
1587
  font-family: inherit;
1479
1588
  font-variant-numeric: tabular-nums;
1480
1589
  cursor: pointer;
@@ -1488,6 +1597,7 @@
1488
1597
 
1489
1598
  .dk_pickCount {
1490
1599
  font-size: 12px;
1600
+ line-height: 18px;
1491
1601
  font-weight: 600;
1492
1602
  color: var(--dk-label);
1493
1603
  font-variant-numeric: tabular-nums;
@@ -1505,16 +1615,28 @@
1505
1615
  .dk_activity {
1506
1616
  flex: 0 0 auto;
1507
1617
  margin-bottom: var(--dk-gap-lg);
1508
- border: 1px solid var(--dk-border);
1618
+ border: 0.5px solid var(--dk-border);
1509
1619
  border-radius: var(--dk-r-md);
1510
1620
  background: var(--dk-surface-2);
1511
1621
  overflow: hidden;
1512
1622
  }
1513
1623
 
1624
+ /*
1625
+ * 头行:折叠按钮占满剩余宽度,「重连」是它的兄弟而不是子元素
1626
+ * (按钮里嵌按钮既非法,也会把两个动作读成一个)。所以这里用 flex 行做容器,
1627
+ * 让折叠按钮 flex:1 吃掉可用宽度,重连按钮贴右侧。
1628
+ */
1629
+ .dk_activityHeadRow {
1630
+ display: flex;
1631
+ align-items: center;
1632
+ min-width: 0;
1633
+ }
1634
+
1514
1635
  .dk_activityHead {
1515
1636
  display: flex;
1516
1637
  align-items: center;
1517
1638
  gap: var(--dk-gap-md);
1639
+ flex: 1;
1518
1640
  width: 100%;
1519
1641
  min-width: 0;
1520
1642
  padding: var(--dk-gap-sm) var(--dk-gap-lg);
@@ -1523,13 +1645,32 @@
1523
1645
  color: var(--dk-label);
1524
1646
  font-family: inherit;
1525
1647
  font-size: 12px;
1648
+ line-height: 18px;
1526
1649
  text-align: left;
1527
1650
  cursor: pointer;
1528
1651
  }
1529
1652
 
1530
1653
  .dk_activityHead:hover { background: var(--dk-hover); }
1531
1654
  .dk_activityHead:focus-visible { outline: none; box-shadow: var(--dk-ring); }
1532
- .dk_activityTitle { flex: none; font-weight: 600; letter-spacing: .3px; }
1655
+ .dk_activityTitle { flex: none; font-weight: 500; letter-spacing: .3px; }
1656
+
1657
+ /* 断开时的「重连」:只在终止态出现,用危险色的边框暗示「这里出事了,点它修」 */
1658
+ .dk_activityRetry {
1659
+ flex: none;
1660
+ margin-right: var(--dk-gap-lg);
1661
+ padding: 2px 10px;
1662
+ border: 1px solid var(--dk-danger);
1663
+ border-radius: var(--dk-r-sm);
1664
+ background: transparent;
1665
+ color: var(--dk-danger);
1666
+ font-family: inherit;
1667
+ font-size: 12px;
1668
+ line-height: 18px;
1669
+ cursor: pointer;
1670
+ }
1671
+
1672
+ .dk_activityRetry:hover { background: var(--dk-hover); }
1673
+ .dk_activityRetry:focus-visible { outline: none; box-shadow: var(--dk-ring); }
1533
1674
 
1534
1675
  /* 状态点沿用 .dk_followState 的语义色,但内联在标题行里、不占整行也没有下边框 */
1535
1676
  .dk_activityState {
@@ -1538,7 +1679,8 @@
1538
1679
  gap: var(--dk-gap-sm);
1539
1680
  flex: none;
1540
1681
  color: var(--dk-label-3);
1541
- font-size: 11px;
1682
+ font-size: 12px;
1683
+ line-height: 18px;
1542
1684
  }
1543
1685
 
1544
1686
  .dk_activityState::before {
@@ -1546,6 +1688,7 @@
1546
1688
  width: 6px;
1547
1689
  height: 6px;
1548
1690
  border-radius: 50%;
1691
+ corner-shape: round;
1549
1692
  background: var(--dk-label-3);
1550
1693
  }
1551
1694
 
@@ -1574,7 +1717,8 @@
1574
1717
  .dk_activityEmpty {
1575
1718
  padding: 0 var(--dk-gap-lg) var(--dk-gap-md);
1576
1719
  color: var(--dk-label-3);
1577
- font-size: 11px;
1720
+ font-size: 12px;
1721
+ line-height: 18px;
1578
1722
  }
1579
1723
 
1580
1724
  .dk_activityItem {
@@ -1583,10 +1727,11 @@
1583
1727
  gap: var(--dk-gap-sm);
1584
1728
  max-width: 100%;
1585
1729
  padding: 2px var(--dk-gap-sm);
1586
- border: 1px solid var(--dk-border);
1730
+ border: 0.5px solid var(--dk-border);
1587
1731
  border-radius: var(--dk-r-xs);
1588
1732
  background: var(--dk-surface-solid);
1589
1733
  font-size: 11px;
1734
+ line-height: 16px;
1590
1735
  }
1591
1736
 
1592
1737
  .dk_activityTime {
@@ -1666,7 +1811,7 @@
1666
1811
  flex-direction: column;
1667
1812
  gap: var(--dk-gap-sm);
1668
1813
  padding: var(--dk-gap-md) var(--dk-gap-lg);
1669
- border: 1px solid var(--dk-border);
1814
+ border: 0.5px solid var(--dk-border);
1670
1815
  border-radius: var(--dk-r-md);
1671
1816
  background: var(--dk-surface-solid);
1672
1817
  color: inherit;
@@ -1696,7 +1841,8 @@
1696
1841
  flex: 1 1 auto;
1697
1842
  min-width: 0;
1698
1843
  font-size: 13px;
1699
- font-weight: 600;
1844
+ line-height: 20px;
1845
+ font-weight: 500;
1700
1846
  overflow: hidden;
1701
1847
  text-overflow: ellipsis;
1702
1848
  white-space: nowrap;
@@ -1723,6 +1869,7 @@
1723
1869
  gap: var(--dk-gap-xs);
1724
1870
  min-width: 0;
1725
1871
  font-size: 12px;
1872
+ line-height: 18px;
1726
1873
  color: var(--dk-label-3);
1727
1874
  }
1728
1875
 
@@ -1730,6 +1877,7 @@
1730
1877
 
1731
1878
  .dk_ovCountValue {
1732
1879
  font-size: 16px;
1880
+ line-height: 24px;
1733
1881
  font-weight: 600;
1734
1882
  font-variant-numeric: tabular-nums;
1735
1883
  text-align: right;
@@ -1749,6 +1897,7 @@
1749
1897
  align-items: center;
1750
1898
  gap: var(--dk-gap-sm);
1751
1899
  font-size: 12px;
1900
+ line-height: 18px;
1752
1901
  color: var(--dk-label-3);
1753
1902
  }
1754
1903
 
@@ -1761,6 +1910,7 @@
1761
1910
  gap: var(--dk-gap-sm);
1762
1911
  min-width: 0;
1763
1912
  font-size: 12px;
1913
+ line-height: 18px;
1764
1914
  }
1765
1915
 
1766
1916
  /* SSH 报错是一长串:卡片里只留一行,全量在 title 里 */
@@ -1776,7 +1926,8 @@
1776
1926
  .dk_ovSection {
1777
1927
  margin: 0 0 var(--dk-gap-sm);
1778
1928
  font-size: 12px;
1779
- font-weight: 600;
1929
+ line-height: 18px;
1930
+ font-weight: 500;
1780
1931
  color: var(--dk-label-2);
1781
1932
  }
1782
1933
 
@@ -1796,8 +1947,8 @@
1796
1947
  text-align: center;
1797
1948
  }
1798
1949
 
1799
- .dk_emptyTitle { font-size: 13px; color: var(--dk-label-2); }
1800
- .dk_emptyHint { font-size: 12px; max-width: 420px; line-height: 1.6; }
1950
+ .dk_emptyTitle { font-size: 13px; line-height: 20px; color: var(--dk-label-2); }
1951
+ .dk_emptyHint { font-size: 12px; max-width: 420px; line-height: 18px; }
1801
1952
 
1802
1953
  .dk_banner {
1803
1954
  display: flex;
@@ -1810,7 +1961,7 @@
1810
1961
  background: color-mix(in srgb, var(--dk-danger) 8%, transparent);
1811
1962
  color: var(--dk-label);
1812
1963
  font-size: 12px;
1813
- line-height: 1.6;
1964
+ line-height: 18px;
1814
1965
  }
1815
1966
 
1816
1967
  .dk_banner[data-kind="warn"] {
@@ -1837,20 +1988,20 @@
1837
1988
  align-items: center;
1838
1989
  justify-content: center;
1839
1990
  padding: var(--dk-gap-lg);
1840
- background: color-mix(in srgb, #000 40%, transparent);
1991
+ background: var(--dsw-alias-bg-mask-1);
1841
1992
  }
1842
1993
 
1843
1994
  .dk_confirm {
1844
1995
  width: min(420px, 100%);
1845
1996
  padding: var(--dk-gap-xl);
1846
- border: 1px solid var(--dk-border-strong);
1997
+ border: 0;
1847
1998
  border-radius: var(--dk-r-lg);
1848
1999
  background: var(--dk-surface-solid);
1849
- box-shadow: var(--dk-shadow-lg);
2000
+ box-shadow: var(--dsw-elevation-prominent);
1850
2001
  }
1851
2002
 
1852
- .dk_confirmTitle { font-size: 13px; font-weight: 600; margin-bottom: var(--dk-gap-md); }
1853
- .dk_confirmText { font-size: 12px; color: var(--dk-label-2); line-height: 1.7; margin-bottom: var(--dk-gap-lg); }
2003
+ .dk_confirmTitle { font-size: 13px; line-height: 20px; font-weight: 600; margin-bottom: var(--dk-gap-md); }
2004
+ .dk_confirmText { font-size: 12px; color: var(--dk-label-2); line-height: 18px; margin-bottom: var(--dk-gap-lg); }
1854
2005
  .dk_confirmActions { display: flex; justify-content: flex-end; gap: var(--dk-gap-md); }
1855
2006
 
1856
2007
  /* ============================ 设置卡片 ============================ */
@@ -1866,14 +2017,17 @@
1866
2017
 
1867
2018
  .dk_settingsCard {
1868
2019
  list-style: none;
1869
- border: 1px solid var(--dk-border-strong);
1870
- border-radius: var(--dk-r-xl);
1871
- background: var(--dk-surface-3);
2020
+ /* 与宿主设置卡片同材质:.5px 发丝描边 + settings-card 底 + radius-xl。
2021
+ 原先的 1px border-l2 + 12px 圆角 + bg-layer-3 是「另一套」——宿主自己三张卡片都不这么写。 */
2022
+ border: .5px solid var(--dk-stroke-card);
2023
+ border-radius: var(--dsw-radius-xl);
2024
+ background: var(--dk-surface-card);
1872
2025
  transition: border-color var(--dk-dur) var(--dk-ease), background var(--dk-dur) var(--dk-ease);
1873
2026
  }
1874
2027
 
1875
2028
  .dk_settingsCard:hover { border-color: var(--dk-label-dimmed); }
1876
- .dk_settingsCardOpen { background: var(--dk-surface-2); border-color: var(--dk-label-dimmed); }
2029
+ /* 展开态比折叠态低一档:底色整体上移一档(fill 已是 layer-2)后,这里落到 layer-1 */
2030
+ .dk_settingsCardOpen { background: var(--dsw-alias-bg-layer-1); border-color: var(--dk-label-dimmed); }
1877
2031
 
1878
2032
  .dk_settingsHead {
1879
2033
  display: flex;
@@ -1882,7 +2036,7 @@
1882
2036
  width: 100%;
1883
2037
  padding: var(--dk-pad-cardHead);
1884
2038
  border: 0;
1885
- border-radius: var(--dk-r-xl);
2039
+ border-radius: var(--dsw-radius-xl);
1886
2040
  background: transparent;
1887
2041
  color: inherit;
1888
2042
  font: inherit;
@@ -1892,22 +2046,26 @@
1892
2046
 
1893
2047
  .dk_settingsHead:focus-visible { outline: none; box-shadow: var(--dk-ring); }
1894
2048
  .dk_settingsHeadText { display: flex; flex-direction: column; gap: var(--dk-gap-xs); flex: 1; min-width: 0; }
1895
- .dk_settingsName { color: var(--dk-label); font-size: 14px; font-weight: 600; line-height: 1.4; }
2049
+ .dk_settingsName { color: var(--dk-label); font-size: 14px; font-weight: 500; line-height: 20px; }
1896
2050
  /* dsh-plugin-kit 套件徽标(约定见 @hyzyn/dsh-kit README:全部 kit 设置卡片共用) */
1897
2051
  .dshkit_badge {
1898
2052
  flex: none;
1899
2053
  margin-left: auto;
1900
2054
  padding: 1px 8px;
1901
2055
  border-radius: 999px;
2056
+ corner-shape: round;
1902
2057
  font-size: 11px;
1903
2058
  font-weight: 600;
1904
2059
  line-height: 16px;
1905
2060
  letter-spacing: 0.02em;
1906
2061
  color: var(--dk-label-2, var(--dsw-alias-label-dimmed));
1907
- background: var(--dk-bg-2, var(--dsw-alias-bg-layer-2));
1908
- border: 1px solid var(--dk-border, var(--dsw-alias-border-l1));
2062
+ /* 原先写的是 --dk-bg-2(本文件从未定义)——有 fallback 所以不报错,但会**静默降级**成
2063
+ --dsw-alias-bg-layer-2,绕过了 --dk-* 令牌层(皮肤下拿不到本包的层 2 取值)。
2064
+ 真名是 --dk-surface-2。守卫:client-lint 检查五。 */
2065
+ background: var(--dk-surface-2, var(--dsw-alias-bg-layer-2));
2066
+ border: 0.5px solid var(--dk-border, var(--dsw-alias-border-l1));
1909
2067
  }
1910
- .dk_settingsDesc { color: var(--dk-label-2); font-size: 12px; line-height: 1.5; }
2068
+ .dk_settingsDesc { color: var(--dk-label-2); font-size: 12px; line-height: 18px; }
1911
2069
 
1912
2070
  .dk_settingsChevron {
1913
2071
  flex: none;
@@ -1925,15 +2083,17 @@
1925
2083
  padding: 2px var(--dk-gap-xl) var(--dk-gap-xl);
1926
2084
  color: var(--dk-label);
1927
2085
  font-size: 13px;
2086
+ line-height: 20px;
1928
2087
  }
1929
2088
 
1930
2089
  .dk_cardSection {
1931
2090
  margin-top: var(--dk-gap-xs);
1932
2091
  padding-bottom: var(--dk-gap-xs);
1933
- border-bottom: 1px solid var(--dk-border);
2092
+ border-bottom: 0.5px solid var(--dk-border);
1934
2093
  color: var(--dk-label-3);
1935
2094
  font-size: 12px;
1936
- font-weight: 600;
2095
+ line-height: 18px;
2096
+ font-weight: 500;
1937
2097
  letter-spacing: .3px;
1938
2098
  }
1939
2099
 
@@ -1951,8 +2111,8 @@
1951
2111
  * 差 2.5px 错开,基线也高低不齐。给死行高后两种文本的行框等高,输入框顶边对齐。
1952
2112
  * 别删成 line-height: normal —— 一删就退回字体度量决定行框。
1953
2113
  */
1954
- .dk_label { font-size: 12px; line-height: 1.4; color: var(--dk-label-2); }
1955
- .dk_hint { font-size: 11px; color: var(--dk-label-3); line-height: 1.6; }
2114
+ .dk_label { font-size: 12px; line-height: 18px; color: var(--dk-label-2); }
2115
+ .dk_hint { font-size: 12px; color: var(--dk-label-3); line-height: 18px; }
1956
2116
  .dk_row { display: flex; align-items: center; gap: var(--dk-gap-md); flex-wrap: wrap; }
1957
2117
 
1958
2118
  /*
@@ -1995,7 +2155,7 @@
1995
2155
  gap: var(--dk-gap-sm);
1996
2156
  align-items: center;
1997
2157
  padding: var(--dk-gap-sm);
1998
- border: 1px solid var(--dk-border);
2158
+ border: 0.5px solid var(--dk-border);
1999
2159
  border-radius: var(--dk-r-md);
2000
2160
  background: var(--dk-surface-2);
2001
2161
  }
@@ -2046,11 +2206,12 @@
2046
2206
  }
2047
2207
  .dk_capLabel {
2048
2208
  font-size: 12px;
2209
+ line-height: 18px;
2049
2210
  color: var(--dk-label-2);
2050
2211
  cursor: pointer;
2051
2212
  user-select: none;
2052
2213
  }
2053
- .dk_capRow input[type="checkbox"] { accent-color: var(--dk-accent); }
2214
+ /* 复选框的几何与选中色见 .dk_check 那一处(两处共用一条规则)。 */
2054
2215
  .dk_capState {
2055
2216
  /* 显式落在第二列:它跟的是「文字」那一列的左缘,而不是行左缘 */
2056
2217
  grid-column: 2;
@@ -2058,9 +2219,9 @@
2058
2219
  align-items: center;
2059
2220
  gap: var(--dk-gap-sm);
2060
2221
  /* 与 .dk_hint 同档:它是说明性文字,不该跟开关抢注意力 */
2061
- font-size: 11px;
2222
+ font-size: 12px;
2062
2223
  color: var(--dk-label-3);
2063
- line-height: 1.6;
2224
+ line-height: 18px;
2064
2225
  }
2065
2226
  /* 撤销按钮推到第二列右缘:两个能力的按钮落在同一条竖线上,不会跟着标签长度左右跳 */
2066
2227
  .dk_capRevoke {
@@ -2103,11 +2264,12 @@
2103
2264
  min-width: 0;
2104
2265
  overflow-x: auto;
2105
2266
  padding: 6px 8px;
2106
- border: 1px solid var(--dk-border);
2267
+ border: 0.5px solid var(--dk-border);
2107
2268
  border-radius: 4px;
2108
2269
  background: var(--dk-surface-2);
2109
2270
  font-family: var(--dk-mono);
2110
2271
  font-size: 12px;
2272
+ line-height: 18px;
2111
2273
  white-space: pre;
2112
2274
  user-select: all;
2113
2275
  }
@@ -2129,6 +2291,7 @@
2129
2291
  cursor: pointer;
2130
2292
  color: var(--dk-label-2);
2131
2293
  font-size: 12px;
2294
+ line-height: 18px;
2132
2295
  }
2133
2296
 
2134
2297
  .dk_targetInline {
@@ -2156,7 +2319,7 @@
2156
2319
  gap: var(--dk-gap-md);
2157
2320
  }
2158
2321
 
2159
- .dk_msg { font-size: 12px; }
2322
+ .dk_msg { font-size: 12px; line-height: 18px; }
2160
2323
  .dk_msg[data-kind="ok"] { color: var(--dk-success); }
2161
2324
  .dk_msg[data-kind="error"] { color: var(--dk-danger); }
2162
2325
 
@@ -2167,6 +2330,7 @@
2167
2330
  border: 2px solid var(--dk-border-strong);
2168
2331
  border-top-color: var(--dk-accent);
2169
2332
  border-radius: 50%;
2333
+ corner-shape: round;
2170
2334
  animation: dk_spin .7s linear infinite;
2171
2335
  }
2172
2336
 
@@ -2216,6 +2380,7 @@
2216
2380
  align-items: center;
2217
2381
  gap: var(--dk-gap-md);
2218
2382
  font-size: 12px;
2383
+ line-height: 18px;
2219
2384
  color: var(--dk-label-2);
2220
2385
  }
2221
2386
 
@@ -2229,7 +2394,7 @@
2229
2394
 
2230
2395
  .dk_layerId { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2231
2396
 
2232
- .dk_labelList { display: flex; flex-direction: column; gap: 2px; font-size: 12px; }
2397
+ .dk_labelList { display: flex; flex-direction: column; gap: 2px; font-size: 12px; line-height: 18px; }
2233
2398
  .dk_labelItem { display: grid; grid-template-columns: minmax(0, 240px) 1fr; gap: var(--dk-gap-md); }
2234
2399
  .dk_labelKey { color: var(--dk-label-3); font-family: var(--dk-mono); overflow-wrap: anywhere; }
2235
2400
  .dk_labelVal { color: var(--dk-label); font-family: var(--dk-mono); overflow-wrap: anywhere; }
@@ -2246,13 +2411,13 @@
2246
2411
  min-height: 180px;
2247
2412
  margin-top: var(--dk-gap-md);
2248
2413
  padding: var(--dk-gap-md);
2249
- border: 1px solid var(--dk-border);
2414
+ border: 0.5px solid var(--dk-border);
2250
2415
  border-radius: var(--dk-r-md);
2251
2416
  background: var(--dk-log-bg);
2252
2417
  color: var(--dk-log-fg);
2253
2418
  font-family: var(--dk-mono);
2254
2419
  font-size: 12px;
2255
- line-height: 1.5;
2420
+ line-height: 18px;
2256
2421
  overflow: auto;
2257
2422
  white-space: pre-wrap;
2258
2423
  word-break: break-word;
@@ -2286,14 +2451,14 @@
2286
2451
 
2287
2452
  .dk_spark svg { display: block; width: 96px; height: 22px; overflow: visible; }
2288
2453
  .dk_spark[data-alert="1"] { color: var(--dk-danger); }
2289
- .dk_sparkEmpty { font-size: 11px; color: var(--dk-label-3); }
2454
+ .dk_sparkEmpty { font-size: 12px; line-height: 18px; color: var(--dk-label-3); }
2290
2455
 
2291
2456
  /* ============================ Compose 项目 ============================ */
2292
2457
 
2293
2458
  .dk_projects { display: flex; flex-direction: column; gap: var(--dk-gap-lg); }
2294
2459
 
2295
2460
  .dk_project {
2296
- border: 1px solid var(--dk-border);
2461
+ border: 0.5px solid var(--dk-border);
2297
2462
  border-radius: var(--dk-r-md);
2298
2463
  background: var(--dk-surface-2);
2299
2464
  overflow: hidden;
@@ -2305,8 +2470,8 @@
2305
2470
  .dk_project:focus-visible { outline: none; box-shadow: var(--dk-ring); }
2306
2471
  .dk_projectHead { display: flex; align-items: center; gap: var(--dk-gap-md); padding: var(--dk-gap-md) var(--dk-gap-lg); }
2307
2472
  .dk_projectIcon { display: inline-flex; align-items: center; color: var(--dk-accent); }
2308
- .dk_projectName { font-size: 13px; font-weight: 600; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2309
- .dk_projectRows { display: flex; flex-direction: column; border-top: 1px solid var(--dk-border); }
2473
+ .dk_projectName { font-size: 13px; line-height: 20px; font-weight: 500; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2474
+ .dk_projectRows { display: flex; flex-direction: column; border-top: 0.5px solid var(--dk-border); }
2310
2475
 
2311
2476
  .dk_projectRow {
2312
2477
  display: grid;
@@ -2315,11 +2480,12 @@
2315
2480
  gap: var(--dk-gap-md);
2316
2481
  padding: var(--dk-gap-sm) var(--dk-gap-lg);
2317
2482
  font-size: 12px;
2318
- border-top: 1px solid var(--dk-border);
2483
+ line-height: 18px;
2484
+ border-top: 0.5px solid var(--dk-border);
2319
2485
  }
2320
2486
 
2321
2487
  .dk_projectRow:first-child { border-top: none; }
2322
- .dk_projectSvc { color: var(--dk-label-2); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2488
+ .dk_projectSvc { color: var(--dk-label-2); font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2323
2489
  .dk_projectContainer { font-family: var(--dk-mono); color: var(--dk-label); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2324
2490
  .dk_projectImage { font-family: var(--dk-mono); color: var(--dk-label-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2325
2491
  .dk_projectPorts { color: var(--dk-label-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@@ -2327,4 +2493,4 @@
2327
2493
  .dk_composeTable td { vertical-align: middle; }
2328
2494
 
2329
2495
  /* 聚合日志的 [service] 前缀(同一份日志着色,只多一个来源标签) */
2330
- .dk_logSvc { margin-right: 6px; color: var(--dk-accent); font-weight: 600; }
2496
+ .dk_logSvc { margin-right: 6px; color: var(--dk-accent); font-weight: 500; }