@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
@@ -272,10 +272,7 @@
272
272
  <span
273
273
  v-if="hasFeature(p, fKey)"
274
274
  class="pm-check"
275
- :style="{
276
- background: planAccent(p.planKey) + '15',
277
- color: planAccent(p.planKey),
278
- }"
275
+ :style="identityChipStyle(planAccent(p.planKey))"
279
276
  >
280
277
  <svg
281
278
  width="12"
@@ -323,10 +320,7 @@
323
320
  <span
324
321
  v-if="hasBundle(p, bKey)"
325
322
  class="pm-check"
326
- :style="{
327
- background: planAccent(p.planKey) + '15',
328
- color: planAccent(p.planKey),
329
- }"
323
+ :style="identityChipStyle(planAccent(p.planKey))"
330
324
  >
331
325
  <svg
332
326
  width="12"
@@ -384,6 +378,7 @@ import { computed } from 'vue';
384
378
  */
385
379
  const NBSP = '\u00A0';
386
380
  import type { PlanRow, PlanVersionRow } from '@saasicat/types';
381
+ import { identityAccentFor, identityChipStyle } from '../../client/identity-accents.js';
387
382
  import { formatMessage } from '../../client/i18n/format.js';
388
383
  import { formatCurrency } from '../../client/i18n/currency.js';
389
384
  import { useSaMessages, useSuperAdminI18n } from '../../vue/use-super-admin-i18n.js';
@@ -477,24 +472,12 @@ function validFromLabel(validFrom: string): string {
477
472
  return formatMessage(msg.value.matrix.validFrom, { date: validFrom.slice(0, 10) });
478
473
  }
479
474
 
480
- const DEFAULT_ACCENTS: Record<string, string> = {
481
- STARTER: '#64748b',
482
- STANDARD: '#2563eb',
483
- PRO: '#7c3aed',
484
- PROFESSIONAL: '#7c3aed',
485
- BUSINESS: '#0ea5e9',
486
- ENTERPRISE: '#0f766e',
487
- BASIC: '#475569',
488
- };
489
- const FALLBACK_ACCENTS = ['#2563eb', '#7c3aed', '#0f766e', '#f59e0b', '#0ea5e9', '#ef4444'];
490
-
491
475
  function planAccent(planKey: string): string {
492
- const provided = props.planAccents[planKey];
493
- if (provided) return provided;
494
- const def = DEFAULT_ACCENTS[planKey];
495
- if (def) return def;
496
- const idx = props.plans.findIndex((p) => p.planKey === planKey);
497
- return FALLBACK_ACCENTS[idx % FALLBACK_ACCENTS.length] ?? FALLBACK_ACCENTS[0]!;
476
+ return identityAccentFor(
477
+ planKey,
478
+ props.planAccents,
479
+ props.plans.findIndex((p) => p.planKey === planKey),
480
+ );
498
481
  }
499
482
 
500
483
  const resolvedPlans = computed<ResolvedPlan[]>(() =>
@@ -657,16 +640,16 @@ function formatQuota(v: number | undefined): string {
657
640
  <style scoped>
658
641
  .pm {
659
642
  padding: 22px 26px;
660
- background: var(--sa-bg-app);
661
- color: var(--sa-heading);
643
+ background: var(--sa-color-bg-app);
644
+ color: var(--sa-color-fg-heading);
662
645
  font-family: var(--sa-font-body);
663
646
  min-height: 100%;
664
647
  box-sizing: border-box;
665
648
  }
666
649
 
667
650
  .pm-card {
668
- background: var(--sa-bg-surface);
669
- border: 1px solid var(--sa-border);
651
+ background: var(--sa-color-bg-surface);
652
+ border: 1px solid var(--sa-color-border);
670
653
  border-radius: 10px;
671
654
  }
672
655
  .pm-wrap {
@@ -677,11 +660,11 @@ function formatQuota(v: number | undefined): string {
677
660
  width: 100%;
678
661
  border-collapse: separate;
679
662
  border-spacing: 0;
680
- font-size: 13px;
663
+ font-size: var(--sa-text-md);
681
664
  }
682
665
  .pm-head th {
683
- background: #fbfbfd;
684
- border-bottom: 1px solid var(--sa-border);
666
+ background: var(--sa-color-bg-surface-raised);
667
+ border-bottom: 1px solid var(--sa-color-border);
685
668
  }
686
669
  .pm-rowhead-cell {
687
670
  text-align: left;
@@ -691,10 +674,10 @@ function formatQuota(v: number | undefined): string {
691
674
  min-width: 240px;
692
675
  }
693
676
  .pm-component-kicker {
694
- font-size: 11px;
677
+ font-size: var(--sa-text-xs);
695
678
  text-transform: uppercase;
696
679
  letter-spacing: 0.1em;
697
- color: var(--sa-muted-light);
680
+ color: var(--sa-color-fg-subtle);
698
681
  font-weight: 700;
699
682
  }
700
683
 
@@ -704,8 +687,8 @@ function formatQuota(v: number | undefined): string {
704
687
  min-width: 200px;
705
688
  }
706
689
  .pm-plan-card {
707
- background: #fff;
708
- border: 1px solid var(--sa-border);
690
+ background: var(--sa-color-bg-surface);
691
+ border: 1px solid var(--sa-color-border);
709
692
  border-top: 3px solid;
710
693
  border-radius: 10px;
711
694
  padding: 14px 14px 12px;
@@ -718,34 +701,34 @@ function formatQuota(v: number | undefined): string {
718
701
  align-items: flex-start;
719
702
  }
720
703
  .pm-plan-key {
721
- font: 700 11px var(--sa-font-mono);
704
+ font: 700 var(--sa-text-xs) var(--sa-font-mono);
722
705
  letter-spacing: 0.08em;
723
- color: var(--sa-muted-dark);
706
+ color: var(--sa-color-fg-secondary);
724
707
  }
725
708
  .pm-plan-label {
726
- font-size: 17px;
709
+ font-size: var(--sa-text-xl);
727
710
  font-weight: 700;
728
711
  letter-spacing: -0.02em;
729
- color: var(--sa-heading);
712
+ color: var(--sa-color-fg-heading);
730
713
  }
731
714
  .pm-plan-desc {
732
- font-size: 11.5px;
733
- color: var(--sa-muted);
715
+ font-size: var(--sa-text-sm);
716
+ color: var(--sa-color-fg-muted);
734
717
  margin-top: 4px;
735
718
  line-height: 1.4;
736
719
  min-height: 32px;
737
720
  }
738
721
  .pm-plan-divider {
739
722
  height: 1px;
740
- background: var(--sa-border);
723
+ background: var(--sa-color-border);
741
724
  margin: 10px 0;
742
725
  }
743
726
  .pm-kebab {
744
727
  background: none;
745
728
  border: 0;
746
- color: var(--sa-muted-light);
729
+ color: var(--sa-color-fg-subtle);
747
730
  cursor: pointer;
748
- font-size: 16px;
731
+ font-size: var(--sa-text-lg);
749
732
  padding: 0;
750
733
  line-height: 1;
751
734
  }
@@ -763,31 +746,31 @@ function formatQuota(v: number | undefined): string {
763
746
  flex-wrap: wrap;
764
747
  }
765
748
  .pm-price-big {
766
- font-size: 20px;
749
+ font-size: var(--sa-text-xl);
767
750
  font-weight: 700;
768
751
  letter-spacing: -0.02em;
769
752
  }
770
753
  .pm-price-unit {
771
- font-size: 11px;
772
- color: var(--sa-muted);
754
+ font-size: var(--sa-text-xs);
755
+ color: var(--sa-color-fg-muted);
773
756
  }
774
757
  .pm-price-yearly {
775
- font-size: 10px;
776
- color: var(--sa-muted-light);
758
+ font-size: var(--sa-text-2xs);
759
+ color: var(--sa-color-fg-subtle);
777
760
  margin-left: 4px;
778
761
  }
779
762
  .pm-price-free {
780
- font-size: 14px;
763
+ font-size: var(--sa-text-lg);
781
764
  font-weight: 600;
782
- color: var(--sa-heading);
765
+ color: var(--sa-color-fg-heading);
783
766
  }
784
767
  .pm-plan-meta {
785
768
  display: flex;
786
769
  gap: 6px;
787
770
  flex-wrap: wrap;
788
771
  align-items: center;
789
- font-size: 11px;
790
- color: var(--sa-muted);
772
+ font-size: var(--sa-text-xs);
773
+ color: var(--sa-color-fg-muted);
791
774
  margin-top: 8px;
792
775
  }
793
776
  .pm-plan-actions {
@@ -795,7 +778,7 @@ function formatQuota(v: number | undefined): string {
795
778
  gap: 6px;
796
779
  margin-top: 10px;
797
780
  padding-top: 10px;
798
- border-top: 1px solid var(--sa-border-soft);
781
+ border-top: 1px solid var(--sa-color-border-soft);
799
782
  }
800
783
 
801
784
  .pm-add-col {
@@ -804,10 +787,10 @@ function formatQuota(v: number | undefined): string {
804
787
  vertical-align: top;
805
788
  }
806
789
  .pm-add {
807
- border: 1.5px dashed #c7d2fe;
790
+ border: 1.5px dashed var(--sa-color-scheduled-border);
808
791
  border-radius: 10px;
809
792
  padding: 16px 10px;
810
- background: #f5f7ff;
793
+ background: var(--sa-color-accent-surface);
811
794
  text-align: center;
812
795
  cursor: pointer;
813
796
  min-height: 180px;
@@ -818,8 +801,8 @@ function formatQuota(v: number | undefined): string {
818
801
  font-family: inherit;
819
802
  }
820
803
  .pm-add:hover {
821
- background: #eef2ff;
822
- border-color: #818cf8;
804
+ background: var(--sa-color-scheduled-surface);
805
+ border-color: var(--sa-color-scheduled-strong);
823
806
  }
824
807
  .pm-add-icon {
825
808
  display: grid;
@@ -827,18 +810,18 @@ function formatQuota(v: number | undefined): string {
827
810
  width: 30px;
828
811
  height: 30px;
829
812
  border-radius: 50%;
830
- background: var(--sa-primary-50);
831
- color: var(--sa-primary);
813
+ background: var(--sa-color-accent-surface-strong);
814
+ color: var(--sa-color-accent);
832
815
  margin: 0 auto 6px;
833
816
  }
834
817
  .pm-add-title {
835
- font-size: 12px;
818
+ font-size: var(--sa-text-sm);
836
819
  font-weight: 600;
837
- color: var(--sa-primary);
820
+ color: var(--sa-color-accent);
838
821
  }
839
822
  .pm-add-sub {
840
- font-size: 10.5px;
841
- color: var(--sa-muted-light);
823
+ font-size: var(--sa-text-xs);
824
+ color: var(--sa-color-fg-subtle);
842
825
  margin-top: 3px;
843
826
  }
844
827
 
@@ -849,30 +832,30 @@ function formatQuota(v: number | undefined): string {
849
832
  gap: 5px;
850
833
  padding: 2px 8px;
851
834
  border-radius: 999px;
852
- font-size: 11px;
835
+ font-size: var(--sa-text-xs);
853
836
  font-weight: 600;
854
- background: var(--sa-bg-surface-2);
855
- color: var(--sa-muted-dark);
856
- border: 1px solid var(--sa-border);
837
+ background: var(--sa-color-bg-sunken);
838
+ color: var(--sa-color-fg-secondary);
839
+ border: 1px solid var(--sa-color-border);
857
840
  }
858
841
  .pm-chip--tiny {
859
842
  padding: 1px 6px;
860
- font-size: 10px;
843
+ font-size: var(--sa-text-2xs);
861
844
  }
862
845
  .pm-chip--live {
863
- background: var(--sa-positive-bg);
864
- color: #047857;
865
- border-color: #a7f3d0;
846
+ background: var(--sa-color-positive-surface);
847
+ color: var(--sa-color-positive-fg);
848
+ border-color: var(--sa-color-positive-border);
866
849
  }
867
850
  .pm-chip--draft {
868
- background: var(--sa-warning-bg);
869
- color: #b45309;
870
- border-color: #fde68a;
851
+ background: var(--sa-color-warning-surface);
852
+ color: var(--sa-color-warning-fg);
853
+ border-color: var(--sa-color-warning-border);
871
854
  }
872
855
  .pm-chip--supersed {
873
- background: var(--sa-border-soft);
874
- color: var(--sa-muted-dark);
875
- border-color: #cbd5e1;
856
+ background: var(--sa-color-border-soft);
857
+ color: var(--sa-color-fg-secondary);
858
+ border-color: var(--sa-color-border-strong);
876
859
  }
877
860
  .pm-chip--dot::before {
878
861
  content: '';
@@ -884,20 +867,20 @@ function formatQuota(v: number | undefined): string {
884
867
 
885
868
  /* Group rows */
886
869
  .pm-group td {
887
- background: var(--sa-bg-surface-2);
888
- border-top: 1px solid var(--sa-border);
889
- border-bottom: 1px solid var(--sa-border);
870
+ background: var(--sa-color-bg-sunken);
871
+ border-top: 1px solid var(--sa-color-border);
872
+ border-bottom: 1px solid var(--sa-color-border);
890
873
  }
891
874
  .pm-group-inner {
892
875
  display: flex;
893
876
  align-items: center;
894
877
  gap: 8px;
895
878
  padding: 9px 16px;
896
- font-size: 11px;
879
+ font-size: var(--sa-text-xs);
897
880
  font-weight: 700;
898
881
  letter-spacing: 0.08em;
899
882
  text-transform: uppercase;
900
- color: var(--sa-muted-dark);
883
+ color: var(--sa-color-fg-secondary);
901
884
  }
902
885
  .pm-group-dot {
903
886
  width: 7px;
@@ -905,29 +888,29 @@ function formatQuota(v: number | undefined): string {
905
888
  border-radius: 50%;
906
889
  }
907
890
  .pm-group-dot--quota {
908
- background: #0ea5e9;
891
+ background: var(--sa-color-quota);
909
892
  }
910
893
  .pm-group-dot--feature {
911
- background: #8b5cf6;
894
+ background: var(--sa-color-feature);
912
895
  }
913
896
  .pm-group-dot--bundle {
914
- background: #f59e0b;
897
+ background: var(--sa-color-bundle);
915
898
  }
916
899
  .pm-group-count {
917
- background: var(--sa-border);
918
- color: var(--sa-muted-dark);
900
+ background: var(--sa-color-border);
901
+ color: var(--sa-color-fg-secondary);
919
902
  padding: 1px 7px;
920
903
  border-radius: 999px;
921
- font-size: 10px;
904
+ font-size: var(--sa-text-2xs);
922
905
  }
923
906
 
924
907
  /* Data rows */
925
908
  .pm-row td {
926
- border-bottom: 1px solid var(--sa-border-soft);
909
+ border-bottom: 1px solid var(--sa-color-border-soft);
927
910
  height: 44px;
928
911
  }
929
912
  .pm-row:hover td {
930
- background: #fcfcfd;
913
+ background: var(--sa-color-bg-surface-raised);
931
914
  }
932
915
  .pm-rowhead {
933
916
  padding: 8px 16px;
@@ -938,13 +921,13 @@ function formatQuota(v: number | undefined): string {
938
921
  gap: 1px;
939
922
  }
940
923
  .pm-rh-label {
941
- font-size: 13px;
924
+ font-size: var(--sa-text-md);
942
925
  font-weight: 500;
943
- color: var(--sa-heading);
926
+ color: var(--sa-color-fg-heading);
944
927
  }
945
928
  .pm-rh-key {
946
- font: 500 10px var(--sa-font-mono);
947
- color: var(--sa-muted-light);
929
+ font: 500 var(--sa-text-2xs) var(--sa-font-mono);
930
+ color: var(--sa-color-fg-subtle);
948
931
  }
949
932
  .pm-cell {
950
933
  text-align: center;
@@ -957,12 +940,12 @@ function formatQuota(v: number | undefined): string {
957
940
  background-image: repeating-linear-gradient(
958
941
  135deg,
959
942
  transparent 0 6px,
960
- rgba(217, 119, 6, 0.05) 6px 7px
943
+ var(--sa-color-warning-surface) 6px 7px
961
944
  );
962
945
  }
963
946
  .pm-cell--base {
964
947
  text-align: center;
965
- background: var(--sa-bg-surface-2);
948
+ background: var(--sa-color-bg-sunken);
966
949
  }
967
950
  .pm-base-badge {
968
951
  display: inline-flex;
@@ -970,12 +953,12 @@ function formatQuota(v: number | undefined): string {
970
953
  gap: 6px;
971
954
  padding: 3px 12px;
972
955
  border-radius: 999px;
973
- font-size: 11px;
956
+ font-size: var(--sa-text-xs);
974
957
  font-weight: 600;
975
958
  letter-spacing: 0.02em;
976
- background: #eef2ff;
977
- color: #4338ca;
978
- border: 1px solid #c7d2fe;
959
+ background: var(--sa-color-scheduled-surface);
960
+ color: var(--sa-color-scheduled-fg);
961
+ border: 1px solid var(--sa-color-scheduled-border);
979
962
  }
980
963
  .pm-check {
981
964
  display: inline-grid;
@@ -985,16 +968,16 @@ function formatQuota(v: number | undefined): string {
985
968
  border-radius: 6px;
986
969
  }
987
970
  .pm-dash {
988
- color: #cbd5e1;
971
+ color: var(--sa-color-fg-disabled);
989
972
  font-weight: 500;
990
973
  }
991
974
  .pm-num {
992
- font: 600 14px var(--sa-font-body);
993
- color: var(--sa-heading);
975
+ font: 600 var(--sa-text-lg) var(--sa-font-body);
976
+ color: var(--sa-color-fg-heading);
994
977
  }
995
978
  .pm-unit {
996
- font-size: 10.5px;
997
- color: var(--sa-muted-light);
979
+ font-size: var(--sa-text-xs);
980
+ color: var(--sa-color-fg-subtle);
998
981
  margin-left: 3px;
999
982
  }
1000
983
  .pm-quota {
@@ -1008,8 +991,8 @@ function formatQuota(v: number | undefined): string {
1008
991
  display: flex;
1009
992
  gap: 18px;
1010
993
  margin-top: 14px;
1011
- font-size: 12px;
1012
- color: var(--sa-muted-dark);
994
+ font-size: var(--sa-text-sm);
995
+ color: var(--sa-color-fg-secondary);
1013
996
  align-items: center;
1014
997
  }
1015
998
  .pm-legend-item {
@@ -1021,23 +1004,23 @@ function formatQuota(v: number | undefined): string {
1021
1004
  width: 14px;
1022
1005
  height: 14px;
1023
1006
  border-radius: 4px;
1024
- background: #dcfce7;
1025
- color: #16a34a;
1007
+ background: var(--sa-color-positive-surface-strong);
1008
+ color: var(--sa-color-positive);
1026
1009
  display: grid;
1027
1010
  place-items: center;
1028
1011
  }
1029
1012
  .pm-legend-dash {
1030
1013
  width: 14px;
1031
1014
  height: 14px;
1032
- color: #cbd5e1;
1015
+ color: var(--sa-color-fg-disabled);
1033
1016
  display: grid;
1034
1017
  place-items: center;
1035
- font-size: 14px;
1018
+ font-size: var(--sa-text-lg);
1036
1019
  line-height: 1;
1037
1020
  }
1038
1021
  .pm-legend-loading {
1039
1022
  margin-left: auto;
1040
1023
  font-style: italic;
1041
- color: var(--sa-muted-light);
1024
+ color: var(--sa-color-fg-subtle);
1042
1025
  }
1043
1026
  </style>