cardbuddy 0.7.0 → 0.8.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.
@@ -11,8 +11,9 @@
11
11
  align-items: center;
12
12
  justify-content: center;
13
13
  padding: 24px;
14
- background: rgba(0, 0, 0, 0.5);
15
- /* 独立显示区背景用暗色半透明,不随编辑器主题翻转(预览即真实卡片内容) */
14
+ /* 与确认框 .confirm-mask 同款模糊遮罩:暗色半透明 + 2px 背景模糊,不随主题翻转 */
15
+ background: var(--scrim-modal);
16
+ backdrop-filter: blur(var(--scrim-modal-blur));
16
17
  }
17
18
  .cg-modal {
18
19
  display: flex;
@@ -38,6 +38,9 @@
38
38
  font-size: 12px;
39
39
  font-family: inherit;
40
40
  line-height: 1;
41
+ /* button 的 UA 默认 text-align:center 会被 .dd__label 继承,短文案(如「0px」)
42
+ 会在触发器里居中;表单下拉统一左对齐 */
43
+ text-align: left;
41
44
  cursor: pointer;
42
45
  transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;
43
46
  appearance: none;
@@ -33,28 +33,28 @@
33
33
  display: flex;
34
34
  align-items: center;
35
35
  justify-content: space-between;
36
- padding: 12px 16px;
36
+ padding: 10px 16px;
37
37
  border-bottom: 1px solid var(--border);
38
38
  flex-shrink: 0;
39
39
  }
40
40
 
41
41
  .ni-title {
42
- font-size: 16px;
42
+ font-size: 13px;
43
43
  font-weight: 600;
44
44
  color: var(--text);
45
45
  }
46
46
 
47
47
  .ni-close {
48
- width: var(--ctrl-sm);
49
- height: var(--ctrl-sm);
48
+ width: 22px;
49
+ height: 22px;
50
50
  display: inline-flex;
51
51
  align-items: center;
52
52
  justify-content: center;
53
- background: var(--bg-input);
54
- border: 1px solid var(--border-strong);
53
+ background: none;
54
+ border: none;
55
55
  border-radius: 6px;
56
- color: var(--text-dim);
57
- font-size: 18px;
56
+ color: var(--text-faint);
57
+ font-size: 15px;
58
58
  cursor: pointer;
59
59
  line-height: 1;
60
60
  transition: background 0.15s, color 0.15s;
@@ -87,8 +87,8 @@
87
87
  min-height: 0;
88
88
  overflow-y: auto;
89
89
  /* 仅给内容留 16px 横向间距,滚动条(右侧)紧贴面板边缘;
90
- 底部 76px 预留给悬浮的 .ni-foot,避免内容被遮挡 */
91
- padding: 0 16px 76px;
90
+ 底栏已改普通贴底 flex 行(不再悬浮),留 12px 收尾呼吸即可 */
91
+ padding: 0 16px 12px;
92
92
  }
93
93
 
94
94
  .ni-body > .ni-sec {
@@ -103,7 +103,7 @@
103
103
  display: flex;
104
104
  align-items: center;
105
105
  gap: 8px;
106
- font-size: 14px;
106
+ font-size: 13px;
107
107
  font-weight: 600;
108
108
  color: var(--text);
109
109
  margin-bottom: 12px;
@@ -199,7 +199,7 @@ select.ni-input {
199
199
  border: 1px solid var(--border);
200
200
  border-radius: 8px;
201
201
  margin-bottom: 8px;
202
- background: var(--bg-panel);
202
+ background: transparent;
203
203
  }
204
204
 
205
205
  .ni-prop-label {
@@ -291,7 +291,8 @@ select.ni-input {
291
291
  font-size: 12px;
292
292
  padding: 6px 10px;
293
293
  border-radius: 6px;
294
- background: var(--bg-input);
294
+ background: transparent;
295
+ border: 1px solid var(--border);
295
296
  }
296
297
 
297
298
  .ni-key {
@@ -314,7 +315,7 @@ select.ni-input {
314
315
  margin-left: auto;
315
316
  font-size: 12px;
316
317
  padding: 2px 8px;
317
- background: var(--bg-soft);
318
+ background: var(--accent-soft);
318
319
  border-radius: 4px;
319
320
  color: var(--accent);
320
321
  }
@@ -325,7 +326,7 @@ select.ni-input {
325
326
  padding: 0 10px;
326
327
  font-size: 12px;
327
328
  border: 1px solid var(--border-strong);
328
- background: var(--bg-input);
329
+ background: transparent;
329
330
  color: var(--text-dim);
330
331
  border-radius: 6px;
331
332
  cursor: pointer;
@@ -362,8 +363,9 @@ select.ni-input {
362
363
  align-items: center;
363
364
  gap: 8px;
364
365
  padding: 7px 10px;
365
- background: var(--bg-input);
366
- border-radius: 7px;
366
+ background: transparent;
367
+ border: 1px solid var(--border);
368
+ border-radius: 6px;
367
369
  }
368
370
 
369
371
  .ni-event-name {
@@ -388,9 +390,9 @@ select.ni-input {
388
390
  display: flex;
389
391
  align-items: center;
390
392
  gap: 8px;
391
- padding: 8px 10px;
393
+ padding: 6px 8px;
392
394
  border-radius: 6px;
393
- background: var(--bg-input);
395
+ background: transparent;
394
396
  cursor: pointer;
395
397
  user-select: none;
396
398
  transition: background 0.15s;
@@ -403,7 +405,7 @@ select.ni-input {
403
405
  .ptree__group-name {
404
406
  flex: 1 1 auto;
405
407
  min-width: 0;
406
- font-size: 13px;
408
+ font-size: 12px;
407
409
  font-weight: 600;
408
410
  color: var(--text);
409
411
  white-space: nowrap;
@@ -452,9 +454,10 @@ select.ni-input {
452
454
  }
453
455
 
454
456
  .ptree__label {
455
- flex: 0 0 96px;
457
+ flex: 0 0 88px;
456
458
  font-size: 12px;
457
459
  color: var(--text-dim);
460
+ text-align: right;
458
461
  white-space: nowrap;
459
462
  overflow: hidden;
460
463
  text-overflow: ellipsis;
@@ -465,21 +468,16 @@ select.ni-input {
465
468
  min-width: 0;
466
469
  }
467
470
 
468
- /* 底部:悬浮操作条,不占布局高度(内容可滚到其下方) */
471
+ /* 底栏:普通 flex 行贴底,发丝线分隔,不叠悬浮阴影(与事件抽屉 .ee-foot 统一) */
469
472
  .ni-foot {
470
- position: absolute;
471
- left: 0;
472
- right: 0;
473
- bottom: 0;
474
- z-index: 1;
473
+ flex: 0 0 auto;
475
474
  display: flex;
476
475
  align-items: center;
477
476
  justify-content: space-between;
478
477
  gap: 10px;
479
- padding: 12px 16px;
480
- background: var(--bg-panel);
478
+ padding: 10px 16px;
479
+ background: var(--bg-bar);
481
480
  border-top: 1px solid var(--border);
482
- box-shadow: 0 -8px 24px var(--shadow-card);
483
481
  }
484
482
 
485
483
  .ni-tip {
@@ -497,30 +495,29 @@ select.ni-input {
497
495
  .ni-btn {
498
496
  white-space: nowrap;
499
497
  height: var(--ctrl-sm);
500
- padding: 0 16px;
501
- font-size: 13px;
498
+ padding: 0 14px;
499
+ font-size: 12px;
502
500
  border-radius: 6px;
503
- border: 1px solid var(--accent);
504
- background: var(--accent);
505
- color: var(--on-accent);
501
+ border: 1px solid var(--accent-border);
502
+ background: transparent;
503
+ color: var(--accent);
506
504
  cursor: pointer;
507
- transition: opacity 0.15s;
505
+ transition: background 0.15s, color 0.15s;
508
506
  }
509
507
 
510
508
  .ni-btn:hover {
511
- opacity: 0.92;
509
+ background: var(--accent-soft);
512
510
  }
513
511
 
514
512
  .ni-btn--ghost {
515
513
  background: transparent;
516
- color: var(--text);
514
+ color: var(--text-dim);
517
515
  border-color: var(--border-strong);
518
516
  }
519
517
 
520
518
  .ni-btn--ghost:hover {
521
- border-color: var(--accent);
522
- color: var(--accent);
523
- opacity: 1;
519
+ background: var(--bg-hover);
520
+ color: var(--text);
524
521
  }
525
522
 
526
523
  /* ===================== 事件页签(开关式:事件列表 + 开关 + 动作参数) ===================== */
@@ -535,19 +532,19 @@ select.ni-input {
535
532
  border: 1px solid var(--border);
536
533
  border-radius: 8px;
537
534
  overflow: hidden;
538
- background: var(--bg-panel);
535
+ background: transparent;
539
536
  }
540
537
 
541
538
  .ni-evt-head {
542
539
  display: flex;
543
540
  align-items: center;
544
541
  gap: 10px;
545
- padding: 12px 14px;
542
+ padding: 8px 12px;
546
543
  }
547
544
 
548
545
  .ni-evt-name {
549
546
  flex: 0 0 auto;
550
- font-size: 13px;
547
+ font-size: 12px;
551
548
  font-weight: 500;
552
549
  color: var(--text);
553
550
  white-space: nowrap;
@@ -563,39 +560,41 @@ select.ni-input {
563
560
  text-overflow: ellipsis;
564
561
  }
565
562
 
566
- /* 开关 */
563
+ /* 开关:与 setter 家族 .st-switch 同语言(发丝线轨道 + soft 开启态),不用实心 accent 填充 */
567
564
  .ni-switch {
568
565
  flex: 0 0 auto;
569
566
  position: relative;
570
- width: 36px;
571
- height: 20px;
567
+ width: 34px;
568
+ height: 18px;
572
569
  padding: 0;
573
570
  margin: 0;
574
- border: none;
575
- border-radius: 10px;
576
- background: var(--border-strong);
571
+ border: 1px solid var(--border-strong);
572
+ border-radius: 999px;
573
+ background: var(--bg-hover);
577
574
  cursor: pointer;
578
- transition: background 0.18s;
575
+ transition: background 0.16s, border-color 0.16s;
579
576
  flex-shrink: 0;
580
577
  }
581
578
 
582
579
  .ni-switch.is-on {
583
- background: var(--accent);
580
+ background: var(--accent-soft);
581
+ border-color: var(--accent-border);
584
582
  }
585
583
 
586
584
  .ni-switch__dot {
587
585
  position: absolute;
588
- top: 2px;
589
- left: 2px;
590
- width: 16px;
591
- height: 16px;
586
+ top: 1px;
587
+ left: 1px;
588
+ width: 14px;
589
+ height: 14px;
592
590
  border-radius: 50%;
593
- background: var(--on-accent);
594
- transition: transform 0.18s;
591
+ background: var(--text-dim);
592
+ transition: transform 0.16s, background 0.16s;
595
593
  }
596
594
 
597
595
  .ni-switch.is-on .ni-switch__dot {
598
596
  transform: translateX(16px);
597
+ background: var(--accent);
599
598
  }
600
599
 
601
600
  .ni-evt-body {
@@ -643,8 +642,9 @@ select.ni-input {
643
642
  }
644
643
 
645
644
  /* ===================== 事件编辑抽屉(EventEditor.vue,右侧滑出) ===================== */
646
- /* 100vh × calc(100vw - 预览面板宽度);上下排布,上方事件开关列表 + 下方动作/脚本编辑区;
647
- 抽屉主体不产生滚动条,脚本编辑区填满剩余高度。 */
645
+ /* 100vh × calc(100vw - 预览面板宽度);上下排布:顶部事件 chip 行 + 动作/脚本编辑区;
646
+ 抽屉主体不产生滚动条,脚本编辑区填满剩余高度。轻 chrome:事件列表为顶部可换行
647
+ 内联事件项行(不单独占列),底栏发丝线不叠阴影;仅抽屉最外层保留投影区分层级。 */
648
648
 
649
649
  .ee-overlay {
650
650
  position: fixed;
@@ -690,13 +690,13 @@ select.ni-input {
690
690
  display: flex;
691
691
  align-items: center;
692
692
  justify-content: space-between;
693
- padding: 12px 20px;
693
+ padding: 10px 16px;
694
694
  border-bottom: 1px solid var(--border);
695
695
  flex-shrink: 0;
696
696
  }
697
697
 
698
698
  .ee-title {
699
- font-size: 16px;
699
+ font-size: 13px;
700
700
  font-weight: 600;
701
701
  color: var(--text);
702
702
  }
@@ -714,11 +714,11 @@ select.ni-input {
714
714
  display: inline-flex;
715
715
  align-items: center;
716
716
  justify-content: center;
717
- background: var(--bg-input);
718
- border: 1px solid var(--border-strong);
717
+ background: none;
718
+ border: none;
719
719
  border-radius: 6px;
720
- color: var(--text-dim);
721
- font-size: 18px;
720
+ color: var(--text-faint);
721
+ font-size: 15px;
722
722
  cursor: pointer;
723
723
  line-height: 1;
724
724
  transition: background 0.15s, color 0.15s;
@@ -727,7 +727,7 @@ select.ni-input {
727
727
  .ee-close::before { content: '✕'; }
728
728
  .ee-close:hover { background: var(--bg-hover); color: var(--text); }
729
729
 
730
- /* 主体:上事件开关列表 + 下动作/脚本编辑区,纵向上下排布,不滚动 */
730
+ /* 主体:上事件 chip 行 + 下动作/脚本编辑区,纵向排布 */
731
731
  .ee-body {
732
732
  flex: 1 1 auto;
733
733
  min-height: 0;
@@ -736,61 +736,80 @@ select.ni-input {
736
736
  overflow: hidden;
737
737
  }
738
738
 
739
- /* 上方事件开关列表:有界高度(最多约 40%),内部独立滚动,不再单列占宽 */
739
+ /* 顶部事件条:左事件项、右帮助图标,两端对齐 + 垂直居中;
740
+ 事件过多的滚动交给 .ee-evt-list 自身,side 不滚动(避免裁切帮助弹层) */
740
741
  .ee-side {
742
+ position: relative;
741
743
  flex: 0 0 auto;
742
- max-height: 40%;
743
744
  min-width: 0;
744
745
  display: flex;
745
- flex-direction: column;
746
+ align-items: center;
747
+ justify-content: space-between;
748
+ gap: 10px;
746
749
  border-bottom: 1px solid var(--border);
747
- overflow-y: auto;
748
- padding: 12px 16px;
749
- line-height: 28px;
750
+ padding: 8px 16px;
751
+ }
752
+
753
+ .ee-side > .ee-empty {
754
+ flex: 1 1 auto;
750
755
  }
751
756
 
752
757
  .ee-evt-list {
758
+ flex: 1 1 auto;
759
+ min-width: 0;
753
760
  display: flex;
754
- flex-direction: column;
755
- gap: 4px;
761
+ flex-wrap: wrap;
762
+ gap: 2px 8px;
763
+ /* 约三行高度封顶,超出内部滚动 */
764
+ max-height: 108px;
765
+ overflow-y: auto;
756
766
  }
757
767
 
768
+ /* 事件项:内联字段组(名称 + 开关),不是按钮——无描边无胶囊,仅靠文字色与浅底表达状态:
769
+ 关闭 = 弱色名称;开启 = 常色名称;正在编辑 = 浅底 + accent 名称 */
758
770
  .ee-evt {
759
771
  display: flex;
760
772
  align-items: center;
761
- gap: 10px;
762
- height: var(--ctrl-lg);
763
- padding: 0 12px;
764
- border: 1px solid var(--border);
765
- border-radius: 8px;
766
- background: var(--bg-input);
773
+ gap: 6px;
774
+ height: 24px;
775
+ padding: 0 8px 0 6px;
776
+ border: none;
777
+ border-radius: 6px;
778
+ background: transparent;
767
779
  cursor: pointer;
768
- transition: background 0.15s, border-color 0.15s;
780
+ transition: background 0.15s;
769
781
  }
770
782
 
771
783
  .ee-evt:hover {
772
784
  background: var(--bg-hover);
773
785
  }
774
-
786
+ .ee-evt.is-on .ee-evt-name {
787
+ color: var(--text);
788
+ }
789
+ .ee-evt.is-sel {
790
+ background: var(--bg-input);
791
+ }
792
+ .ee-evt.is-sel .ee-evt-name {
793
+ color: var(--accent);
794
+ }
775
795
  .ee-evt-name {
776
796
  flex: 1 1 auto;
777
797
  min-width: 0;
778
- font-size: 13px;
798
+ font-size: 12px;
779
799
  font-weight: 500;
780
- color: var(--text);
800
+ color: var(--text-faint);
781
801
  white-space: nowrap;
782
802
  overflow: hidden;
783
803
  text-overflow: ellipsis;
784
804
  }
785
805
 
786
- /* 下方详情区:填满剩余高度,底部 76px 预留给悬浮的 .ee-foot */
806
+ /* 右侧详情区:填满剩余高度;底栏为普通 flex 行,无需预留悬浮高度 */
787
807
  .ee-detail {
788
808
  flex: 1 1 auto;
789
809
  min-width: 0;
790
810
  display: flex;
791
811
  flex-direction: column;
792
- /* 底部 76px 预留给悬浮的 .ee-foot,避免详情最末内容被遮挡 */
793
- padding: 16px 24px 76px;
812
+ padding: 12px 16px;
794
813
  overflow: hidden;
795
814
  }
796
815
 
@@ -803,7 +822,7 @@ select.ni-input {
803
822
  min-height: 0;
804
823
  display: flex;
805
824
  flex-direction: column;
806
- margin-top: 10px;
825
+ margin-top: 8px;
807
826
  overflow: hidden;
808
827
  }
809
828
 
@@ -820,6 +839,11 @@ select.ni-input {
820
839
  flex: 1 1 auto;
821
840
  min-height: 0;
822
841
  }
842
+ /* 代码行语义已由上文(动作类型 / 描述)说明,去掉独占的 label 列把整宽还给编辑器;
843
+ 语言改由编辑器右上角 JS 标签标示 */
844
+ .ee-detail-body .ptree__row--block .ptree__label {
845
+ display: none;
846
+ }
823
847
  .ee-detail-body .st-code {
824
848
  flex: 1 1 auto;
825
849
  min-height: 0;
@@ -875,7 +899,7 @@ select.ni-input {
875
899
  }
876
900
 
877
901
  .ee-field-label {
878
- flex: 0 0 80px;
902
+ flex: 0 0 64px;
879
903
  font-size: 12px;
880
904
  color: var(--text-dim);
881
905
  text-align: right;
@@ -902,23 +926,63 @@ select.ni-input {
902
926
 
903
927
  select.ee-input { height: 32px; }
904
928
 
905
- .ee-evt-desc {
906
- margin: 8px 0 0;
907
- font-size: 11px;
929
+ /* 帮助图标按钮:与事件项同排的纯图标弱按钮 */
930
+ .ee-help {
931
+ flex: 0 0 auto;
932
+ display: inline-flex;
933
+ align-items: center;
934
+ justify-content: center;
935
+ width: 22px;
936
+ height: 22px;
937
+ padding: 0;
938
+ background: none;
939
+ border: none;
940
+ border-radius: 6px;
908
941
  color: var(--text-faint);
909
- line-height: 1.4;
942
+ cursor: pointer;
943
+ transition: color 0.15s, background 0.15s;
944
+ }
945
+ .ee-help:hover {
946
+ color: var(--text);
947
+ background: var(--bg-hover);
948
+ }
949
+ /* 弹层外点击关闭:透明遮罩铺满视口 */
950
+ .ee-help__mask {
951
+ position: fixed;
952
+ inset: 0;
953
+ z-index: 6;
954
+ }
955
+ /* 使用说明弹层:锚定事件条右下角,浮于详情区之上 */
956
+ .ee-help__pop {
957
+ position: absolute;
958
+ top: calc(100% + 4px);
959
+ right: 12px;
960
+ z-index: 7;
961
+ width: min(340px, 78%);
962
+ padding: 8px 10px;
963
+ border: 1px solid var(--border-strong);
964
+ border-radius: 8px;
965
+ background: var(--bg-panel);
966
+ box-shadow: var(--shadow-3);
967
+ }
968
+ .ee-help__text {
969
+ margin: 0;
970
+ font-size: 11px;
971
+ line-height: 1.6;
972
+ color: var(--text-dim);
973
+ white-space: pre-wrap;
910
974
  }
911
975
 
912
976
  /* 开关 */
913
977
  .ee-switch {
914
978
  flex: 0 0 auto;
915
979
  position: relative;
916
- width: 36px;
917
- height: 20px;
980
+ width: 30px;
981
+ height: 16px;
918
982
  padding: 0;
919
983
  margin: 0;
920
984
  border: none;
921
- border-radius: 10px;
985
+ border-radius: 8px;
922
986
  background: var(--border-strong);
923
987
  cursor: pointer;
924
988
  transition: background 0.18s;
@@ -930,14 +994,14 @@ select.ee-input { height: 32px; }
930
994
  position: absolute;
931
995
  top: 2px;
932
996
  left: 2px;
933
- width: 16px;
934
- height: 16px;
997
+ width: 12px;
998
+ height: 12px;
935
999
  border-radius: 50%;
936
1000
  background: var(--on-accent);
937
1001
  transition: transform 0.18s;
938
1002
  }
939
1003
 
940
- .ee-switch.is-on .ee-switch__dot { transform: translateX(16px); }
1004
+ .ee-switch.is-on .ee-switch__dot { transform: translateX(14px); }
941
1005
 
942
1006
  .ee-evt-orphan {
943
1007
  flex: 0 0 auto;
@@ -946,22 +1010,16 @@ select.ee-input { height: 32px; }
946
1010
  color: var(--warn);
947
1011
  }
948
1012
 
949
- /* 底栏 */
950
- /* 底部:悬浮操作条,不占布局高度(内容可滚到其下方) */
1013
+ /* 底栏:普通 flex 行贴底,发丝线分隔,不用悬浮阴影 */
951
1014
  .ee-foot {
952
- position: absolute;
953
- left: 0;
954
- right: 0;
955
- bottom: 0;
956
- z-index: 1;
1015
+ flex: 0 0 auto;
957
1016
  display: flex;
958
1017
  align-items: center;
959
1018
  justify-content: space-between;
960
1019
  gap: 10px;
961
- padding: 12px 24px;
962
- background: var(--bg-panel);
1020
+ padding: 10px 16px;
1021
+ background: var(--bg-bar);
963
1022
  border-top: 1px solid var(--border);
964
- box-shadow: 0 -8px 24px var(--shadow-card);
965
1023
  }
966
1024
 
967
1025
  .ee-tip {
@@ -979,25 +1037,24 @@ select.ee-input { height: 32px; }
979
1037
  .ee-btn {
980
1038
  white-space: nowrap;
981
1039
  height: var(--ctrl-sm);
982
- padding: 0 16px;
983
- font-size: 13px;
1040
+ padding: 0 14px;
1041
+ font-size: 12px;
984
1042
  border-radius: 6px;
985
- border: 1px solid var(--accent);
986
- background: var(--accent);
987
- color: var(--on-accent);
1043
+ border: 1px solid var(--accent-border);
1044
+ background: transparent;
1045
+ color: var(--accent);
988
1046
  cursor: pointer;
989
- transition: opacity 0.15s;
1047
+ transition: background 0.15s, color 0.15s;
990
1048
  }
991
1049
 
992
- .ee-btn:hover { opacity: 0.92; }
1050
+ .ee-btn:hover { background: var(--accent-soft); }
993
1051
 
994
1052
  .ee-btn--ghost {
995
1053
  background: transparent;
996
- color: var(--text);
1054
+ color: var(--text-dim);
997
1055
  border-color: var(--border-strong);
998
1056
  }
999
1057
 
1000
1058
  .ee-btn--ghost:hover {
1001
1059
  background: var(--bg-hover);
1002
- opacity: 1;
1003
1060
  }