@saasicat/ui-vue 0.22.2 → 0.23.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 (108) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-LY52T4N4.js → chunk-TQQMKWN6.js} +58 -1
  3. package/dist/index.cjs +213 -159
  4. package/dist/index.d.cts +2 -2
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.js +7 -1
  7. package/dist/quasar/index.cjs +116 -20
  8. package/dist/quasar/index.d.cts +48 -3
  9. package/dist/quasar/index.d.ts +48 -3
  10. package/dist/quasar/index.js +58 -3
  11. package/dist/{use-super-admin-i18n-CgTuNi8h.d.cts → use-sa-theme-B5t7oXph.d.cts} +51 -1
  12. package/dist/{use-super-admin-i18n-CHNdsSlm.d.ts → use-sa-theme-OUBlaqgl.d.ts} +51 -1
  13. package/package.json +5 -2
  14. package/src/components/BundleVersionPublishDialog.vue +17 -17
  15. package/src/components/KvBlock.vue +6 -6
  16. package/src/components/MarketingPromotionsTab.vue +78 -78
  17. package/src/components/MfaPromptDialog.vue +2 -2
  18. package/src/components/TenantActionConfirmDialog.vue +5 -5
  19. package/src/components/VersionDiffPreview.vue +18 -18
  20. package/src/components/bundle-editor/BundleCreatePanel.vue +52 -52
  21. package/src/components/bundle-editor/BundleFeaturesEditor.vue +20 -20
  22. package/src/components/bundle-editor/BundlePlanCompatPicker.vue +33 -33
  23. package/src/components/bundle-editor/BundleQuotasEditor.vue +26 -26
  24. package/src/components/bundle-editor/BundleStatusBanner.vue +21 -21
  25. package/src/components/bundle-editor/BundleVersionInlineEditor.vue +48 -48
  26. package/src/components/bundle-editor/BundleVersionStrip.vue +30 -30
  27. package/src/components/dialogs/PilotCreateDialog.vue +20 -20
  28. package/src/components/dialogs/PilotEditDialog.vue +6 -6
  29. package/src/components/dialogs/PromoCodeCreateDialog.vue +9 -9
  30. package/src/components/dialogs/PromoCodeDialogFields.vue +61 -61
  31. package/src/components/dialogs/PromoCodeEditDialog.vue +11 -11
  32. package/src/components/dialogs/pilot-dialog.css +48 -48
  33. package/src/components/plan/PlanCycleToggle.vue +9 -16
  34. package/src/components/plan/PlanGrid.vue +30 -34
  35. package/src/components/plan/PriceSummary.vue +35 -35
  36. package/src/components/plan/PromoCodeInput.vue +26 -26
  37. package/src/components/plan/PublicBundleGrid.vue +32 -28
  38. package/src/components/plan-create-dialog/PlanCreateDialog.vue +49 -49
  39. package/src/components/plan-detail/PlanDetail.vue +172 -156
  40. package/src/components/plan-detail/PlanTitleEdit.vue +11 -11
  41. package/src/components/plan-list/PlanList.vue +98 -77
  42. package/src/components/plan-matrix/PlanMatrix.vue +89 -89
  43. package/src/components/plan-review/PlanReview.vue +60 -56
  44. package/src/components/plan-version-editor/PlanVersionEditor.vue +224 -200
  45. package/src/components/wizard-stepper/WizardStepper.vue +17 -17
  46. package/src/index.ts +1 -0
  47. package/src/pages-standard/AdminLayout.vue +58 -37
  48. package/src/pages-standard/AdminManifestErrorPage.vue +6 -6
  49. package/src/pages-standard/AuditPage.vue +3 -3
  50. package/src/pages-standard/BundlesPage.vue +36 -36
  51. package/src/pages-standard/DashboardPage.vue +17 -17
  52. package/src/pages-standard/DiscoveryPage.vue +55 -49
  53. package/src/pages-standard/EmailHistoryPage.vue +53 -71
  54. package/src/pages-standard/MarketingCatalogPage.vue +226 -218
  55. package/src/pages-standard/PilotsPage.vue +7 -6
  56. package/src/pages-standard/PlatformEmailPage.vue +18 -18
  57. package/src/pages-standard/PromoCodeDetailPage.vue +3 -3
  58. package/src/pages-standard/PromoCodesPage.vue +7 -6
  59. package/src/pages-standard/SuperAdminLoginPage.vue +39 -25
  60. package/src/pages-standard/SuperAdminSetupWizard.vue +44 -33
  61. package/src/pages-standard/TenantDetailPage.vue +7 -7
  62. package/src/pages-standard/TenantsPage.vue +11 -46
  63. package/src/pages-standard/bundles-page/BundleAccordionList.vue +13 -13
  64. package/src/pages-standard/discovery-page/CatalogEntryTransPanel.vue +24 -24
  65. package/src/pages-standard/discovery-page/DiscoveryCapList.vue +22 -22
  66. package/src/pages-standard/discovery-page/DiscoveryFeatureCard.vue +39 -39
  67. package/src/pages-standard/discovery-page/DiscoveryQuotaCard.vue +26 -26
  68. package/src/pages-standard/discovery-page/DiscoveryStatusControl.vue +1 -1
  69. package/src/pages-standard/plan-versions/PlanDiffCard.vue +16 -16
  70. package/src/pages-standard/plan-versions/PlanVersionsDiff.vue +21 -15
  71. package/src/pages-standard/plan-versions/PlanVersionsTimeline.vue +45 -45
  72. package/src/pages-standard/plans-page/PlanBundleOverview.vue +21 -15
  73. package/src/pages-standard/plans-page/PlanPublishDialog.vue +4 -4
  74. package/src/pages-standard/plans-page/PlansPageToast.vue +6 -6
  75. package/src/pages-standard/sa-theme.css +9 -687
  76. package/src/pages-standard/tenants/StatusPill.vue +13 -13
  77. package/src/pages-tenant/LimitsRow.vue +4 -4
  78. package/src/pages-tenant/MySubscriptionBundlesPage.vue +61 -61
  79. package/src/pages-tenant/OnboardingConfigurator.vue +24 -24
  80. package/src/pages-tenant/PackageSnapshotPanel.vue +10 -16
  81. package/src/pages-tenant/PendingVersionBanner.vue +12 -12
  82. package/src/pages-tenant/PlanChangeWizard.vue +20 -27
  83. package/src/pages-tenant/TenantPlanSection.vue +13 -21
  84. package/src/pages-tenant/UsageBar.vue +7 -7
  85. package/src/pages-tenant/tenant-plan-section/BundlePreviewDialog.vue +14 -14
  86. package/src/pages-tenant/tenant-plan-section/TenantBundleStore.vue +10 -10
  87. package/src/pages-tenant/tenant-plan-section/TenantFeatureMatrix.vue +2 -2
  88. package/src/quasar/create-super-admin-app.ts +96 -1
  89. package/src/quasar/dark-bridge.ts +66 -0
  90. package/src/quasar/index.ts +1 -0
  91. package/src/ui/theme/_breakpoints.scss +28 -0
  92. package/src/ui/theme/base.css +50 -0
  93. package/src/ui/theme/components/body.css +23 -0
  94. package/src/ui/theme/components/button.css +158 -0
  95. package/src/ui/theme/components/card.css +48 -0
  96. package/src/ui/theme/components/field.css +38 -0
  97. package/src/ui/theme/components/hero.css +46 -0
  98. package/src/ui/theme/components/paginator.css +63 -0
  99. package/src/ui/theme/components/section.css +67 -0
  100. package/src/ui/theme/components/statistics.css +189 -0
  101. package/src/ui/theme/components/table.css +60 -0
  102. package/src/ui/theme/index.css +42 -0
  103. package/src/ui/theme/tokens.legacy.css +147 -0
  104. package/src/ui/theme/tokens.primitive.css +108 -0
  105. package/src/ui/theme/tokens.scale.css +103 -0
  106. package/src/ui/theme/tokens.semantic.dark.css +173 -0
  107. package/src/ui/theme/tokens.semantic.light.css +212 -0
  108. package/src/vue/use-sa-theme.ts +154 -0
@@ -563,10 +563,30 @@ const checklistOkCount = computed(() => checklist.value.filter((c) => c.ok).leng
563
563
  // ── Diff vs. predecessor ────────────────────────────────────────────
564
564
  const showDiff = ref(false);
565
565
 
566
+ // Roles rather than values, because these reach the DOM through a `:style`
567
+ // binding — see PlanVersionDiffDialog. Fixed light hexes there meant the dialog
568
+ // kept white-ish rows in dark mode while the label above them turned near-white
569
+ // with the theme, which is the one state where a diff has to be readable.
570
+ // An inline style resolves `var()`, so the indirection costs nothing.
566
571
  const DIFF_STYLE = {
567
- added: { bg: '#ecfdf5', border: '#a7f3d0', color: '#047857', sign: '+' },
568
- removed: { bg: '#fef2f2', border: '#fecaca', color: '#b91c1c', sign: '−' },
569
- changed: { bg: '#fffbeb', border: '#fde68a', color: '#b45309', sign: '~' },
572
+ added: {
573
+ bg: 'var(--sa-color-positive-surface)',
574
+ border: 'var(--sa-color-positive-border)',
575
+ color: 'var(--sa-color-positive-fg)',
576
+ sign: '+',
577
+ },
578
+ removed: {
579
+ bg: 'var(--sa-color-negative-surface)',
580
+ border: 'var(--sa-color-negative-border)',
581
+ color: 'var(--sa-color-negative-fg)',
582
+ sign: '−',
583
+ },
584
+ changed: {
585
+ bg: 'var(--sa-color-warning-surface)',
586
+ border: 'var(--sa-color-warning-border)',
587
+ color: 'var(--sa-color-warning-fg)',
588
+ sign: '~',
589
+ },
570
590
  } as const;
571
591
 
572
592
  const diffStyles = computed(() => ({
@@ -754,10 +774,10 @@ function emitSave(): void {
754
774
  align-items: center;
755
775
  gap: 10px;
756
776
  padding: 10px 22px;
757
- background: #fef2f2;
758
- border-bottom: 1px solid #fecaca;
759
- color: #b91c1c;
760
- font-size: 13px;
777
+ background: var(--sa-color-negative-surface);
778
+ border-bottom: 1px solid var(--sa-color-negative-border);
779
+ color: var(--sa-color-negative-fg);
780
+ font-size: var(--sa-text-md);
761
781
  font-weight: 500;
762
782
  }
763
783
  .pve-error-ico {
@@ -769,16 +789,16 @@ function emitSave(): void {
769
789
  display: inline-flex;
770
790
  align-items: center;
771
791
  gap: 6px;
772
- font-size: 10px;
792
+ font-size: var(--sa-text-2xs);
773
793
  font-weight: 700;
774
794
  letter-spacing: 0.1em;
775
- color: var(--sa-muted-light);
795
+ color: var(--sa-color-fg-subtle);
776
796
  }
777
797
  .pve-mono {
778
- font: 500 11px var(--sa-font-mono);
798
+ font: 500 var(--sa-text-xs) var(--sa-font-mono);
779
799
  }
780
800
  .pve-mono--xs {
781
- font-size: 10px;
801
+ font-size: var(--sa-text-2xs);
782
802
  }
783
803
 
784
804
  /* ── Buttons & Chips ───────────────────────────────────────────── */
@@ -789,22 +809,22 @@ function emitSave(): void {
789
809
  gap: 5px;
790
810
  padding: 2px 8px;
791
811
  border-radius: 999px;
792
- font-size: 11px;
812
+ font-size: var(--sa-text-xs);
793
813
  font-weight: 600;
794
814
  letter-spacing: 0.01em;
795
- background: var(--sa-bg-surface-2);
796
- color: var(--sa-muted-dark);
797
- border: 1px solid var(--sa-border);
815
+ background: var(--sa-color-bg-sunken);
816
+ color: var(--sa-color-fg-secondary);
817
+ border: 1px solid var(--sa-color-border);
798
818
  }
799
819
  .pve-chip--plan {
800
- background: #dbeafe;
801
- color: #1e40af;
802
- border-color: #bfdbfe;
820
+ background: var(--sa-color-info-surface-strong);
821
+ color: var(--sa-color-info-fg);
822
+ border-color: var(--sa-color-info-border);
803
823
  }
804
824
  .pve-chip--draft {
805
- background: var(--sa-warning-bg);
806
- color: #b45309;
807
- border-color: #fde68a;
825
+ background: var(--sa-color-warning-surface);
826
+ color: var(--sa-color-warning-fg);
827
+ border-color: var(--sa-color-warning-border);
808
828
  }
809
829
  .pve-chip--dot::before {
810
830
  content: '';
@@ -814,18 +834,18 @@ function emitSave(): void {
814
834
  background: currentColor;
815
835
  }
816
836
  .pve-chip--changes {
817
- background: var(--sa-warning-bg);
818
- color: #b45309;
819
- border-color: #fde68a;
837
+ background: var(--sa-color-warning-surface);
838
+ color: var(--sa-color-warning-fg);
839
+ border-color: var(--sa-color-warning-border);
820
840
  }
821
841
 
822
842
  .pve-kbd {
823
- font: 600 10.5px var(--sa-font-mono);
824
- background: var(--sa-border-soft);
825
- color: var(--sa-muted-dark);
843
+ font: 600 var(--sa-text-xs) var(--sa-font-mono);
844
+ background: var(--sa-color-border-soft);
845
+ color: var(--sa-color-fg-secondary);
826
846
  padding: 2px 6px;
827
847
  border-radius: 4px;
828
- border: 1px solid var(--sa-border);
848
+ border: 1px solid var(--sa-color-border);
829
849
  }
830
850
 
831
851
  /* ── Body Grid ──────────────────────────────────────────────────── */
@@ -841,14 +861,14 @@ function emitSave(): void {
841
861
  overflow: hidden;
842
862
  display: grid;
843
863
  grid-template-columns: 380px 1fr 400px;
844
- background: var(--sa-bg-app);
864
+ background: var(--sa-color-bg-app);
845
865
  }
846
866
 
847
867
  .pve-col {
848
868
  display: flex;
849
869
  flex-direction: column;
850
- border-right: 1px solid var(--sa-border);
851
- background: #fff;
870
+ border-right: 1px solid var(--sa-color-border);
871
+ background: var(--sa-color-bg-surface);
852
872
  min-width: 0;
853
873
  overflow: hidden;
854
874
  }
@@ -857,7 +877,7 @@ function emitSave(): void {
857
877
  }
858
878
  .pve-col-header {
859
879
  padding: 16px 18px 12px;
860
- border-bottom: 1px solid var(--sa-border);
880
+ border-bottom: 1px solid var(--sa-color-border);
861
881
  display: flex;
862
882
  align-items: flex-start;
863
883
  gap: 8px;
@@ -870,19 +890,19 @@ function emitSave(): void {
870
890
  padding: 16px 18px 12px;
871
891
  }
872
892
  .pve-col-title {
873
- font-size: 14px;
893
+ font-size: var(--sa-text-lg);
874
894
  font-weight: 700;
875
895
  letter-spacing: -0.01em;
876
896
  }
877
897
  .pve-col-sub {
878
- font-size: 11.5px;
879
- color: var(--sa-muted);
898
+ font-size: var(--sa-text-sm);
899
+ color: var(--sa-color-fg-muted);
880
900
  margin-top: 2px;
881
901
  }
882
902
 
883
903
  /* ── LEFT — Pool ───────────────────────────────────────────────── */
884
904
  .pve-pool {
885
- background: #fbfbfd;
905
+ background: var(--sa-color-bg-surface-raised);
886
906
  }
887
907
  .pve-search {
888
908
  display: flex;
@@ -890,8 +910,8 @@ function emitSave(): void {
890
910
  gap: 8px;
891
911
  padding: 10px 14px;
892
912
  margin: 10px 14px 0;
893
- background: #fff;
894
- border: 1px solid var(--sa-border);
913
+ background: var(--sa-color-bg-surface);
914
+ border: 1px solid var(--sa-color-border);
895
915
  border-radius: 8px;
896
916
  }
897
917
  .pve-search input {
@@ -899,11 +919,11 @@ function emitSave(): void {
899
919
  border: 0;
900
920
  outline: 0;
901
921
  background: transparent;
902
- font: 13px var(--sa-font-body);
903
- color: var(--sa-heading);
922
+ font: var(--sa-text-md) var(--sa-font-body);
923
+ color: var(--sa-color-fg-heading);
904
924
  }
905
925
  .pve-search-ico {
906
- color: var(--sa-muted-light);
926
+ color: var(--sa-color-fg-subtle);
907
927
  display: inline-flex;
908
928
  }
909
929
  .pve-tabs {
@@ -916,27 +936,27 @@ function emitSave(): void {
916
936
  border: 0;
917
937
  padding: 5px 10px;
918
938
  border-radius: 6px;
919
- font: 500 12.5px var(--sa-font-body);
920
- color: var(--sa-muted-dark);
939
+ font: 500 var(--sa-text-md) var(--sa-font-body);
940
+ color: var(--sa-color-fg-secondary);
921
941
  cursor: pointer;
922
942
  display: flex;
923
943
  align-items: center;
924
944
  gap: 6px;
925
945
  }
926
946
  .pve-tab--active {
927
- background: var(--sa-heading);
928
- color: #fff;
947
+ background: var(--sa-color-inverse-bg);
948
+ color: var(--sa-color-fg-on-accent);
929
949
  }
930
950
  .pve-tab-count {
931
- font-size: 10.5px;
951
+ font-size: var(--sa-text-xs);
932
952
  padding: 1px 5px;
933
953
  border-radius: 4px;
934
- background: var(--sa-border);
935
- color: var(--sa-muted-dark);
954
+ background: var(--sa-color-border);
955
+ color: var(--sa-color-fg-secondary);
936
956
  }
937
957
  .pve-tab--active .pve-tab-count {
938
- background: rgba(255, 255, 255, 0.15);
939
- color: #fff;
958
+ background: var(--sa-color-inverse-border-strong);
959
+ color: var(--sa-color-fg-on-accent);
940
960
  }
941
961
  .pve-pool-list {
942
962
  flex: 1;
@@ -945,10 +965,10 @@ function emitSave(): void {
945
965
  padding: 6px 14px 18px;
946
966
  }
947
967
  .pve-pool-group {
948
- font-size: 10px;
968
+ font-size: var(--sa-text-2xs);
949
969
  text-transform: uppercase;
950
970
  letter-spacing: 0.1em;
951
- color: var(--sa-muted-light);
971
+ color: var(--sa-color-fg-subtle);
952
972
  font-weight: 700;
953
973
  padding: 12px 4px 6px;
954
974
  }
@@ -956,8 +976,8 @@ function emitSave(): void {
956
976
  display: flex;
957
977
  align-items: flex-start;
958
978
  gap: 10px;
959
- background: #fff;
960
- border: 1px solid var(--sa-border);
979
+ background: var(--sa-color-bg-surface);
980
+ border: 1px solid var(--sa-color-border);
961
981
  border-radius: 8px;
962
982
  padding: 9px 10px;
963
983
  margin-bottom: 6px;
@@ -968,22 +988,22 @@ function emitSave(): void {
968
988
  user-select: none;
969
989
  }
970
990
  .pve-pool-card:hover {
971
- border-color: #c7d2fe;
972
- box-shadow: 0 1px 3px rgba(15, 23, 42, 0.06);
991
+ border-color: var(--sa-color-scheduled-border);
992
+ box-shadow: 0 1px 3px var(--sa-shadow-tint-1);
973
993
  }
974
994
  .pve-pool-card:active {
975
995
  cursor: grabbing;
976
996
  }
977
997
  .pve-pool-card--selected {
978
- background: var(--sa-bg-surface-2);
998
+ background: var(--sa-color-bg-sunken);
979
999
  opacity: 0.7;
980
1000
  }
981
1001
  .pve-pool-card--partial {
982
- border-color: #fde68a;
983
- background: var(--sa-warning-bg);
1002
+ border-color: var(--sa-color-warning-border);
1003
+ background: var(--sa-color-warning-surface);
984
1004
  }
985
1005
  .pve-pool-grip {
986
- color: #cbd5e1;
1006
+ color: var(--sa-color-fg-disabled);
987
1007
  padding-top: 3px;
988
1008
  flex: 0 0 auto;
989
1009
  }
@@ -997,9 +1017,9 @@ function emitSave(): void {
997
1017
  gap: 8px;
998
1018
  }
999
1019
  .pve-pool-card-label {
1000
- font-size: 13px;
1020
+ font-size: var(--sa-text-md);
1001
1021
  font-weight: 600;
1002
- color: var(--sa-heading);
1022
+ color: var(--sa-color-fg-heading);
1003
1023
  }
1004
1024
  .pve-pool-card-check {
1005
1025
  display: inline-grid;
@@ -1007,8 +1027,8 @@ function emitSave(): void {
1007
1027
  width: 16px;
1008
1028
  height: 16px;
1009
1029
  border-radius: 4px;
1010
- background: #d1fae5;
1011
- color: #047857;
1030
+ background: var(--sa-color-positive-surface-strong);
1031
+ color: var(--sa-color-positive-fg);
1012
1032
  margin-left: auto;
1013
1033
  }
1014
1034
  .pve-pool-card-meta {
@@ -1016,23 +1036,23 @@ function emitSave(): void {
1016
1036
  gap: 5px;
1017
1037
  align-items: center;
1018
1038
  flex-wrap: wrap;
1019
- font-size: 10.5px;
1020
- color: var(--sa-muted-light);
1039
+ font-size: var(--sa-text-xs);
1040
+ color: var(--sa-color-fg-subtle);
1021
1041
  margin-top: 2px;
1022
1042
  }
1023
1043
  .pve-pool-card-key {
1024
- font: 500 10px var(--sa-font-mono);
1025
- color: var(--sa-muted);
1044
+ font: 500 var(--sa-text-2xs) var(--sa-font-mono);
1045
+ color: var(--sa-color-fg-muted);
1026
1046
  }
1027
1047
  .pve-pool-card-dot {
1028
- color: #cbd5e1;
1048
+ color: var(--sa-color-fg-disabled);
1029
1049
  }
1030
1050
 
1031
1051
  .pve-empty {
1032
1052
  padding: 24px 4px;
1033
1053
  text-align: center;
1034
- color: var(--sa-muted-light);
1035
- font-size: 12.5px;
1054
+ color: var(--sa-color-fg-subtle);
1055
+ font-size: var(--sa-text-md);
1036
1056
  font-style: italic;
1037
1057
  }
1038
1058
 
@@ -1045,12 +1065,16 @@ function emitSave(): void {
1045
1065
  box-shadow 0.15s;
1046
1066
  }
1047
1067
  .pve-basket--dragover {
1048
- background: #f0f6ff;
1049
- box-shadow: inset 0 0 0 2px var(--sa-primary);
1068
+ background: var(--sa-color-accent-surface);
1069
+ box-shadow: inset 0 0 0 2px var(--sa-color-accent);
1050
1070
  }
1051
1071
  .pve-basket-settings {
1052
- background: linear-gradient(180deg, var(--sa-bg-surface-2) 0%, #fff 100%);
1053
- border-bottom: 1px solid var(--sa-border);
1072
+ background: linear-gradient(
1073
+ 180deg,
1074
+ var(--sa-color-bg-sunken) 0%,
1075
+ var(--sa-color-bg-surface) 100%
1076
+ );
1077
+ border-bottom: 1px solid var(--sa-color-border);
1054
1078
  padding: 14px 22px 16px;
1055
1079
  display: flex;
1056
1080
  flex-direction: column;
@@ -1062,8 +1086,8 @@ function emitSave(): void {
1062
1086
  gap: 10px;
1063
1087
  }
1064
1088
  .pve-bs-label {
1065
- font-size: 12px;
1066
- color: var(--sa-muted-dark);
1089
+ font-size: var(--sa-text-sm);
1090
+ color: var(--sa-color-fg-secondary);
1067
1091
  font-weight: 500;
1068
1092
  min-width: 88px;
1069
1093
  }
@@ -1072,34 +1096,34 @@ function emitSave(): void {
1072
1096
  margin-left: 8px;
1073
1097
  }
1074
1098
  .pve-bs-input {
1075
- background: #fff;
1076
- border: 1px solid var(--sa-border);
1099
+ background: var(--sa-color-bg-surface);
1100
+ border: 1px solid var(--sa-color-border);
1077
1101
  border-radius: 6px;
1078
1102
  padding: 6px 10px;
1079
- font: 13px var(--sa-font-body);
1080
- color: var(--sa-heading);
1103
+ font: var(--sa-text-md) var(--sa-font-body);
1104
+ color: var(--sa-color-fg-heading);
1081
1105
  outline: none;
1082
1106
  }
1083
1107
  .pve-bs-input:focus {
1084
- border-color: var(--sa-primary);
1085
- box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
1108
+ border-color: var(--sa-color-accent);
1109
+ box-shadow: 0 0 0 3px var(--sa-shadow-tint-2);
1086
1110
  }
1087
1111
  .pve-bs-input--error {
1088
- border-color: #ef4444;
1089
- background: #fef2f2;
1112
+ border-color: var(--sa-color-negative-strong);
1113
+ background: var(--sa-color-negative-surface);
1090
1114
  }
1091
1115
  .pve-bs-input--error:focus {
1092
- border-color: #ef4444;
1093
- box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.15);
1116
+ border-color: var(--sa-color-negative-strong);
1117
+ box-shadow: 0 0 0 3px var(--sa-shadow-tint-3);
1094
1118
  }
1095
1119
  .pve-bs-error {
1096
1120
  display: flex;
1097
1121
  align-items: center;
1098
1122
  gap: 6px;
1099
1123
  margin: -2px 0 2px;
1100
- font-size: 11.5px;
1124
+ font-size: var(--sa-text-sm);
1101
1125
  font-weight: 500;
1102
- color: #b91c1c;
1126
+ color: var(--sa-color-negative-fg);
1103
1127
  }
1104
1128
  .pve-bs-error svg {
1105
1129
  flex: 0 0 auto;
@@ -1111,9 +1135,9 @@ function emitSave(): void {
1111
1135
  .pve-bs-input-grp {
1112
1136
  display: flex;
1113
1137
  align-items: stretch;
1114
- border: 1px solid var(--sa-border);
1138
+ border: 1px solid var(--sa-color-border);
1115
1139
  border-radius: 6px;
1116
- background: #fff;
1140
+ background: var(--sa-color-bg-surface);
1117
1141
  overflow: hidden;
1118
1142
  }
1119
1143
  .pve-bs-input-grp--gap {
@@ -1127,17 +1151,17 @@ function emitSave(): void {
1127
1151
  }
1128
1152
  .pve-bs-prefix,
1129
1153
  .pve-bs-suffix {
1130
- background: var(--sa-bg-surface-2);
1154
+ background: var(--sa-color-bg-sunken);
1131
1155
  padding: 6px 10px;
1132
- font-size: 12px;
1133
- color: var(--sa-muted);
1156
+ font-size: var(--sa-text-sm);
1157
+ color: var(--sa-color-fg-muted);
1134
1158
  display: grid;
1135
1159
  place-items: center;
1136
- border-right: 1px solid var(--sa-border);
1160
+ border-right: 1px solid var(--sa-color-border);
1137
1161
  }
1138
1162
  .pve-bs-suffix {
1139
1163
  border-right: 0;
1140
- border-left: 1px solid var(--sa-border);
1164
+ border-left: 1px solid var(--sa-color-border);
1141
1165
  }
1142
1166
 
1143
1167
  .pve-toggle {
@@ -1155,7 +1179,7 @@ function emitSave(): void {
1155
1179
  .pve-toggle span {
1156
1180
  position: absolute;
1157
1181
  inset: 0;
1158
- background: #cbd5e1;
1182
+ background: var(--sa-color-border-strong);
1159
1183
  border-radius: 999px;
1160
1184
  transition: background 0.15s;
1161
1185
  }
@@ -1167,11 +1191,11 @@ function emitSave(): void {
1167
1191
  width: 16px;
1168
1192
  height: 16px;
1169
1193
  border-radius: 50%;
1170
- background: #fff;
1194
+ background: var(--sa-color-bg-surface);
1171
1195
  transition: transform 0.15s;
1172
1196
  }
1173
1197
  .pve-toggle input:checked + span {
1174
- background: var(--sa-primary);
1198
+ background: var(--sa-color-accent);
1175
1199
  }
1176
1200
  .pve-toggle input:checked + span::before {
1177
1201
  transform: translateX(16px);
@@ -1179,7 +1203,7 @@ function emitSave(): void {
1179
1203
 
1180
1204
  .pve-basket-group {
1181
1205
  padding: 14px 22px;
1182
- border-bottom: 1px solid var(--sa-border-soft);
1206
+ border-bottom: 1px solid var(--sa-color-border-soft);
1183
1207
  }
1184
1208
  .pve-basket-group:last-child {
1185
1209
  border-bottom: 0;
@@ -1196,41 +1220,41 @@ function emitSave(): void {
1196
1220
  border-radius: 50%;
1197
1221
  }
1198
1222
  .pve-bg-dot--quota {
1199
- background: #0ea5e9;
1223
+ background: var(--sa-color-quota);
1200
1224
  }
1201
1225
  .pve-bg-dot--feature {
1202
- background: #8b5cf6;
1226
+ background: var(--sa-color-feature);
1203
1227
  }
1204
1228
  .pve-bg-dot--bundle {
1205
- background: #f59e0b;
1229
+ background: var(--sa-color-bundle);
1206
1230
  }
1207
1231
  .pve-bg-title {
1208
- font-size: 12px;
1232
+ font-size: var(--sa-text-sm);
1209
1233
  text-transform: uppercase;
1210
1234
  letter-spacing: 0.1em;
1211
1235
  font-weight: 700;
1212
- color: #334155;
1236
+ color: var(--sa-color-fg-body);
1213
1237
  }
1214
1238
  .pve-bg-count {
1215
1239
  margin-left: 6px;
1216
- font-size: 11px;
1217
- color: var(--sa-muted-light);
1240
+ font-size: var(--sa-text-xs);
1241
+ color: var(--sa-color-fg-subtle);
1218
1242
  }
1219
1243
 
1220
1244
  .pve-dz {
1221
- border: 1.5px dashed var(--sa-border-strong);
1245
+ border: 1.5px dashed var(--sa-color-border-strong);
1222
1246
  border-radius: 10px;
1223
1247
  padding: 12px;
1224
- background: #fafbfc;
1248
+ background: var(--sa-color-bg-surface-raised);
1225
1249
  min-height: 60px;
1226
1250
  }
1227
1251
  .pve-basket--dragover .pve-dz {
1228
- border-color: var(--sa-primary);
1229
- background: #f0f6ff;
1252
+ border-color: var(--sa-color-accent);
1253
+ background: var(--sa-color-accent-surface);
1230
1254
  }
1231
1255
  .pve-dz-empty {
1232
- font-size: 12px;
1233
- color: var(--sa-muted-light);
1256
+ font-size: var(--sa-text-sm);
1257
+ color: var(--sa-color-fg-subtle);
1234
1258
  text-align: center;
1235
1259
  padding: 4px 0;
1236
1260
  }
@@ -1243,8 +1267,8 @@ function emitSave(): void {
1243
1267
  align-items: center;
1244
1268
  gap: 10px;
1245
1269
  padding: 8px 10px;
1246
- background: #fff;
1247
- border: 1px solid var(--sa-border);
1270
+ background: var(--sa-color-bg-surface);
1271
+ border: 1px solid var(--sa-color-border);
1248
1272
  border-radius: 6px;
1249
1273
  margin-bottom: 4px;
1250
1274
  }
@@ -1258,43 +1282,43 @@ function emitSave(): void {
1258
1282
  flex: 0 0 auto;
1259
1283
  }
1260
1284
  .pve-sel-dot--quota {
1261
- background: #0ea5e9;
1285
+ background: var(--sa-color-quota);
1262
1286
  }
1263
1287
  .pve-sel-dot--feature {
1264
- background: #8b5cf6;
1288
+ background: var(--sa-color-feature);
1265
1289
  }
1266
1290
  .pve-sel-dot--bundle {
1267
- background: #f59e0b;
1291
+ background: var(--sa-color-bundle);
1268
1292
  }
1269
1293
  .pve-sel-body {
1270
1294
  flex: 1;
1271
1295
  min-width: 0;
1272
1296
  }
1273
1297
  .pve-sel-label {
1274
- font-size: 13px;
1298
+ font-size: var(--sa-text-md);
1275
1299
  font-weight: 600;
1276
- color: var(--sa-heading);
1300
+ color: var(--sa-color-fg-heading);
1277
1301
  }
1278
1302
  .pve-sel-sub {
1279
- font: 500 10.5px var(--sa-font-mono);
1280
- color: var(--sa-muted-light);
1303
+ font: 500 var(--sa-text-xs) var(--sa-font-mono);
1304
+ color: var(--sa-color-fg-subtle);
1281
1305
  }
1282
1306
  .pve-sel-val-edit {
1283
1307
  display: flex;
1284
1308
  align-items: center;
1285
1309
  gap: 4px;
1286
- background: var(--sa-bg-surface-2);
1310
+ background: var(--sa-color-bg-sunken);
1287
1311
  padding: 3px 8px;
1288
1312
  border-radius: 5px;
1289
- border: 1px solid var(--sa-border);
1313
+ border: 1px solid var(--sa-color-border);
1290
1314
  }
1291
1315
  .pve-sel-val-input {
1292
1316
  width: 64px;
1293
1317
  border: 0;
1294
1318
  outline: 0;
1295
1319
  background: transparent;
1296
- font: 600 13px var(--sa-font-body);
1297
- color: var(--sa-heading);
1320
+ font: 600 var(--sa-text-md) var(--sa-font-body);
1321
+ color: var(--sa-color-fg-heading);
1298
1322
  text-align: right;
1299
1323
  -moz-appearance: textfield;
1300
1324
  }
@@ -1304,13 +1328,13 @@ function emitSave(): void {
1304
1328
  margin: 0;
1305
1329
  }
1306
1330
  .pve-sel-val-unit {
1307
- font-size: 10.5px;
1308
- color: var(--sa-muted-light);
1331
+ font-size: var(--sa-text-xs);
1332
+ color: var(--sa-color-fg-subtle);
1309
1333
  }
1310
1334
  .pve-sel-x {
1311
1335
  background: transparent;
1312
1336
  border: 0;
1313
- color: var(--sa-muted-light);
1337
+ color: var(--sa-color-fg-subtle);
1314
1338
  cursor: pointer;
1315
1339
  padding: 4px;
1316
1340
  border-radius: 4px;
@@ -1318,13 +1342,13 @@ function emitSave(): void {
1318
1342
  place-items: center;
1319
1343
  }
1320
1344
  .pve-sel-x:hover {
1321
- background: #fef2f2;
1322
- color: #ef4444;
1345
+ background: var(--sa-color-negative-surface);
1346
+ color: var(--sa-color-negative-strong);
1323
1347
  }
1324
1348
 
1325
1349
  /* ── RIGHT — Preview ───────────────────────────────────────────── */
1326
1350
  .pve-preview {
1327
- background: var(--sa-bg-surface-2);
1351
+ background: var(--sa-color-bg-sunken);
1328
1352
  overflow: auto;
1329
1353
  }
1330
1354
  .pve-preview-toggle {
@@ -1334,9 +1358,9 @@ function emitSave(): void {
1334
1358
  }
1335
1359
  .pve-prev-window {
1336
1360
  margin: 14px 18px;
1337
- background: #fff;
1361
+ background: var(--sa-color-bg-surface);
1338
1362
  border-radius: 10px;
1339
- border: 1px solid var(--sa-border);
1363
+ border: 1px solid var(--sa-color-border);
1340
1364
  overflow: hidden;
1341
1365
  transition: max-width 0.18s;
1342
1366
  }
@@ -1348,8 +1372,8 @@ function emitSave(): void {
1348
1372
  align-items: center;
1349
1373
  gap: 6px;
1350
1374
  padding: 8px 12px;
1351
- background: var(--sa-border-soft);
1352
- border-bottom: 1px solid var(--sa-border);
1375
+ background: var(--sa-color-border-soft);
1376
+ border-bottom: 1px solid var(--sa-color-border);
1353
1377
  }
1354
1378
  .pve-prev-dot {
1355
1379
  width: 9px;
@@ -1358,34 +1382,34 @@ function emitSave(): void {
1358
1382
  }
1359
1383
  .pve-prev-url {
1360
1384
  flex: 1;
1361
- background: #fff;
1385
+ background: var(--sa-color-bg-surface);
1362
1386
  border-radius: 4px;
1363
1387
  padding: 3px 10px;
1364
1388
  margin-left: 10px;
1365
- font: 500 11px var(--sa-font-mono);
1366
- color: var(--sa-muted);
1367
- border: 1px solid var(--sa-border);
1389
+ font: 500 var(--sa-text-xs) var(--sa-font-mono);
1390
+ color: var(--sa-color-fg-muted);
1391
+ border: 1px solid var(--sa-color-border);
1368
1392
  }
1369
1393
  .pve-prev-body {
1370
1394
  padding: 18px 18px 16px;
1371
1395
  }
1372
1396
  .pve-prev-eyebrow {
1373
- font-size: 10.5px;
1397
+ font-size: var(--sa-text-xs);
1374
1398
  text-transform: uppercase;
1375
1399
  letter-spacing: 0.12em;
1376
- color: var(--sa-muted);
1400
+ color: var(--sa-color-fg-muted);
1377
1401
  font-weight: 700;
1378
1402
  }
1379
1403
  .pve-prev-title {
1380
- font-size: 28px;
1404
+ font-size: var(--sa-text-3xl);
1381
1405
  font-weight: 700;
1382
1406
  letter-spacing: -0.03em;
1383
1407
  margin-top: 6px;
1384
- color: var(--sa-heading);
1408
+ color: var(--sa-color-fg-heading);
1385
1409
  }
1386
1410
  .pve-prev-desc {
1387
- font-size: 12.5px;
1388
- color: var(--sa-muted-dark);
1411
+ font-size: var(--sa-text-md);
1412
+ color: var(--sa-color-fg-secondary);
1389
1413
  margin-top: 6px;
1390
1414
  line-height: 1.5;
1391
1415
  }
@@ -1396,18 +1420,18 @@ function emitSave(): void {
1396
1420
  margin-top: 14px;
1397
1421
  }
1398
1422
  .pve-prev-price-big {
1399
- font-size: 38px;
1423
+ font-size: var(--sa-text-4xl);
1400
1424
  font-weight: 700;
1401
1425
  letter-spacing: -0.03em;
1402
- color: var(--sa-heading);
1426
+ color: var(--sa-color-fg-heading);
1403
1427
  }
1404
1428
  .pve-prev-price-unit {
1405
- font-size: 13px;
1406
- color: var(--sa-muted);
1429
+ font-size: var(--sa-text-md);
1430
+ color: var(--sa-color-fg-muted);
1407
1431
  }
1408
1432
  .pve-prev-price-yearly {
1409
- font-size: 11.5px;
1410
- color: #047857;
1433
+ font-size: var(--sa-text-sm);
1434
+ color: var(--sa-color-positive-fg);
1411
1435
  margin-top: 2px;
1412
1436
  font-weight: 500;
1413
1437
  }
@@ -1416,21 +1440,21 @@ function emitSave(): void {
1416
1440
  width: 100%;
1417
1441
  margin-top: 14px;
1418
1442
  padding: 10px;
1419
- background: var(--sa-heading);
1420
- color: #fff;
1443
+ background: var(--sa-color-inverse-bg);
1444
+ color: var(--sa-color-fg-on-accent);
1421
1445
  border: 0;
1422
1446
  border-radius: 7px;
1423
- font: 600 13px var(--sa-font-body);
1447
+ font: 600 var(--sa-text-md) var(--sa-font-body);
1424
1448
  cursor: pointer;
1425
1449
  }
1426
1450
  .pve-prev-sep {
1427
1451
  margin-top: 18px;
1428
1452
  padding-top: 14px;
1429
- border-top: 1px solid var(--sa-border-soft);
1430
- font-size: 10.5px;
1453
+ border-top: 1px solid var(--sa-color-border-soft);
1454
+ font-size: var(--sa-text-xs);
1431
1455
  text-transform: uppercase;
1432
1456
  letter-spacing: 0.12em;
1433
- color: var(--sa-muted-light);
1457
+ color: var(--sa-color-fg-subtle);
1434
1458
  font-weight: 700;
1435
1459
  }
1436
1460
  .pve-prev-list {
@@ -1445,8 +1469,8 @@ function emitSave(): void {
1445
1469
  display: flex;
1446
1470
  align-items: center;
1447
1471
  gap: 8px;
1448
- font-size: 12.5px;
1449
- color: var(--sa-heading);
1472
+ font-size: var(--sa-text-md);
1473
+ color: var(--sa-color-fg-heading);
1450
1474
  }
1451
1475
  .pve-prev-list li b {
1452
1476
  font-weight: 600;
@@ -1457,27 +1481,27 @@ function emitSave(): void {
1457
1481
  width: 16px;
1458
1482
  height: 16px;
1459
1483
  border-radius: 50%;
1460
- background: #d1fae5;
1461
- color: #047857;
1484
+ background: var(--sa-color-positive-surface-strong);
1485
+ color: var(--sa-color-positive-fg);
1462
1486
  flex: 0 0 auto;
1463
1487
  }
1464
1488
  .pve-prev-empty {
1465
- color: var(--sa-muted-light);
1489
+ color: var(--sa-color-fg-subtle);
1466
1490
  font-style: italic;
1467
1491
  }
1468
1492
  .pve-prev-foot {
1469
1493
  margin-top: 16px;
1470
1494
  padding-top: 14px;
1471
- border-top: 1px solid var(--sa-border-soft);
1472
- font-size: 10.5px;
1473
- color: var(--sa-muted-light);
1495
+ border-top: 1px solid var(--sa-color-border-soft);
1496
+ font-size: var(--sa-text-xs);
1497
+ color: var(--sa-color-fg-subtle);
1474
1498
  line-height: 1.5;
1475
1499
  }
1476
1500
 
1477
1501
  .pve-prev-validate {
1478
1502
  margin: 0 18px 18px;
1479
- background: #fff;
1480
- border: 1px solid var(--sa-border);
1503
+ background: var(--sa-color-bg-surface);
1504
+ border: 1px solid var(--sa-color-border);
1481
1505
  border-radius: 8px;
1482
1506
  padding: 12px;
1483
1507
  }
@@ -1488,37 +1512,37 @@ function emitSave(): void {
1488
1512
  margin-bottom: 6px;
1489
1513
  }
1490
1514
  .pve-prev-validate-tick {
1491
- color: var(--sa-positive-light);
1515
+ color: var(--sa-color-positive-strong);
1492
1516
  display: inline-flex;
1493
1517
  }
1494
1518
  .pve-prev-validate-title {
1495
- font-size: 12.5px;
1519
+ font-size: var(--sa-text-md);
1496
1520
  font-weight: 600;
1497
1521
  }
1498
1522
  .pve-prev-validate-count {
1499
1523
  margin-left: auto;
1500
- font-size: 11px;
1501
- color: var(--sa-muted);
1524
+ font-size: var(--sa-text-xs);
1525
+ color: var(--sa-color-fg-muted);
1502
1526
  }
1503
1527
  .pve-vchk {
1504
1528
  display: flex;
1505
1529
  align-items: center;
1506
1530
  gap: 6px;
1507
- font-size: 11.5px;
1531
+ font-size: var(--sa-text-sm);
1508
1532
  padding: 3px 0;
1509
1533
  }
1510
1534
  .pve-vchk--ok {
1511
- color: var(--sa-muted-dark);
1535
+ color: var(--sa-color-fg-secondary);
1512
1536
  }
1513
1537
  .pve-vchk--ok span:first-child {
1514
- color: var(--sa-positive-light);
1538
+ color: var(--sa-color-positive-strong);
1515
1539
  display: inline-flex;
1516
1540
  }
1517
1541
  .pve-vchk--warn {
1518
- color: #b45309;
1542
+ color: var(--sa-color-warning-fg);
1519
1543
  }
1520
1544
  .pve-vchk--warn span:first-child {
1521
- color: var(--sa-amber);
1545
+ color: var(--sa-color-warning-strong);
1522
1546
  display: inline-flex;
1523
1547
  }
1524
1548
 
@@ -1535,39 +1559,39 @@ function emitSave(): void {
1535
1559
  }
1536
1560
  .pve-col {
1537
1561
  border-right: 0;
1538
- border-bottom: 1px solid var(--sa-border);
1562
+ border-bottom: 1px solid var(--sa-color-border);
1539
1563
  }
1540
1564
  }
1541
1565
 
1542
1566
  /* ── Diff dialog ────────────────────────────────────────────────── */
1543
1567
  .pve-diff-modal {
1544
- background: #fff;
1568
+ background: var(--sa-color-bg-surface);
1545
1569
  width: 560px;
1546
1570
  max-width: 92vw;
1547
1571
  border-radius: 14px;
1548
- box-shadow: 0 24px 60px rgba(15, 23, 42, 0.3);
1572
+ box-shadow: 0 24px 60px var(--sa-shadow-tint-4);
1549
1573
  overflow: hidden;
1550
1574
  font-family: var(--sa-font-body);
1551
- color: var(--sa-heading);
1575
+ color: var(--sa-color-fg-heading);
1552
1576
  }
1553
1577
  .pve-diff-modal * {
1554
1578
  box-sizing: border-box;
1555
1579
  }
1556
1580
  .pve-diff-head {
1557
1581
  padding: 16px 20px;
1558
- border-bottom: 1px solid var(--sa-border);
1582
+ border-bottom: 1px solid var(--sa-color-border);
1559
1583
  display: flex;
1560
1584
  align-items: flex-start;
1561
1585
  gap: 12px;
1562
1586
  }
1563
1587
  .pve-diff-title {
1564
- font-size: 15px;
1588
+ font-size: var(--sa-text-lg);
1565
1589
  font-weight: 700;
1566
1590
  letter-spacing: -0.01em;
1567
1591
  }
1568
1592
  .pve-diff-sub {
1569
- font-size: 11.5px;
1570
- color: var(--sa-muted);
1593
+ font-size: var(--sa-text-sm);
1594
+ color: var(--sa-color-fg-muted);
1571
1595
  margin-top: 3px;
1572
1596
  }
1573
1597
  .pve-diff-close {
@@ -1577,15 +1601,15 @@ function emitSave(): void {
1577
1601
  border-radius: 6px;
1578
1602
  background: transparent;
1579
1603
  border: 0;
1580
- color: var(--sa-muted-light);
1604
+ color: var(--sa-color-fg-subtle);
1581
1605
  cursor: pointer;
1582
1606
  display: grid;
1583
1607
  place-items: center;
1584
1608
  flex: 0 0 auto;
1585
1609
  }
1586
1610
  .pve-diff-close:hover {
1587
- background: rgba(15, 23, 42, 0.05);
1588
- color: var(--sa-heading);
1611
+ background: var(--sa-color-bg-sunken);
1612
+ color: var(--sa-color-fg-heading);
1589
1613
  }
1590
1614
  .pve-diff-body {
1591
1615
  padding: 14px 20px 18px;
@@ -1607,9 +1631,9 @@ function emitSave(): void {
1607
1631
  width: 20px;
1608
1632
  height: 20px;
1609
1633
  border-radius: 5px;
1610
- color: #fff;
1634
+ color: var(--sa-color-fg-on-accent);
1611
1635
  font-weight: 800;
1612
- font-size: 13px;
1636
+ font-size: var(--sa-text-md);
1613
1637
  display: grid;
1614
1638
  place-items: center;
1615
1639
  flex: 0 0 auto;
@@ -1625,43 +1649,43 @@ function emitSave(): void {
1625
1649
  flex-wrap: wrap;
1626
1650
  }
1627
1651
  .pve-diff-section {
1628
- font-size: 10.5px;
1652
+ font-size: var(--sa-text-xs);
1629
1653
  text-transform: uppercase;
1630
1654
  letter-spacing: 0.08em;
1631
1655
  font-weight: 700;
1632
1656
  }
1633
1657
  .pve-diff-label {
1634
- font-size: 13px;
1658
+ font-size: var(--sa-text-md);
1635
1659
  font-weight: 600;
1636
- color: var(--sa-heading);
1660
+ color: var(--sa-color-fg-heading);
1637
1661
  }
1638
1662
  .pve-diff-change {
1639
1663
  display: flex;
1640
1664
  align-items: center;
1641
1665
  gap: 8px;
1642
1666
  margin-top: 3px;
1643
- font-size: 12px;
1667
+ font-size: var(--sa-text-sm);
1644
1668
  }
1645
1669
  .pve-diff-from {
1646
1670
  text-decoration: line-through;
1647
- color: var(--sa-muted-light);
1671
+ color: var(--sa-color-fg-subtle);
1648
1672
  }
1649
1673
  .pve-diff-to {
1650
- color: var(--sa-heading);
1674
+ color: var(--sa-color-fg-heading);
1651
1675
  font-weight: 600;
1652
1676
  }
1653
1677
  .pve-diff-arrow {
1654
1678
  font-weight: 700;
1655
1679
  }
1656
1680
  .pve-diff-tag {
1657
- font-size: 10px;
1658
- background: #fff;
1681
+ font-size: var(--sa-text-2xs);
1682
+ background: var(--sa-color-bg-surface);
1659
1683
  }
1660
1684
  .pve-diff-empty {
1661
1685
  padding: 24px 8px;
1662
1686
  text-align: center;
1663
- color: var(--sa-muted-light);
1687
+ color: var(--sa-color-fg-subtle);
1664
1688
  font-style: italic;
1665
- font-size: 13px;
1689
+ font-size: var(--sa-text-md);
1666
1690
  }
1667
1691
  </style>