@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
@@ -405,7 +405,7 @@ async function executeTerminate(): Promise<void> {
405
405
 
406
406
  <style>
407
407
  .pd-code {
408
- font: 500 11px var(--sa-font-mono);
408
+ font: 500 var(--sa-text-xs) var(--sa-font-mono);
409
409
  }
410
410
 
411
411
  /* buttons + chips (1:1 styles.css) */
@@ -415,29 +415,29 @@ async function executeTerminate(): Promise<void> {
415
415
  gap: 7px;
416
416
  padding: 8px 14px;
417
417
  border-radius: 7px;
418
- font: 500 13px var(--sa-font-body);
418
+ font: 500 var(--sa-text-md) var(--sa-font-body);
419
419
  cursor: pointer;
420
- border: 1px solid var(--sa-border-strong);
421
- background: #fff;
422
- color: var(--sa-heading);
420
+ border: 1px solid var(--sa-color-border-strong);
421
+ background: var(--sa-color-bg-surface);
422
+ color: var(--sa-color-fg-heading);
423
423
  transition:
424
424
  background 0.12s,
425
425
  border-color 0.12s;
426
426
  }
427
427
  .btn:hover {
428
- background: var(--sa-bg-surface-2);
428
+ background: var(--sa-color-bg-sunken);
429
429
  }
430
430
  .btn.primary {
431
- background: var(--sa-primary);
432
- border-color: var(--sa-primary);
433
- color: #fff;
431
+ background: var(--sa-color-accent);
432
+ border-color: var(--sa-color-accent);
433
+ color: var(--sa-color-fg-on-accent);
434
434
  }
435
435
  .btn.primary:hover {
436
- background: var(--sa-primary-strong);
436
+ background: var(--sa-color-accent-strong);
437
437
  }
438
438
  .btn.btn--sm {
439
439
  padding: 5px 9px;
440
- font-size: 12px;
440
+ font-size: var(--sa-text-sm);
441
441
  gap: 5px;
442
442
  }
443
443
  .chip {
@@ -446,26 +446,26 @@ async function executeTerminate(): Promise<void> {
446
446
  gap: 5px;
447
447
  padding: 2px 8px;
448
448
  border-radius: 999px;
449
- font-size: 11px;
449
+ font-size: var(--sa-text-xs);
450
450
  font-weight: 600;
451
- background: var(--sa-bg-surface-2);
452
- color: var(--sa-muted-dark);
453
- border: 1px solid var(--sa-border);
451
+ background: var(--sa-color-bg-sunken);
452
+ color: var(--sa-color-fg-secondary);
453
+ border: 1px solid var(--sa-color-border);
454
454
  }
455
455
  .chip.live {
456
- background: var(--sa-positive-bg);
457
- color: #047857;
458
- border-color: #a7f3d0;
456
+ background: var(--sa-color-positive-surface);
457
+ color: var(--sa-color-positive-fg);
458
+ border-color: var(--sa-color-positive-border);
459
459
  }
460
460
  .chip.draft {
461
- background: var(--sa-warning-bg);
462
- color: #b45309;
463
- border-color: #fde68a;
461
+ background: var(--sa-color-warning-surface);
462
+ color: var(--sa-color-warning-fg);
463
+ border-color: var(--sa-color-warning-border);
464
464
  }
465
465
  .chip.supersed {
466
- background: var(--sa-border-soft);
467
- color: var(--sa-muted-dark);
468
- border-color: #cbd5e1;
466
+ background: var(--sa-color-border-soft);
467
+ color: var(--sa-color-fg-secondary);
468
+ border-color: var(--sa-color-border-strong);
469
469
  }
470
470
  .chip.dot::before {
471
471
  content: '';
@@ -496,18 +496,18 @@ async function executeTerminate(): Promise<void> {
496
496
  align-items: flex-start;
497
497
  gap: 12px;
498
498
  padding: 14px 16px 12px;
499
- border-bottom: 1px solid var(--sa-border-soft);
499
+ border-bottom: 1px solid var(--sa-color-border-soft);
500
500
  }
501
501
  .pd-panel-title {
502
- font-size: 15px;
502
+ font-size: var(--sa-text-lg);
503
503
  font-weight: 700;
504
504
  margin: 0;
505
505
  letter-spacing: -0.01em;
506
- color: var(--sa-heading);
506
+ color: var(--sa-color-fg-heading);
507
507
  }
508
508
  .pd-panel-sub {
509
- font-size: 11.5px;
510
- color: var(--sa-muted);
509
+ font-size: var(--sa-text-sm);
510
+ color: var(--sa-color-fg-muted);
511
511
  margin-top: 3px;
512
512
  }
513
513
  .pd-panel-head-right {
@@ -525,13 +525,13 @@ async function executeTerminate(): Promise<void> {
525
525
  display: flex;
526
526
  align-items: center;
527
527
  gap: 6px;
528
- font-size: 11px;
529
- color: var(--sa-muted-light);
528
+ font-size: var(--sa-text-xs);
529
+ color: var(--sa-color-fg-subtle);
530
530
  margin-bottom: 8px;
531
531
  font-weight: 500;
532
532
  }
533
533
  .pd-timeline-hint svg {
534
- color: #cbd5e1;
534
+ color: var(--sa-color-fg-disabled);
535
535
  width: 12px;
536
536
  height: 12px;
537
537
  }
@@ -540,16 +540,16 @@ async function executeTerminate(): Promise<void> {
540
540
  height: 24px;
541
541
  border-radius: 6px;
542
542
  overflow: hidden;
543
- background: var(--sa-border-soft);
544
- border: 1px solid var(--sa-border);
543
+ background: var(--sa-color-border-soft);
544
+ border: 1px solid var(--sa-color-border);
545
545
  }
546
546
  .pd-timeline-seg {
547
547
  display: flex;
548
548
  align-items: center;
549
549
  justify-content: center;
550
- font: 600 11px var(--sa-font-body);
551
- color: rgba(15, 23, 42, 0.65);
552
- border-right: 1px solid rgba(0, 0, 0, 0.06);
550
+ font: 600 var(--sa-text-xs) var(--sa-font-body);
551
+ color: var(--sa-color-fg-secondary);
552
+ border-right: 1px solid var(--sa-color-border-soft);
553
553
  white-space: nowrap;
554
554
  padding: 0 8px;
555
555
  min-width: 0;
@@ -570,44 +570,48 @@ async function executeTerminate(): Promise<void> {
570
570
  transform: translateY(0);
571
571
  }
572
572
  .pd-timeline-seg.superseded {
573
- background: var(--sa-border);
574
- color: var(--sa-muted-dark);
573
+ background: var(--sa-color-border);
574
+ color: var(--sa-color-fg-secondary);
575
575
  }
576
576
  .pd-timeline-seg.live {
577
- background: #10b981;
578
- color: #fff;
577
+ background: var(--sa-color-positive-surface-strong);
578
+ color: var(--sa-color-positive-fg);
579
579
  font-weight: 700;
580
580
  }
581
581
  .pd-timeline-seg.draft {
582
- background: repeating-linear-gradient(135deg, #fde68a 0 8px, #fcd34d 8px 16px);
583
- color: #78350f;
582
+ background: repeating-linear-gradient(
583
+ 135deg,
584
+ var(--sa-color-warning-border) 0 8px,
585
+ var(--sa-color-warning-strong) 8px 16px
586
+ );
587
+ color: var(--sa-color-warning-fg);
584
588
  font-weight: 700;
585
589
  }
586
590
  .pd-timeline-seg.is-selected {
587
591
  position: relative;
588
592
  z-index: 1;
589
- outline: 2px solid var(--sa-primary);
593
+ outline: 2px solid var(--sa-color-accent);
590
594
  outline-offset: -2px;
591
- box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.18);
595
+ box-shadow: 0 0 0 3px var(--sa-shadow-tint-3);
592
596
  font-weight: 700;
593
597
  }
594
598
  .pd-timeline-seg.is-selected.superseded {
595
- color: var(--sa-heading);
599
+ color: var(--sa-color-fg-heading);
596
600
  }
597
601
  .pd-timeline-seg.is-selected.live {
598
- outline-color: #047857;
599
- box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.25);
602
+ outline-color: var(--sa-color-positive);
603
+ box-shadow: 0 0 0 3px var(--sa-shadow-tint-4);
600
604
  }
601
605
  .pd-timeline-seg.is-selected.draft {
602
- outline-color: #b45309;
603
- box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.3);
606
+ outline-color: var(--sa-color-warning-fg);
607
+ box-shadow: 0 0 0 3px var(--sa-shadow-tint-4);
604
608
  }
605
609
  .pd-timeline-ticks {
606
610
  display: flex;
607
611
  justify-content: space-between;
608
612
  margin-top: 6px;
609
- font: 500 10.5px var(--sa-font-mono);
610
- color: var(--sa-muted-light);
613
+ font: 500 var(--sa-text-xs) var(--sa-font-mono);
614
+ color: var(--sa-color-fg-subtle);
611
615
  }
612
616
 
613
617
  /* versions table */
@@ -623,21 +627,21 @@ async function executeTerminate(): Promise<void> {
623
627
  64px minmax(0, 1.4fr) minmax(0, 1.1fr) minmax(0, 0.8fr) minmax(0, 1fr)
624
628
  minmax(96px, auto);
625
629
  align-items: stretch;
626
- border-top: 1px solid var(--sa-border-soft);
630
+ border-top: 1px solid var(--sa-color-border-soft);
627
631
  margin-top: 12px;
628
632
  }
629
633
  .pd-versions-head {
630
634
  display: contents;
631
635
  }
632
636
  .pd-versions-head > div {
633
- background: #fbfbfd;
637
+ background: var(--sa-color-bg-surface-raised);
634
638
  padding: 9px 12px;
635
- font-size: 10px;
639
+ font-size: var(--sa-text-2xs);
636
640
  text-transform: uppercase;
637
641
  letter-spacing: 0.1em;
638
- color: var(--sa-muted);
642
+ color: var(--sa-color-fg-muted);
639
643
  font-weight: 700;
640
- border-bottom: 1px solid var(--sa-border);
644
+ border-bottom: 1px solid var(--sa-color-border);
641
645
  }
642
646
  .pd-vrow {
643
647
  display: contents;
@@ -645,41 +649,41 @@ async function executeTerminate(): Promise<void> {
645
649
  }
646
650
  .pd-vrow > div {
647
651
  padding: 13px 12px;
648
- border-bottom: 1px solid var(--sa-border-soft);
652
+ border-bottom: 1px solid var(--sa-color-border-soft);
649
653
  display: flex;
650
654
  align-items: center;
651
- font-size: 12.5px;
652
- color: var(--sa-heading);
655
+ font-size: var(--sa-text-md);
656
+ color: var(--sa-color-fg-heading);
653
657
  }
654
658
  .pd-vrow:hover > div {
655
- background: #fafbfd;
659
+ background: var(--sa-color-bg-surface-raised);
656
660
  }
657
661
  .pd-vrow.is-draft > div {
658
- background: #fffdf5;
662
+ background: var(--sa-color-warning-surface);
659
663
  }
660
664
  .pd-vrow.is-draft:hover > div {
661
- background: #fff8e7;
665
+ background: var(--sa-color-warning-surface);
662
666
  }
663
667
  .pd-vrow.is-selected > div {
664
- background: var(--sa-primary-50) !important;
665
- box-shadow: inset 0 -1px 0 0 #bfdbfe;
668
+ background: var(--sa-color-accent-surface-strong) !important;
669
+ box-shadow: inset 0 -1px 0 0 var(--sa-color-info-border);
666
670
  }
667
671
  .pd-vrow.is-selected.is-draft > div {
668
- background: #fff4d6 !important;
669
- box-shadow: inset 0 -1px 0 0 #fcd34d;
672
+ background: var(--sa-color-warning-surface-strong) !important;
673
+ box-shadow: inset 0 -1px 0 0 var(--sa-color-warning-border);
670
674
  }
671
675
  .pd-vrow.is-selected > div:first-child {
672
676
  box-shadow:
673
- inset 3px 0 0 0 var(--sa-primary),
674
- inset 0 -1px 0 0 #bfdbfe;
677
+ inset 3px 0 0 0 var(--sa-color-accent),
678
+ inset 0 -1px 0 0 var(--sa-color-info-border);
675
679
  }
676
680
  .pd-vrow.is-draft > div:first-child {
677
- box-shadow: inset 3px 0 0 0 #f59e0b;
681
+ box-shadow: inset 3px 0 0 0 var(--sa-color-warning-strong);
678
682
  }
679
683
  .pd-vrow.is-selected.is-draft > div:first-child {
680
684
  box-shadow:
681
- inset 3px 0 0 0 #f59e0b,
682
- inset 0 -1px 0 0 #fcd34d;
685
+ inset 3px 0 0 0 var(--sa-color-warning-strong),
686
+ inset 0 -1px 0 0 var(--sa-color-warning-border);
683
687
  }
684
688
  .pd-vcol {
685
689
  display: flex;
@@ -688,7 +692,7 @@ async function executeTerminate(): Promise<void> {
688
692
  align-items: flex-start;
689
693
  }
690
694
  .pd-v-num {
691
- font: 700 14px var(--sa-font-body);
695
+ font: 700 var(--sa-text-lg) var(--sa-font-body);
692
696
  }
693
697
  .pd-validity {
694
698
  display: flex;
@@ -701,33 +705,33 @@ async function executeTerminate(): Promise<void> {
701
705
  gap: 6px;
702
706
  }
703
707
  .pd-validity-sub {
704
- font-size: 10.5px;
705
- color: var(--sa-muted-light);
708
+ font-size: var(--sa-text-xs);
709
+ color: var(--sa-color-fg-subtle);
706
710
  }
707
711
  .pd-validity-date {
708
- font: 500 12.5px var(--sa-font-mono);
712
+ font: 500 var(--sa-text-md) var(--sa-font-mono);
709
713
  }
710
714
  .pd-arrow-inf {
711
- font: 600 13px var(--sa-font-mono);
712
- color: var(--sa-muted-light);
715
+ font: 600 var(--sa-text-md) var(--sa-font-mono);
716
+ color: var(--sa-color-fg-subtle);
713
717
  }
714
718
  .pd-pricing-m {
715
- font: 600 13px var(--sa-font-body);
719
+ font: 600 var(--sa-text-md) var(--sa-font-body);
716
720
  }
717
721
  .pd-pricing-y {
718
- font: 500 10.5px var(--sa-font-body);
719
- color: var(--sa-muted-light);
722
+ font: 500 var(--sa-text-xs) var(--sa-font-body);
723
+ color: var(--sa-color-fg-subtle);
720
724
  margin-top: 2px;
721
725
  }
722
726
  .pd-impact-num {
723
- font: 700 14px var(--sa-font-body);
727
+ font: 700 var(--sa-text-lg) var(--sa-font-body);
724
728
  }
725
729
  .pd-impact-sub {
726
- font-size: 10.5px;
727
- color: var(--sa-muted-light);
730
+ font-size: var(--sa-text-xs);
731
+ color: var(--sa-color-fg-subtle);
728
732
  }
729
733
  .pd-change-note {
730
- color: var(--sa-muted-light);
734
+ color: var(--sa-color-fg-subtle);
731
735
  font-style: italic;
732
736
  overflow: hidden;
733
737
  text-overflow: ellipsis;
@@ -744,10 +748,10 @@ async function executeTerminate(): Promise<void> {
744
748
  align-items: center;
745
749
  padding: 3px 8px;
746
750
  border-radius: 999px;
747
- font: 600 10.5px var(--sa-font-mono);
748
- background: var(--sa-warning-bg);
749
- color: #b45309;
750
- border: 1px solid #fde68a;
751
+ font: 600 var(--sa-text-xs) var(--sa-font-mono);
752
+ background: var(--sa-color-warning-surface);
753
+ color: var(--sa-color-warning-fg);
754
+ border: 1px solid var(--sa-color-warning-border);
751
755
  white-space: nowrap;
752
756
  }
753
757
 
@@ -757,24 +761,24 @@ async function executeTerminate(): Promise<void> {
757
761
  gap: 6px;
758
762
  }
759
763
  .pd-diff-chip {
760
- font: 700 11px var(--sa-font-mono);
764
+ font: 700 var(--sa-text-xs) var(--sa-font-mono);
761
765
  padding: 3px 8px;
762
766
  border-radius: 6px;
763
767
  }
764
768
  .pd-diff-chip.add {
765
- background: var(--sa-positive-bg);
766
- color: #047857;
767
- border: 1px solid #a7f3d0;
769
+ background: var(--sa-color-positive-surface);
770
+ color: var(--sa-color-positive-fg);
771
+ border: 1px solid var(--sa-color-positive-border);
768
772
  }
769
773
  .pd-diff-chip.rm {
770
- background: #fef2f2;
771
- color: #b91c1c;
772
- border: 1px solid #fecaca;
774
+ background: var(--sa-color-negative-surface);
775
+ color: var(--sa-color-negative-fg);
776
+ border: 1px solid var(--sa-color-negative-border);
773
777
  }
774
778
  .pd-diff-chip.mod {
775
- background: var(--sa-border-soft);
776
- color: var(--sa-muted-dark);
777
- border: 1px solid var(--sa-border);
779
+ background: var(--sa-color-border-soft);
780
+ color: var(--sa-color-fg-secondary);
781
+ border: 1px solid var(--sa-color-border);
778
782
  }
779
783
  .pd-diff-list {
780
784
  padding: 12px;
@@ -786,23 +790,35 @@ async function executeTerminate(): Promise<void> {
786
790
  display: flex;
787
791
  align-items: center;
788
792
  gap: 10px;
789
- background: #fff;
790
- border: 1px solid var(--sa-border);
793
+ background: var(--sa-color-bg-surface);
794
+ border: 1px solid var(--sa-color-border);
791
795
  border-radius: 8px;
792
796
  padding: 11px 12px 11px 0;
793
797
  overflow: hidden;
794
798
  }
795
799
  .pd-diff-row.add {
796
- background: linear-gradient(90deg, var(--sa-positive-bg) 0%, #fff 60%);
797
- border-color: #a7f3d0;
800
+ background: linear-gradient(
801
+ 90deg,
802
+ var(--sa-color-positive-surface) 0%,
803
+ var(--sa-color-bg-surface) 60%
804
+ );
805
+ border-color: var(--sa-color-positive-border);
798
806
  }
799
807
  .pd-diff-row.rm {
800
- background: linear-gradient(90deg, #fef2f2 0%, #fff 60%);
801
- border-color: #fecaca;
808
+ background: linear-gradient(
809
+ 90deg,
810
+ var(--sa-color-negative-surface) 0%,
811
+ var(--sa-color-bg-surface) 60%
812
+ );
813
+ border-color: var(--sa-color-negative-border);
802
814
  }
803
815
  .pd-diff-row.mod {
804
- background: linear-gradient(90deg, var(--sa-bg-surface-2) 0%, #fff 60%);
805
- border-color: var(--sa-border);
816
+ background: linear-gradient(
817
+ 90deg,
818
+ var(--sa-color-bg-sunken) 0%,
819
+ var(--sa-color-bg-surface) 60%
820
+ );
821
+ border-color: var(--sa-color-border);
806
822
  }
807
823
  .pd-diff-icon {
808
824
  width: 32px;
@@ -810,17 +826,17 @@ async function executeTerminate(): Promise<void> {
810
826
  display: grid;
811
827
  place-items: center;
812
828
  flex: 0 0 32px;
813
- color: #fff;
814
- font: 700 16px var(--sa-font-body);
829
+ color: var(--sa-color-fg-on-accent);
830
+ font: 700 var(--sa-text-lg) var(--sa-font-body);
815
831
  }
816
832
  .pd-diff-row.add .pd-diff-icon {
817
- background: #10b981;
833
+ background: var(--sa-color-positive-strong);
818
834
  }
819
835
  .pd-diff-row.rm .pd-diff-icon {
820
- background: #ef4444;
836
+ background: var(--sa-color-negative-strong);
821
837
  }
822
838
  .pd-diff-row.mod .pd-diff-icon {
823
- background: var(--sa-muted);
839
+ background: var(--sa-color-inverse-surface);
824
840
  }
825
841
  .pd-diff-body {
826
842
  flex: 1;
@@ -831,63 +847,63 @@ async function executeTerminate(): Promise<void> {
831
847
  flex-wrap: wrap;
832
848
  }
833
849
  .pd-diff-kind {
834
- font: 700 10px var(--sa-font-mono);
850
+ font: 700 var(--sa-text-2xs) var(--sa-font-mono);
835
851
  text-transform: uppercase;
836
852
  letter-spacing: 0.1em;
837
- color: var(--sa-muted);
853
+ color: var(--sa-color-fg-muted);
838
854
  }
839
855
  .pd-diff-label {
840
- font-size: 13.5px;
856
+ font-size: var(--sa-text-md);
841
857
  font-weight: 600;
842
- color: var(--sa-heading);
858
+ color: var(--sa-color-fg-heading);
843
859
  }
844
860
  .pd-diff-key {
845
- font: 500 11px var(--sa-font-mono);
846
- color: var(--sa-muted-light);
861
+ font: 500 var(--sa-text-xs) var(--sa-font-mono);
862
+ color: var(--sa-color-fg-subtle);
847
863
  }
848
864
  .pd-diff-vals {
849
865
  display: flex;
850
866
  align-items: center;
851
867
  gap: 6px;
852
- font: 500 12px var(--sa-font-mono);
868
+ font: 500 var(--sa-text-sm) var(--sa-font-mono);
853
869
  }
854
870
  .pd-diff-strike {
855
871
  text-decoration: line-through;
856
- color: var(--sa-muted-light);
872
+ color: var(--sa-color-fg-subtle);
857
873
  }
858
874
  .pd-diff-arrow {
859
- color: #cbd5e1;
875
+ color: var(--sa-color-fg-disabled);
860
876
  }
861
877
  .pd-diff-new {
862
- color: #047857;
878
+ color: var(--sa-color-positive-fg);
863
879
  font-weight: 600;
864
880
  }
865
881
  .pd-diff-tag {
866
882
  margin-left: auto;
867
- font-size: 11px;
883
+ font-size: var(--sa-text-xs);
868
884
  font-weight: 600;
869
885
  padding: 2px 9px;
870
886
  border-radius: 999px;
871
887
  border: 1px solid;
872
888
  }
873
889
  .pd-diff-tag.add {
874
- background: #fff;
875
- color: #047857;
876
- border-color: #a7f3d0;
890
+ background: var(--sa-color-bg-surface);
891
+ color: var(--sa-color-positive-fg);
892
+ border-color: var(--sa-color-positive-border);
877
893
  }
878
894
  .pd-diff-tag.rm {
879
- background: #fff;
880
- color: #b91c1c;
881
- border-color: #fecaca;
895
+ background: var(--sa-color-bg-surface);
896
+ color: var(--sa-color-negative-fg);
897
+ border-color: var(--sa-color-negative-border);
882
898
  }
883
899
  .pd-diff-tag.mod {
884
- background: #fff;
885
- color: var(--sa-muted-dark);
886
- border-color: #cbd5e1;
900
+ background: var(--sa-color-bg-surface);
901
+ color: var(--sa-color-fg-secondary);
902
+ border-color: var(--sa-color-border-strong);
887
903
  }
888
904
  .pd-diff-row.plain {
889
- background: #fff;
890
- border-color: var(--sa-border);
905
+ background: var(--sa-color-bg-surface);
906
+ border-color: var(--sa-color-border);
891
907
  padding: 11px 12px 11px 0;
892
908
  }
893
909
  .pd-diff-section {
@@ -896,10 +912,10 @@ async function executeTerminate(): Promise<void> {
896
912
  gap: 8px;
897
913
  margin-top: 6px;
898
914
  padding: 0 2px;
899
- font-size: 10.5px;
915
+ font-size: var(--sa-text-xs);
900
916
  text-transform: uppercase;
901
917
  letter-spacing: 0.1em;
902
- color: var(--sa-muted-light);
918
+ color: var(--sa-color-fg-subtle);
903
919
  font-weight: 700;
904
920
  }
905
921
  .pd-diff-section:first-child {
@@ -908,18 +924,18 @@ async function executeTerminate(): Promise<void> {
908
924
  .pd-diff-section hr {
909
925
  flex: 1;
910
926
  border: 0;
911
- border-top: 1px dashed var(--sa-border);
927
+ border-top: 1px dashed var(--sa-color-border);
912
928
  }
913
929
  .pd-diff-empty {
914
930
  padding: 28px 18px;
915
931
  text-align: center;
916
- color: var(--sa-muted-light);
917
- font-size: 13px;
932
+ color: var(--sa-color-fg-subtle);
933
+ font-size: var(--sa-text-md);
918
934
  }
919
935
  .pd-diff-empty b {
920
936
  display: block;
921
- color: var(--sa-muted-dark);
922
- font-size: 14px;
937
+ color: var(--sa-color-fg-secondary);
938
+ font-size: var(--sa-text-lg);
923
939
  margin-bottom: 4px;
924
940
  }
925
941
 
@@ -935,7 +951,7 @@ async function executeTerminate(): Promise<void> {
935
951
  align-items: center;
936
952
  gap: 14px;
937
953
  padding: 9px 0;
938
- border-top: 1px solid var(--sa-border-soft);
954
+ border-top: 1px solid var(--sa-color-border-soft);
939
955
  }
940
956
  .pd-audit-row:first-child {
941
957
  border-top: 0;
@@ -947,44 +963,44 @@ async function executeTerminate(): Promise<void> {
947
963
  flex: 0 0 auto;
948
964
  }
949
965
  .pd-audit-draft {
950
- background: #f59e0b;
966
+ background: var(--sa-color-warning-strong);
951
967
  }
952
968
  .pd-audit-add {
953
- background: #10b981;
969
+ background: var(--sa-color-positive-strong);
954
970
  }
955
971
  .pd-audit-change {
956
- background: var(--sa-primary);
972
+ background: var(--sa-color-accent);
957
973
  }
958
974
  .pd-audit-publish {
959
- background: #8b5cf6;
975
+ background: var(--sa-color-feature);
960
976
  }
961
977
  .pd-audit-remove {
962
- background: #ef4444;
978
+ background: var(--sa-color-negative-strong);
963
979
  }
964
980
  .pd-audit-when {
965
- font-size: 11.5px;
966
- color: var(--sa-muted);
981
+ font-size: var(--sa-text-sm);
982
+ color: var(--sa-color-fg-muted);
967
983
  min-width: 130px;
968
984
  }
969
985
  .pd-audit-avatar {
970
986
  width: 24px;
971
987
  height: 24px;
972
988
  border-radius: 50%;
973
- background: var(--sa-heading);
974
- color: #fff;
989
+ background: var(--sa-color-inverse-bg);
990
+ color: var(--sa-color-fg-on-accent);
975
991
  display: grid;
976
992
  place-items: center;
977
- font: 700 11px var(--sa-font-body);
993
+ font: 700 var(--sa-text-xs) var(--sa-font-body);
978
994
  flex: 0 0 auto;
979
995
  }
980
996
  .pd-audit-who {
981
- font-size: 12px;
982
- color: var(--sa-muted-dark);
997
+ font-size: var(--sa-text-sm);
998
+ color: var(--sa-color-fg-secondary);
983
999
  min-width: 64px;
984
1000
  }
985
1001
  .pd-audit-what {
986
- font-size: 13px;
987
- color: var(--sa-heading);
1002
+ font-size: var(--sa-text-md);
1003
+ color: var(--sa-color-fg-heading);
988
1004
  flex: 1;
989
1005
  }
990
1006