@saasicat/ui-vue 0.22.2 → 0.24.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.
- package/README.md +1 -1
- package/dist/{chunk-LY52T4N4.js → chunk-TQQMKWN6.js} +58 -1
- package/dist/{chunk-XMMFN2WJ.js → chunk-VYMTWCTT.js} +51 -1
- package/dist/client/index.cjs +57 -0
- package/dist/client/index.d.cts +58 -1
- package/dist/client/index.d.ts +58 -1
- package/dist/client/index.js +15 -1
- package/dist/index.cjs +321 -159
- package/dist/index.d.cts +67 -4
- package/dist/index.d.ts +67 -4
- package/dist/index.js +72 -2
- package/dist/quasar/index.cjs +116 -20
- package/dist/quasar/index.d.cts +48 -3
- package/dist/quasar/index.d.ts +48 -3
- package/dist/quasar/index.js +58 -3
- package/dist/{use-super-admin-i18n-CgTuNi8h.d.cts → use-sa-theme-B5t7oXph.d.cts} +51 -1
- package/dist/{use-super-admin-i18n-CHNdsSlm.d.ts → use-sa-theme-OUBlaqgl.d.ts} +51 -1
- package/package.json +5 -2
- package/src/client/identity-accents.ts +129 -0
- package/src/client/index.ts +1 -0
- package/src/components/BundleVersionPublishDialog.vue +17 -17
- package/src/components/KvBlock.vue +6 -6
- package/src/components/MarketingPromotionsTab.vue +84 -80
- package/src/components/MfaPromptDialog.vue +2 -2
- package/src/components/TenantActionConfirmDialog.vue +5 -5
- package/src/components/VersionDiffPreview.vue +18 -18
- package/src/components/bundle-editor/BundleCreatePanel.vue +52 -52
- package/src/components/bundle-editor/BundleFeaturesEditor.vue +20 -20
- package/src/components/bundle-editor/BundlePlanCompatPicker.vue +33 -33
- package/src/components/bundle-editor/BundleQuotasEditor.vue +26 -26
- package/src/components/bundle-editor/BundleStatusBanner.vue +21 -21
- package/src/components/bundle-editor/BundleVersionInlineEditor.vue +49 -49
- package/src/components/bundle-editor/BundleVersionStrip.vue +30 -30
- package/src/components/dialogs/PilotCreateDialog.vue +20 -20
- package/src/components/dialogs/PilotEditDialog.vue +6 -6
- package/src/components/dialogs/PromoCodeCreateDialog.vue +9 -9
- package/src/components/dialogs/PromoCodeDialogFields.vue +64 -63
- package/src/components/dialogs/PromoCodeEditDialog.vue +11 -11
- package/src/components/dialogs/pilot-dialog.css +48 -48
- package/src/components/plan/PlanCycleToggle.vue +9 -16
- package/src/components/plan/PlanGrid.vue +30 -34
- package/src/components/plan/PriceSummary.vue +35 -35
- package/src/components/plan/PromoCodeInput.vue +26 -26
- package/src/components/plan/PublicBundleGrid.vue +32 -28
- package/src/components/plan-create-dialog/PlanCreateDialog.vue +50 -50
- package/src/components/plan-detail/PlanDetail.vue +178 -157
- package/src/components/plan-detail/PlanTitleEdit.vue +11 -11
- package/src/components/plan-list/PlanList.vue +116 -100
- package/src/components/plan-matrix/PlanMatrix.vue +97 -114
- package/src/components/plan-review/PlanReview.vue +61 -57
- package/src/components/plan-version-editor/PlanVersionEditor.vue +246 -203
- package/src/components/wizard-stepper/WizardStepper.vue +17 -17
- package/src/index.ts +1 -0
- package/src/pages-standard/AdminLayout.vue +58 -37
- package/src/pages-standard/AdminManifestErrorPage.vue +6 -6
- package/src/pages-standard/AuditPage.vue +3 -3
- package/src/pages-standard/BundlesPage.vue +37 -37
- package/src/pages-standard/DashboardPage.vue +22 -19
- package/src/pages-standard/DiscoveryPage.vue +55 -49
- package/src/pages-standard/EmailHistoryPage.vue +53 -71
- package/src/pages-standard/MarketingCatalogPage.vue +245 -221
- package/src/pages-standard/PilotsPage.vue +7 -6
- package/src/pages-standard/PlatformEmailPage.vue +18 -18
- package/src/pages-standard/PromoCodeDetailPage.vue +3 -3
- package/src/pages-standard/PromoCodesPage.vue +10 -7
- package/src/pages-standard/SuperAdminLoginPage.vue +39 -25
- package/src/pages-standard/SuperAdminSetupWizard.vue +44 -33
- package/src/pages-standard/TenantDetailPage.vue +7 -7
- package/src/pages-standard/TenantsPage.vue +16 -50
- package/src/pages-standard/bundles-page/BundleAccordionList.vue +13 -13
- package/src/pages-standard/discovery-page/CatalogEntryTransPanel.vue +24 -24
- package/src/pages-standard/discovery-page/DiscoveryCapList.vue +22 -22
- package/src/pages-standard/discovery-page/DiscoveryFeatureCard.vue +39 -39
- package/src/pages-standard/discovery-page/DiscoveryQuotaCard.vue +26 -26
- package/src/pages-standard/discovery-page/DiscoveryStatusControl.vue +1 -1
- package/src/pages-standard/discovery-page/discovery-ui.ts +10 -7
- package/src/pages-standard/marketing-catalog/MarketingCatalogAdmin.vue +2 -5
- package/src/pages-standard/plan-versions/PlanDiffCard.vue +27 -20
- package/src/pages-standard/plan-versions/PlanVersionsDiff.vue +24 -16
- package/src/pages-standard/plan-versions/PlanVersionsTimeline.vue +45 -45
- package/src/pages-standard/plans-page/PlanBundleOverview.vue +21 -15
- package/src/pages-standard/plans-page/PlanPublishDialog.vue +4 -4
- package/src/pages-standard/plans-page/PlansPageToast.vue +6 -6
- package/src/pages-standard/sa-theme.css +9 -687
- package/src/pages-standard/tenants/StatusPill.vue +13 -13
- package/src/pages-standard/tenants/format.ts +11 -12
- package/src/pages-tenant/LimitsRow.vue +4 -4
- package/src/pages-tenant/MySubscriptionBundlesPage.vue +70 -61
- package/src/pages-tenant/OnboardingConfigurator.vue +25 -25
- package/src/pages-tenant/PackageSnapshotPanel.vue +10 -16
- package/src/pages-tenant/PendingVersionBanner.vue +12 -12
- package/src/pages-tenant/PlanChangeWizard.vue +22 -76
- package/src/pages-tenant/TenantPlanSection.vue +19 -69
- package/src/pages-tenant/UsageBar.vue +7 -7
- package/src/pages-tenant/default-i18n.ts +113 -0
- package/src/pages-tenant/tenant-plan-section/BundlePreviewDialog.vue +14 -14
- package/src/pages-tenant/tenant-plan-section/TenantBundleStore.vue +10 -10
- package/src/pages-tenant/tenant-plan-section/TenantFeatureMatrix.vue +2 -2
- package/src/quasar/create-super-admin-app.ts +96 -1
- package/src/quasar/dark-bridge.ts +66 -0
- package/src/quasar/index.ts +1 -0
- package/src/ui/theme/_breakpoints.scss +34 -0
- package/src/ui/theme/base.css +50 -0
- package/src/ui/theme/components/body.css +23 -0
- package/src/ui/theme/components/button.css +158 -0
- package/src/ui/theme/components/card.css +74 -0
- package/src/ui/theme/components/field.css +38 -0
- package/src/ui/theme/components/hero.css +46 -0
- package/src/ui/theme/components/paginator.css +63 -0
- package/src/ui/theme/components/section.css +67 -0
- package/src/ui/theme/components/statistics.css +189 -0
- package/src/ui/theme/components/table.css +60 -0
- package/src/ui/theme/index.css +42 -0
- package/src/ui/theme/tokens.legacy.css +147 -0
- package/src/ui/theme/tokens.primitive.css +112 -0
- package/src/ui/theme/tokens.scale.css +103 -0
- package/src/ui/theme/tokens.semantic.dark.css +185 -0
- package/src/ui/theme/tokens.semantic.light.css +242 -0
- package/src/vue/use-sa-theme.ts +154 -0
|
@@ -164,7 +164,9 @@ import type {
|
|
|
164
164
|
ResolvedMarketing,
|
|
165
165
|
} from './marketing-catalog/types.js';
|
|
166
166
|
|
|
167
|
-
|
|
167
|
+
import { IDENTITY_NEUTRAL, identityAccentAt } from '../client/identity-accents.js';
|
|
168
|
+
|
|
169
|
+
const DEFAULT_ACCENT = IDENTITY_NEUTRAL;
|
|
168
170
|
|
|
169
171
|
const props = defineProps<{
|
|
170
172
|
adminEndpoint: string;
|
|
@@ -650,7 +652,7 @@ function promoFineprintOf(row: MarketingRow): string {
|
|
|
650
652
|
return promo.i18n?.[activeLocale.value]?.fineprint || promo.i18n?.de?.fineprint || '';
|
|
651
653
|
}
|
|
652
654
|
function promoColorOf(row: MarketingRow): string {
|
|
653
|
-
return promoOf(row)?.color ??
|
|
655
|
+
return promoOf(row)?.color ?? identityAccentAt(0);
|
|
654
656
|
}
|
|
655
657
|
|
|
656
658
|
// ─── CTA ───
|
|
@@ -839,8 +841,8 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
839
841
|
<style>
|
|
840
842
|
.sa-marketing {
|
|
841
843
|
padding: 22px 26px;
|
|
842
|
-
background: var(--sa-bg-app);
|
|
843
|
-
color: var(--sa-heading);
|
|
844
|
+
background: var(--sa-color-bg-app);
|
|
845
|
+
color: var(--sa-color-fg-heading);
|
|
844
846
|
font-family: var(--sa-font-body);
|
|
845
847
|
min-height: 100%;
|
|
846
848
|
box-sizing: border-box;
|
|
@@ -855,8 +857,8 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
855
857
|
.sa-marketing-locale-switch {
|
|
856
858
|
display: inline-flex;
|
|
857
859
|
gap: 2px;
|
|
858
|
-
background: var(--sa-bg-surface);
|
|
859
|
-
border: 1px solid var(--sa-border);
|
|
860
|
+
background: var(--sa-color-bg-surface);
|
|
861
|
+
border: 1px solid var(--sa-color-border);
|
|
860
862
|
border-radius: 8px;
|
|
861
863
|
padding: 3px;
|
|
862
864
|
}
|
|
@@ -865,13 +867,13 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
865
867
|
border: 0;
|
|
866
868
|
background: transparent;
|
|
867
869
|
border-radius: 6px;
|
|
868
|
-
font: 500
|
|
869
|
-
color: var(--sa-
|
|
870
|
+
font: 500 var(--sa-text-sm) var(--sa-font-mono);
|
|
871
|
+
color: var(--sa-color-fg-secondary);
|
|
870
872
|
cursor: pointer;
|
|
871
873
|
}
|
|
872
874
|
.sa-marketing-locale-btn.active {
|
|
873
|
-
background: var(--sa-
|
|
874
|
-
color: var(--sa-
|
|
875
|
+
background: var(--sa-color-accent-surface-strong);
|
|
876
|
+
color: var(--sa-color-accent-strong);
|
|
875
877
|
font-weight: 600;
|
|
876
878
|
}
|
|
877
879
|
.sa-marketing-locale-mgr {
|
|
@@ -881,52 +883,52 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
881
883
|
flex-wrap: wrap;
|
|
882
884
|
}
|
|
883
885
|
.sa-marketing-locale-mgr-label {
|
|
884
|
-
font-size:
|
|
885
|
-
color: var(--sa-
|
|
886
|
+
font-size: var(--sa-text-xs);
|
|
887
|
+
color: var(--sa-color-fg-subtle);
|
|
886
888
|
}
|
|
887
889
|
.sa-marketing-locale-pill {
|
|
888
890
|
display: inline-flex;
|
|
889
891
|
align-items: center;
|
|
890
|
-
border: 1px solid var(--sa-border);
|
|
892
|
+
border: 1px solid var(--sa-color-border);
|
|
891
893
|
border-radius: 7px;
|
|
892
894
|
overflow: hidden;
|
|
893
895
|
}
|
|
894
896
|
.sa-marketing-locale-pill.active {
|
|
895
|
-
border-color: var(--sa-
|
|
896
|
-
background: var(--sa-
|
|
897
|
+
border-color: var(--sa-color-accent-strong);
|
|
898
|
+
background: var(--sa-color-accent-surface-strong);
|
|
897
899
|
}
|
|
898
900
|
.sa-marketing-locale-pill-btn {
|
|
899
901
|
border: 0;
|
|
900
902
|
background: transparent;
|
|
901
903
|
padding: 4px 8px;
|
|
902
|
-
font: 600
|
|
903
|
-
color: var(--sa-
|
|
904
|
+
font: 600 var(--sa-text-xs) var(--sa-font-mono);
|
|
905
|
+
color: var(--sa-color-fg-secondary);
|
|
904
906
|
cursor: pointer;
|
|
905
907
|
}
|
|
906
908
|
.sa-marketing-locale-pill.active .sa-marketing-locale-pill-btn {
|
|
907
|
-
color: var(--sa-
|
|
909
|
+
color: var(--sa-color-accent-strong);
|
|
908
910
|
}
|
|
909
911
|
.sa-marketing-locale-x {
|
|
910
912
|
border: 0;
|
|
911
913
|
background: transparent;
|
|
912
914
|
padding: 4px 7px;
|
|
913
|
-
color: var(--sa-
|
|
915
|
+
color: var(--sa-color-fg-subtle);
|
|
914
916
|
cursor: pointer;
|
|
915
|
-
font-size:
|
|
917
|
+
font-size: var(--sa-text-md);
|
|
916
918
|
}
|
|
917
919
|
.sa-marketing-locale-x:hover {
|
|
918
|
-
color:
|
|
920
|
+
color: var(--sa-color-negative);
|
|
919
921
|
}
|
|
920
922
|
.sa-marketing-locale-add-wrap {
|
|
921
923
|
position: relative;
|
|
922
924
|
}
|
|
923
925
|
.sa-marketing-locale-add {
|
|
924
|
-
border: 1px dashed var(--sa-border);
|
|
926
|
+
border: 1px dashed var(--sa-color-border);
|
|
925
927
|
background: transparent;
|
|
926
928
|
border-radius: 7px;
|
|
927
929
|
padding: 4px 9px;
|
|
928
|
-
font-size:
|
|
929
|
-
color: var(--sa-
|
|
930
|
+
font-size: var(--sa-text-xs);
|
|
931
|
+
color: var(--sa-color-fg-secondary);
|
|
930
932
|
cursor: pointer;
|
|
931
933
|
}
|
|
932
934
|
.sa-marketing-locale-add:disabled {
|
|
@@ -938,10 +940,10 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
938
940
|
top: 100%;
|
|
939
941
|
right: 0;
|
|
940
942
|
margin-top: 4px;
|
|
941
|
-
background: var(--sa-bg-surface);
|
|
942
|
-
border: 1px solid var(--sa-border);
|
|
943
|
+
background: var(--sa-color-bg-surface);
|
|
944
|
+
border: 1px solid var(--sa-color-border);
|
|
943
945
|
border-radius: 8px;
|
|
944
|
-
box-shadow: 0 8px 24px
|
|
946
|
+
box-shadow: 0 8px 24px var(--sa-shadow-tint-3);
|
|
945
947
|
padding: 4px;
|
|
946
948
|
display: flex;
|
|
947
949
|
flex-direction: column;
|
|
@@ -955,67 +957,77 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
955
957
|
padding: 6px 10px;
|
|
956
958
|
text-align: left;
|
|
957
959
|
border-radius: 6px;
|
|
958
|
-
font: 600
|
|
960
|
+
font: 600 var(--sa-text-xs) var(--sa-font-mono);
|
|
959
961
|
cursor: pointer;
|
|
960
962
|
}
|
|
961
963
|
.sa-marketing-locale-picker-row:hover {
|
|
962
|
-
background: var(--sa-
|
|
964
|
+
background: var(--sa-color-accent-surface-strong);
|
|
963
965
|
}
|
|
964
966
|
|
|
965
967
|
.sa-marketing-banner {
|
|
966
968
|
border-radius: 8px;
|
|
967
969
|
padding: 10px 14px;
|
|
968
|
-
font-size:
|
|
970
|
+
font-size: var(--sa-text-md);
|
|
969
971
|
margin-bottom: 14px;
|
|
970
972
|
display: flex;
|
|
971
973
|
align-items: center;
|
|
972
974
|
gap: 8px;
|
|
973
975
|
}
|
|
974
976
|
.sa-marketing-banner--error {
|
|
975
|
-
background:
|
|
976
|
-
color:
|
|
977
|
-
border: 1px solid
|
|
977
|
+
background: var(--sa-color-negative-surface);
|
|
978
|
+
color: var(--sa-color-negative-fg);
|
|
979
|
+
border: 1px solid var(--sa-color-negative-border);
|
|
978
980
|
}
|
|
979
981
|
.sa-marketing-banner--info {
|
|
980
|
-
background: var(--sa-
|
|
981
|
-
color:
|
|
982
|
-
border: 1px solid
|
|
982
|
+
background: var(--sa-color-accent-surface-strong);
|
|
983
|
+
color: var(--sa-color-info-fg);
|
|
984
|
+
border: 1px solid var(--sa-color-info-border);
|
|
983
985
|
}
|
|
984
986
|
.sa-marketing-banner-x {
|
|
985
987
|
margin-left: auto;
|
|
986
988
|
background: transparent;
|
|
987
989
|
border: 0;
|
|
988
990
|
cursor: pointer;
|
|
989
|
-
font-size:
|
|
991
|
+
font-size: var(--sa-text-xl);
|
|
990
992
|
line-height: 1;
|
|
991
993
|
color: inherit;
|
|
992
994
|
}
|
|
993
995
|
.sa-marketing-loading {
|
|
994
996
|
padding: 40px;
|
|
995
997
|
text-align: center;
|
|
996
|
-
color: var(--sa-
|
|
997
|
-
font-size:
|
|
998
|
+
color: var(--sa-color-fg-subtle);
|
|
999
|
+
font-size: var(--sa-text-md);
|
|
998
1000
|
}
|
|
999
1001
|
|
|
1000
1002
|
.sa-marketing-toolbar {
|
|
1001
1003
|
display: flex;
|
|
1004
|
+
/* The tab bar and the meta line do not fit side by side below ~672px, and
|
|
1005
|
+
* without this they simply pushed the page off its own right edge — at every
|
|
1006
|
+
* viewport narrower than that, not just the smallest. Nothing measured it
|
|
1007
|
+
* until the overflow guard started asking at each breakpoint band. */
|
|
1008
|
+
flex-wrap: wrap;
|
|
1002
1009
|
gap: 12px;
|
|
1003
1010
|
align-items: center;
|
|
1004
1011
|
margin: 0px;
|
|
1005
1012
|
}
|
|
1006
1013
|
.sa-marketing-tabbar {
|
|
1007
1014
|
display: inline-flex;
|
|
1015
|
+
/* Scrolls rather than wraps: a row of tabs broken across two lines reads as
|
|
1016
|
+
* two groups. It fits every band except the narrowest phone, where the four
|
|
1017
|
+
* tabs need 389px. */
|
|
1018
|
+
overflow-x: auto;
|
|
1019
|
+
max-width: 100%;
|
|
1008
1020
|
gap: 2px;
|
|
1009
|
-
background: var(--sa-bg-surface);
|
|
1010
|
-
border: 1px solid var(--sa-border);
|
|
1021
|
+
background: var(--sa-color-bg-surface);
|
|
1022
|
+
border: 1px solid var(--sa-color-border);
|
|
1011
1023
|
border-radius: 8px;
|
|
1012
1024
|
padding: 3px;
|
|
1013
1025
|
}
|
|
1014
1026
|
.sa-marketing-tab {
|
|
1015
1027
|
padding: 6px 14px;
|
|
1016
1028
|
border-radius: 6px;
|
|
1017
|
-
font: 500
|
|
1018
|
-
color: var(--sa-
|
|
1029
|
+
font: 500 var(--sa-text-md) var(--sa-font-body);
|
|
1030
|
+
color: var(--sa-color-fg-secondary);
|
|
1019
1031
|
background: transparent;
|
|
1020
1032
|
border: 0;
|
|
1021
1033
|
cursor: pointer;
|
|
@@ -1024,50 +1036,54 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1024
1036
|
color 0.12s;
|
|
1025
1037
|
}
|
|
1026
1038
|
.sa-marketing-tab:hover {
|
|
1027
|
-
color: var(--sa-heading);
|
|
1039
|
+
color: var(--sa-color-fg-heading);
|
|
1028
1040
|
}
|
|
1029
1041
|
.sa-marketing-tab.active {
|
|
1030
|
-
background: var(--sa-
|
|
1031
|
-
color: var(--sa-
|
|
1042
|
+
background: var(--sa-color-accent-surface-strong);
|
|
1043
|
+
color: var(--sa-color-accent-strong);
|
|
1032
1044
|
font-weight: 600;
|
|
1033
1045
|
}
|
|
1034
1046
|
.sa-marketing-tab-count {
|
|
1035
1047
|
display: inline-block;
|
|
1036
1048
|
margin-left: 5px;
|
|
1037
|
-
background:
|
|
1038
|
-
color:
|
|
1039
|
-
font-size:
|
|
1049
|
+
background: var(--sa-color-positive-surface-strong);
|
|
1050
|
+
color: var(--sa-color-positive-fg);
|
|
1051
|
+
font-size: var(--sa-text-2xs);
|
|
1040
1052
|
font-weight: 700;
|
|
1041
1053
|
padding: 1px 6px;
|
|
1042
1054
|
border-radius: 999px;
|
|
1043
1055
|
}
|
|
1044
1056
|
.sa-marketing-meta {
|
|
1045
1057
|
margin-left: auto;
|
|
1046
|
-
|
|
1047
|
-
|
|
1058
|
+
/* Its own contents wrap too: `catalogVersion <code> · locale <code>` is
|
|
1059
|
+
* wider than a phone on its own, so wrapping only the toolbar would move
|
|
1060
|
+
* the overflow one level down instead of removing it. */
|
|
1061
|
+
flex-wrap: wrap;
|
|
1062
|
+
font-size: var(--sa-text-sm);
|
|
1063
|
+
color: var(--sa-color-fg-secondary);
|
|
1048
1064
|
display: flex;
|
|
1049
1065
|
align-items: center;
|
|
1050
1066
|
gap: 8px;
|
|
1051
1067
|
}
|
|
1052
1068
|
.sa-marketing-meta code {
|
|
1053
|
-
font: 500
|
|
1054
|
-
background: var(--sa-border-soft);
|
|
1055
|
-
color: var(--sa-
|
|
1069
|
+
font: 500 var(--sa-text-xs) var(--sa-font-mono);
|
|
1070
|
+
background: var(--sa-color-border-soft);
|
|
1071
|
+
color: var(--sa-color-fg-secondary);
|
|
1056
1072
|
padding: 2px 7px;
|
|
1057
1073
|
border-radius: 4px;
|
|
1058
1074
|
}
|
|
1059
1075
|
|
|
1060
1076
|
/* ── Public catalog preview ── */
|
|
1061
1077
|
.sa-marketing-window {
|
|
1062
|
-
background: var(--sa-bg-surface);
|
|
1063
|
-
border: 1px solid var(--sa-border);
|
|
1078
|
+
background: var(--sa-color-bg-surface);
|
|
1079
|
+
border: 1px solid var(--sa-color-border);
|
|
1064
1080
|
border-radius: 12px;
|
|
1065
1081
|
overflow: hidden;
|
|
1066
1082
|
}
|
|
1067
1083
|
.sa-marketing-chrome {
|
|
1068
1084
|
height: 36px;
|
|
1069
|
-
background: var(--sa-border-soft);
|
|
1070
|
-
border-bottom: 1px solid var(--sa-border);
|
|
1085
|
+
background: var(--sa-color-border-soft);
|
|
1086
|
+
border-bottom: 1px solid var(--sa-color-border);
|
|
1071
1087
|
display: flex;
|
|
1072
1088
|
align-items: center;
|
|
1073
1089
|
padding: 0 14px;
|
|
@@ -1081,36 +1097,40 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1081
1097
|
.sa-marketing-chrome-url {
|
|
1082
1098
|
margin-left: 18px;
|
|
1083
1099
|
flex: 1;
|
|
1084
|
-
background: var(--sa-bg-surface);
|
|
1085
|
-
border: 1px solid var(--sa-border);
|
|
1100
|
+
background: var(--sa-color-bg-surface);
|
|
1101
|
+
border: 1px solid var(--sa-color-border);
|
|
1086
1102
|
border-radius: 6px;
|
|
1087
1103
|
padding: 4px 10px;
|
|
1088
|
-
font: 500
|
|
1089
|
-
color: var(--sa-
|
|
1104
|
+
font: 500 var(--sa-text-sm) var(--sa-font-mono);
|
|
1105
|
+
color: var(--sa-color-fg-secondary);
|
|
1090
1106
|
max-width: 380px;
|
|
1091
1107
|
}
|
|
1092
1108
|
.sa-marketing-canvas {
|
|
1093
|
-
background: linear-gradient(
|
|
1109
|
+
background: linear-gradient(
|
|
1110
|
+
180deg,
|
|
1111
|
+
var(--sa-color-bg-surface-raised) 0%,
|
|
1112
|
+
var(--sa-color-bg-surface) 100%
|
|
1113
|
+
);
|
|
1094
1114
|
padding: 36px 32px 28px;
|
|
1095
1115
|
}
|
|
1096
1116
|
.sa-marketing-eyebrow {
|
|
1097
|
-
font: 700
|
|
1117
|
+
font: 700 var(--sa-text-xs) var(--sa-font-body);
|
|
1098
1118
|
letter-spacing: 0.14em;
|
|
1099
1119
|
text-transform: uppercase;
|
|
1100
|
-
color: var(--sa-
|
|
1120
|
+
color: var(--sa-color-accent);
|
|
1101
1121
|
text-align: center;
|
|
1102
1122
|
}
|
|
1103
1123
|
.sa-marketing-hero {
|
|
1104
|
-
font-size:
|
|
1124
|
+
font-size: var(--sa-text-4xl);
|
|
1105
1125
|
font-weight: 700;
|
|
1106
1126
|
letter-spacing: -0.025em;
|
|
1107
|
-
color: var(--sa-heading);
|
|
1127
|
+
color: var(--sa-color-fg-heading);
|
|
1108
1128
|
text-align: center;
|
|
1109
1129
|
margin: 10px 0 6px;
|
|
1110
1130
|
}
|
|
1111
1131
|
.sa-marketing-sub {
|
|
1112
|
-
font-size:
|
|
1113
|
-
color: var(--sa-
|
|
1132
|
+
font-size: var(--sa-text-lg);
|
|
1133
|
+
color: var(--sa-color-fg-secondary);
|
|
1114
1134
|
text-align: center;
|
|
1115
1135
|
max-width: 540px;
|
|
1116
1136
|
margin: 0 auto 26px;
|
|
@@ -1121,8 +1141,8 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1121
1141
|
gap: 16px;
|
|
1122
1142
|
}
|
|
1123
1143
|
.sa-marketing-card {
|
|
1124
|
-
background: var(--sa-bg-surface);
|
|
1125
|
-
border: 1px solid var(--sa-border);
|
|
1144
|
+
background: var(--sa-color-bg-surface);
|
|
1145
|
+
border: 1px solid var(--sa-color-border);
|
|
1126
1146
|
border-radius: 12px;
|
|
1127
1147
|
padding: 22px 20px 20px;
|
|
1128
1148
|
display: flex;
|
|
@@ -1135,20 +1155,20 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1135
1155
|
}
|
|
1136
1156
|
.sa-marketing-card:hover {
|
|
1137
1157
|
transform: translateY(-2px);
|
|
1138
|
-
box-shadow: 0 8px 24px
|
|
1158
|
+
box-shadow: 0 8px 24px var(--sa-shadow-tint-1);
|
|
1139
1159
|
}
|
|
1140
1160
|
.sa-marketing-card.featured {
|
|
1141
|
-
border-color:
|
|
1142
|
-
box-shadow: 0 10px 32px
|
|
1161
|
+
border-color: var(--sa-color-info-border);
|
|
1162
|
+
box-shadow: 0 10px 32px var(--sa-shadow-tint-2);
|
|
1143
1163
|
}
|
|
1144
1164
|
.sa-marketing-card-badge {
|
|
1145
1165
|
position: absolute;
|
|
1146
1166
|
top: -10px;
|
|
1147
1167
|
left: 50%;
|
|
1148
1168
|
transform: translateX(-50%);
|
|
1149
|
-
background: var(--sa-
|
|
1150
|
-
color:
|
|
1151
|
-
font: 700
|
|
1169
|
+
background: var(--sa-color-accent);
|
|
1170
|
+
color: var(--sa-color-fg-on-accent);
|
|
1171
|
+
font: 700 var(--sa-text-xs) var(--sa-font-body);
|
|
1152
1172
|
letter-spacing: 0.1em;
|
|
1153
1173
|
text-transform: uppercase;
|
|
1154
1174
|
padding: 4px 12px;
|
|
@@ -1156,21 +1176,21 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1156
1176
|
white-space: nowrap;
|
|
1157
1177
|
}
|
|
1158
1178
|
.sa-marketing-card-key {
|
|
1159
|
-
font: 700
|
|
1179
|
+
font: 700 var(--sa-text-xs) var(--sa-font-mono);
|
|
1160
1180
|
letter-spacing: 0.08em;
|
|
1161
|
-
color: var(--sa-
|
|
1181
|
+
color: var(--sa-color-fg-subtle);
|
|
1162
1182
|
text-transform: uppercase;
|
|
1163
1183
|
}
|
|
1164
1184
|
.sa-marketing-card-name {
|
|
1165
|
-
font-size:
|
|
1185
|
+
font-size: var(--sa-text-2xl);
|
|
1166
1186
|
font-weight: 700;
|
|
1167
1187
|
letter-spacing: -0.02em;
|
|
1168
|
-
color: var(--sa-heading);
|
|
1188
|
+
color: var(--sa-color-fg-heading);
|
|
1169
1189
|
margin: 2px 0 4px;
|
|
1170
1190
|
}
|
|
1171
1191
|
.sa-marketing-card-desc {
|
|
1172
|
-
font-size:
|
|
1173
|
-
color: var(--sa-
|
|
1192
|
+
font-size: var(--sa-text-md);
|
|
1193
|
+
color: var(--sa-color-fg-secondary);
|
|
1174
1194
|
line-height: 1.4;
|
|
1175
1195
|
min-height: 36px;
|
|
1176
1196
|
}
|
|
@@ -1181,18 +1201,18 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1181
1201
|
gap: 6px;
|
|
1182
1202
|
}
|
|
1183
1203
|
.sa-marketing-card-price-big {
|
|
1184
|
-
font-size:
|
|
1204
|
+
font-size: var(--sa-text-4xl);
|
|
1185
1205
|
font-weight: 700;
|
|
1186
1206
|
letter-spacing: -0.03em;
|
|
1187
|
-
color: var(--sa-heading);
|
|
1207
|
+
color: var(--sa-color-fg-heading);
|
|
1188
1208
|
}
|
|
1189
1209
|
.sa-marketing-card-price-unit {
|
|
1190
|
-
font-size:
|
|
1191
|
-
color: var(--sa-
|
|
1210
|
+
font-size: var(--sa-text-md);
|
|
1211
|
+
color: var(--sa-color-fg-subtle);
|
|
1192
1212
|
}
|
|
1193
1213
|
.sa-marketing-card-price-y {
|
|
1194
|
-
font-size:
|
|
1195
|
-
color: var(--sa-
|
|
1214
|
+
font-size: var(--sa-text-sm);
|
|
1215
|
+
color: var(--sa-color-fg-subtle);
|
|
1196
1216
|
margin-bottom: 12px;
|
|
1197
1217
|
}
|
|
1198
1218
|
.sa-marketing-card-cta {
|
|
@@ -1200,41 +1220,41 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1200
1220
|
margin-top: 14px;
|
|
1201
1221
|
padding: 9px 12px;
|
|
1202
1222
|
border-radius: 8px;
|
|
1203
|
-
border: 1px solid var(--sa-border);
|
|
1204
|
-
background: var(--sa-bg-surface);
|
|
1205
|
-
color: var(--sa-heading);
|
|
1206
|
-
font: 600
|
|
1223
|
+
border: 1px solid var(--sa-color-border);
|
|
1224
|
+
background: var(--sa-color-bg-surface);
|
|
1225
|
+
color: var(--sa-color-fg-heading);
|
|
1226
|
+
font: 600 var(--sa-text-md) var(--sa-font-body);
|
|
1207
1227
|
cursor: pointer;
|
|
1208
1228
|
transition:
|
|
1209
1229
|
background 0.12s,
|
|
1210
1230
|
border-color 0.12s;
|
|
1211
1231
|
}
|
|
1212
1232
|
.sa-marketing-card-cta:hover {
|
|
1213
|
-
background: var(--sa-bg-
|
|
1233
|
+
background: var(--sa-color-bg-sunken);
|
|
1214
1234
|
}
|
|
1215
1235
|
.sa-marketing-card.featured .sa-marketing-card-cta {
|
|
1216
|
-
background: var(--sa-
|
|
1217
|
-
border-color: var(--sa-
|
|
1218
|
-
color:
|
|
1236
|
+
background: var(--sa-color-accent);
|
|
1237
|
+
border-color: var(--sa-color-accent);
|
|
1238
|
+
color: var(--sa-color-fg-on-accent);
|
|
1219
1239
|
}
|
|
1220
1240
|
.sa-marketing-card.featured .sa-marketing-card-cta:hover {
|
|
1221
|
-
background: var(--sa-
|
|
1241
|
+
background: var(--sa-color-accent-strong);
|
|
1222
1242
|
}
|
|
1223
1243
|
.sa-marketing-card-trialnote {
|
|
1224
|
-
font-size:
|
|
1225
|
-
color: var(--sa-
|
|
1244
|
+
font-size: var(--sa-text-xs);
|
|
1245
|
+
color: var(--sa-color-fg-subtle);
|
|
1226
1246
|
text-align: center;
|
|
1227
1247
|
margin-top: 6px;
|
|
1228
1248
|
}
|
|
1229
1249
|
.sa-marketing-card.has-promo {
|
|
1230
|
-
border-color:
|
|
1250
|
+
border-color: var(--sa-color-positive-strong);
|
|
1231
1251
|
}
|
|
1232
1252
|
.sa-marketing-promo-ribbon {
|
|
1233
1253
|
position: absolute;
|
|
1234
1254
|
top: 12px;
|
|
1235
1255
|
right: -2px;
|
|
1236
|
-
color:
|
|
1237
|
-
font-size:
|
|
1256
|
+
color: var(--sa-color-fg-on-accent);
|
|
1257
|
+
font-size: var(--sa-text-xs);
|
|
1238
1258
|
font-weight: 700;
|
|
1239
1259
|
padding: 3px 12px 3px 10px;
|
|
1240
1260
|
border-radius: 4px 0 0 4px;
|
|
@@ -1246,27 +1266,27 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1246
1266
|
margin-top: 2px;
|
|
1247
1267
|
}
|
|
1248
1268
|
.sa-marketing-card-price-strike s {
|
|
1249
|
-
color: var(--sa-
|
|
1250
|
-
font-size:
|
|
1269
|
+
color: var(--sa-color-fg-subtle);
|
|
1270
|
+
font-size: var(--sa-text-lg);
|
|
1251
1271
|
}
|
|
1252
1272
|
.sa-marketing-price-regular {
|
|
1253
|
-
font-size:
|
|
1273
|
+
font-size: var(--sa-text-2xs);
|
|
1254
1274
|
text-transform: uppercase;
|
|
1255
1275
|
letter-spacing: 0.5px;
|
|
1256
|
-
color: var(--sa-
|
|
1276
|
+
color: var(--sa-color-fg-subtle);
|
|
1257
1277
|
}
|
|
1258
1278
|
.sa-marketing-card-fineprint {
|
|
1259
|
-
font-size:
|
|
1260
|
-
color:
|
|
1279
|
+
font-size: var(--sa-text-2xs);
|
|
1280
|
+
color: var(--sa-color-positive);
|
|
1261
1281
|
text-align: center;
|
|
1262
1282
|
margin-top: 6px;
|
|
1263
1283
|
}
|
|
1264
1284
|
.sa-marketing-card-includes {
|
|
1265
1285
|
margin-top: 18px;
|
|
1266
|
-
font-size:
|
|
1286
|
+
font-size: var(--sa-text-xs);
|
|
1267
1287
|
text-transform: uppercase;
|
|
1268
1288
|
letter-spacing: 0.08em;
|
|
1269
|
-
color: var(--sa-
|
|
1289
|
+
color: var(--sa-color-fg-subtle);
|
|
1270
1290
|
font-weight: 700;
|
|
1271
1291
|
}
|
|
1272
1292
|
.sa-marketing-card-features {
|
|
@@ -1276,8 +1296,8 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1276
1296
|
display: flex;
|
|
1277
1297
|
flex-direction: column;
|
|
1278
1298
|
gap: 7px;
|
|
1279
|
-
font-size:
|
|
1280
|
-
color:
|
|
1299
|
+
font-size: var(--sa-text-md);
|
|
1300
|
+
color: var(--sa-color-fg-body);
|
|
1281
1301
|
}
|
|
1282
1302
|
.sa-marketing-card-features li {
|
|
1283
1303
|
display: flex;
|
|
@@ -1286,42 +1306,42 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1286
1306
|
line-height: 1.35;
|
|
1287
1307
|
}
|
|
1288
1308
|
.sa-marketing-card-features .sa-marketing-tick {
|
|
1289
|
-
color:
|
|
1309
|
+
color: var(--sa-color-positive-strong);
|
|
1290
1310
|
flex: 0 0 14px;
|
|
1291
1311
|
margin-top: 1px;
|
|
1292
1312
|
}
|
|
1293
1313
|
.sa-marketing-card-features b {
|
|
1294
|
-
color: var(--sa-heading);
|
|
1314
|
+
color: var(--sa-color-fg-heading);
|
|
1295
1315
|
font-weight: 700;
|
|
1296
1316
|
}
|
|
1297
1317
|
.sa-marketing-card-features-empty {
|
|
1298
1318
|
margin-top: 8px;
|
|
1299
|
-
font-size:
|
|
1300
|
-
color: var(--sa-
|
|
1319
|
+
font-size: var(--sa-text-sm);
|
|
1320
|
+
color: var(--sa-color-fg-subtle);
|
|
1301
1321
|
}
|
|
1302
1322
|
|
|
1303
1323
|
/* ── Marketing administration ── */
|
|
1304
1324
|
.sa-marketing-admin {
|
|
1305
|
-
background: var(--sa-bg-surface);
|
|
1306
|
-
border: 1px solid var(--sa-border);
|
|
1325
|
+
background: var(--sa-color-bg-surface);
|
|
1326
|
+
border: 1px solid var(--sa-color-border);
|
|
1307
1327
|
border-radius: 10px;
|
|
1308
1328
|
}
|
|
1309
1329
|
.sa-marketing-admin-head {
|
|
1310
1330
|
padding: 14px 16px;
|
|
1311
|
-
border-bottom: 1px solid var(--sa-border-soft);
|
|
1331
|
+
border-bottom: 1px solid var(--sa-color-border-soft);
|
|
1312
1332
|
display: flex;
|
|
1313
1333
|
align-items: center;
|
|
1314
1334
|
gap: 12px;
|
|
1315
1335
|
}
|
|
1316
1336
|
.sa-marketing-admin-title {
|
|
1317
|
-
font-size:
|
|
1337
|
+
font-size: var(--sa-text-lg);
|
|
1318
1338
|
font-weight: 700;
|
|
1319
1339
|
letter-spacing: -0.01em;
|
|
1320
|
-
color: var(--sa-heading);
|
|
1340
|
+
color: var(--sa-color-fg-heading);
|
|
1321
1341
|
}
|
|
1322
1342
|
.sa-marketing-admin-sub {
|
|
1323
|
-
font-size:
|
|
1324
|
-
color: var(--sa-
|
|
1343
|
+
font-size: var(--sa-text-sm);
|
|
1344
|
+
color: var(--sa-color-fg-secondary);
|
|
1325
1345
|
}
|
|
1326
1346
|
.sa-marketing-admin-grid {
|
|
1327
1347
|
display: grid;
|
|
@@ -1332,28 +1352,28 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1332
1352
|
display: contents;
|
|
1333
1353
|
}
|
|
1334
1354
|
.sa-marketing-admin-thead > div {
|
|
1335
|
-
background:
|
|
1355
|
+
background: var(--sa-color-bg-surface-raised);
|
|
1336
1356
|
padding: 10px 14px;
|
|
1337
|
-
font-size:
|
|
1357
|
+
font-size: var(--sa-text-xs);
|
|
1338
1358
|
text-transform: uppercase;
|
|
1339
1359
|
letter-spacing: 0.1em;
|
|
1340
|
-
color: var(--sa-
|
|
1360
|
+
color: var(--sa-color-fg-secondary);
|
|
1341
1361
|
font-weight: 700;
|
|
1342
|
-
border-bottom: 1px solid var(--sa-border);
|
|
1362
|
+
border-bottom: 1px solid var(--sa-color-border);
|
|
1343
1363
|
}
|
|
1344
1364
|
.sa-marketing-admin-row {
|
|
1345
1365
|
display: contents;
|
|
1346
1366
|
}
|
|
1347
1367
|
.sa-marketing-admin-row > div {
|
|
1348
1368
|
padding: 12px 14px;
|
|
1349
|
-
border-bottom: 1px solid var(--sa-border-soft);
|
|
1369
|
+
border-bottom: 1px solid var(--sa-color-border-soft);
|
|
1350
1370
|
display: flex;
|
|
1351
1371
|
align-items: center;
|
|
1352
|
-
font-size:
|
|
1353
|
-
color: var(--sa-heading);
|
|
1372
|
+
font-size: var(--sa-text-md);
|
|
1373
|
+
color: var(--sa-color-fg-heading);
|
|
1354
1374
|
}
|
|
1355
1375
|
.sa-marketing-admin-row--disabled > div {
|
|
1356
|
-
background:
|
|
1376
|
+
background: var(--sa-color-bg-surface-raised);
|
|
1357
1377
|
}
|
|
1358
1378
|
.sa-marketing-admin-row-end {
|
|
1359
1379
|
justify-content: flex-end;
|
|
@@ -1370,41 +1390,41 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1370
1390
|
border-radius: 8px;
|
|
1371
1391
|
display: grid;
|
|
1372
1392
|
place-items: center;
|
|
1373
|
-
font: 700
|
|
1393
|
+
font: 700 var(--sa-text-2xs) var(--sa-font-mono);
|
|
1374
1394
|
border: 1px solid;
|
|
1375
1395
|
}
|
|
1376
1396
|
.sa-marketing-plan-label {
|
|
1377
|
-
font-size:
|
|
1397
|
+
font-size: var(--sa-text-md);
|
|
1378
1398
|
font-weight: 700;
|
|
1379
|
-
color: var(--sa-heading);
|
|
1399
|
+
color: var(--sa-color-fg-heading);
|
|
1380
1400
|
}
|
|
1381
1401
|
.sa-marketing-plan-key {
|
|
1382
|
-
font: 500
|
|
1383
|
-
color: var(--sa-
|
|
1402
|
+
font: 500 var(--sa-text-xs) var(--sa-font-mono);
|
|
1403
|
+
color: var(--sa-color-fg-subtle);
|
|
1384
1404
|
}
|
|
1385
1405
|
|
|
1386
1406
|
.sa-marketing-field {
|
|
1387
1407
|
width: 100%;
|
|
1388
1408
|
padding: 5px 8px;
|
|
1389
|
-
font: 400
|
|
1390
|
-
color: var(--sa-heading);
|
|
1391
|
-
background: var(--sa-bg-surface);
|
|
1392
|
-
border: 1px solid var(--sa-border-strong);
|
|
1409
|
+
font: 400 var(--sa-text-sm) var(--sa-font-body);
|
|
1410
|
+
color: var(--sa-color-fg-heading);
|
|
1411
|
+
background: var(--sa-color-bg-surface);
|
|
1412
|
+
border: 1px solid var(--sa-color-border-strong);
|
|
1393
1413
|
border-radius: 6px;
|
|
1394
1414
|
}
|
|
1395
1415
|
.sa-marketing-field:focus {
|
|
1396
1416
|
outline: none;
|
|
1397
|
-
border-color: var(--sa-
|
|
1398
|
-
box-shadow: 0 0 0 3px var(--sa-
|
|
1417
|
+
border-color: var(--sa-color-accent);
|
|
1418
|
+
box-shadow: 0 0 0 3px var(--sa-color-accent-surface-strong);
|
|
1399
1419
|
}
|
|
1400
1420
|
.sa-marketing-field:disabled {
|
|
1401
|
-
background: var(--sa-border-soft);
|
|
1402
|
-
color: var(--sa-
|
|
1421
|
+
background: var(--sa-color-border-soft);
|
|
1422
|
+
color: var(--sa-color-fg-subtle);
|
|
1403
1423
|
cursor: not-allowed;
|
|
1404
1424
|
}
|
|
1405
1425
|
.sa-marketing-field--area {
|
|
1406
1426
|
resize: vertical;
|
|
1407
|
-
font-size:
|
|
1427
|
+
font-size: var(--sa-text-md);
|
|
1408
1428
|
line-height: 1.4;
|
|
1409
1429
|
}
|
|
1410
1430
|
|
|
@@ -1420,7 +1440,7 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1420
1440
|
.sa-marketing-toggle span {
|
|
1421
1441
|
position: absolute;
|
|
1422
1442
|
inset: 0;
|
|
1423
|
-
background:
|
|
1443
|
+
background: var(--sa-color-border-strong);
|
|
1424
1444
|
border-radius: 999px;
|
|
1425
1445
|
transition: background 0.15s;
|
|
1426
1446
|
cursor: pointer;
|
|
@@ -1430,15 +1450,15 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1430
1450
|
position: absolute;
|
|
1431
1451
|
width: 16px;
|
|
1432
1452
|
height: 16px;
|
|
1433
|
-
background:
|
|
1453
|
+
background: var(--sa-color-bg-surface);
|
|
1434
1454
|
border-radius: 50%;
|
|
1435
1455
|
left: 2px;
|
|
1436
1456
|
top: 2px;
|
|
1437
1457
|
transition: transform 0.15s;
|
|
1438
|
-
box-shadow: 0 1px 2px
|
|
1458
|
+
box-shadow: 0 1px 2px var(--sa-shadow-tint-4);
|
|
1439
1459
|
}
|
|
1440
1460
|
.sa-marketing-toggle input:checked + span {
|
|
1441
|
-
background: var(--sa-
|
|
1461
|
+
background: var(--sa-color-accent);
|
|
1442
1462
|
}
|
|
1443
1463
|
.sa-marketing-toggle input:checked + span::before {
|
|
1444
1464
|
transform: translateX(16px);
|
|
@@ -1454,24 +1474,24 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1454
1474
|
gap: 5px;
|
|
1455
1475
|
padding: 2px 8px;
|
|
1456
1476
|
border-radius: 999px;
|
|
1457
|
-
font-size:
|
|
1477
|
+
font-size: var(--sa-text-xs);
|
|
1458
1478
|
font-weight: 600;
|
|
1459
1479
|
border: 1px solid;
|
|
1460
1480
|
}
|
|
1461
1481
|
.sa-marketing-chip--muted {
|
|
1462
|
-
background: var(--sa-border-soft);
|
|
1463
|
-
color: var(--sa-
|
|
1464
|
-
border-color:
|
|
1482
|
+
background: var(--sa-color-border-soft);
|
|
1483
|
+
color: var(--sa-color-fg-secondary);
|
|
1484
|
+
border-color: var(--sa-color-border-strong);
|
|
1465
1485
|
}
|
|
1466
1486
|
.sa-marketing-chip--featured {
|
|
1467
|
-
background: var(--sa-
|
|
1468
|
-
color: var(--sa-
|
|
1469
|
-
border-color:
|
|
1487
|
+
background: var(--sa-color-accent-surface-strong);
|
|
1488
|
+
color: var(--sa-color-accent-strong);
|
|
1489
|
+
border-color: var(--sa-color-info-border);
|
|
1470
1490
|
}
|
|
1471
1491
|
.sa-marketing-chip--live {
|
|
1472
|
-
background: var(--sa-positive-
|
|
1473
|
-
color:
|
|
1474
|
-
border-color:
|
|
1492
|
+
background: var(--sa-color-positive-surface);
|
|
1493
|
+
color: var(--sa-color-positive-fg);
|
|
1494
|
+
border-color: var(--sa-color-positive-border);
|
|
1475
1495
|
}
|
|
1476
1496
|
.sa-marketing-chip--live::before {
|
|
1477
1497
|
content: '';
|
|
@@ -1490,16 +1510,16 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1490
1510
|
border: 1px solid transparent;
|
|
1491
1511
|
border-radius: 6px;
|
|
1492
1512
|
cursor: pointer;
|
|
1493
|
-
color: var(--sa-
|
|
1513
|
+
color: var(--sa-color-fg-subtle);
|
|
1494
1514
|
transition:
|
|
1495
1515
|
background 0.12s,
|
|
1496
1516
|
color 0.12s,
|
|
1497
1517
|
border-color 0.12s;
|
|
1498
1518
|
}
|
|
1499
1519
|
.sa-marketing-expand-btn:hover {
|
|
1500
|
-
background: var(--sa-border-soft);
|
|
1501
|
-
color: var(--sa-
|
|
1502
|
-
border-color: var(--sa-border);
|
|
1520
|
+
background: var(--sa-color-border-soft);
|
|
1521
|
+
color: var(--sa-color-accent);
|
|
1522
|
+
border-color: var(--sa-color-border);
|
|
1503
1523
|
}
|
|
1504
1524
|
.sa-marketing-chev {
|
|
1505
1525
|
display: inline-flex;
|
|
@@ -1511,8 +1531,12 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1511
1531
|
|
|
1512
1532
|
.sa-marketing-admin-expand {
|
|
1513
1533
|
grid-column: 1 / -1;
|
|
1514
|
-
background: linear-gradient(
|
|
1515
|
-
|
|
1534
|
+
background: linear-gradient(
|
|
1535
|
+
180deg,
|
|
1536
|
+
var(--sa-color-bg-surface-raised) 0%,
|
|
1537
|
+
var(--sa-color-bg-surface) 100%
|
|
1538
|
+
);
|
|
1539
|
+
border-bottom: 1px solid var(--sa-color-border-soft);
|
|
1516
1540
|
padding: 18px 20px 22px;
|
|
1517
1541
|
}
|
|
1518
1542
|
.sa-marketing-expand-grid {
|
|
@@ -1531,15 +1555,15 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1531
1555
|
gap: 6px;
|
|
1532
1556
|
}
|
|
1533
1557
|
.sa-marketing-expand-label {
|
|
1534
|
-
font-size:
|
|
1558
|
+
font-size: var(--sa-text-xs);
|
|
1535
1559
|
text-transform: uppercase;
|
|
1536
1560
|
letter-spacing: 0.1em;
|
|
1537
|
-
color: var(--sa-
|
|
1561
|
+
color: var(--sa-color-fg-secondary);
|
|
1538
1562
|
font-weight: 700;
|
|
1539
1563
|
}
|
|
1540
1564
|
.sa-marketing-expand-hint {
|
|
1541
|
-
font-size:
|
|
1542
|
-
color: var(--sa-
|
|
1565
|
+
font-size: var(--sa-text-xs);
|
|
1566
|
+
color: var(--sa-color-fg-subtle);
|
|
1543
1567
|
}
|
|
1544
1568
|
.sa-marketing-field-head {
|
|
1545
1569
|
display: flex;
|
|
@@ -1548,11 +1572,11 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1548
1572
|
flex-wrap: wrap;
|
|
1549
1573
|
}
|
|
1550
1574
|
.sa-marketing-source-hint {
|
|
1551
|
-
font-size:
|
|
1552
|
-
color: var(--sa-
|
|
1575
|
+
font-size: var(--sa-text-xs);
|
|
1576
|
+
color: var(--sa-color-fg-subtle);
|
|
1553
1577
|
}
|
|
1554
1578
|
.sa-marketing-source-hint em {
|
|
1555
|
-
color: var(--sa-
|
|
1579
|
+
color: var(--sa-color-fg-secondary);
|
|
1556
1580
|
font-style: normal;
|
|
1557
1581
|
}
|
|
1558
1582
|
.sa-marketing-locked-value {
|
|
@@ -1560,17 +1584,17 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1560
1584
|
align-items: center;
|
|
1561
1585
|
gap: 8px;
|
|
1562
1586
|
padding: 8px 10px;
|
|
1563
|
-
background: var(--sa-bg-surface);
|
|
1564
|
-
border: 1px solid var(--sa-border);
|
|
1587
|
+
background: var(--sa-color-bg-surface);
|
|
1588
|
+
border: 1px solid var(--sa-color-border);
|
|
1565
1589
|
border-radius: 6px;
|
|
1566
|
-
font-size:
|
|
1567
|
-
color: var(--sa-heading);
|
|
1590
|
+
font-size: var(--sa-text-md);
|
|
1591
|
+
color: var(--sa-color-fg-heading);
|
|
1568
1592
|
}
|
|
1569
1593
|
.sa-marketing-locked-hint {
|
|
1570
|
-
font-size:
|
|
1594
|
+
font-size: var(--sa-text-2xs);
|
|
1571
1595
|
text-transform: uppercase;
|
|
1572
|
-
color: var(--sa-
|
|
1573
|
-
background:
|
|
1596
|
+
color: var(--sa-color-fg-subtle);
|
|
1597
|
+
background: var(--sa-color-bg-sunken);
|
|
1574
1598
|
padding: 1px 6px;
|
|
1575
1599
|
border-radius: 4px;
|
|
1576
1600
|
margin-left: auto;
|
|
@@ -1579,14 +1603,14 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1579
1603
|
display: flex;
|
|
1580
1604
|
align-items: center;
|
|
1581
1605
|
gap: 10px;
|
|
1582
|
-
background: var(--sa-bg-surface);
|
|
1583
|
-
border: 1px solid var(--sa-border);
|
|
1606
|
+
background: var(--sa-color-bg-surface);
|
|
1607
|
+
border: 1px solid var(--sa-color-border);
|
|
1584
1608
|
border-radius: 8px;
|
|
1585
1609
|
padding: 8px 12px;
|
|
1586
1610
|
}
|
|
1587
1611
|
.sa-marketing-trial-label {
|
|
1588
|
-
font-size:
|
|
1589
|
-
color: var(--sa-heading);
|
|
1612
|
+
font-size: var(--sa-text-md);
|
|
1613
|
+
color: var(--sa-color-fg-heading);
|
|
1590
1614
|
}
|
|
1591
1615
|
.sa-marketing-trial-days {
|
|
1592
1616
|
margin-left: auto;
|
|
@@ -1595,8 +1619,8 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1595
1619
|
gap: 6px;
|
|
1596
1620
|
}
|
|
1597
1621
|
.sa-marketing-trial-unit {
|
|
1598
|
-
font-size:
|
|
1599
|
-
color: var(--sa-
|
|
1622
|
+
font-size: var(--sa-text-sm);
|
|
1623
|
+
color: var(--sa-color-fg-secondary);
|
|
1600
1624
|
}
|
|
1601
1625
|
|
|
1602
1626
|
.sa-marketing-tf-head {
|
|
@@ -1615,8 +1639,8 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1615
1639
|
align-items: center;
|
|
1616
1640
|
}
|
|
1617
1641
|
.sa-marketing-tf-num {
|
|
1618
|
-
font: 600
|
|
1619
|
-
color: var(--sa-
|
|
1642
|
+
font: 600 var(--sa-text-xs) var(--sa-font-mono);
|
|
1643
|
+
color: var(--sa-color-fg-subtle);
|
|
1620
1644
|
text-align: center;
|
|
1621
1645
|
}
|
|
1622
1646
|
.sa-marketing-tf-actions {
|
|
@@ -1628,39 +1652,39 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1628
1652
|
height: 24px;
|
|
1629
1653
|
display: grid;
|
|
1630
1654
|
place-items: center;
|
|
1631
|
-
background: var(--sa-bg-surface);
|
|
1632
|
-
border: 1px solid var(--sa-border);
|
|
1655
|
+
background: var(--sa-color-bg-surface);
|
|
1656
|
+
border: 1px solid var(--sa-color-border);
|
|
1633
1657
|
border-radius: 5px;
|
|
1634
1658
|
cursor: pointer;
|
|
1635
|
-
font: 600
|
|
1636
|
-
color: var(--sa-
|
|
1659
|
+
font: 600 var(--sa-text-2xs) var(--sa-font-body);
|
|
1660
|
+
color: var(--sa-color-fg-secondary);
|
|
1637
1661
|
padding: 0;
|
|
1638
1662
|
transition:
|
|
1639
1663
|
background 0.12s,
|
|
1640
1664
|
border-color 0.12s;
|
|
1641
1665
|
}
|
|
1642
1666
|
.sa-marketing-iconbtn:hover:not(:disabled) {
|
|
1643
|
-
background: var(--sa-border-soft);
|
|
1644
|
-
border-color:
|
|
1667
|
+
background: var(--sa-color-border-soft);
|
|
1668
|
+
border-color: var(--sa-color-border-strong);
|
|
1645
1669
|
}
|
|
1646
1670
|
.sa-marketing-iconbtn:disabled {
|
|
1647
1671
|
opacity: 0.35;
|
|
1648
1672
|
cursor: not-allowed;
|
|
1649
1673
|
}
|
|
1650
1674
|
.sa-marketing-iconbtn--danger {
|
|
1651
|
-
color:
|
|
1675
|
+
color: var(--sa-color-negative-fg);
|
|
1652
1676
|
}
|
|
1653
1677
|
.sa-marketing-iconbtn--danger:hover:not(:disabled) {
|
|
1654
|
-
background:
|
|
1655
|
-
border-color:
|
|
1678
|
+
background: var(--sa-color-negative-surface);
|
|
1679
|
+
border-color: var(--sa-color-negative-border);
|
|
1656
1680
|
}
|
|
1657
1681
|
.sa-marketing-tf-empty {
|
|
1658
1682
|
padding: 14px;
|
|
1659
1683
|
text-align: center;
|
|
1660
|
-
font-size:
|
|
1661
|
-
color: var(--sa-
|
|
1662
|
-
background: var(--sa-bg-surface);
|
|
1663
|
-
border: 1px dashed
|
|
1684
|
+
font-size: var(--sa-text-sm);
|
|
1685
|
+
color: var(--sa-color-fg-subtle);
|
|
1686
|
+
background: var(--sa-color-bg-surface);
|
|
1687
|
+
border: 1px dashed var(--sa-color-border-strong);
|
|
1664
1688
|
border-radius: 8px;
|
|
1665
1689
|
}
|
|
1666
1690
|
.sa-marketing-tf-add {
|
|
@@ -1681,10 +1705,10 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1681
1705
|
gap: 5px;
|
|
1682
1706
|
padding: 3px 9px;
|
|
1683
1707
|
border-radius: 999px;
|
|
1684
|
-
background: var(--sa-bg-surface);
|
|
1685
|
-
border: 1px dashed
|
|
1686
|
-
font-size:
|
|
1687
|
-
color: var(--sa-
|
|
1708
|
+
background: var(--sa-color-bg-surface);
|
|
1709
|
+
border: 1px dashed var(--sa-color-border-strong);
|
|
1710
|
+
font-size: var(--sa-text-sm);
|
|
1711
|
+
color: var(--sa-color-fg-secondary);
|
|
1688
1712
|
cursor: pointer;
|
|
1689
1713
|
transition:
|
|
1690
1714
|
background 0.12s,
|
|
@@ -1693,21 +1717,21 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1693
1717
|
}
|
|
1694
1718
|
.sa-marketing-tf-chip em {
|
|
1695
1719
|
font-style: normal;
|
|
1696
|
-
color: var(--sa-
|
|
1697
|
-
font: 500
|
|
1720
|
+
color: var(--sa-color-fg-subtle);
|
|
1721
|
+
font: 500 var(--sa-text-xs) var(--sa-font-mono);
|
|
1698
1722
|
}
|
|
1699
1723
|
.sa-marketing-tf-chip:hover:not(:disabled) {
|
|
1700
|
-
background: var(--sa-
|
|
1701
|
-
border-color:
|
|
1724
|
+
background: var(--sa-color-accent-surface-strong);
|
|
1725
|
+
border-color: var(--sa-color-info-border);
|
|
1702
1726
|
border-style: solid;
|
|
1703
|
-
color: var(--sa-
|
|
1727
|
+
color: var(--sa-color-accent-strong);
|
|
1704
1728
|
}
|
|
1705
1729
|
.sa-marketing-tf-chip:disabled {
|
|
1706
1730
|
opacity: 0.5;
|
|
1707
1731
|
cursor: not-allowed;
|
|
1708
1732
|
}
|
|
1709
1733
|
|
|
1710
|
-
@media (max-width:
|
|
1734
|
+
@media (max-width: 1023.98px) {
|
|
1711
1735
|
.sa-marketing-expand-grid {
|
|
1712
1736
|
grid-template-columns: 1fr;
|
|
1713
1737
|
}
|
|
@@ -1723,12 +1747,12 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1723
1747
|
margin-top: 6px;
|
|
1724
1748
|
}
|
|
1725
1749
|
.sa-marketing-version-tab {
|
|
1726
|
-
border: 1px solid var(--sa-border);
|
|
1727
|
-
background:
|
|
1750
|
+
border: 1px solid var(--sa-color-border);
|
|
1751
|
+
background: var(--sa-color-bg-surface);
|
|
1728
1752
|
border-radius: 6px;
|
|
1729
1753
|
padding: 2px 8px;
|
|
1730
|
-
font: 600
|
|
1731
|
-
color: var(--sa-muted);
|
|
1754
|
+
font: 600 var(--sa-text-xs) var(--sa-font-mono, ui-monospace, monospace);
|
|
1755
|
+
color: var(--sa-color-fg-muted);
|
|
1732
1756
|
cursor: pointer;
|
|
1733
1757
|
letter-spacing: 0.02em;
|
|
1734
1758
|
transition:
|
|
@@ -1737,13 +1761,13 @@ async function onLocaleChange(loc: string): Promise<void> {
|
|
|
1737
1761
|
color 0.1s;
|
|
1738
1762
|
}
|
|
1739
1763
|
.sa-marketing-version-tab:hover {
|
|
1740
|
-
border-color:
|
|
1741
|
-
background: var(--sa-bg-
|
|
1742
|
-
color: var(--sa-
|
|
1764
|
+
border-color: var(--sa-color-border-strong);
|
|
1765
|
+
background: var(--sa-color-bg-sunken);
|
|
1766
|
+
color: var(--sa-color-fg-secondary);
|
|
1743
1767
|
}
|
|
1744
1768
|
.sa-marketing-version-tab--active {
|
|
1745
|
-
border-color: var(--sa-
|
|
1746
|
-
background: var(--sa-
|
|
1747
|
-
color: var(--sa-
|
|
1769
|
+
border-color: var(--sa-color-accent-strong);
|
|
1770
|
+
background: var(--sa-color-accent-surface-strong);
|
|
1771
|
+
color: var(--sa-color-accent-strong);
|
|
1748
1772
|
}
|
|
1749
1773
|
</style>
|