@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
@@ -839,8 +839,8 @@ async function onLocaleChange(loc: string): Promise<void> {
839
839
  <style>
840
840
  .sa-marketing {
841
841
  padding: 22px 26px;
842
- background: var(--sa-bg-app);
843
- color: var(--sa-heading);
842
+ background: var(--sa-color-bg-app);
843
+ color: var(--sa-color-fg-heading);
844
844
  font-family: var(--sa-font-body);
845
845
  min-height: 100%;
846
846
  box-sizing: border-box;
@@ -855,8 +855,8 @@ async function onLocaleChange(loc: string): Promise<void> {
855
855
  .sa-marketing-locale-switch {
856
856
  display: inline-flex;
857
857
  gap: 2px;
858
- background: var(--sa-bg-surface);
859
- border: 1px solid var(--sa-border);
858
+ background: var(--sa-color-bg-surface);
859
+ border: 1px solid var(--sa-color-border);
860
860
  border-radius: 8px;
861
861
  padding: 3px;
862
862
  }
@@ -865,13 +865,13 @@ async function onLocaleChange(loc: string): Promise<void> {
865
865
  border: 0;
866
866
  background: transparent;
867
867
  border-radius: 6px;
868
- font: 500 12px var(--sa-font-mono);
869
- color: var(--sa-muted-dark);
868
+ font: 500 var(--sa-text-sm) var(--sa-font-mono);
869
+ color: var(--sa-color-fg-secondary);
870
870
  cursor: pointer;
871
871
  }
872
872
  .sa-marketing-locale-btn.active {
873
- background: var(--sa-primary-50);
874
- color: var(--sa-primary-strong);
873
+ background: var(--sa-color-accent-surface-strong);
874
+ color: var(--sa-color-accent-strong);
875
875
  font-weight: 600;
876
876
  }
877
877
  .sa-marketing-locale-mgr {
@@ -881,52 +881,52 @@ async function onLocaleChange(loc: string): Promise<void> {
881
881
  flex-wrap: wrap;
882
882
  }
883
883
  .sa-marketing-locale-mgr-label {
884
- font-size: 11px;
885
- color: var(--sa-muted-light);
884
+ font-size: var(--sa-text-xs);
885
+ color: var(--sa-color-fg-subtle);
886
886
  }
887
887
  .sa-marketing-locale-pill {
888
888
  display: inline-flex;
889
889
  align-items: center;
890
- border: 1px solid var(--sa-border);
890
+ border: 1px solid var(--sa-color-border);
891
891
  border-radius: 7px;
892
892
  overflow: hidden;
893
893
  }
894
894
  .sa-marketing-locale-pill.active {
895
- border-color: var(--sa-primary-strong);
896
- background: var(--sa-primary-50);
895
+ border-color: var(--sa-color-accent-strong);
896
+ background: var(--sa-color-accent-surface-strong);
897
897
  }
898
898
  .sa-marketing-locale-pill-btn {
899
899
  border: 0;
900
900
  background: transparent;
901
901
  padding: 4px 8px;
902
- font: 600 11px var(--sa-font-mono);
903
- color: var(--sa-muted-dark);
902
+ font: 600 var(--sa-text-xs) var(--sa-font-mono);
903
+ color: var(--sa-color-fg-secondary);
904
904
  cursor: pointer;
905
905
  }
906
906
  .sa-marketing-locale-pill.active .sa-marketing-locale-pill-btn {
907
- color: var(--sa-primary-strong);
907
+ color: var(--sa-color-accent-strong);
908
908
  }
909
909
  .sa-marketing-locale-x {
910
910
  border: 0;
911
911
  background: transparent;
912
912
  padding: 4px 7px;
913
- color: var(--sa-muted-light);
913
+ color: var(--sa-color-fg-subtle);
914
914
  cursor: pointer;
915
- font-size: 13px;
915
+ font-size: var(--sa-text-md);
916
916
  }
917
917
  .sa-marketing-locale-x:hover {
918
- color: #dc2626;
918
+ color: var(--sa-color-negative);
919
919
  }
920
920
  .sa-marketing-locale-add-wrap {
921
921
  position: relative;
922
922
  }
923
923
  .sa-marketing-locale-add {
924
- border: 1px dashed var(--sa-border);
924
+ border: 1px dashed var(--sa-color-border);
925
925
  background: transparent;
926
926
  border-radius: 7px;
927
927
  padding: 4px 9px;
928
- font-size: 11px;
929
- color: var(--sa-muted-dark);
928
+ font-size: var(--sa-text-xs);
929
+ color: var(--sa-color-fg-secondary);
930
930
  cursor: pointer;
931
931
  }
932
932
  .sa-marketing-locale-add:disabled {
@@ -938,10 +938,10 @@ async function onLocaleChange(loc: string): Promise<void> {
938
938
  top: 100%;
939
939
  right: 0;
940
940
  margin-top: 4px;
941
- background: var(--sa-bg-surface);
942
- border: 1px solid var(--sa-border);
941
+ background: var(--sa-color-bg-surface);
942
+ border: 1px solid var(--sa-color-border);
943
943
  border-radius: 8px;
944
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
944
+ box-shadow: 0 8px 24px var(--sa-shadow-tint-3);
945
945
  padding: 4px;
946
946
  display: flex;
947
947
  flex-direction: column;
@@ -955,46 +955,46 @@ async function onLocaleChange(loc: string): Promise<void> {
955
955
  padding: 6px 10px;
956
956
  text-align: left;
957
957
  border-radius: 6px;
958
- font: 600 11px var(--sa-font-mono);
958
+ font: 600 var(--sa-text-xs) var(--sa-font-mono);
959
959
  cursor: pointer;
960
960
  }
961
961
  .sa-marketing-locale-picker-row:hover {
962
- background: var(--sa-primary-50);
962
+ background: var(--sa-color-accent-surface-strong);
963
963
  }
964
964
 
965
965
  .sa-marketing-banner {
966
966
  border-radius: 8px;
967
967
  padding: 10px 14px;
968
- font-size: 12.5px;
968
+ font-size: var(--sa-text-md);
969
969
  margin-bottom: 14px;
970
970
  display: flex;
971
971
  align-items: center;
972
972
  gap: 8px;
973
973
  }
974
974
  .sa-marketing-banner--error {
975
- background: #fef2f2;
976
- color: #b91c1c;
977
- border: 1px solid #fca5a5;
975
+ background: var(--sa-color-negative-surface);
976
+ color: var(--sa-color-negative-fg);
977
+ border: 1px solid var(--sa-color-negative-border);
978
978
  }
979
979
  .sa-marketing-banner--info {
980
- background: var(--sa-primary-50);
981
- color: #1e40af;
982
- border: 1px solid #bfdbfe;
980
+ background: var(--sa-color-accent-surface-strong);
981
+ color: var(--sa-color-info-fg);
982
+ border: 1px solid var(--sa-color-info-border);
983
983
  }
984
984
  .sa-marketing-banner-x {
985
985
  margin-left: auto;
986
986
  background: transparent;
987
987
  border: 0;
988
988
  cursor: pointer;
989
- font-size: 18px;
989
+ font-size: var(--sa-text-xl);
990
990
  line-height: 1;
991
991
  color: inherit;
992
992
  }
993
993
  .sa-marketing-loading {
994
994
  padding: 40px;
995
995
  text-align: center;
996
- color: var(--sa-muted-light);
997
- font-size: 13px;
996
+ color: var(--sa-color-fg-subtle);
997
+ font-size: var(--sa-text-md);
998
998
  }
999
999
 
1000
1000
  .sa-marketing-toolbar {
@@ -1006,16 +1006,16 @@ async function onLocaleChange(loc: string): Promise<void> {
1006
1006
  .sa-marketing-tabbar {
1007
1007
  display: inline-flex;
1008
1008
  gap: 2px;
1009
- background: var(--sa-bg-surface);
1010
- border: 1px solid var(--sa-border);
1009
+ background: var(--sa-color-bg-surface);
1010
+ border: 1px solid var(--sa-color-border);
1011
1011
  border-radius: 8px;
1012
1012
  padding: 3px;
1013
1013
  }
1014
1014
  .sa-marketing-tab {
1015
1015
  padding: 6px 14px;
1016
1016
  border-radius: 6px;
1017
- font: 500 13px var(--sa-font-body);
1018
- color: var(--sa-muted-dark);
1017
+ font: 500 var(--sa-text-md) var(--sa-font-body);
1018
+ color: var(--sa-color-fg-secondary);
1019
1019
  background: transparent;
1020
1020
  border: 0;
1021
1021
  cursor: pointer;
@@ -1024,50 +1024,50 @@ async function onLocaleChange(loc: string): Promise<void> {
1024
1024
  color 0.12s;
1025
1025
  }
1026
1026
  .sa-marketing-tab:hover {
1027
- color: var(--sa-heading);
1027
+ color: var(--sa-color-fg-heading);
1028
1028
  }
1029
1029
  .sa-marketing-tab.active {
1030
- background: var(--sa-primary-50);
1031
- color: var(--sa-primary-strong);
1030
+ background: var(--sa-color-accent-surface-strong);
1031
+ color: var(--sa-color-accent-strong);
1032
1032
  font-weight: 600;
1033
1033
  }
1034
1034
  .sa-marketing-tab-count {
1035
1035
  display: inline-block;
1036
1036
  margin-left: 5px;
1037
- background: #10b981;
1038
- color: #fff;
1039
- font-size: 10px;
1037
+ background: var(--sa-color-positive-surface-strong);
1038
+ color: var(--sa-color-positive-fg);
1039
+ font-size: var(--sa-text-2xs);
1040
1040
  font-weight: 700;
1041
1041
  padding: 1px 6px;
1042
1042
  border-radius: 999px;
1043
1043
  }
1044
1044
  .sa-marketing-meta {
1045
1045
  margin-left: auto;
1046
- font-size: 12px;
1047
- color: var(--sa-muted-dark);
1046
+ font-size: var(--sa-text-sm);
1047
+ color: var(--sa-color-fg-secondary);
1048
1048
  display: flex;
1049
1049
  align-items: center;
1050
1050
  gap: 8px;
1051
1051
  }
1052
1052
  .sa-marketing-meta code {
1053
- font: 500 11px var(--sa-font-mono);
1054
- background: var(--sa-border-soft);
1055
- color: var(--sa-muted-dark);
1053
+ font: 500 var(--sa-text-xs) var(--sa-font-mono);
1054
+ background: var(--sa-color-border-soft);
1055
+ color: var(--sa-color-fg-secondary);
1056
1056
  padding: 2px 7px;
1057
1057
  border-radius: 4px;
1058
1058
  }
1059
1059
 
1060
1060
  /* ── Public catalog preview ── */
1061
1061
  .sa-marketing-window {
1062
- background: var(--sa-bg-surface);
1063
- border: 1px solid var(--sa-border);
1062
+ background: var(--sa-color-bg-surface);
1063
+ border: 1px solid var(--sa-color-border);
1064
1064
  border-radius: 12px;
1065
1065
  overflow: hidden;
1066
1066
  }
1067
1067
  .sa-marketing-chrome {
1068
1068
  height: 36px;
1069
- background: var(--sa-border-soft);
1070
- border-bottom: 1px solid var(--sa-border);
1069
+ background: var(--sa-color-border-soft);
1070
+ border-bottom: 1px solid var(--sa-color-border);
1071
1071
  display: flex;
1072
1072
  align-items: center;
1073
1073
  padding: 0 14px;
@@ -1081,36 +1081,40 @@ async function onLocaleChange(loc: string): Promise<void> {
1081
1081
  .sa-marketing-chrome-url {
1082
1082
  margin-left: 18px;
1083
1083
  flex: 1;
1084
- background: var(--sa-bg-surface);
1085
- border: 1px solid var(--sa-border);
1084
+ background: var(--sa-color-bg-surface);
1085
+ border: 1px solid var(--sa-color-border);
1086
1086
  border-radius: 6px;
1087
1087
  padding: 4px 10px;
1088
- font: 500 11.5px var(--sa-font-mono);
1089
- color: var(--sa-muted-dark);
1088
+ font: 500 var(--sa-text-sm) var(--sa-font-mono);
1089
+ color: var(--sa-color-fg-secondary);
1090
1090
  max-width: 380px;
1091
1091
  }
1092
1092
  .sa-marketing-canvas {
1093
- background: linear-gradient(180deg, #fbfbfd 0%, #fff 100%);
1093
+ background: linear-gradient(
1094
+ 180deg,
1095
+ var(--sa-color-bg-surface-raised) 0%,
1096
+ var(--sa-color-bg-surface) 100%
1097
+ );
1094
1098
  padding: 36px 32px 28px;
1095
1099
  }
1096
1100
  .sa-marketing-eyebrow {
1097
- font: 700 11px var(--sa-font-body);
1101
+ font: 700 var(--sa-text-xs) var(--sa-font-body);
1098
1102
  letter-spacing: 0.14em;
1099
1103
  text-transform: uppercase;
1100
- color: var(--sa-primary);
1104
+ color: var(--sa-color-accent);
1101
1105
  text-align: center;
1102
1106
  }
1103
1107
  .sa-marketing-hero {
1104
- font-size: 32px;
1108
+ font-size: var(--sa-text-4xl);
1105
1109
  font-weight: 700;
1106
1110
  letter-spacing: -0.025em;
1107
- color: var(--sa-heading);
1111
+ color: var(--sa-color-fg-heading);
1108
1112
  text-align: center;
1109
1113
  margin: 10px 0 6px;
1110
1114
  }
1111
1115
  .sa-marketing-sub {
1112
- font-size: 14px;
1113
- color: var(--sa-muted-dark);
1116
+ font-size: var(--sa-text-lg);
1117
+ color: var(--sa-color-fg-secondary);
1114
1118
  text-align: center;
1115
1119
  max-width: 540px;
1116
1120
  margin: 0 auto 26px;
@@ -1121,8 +1125,8 @@ async function onLocaleChange(loc: string): Promise<void> {
1121
1125
  gap: 16px;
1122
1126
  }
1123
1127
  .sa-marketing-card {
1124
- background: var(--sa-bg-surface);
1125
- border: 1px solid var(--sa-border);
1128
+ background: var(--sa-color-bg-surface);
1129
+ border: 1px solid var(--sa-color-border);
1126
1130
  border-radius: 12px;
1127
1131
  padding: 22px 20px 20px;
1128
1132
  display: flex;
@@ -1135,20 +1139,20 @@ async function onLocaleChange(loc: string): Promise<void> {
1135
1139
  }
1136
1140
  .sa-marketing-card:hover {
1137
1141
  transform: translateY(-2px);
1138
- box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06);
1142
+ box-shadow: 0 8px 24px var(--sa-shadow-tint-1);
1139
1143
  }
1140
1144
  .sa-marketing-card.featured {
1141
- border-color: #bfdbfe;
1142
- box-shadow: 0 10px 32px rgba(37, 99, 235, 0.1);
1145
+ border-color: var(--sa-color-info-border);
1146
+ box-shadow: 0 10px 32px var(--sa-shadow-tint-2);
1143
1147
  }
1144
1148
  .sa-marketing-card-badge {
1145
1149
  position: absolute;
1146
1150
  top: -10px;
1147
1151
  left: 50%;
1148
1152
  transform: translateX(-50%);
1149
- background: var(--sa-primary);
1150
- color: #fff;
1151
- font: 700 10.5px var(--sa-font-body);
1153
+ background: var(--sa-color-accent);
1154
+ color: var(--sa-color-fg-on-accent);
1155
+ font: 700 var(--sa-text-xs) var(--sa-font-body);
1152
1156
  letter-spacing: 0.1em;
1153
1157
  text-transform: uppercase;
1154
1158
  padding: 4px 12px;
@@ -1156,21 +1160,21 @@ async function onLocaleChange(loc: string): Promise<void> {
1156
1160
  white-space: nowrap;
1157
1161
  }
1158
1162
  .sa-marketing-card-key {
1159
- font: 700 10.5px var(--sa-font-mono);
1163
+ font: 700 var(--sa-text-xs) var(--sa-font-mono);
1160
1164
  letter-spacing: 0.08em;
1161
- color: var(--sa-muted-light);
1165
+ color: var(--sa-color-fg-subtle);
1162
1166
  text-transform: uppercase;
1163
1167
  }
1164
1168
  .sa-marketing-card-name {
1165
- font-size: 22px;
1169
+ font-size: var(--sa-text-2xl);
1166
1170
  font-weight: 700;
1167
1171
  letter-spacing: -0.02em;
1168
- color: var(--sa-heading);
1172
+ color: var(--sa-color-fg-heading);
1169
1173
  margin: 2px 0 4px;
1170
1174
  }
1171
1175
  .sa-marketing-card-desc {
1172
- font-size: 12.5px;
1173
- color: var(--sa-muted-dark);
1176
+ font-size: var(--sa-text-md);
1177
+ color: var(--sa-color-fg-secondary);
1174
1178
  line-height: 1.4;
1175
1179
  min-height: 36px;
1176
1180
  }
@@ -1181,18 +1185,18 @@ async function onLocaleChange(loc: string): Promise<void> {
1181
1185
  gap: 6px;
1182
1186
  }
1183
1187
  .sa-marketing-card-price-big {
1184
- font-size: 32px;
1188
+ font-size: var(--sa-text-4xl);
1185
1189
  font-weight: 700;
1186
1190
  letter-spacing: -0.03em;
1187
- color: var(--sa-heading);
1191
+ color: var(--sa-color-fg-heading);
1188
1192
  }
1189
1193
  .sa-marketing-card-price-unit {
1190
- font-size: 13px;
1191
- color: var(--sa-muted-light);
1194
+ font-size: var(--sa-text-md);
1195
+ color: var(--sa-color-fg-subtle);
1192
1196
  }
1193
1197
  .sa-marketing-card-price-y {
1194
- font-size: 11.5px;
1195
- color: var(--sa-muted-light);
1198
+ font-size: var(--sa-text-sm);
1199
+ color: var(--sa-color-fg-subtle);
1196
1200
  margin-bottom: 12px;
1197
1201
  }
1198
1202
  .sa-marketing-card-cta {
@@ -1200,41 +1204,41 @@ async function onLocaleChange(loc: string): Promise<void> {
1200
1204
  margin-top: 14px;
1201
1205
  padding: 9px 12px;
1202
1206
  border-radius: 8px;
1203
- border: 1px solid var(--sa-border);
1204
- background: var(--sa-bg-surface);
1205
- color: var(--sa-heading);
1206
- font: 600 13px var(--sa-font-body);
1207
+ border: 1px solid var(--sa-color-border);
1208
+ background: var(--sa-color-bg-surface);
1209
+ color: var(--sa-color-fg-heading);
1210
+ font: 600 var(--sa-text-md) var(--sa-font-body);
1207
1211
  cursor: pointer;
1208
1212
  transition:
1209
1213
  background 0.12s,
1210
1214
  border-color 0.12s;
1211
1215
  }
1212
1216
  .sa-marketing-card-cta:hover {
1213
- background: var(--sa-bg-surface-2);
1217
+ background: var(--sa-color-bg-sunken);
1214
1218
  }
1215
1219
  .sa-marketing-card.featured .sa-marketing-card-cta {
1216
- background: var(--sa-primary);
1217
- border-color: var(--sa-primary);
1218
- color: #fff;
1220
+ background: var(--sa-color-accent);
1221
+ border-color: var(--sa-color-accent);
1222
+ color: var(--sa-color-fg-on-accent);
1219
1223
  }
1220
1224
  .sa-marketing-card.featured .sa-marketing-card-cta:hover {
1221
- background: var(--sa-primary-strong);
1225
+ background: var(--sa-color-accent-strong);
1222
1226
  }
1223
1227
  .sa-marketing-card-trialnote {
1224
- font-size: 11px;
1225
- color: var(--sa-muted-light);
1228
+ font-size: var(--sa-text-xs);
1229
+ color: var(--sa-color-fg-subtle);
1226
1230
  text-align: center;
1227
1231
  margin-top: 6px;
1228
1232
  }
1229
1233
  .sa-marketing-card.has-promo {
1230
- border-color: #10b981;
1234
+ border-color: var(--sa-color-positive-strong);
1231
1235
  }
1232
1236
  .sa-marketing-promo-ribbon {
1233
1237
  position: absolute;
1234
1238
  top: 12px;
1235
1239
  right: -2px;
1236
- color: #fff;
1237
- font-size: 11px;
1240
+ color: var(--sa-color-fg-on-accent);
1241
+ font-size: var(--sa-text-xs);
1238
1242
  font-weight: 700;
1239
1243
  padding: 3px 12px 3px 10px;
1240
1244
  border-radius: 4px 0 0 4px;
@@ -1246,27 +1250,27 @@ async function onLocaleChange(loc: string): Promise<void> {
1246
1250
  margin-top: 2px;
1247
1251
  }
1248
1252
  .sa-marketing-card-price-strike s {
1249
- color: var(--sa-muted-light);
1250
- font-size: 14px;
1253
+ color: var(--sa-color-fg-subtle);
1254
+ font-size: var(--sa-text-lg);
1251
1255
  }
1252
1256
  .sa-marketing-price-regular {
1253
- font-size: 10px;
1257
+ font-size: var(--sa-text-2xs);
1254
1258
  text-transform: uppercase;
1255
1259
  letter-spacing: 0.5px;
1256
- color: var(--sa-muted-light);
1260
+ color: var(--sa-color-fg-subtle);
1257
1261
  }
1258
1262
  .sa-marketing-card-fineprint {
1259
- font-size: 10px;
1260
- color: #059669;
1263
+ font-size: var(--sa-text-2xs);
1264
+ color: var(--sa-color-positive);
1261
1265
  text-align: center;
1262
1266
  margin-top: 6px;
1263
1267
  }
1264
1268
  .sa-marketing-card-includes {
1265
1269
  margin-top: 18px;
1266
- font-size: 11px;
1270
+ font-size: var(--sa-text-xs);
1267
1271
  text-transform: uppercase;
1268
1272
  letter-spacing: 0.08em;
1269
- color: var(--sa-muted-light);
1273
+ color: var(--sa-color-fg-subtle);
1270
1274
  font-weight: 700;
1271
1275
  }
1272
1276
  .sa-marketing-card-features {
@@ -1276,8 +1280,8 @@ async function onLocaleChange(loc: string): Promise<void> {
1276
1280
  display: flex;
1277
1281
  flex-direction: column;
1278
1282
  gap: 7px;
1279
- font-size: 12.5px;
1280
- color: #334155;
1283
+ font-size: var(--sa-text-md);
1284
+ color: var(--sa-color-fg-body);
1281
1285
  }
1282
1286
  .sa-marketing-card-features li {
1283
1287
  display: flex;
@@ -1286,42 +1290,42 @@ async function onLocaleChange(loc: string): Promise<void> {
1286
1290
  line-height: 1.35;
1287
1291
  }
1288
1292
  .sa-marketing-card-features .sa-marketing-tick {
1289
- color: #10b981;
1293
+ color: var(--sa-color-positive-strong);
1290
1294
  flex: 0 0 14px;
1291
1295
  margin-top: 1px;
1292
1296
  }
1293
1297
  .sa-marketing-card-features b {
1294
- color: var(--sa-heading);
1298
+ color: var(--sa-color-fg-heading);
1295
1299
  font-weight: 700;
1296
1300
  }
1297
1301
  .sa-marketing-card-features-empty {
1298
1302
  margin-top: 8px;
1299
- font-size: 12px;
1300
- color: var(--sa-muted-light);
1303
+ font-size: var(--sa-text-sm);
1304
+ color: var(--sa-color-fg-subtle);
1301
1305
  }
1302
1306
 
1303
1307
  /* ── Marketing administration ── */
1304
1308
  .sa-marketing-admin {
1305
- background: var(--sa-bg-surface);
1306
- border: 1px solid var(--sa-border);
1309
+ background: var(--sa-color-bg-surface);
1310
+ border: 1px solid var(--sa-color-border);
1307
1311
  border-radius: 10px;
1308
1312
  }
1309
1313
  .sa-marketing-admin-head {
1310
1314
  padding: 14px 16px;
1311
- border-bottom: 1px solid var(--sa-border-soft);
1315
+ border-bottom: 1px solid var(--sa-color-border-soft);
1312
1316
  display: flex;
1313
1317
  align-items: center;
1314
1318
  gap: 12px;
1315
1319
  }
1316
1320
  .sa-marketing-admin-title {
1317
- font-size: 14px;
1321
+ font-size: var(--sa-text-lg);
1318
1322
  font-weight: 700;
1319
1323
  letter-spacing: -0.01em;
1320
- color: var(--sa-heading);
1324
+ color: var(--sa-color-fg-heading);
1321
1325
  }
1322
1326
  .sa-marketing-admin-sub {
1323
- font-size: 11.5px;
1324
- color: var(--sa-muted-dark);
1327
+ font-size: var(--sa-text-sm);
1328
+ color: var(--sa-color-fg-secondary);
1325
1329
  }
1326
1330
  .sa-marketing-admin-grid {
1327
1331
  display: grid;
@@ -1332,28 +1336,28 @@ async function onLocaleChange(loc: string): Promise<void> {
1332
1336
  display: contents;
1333
1337
  }
1334
1338
  .sa-marketing-admin-thead > div {
1335
- background: #fbfbfd;
1339
+ background: var(--sa-color-bg-surface-raised);
1336
1340
  padding: 10px 14px;
1337
- font-size: 10.5px;
1341
+ font-size: var(--sa-text-xs);
1338
1342
  text-transform: uppercase;
1339
1343
  letter-spacing: 0.1em;
1340
- color: var(--sa-muted-dark);
1344
+ color: var(--sa-color-fg-secondary);
1341
1345
  font-weight: 700;
1342
- border-bottom: 1px solid var(--sa-border);
1346
+ border-bottom: 1px solid var(--sa-color-border);
1343
1347
  }
1344
1348
  .sa-marketing-admin-row {
1345
1349
  display: contents;
1346
1350
  }
1347
1351
  .sa-marketing-admin-row > div {
1348
1352
  padding: 12px 14px;
1349
- border-bottom: 1px solid var(--sa-border-soft);
1353
+ border-bottom: 1px solid var(--sa-color-border-soft);
1350
1354
  display: flex;
1351
1355
  align-items: center;
1352
- font-size: 12.5px;
1353
- color: var(--sa-heading);
1356
+ font-size: var(--sa-text-md);
1357
+ color: var(--sa-color-fg-heading);
1354
1358
  }
1355
1359
  .sa-marketing-admin-row--disabled > div {
1356
- background: #fcfcfd;
1360
+ background: var(--sa-color-bg-surface-raised);
1357
1361
  }
1358
1362
  .sa-marketing-admin-row-end {
1359
1363
  justify-content: flex-end;
@@ -1370,41 +1374,41 @@ async function onLocaleChange(loc: string): Promise<void> {
1370
1374
  border-radius: 8px;
1371
1375
  display: grid;
1372
1376
  place-items: center;
1373
- font: 700 10px var(--sa-font-mono);
1377
+ font: 700 var(--sa-text-2xs) var(--sa-font-mono);
1374
1378
  border: 1px solid;
1375
1379
  }
1376
1380
  .sa-marketing-plan-label {
1377
- font-size: 13px;
1381
+ font-size: var(--sa-text-md);
1378
1382
  font-weight: 700;
1379
- color: var(--sa-heading);
1383
+ color: var(--sa-color-fg-heading);
1380
1384
  }
1381
1385
  .sa-marketing-plan-key {
1382
- font: 500 11px var(--sa-font-mono);
1383
- color: var(--sa-muted-light);
1386
+ font: 500 var(--sa-text-xs) var(--sa-font-mono);
1387
+ color: var(--sa-color-fg-subtle);
1384
1388
  }
1385
1389
 
1386
1390
  .sa-marketing-field {
1387
1391
  width: 100%;
1388
1392
  padding: 5px 8px;
1389
- font: 400 12px var(--sa-font-body);
1390
- color: var(--sa-heading);
1391
- background: var(--sa-bg-surface);
1392
- border: 1px solid var(--sa-border-strong);
1393
+ font: 400 var(--sa-text-sm) var(--sa-font-body);
1394
+ color: var(--sa-color-fg-heading);
1395
+ background: var(--sa-color-bg-surface);
1396
+ border: 1px solid var(--sa-color-border-strong);
1393
1397
  border-radius: 6px;
1394
1398
  }
1395
1399
  .sa-marketing-field:focus {
1396
1400
  outline: none;
1397
- border-color: var(--sa-primary);
1398
- box-shadow: 0 0 0 3px var(--sa-primary-50);
1401
+ border-color: var(--sa-color-accent);
1402
+ box-shadow: 0 0 0 3px var(--sa-color-accent-surface-strong);
1399
1403
  }
1400
1404
  .sa-marketing-field:disabled {
1401
- background: var(--sa-border-soft);
1402
- color: var(--sa-muted-light);
1405
+ background: var(--sa-color-border-soft);
1406
+ color: var(--sa-color-fg-subtle);
1403
1407
  cursor: not-allowed;
1404
1408
  }
1405
1409
  .sa-marketing-field--area {
1406
1410
  resize: vertical;
1407
- font-size: 12.5px;
1411
+ font-size: var(--sa-text-md);
1408
1412
  line-height: 1.4;
1409
1413
  }
1410
1414
 
@@ -1420,7 +1424,7 @@ async function onLocaleChange(loc: string): Promise<void> {
1420
1424
  .sa-marketing-toggle span {
1421
1425
  position: absolute;
1422
1426
  inset: 0;
1423
- background: #cbd5e1;
1427
+ background: var(--sa-color-border-strong);
1424
1428
  border-radius: 999px;
1425
1429
  transition: background 0.15s;
1426
1430
  cursor: pointer;
@@ -1430,15 +1434,15 @@ async function onLocaleChange(loc: string): Promise<void> {
1430
1434
  position: absolute;
1431
1435
  width: 16px;
1432
1436
  height: 16px;
1433
- background: #fff;
1437
+ background: var(--sa-color-bg-surface);
1434
1438
  border-radius: 50%;
1435
1439
  left: 2px;
1436
1440
  top: 2px;
1437
1441
  transition: transform 0.15s;
1438
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
1442
+ box-shadow: 0 1px 2px var(--sa-shadow-tint-4);
1439
1443
  }
1440
1444
  .sa-marketing-toggle input:checked + span {
1441
- background: var(--sa-primary);
1445
+ background: var(--sa-color-accent);
1442
1446
  }
1443
1447
  .sa-marketing-toggle input:checked + span::before {
1444
1448
  transform: translateX(16px);
@@ -1454,24 +1458,24 @@ async function onLocaleChange(loc: string): Promise<void> {
1454
1458
  gap: 5px;
1455
1459
  padding: 2px 8px;
1456
1460
  border-radius: 999px;
1457
- font-size: 11px;
1461
+ font-size: var(--sa-text-xs);
1458
1462
  font-weight: 600;
1459
1463
  border: 1px solid;
1460
1464
  }
1461
1465
  .sa-marketing-chip--muted {
1462
- background: var(--sa-border-soft);
1463
- color: var(--sa-muted-dark);
1464
- border-color: #cbd5e1;
1466
+ background: var(--sa-color-border-soft);
1467
+ color: var(--sa-color-fg-secondary);
1468
+ border-color: var(--sa-color-border-strong);
1465
1469
  }
1466
1470
  .sa-marketing-chip--featured {
1467
- background: var(--sa-primary-50);
1468
- color: var(--sa-primary-strong);
1469
- border-color: #bfdbfe;
1471
+ background: var(--sa-color-accent-surface-strong);
1472
+ color: var(--sa-color-accent-strong);
1473
+ border-color: var(--sa-color-info-border);
1470
1474
  }
1471
1475
  .sa-marketing-chip--live {
1472
- background: var(--sa-positive-bg);
1473
- color: #047857;
1474
- border-color: #a7f3d0;
1476
+ background: var(--sa-color-positive-surface);
1477
+ color: var(--sa-color-positive-fg);
1478
+ border-color: var(--sa-color-positive-border);
1475
1479
  }
1476
1480
  .sa-marketing-chip--live::before {
1477
1481
  content: '';
@@ -1490,16 +1494,16 @@ async function onLocaleChange(loc: string): Promise<void> {
1490
1494
  border: 1px solid transparent;
1491
1495
  border-radius: 6px;
1492
1496
  cursor: pointer;
1493
- color: var(--sa-muted-light);
1497
+ color: var(--sa-color-fg-subtle);
1494
1498
  transition:
1495
1499
  background 0.12s,
1496
1500
  color 0.12s,
1497
1501
  border-color 0.12s;
1498
1502
  }
1499
1503
  .sa-marketing-expand-btn:hover {
1500
- background: var(--sa-border-soft);
1501
- color: var(--sa-primary);
1502
- border-color: var(--sa-border);
1504
+ background: var(--sa-color-border-soft);
1505
+ color: var(--sa-color-accent);
1506
+ border-color: var(--sa-color-border);
1503
1507
  }
1504
1508
  .sa-marketing-chev {
1505
1509
  display: inline-flex;
@@ -1511,8 +1515,12 @@ async function onLocaleChange(loc: string): Promise<void> {
1511
1515
 
1512
1516
  .sa-marketing-admin-expand {
1513
1517
  grid-column: 1 / -1;
1514
- background: linear-gradient(180deg, #fbfbfd 0%, #fff 100%);
1515
- border-bottom: 1px solid var(--sa-border-soft);
1518
+ background: linear-gradient(
1519
+ 180deg,
1520
+ var(--sa-color-bg-surface-raised) 0%,
1521
+ var(--sa-color-bg-surface) 100%
1522
+ );
1523
+ border-bottom: 1px solid var(--sa-color-border-soft);
1516
1524
  padding: 18px 20px 22px;
1517
1525
  }
1518
1526
  .sa-marketing-expand-grid {
@@ -1531,15 +1539,15 @@ async function onLocaleChange(loc: string): Promise<void> {
1531
1539
  gap: 6px;
1532
1540
  }
1533
1541
  .sa-marketing-expand-label {
1534
- font-size: 10.5px;
1542
+ font-size: var(--sa-text-xs);
1535
1543
  text-transform: uppercase;
1536
1544
  letter-spacing: 0.1em;
1537
- color: var(--sa-muted-dark);
1545
+ color: var(--sa-color-fg-secondary);
1538
1546
  font-weight: 700;
1539
1547
  }
1540
1548
  .sa-marketing-expand-hint {
1541
- font-size: 11px;
1542
- color: var(--sa-muted-light);
1549
+ font-size: var(--sa-text-xs);
1550
+ color: var(--sa-color-fg-subtle);
1543
1551
  }
1544
1552
  .sa-marketing-field-head {
1545
1553
  display: flex;
@@ -1548,11 +1556,11 @@ async function onLocaleChange(loc: string): Promise<void> {
1548
1556
  flex-wrap: wrap;
1549
1557
  }
1550
1558
  .sa-marketing-source-hint {
1551
- font-size: 11px;
1552
- color: var(--sa-muted-light);
1559
+ font-size: var(--sa-text-xs);
1560
+ color: var(--sa-color-fg-subtle);
1553
1561
  }
1554
1562
  .sa-marketing-source-hint em {
1555
- color: var(--sa-muted-dark);
1563
+ color: var(--sa-color-fg-secondary);
1556
1564
  font-style: normal;
1557
1565
  }
1558
1566
  .sa-marketing-locked-value {
@@ -1560,17 +1568,17 @@ async function onLocaleChange(loc: string): Promise<void> {
1560
1568
  align-items: center;
1561
1569
  gap: 8px;
1562
1570
  padding: 8px 10px;
1563
- background: var(--sa-bg-surface);
1564
- border: 1px solid var(--sa-border);
1571
+ background: var(--sa-color-bg-surface);
1572
+ border: 1px solid var(--sa-color-border);
1565
1573
  border-radius: 6px;
1566
- font-size: 13px;
1567
- color: var(--sa-heading);
1574
+ font-size: var(--sa-text-md);
1575
+ color: var(--sa-color-fg-heading);
1568
1576
  }
1569
1577
  .sa-marketing-locked-hint {
1570
- font-size: 10px;
1578
+ font-size: var(--sa-text-2xs);
1571
1579
  text-transform: uppercase;
1572
- color: var(--sa-muted-light);
1573
- background: rgba(148, 163, 184, 0.15);
1580
+ color: var(--sa-color-fg-subtle);
1581
+ background: var(--sa-color-bg-sunken);
1574
1582
  padding: 1px 6px;
1575
1583
  border-radius: 4px;
1576
1584
  margin-left: auto;
@@ -1579,14 +1587,14 @@ async function onLocaleChange(loc: string): Promise<void> {
1579
1587
  display: flex;
1580
1588
  align-items: center;
1581
1589
  gap: 10px;
1582
- background: var(--sa-bg-surface);
1583
- border: 1px solid var(--sa-border);
1590
+ background: var(--sa-color-bg-surface);
1591
+ border: 1px solid var(--sa-color-border);
1584
1592
  border-radius: 8px;
1585
1593
  padding: 8px 12px;
1586
1594
  }
1587
1595
  .sa-marketing-trial-label {
1588
- font-size: 13px;
1589
- color: var(--sa-heading);
1596
+ font-size: var(--sa-text-md);
1597
+ color: var(--sa-color-fg-heading);
1590
1598
  }
1591
1599
  .sa-marketing-trial-days {
1592
1600
  margin-left: auto;
@@ -1595,8 +1603,8 @@ async function onLocaleChange(loc: string): Promise<void> {
1595
1603
  gap: 6px;
1596
1604
  }
1597
1605
  .sa-marketing-trial-unit {
1598
- font-size: 12px;
1599
- color: var(--sa-muted-dark);
1606
+ font-size: var(--sa-text-sm);
1607
+ color: var(--sa-color-fg-secondary);
1600
1608
  }
1601
1609
 
1602
1610
  .sa-marketing-tf-head {
@@ -1615,8 +1623,8 @@ async function onLocaleChange(loc: string): Promise<void> {
1615
1623
  align-items: center;
1616
1624
  }
1617
1625
  .sa-marketing-tf-num {
1618
- font: 600 11px var(--sa-font-mono);
1619
- color: var(--sa-muted-light);
1626
+ font: 600 var(--sa-text-xs) var(--sa-font-mono);
1627
+ color: var(--sa-color-fg-subtle);
1620
1628
  text-align: center;
1621
1629
  }
1622
1630
  .sa-marketing-tf-actions {
@@ -1628,39 +1636,39 @@ async function onLocaleChange(loc: string): Promise<void> {
1628
1636
  height: 24px;
1629
1637
  display: grid;
1630
1638
  place-items: center;
1631
- background: var(--sa-bg-surface);
1632
- border: 1px solid var(--sa-border);
1639
+ background: var(--sa-color-bg-surface);
1640
+ border: 1px solid var(--sa-color-border);
1633
1641
  border-radius: 5px;
1634
1642
  cursor: pointer;
1635
- font: 600 10px var(--sa-font-body);
1636
- color: var(--sa-muted-dark);
1643
+ font: 600 var(--sa-text-2xs) var(--sa-font-body);
1644
+ color: var(--sa-color-fg-secondary);
1637
1645
  padding: 0;
1638
1646
  transition:
1639
1647
  background 0.12s,
1640
1648
  border-color 0.12s;
1641
1649
  }
1642
1650
  .sa-marketing-iconbtn:hover:not(:disabled) {
1643
- background: var(--sa-border-soft);
1644
- border-color: #cbd5e1;
1651
+ background: var(--sa-color-border-soft);
1652
+ border-color: var(--sa-color-border-strong);
1645
1653
  }
1646
1654
  .sa-marketing-iconbtn:disabled {
1647
1655
  opacity: 0.35;
1648
1656
  cursor: not-allowed;
1649
1657
  }
1650
1658
  .sa-marketing-iconbtn--danger {
1651
- color: #b91c1c;
1659
+ color: var(--sa-color-negative-fg);
1652
1660
  }
1653
1661
  .sa-marketing-iconbtn--danger:hover:not(:disabled) {
1654
- background: #fef2f2;
1655
- border-color: #fca5a5;
1662
+ background: var(--sa-color-negative-surface);
1663
+ border-color: var(--sa-color-negative-border);
1656
1664
  }
1657
1665
  .sa-marketing-tf-empty {
1658
1666
  padding: 14px;
1659
1667
  text-align: center;
1660
- font-size: 12px;
1661
- color: var(--sa-muted-light);
1662
- background: var(--sa-bg-surface);
1663
- border: 1px dashed #cbd5e1;
1668
+ font-size: var(--sa-text-sm);
1669
+ color: var(--sa-color-fg-subtle);
1670
+ background: var(--sa-color-bg-surface);
1671
+ border: 1px dashed var(--sa-color-border-strong);
1664
1672
  border-radius: 8px;
1665
1673
  }
1666
1674
  .sa-marketing-tf-add {
@@ -1681,10 +1689,10 @@ async function onLocaleChange(loc: string): Promise<void> {
1681
1689
  gap: 5px;
1682
1690
  padding: 3px 9px;
1683
1691
  border-radius: 999px;
1684
- background: var(--sa-bg-surface);
1685
- border: 1px dashed #cbd5e1;
1686
- font-size: 11.5px;
1687
- color: var(--sa-muted-dark);
1692
+ background: var(--sa-color-bg-surface);
1693
+ border: 1px dashed var(--sa-color-border-strong);
1694
+ font-size: var(--sa-text-sm);
1695
+ color: var(--sa-color-fg-secondary);
1688
1696
  cursor: pointer;
1689
1697
  transition:
1690
1698
  background 0.12s,
@@ -1693,14 +1701,14 @@ async function onLocaleChange(loc: string): Promise<void> {
1693
1701
  }
1694
1702
  .sa-marketing-tf-chip em {
1695
1703
  font-style: normal;
1696
- color: var(--sa-muted-light);
1697
- font: 500 11px var(--sa-font-mono);
1704
+ color: var(--sa-color-fg-subtle);
1705
+ font: 500 var(--sa-text-xs) var(--sa-font-mono);
1698
1706
  }
1699
1707
  .sa-marketing-tf-chip:hover:not(:disabled) {
1700
- background: var(--sa-primary-50);
1701
- border-color: #93c5fd;
1708
+ background: var(--sa-color-accent-surface-strong);
1709
+ border-color: var(--sa-color-info-border);
1702
1710
  border-style: solid;
1703
- color: var(--sa-primary-strong);
1711
+ color: var(--sa-color-accent-strong);
1704
1712
  }
1705
1713
  .sa-marketing-tf-chip:disabled {
1706
1714
  opacity: 0.5;
@@ -1723,12 +1731,12 @@ async function onLocaleChange(loc: string): Promise<void> {
1723
1731
  margin-top: 6px;
1724
1732
  }
1725
1733
  .sa-marketing-version-tab {
1726
- border: 1px solid var(--sa-border);
1727
- background: #fff;
1734
+ border: 1px solid var(--sa-color-border);
1735
+ background: var(--sa-color-bg-surface);
1728
1736
  border-radius: 6px;
1729
1737
  padding: 2px 8px;
1730
- font: 600 10.5px var(--sa-font-mono, ui-monospace, monospace);
1731
- color: var(--sa-muted);
1738
+ font: 600 var(--sa-text-xs) var(--sa-font-mono, ui-monospace, monospace);
1739
+ color: var(--sa-color-fg-muted);
1732
1740
  cursor: pointer;
1733
1741
  letter-spacing: 0.02em;
1734
1742
  transition:
@@ -1737,13 +1745,13 @@ async function onLocaleChange(loc: string): Promise<void> {
1737
1745
  color 0.1s;
1738
1746
  }
1739
1747
  .sa-marketing-version-tab:hover {
1740
- border-color: #cbd5e1;
1741
- background: var(--sa-bg-surface-2);
1742
- color: var(--sa-muted-dark);
1748
+ border-color: var(--sa-color-border-strong);
1749
+ background: var(--sa-color-bg-sunken);
1750
+ color: var(--sa-color-fg-secondary);
1743
1751
  }
1744
1752
  .sa-marketing-version-tab--active {
1745
- border-color: var(--sa-primary-strong);
1746
- background: var(--sa-primary-50);
1747
- color: var(--sa-primary-strong);
1753
+ border-color: var(--sa-color-accent-strong);
1754
+ background: var(--sa-color-accent-surface-strong);
1755
+ color: var(--sa-color-accent-strong);
1748
1756
  }
1749
1757
  </style>