@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
@@ -657,16 +657,16 @@ function formatQuota(v: number | undefined): string {
657
657
  <style scoped>
658
658
  .pm {
659
659
  padding: 22px 26px;
660
- background: var(--sa-bg-app);
661
- color: var(--sa-heading);
660
+ background: var(--sa-color-bg-app);
661
+ color: var(--sa-color-fg-heading);
662
662
  font-family: var(--sa-font-body);
663
663
  min-height: 100%;
664
664
  box-sizing: border-box;
665
665
  }
666
666
 
667
667
  .pm-card {
668
- background: var(--sa-bg-surface);
669
- border: 1px solid var(--sa-border);
668
+ background: var(--sa-color-bg-surface);
669
+ border: 1px solid var(--sa-color-border);
670
670
  border-radius: 10px;
671
671
  }
672
672
  .pm-wrap {
@@ -677,11 +677,11 @@ function formatQuota(v: number | undefined): string {
677
677
  width: 100%;
678
678
  border-collapse: separate;
679
679
  border-spacing: 0;
680
- font-size: 13px;
680
+ font-size: var(--sa-text-md);
681
681
  }
682
682
  .pm-head th {
683
- background: #fbfbfd;
684
- border-bottom: 1px solid var(--sa-border);
683
+ background: var(--sa-color-bg-surface-raised);
684
+ border-bottom: 1px solid var(--sa-color-border);
685
685
  }
686
686
  .pm-rowhead-cell {
687
687
  text-align: left;
@@ -691,10 +691,10 @@ function formatQuota(v: number | undefined): string {
691
691
  min-width: 240px;
692
692
  }
693
693
  .pm-component-kicker {
694
- font-size: 11px;
694
+ font-size: var(--sa-text-xs);
695
695
  text-transform: uppercase;
696
696
  letter-spacing: 0.1em;
697
- color: var(--sa-muted-light);
697
+ color: var(--sa-color-fg-subtle);
698
698
  font-weight: 700;
699
699
  }
700
700
 
@@ -704,8 +704,8 @@ function formatQuota(v: number | undefined): string {
704
704
  min-width: 200px;
705
705
  }
706
706
  .pm-plan-card {
707
- background: #fff;
708
- border: 1px solid var(--sa-border);
707
+ background: var(--sa-color-bg-surface);
708
+ border: 1px solid var(--sa-color-border);
709
709
  border-top: 3px solid;
710
710
  border-radius: 10px;
711
711
  padding: 14px 14px 12px;
@@ -718,34 +718,34 @@ function formatQuota(v: number | undefined): string {
718
718
  align-items: flex-start;
719
719
  }
720
720
  .pm-plan-key {
721
- font: 700 11px var(--sa-font-mono);
721
+ font: 700 var(--sa-text-xs) var(--sa-font-mono);
722
722
  letter-spacing: 0.08em;
723
- color: var(--sa-muted-dark);
723
+ color: var(--sa-color-fg-secondary);
724
724
  }
725
725
  .pm-plan-label {
726
- font-size: 17px;
726
+ font-size: var(--sa-text-xl);
727
727
  font-weight: 700;
728
728
  letter-spacing: -0.02em;
729
- color: var(--sa-heading);
729
+ color: var(--sa-color-fg-heading);
730
730
  }
731
731
  .pm-plan-desc {
732
- font-size: 11.5px;
733
- color: var(--sa-muted);
732
+ font-size: var(--sa-text-sm);
733
+ color: var(--sa-color-fg-muted);
734
734
  margin-top: 4px;
735
735
  line-height: 1.4;
736
736
  min-height: 32px;
737
737
  }
738
738
  .pm-plan-divider {
739
739
  height: 1px;
740
- background: var(--sa-border);
740
+ background: var(--sa-color-border);
741
741
  margin: 10px 0;
742
742
  }
743
743
  .pm-kebab {
744
744
  background: none;
745
745
  border: 0;
746
- color: var(--sa-muted-light);
746
+ color: var(--sa-color-fg-subtle);
747
747
  cursor: pointer;
748
- font-size: 16px;
748
+ font-size: var(--sa-text-lg);
749
749
  padding: 0;
750
750
  line-height: 1;
751
751
  }
@@ -763,31 +763,31 @@ function formatQuota(v: number | undefined): string {
763
763
  flex-wrap: wrap;
764
764
  }
765
765
  .pm-price-big {
766
- font-size: 20px;
766
+ font-size: var(--sa-text-xl);
767
767
  font-weight: 700;
768
768
  letter-spacing: -0.02em;
769
769
  }
770
770
  .pm-price-unit {
771
- font-size: 11px;
772
- color: var(--sa-muted);
771
+ font-size: var(--sa-text-xs);
772
+ color: var(--sa-color-fg-muted);
773
773
  }
774
774
  .pm-price-yearly {
775
- font-size: 10px;
776
- color: var(--sa-muted-light);
775
+ font-size: var(--sa-text-2xs);
776
+ color: var(--sa-color-fg-subtle);
777
777
  margin-left: 4px;
778
778
  }
779
779
  .pm-price-free {
780
- font-size: 14px;
780
+ font-size: var(--sa-text-lg);
781
781
  font-weight: 600;
782
- color: var(--sa-heading);
782
+ color: var(--sa-color-fg-heading);
783
783
  }
784
784
  .pm-plan-meta {
785
785
  display: flex;
786
786
  gap: 6px;
787
787
  flex-wrap: wrap;
788
788
  align-items: center;
789
- font-size: 11px;
790
- color: var(--sa-muted);
789
+ font-size: var(--sa-text-xs);
790
+ color: var(--sa-color-fg-muted);
791
791
  margin-top: 8px;
792
792
  }
793
793
  .pm-plan-actions {
@@ -795,7 +795,7 @@ function formatQuota(v: number | undefined): string {
795
795
  gap: 6px;
796
796
  margin-top: 10px;
797
797
  padding-top: 10px;
798
- border-top: 1px solid var(--sa-border-soft);
798
+ border-top: 1px solid var(--sa-color-border-soft);
799
799
  }
800
800
 
801
801
  .pm-add-col {
@@ -804,10 +804,10 @@ function formatQuota(v: number | undefined): string {
804
804
  vertical-align: top;
805
805
  }
806
806
  .pm-add {
807
- border: 1.5px dashed #c7d2fe;
807
+ border: 1.5px dashed var(--sa-color-scheduled-border);
808
808
  border-radius: 10px;
809
809
  padding: 16px 10px;
810
- background: #f5f7ff;
810
+ background: var(--sa-color-accent-surface);
811
811
  text-align: center;
812
812
  cursor: pointer;
813
813
  min-height: 180px;
@@ -818,8 +818,8 @@ function formatQuota(v: number | undefined): string {
818
818
  font-family: inherit;
819
819
  }
820
820
  .pm-add:hover {
821
- background: #eef2ff;
822
- border-color: #818cf8;
821
+ background: var(--sa-color-scheduled-surface);
822
+ border-color: var(--sa-color-scheduled-strong);
823
823
  }
824
824
  .pm-add-icon {
825
825
  display: grid;
@@ -827,18 +827,18 @@ function formatQuota(v: number | undefined): string {
827
827
  width: 30px;
828
828
  height: 30px;
829
829
  border-radius: 50%;
830
- background: var(--sa-primary-50);
831
- color: var(--sa-primary);
830
+ background: var(--sa-color-accent-surface-strong);
831
+ color: var(--sa-color-accent);
832
832
  margin: 0 auto 6px;
833
833
  }
834
834
  .pm-add-title {
835
- font-size: 12px;
835
+ font-size: var(--sa-text-sm);
836
836
  font-weight: 600;
837
- color: var(--sa-primary);
837
+ color: var(--sa-color-accent);
838
838
  }
839
839
  .pm-add-sub {
840
- font-size: 10.5px;
841
- color: var(--sa-muted-light);
840
+ font-size: var(--sa-text-xs);
841
+ color: var(--sa-color-fg-subtle);
842
842
  margin-top: 3px;
843
843
  }
844
844
 
@@ -849,30 +849,30 @@ function formatQuota(v: number | undefined): string {
849
849
  gap: 5px;
850
850
  padding: 2px 8px;
851
851
  border-radius: 999px;
852
- font-size: 11px;
852
+ font-size: var(--sa-text-xs);
853
853
  font-weight: 600;
854
- background: var(--sa-bg-surface-2);
855
- color: var(--sa-muted-dark);
856
- border: 1px solid var(--sa-border);
854
+ background: var(--sa-color-bg-sunken);
855
+ color: var(--sa-color-fg-secondary);
856
+ border: 1px solid var(--sa-color-border);
857
857
  }
858
858
  .pm-chip--tiny {
859
859
  padding: 1px 6px;
860
- font-size: 10px;
860
+ font-size: var(--sa-text-2xs);
861
861
  }
862
862
  .pm-chip--live {
863
- background: var(--sa-positive-bg);
864
- color: #047857;
865
- border-color: #a7f3d0;
863
+ background: var(--sa-color-positive-surface);
864
+ color: var(--sa-color-positive-fg);
865
+ border-color: var(--sa-color-positive-border);
866
866
  }
867
867
  .pm-chip--draft {
868
- background: var(--sa-warning-bg);
869
- color: #b45309;
870
- border-color: #fde68a;
868
+ background: var(--sa-color-warning-surface);
869
+ color: var(--sa-color-warning-fg);
870
+ border-color: var(--sa-color-warning-border);
871
871
  }
872
872
  .pm-chip--supersed {
873
- background: var(--sa-border-soft);
874
- color: var(--sa-muted-dark);
875
- border-color: #cbd5e1;
873
+ background: var(--sa-color-border-soft);
874
+ color: var(--sa-color-fg-secondary);
875
+ border-color: var(--sa-color-border-strong);
876
876
  }
877
877
  .pm-chip--dot::before {
878
878
  content: '';
@@ -884,20 +884,20 @@ function formatQuota(v: number | undefined): string {
884
884
 
885
885
  /* Group rows */
886
886
  .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);
887
+ background: var(--sa-color-bg-sunken);
888
+ border-top: 1px solid var(--sa-color-border);
889
+ border-bottom: 1px solid var(--sa-color-border);
890
890
  }
891
891
  .pm-group-inner {
892
892
  display: flex;
893
893
  align-items: center;
894
894
  gap: 8px;
895
895
  padding: 9px 16px;
896
- font-size: 11px;
896
+ font-size: var(--sa-text-xs);
897
897
  font-weight: 700;
898
898
  letter-spacing: 0.08em;
899
899
  text-transform: uppercase;
900
- color: var(--sa-muted-dark);
900
+ color: var(--sa-color-fg-secondary);
901
901
  }
902
902
  .pm-group-dot {
903
903
  width: 7px;
@@ -905,29 +905,29 @@ function formatQuota(v: number | undefined): string {
905
905
  border-radius: 50%;
906
906
  }
907
907
  .pm-group-dot--quota {
908
- background: #0ea5e9;
908
+ background: var(--sa-color-quota);
909
909
  }
910
910
  .pm-group-dot--feature {
911
- background: #8b5cf6;
911
+ background: var(--sa-color-feature);
912
912
  }
913
913
  .pm-group-dot--bundle {
914
- background: #f59e0b;
914
+ background: var(--sa-color-bundle);
915
915
  }
916
916
  .pm-group-count {
917
- background: var(--sa-border);
918
- color: var(--sa-muted-dark);
917
+ background: var(--sa-color-border);
918
+ color: var(--sa-color-fg-secondary);
919
919
  padding: 1px 7px;
920
920
  border-radius: 999px;
921
- font-size: 10px;
921
+ font-size: var(--sa-text-2xs);
922
922
  }
923
923
 
924
924
  /* Data rows */
925
925
  .pm-row td {
926
- border-bottom: 1px solid var(--sa-border-soft);
926
+ border-bottom: 1px solid var(--sa-color-border-soft);
927
927
  height: 44px;
928
928
  }
929
929
  .pm-row:hover td {
930
- background: #fcfcfd;
930
+ background: var(--sa-color-bg-surface-raised);
931
931
  }
932
932
  .pm-rowhead {
933
933
  padding: 8px 16px;
@@ -938,13 +938,13 @@ function formatQuota(v: number | undefined): string {
938
938
  gap: 1px;
939
939
  }
940
940
  .pm-rh-label {
941
- font-size: 13px;
941
+ font-size: var(--sa-text-md);
942
942
  font-weight: 500;
943
- color: var(--sa-heading);
943
+ color: var(--sa-color-fg-heading);
944
944
  }
945
945
  .pm-rh-key {
946
- font: 500 10px var(--sa-font-mono);
947
- color: var(--sa-muted-light);
946
+ font: 500 var(--sa-text-2xs) var(--sa-font-mono);
947
+ color: var(--sa-color-fg-subtle);
948
948
  }
949
949
  .pm-cell {
950
950
  text-align: center;
@@ -957,12 +957,12 @@ function formatQuota(v: number | undefined): string {
957
957
  background-image: repeating-linear-gradient(
958
958
  135deg,
959
959
  transparent 0 6px,
960
- rgba(217, 119, 6, 0.05) 6px 7px
960
+ var(--sa-color-warning-surface) 6px 7px
961
961
  );
962
962
  }
963
963
  .pm-cell--base {
964
964
  text-align: center;
965
- background: var(--sa-bg-surface-2);
965
+ background: var(--sa-color-bg-sunken);
966
966
  }
967
967
  .pm-base-badge {
968
968
  display: inline-flex;
@@ -970,12 +970,12 @@ function formatQuota(v: number | undefined): string {
970
970
  gap: 6px;
971
971
  padding: 3px 12px;
972
972
  border-radius: 999px;
973
- font-size: 11px;
973
+ font-size: var(--sa-text-xs);
974
974
  font-weight: 600;
975
975
  letter-spacing: 0.02em;
976
- background: #eef2ff;
977
- color: #4338ca;
978
- border: 1px solid #c7d2fe;
976
+ background: var(--sa-color-scheduled-surface);
977
+ color: var(--sa-color-scheduled-fg);
978
+ border: 1px solid var(--sa-color-scheduled-border);
979
979
  }
980
980
  .pm-check {
981
981
  display: inline-grid;
@@ -985,16 +985,16 @@ function formatQuota(v: number | undefined): string {
985
985
  border-radius: 6px;
986
986
  }
987
987
  .pm-dash {
988
- color: #cbd5e1;
988
+ color: var(--sa-color-fg-disabled);
989
989
  font-weight: 500;
990
990
  }
991
991
  .pm-num {
992
- font: 600 14px var(--sa-font-body);
993
- color: var(--sa-heading);
992
+ font: 600 var(--sa-text-lg) var(--sa-font-body);
993
+ color: var(--sa-color-fg-heading);
994
994
  }
995
995
  .pm-unit {
996
- font-size: 10.5px;
997
- color: var(--sa-muted-light);
996
+ font-size: var(--sa-text-xs);
997
+ color: var(--sa-color-fg-subtle);
998
998
  margin-left: 3px;
999
999
  }
1000
1000
  .pm-quota {
@@ -1008,8 +1008,8 @@ function formatQuota(v: number | undefined): string {
1008
1008
  display: flex;
1009
1009
  gap: 18px;
1010
1010
  margin-top: 14px;
1011
- font-size: 12px;
1012
- color: var(--sa-muted-dark);
1011
+ font-size: var(--sa-text-sm);
1012
+ color: var(--sa-color-fg-secondary);
1013
1013
  align-items: center;
1014
1014
  }
1015
1015
  .pm-legend-item {
@@ -1021,23 +1021,23 @@ function formatQuota(v: number | undefined): string {
1021
1021
  width: 14px;
1022
1022
  height: 14px;
1023
1023
  border-radius: 4px;
1024
- background: #dcfce7;
1025
- color: #16a34a;
1024
+ background: var(--sa-color-positive-surface-strong);
1025
+ color: var(--sa-color-positive);
1026
1026
  display: grid;
1027
1027
  place-items: center;
1028
1028
  }
1029
1029
  .pm-legend-dash {
1030
1030
  width: 14px;
1031
1031
  height: 14px;
1032
- color: #cbd5e1;
1032
+ color: var(--sa-color-fg-disabled);
1033
1033
  display: grid;
1034
1034
  place-items: center;
1035
- font-size: 14px;
1035
+ font-size: var(--sa-text-lg);
1036
1036
  line-height: 1;
1037
1037
  }
1038
1038
  .pm-legend-loading {
1039
1039
  margin-left: auto;
1040
1040
  font-style: italic;
1041
- color: var(--sa-muted-light);
1041
+ color: var(--sa-color-fg-subtle);
1042
1042
  }
1043
1043
  </style>
@@ -461,12 +461,12 @@ function onPublish(): void {
461
461
  }
462
462
 
463
463
  .pr-banner {
464
- background: var(--sa-warning-soft);
465
- border: 1px solid var(--sa-amber-border);
466
- color: var(--sa-warning);
464
+ background: var(--sa-color-warning-surface);
465
+ border: 1px solid var(--sa-color-warning-border);
466
+ color: var(--sa-color-warning);
467
467
  border-radius: 8px;
468
468
  padding: 10px 14px;
469
- font-size: 12.5px;
469
+ font-size: var(--sa-text-md);
470
470
  margin-bottom: 14px;
471
471
  }
472
472
 
@@ -482,31 +482,35 @@ function onPublish(): void {
482
482
  gap: 14px;
483
483
  }
484
484
  .pr-card {
485
- background: var(--sa-bg-surface);
486
- border: 1px solid var(--sa-border);
485
+ background: var(--sa-color-bg-surface);
486
+ border: 1px solid var(--sa-color-border);
487
487
  border-radius: 10px;
488
488
  padding: 16px 20px;
489
489
  }
490
490
  .pr-card--regress {
491
- background: var(--sa-warning-soft);
492
- border-color: var(--sa-amber-border);
491
+ background: var(--sa-color-warning-surface);
492
+ border-color: var(--sa-color-warning-border);
493
493
  }
494
494
  .pr-card--impact {
495
- background: linear-gradient(180deg, var(--sa-primary-soft) 0%, var(--sa-bg-surface) 100%);
496
- border-color: var(--sa-primary-border);
495
+ background: linear-gradient(
496
+ 180deg,
497
+ var(--sa-color-accent-surface) 0%,
498
+ var(--sa-color-bg-surface) 100%
499
+ );
500
+ border-color: var(--sa-color-accent-border);
497
501
  }
498
502
  .pr-card-title {
499
- font: 700 14px var(--sa-font-head);
503
+ font: 700 var(--sa-text-lg) var(--sa-font-head);
500
504
  letter-spacing: -0.01em;
501
- color: var(--sa-heading);
505
+ color: var(--sa-color-fg-heading);
502
506
  margin: 0 0 12px;
503
507
  }
504
508
  .pr-req {
505
- color: var(--sa-negative);
509
+ color: var(--sa-color-negative);
506
510
  }
507
511
  .pr-card-hint {
508
- font-size: 11.5px;
509
- color: var(--sa-muted);
512
+ font-size: var(--sa-text-sm);
513
+ color: var(--sa-color-fg-muted);
510
514
  margin: -6px 0 10px;
511
515
  line-height: 1.5;
512
516
  }
@@ -516,27 +520,27 @@ function onPublish(): void {
516
520
  align-items: baseline;
517
521
  gap: 12px;
518
522
  padding: 8px 0;
519
- border-bottom: 1px solid var(--sa-border-soft);
523
+ border-bottom: 1px solid var(--sa-color-border-soft);
520
524
  }
521
525
  .pr-row:last-child {
522
526
  border-bottom: 0;
523
527
  }
524
528
  .pr-label {
525
- font-size: 12px;
526
- color: var(--sa-muted);
529
+ font-size: var(--sa-text-sm);
530
+ color: var(--sa-color-fg-muted);
527
531
  min-width: 130px;
528
532
  }
529
533
  .pr-val {
530
- font-size: 13px;
531
- color: var(--sa-heading);
534
+ font-size: var(--sa-text-md);
535
+ color: var(--sa-color-fg-heading);
532
536
  font-weight: 500;
533
537
  }
534
538
  .pr-missing {
535
- color: var(--sa-muted);
539
+ color: var(--sa-color-fg-muted);
536
540
  font-weight: 400;
537
541
  }
538
542
  .pr-inf {
539
- color: var(--sa-positive);
543
+ color: var(--sa-color-positive);
540
544
  font-weight: 600;
541
545
  }
542
546
 
@@ -545,19 +549,19 @@ function onPublish(): void {
545
549
  align-items: center;
546
550
  padding: 2px 9px;
547
551
  border-radius: 999px;
548
- font-size: 11px;
552
+ font-size: var(--sa-text-xs);
549
553
  font-weight: 600;
550
554
  border: 1px solid;
551
555
  }
552
556
  .pr-chip--live {
553
- background: var(--sa-positive-soft);
554
- color: var(--sa-positive);
555
- border-color: rgba(4, 120, 87, 0.3);
557
+ background: var(--sa-color-positive-surface);
558
+ color: var(--sa-color-positive);
559
+ border-color: var(--sa-color-positive-border);
556
560
  }
557
561
  .pr-chip--muted {
558
- background: var(--sa-border-soft);
559
- color: var(--sa-muted);
560
- border-color: var(--sa-border);
562
+ background: var(--sa-color-border-soft);
563
+ color: var(--sa-color-fg-muted);
564
+ border-color: var(--sa-color-border);
561
565
  }
562
566
 
563
567
  .pr-components {
@@ -566,51 +570,51 @@ function onPublish(): void {
566
570
  gap: 14px;
567
571
  }
568
572
  .pr-comp-head {
569
- font-size: 11px;
573
+ font-size: var(--sa-text-xs);
570
574
  text-transform: uppercase;
571
575
  letter-spacing: 0.08em;
572
576
  font-weight: 700;
573
577
  margin-bottom: 6px;
574
578
  }
575
579
  .pr-comp-head--quota {
576
- color: #0ea5e9;
580
+ color: var(--sa-color-quota);
577
581
  }
578
582
  .pr-comp-head--feature {
579
- color: #8b5cf6;
583
+ color: var(--sa-color-feature);
580
584
  }
581
585
  .pr-comp-head--bundle {
582
- color: var(--sa-amber);
586
+ color: var(--sa-color-warning-strong);
583
587
  }
584
588
  .pr-comp-item {
585
589
  display: flex;
586
590
  justify-content: space-between;
587
591
  gap: 6px;
588
- font-size: 12px;
592
+ font-size: var(--sa-text-sm);
589
593
  padding: 3px 0;
590
- border-bottom: 1px solid var(--sa-border-soft);
591
- color: var(--sa-body);
594
+ border-bottom: 1px solid var(--sa-color-border-soft);
595
+ color: var(--sa-color-fg-body);
592
596
  }
593
597
  .pr-comp-item b {
594
- color: var(--sa-heading);
598
+ color: var(--sa-color-fg-heading);
595
599
  }
596
600
  .pr-comp-empty {
597
- font-size: 12px;
598
- color: var(--sa-muted);
601
+ font-size: var(--sa-text-sm);
602
+ color: var(--sa-color-fg-muted);
599
603
  font-style: italic;
600
604
  padding: 3px 0;
601
605
  }
602
606
 
603
607
  .pr-note {
604
- font-size: 13px;
608
+ font-size: var(--sa-text-md);
605
609
  line-height: 1.55;
606
- color: var(--sa-body);
607
- background: var(--sa-border-soft);
610
+ color: var(--sa-color-fg-body);
611
+ background: var(--sa-color-border-soft);
608
612
  border-radius: 7px;
609
613
  padding: 10px 12px;
610
614
  }
611
615
  .pr-note--missing {
612
- background: var(--sa-warning-soft);
613
- color: var(--sa-warning);
616
+ background: var(--sa-color-warning-surface);
617
+ color: var(--sa-color-warning);
614
618
  }
615
619
 
616
620
  .pr-checks {
@@ -622,13 +626,13 @@ function onPublish(): void {
622
626
  display: flex;
623
627
  align-items: center;
624
628
  gap: 9px;
625
- font-size: 12.5px;
629
+ font-size: var(--sa-text-md);
626
630
  }
627
631
  .pr-check--ok {
628
- color: var(--sa-heading);
632
+ color: var(--sa-color-fg-heading);
629
633
  }
630
634
  .pr-check--warn {
631
- color: var(--sa-warning);
635
+ color: var(--sa-color-warning);
632
636
  }
633
637
  .pr-check-mark {
634
638
  width: 18px;
@@ -639,20 +643,20 @@ function onPublish(): void {
639
643
  flex: 0 0 auto;
640
644
  }
641
645
  .pr-check--ok .pr-check-mark {
642
- background: var(--sa-positive-soft);
643
- color: var(--sa-positive);
646
+ background: var(--sa-color-positive-surface);
647
+ color: var(--sa-color-positive);
644
648
  }
645
649
  .pr-check--warn .pr-check-mark {
646
- background: var(--sa-warning-soft);
647
- color: var(--sa-warning);
650
+ background: var(--sa-color-warning-surface);
651
+ color: var(--sa-color-warning);
648
652
  }
649
653
 
650
654
  .pr-toggle {
651
655
  display: flex;
652
656
  align-items: center;
653
657
  gap: 8px;
654
- font-size: 12.5px;
655
- color: var(--sa-heading);
658
+ font-size: var(--sa-text-md);
659
+ color: var(--sa-color-fg-heading);
656
660
  cursor: pointer;
657
661
  }
658
662
 
@@ -664,11 +668,11 @@ function onPublish(): void {
664
668
  .pr-impact-num {
665
669
  font: 700 40px/1 var(--sa-font-head);
666
670
  letter-spacing: -0.03em;
667
- color: var(--sa-heading);
671
+ color: var(--sa-color-fg-heading);
668
672
  }
669
673
  .pr-impact-text {
670
- font-size: 12.5px;
671
- color: var(--sa-body);
674
+ font-size: var(--sa-text-md);
675
+ color: var(--sa-color-fg-body);
672
676
  line-height: 1.5;
673
677
  }
674
678