cardbuddy 0.9.1 → 0.10.0

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.
Files changed (31) hide show
  1. package/README.md +17 -2
  2. package/dist/cli.js +3 -0
  3. package/dist/config.js +7 -0
  4. package/dist/portGuard.js +293 -0
  5. package/dist/preview-editor/assets/index-C_UKS0NF.css +1 -0
  6. package/dist/preview-editor/assets/{index-B9MOriNv.js → index-D1iIJ4sl.js} +14 -13
  7. package/dist/preview-editor/index.html +2 -2
  8. package/dist/server-core/assetProxy.js +3 -22
  9. package/dist/server-core/buildDataFromSchema.js +36 -4
  10. package/dist/server-core/cardListCache.js +0 -17
  11. package/dist/server-core/index.js +3 -5
  12. package/dist/server-core/logStream.js +1 -6
  13. package/dist/standalone.js +24 -8
  14. package/dist/vendored/App.vue +136 -46
  15. package/dist/vendored/components/ComponentPalette.vue +1 -1
  16. package/dist/vendored/components/DebugPanel.vue +735 -90
  17. package/dist/vendored/components/NumberStepper.vue +125 -0
  18. package/dist/vendored/components/ProgressSlider.vue +9 -1
  19. package/dist/vendored/components/StructureTree.vue +2 -2
  20. package/dist/vendored/runtime/clipboard-node.js +0 -5
  21. package/dist/vendored/styles/app.css +618 -210
  22. package/dist/vendored/styles/card-gallery.css +3 -3
  23. package/dist/vendored/styles/card-select.css +13 -6
  24. package/dist/vendored/styles/dropdown.css +1 -2
  25. package/dist/vendored/styles/json-tree.css +3 -3
  26. package/dist/vendored/styles/node-inspector.css +7 -294
  27. package/dist/vendored/styles/setters.css +48 -49
  28. package/dist/vendored/styles/structure-tree.css +6 -11
  29. package/package.json +1 -1
  30. package/dist/preview-editor/assets/index-CwD14gm3.css +0 -1
  31. package/dist/vendored/assets/logo.png +0 -0
@@ -25,7 +25,7 @@
25
25
  border: 1px solid var(--border);
26
26
  border-radius: 12px;
27
27
  overflow: hidden;
28
- box-shadow: 0 24px 64px rgba(0, 0, 0, 0.32);
28
+ box-shadow: 0 24px 64px var(--shadow-pop);
29
29
  }
30
30
 
31
31
  /* ============ 弹窗头部 ============ */
@@ -34,7 +34,7 @@
34
34
  align-items: center;
35
35
  gap: 12px;
36
36
  padding: 12px 16px;
37
- border-bottom: 1px solid var(--border);
37
+ border-bottom: var(--hairline) solid var(--border);
38
38
  flex: 0 0 auto;
39
39
  }
40
40
  .cg-modal__title {
@@ -169,7 +169,7 @@
169
169
  min-height: 0;
170
170
  /* 卡片根截图本身为白底,固定白底框避免透明/深色主题下错位 */
171
171
  background: #fff;
172
- border-bottom: 1px solid var(--border);
172
+ border-bottom: var(--hairline) solid var(--border);
173
173
  }
174
174
  /* 导入角标:悬浮在缩略图右上角,仅「有 .import-meta.json 侧车」的导入卡显示。
175
175
  配色用成功态「实心」token(--ok-solid 底 + --on-ok 白字 + --ok-solid 同色描边):
@@ -71,7 +71,7 @@
71
71
  background: var(--bg-pop);
72
72
  border: 1px solid var(--border-strong);
73
73
  border-radius: 10px;
74
- box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5);
74
+ box-shadow: 0 16px 40px var(--shadow-pop);
75
75
  overflow: hidden;
76
76
  backdrop-filter: blur(10px);
77
77
  }
@@ -80,7 +80,7 @@
80
80
  align-items: center;
81
81
  gap: 8px;
82
82
  padding: 8px 10px;
83
- border-bottom: 1px solid var(--border);
83
+ border-bottom: var(--hairline) solid var(--border);
84
84
  }
85
85
  .csel__search-icon {
86
86
  color: var(--text-faint);
@@ -165,7 +165,7 @@
165
165
  justify-content: space-between;
166
166
  gap: 8px;
167
167
  padding: 6px 10px;
168
- border-top: 1px solid var(--border);
168
+ border-top: var(--hairline) solid var(--border);
169
169
  }
170
170
  .csel__count {
171
171
  color: var(--text-faint);
@@ -211,7 +211,10 @@
211
211
  display: inline-flex;
212
212
  align-items: stretch;
213
213
  flex: 0 1 auto;
214
- min-width: 240px;
214
+ /* 顶栏控件统一 --ctrl-sm(28):组合外框锁高,内部两段 stretch 对齐,
215
+ 不再由 trigger 的 7px 上下 padding 撑到 34 与邻座 28 按钮错位 */
216
+ height: var(--ctrl-sm);
217
+ min-width: 200px;
215
218
  max-width: 360px;
216
219
  background: var(--bg-input);
217
220
  border: 1px solid var(--border);
@@ -239,6 +242,9 @@
239
242
  border-radius: 0;
240
243
  border-top-left-radius: 8px;
241
244
  border-bottom-left-radius: 8px;
245
+ height: 100%;
246
+ padding: 0 10px 0 12px;
247
+ font-size: 12px;
242
248
  }
243
249
  .csel--combo .csel__trigger:hover {
244
250
  background: var(--bg-hover);
@@ -255,11 +261,12 @@
255
261
  display: inline-flex;
256
262
  align-items: center;
257
263
  justify-content: center;
258
- width: 34px;
264
+ /* 图标段取正方:高由组合框 stretch 决定,宽随 aspect-ratio 跟随 */
265
+ aspect-ratio: 1;
259
266
  margin: 0;
260
267
  padding: 0;
261
268
  border: none;
262
- border-left: 1px solid var(--border);
269
+ border-left: var(--hairline) solid var(--border);
263
270
  border-radius: 0;
264
271
  border-top-right-radius: 8px;
265
272
  border-bottom-right-radius: 8px;
@@ -216,8 +216,7 @@
216
216
  padding: 6px 9px;
217
217
  }
218
218
 
219
- .dd__item:hover,
220
- .dd__item--active {
219
+ .dd__item:hover {
221
220
  background: var(--bg-hover);
222
221
  color: var(--text);
223
222
  }
@@ -42,7 +42,7 @@
42
42
  }
43
43
  .jt__child {
44
44
  padding-left: 16px;
45
- border-left: 1px solid var(--border);
45
+ border-left: var(--hairline) solid var(--border);
46
46
  margin-left: 4px;
47
47
  }
48
48
 
@@ -206,7 +206,7 @@
206
206
  background: var(--bg-input);
207
207
  border: 1px solid var(--accent);
208
208
  border-radius: 6px;
209
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
209
+ box-shadow: 0 4px 16px var(--shadow-toast);
210
210
  }
211
211
  .jt__json-textarea {
212
212
  display: block;
@@ -272,7 +272,7 @@
272
272
  background: var(--bg-pop);
273
273
  border: 1px solid var(--border-strong);
274
274
  border-radius: 8px;
275
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
275
+ box-shadow: 0 8px 24px var(--shadow-pop);
276
276
  padding: 4px;
277
277
  color: var(--text);
278
278
  }
@@ -35,7 +35,7 @@
35
35
  align-items: center;
36
36
  justify-content: space-between;
37
37
  padding: 10px 16px;
38
- border-bottom: 1px solid var(--border);
38
+ border-bottom: var(--hairline) solid var(--border);
39
39
  flex-shrink: 0;
40
40
  }
41
41
 
@@ -191,154 +191,6 @@ select.ni-input {
191
191
  height: var(--ctrl-sm);
192
192
  }
193
193
 
194
- /* 属性行:标签 + 控件 + 删除 */
195
- .ni-prop-row {
196
- display: flex;
197
- align-items: flex-start;
198
- gap: 12px;
199
- padding: 8px 12px;
200
- border: 1px solid var(--border);
201
- border-radius: 8px;
202
- margin-bottom: 8px;
203
- background: transparent;
204
- }
205
-
206
- .ni-prop-label {
207
- flex: 0 0 88px;
208
- padding-top: 5px;
209
- font-size: 12px;
210
- color: var(--text);
211
- font-weight: 500;
212
- white-space: nowrap;
213
- overflow: hidden;
214
- text-overflow: ellipsis;
215
- }
216
-
217
- .ni-prop-control {
218
- flex: 1 1 auto;
219
- min-width: 0;
220
- }
221
-
222
- .ni-prop-del {
223
- flex: 0 0 auto;
224
- width: 24px;
225
- height: 24px;
226
- display: inline-flex;
227
- align-items: center;
228
- justify-content: center;
229
- margin-top: 2px;
230
- padding: 0;
231
- border: none;
232
- background: transparent;
233
- color: var(--danger);
234
- border-radius: 5px;
235
- cursor: pointer;
236
- font-size: 13px;
237
- line-height: 1;
238
- transition: background 0.15s;
239
- }
240
-
241
- .ni-prop-del:hover {
242
- background: var(--danger-soft);
243
- }
244
-
245
- /* 新增行 */
246
- .ni-addrow {
247
- display: flex;
248
- align-items: center;
249
- gap: 8px;
250
- margin-top: 8px;
251
- }
252
-
253
- .ni-addrow select {
254
- flex: 1 1 auto;
255
- min-width: 0;
256
- }
257
-
258
- .ni-addbtn {
259
- flex: 0 0 auto;
260
- height: var(--ctrl-sm);
261
- padding: 0 12px;
262
- font-size: 13px;
263
- border: 1px dashed var(--border-strong);
264
- background: transparent;
265
- color: var(--text-dim);
266
- border-radius: 6px;
267
- cursor: pointer;
268
- transition: color 0.15s, border-color 0.15s;
269
- }
270
-
271
- .ni-addbtn:disabled {
272
- opacity: 0.5;
273
- cursor: not-allowed;
274
- }
275
-
276
- .ni-addbtn:not(:disabled):hover {
277
- color: var(--accent);
278
- border-color: var(--accent);
279
- }
280
-
281
- /* 指令 / 事件只读行 */
282
- .ni-rows {
283
- display: flex;
284
- flex-direction: column;
285
- gap: 4px;
286
- }
287
-
288
- .ni-row {
289
- display: flex;
290
- align-items: flex-start;
291
- gap: 8px;
292
- font-size: 12px;
293
- padding: 6px 10px;
294
- border-radius: 6px;
295
- background: transparent;
296
- border: 1px solid var(--border);
297
- }
298
-
299
- .ni-key {
300
- color: var(--text-dim);
301
- flex: 0 0 auto;
302
- max-width: 168px;
303
- overflow: hidden;
304
- text-overflow: ellipsis;
305
- white-space: nowrap;
306
- }
307
-
308
- .ni-val {
309
- flex: 1 1 auto;
310
- min-width: 0;
311
- color: var(--text);
312
- word-break: break-all;
313
- }
314
-
315
- .ni-tag {
316
- margin-left: auto;
317
- font-size: 12px;
318
- padding: 2px 8px;
319
- background: var(--accent-soft);
320
- border-radius: 4px;
321
- color: var(--accent);
322
- }
323
-
324
- .ni-editbtn {
325
- margin-left: auto;
326
- height: var(--ctrl-sm);
327
- padding: 0 10px;
328
- font-size: 12px;
329
- border: 1px solid var(--border-strong);
330
- background: transparent;
331
- color: var(--text-dim);
332
- border-radius: 6px;
333
- cursor: pointer;
334
- transition: color 0.15s, border-color 0.15s;
335
- }
336
-
337
- .ni-editbtn:hover {
338
- color: var(--text);
339
- border-color: var(--accent);
340
- }
341
-
342
194
  /* 标题里的 className */
343
195
  .ni-cls {
344
196
  font-style: normal;
@@ -352,28 +204,6 @@ select.ni-input {
352
204
  color: var(--text);
353
205
  }
354
206
 
355
- /* 事件列表 */
356
- .ni-event-list {
357
- display: flex;
358
- flex-direction: column;
359
- gap: 6px;
360
- }
361
-
362
- .ni-event-row {
363
- display: flex;
364
- align-items: center;
365
- gap: 8px;
366
- padding: 7px 10px;
367
- background: transparent;
368
- border: 1px solid var(--border);
369
- border-radius: 6px;
370
- }
371
-
372
- .ni-event-name {
373
- font-size: 12px;
374
- color: var(--text);
375
- }
376
-
377
207
  /* 属性树(PropTree 递归渲染) */
378
208
  .ptree {
379
209
  display: flex;
@@ -433,7 +263,7 @@ select.ni-input {
433
263
  .ptree__group-body {
434
264
  padding: 6px 0 2px 10px;
435
265
  margin-left: 6px;
436
- border-left: 1px solid var(--border);
266
+ border-left: var(--hairline) solid var(--border);
437
267
  display: flex;
438
268
  flex-direction: column;
439
269
  gap: 4px;
@@ -478,7 +308,7 @@ select.ni-input {
478
308
  gap: 10px;
479
309
  padding: 10px 16px;
480
310
  background: var(--bg-bar);
481
- border-top: 1px solid var(--border);
311
+ border-top: var(--hairline) solid var(--border);
482
312
  }
483
313
 
484
314
  .ni-tip {
@@ -521,101 +351,6 @@ select.ni-input {
521
351
  color: var(--text);
522
352
  }
523
353
 
524
- /* ===================== 事件页签(开关式:事件列表 + 开关 + 动作参数) ===================== */
525
-
526
- .ni-evt-list {
527
- display: flex;
528
- flex-direction: column;
529
- gap: 4px;
530
- }
531
-
532
- .ni-evt {
533
- border: 1px solid var(--border);
534
- border-radius: 8px;
535
- overflow: hidden;
536
- background: transparent;
537
- }
538
-
539
- .ni-evt-head {
540
- display: flex;
541
- align-items: center;
542
- gap: 10px;
543
- padding: 8px 12px;
544
- }
545
-
546
- .ni-evt-name {
547
- flex: 0 0 auto;
548
- font-size: 12px;
549
- font-weight: 500;
550
- color: var(--text);
551
- white-space: nowrap;
552
- }
553
-
554
- .ni-evt-desc {
555
- flex: 1 1 auto;
556
- min-width: 0;
557
- font-size: 12px;
558
- color: var(--text-faint);
559
- white-space: nowrap;
560
- overflow: hidden;
561
- text-overflow: ellipsis;
562
- }
563
-
564
- /* 开关:与 setter 家族 .st-switch 同语言(发丝线轨道 + soft 开启态),不用实心 accent 填充 */
565
- .ni-switch {
566
- flex: 0 0 auto;
567
- position: relative;
568
- width: 34px;
569
- height: 18px;
570
- padding: 0;
571
- margin: 0;
572
- border: 1px solid var(--border-strong);
573
- border-radius: 999px;
574
- background: var(--bg-hover);
575
- cursor: pointer;
576
- transition: background 0.16s, border-color 0.16s;
577
- flex-shrink: 0;
578
- }
579
-
580
- .ni-switch.is-on {
581
- background: var(--accent-soft);
582
- border-color: var(--accent-border);
583
- }
584
-
585
- .ni-switch__dot {
586
- position: absolute;
587
- top: 1px;
588
- left: 1px;
589
- width: 14px;
590
- height: 14px;
591
- border-radius: 50%;
592
- background: var(--text-dim);
593
- transition: transform 0.16s, background 0.16s;
594
- }
595
-
596
- .ni-switch.is-on .ni-switch__dot {
597
- transform: translateX(16px);
598
- background: var(--accent);
599
- }
600
-
601
- .ni-evt-body {
602
- padding: 4px 12px 12px;
603
- border-top: 1px solid var(--border);
604
- }
605
-
606
- .ni-evt-body .ni-field-row {
607
- margin-top: 12px;
608
- margin-bottom: 0;
609
- }
610
-
611
- .ni-evt-body .ni-field-row:first-child {
612
- margin-top: 10px;
613
- }
614
-
615
- .ni-evt-body .ptree {
616
- margin-top: 8px;
617
- }
618
-
619
354
  /* 整行铺开的控件(代码编辑器) */
620
355
  .ptree__row--block {
621
356
  flex-direction: column;
@@ -636,10 +371,6 @@ select.ni-input {
636
371
  height: 100vh;
637
372
  border-radius: 0;
638
373
  }
639
-
640
- .ni-prop-label {
641
- flex: 0 0 72px;
642
- }
643
374
  }
644
375
 
645
376
  /* ===================== 事件编辑抽屉(EventEditor.vue,右侧滑出) ===================== */
@@ -669,7 +400,7 @@ select.ni-input {
669
400
  display: flex;
670
401
  flex-direction: column;
671
402
  background: var(--bg-panel);
672
- border-left: 1px solid var(--border-strong);
403
+ border-left: var(--hairline) solid var(--border-strong);
673
404
  box-shadow: var(--shadow-5);
674
405
  overflow: hidden;
675
406
  }
@@ -705,7 +436,7 @@ select.ni-input {
705
436
  align-items: center;
706
437
  justify-content: space-between;
707
438
  padding: 10px 16px;
708
- border-bottom: 1px solid var(--border);
439
+ border-bottom: var(--hairline) solid var(--border);
709
440
  flex-shrink: 0;
710
441
  }
711
442
 
@@ -760,7 +491,7 @@ select.ni-input {
760
491
  align-items: center;
761
492
  justify-content: space-between;
762
493
  gap: 10px;
763
- border-bottom: 1px solid var(--border);
494
+ border-bottom: var(--hairline) solid var(--border);
764
495
  padding: 8px 16px;
765
496
  }
766
497
 
@@ -922,24 +653,6 @@ select.ni-input {
922
653
  text-overflow: ellipsis;
923
654
  }
924
655
 
925
- .ee-input {
926
- flex: 1 1 auto;
927
- min-width: 0;
928
- box-sizing: border-box;
929
- font-size: 12px;
930
- padding: 6px 10px;
931
- background: var(--bg-input);
932
- color: var(--text);
933
- border: 1px solid var(--border-strong);
934
- border-radius: 6px;
935
- outline: none;
936
- transition: border-color 0.15s;
937
- }
938
-
939
- .ee-input:focus { border-color: var(--accent); }
940
-
941
- select.ee-input { height: 32px; }
942
-
943
656
  /* 帮助图标按钮:与事件项同排的纯图标弱按钮 */
944
657
  .ee-help {
945
658
  flex: 0 0 auto;
@@ -1035,7 +748,7 @@ select.ee-input { height: 32px; }
1035
748
  gap: 10px;
1036
749
  padding: 10px 16px;
1037
750
  background: var(--bg-bar);
1038
- border-top: 1px solid var(--border);
751
+ border-top: var(--hairline) solid var(--border);
1039
752
  }
1040
753
 
1041
754
  .ee-tip {
@@ -7,7 +7,6 @@
7
7
 
8
8
  /* ------------------------------ 通用输入 ------------------------------ */
9
9
 
10
- .st-input,
11
10
  .st-textarea {
12
11
  width: 100%;
13
12
  min-width: 0;
@@ -30,17 +29,14 @@
30
29
  line-height: 1.5;
31
30
  resize: none; /* 隐藏原生拖拽手柄,统一外观 */
32
31
  }
33
- .st-input:focus,
34
32
  .st-textarea:focus {
35
33
  border-color: var(--accent-border);
36
34
  box-shadow: 0 0 0 2px var(--accent-soft);
37
35
  }
38
- .st-input:disabled,
39
36
  .st-textarea:disabled {
40
37
  opacity: 0.5;
41
38
  cursor: not-allowed;
42
39
  }
43
- .st-input::placeholder,
44
40
  .st-textarea::placeholder {
45
41
  color: var(--text-faint);
46
42
  }
@@ -114,7 +110,7 @@
114
110
  display: inline-flex;
115
111
  align-items: center;
116
112
  justify-content: center;
117
- border-left: 1px solid var(--border);
113
+ border-left: var(--hairline) solid var(--border);
118
114
  background: var(--overlay-tint);
119
115
  color: var(--text-dim);
120
116
  font-size: 11px;
@@ -135,7 +131,7 @@
135
131
  display: inline-flex;
136
132
  align-items: center;
137
133
  justify-content: center;
138
- border-left: 1px solid var(--border);
134
+ border-left: var(--hairline) solid var(--border);
139
135
  color: var(--text-faint);
140
136
  cursor: pointer;
141
137
  }
@@ -148,6 +144,45 @@
148
144
  cursor: not-allowed;
149
145
  opacity: 0.55;
150
146
  }
147
+ /* − / + 步进按钮(NumberStepper.vue):与 __symbol / __caret 同一附属件语言
148
+ (--overlay-tint 底 + 发丝线分隔 + hover 提亮),只是分落在输入框两侧。 */
149
+ .st-number__step {
150
+ flex: 0 0 26px;
151
+ width: 26px;
152
+ height: 100%;
153
+ display: inline-flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+ padding: 0;
157
+ background: var(--overlay-tint);
158
+ border: 0;
159
+ border-right: var(--hairline) solid var(--border);
160
+ color: var(--text-dim);
161
+ cursor: pointer;
162
+ user-select: none;
163
+ transition: background 0.12s, color 0.12s;
164
+ }
165
+ /* 加号在右侧,发丝线换到左边 */
166
+ .st-number__step--inc {
167
+ border-right: 0;
168
+ border-left: var(--hairline) solid var(--border);
169
+ }
170
+ .st-number__step:hover:not(:disabled) {
171
+ background: var(--bg-hover);
172
+ color: var(--text);
173
+ }
174
+ .st-number__step:active:not(:disabled) {
175
+ background: var(--bg-active);
176
+ }
177
+ .st-number__step:disabled {
178
+ opacity: 0.4;
179
+ cursor: default;
180
+ }
181
+ /* 步进变体:数值夹在 − / + 之间,居中比左对齐更像读数 */
182
+ .st-number--step .st-number__field {
183
+ padding: 0 4px;
184
+ text-align: center;
185
+ }
151
186
 
152
187
  /* 下拉浮层容器:与 .st-number 同宽、相对定位,浮层挂在它下面而不被 .st-number 的
153
188
  overflow:hidden 裁切。此前 .st-pop / .st-pop__item 完全没有样式,单位切换菜单不可见。 */
@@ -203,7 +238,6 @@
203
238
  width: 100%;
204
239
  min-width: 0;
205
240
  border-radius: 2px;
206
- /* overflow: hidden; */
207
241
  border: 1px solid var(--border);
208
242
  }
209
243
  .st-seg__item {
@@ -218,14 +252,13 @@
218
252
  gap: 3px;
219
253
  padding: 0 4px;
220
254
  background: var(--bg-input);
221
- border-left: 1px solid var(--border);
255
+ border-left: var(--hairline) solid var(--border);
222
256
  color: var(--text-dim);
223
257
  font-size: 12px;
224
258
  line-height: 1;
225
259
  cursor: pointer;
226
260
  user-select: none;
227
261
  white-space: nowrap;
228
- /* overflow: hidden; */
229
262
  transition: background 0.12s, color 0.12s;
230
263
  }
231
264
  .st-seg__item:first-child {
@@ -484,7 +517,7 @@
484
517
  border-radius: 50%;
485
518
  background: var(--on-accent);
486
519
  border: 2px solid var(--border-strong);
487
- box-shadow: 0 1px 3px rgba(0,0,0,.3);
520
+ box-shadow: 0 1px 3px var(--shadow-toast);
488
521
  cursor: pointer;
489
522
  }
490
523
  .st-color__alpha-slider::-moz-range-thumb {
@@ -493,7 +526,7 @@
493
526
  border-radius: 50%;
494
527
  background: var(--on-accent);
495
528
  border: 2px solid var(--border-strong);
496
- box-shadow: 0 1px 3px rgba(0,0,0,.3);
529
+ box-shadow: 0 1px 3px var(--shadow-toast);
497
530
  cursor: pointer;
498
531
  }
499
532
  .st-color__alpha-val {
@@ -636,7 +669,8 @@
636
669
  margin-top: 6px;
637
670
  }
638
671
  .st-iconsel__cell {
639
- height: 26px;
672
+ /* 图标格取正方:高随列宽(1fr)走,避免 8 列网格下出现扁格 */
673
+ aspect-ratio: 1;
640
674
  display: inline-flex;
641
675
  align-items: center;
642
676
  justify-content: center;
@@ -695,20 +729,12 @@
695
729
  gap: 6px;
696
730
  padding: 4px 8px;
697
731
  background: var(--overlay-tint);
698
- border-bottom: 1px solid var(--border);
732
+ border-bottom: var(--hairline) solid var(--border);
699
733
  font-size: 11px;
700
734
  color: var(--text-dim);
701
735
  cursor: pointer;
702
736
  user-select: none;
703
737
  }
704
- .st-list__title {
705
- flex: 1 1 auto;
706
- min-width: 0;
707
- overflow: hidden;
708
- text-overflow: ellipsis;
709
- white-space: nowrap;
710
- color: var(--text);
711
- }
712
738
  .st-list__op {
713
739
  flex: 0 0 auto;
714
740
  width: 22px;
@@ -899,11 +925,6 @@
899
925
  line-height: normal;
900
926
  }
901
927
 
902
- .st-code__warn {
903
- margin-left: auto;
904
- color: var(--code-warn);
905
- }
906
-
907
928
  /* Prism 高亮配色(变量驱动,随主题切换;暗色默认=原硬编码值) */
908
929
  .st-code__editor .token.comment,
909
930
  .st-code__editor .token.prolog,
@@ -967,7 +988,7 @@
967
988
  padding: 2px 8px;
968
989
  font-size: 11px;
969
990
  color: var(--text-dim);
970
- border-top: 1px solid var(--border);
991
+ border-top: var(--hairline) solid var(--border);
971
992
  background: var(--bg-soft);
972
993
  user-select: none;
973
994
  line-height: 1.5;
@@ -1027,25 +1048,3 @@
1027
1048
  width: 100%;
1028
1049
  min-width: 0;
1029
1050
  }
1030
-
1031
- .st-raw {
1032
- width: 100%;
1033
- min-width: 0;
1034
- font-size: 11px;
1035
- color: var(--text-dim);
1036
- word-break: break-all;
1037
- background: var(--bg-input);
1038
- border: 1px dashed var(--border);
1039
- border-radius: 5px;
1040
- padding: 4px 8px;
1041
- }
1042
- .st-raw__type {
1043
- color: var(--text-faint);
1044
- margin-right: 4px;
1045
- }
1046
-
1047
- /* Inspector / 抽屉内 setter 升一档(28 → 32),与节点面板控件高度对齐 */
1048
- .ni-body .st-input,
1049
- .ee-detail-body .st-input {
1050
- height: var(--ctrl-md);
1051
- }