@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
@@ -490,12 +490,12 @@ async function submit(): Promise<void> {
490
490
 
491
491
  <style scoped>
492
492
  .bcp {
493
- background: #fff;
494
- border: 1px solid #cbd5e1;
493
+ background: var(--sa-color-bg-surface);
494
+ border: 1px solid var(--sa-color-border-strong);
495
495
  border-radius: 12px;
496
496
  display: flex;
497
497
  flex-direction: column;
498
- box-shadow: 0 8px 24px rgba(15, 23, 42, 0.08);
498
+ box-shadow: 0 8px 24px var(--sa-shadow-tint-2);
499
499
  }
500
500
  .bcp-head {
501
501
  display: flex;
@@ -503,18 +503,18 @@ async function submit(): Promise<void> {
503
503
  justify-content: space-between;
504
504
  gap: 16px;
505
505
  padding: 18px 22px 12px;
506
- border-bottom: 1px solid var(--sa-border);
506
+ border-bottom: 1px solid var(--sa-color-border);
507
507
  }
508
508
  .bcp-title {
509
- font-size: 18px;
509
+ font-size: var(--sa-text-xl);
510
510
  font-weight: 700;
511
- color: var(--sa-heading);
511
+ color: var(--sa-color-fg-heading);
512
512
  letter-spacing: -0.01em;
513
513
  }
514
514
  .bcp-sub {
515
515
  margin-top: 4px;
516
- font-size: 12.5px;
517
- color: var(--sa-muted);
516
+ font-size: var(--sa-text-md);
517
+ color: var(--sa-color-fg-muted);
518
518
  max-width: 580px;
519
519
  line-height: 1.5;
520
520
  }
@@ -522,13 +522,13 @@ async function submit(): Promise<void> {
522
522
  background: transparent;
523
523
  border: 0;
524
524
  cursor: pointer;
525
- color: var(--sa-muted);
525
+ color: var(--sa-color-fg-muted);
526
526
  padding: 4px;
527
527
  border-radius: 4px;
528
528
  }
529
529
  .bcp-close:hover {
530
- background: var(--sa-border-soft);
531
- color: var(--sa-heading);
530
+ background: var(--sa-color-border-soft);
531
+ color: var(--sa-color-fg-heading);
532
532
  }
533
533
  .bcp-body {
534
534
  padding: 16px 22px;
@@ -552,22 +552,22 @@ async function submit(): Promise<void> {
552
552
  width: 24px;
553
553
  height: 24px;
554
554
  border-radius: 999px;
555
- background: var(--sa-primary);
556
- color: #fff;
555
+ background: var(--sa-color-accent);
556
+ color: var(--sa-color-fg-on-accent);
557
557
  font:
558
- 700 12px 'JetBrains Mono',
558
+ 700 var(--sa-text-sm) 'JetBrains Mono',
559
559
  ui-monospace,
560
560
  monospace;
561
561
  flex: 0 0 auto;
562
562
  }
563
563
  .bcp-section-title {
564
- font-size: 14px;
564
+ font-size: var(--sa-text-lg);
565
565
  font-weight: 700;
566
- color: var(--sa-heading);
566
+ color: var(--sa-color-fg-heading);
567
567
  }
568
568
  .bcp-section-sub {
569
- font-size: 12px;
570
- color: var(--sa-muted);
569
+ font-size: var(--sa-text-sm);
570
+ color: var(--sa-color-fg-muted);
571
571
  margin-top: 2px;
572
572
  line-height: 1.4;
573
573
  }
@@ -585,27 +585,27 @@ async function submit(): Promise<void> {
585
585
  gap: 4px;
586
586
  }
587
587
  .bcp-field-label {
588
- font-size: 11.5px;
588
+ font-size: var(--sa-text-sm);
589
589
  font-weight: 600;
590
- color: var(--sa-muted-dark);
590
+ color: var(--sa-color-fg-secondary);
591
591
  }
592
592
  .bcp-field-hint {
593
- font-size: 10.5px;
594
- color: var(--sa-muted-light);
593
+ font-size: var(--sa-text-xs);
594
+ color: var(--sa-color-fg-subtle);
595
595
  font-weight: 500;
596
596
  }
597
597
  .bcp-input {
598
598
  padding: 7px 10px;
599
- border: 1px solid #cbd5e1;
599
+ border: 1px solid var(--sa-color-border-strong);
600
600
  border-radius: 6px;
601
601
  font-family: inherit;
602
- font-size: 13px;
603
- color: var(--sa-heading);
604
- background: #fff;
602
+ font-size: var(--sa-text-md);
603
+ color: var(--sa-color-fg-heading);
604
+ background: var(--sa-color-bg-surface);
605
605
  }
606
606
  .bcp-input--mono {
607
607
  font:
608
- 600 13px 'JetBrains Mono',
608
+ 600 var(--sa-text-md) 'JetBrains Mono',
609
609
  ui-monospace,
610
610
  monospace;
611
611
  letter-spacing: 0.02em;
@@ -616,7 +616,7 @@ async function submit(): Promise<void> {
616
616
  .bcp-input-grp {
617
617
  display: inline-flex;
618
618
  align-items: stretch;
619
- border: 1px solid #cbd5e1;
619
+ border: 1px solid var(--sa-color-border-strong);
620
620
  border-radius: 6px;
621
621
  }
622
622
  .bcp-input-grp .bcp-input {
@@ -627,31 +627,31 @@ async function submit(): Promise<void> {
627
627
  display: inline-flex;
628
628
  align-items: center;
629
629
  padding: 0 10px;
630
- font-size: 11.5px;
631
- color: var(--sa-muted);
632
- background: var(--sa-bg-surface-2);
633
- border-left: 1px solid var(--sa-border);
630
+ font-size: var(--sa-text-sm);
631
+ color: var(--sa-color-fg-muted);
632
+ background: var(--sa-color-bg-sunken);
633
+ border-left: 1px solid var(--sa-color-border);
634
634
  border-radius: 0 6px 6px 0;
635
635
  }
636
636
  .bcp-error-inline {
637
- font-size: 11.5px;
638
- color: #b91c1c;
637
+ font-size: var(--sa-text-sm);
638
+ color: var(--sa-color-negative-fg);
639
639
  }
640
640
  .bcp-error {
641
641
  padding: 10px 12px;
642
- background: #fef2f2;
643
- border: 1px solid #fecaca;
642
+ background: var(--sa-color-negative-surface);
643
+ border: 1px solid var(--sa-color-negative-border);
644
644
  border-radius: 6px;
645
- color: #b91c1c;
646
- font-size: 12.5px;
645
+ color: var(--sa-color-negative-fg);
646
+ font-size: var(--sa-text-md);
647
647
  }
648
648
  .bcp-foot {
649
649
  display: flex;
650
650
  align-items: center;
651
651
  gap: 10px;
652
652
  padding: 12px 22px;
653
- border-top: 1px solid var(--sa-border);
654
- background: var(--sa-bg-surface-2);
653
+ border-top: 1px solid var(--sa-color-border);
654
+ background: var(--sa-color-bg-sunken);
655
655
  border-radius: 0 0 12px 12px;
656
656
  }
657
657
  .bcp-foot-hint {
@@ -659,36 +659,36 @@ async function submit(): Promise<void> {
659
659
  display: inline-flex;
660
660
  align-items: center;
661
661
  gap: 6px;
662
- font-size: 12px;
663
- color: var(--sa-muted-dark);
662
+ font-size: var(--sa-text-sm);
663
+ color: var(--sa-color-fg-secondary);
664
664
  }
665
665
  .bcp-foot-hint--warn {
666
- color: #b91c1c;
666
+ color: var(--sa-color-negative-fg);
667
667
  font-weight: 600;
668
668
  }
669
669
  .bcp-btn {
670
670
  padding: 7px 14px;
671
- background: #fff;
672
- border: 1px solid #cbd5e1;
671
+ background: var(--sa-color-bg-surface);
672
+ border: 1px solid var(--sa-color-border-strong);
673
673
  border-radius: 6px;
674
674
  cursor: pointer;
675
- font-size: 12.5px;
675
+ font-size: var(--sa-text-md);
676
676
  font-family: inherit;
677
- color: var(--sa-heading);
677
+ color: var(--sa-color-fg-heading);
678
678
  }
679
679
  .bcp-btn:hover:not(:disabled) {
680
- background: var(--sa-bg-surface-2);
680
+ background: var(--sa-color-bg-sunken);
681
681
  }
682
682
  .bcp-btn:disabled {
683
683
  cursor: not-allowed;
684
684
  opacity: 0.5;
685
685
  }
686
686
  .bcp-btn--primary {
687
- background: var(--sa-primary);
688
- border-color: var(--sa-primary);
689
- color: #fff;
687
+ background: var(--sa-color-accent);
688
+ border-color: var(--sa-color-accent);
689
+ color: var(--sa-color-fg-on-accent);
690
690
  }
691
691
  .bcp-btn--primary:hover:not(:disabled) {
692
- background: var(--sa-primary-strong);
692
+ background: var(--sa-color-accent-strong);
693
693
  }
694
694
  </style>
@@ -151,11 +151,11 @@ function onToggle(featureKey: string): void {
151
151
  gap: 6px;
152
152
  }
153
153
  .bd-features-group-label {
154
- font-size: 10.5px;
154
+ font-size: var(--sa-text-xs);
155
155
  font-weight: 700;
156
156
  text-transform: uppercase;
157
157
  letter-spacing: 0.08em;
158
- color: var(--sa-muted);
158
+ color: var(--sa-color-fg-muted);
159
159
  }
160
160
  .bd-features-row {
161
161
  display: flex;
@@ -167,31 +167,31 @@ function onToggle(featureKey: string): void {
167
167
  align-items: center;
168
168
  gap: 6px;
169
169
  padding: 6px 10px;
170
- background: #fff;
171
- border: 1px solid var(--sa-border);
170
+ background: var(--sa-color-bg-surface);
171
+ border: 1px solid var(--sa-color-border);
172
172
  border-radius: 999px;
173
173
  cursor: pointer;
174
174
  font-family: inherit;
175
- font-size: 12px;
176
- color: var(--sa-heading);
175
+ font-size: var(--sa-text-sm);
176
+ color: var(--sa-color-fg-heading);
177
177
  transition:
178
178
  background 0.12s,
179
179
  border-color 0.12s,
180
180
  color 0.12s;
181
181
  }
182
182
  .bd-feature-pill:hover:not(:disabled) {
183
- background: var(--sa-bg-surface-2);
184
- border-color: #cbd5e1;
183
+ background: var(--sa-color-bg-sunken);
184
+ border-color: var(--sa-color-border-strong);
185
185
  }
186
186
  .bd-feature-pill.on {
187
- background: #dbeafe;
188
- border-color: #93c5fd;
189
- color: #1e40af;
187
+ background: var(--sa-color-info-surface-strong);
188
+ border-color: var(--sa-color-info-border);
189
+ color: var(--sa-color-info-fg);
190
190
  }
191
191
  .bd-feature-pill.overlap {
192
- border-color: #fecaca;
193
- background: #fef2f2;
194
- color: #b91c1c;
192
+ border-color: var(--sa-color-negative-border);
193
+ background: var(--sa-color-negative-surface);
194
+ color: var(--sa-color-negative-fg);
195
195
  }
196
196
  .bd-feature-pill:disabled {
197
197
  cursor: not-allowed;
@@ -201,22 +201,22 @@ function onToggle(featureKey: string): void {
201
201
  }
202
202
  .bd-feature-key {
203
203
  font:
204
- 600 10px 'JetBrains Mono',
204
+ 600 var(--sa-text-2xs) 'JetBrains Mono',
205
205
  ui-monospace,
206
206
  monospace;
207
- color: var(--sa-muted-light);
207
+ color: var(--sa-color-fg-subtle);
208
208
  margin-left: 4px;
209
209
  }
210
210
  .bd-feature-pill.on .bd-feature-key {
211
- color: var(--sa-primary);
211
+ color: var(--sa-color-accent);
212
212
  }
213
213
  .bd-feature-pill.overlap .bd-feature-key {
214
- color: #b91c1c;
214
+ color: var(--sa-color-negative-fg);
215
215
  }
216
216
  .bd-features-empty {
217
217
  padding: 12px;
218
- color: var(--sa-muted-light);
218
+ color: var(--sa-color-fg-subtle);
219
219
  font-style: italic;
220
- font-size: 12.5px;
220
+ font-size: var(--sa-text-md);
221
221
  }
222
222
  </style>
@@ -182,8 +182,8 @@ function onToggle(planKey: string): void {
182
182
  gap: 10px;
183
183
  }
184
184
  .bv-compat-hint {
185
- font-size: 11.5px;
186
- color: var(--sa-muted);
185
+ font-size: var(--sa-text-sm);
186
+ color: var(--sa-color-fg-muted);
187
187
  line-height: 1.5;
188
188
  }
189
189
  .bv-compat-grid {
@@ -196,27 +196,27 @@ function onToggle(planKey: string): void {
196
196
  flex-direction: column;
197
197
  gap: 6px;
198
198
  padding: 10px 12px;
199
- background: #fff;
200
- border: 1px solid var(--sa-border);
199
+ background: var(--sa-color-bg-surface);
200
+ border: 1px solid var(--sa-color-border);
201
201
  border-radius: 8px;
202
202
  cursor: pointer;
203
203
  text-align: left;
204
204
  font-family: inherit;
205
- color: var(--sa-heading);
205
+ color: var(--sa-color-fg-heading);
206
206
  transition:
207
207
  background 0.12s,
208
208
  border-color 0.12s;
209
209
  }
210
210
  .bv-compat-card:hover:not(:disabled) {
211
- background: var(--sa-bg-surface-2);
211
+ background: var(--sa-color-bg-sunken);
212
212
  }
213
213
  .bv-compat-card.on {
214
- border-color: var(--sa-primary);
215
- background: var(--sa-primary-50);
214
+ border-color: var(--sa-color-accent);
215
+ background: var(--sa-color-accent-surface-strong);
216
216
  }
217
217
  .bv-compat-card.warn {
218
- border-color: #fca5a5;
219
- background: #fef2f2;
218
+ border-color: var(--sa-color-negative-border);
219
+ background: var(--sa-color-negative-surface);
220
220
  }
221
221
  .bv-compat-card:disabled {
222
222
  cursor: not-allowed;
@@ -232,12 +232,12 @@ function onToggle(planKey: string): void {
232
232
  height: 26px;
233
233
  display: grid;
234
234
  place-items: center;
235
- background: #e0e7ff;
236
- color: #4338ca;
237
- border: 1px solid #c7d2fe;
235
+ background: var(--sa-color-scheduled-surface-strong);
236
+ color: var(--sa-color-scheduled-fg);
237
+ border: 1px solid var(--sa-color-scheduled-border);
238
238
  border-radius: 6px;
239
239
  font:
240
- 700 9px 'JetBrains Mono',
240
+ 700 var(--sa-text-2xs) 'JetBrains Mono',
241
241
  ui-monospace,
242
242
  monospace;
243
243
  letter-spacing: 0.04em;
@@ -248,32 +248,32 @@ function onToggle(planKey: string): void {
248
248
  min-width: 0;
249
249
  }
250
250
  .bv-compat-name {
251
- font-size: 13px;
251
+ font-size: var(--sa-text-md);
252
252
  font-weight: 600;
253
253
  }
254
254
  .bv-compat-key {
255
255
  font:
256
- 500 11px 'JetBrains Mono',
256
+ 500 var(--sa-text-xs) 'JetBrains Mono',
257
257
  ui-monospace,
258
258
  monospace;
259
- color: var(--sa-muted);
259
+ color: var(--sa-color-fg-muted);
260
260
  }
261
261
  .bv-compat-check {
262
- color: var(--sa-primary);
262
+ color: var(--sa-color-accent);
263
263
  display: inline-flex;
264
264
  }
265
265
  .bv-compat-overlap {
266
266
  padding: 6px 8px;
267
- background: #fff;
268
- border: 1px dashed #fecaca;
267
+ background: var(--sa-color-bg-surface);
268
+ border: 1px dashed var(--sa-color-negative-border);
269
269
  border-radius: 6px;
270
270
  display: flex;
271
271
  flex-direction: column;
272
272
  gap: 4px;
273
- color: #b91c1c;
273
+ color: var(--sa-color-negative-fg);
274
274
  }
275
275
  .bv-compat-overlap-head {
276
- font-size: 11px;
276
+ font-size: var(--sa-text-xs);
277
277
  font-weight: 700;
278
278
  text-transform: uppercase;
279
279
  letter-spacing: 0.06em;
@@ -283,24 +283,24 @@ function onToggle(planKey: string): void {
283
283
  align-items: center;
284
284
  gap: 5px;
285
285
  flex-wrap: wrap;
286
- font-size: 11.5px;
286
+ font-size: var(--sa-text-sm);
287
287
  }
288
288
  .bv-compat-overlap-kind {
289
- color: #7f1d1d;
289
+ color: var(--sa-color-negative-fg);
290
290
  font-weight: 600;
291
291
  }
292
292
  .bv-compat-overlap-chip {
293
293
  padding: 1px 6px;
294
- border: 1px solid #fecaca;
294
+ border: 1px solid var(--sa-color-negative-border);
295
295
  border-radius: 4px;
296
- background: #fff;
297
- color: #b91c1c;
296
+ background: var(--sa-color-bg-surface);
297
+ color: var(--sa-color-negative-fg);
298
298
  }
299
299
  .bv-compat-empty {
300
300
  padding: 12px;
301
- color: var(--sa-muted-light);
301
+ color: var(--sa-color-fg-subtle);
302
302
  font-style: italic;
303
- font-size: 12.5px;
303
+ font-size: var(--sa-text-md);
304
304
  text-align: center;
305
305
  }
306
306
  .bv-compat-summary {
@@ -308,11 +308,11 @@ function onToggle(planKey: string): void {
308
308
  align-items: flex-start;
309
309
  gap: 8px;
310
310
  padding: 10px 12px;
311
- background: #fef2f2;
312
- border: 1px solid #fecaca;
311
+ background: var(--sa-color-negative-surface);
312
+ border: 1px solid var(--sa-color-negative-border);
313
313
  border-radius: 8px;
314
- color: #b91c1c;
315
- font-size: 12.5px;
314
+ color: var(--sa-color-negative-fg);
315
+ font-size: var(--sa-text-md);
316
316
  line-height: 1.5;
317
317
  }
318
318
  .bv-compat-summary-ico {
@@ -132,20 +132,20 @@ function quotaUnit(q: DiscoveredQuota): string {
132
132
  align-items: center;
133
133
  gap: 10px;
134
134
  padding: 8px 10px;
135
- background: #fff;
136
- border: 1px solid var(--sa-border);
135
+ background: var(--sa-color-bg-surface);
136
+ border: 1px solid var(--sa-color-border);
137
137
  border-radius: 8px;
138
138
  transition:
139
139
  background 0.12s,
140
140
  border-color 0.12s;
141
141
  }
142
142
  .bd-quota-row.on {
143
- background: #f0f9ff;
144
- border-color: #bae6fd;
143
+ background: var(--sa-color-quota-surface);
144
+ border-color: var(--sa-color-quota-border);
145
145
  }
146
146
  .bd-quota-row.overlap {
147
- border-color: #fecaca;
148
- background: #fef2f2;
147
+ border-color: var(--sa-color-negative-border);
148
+ background: var(--sa-color-negative-surface);
149
149
  }
150
150
  .bd-quota-toggle {
151
151
  display: inline-flex;
@@ -153,16 +153,16 @@ function quotaUnit(q: DiscoveredQuota): string {
153
153
  justify-content: center;
154
154
  width: 22px;
155
155
  height: 22px;
156
- background: #fff;
157
- border: 1px solid #cbd5e1;
156
+ background: var(--sa-color-bg-surface);
157
+ border: 1px solid var(--sa-color-border-strong);
158
158
  border-radius: 6px;
159
159
  cursor: pointer;
160
- color: var(--sa-muted-dark);
160
+ color: var(--sa-color-fg-secondary);
161
161
  }
162
162
  .bd-quota-row.on .bd-quota-toggle {
163
- background: var(--sa-primary);
164
- border-color: var(--sa-primary);
165
- color: #fff;
163
+ background: var(--sa-color-accent);
164
+ border-color: var(--sa-color-accent);
165
+ color: var(--sa-color-fg-on-accent);
166
166
  }
167
167
  .bd-quota-toggle:disabled {
168
168
  cursor: not-allowed;
@@ -174,16 +174,16 @@ function quotaUnit(q: DiscoveredQuota): string {
174
174
  min-width: 0;
175
175
  }
176
176
  .bd-quota-label {
177
- font-size: 13px;
177
+ font-size: var(--sa-text-md);
178
178
  font-weight: 600;
179
- color: var(--sa-heading);
179
+ color: var(--sa-color-fg-heading);
180
180
  }
181
181
  .bd-quota-key {
182
182
  font:
183
- 500 10.5px 'JetBrains Mono',
183
+ 500 var(--sa-text-xs) 'JetBrains Mono',
184
184
  ui-monospace,
185
185
  monospace;
186
- color: var(--sa-muted-light);
186
+ color: var(--sa-color-fg-subtle);
187
187
  }
188
188
  .bd-quota-valwrap {
189
189
  display: inline-flex;
@@ -193,30 +193,30 @@ function quotaUnit(q: DiscoveredQuota): string {
193
193
  .bd-quota-val {
194
194
  width: 90px;
195
195
  padding: 5px 8px;
196
- border: 1px solid #cbd5e1;
196
+ border: 1px solid var(--sa-color-border-strong);
197
197
  border-radius: 6px;
198
198
  font:
199
- 600 13px 'JetBrains Mono',
199
+ 600 var(--sa-text-md) 'JetBrains Mono',
200
200
  ui-monospace,
201
201
  monospace;
202
202
  text-align: right;
203
- background: #fff;
204
- color: var(--sa-heading);
203
+ background: var(--sa-color-bg-surface);
204
+ color: var(--sa-color-fg-heading);
205
205
  }
206
206
  .bd-quota-val:disabled {
207
- background: var(--sa-border-soft);
208
- color: var(--sa-muted-light);
207
+ background: var(--sa-color-border-soft);
208
+ color: var(--sa-color-fg-subtle);
209
209
  cursor: not-allowed;
210
210
  }
211
211
  .bd-quota-unit {
212
- font-size: 11.5px;
213
- color: var(--sa-muted);
212
+ font-size: var(--sa-text-sm);
213
+ color: var(--sa-color-fg-muted);
214
214
  min-width: 32px;
215
215
  }
216
216
  .bd-quotas-empty {
217
217
  padding: 12px;
218
- color: var(--sa-muted-light);
218
+ color: var(--sa-color-fg-subtle);
219
219
  font-style: italic;
220
- font-size: 12.5px;
220
+ font-size: var(--sa-text-md);
221
221
  }
222
222
  </style>
@@ -147,28 +147,28 @@ const supersededTail = computed(() =>
147
147
  padding: 12px 14px;
148
148
  border-radius: 8px;
149
149
  border: 1px solid transparent;
150
- font-size: 13px;
150
+ font-size: var(--sa-text-md);
151
151
  line-height: 1.4;
152
152
  }
153
153
  .bv-status-live {
154
- background: var(--sa-positive-bg);
155
- border-color: #a7f3d0;
156
- color: #065f46;
154
+ background: var(--sa-color-positive-surface);
155
+ border-color: var(--sa-color-positive-border);
156
+ color: var(--sa-color-positive-fg);
157
157
  }
158
158
  .bv-status-scheduled {
159
- background: var(--sa-warning-bg);
160
- border-color: #fde68a;
161
- color: #92400e;
159
+ background: var(--sa-color-warning-surface);
160
+ border-color: var(--sa-color-warning-border);
161
+ color: var(--sa-color-warning-fg);
162
162
  }
163
163
  .bv-status-superseded {
164
- background: var(--sa-border-soft);
165
- border-color: #cbd5e1;
166
- color: var(--sa-muted-dark);
164
+ background: var(--sa-color-border-soft);
165
+ border-color: var(--sa-color-border-strong);
166
+ color: var(--sa-color-fg-secondary);
167
167
  }
168
168
  .bv-status-draft {
169
- background: var(--sa-primary-50);
170
- border-color: #bfdbfe;
171
- color: #1e40af;
169
+ background: var(--sa-color-accent-surface-strong);
170
+ border-color: var(--sa-color-info-border);
171
+ color: var(--sa-color-info-fg);
172
172
  }
173
173
  .bv-status-icon {
174
174
  flex: 0 0 auto;
@@ -179,11 +179,11 @@ const supersededTail = computed(() =>
179
179
  min-width: 0;
180
180
  }
181
181
  .bv-status-warn {
182
- color: #b45309;
182
+ color: var(--sa-color-warning-fg);
183
183
  font-weight: 500;
184
184
  }
185
185
  .bv-status-ok {
186
- color: #047857;
186
+ color: var(--sa-color-positive-fg);
187
187
  font-weight: 500;
188
188
  }
189
189
  .bv-status-discard {
@@ -191,16 +191,16 @@ const supersededTail = computed(() =>
191
191
  align-items: center;
192
192
  gap: 5px;
193
193
  padding: 6px 10px;
194
- background: #fff;
195
- border: 1px solid var(--sa-border);
194
+ background: var(--sa-color-bg-surface);
195
+ border: 1px solid var(--sa-color-border);
196
196
  border-radius: 6px;
197
197
  cursor: pointer;
198
- font-size: 12px;
199
- color: #b91c1c;
198
+ font-size: var(--sa-text-sm);
199
+ color: var(--sa-color-negative-fg);
200
200
  font-family: inherit;
201
201
  }
202
202
  .bv-status-discard:hover {
203
- background: #fef2f2;
204
- border-color: #fecaca;
203
+ background: var(--sa-color-negative-surface);
204
+ border-color: var(--sa-color-negative-border);
205
205
  }
206
206
  </style>