@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.
Files changed (119) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-LY52T4N4.js → chunk-TQQMKWN6.js} +58 -1
  3. package/dist/{chunk-XMMFN2WJ.js → chunk-VYMTWCTT.js} +51 -1
  4. package/dist/client/index.cjs +57 -0
  5. package/dist/client/index.d.cts +58 -1
  6. package/dist/client/index.d.ts +58 -1
  7. package/dist/client/index.js +15 -1
  8. package/dist/index.cjs +321 -159
  9. package/dist/index.d.cts +67 -4
  10. package/dist/index.d.ts +67 -4
  11. package/dist/index.js +72 -2
  12. package/dist/quasar/index.cjs +116 -20
  13. package/dist/quasar/index.d.cts +48 -3
  14. package/dist/quasar/index.d.ts +48 -3
  15. package/dist/quasar/index.js +58 -3
  16. package/dist/{use-super-admin-i18n-CgTuNi8h.d.cts → use-sa-theme-B5t7oXph.d.cts} +51 -1
  17. package/dist/{use-super-admin-i18n-CHNdsSlm.d.ts → use-sa-theme-OUBlaqgl.d.ts} +51 -1
  18. package/package.json +5 -2
  19. package/src/client/identity-accents.ts +129 -0
  20. package/src/client/index.ts +1 -0
  21. package/src/components/BundleVersionPublishDialog.vue +17 -17
  22. package/src/components/KvBlock.vue +6 -6
  23. package/src/components/MarketingPromotionsTab.vue +84 -80
  24. package/src/components/MfaPromptDialog.vue +2 -2
  25. package/src/components/TenantActionConfirmDialog.vue +5 -5
  26. package/src/components/VersionDiffPreview.vue +18 -18
  27. package/src/components/bundle-editor/BundleCreatePanel.vue +52 -52
  28. package/src/components/bundle-editor/BundleFeaturesEditor.vue +20 -20
  29. package/src/components/bundle-editor/BundlePlanCompatPicker.vue +33 -33
  30. package/src/components/bundle-editor/BundleQuotasEditor.vue +26 -26
  31. package/src/components/bundle-editor/BundleStatusBanner.vue +21 -21
  32. package/src/components/bundle-editor/BundleVersionInlineEditor.vue +49 -49
  33. package/src/components/bundle-editor/BundleVersionStrip.vue +30 -30
  34. package/src/components/dialogs/PilotCreateDialog.vue +20 -20
  35. package/src/components/dialogs/PilotEditDialog.vue +6 -6
  36. package/src/components/dialogs/PromoCodeCreateDialog.vue +9 -9
  37. package/src/components/dialogs/PromoCodeDialogFields.vue +64 -63
  38. package/src/components/dialogs/PromoCodeEditDialog.vue +11 -11
  39. package/src/components/dialogs/pilot-dialog.css +48 -48
  40. package/src/components/plan/PlanCycleToggle.vue +9 -16
  41. package/src/components/plan/PlanGrid.vue +30 -34
  42. package/src/components/plan/PriceSummary.vue +35 -35
  43. package/src/components/plan/PromoCodeInput.vue +26 -26
  44. package/src/components/plan/PublicBundleGrid.vue +32 -28
  45. package/src/components/plan-create-dialog/PlanCreateDialog.vue +50 -50
  46. package/src/components/plan-detail/PlanDetail.vue +178 -157
  47. package/src/components/plan-detail/PlanTitleEdit.vue +11 -11
  48. package/src/components/plan-list/PlanList.vue +116 -100
  49. package/src/components/plan-matrix/PlanMatrix.vue +97 -114
  50. package/src/components/plan-review/PlanReview.vue +61 -57
  51. package/src/components/plan-version-editor/PlanVersionEditor.vue +246 -203
  52. package/src/components/wizard-stepper/WizardStepper.vue +17 -17
  53. package/src/index.ts +1 -0
  54. package/src/pages-standard/AdminLayout.vue +58 -37
  55. package/src/pages-standard/AdminManifestErrorPage.vue +6 -6
  56. package/src/pages-standard/AuditPage.vue +3 -3
  57. package/src/pages-standard/BundlesPage.vue +37 -37
  58. package/src/pages-standard/DashboardPage.vue +22 -19
  59. package/src/pages-standard/DiscoveryPage.vue +55 -49
  60. package/src/pages-standard/EmailHistoryPage.vue +53 -71
  61. package/src/pages-standard/MarketingCatalogPage.vue +245 -221
  62. package/src/pages-standard/PilotsPage.vue +7 -6
  63. package/src/pages-standard/PlatformEmailPage.vue +18 -18
  64. package/src/pages-standard/PromoCodeDetailPage.vue +3 -3
  65. package/src/pages-standard/PromoCodesPage.vue +10 -7
  66. package/src/pages-standard/SuperAdminLoginPage.vue +39 -25
  67. package/src/pages-standard/SuperAdminSetupWizard.vue +44 -33
  68. package/src/pages-standard/TenantDetailPage.vue +7 -7
  69. package/src/pages-standard/TenantsPage.vue +16 -50
  70. package/src/pages-standard/bundles-page/BundleAccordionList.vue +13 -13
  71. package/src/pages-standard/discovery-page/CatalogEntryTransPanel.vue +24 -24
  72. package/src/pages-standard/discovery-page/DiscoveryCapList.vue +22 -22
  73. package/src/pages-standard/discovery-page/DiscoveryFeatureCard.vue +39 -39
  74. package/src/pages-standard/discovery-page/DiscoveryQuotaCard.vue +26 -26
  75. package/src/pages-standard/discovery-page/DiscoveryStatusControl.vue +1 -1
  76. package/src/pages-standard/discovery-page/discovery-ui.ts +10 -7
  77. package/src/pages-standard/marketing-catalog/MarketingCatalogAdmin.vue +2 -5
  78. package/src/pages-standard/plan-versions/PlanDiffCard.vue +27 -20
  79. package/src/pages-standard/plan-versions/PlanVersionsDiff.vue +24 -16
  80. package/src/pages-standard/plan-versions/PlanVersionsTimeline.vue +45 -45
  81. package/src/pages-standard/plans-page/PlanBundleOverview.vue +21 -15
  82. package/src/pages-standard/plans-page/PlanPublishDialog.vue +4 -4
  83. package/src/pages-standard/plans-page/PlansPageToast.vue +6 -6
  84. package/src/pages-standard/sa-theme.css +9 -687
  85. package/src/pages-standard/tenants/StatusPill.vue +13 -13
  86. package/src/pages-standard/tenants/format.ts +11 -12
  87. package/src/pages-tenant/LimitsRow.vue +4 -4
  88. package/src/pages-tenant/MySubscriptionBundlesPage.vue +70 -61
  89. package/src/pages-tenant/OnboardingConfigurator.vue +25 -25
  90. package/src/pages-tenant/PackageSnapshotPanel.vue +10 -16
  91. package/src/pages-tenant/PendingVersionBanner.vue +12 -12
  92. package/src/pages-tenant/PlanChangeWizard.vue +22 -76
  93. package/src/pages-tenant/TenantPlanSection.vue +19 -69
  94. package/src/pages-tenant/UsageBar.vue +7 -7
  95. package/src/pages-tenant/default-i18n.ts +113 -0
  96. package/src/pages-tenant/tenant-plan-section/BundlePreviewDialog.vue +14 -14
  97. package/src/pages-tenant/tenant-plan-section/TenantBundleStore.vue +10 -10
  98. package/src/pages-tenant/tenant-plan-section/TenantFeatureMatrix.vue +2 -2
  99. package/src/quasar/create-super-admin-app.ts +96 -1
  100. package/src/quasar/dark-bridge.ts +66 -0
  101. package/src/quasar/index.ts +1 -0
  102. package/src/ui/theme/_breakpoints.scss +34 -0
  103. package/src/ui/theme/base.css +50 -0
  104. package/src/ui/theme/components/body.css +23 -0
  105. package/src/ui/theme/components/button.css +158 -0
  106. package/src/ui/theme/components/card.css +74 -0
  107. package/src/ui/theme/components/field.css +38 -0
  108. package/src/ui/theme/components/hero.css +46 -0
  109. package/src/ui/theme/components/paginator.css +63 -0
  110. package/src/ui/theme/components/section.css +67 -0
  111. package/src/ui/theme/components/statistics.css +189 -0
  112. package/src/ui/theme/components/table.css +60 -0
  113. package/src/ui/theme/index.css +42 -0
  114. package/src/ui/theme/tokens.legacy.css +147 -0
  115. package/src/ui/theme/tokens.primitive.css +112 -0
  116. package/src/ui/theme/tokens.scale.css +103 -0
  117. package/src/ui/theme/tokens.semantic.dark.css +185 -0
  118. package/src/ui/theme/tokens.semantic.light.css +242 -0
  119. package/src/vue/use-sa-theme.ts +154 -0
@@ -66,8 +66,10 @@ const props = defineProps<{
66
66
 
67
67
  const msg = useSaMessages('planVersions');
68
68
 
69
+ import { identityAccentFor } from '../../client/identity-accents.js';
70
+
69
71
  function planAccent(planId: string): string {
70
- return props.planAccents?.[planId] ?? '#3f6bff';
72
+ return identityAccentFor(planId, props.planAccents ?? {});
71
73
  }
72
74
 
73
75
  const planDiffs = computed<SnapshotEntityDiff[]>(() => {
@@ -195,8 +197,8 @@ function directionFor(delta: number, polarity: 'higher' | 'lower'): VersionChang
195
197
  padding: 20px 28px;
196
198
  }
197
199
  .sa-pv-diff__overview {
198
- background: #fff;
199
- border: 1px solid var(--sa-border, var(--sa-border));
200
+ background: var(--sa-color-bg-surface);
201
+ border: 1px solid var(--sa-color-border);
200
202
  border-radius: 12px;
201
203
  padding: 16px 20px;
202
204
  margin-bottom: 18px;
@@ -208,26 +210,32 @@ function directionFor(delta: number, polarity: 'higher' | 'lower'): VersionChang
208
210
  width: 44px;
209
211
  height: 44px;
210
212
  border-radius: 10px;
211
- background: linear-gradient(135deg, #f59e0b, #d97706);
213
+ /* Invariant: the icon inside is explicitly white. The `warning` roles
214
+ * lighten in dark, which would leave it at 1.67:1 on its own badge. */
215
+ background: linear-gradient(
216
+ 135deg,
217
+ var(--sa-color-inverse-notice),
218
+ var(--sa-color-inverse-notice-strong)
219
+ );
212
220
  display: flex;
213
221
  align-items: center;
214
222
  justify-content: center;
215
223
  }
216
224
  .sa-pv-diff__legend {
217
- font-size: 11px;
225
+ font-size: var(--sa-text-xs);
218
226
  font-weight: 700;
219
227
  letter-spacing: 0.08em;
220
- color: var(--sa-muted, var(--sa-muted));
228
+ color: var(--sa-color-fg-muted);
221
229
  text-transform: uppercase;
222
230
  }
223
231
  .sa-pv-diff__title {
224
232
  font-family: var(--sa-font-head, system-ui, sans-serif);
225
233
  font-weight: 700;
226
- font-size: 18px;
227
- color: var(--sa-heading, var(--sa-heading));
234
+ font-size: var(--sa-text-xl);
235
+ color: var(--sa-color-fg-heading);
228
236
  }
229
237
  .sa-pv-diff__sep {
230
- color: var(--sa-muted, var(--sa-muted));
238
+ color: var(--sa-color-fg-muted);
231
239
  font-weight: 500;
232
240
  }
233
241
  .sa-pv-diff__spacer {
@@ -241,30 +249,30 @@ function directionFor(delta: number, polarity: 'higher' | 'lower'): VersionChang
241
249
  text-align: right;
242
250
  }
243
251
  .sa-pv-diff__stat-label {
244
- font-size: 10.5px;
252
+ font-size: var(--sa-text-xs);
245
253
  font-weight: 700;
246
254
  letter-spacing: 0.08em;
247
- color: var(--sa-muted, var(--sa-muted));
255
+ color: var(--sa-color-fg-muted);
248
256
  text-transform: uppercase;
249
257
  }
250
258
  .sa-pv-diff__stat-value {
251
259
  font-family: var(--sa-font-head, system-ui, sans-serif);
252
260
  font-weight: 700;
253
- font-size: 22px;
261
+ font-size: var(--sa-text-2xl);
254
262
  }
255
263
  .sa-pv-diff__stat-value--warn {
256
- color: var(--sa-warning, #b45309);
264
+ color: var(--sa-color-warning-fg);
257
265
  }
258
266
  .sa-pv-diff__stat-value--bad {
259
- color: var(--sa-negative, #dc2626);
267
+ color: var(--sa-color-negative);
260
268
  }
261
269
 
262
270
  .sa-pv-diff__section {
263
271
  margin: 22px 0 10px;
264
272
  font-family: var(--sa-font-head, system-ui, sans-serif);
265
- font-size: 14px;
273
+ font-size: var(--sa-text-lg);
266
274
  font-weight: 700;
267
- color: var(--sa-muted, var(--sa-muted));
275
+ color: var(--sa-color-fg-muted);
268
276
  text-transform: uppercase;
269
277
  letter-spacing: 0.08em;
270
278
  }
@@ -117,16 +117,16 @@ function metaText(s: CatalogSnapshot): string {
117
117
  .sa-pv-timeline {
118
118
  width: 280px;
119
119
  flex-shrink: 0;
120
- background: var(--sa-bg-surface, #ffffff);
121
- border-right: 1px solid var(--sa-border, var(--sa-border));
120
+ background: var(--sa-color-bg-surface);
121
+ border-right: 1px solid var(--sa-color-border);
122
122
  display: flex;
123
123
  flex-direction: column;
124
124
  overflow: hidden;
125
125
  }
126
126
  .sa-pv-timeline__head {
127
127
  padding: 14px 16px;
128
- border-bottom: 1px solid var(--sa-border, var(--sa-border));
129
- background: #fafbfc;
128
+ border-bottom: 1px solid var(--sa-color-border);
129
+ background: var(--sa-color-bg-surface-raised);
130
130
  }
131
131
  .sa-pv-timeline__row {
132
132
  display: flex;
@@ -134,16 +134,16 @@ function metaText(s: CatalogSnapshot): string {
134
134
  justify-content: space-between;
135
135
  }
136
136
  .sa-pv-timeline__title {
137
- font-size: 11px;
137
+ font-size: var(--sa-text-xs);
138
138
  font-weight: 700;
139
139
  letter-spacing: 0.08em;
140
- color: var(--sa-muted, var(--sa-muted));
140
+ color: var(--sa-color-fg-muted);
141
141
  text-transform: uppercase;
142
142
  }
143
143
  .sa-pv-timeline__count {
144
144
  margin-top: 2px;
145
- font-size: 11px;
146
- color: var(--sa-muted, var(--sa-muted));
145
+ font-size: var(--sa-text-xs);
146
+ color: var(--sa-color-fg-muted);
147
147
  }
148
148
 
149
149
  .sa-pv-timeline__list {
@@ -160,7 +160,7 @@ function metaText(s: CatalogSnapshot): string {
160
160
  top: 36px;
161
161
  bottom: -6px;
162
162
  width: 2px;
163
- background: var(--sa-border, var(--sa-border));
163
+ background: var(--sa-color-border);
164
164
  z-index: 0;
165
165
  }
166
166
  .sa-pv-timeline__btn {
@@ -182,11 +182,11 @@ function metaText(s: CatalogSnapshot): string {
182
182
  color: inherit;
183
183
  }
184
184
  .sa-pv-timeline__btn:hover:not(.sa-pv-timeline__btn--selected) {
185
- background: var(--sa-border-soft, var(--sa-border-soft));
185
+ background: var(--sa-color-border-soft);
186
186
  }
187
187
  .sa-pv-timeline__btn--selected {
188
- background: var(--sa-primary-soft, rgba(63, 107, 255, 0.08));
189
- border-color: var(--sa-primary-border, rgba(63, 107, 255, 0.18));
188
+ background: var(--sa-color-accent-surface);
189
+ border-color: var(--sa-color-accent-border);
190
190
  }
191
191
 
192
192
  .sa-pv-timeline__node {
@@ -200,19 +200,19 @@ function metaText(s: CatalogSnapshot): string {
200
200
  border: 2px solid;
201
201
  }
202
202
  .sa-pv-timeline__node--draft {
203
- background: var(--sa-warning-soft, rgba(245, 158, 11, 0.1));
204
- border-color: var(--sa-warning, #b45309);
205
- color: var(--sa-warning, #b45309);
203
+ background: var(--sa-color-warning-surface-strong);
204
+ border-color: var(--sa-color-warning-fg);
205
+ color: var(--sa-color-warning-fg);
206
206
  }
207
207
  .sa-pv-timeline__node--active {
208
- background: var(--sa-positive-soft, rgba(4, 120, 87, 0.1));
209
- border-color: var(--sa-positive, #047857);
210
- color: var(--sa-positive, #047857);
208
+ background: var(--sa-color-positive-surface);
209
+ border-color: var(--sa-color-positive);
210
+ color: var(--sa-color-positive-fg);
211
211
  }
212
212
  .sa-pv-timeline__node--archived {
213
- background: var(--sa-border-soft);
214
- border-color: var(--sa-muted, var(--sa-muted));
215
- color: var(--sa-muted, var(--sa-muted));
213
+ background: var(--sa-color-border-soft);
214
+ border-color: var(--sa-color-fg-muted);
215
+ color: var(--sa-color-fg-muted);
216
216
  }
217
217
  .sa-pv-timeline__node-dot {
218
218
  width: 6px;
@@ -235,50 +235,50 @@ function metaText(s: CatalogSnapshot): string {
235
235
  }
236
236
  .sa-pv-timeline__label {
237
237
  font-family: var(--sa-font-mono, ui-monospace, 'SF Mono', Menlo, monospace);
238
- font-size: 12px;
238
+ font-size: var(--sa-text-sm);
239
239
  font-weight: 700;
240
- color: var(--sa-heading, var(--sa-heading));
240
+ color: var(--sa-color-fg-heading);
241
241
  }
242
242
  .sa-pv-timeline__status {
243
- font-size: 9.5px;
243
+ font-size: var(--sa-text-2xs);
244
244
  font-weight: 700;
245
245
  letter-spacing: 0.06em;
246
246
  padding: 2px 6px;
247
247
  border-radius: 4px;
248
248
  }
249
249
  .sa-pv-timeline__status--draft {
250
- background: var(--sa-warning-soft, rgba(245, 158, 11, 0.1));
251
- color: var(--sa-warning, #b45309);
250
+ background: var(--sa-color-warning-surface-strong);
251
+ color: var(--sa-color-warning-fg);
252
252
  }
253
253
  .sa-pv-timeline__status--active {
254
- background: var(--sa-positive-soft, rgba(4, 120, 87, 0.1));
255
- color: var(--sa-positive, #047857);
254
+ background: var(--sa-color-positive-surface);
255
+ color: var(--sa-color-positive-fg);
256
256
  }
257
257
  .sa-pv-timeline__status--archived {
258
- background: var(--sa-border-soft);
259
- color: var(--sa-muted, var(--sa-muted));
258
+ background: var(--sa-color-border-soft);
259
+ color: var(--sa-color-fg-muted);
260
260
  }
261
261
  .sa-pv-timeline__vs {
262
- font-size: 9.5px;
262
+ font-size: var(--sa-text-2xs);
263
263
  font-weight: 700;
264
264
  letter-spacing: 0.06em;
265
- background: #fef3c7;
266
- color: #92400e;
265
+ background: var(--sa-color-warning-surface-strong);
266
+ color: var(--sa-color-warning-fg);
267
267
  padding: 2px 6px;
268
268
  border-radius: 4px;
269
269
  }
270
270
  .sa-pv-timeline__h2 {
271
- font-size: 12px;
271
+ font-size: var(--sa-text-sm);
272
272
  font-weight: 600;
273
- color: var(--sa-body, #1e293b);
273
+ color: var(--sa-color-fg-body);
274
274
  line-height: 1.3;
275
275
  white-space: nowrap;
276
276
  overflow: hidden;
277
277
  text-overflow: ellipsis;
278
278
  }
279
279
  .sa-pv-timeline__meta {
280
- font-size: 11px;
281
- color: var(--sa-muted, var(--sa-muted));
280
+ font-size: var(--sa-text-xs);
281
+ color: var(--sa-color-fg-muted);
282
282
  margin-top: 2px;
283
283
  display: flex;
284
284
  align-items: center;
@@ -287,10 +287,10 @@ function metaText(s: CatalogSnapshot): string {
287
287
 
288
288
  .sa-pv-timeline__foot {
289
289
  padding: 10px 14px;
290
- border-top: 1px solid var(--sa-border, var(--sa-border));
291
- background: #fafbfc;
292
- font-size: 11px;
293
- color: var(--sa-muted, var(--sa-muted));
290
+ border-top: 1px solid var(--sa-color-border);
291
+ background: var(--sa-color-bg-surface-raised);
292
+ font-size: var(--sa-text-xs);
293
+ color: var(--sa-color-fg-muted);
294
294
  }
295
295
  .sa-pv-timeline__hint {
296
296
  display: flex;
@@ -299,13 +299,13 @@ function metaText(s: CatalogSnapshot): string {
299
299
  }
300
300
  .sa-pv-timeline__clear-btn {
301
301
  margin-top: 6px;
302
- background: #fff;
303
- border: 1px solid var(--sa-border, var(--sa-border));
302
+ background: var(--sa-color-bg-surface);
303
+ border: 1px solid var(--sa-color-border);
304
304
  border-radius: 6px;
305
305
  padding: 4px 10px;
306
- font-size: 11px;
306
+ font-size: var(--sa-text-xs);
307
307
  font-weight: 600;
308
- color: var(--sa-body, #1e293b);
308
+ color: var(--sa-color-fg-body);
309
309
  cursor: pointer;
310
310
  }
311
311
  </style>
@@ -83,16 +83,22 @@ function compatLabel(bundle: BundleEntry): string {
83
83
  </script>
84
84
 
85
85
  <style scoped>
86
+ .sa-bundle {
87
+ display: flex;
88
+ flex-direction: column;
89
+ gap: 0;
90
+ background-color: var(--sa-color-bg-surface);
91
+ }
86
92
  .sa-bundles__count {
87
- font-size: 12px;
88
- color: var(--sa-muted);
89
- background: var(--sa-border);
93
+ font-size: var(--sa-text-sm);
94
+ color: var(--sa-color-fg-muted);
95
+ background: var(--sa-color-border);
90
96
  border-radius: 999px;
91
97
  padding: 1px 8px;
92
98
  }
93
99
  .sa-bundle-overview__empty {
94
- color: var(--sa-muted);
95
- font-size: 14px;
100
+ color: var(--sa-color-fg-muted);
101
+ font-size: var(--sa-text-lg);
96
102
  padding: 8px 0;
97
103
  }
98
104
  .sa-bundles__grid {
@@ -105,18 +111,18 @@ function compatLabel(bundle: BundleEntry): string {
105
111
  }
106
112
  .sa-bundle__label {
107
113
  font-weight: 600;
108
- color: var(--sa-heading);
114
+ color: var(--sa-color-fg-heading);
109
115
  }
110
116
  .sa-bundle__key {
111
- font-size: 11px;
112
- color: var(--sa-muted-light);
117
+ font-size: var(--sa-text-xs);
118
+ color: var(--sa-color-fg-subtle);
113
119
  font-family: monospace;
114
120
  }
115
121
  .sa-bundle__caption {
116
- font-size: 11px;
122
+ font-size: var(--sa-text-xs);
117
123
  text-transform: uppercase;
118
124
  letter-spacing: 0.04em;
119
- color: var(--sa-muted-light);
125
+ color: var(--sa-color-fg-subtle);
120
126
  margin-bottom: 4px;
121
127
  }
122
128
  .sa-bundle__chips {
@@ -125,17 +131,17 @@ function compatLabel(bundle: BundleEntry): string {
125
131
  gap: 4px;
126
132
  }
127
133
  .sa-bundle__chip {
128
- background: #eef2ff;
129
- color: #3730a3;
134
+ background: var(--sa-color-scheduled-surface);
135
+ color: var(--sa-color-scheduled-fg);
130
136
  }
131
137
  .sa-bundle__muted {
132
- color: var(--sa-muted-light);
138
+ color: var(--sa-color-fg-subtle);
133
139
  }
134
140
  .sa-bundle__compat {
135
141
  padding-top: 0;
136
142
  }
137
143
  .sa-bundle__plans {
138
- font-size: 13px;
139
- color: #334155;
144
+ font-size: var(--sa-text-md);
145
+ color: var(--sa-color-fg-body);
140
146
  }
141
147
  </style>
@@ -100,18 +100,18 @@ defineEmits<{
100
100
  .sa-publish-regression {
101
101
  margin: 0;
102
102
  padding-left: 18px;
103
- font-size: 13px;
104
- color: #334155;
103
+ font-size: var(--sa-text-md);
104
+ color: var(--sa-color-fg-body);
105
105
  }
106
106
  .sa-publish-regression li {
107
107
  margin: 4px 0;
108
108
  }
109
109
  .sa-publish-regression__old {
110
- color: var(--sa-muted-light);
110
+ color: var(--sa-color-fg-subtle);
111
111
  text-decoration: line-through;
112
112
  }
113
113
  .sa-publish-regression__new {
114
- color: #b91c1c;
114
+ color: var(--sa-color-negative-fg);
115
115
  font-weight: 600;
116
116
  }
117
117
  </style>
@@ -30,18 +30,18 @@ defineProps<{
30
30
  bottom: 24px;
31
31
  left: 50%;
32
32
  transform: translateX(-50%);
33
- background: var(--sa-heading);
34
- color: #fff;
33
+ background: var(--sa-color-inverse-bg);
34
+ color: var(--sa-color-fg-on-accent);
35
35
  padding: 12px 18px;
36
36
  border-radius: 10px;
37
37
  display: flex;
38
38
  align-items: center;
39
39
  gap: 10px;
40
40
  font:
41
- 500 13px 'Inter',
41
+ 500 var(--sa-text-md) 'Inter',
42
42
  system-ui,
43
43
  sans-serif;
44
- box-shadow: 0 12px 40px rgba(15, 23, 42, 0.3);
44
+ box-shadow: 0 12px 40px var(--sa-shadow-tint-4);
45
45
  z-index: 6000;
46
46
  max-width: 80vw;
47
47
  }
@@ -49,8 +49,8 @@ defineProps<{
49
49
  width: 22px;
50
50
  height: 22px;
51
51
  border-radius: 50%;
52
- background: #10b981;
53
- color: #fff;
52
+ background: var(--sa-color-positive-surface-strong);
53
+ color: var(--sa-color-positive-fg);
54
54
  display: grid;
55
55
  place-items: center;
56
56
  flex: 0 0 auto;