@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
@@ -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,53 @@ 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
+ /* Hatched from the two warning TINTS, not from the saturated amber.
583
+ * `--sa-color-warning-strong` is a border and icon tone: it put the label
584
+ * at 2.34:1 in light and 1.34:1 in dark on every second stripe. The tinted
585
+ * pair is what the guide documents for text on a status surface, and what
586
+ * `.live` above already uses. */
587
+ background: repeating-linear-gradient(
588
+ 135deg,
589
+ var(--sa-color-warning-surface) 0 8px,
590
+ var(--sa-color-warning-surface-strong) 8px 16px
591
+ );
592
+ color: var(--sa-color-warning-fg);
584
593
  font-weight: 700;
585
594
  }
586
595
  .pd-timeline-seg.is-selected {
587
596
  position: relative;
588
597
  z-index: 1;
589
- outline: 2px solid var(--sa-primary);
598
+ outline: 2px solid var(--sa-color-accent);
590
599
  outline-offset: -2px;
591
- box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.18);
600
+ box-shadow: 0 0 0 3px var(--sa-shadow-tint-3);
592
601
  font-weight: 700;
593
602
  }
594
603
  .pd-timeline-seg.is-selected.superseded {
595
- color: var(--sa-heading);
604
+ color: var(--sa-color-fg-heading);
596
605
  }
597
606
  .pd-timeline-seg.is-selected.live {
598
- outline-color: #047857;
599
- box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.25);
607
+ outline-color: var(--sa-color-positive);
608
+ box-shadow: 0 0 0 3px var(--sa-shadow-tint-4);
600
609
  }
601
610
  .pd-timeline-seg.is-selected.draft {
602
- outline-color: #b45309;
603
- box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.3);
611
+ outline-color: var(--sa-color-warning-fg);
612
+ box-shadow: 0 0 0 3px var(--sa-shadow-tint-4);
604
613
  }
605
614
  .pd-timeline-ticks {
606
615
  display: flex;
607
616
  justify-content: space-between;
608
617
  margin-top: 6px;
609
- font: 500 10.5px var(--sa-font-mono);
610
- color: var(--sa-muted-light);
618
+ font: 500 var(--sa-text-xs) var(--sa-font-mono);
619
+ color: var(--sa-color-fg-subtle);
611
620
  }
612
621
 
613
622
  /* versions table */
@@ -623,21 +632,21 @@ async function executeTerminate(): Promise<void> {
623
632
  64px minmax(0, 1.4fr) minmax(0, 1.1fr) minmax(0, 0.8fr) minmax(0, 1fr)
624
633
  minmax(96px, auto);
625
634
  align-items: stretch;
626
- border-top: 1px solid var(--sa-border-soft);
635
+ border-top: 1px solid var(--sa-color-border-soft);
627
636
  margin-top: 12px;
628
637
  }
629
638
  .pd-versions-head {
630
639
  display: contents;
631
640
  }
632
641
  .pd-versions-head > div {
633
- background: #fbfbfd;
642
+ background: var(--sa-color-bg-surface-raised);
634
643
  padding: 9px 12px;
635
- font-size: 10px;
644
+ font-size: var(--sa-text-2xs);
636
645
  text-transform: uppercase;
637
646
  letter-spacing: 0.1em;
638
- color: var(--sa-muted);
647
+ color: var(--sa-color-fg-muted);
639
648
  font-weight: 700;
640
- border-bottom: 1px solid var(--sa-border);
649
+ border-bottom: 1px solid var(--sa-color-border);
641
650
  }
642
651
  .pd-vrow {
643
652
  display: contents;
@@ -645,41 +654,41 @@ async function executeTerminate(): Promise<void> {
645
654
  }
646
655
  .pd-vrow > div {
647
656
  padding: 13px 12px;
648
- border-bottom: 1px solid var(--sa-border-soft);
657
+ border-bottom: 1px solid var(--sa-color-border-soft);
649
658
  display: flex;
650
659
  align-items: center;
651
- font-size: 12.5px;
652
- color: var(--sa-heading);
660
+ font-size: var(--sa-text-md);
661
+ color: var(--sa-color-fg-heading);
653
662
  }
654
663
  .pd-vrow:hover > div {
655
- background: #fafbfd;
664
+ background: var(--sa-color-bg-surface-raised);
656
665
  }
657
666
  .pd-vrow.is-draft > div {
658
- background: #fffdf5;
667
+ background: var(--sa-color-warning-surface);
659
668
  }
660
669
  .pd-vrow.is-draft:hover > div {
661
- background: #fff8e7;
670
+ background: var(--sa-color-warning-surface);
662
671
  }
663
672
  .pd-vrow.is-selected > div {
664
- background: var(--sa-primary-50) !important;
665
- box-shadow: inset 0 -1px 0 0 #bfdbfe;
673
+ background: var(--sa-color-accent-surface-strong) !important;
674
+ box-shadow: inset 0 -1px 0 0 var(--sa-color-info-border);
666
675
  }
667
676
  .pd-vrow.is-selected.is-draft > div {
668
- background: #fff4d6 !important;
669
- box-shadow: inset 0 -1px 0 0 #fcd34d;
677
+ background: var(--sa-color-warning-surface-strong) !important;
678
+ box-shadow: inset 0 -1px 0 0 var(--sa-color-warning-border);
670
679
  }
671
680
  .pd-vrow.is-selected > div:first-child {
672
681
  box-shadow:
673
- inset 3px 0 0 0 var(--sa-primary),
674
- inset 0 -1px 0 0 #bfdbfe;
682
+ inset 3px 0 0 0 var(--sa-color-accent),
683
+ inset 0 -1px 0 0 var(--sa-color-info-border);
675
684
  }
676
685
  .pd-vrow.is-draft > div:first-child {
677
- box-shadow: inset 3px 0 0 0 #f59e0b;
686
+ box-shadow: inset 3px 0 0 0 var(--sa-color-warning-strong);
678
687
  }
679
688
  .pd-vrow.is-selected.is-draft > div:first-child {
680
689
  box-shadow:
681
- inset 3px 0 0 0 #f59e0b,
682
- inset 0 -1px 0 0 #fcd34d;
690
+ inset 3px 0 0 0 var(--sa-color-warning-strong),
691
+ inset 0 -1px 0 0 var(--sa-color-warning-border);
683
692
  }
684
693
  .pd-vcol {
685
694
  display: flex;
@@ -688,7 +697,7 @@ async function executeTerminate(): Promise<void> {
688
697
  align-items: flex-start;
689
698
  }
690
699
  .pd-v-num {
691
- font: 700 14px var(--sa-font-body);
700
+ font: 700 var(--sa-text-lg) var(--sa-font-body);
692
701
  }
693
702
  .pd-validity {
694
703
  display: flex;
@@ -701,33 +710,33 @@ async function executeTerminate(): Promise<void> {
701
710
  gap: 6px;
702
711
  }
703
712
  .pd-validity-sub {
704
- font-size: 10.5px;
705
- color: var(--sa-muted-light);
713
+ font-size: var(--sa-text-xs);
714
+ color: var(--sa-color-fg-subtle);
706
715
  }
707
716
  .pd-validity-date {
708
- font: 500 12.5px var(--sa-font-mono);
717
+ font: 500 var(--sa-text-md) var(--sa-font-mono);
709
718
  }
710
719
  .pd-arrow-inf {
711
- font: 600 13px var(--sa-font-mono);
712
- color: var(--sa-muted-light);
720
+ font: 600 var(--sa-text-md) var(--sa-font-mono);
721
+ color: var(--sa-color-fg-subtle);
713
722
  }
714
723
  .pd-pricing-m {
715
- font: 600 13px var(--sa-font-body);
724
+ font: 600 var(--sa-text-md) var(--sa-font-body);
716
725
  }
717
726
  .pd-pricing-y {
718
- font: 500 10.5px var(--sa-font-body);
719
- color: var(--sa-muted-light);
727
+ font: 500 var(--sa-text-xs) var(--sa-font-body);
728
+ color: var(--sa-color-fg-subtle);
720
729
  margin-top: 2px;
721
730
  }
722
731
  .pd-impact-num {
723
- font: 700 14px var(--sa-font-body);
732
+ font: 700 var(--sa-text-lg) var(--sa-font-body);
724
733
  }
725
734
  .pd-impact-sub {
726
- font-size: 10.5px;
727
- color: var(--sa-muted-light);
735
+ font-size: var(--sa-text-xs);
736
+ color: var(--sa-color-fg-subtle);
728
737
  }
729
738
  .pd-change-note {
730
- color: var(--sa-muted-light);
739
+ color: var(--sa-color-fg-subtle);
731
740
  font-style: italic;
732
741
  overflow: hidden;
733
742
  text-overflow: ellipsis;
@@ -744,10 +753,10 @@ async function executeTerminate(): Promise<void> {
744
753
  align-items: center;
745
754
  padding: 3px 8px;
746
755
  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;
756
+ font: 600 var(--sa-text-xs) var(--sa-font-mono);
757
+ background: var(--sa-color-warning-surface);
758
+ color: var(--sa-color-warning-fg);
759
+ border: 1px solid var(--sa-color-warning-border);
751
760
  white-space: nowrap;
752
761
  }
753
762
 
@@ -757,24 +766,24 @@ async function executeTerminate(): Promise<void> {
757
766
  gap: 6px;
758
767
  }
759
768
  .pd-diff-chip {
760
- font: 700 11px var(--sa-font-mono);
769
+ font: 700 var(--sa-text-xs) var(--sa-font-mono);
761
770
  padding: 3px 8px;
762
771
  border-radius: 6px;
763
772
  }
764
773
  .pd-diff-chip.add {
765
- background: var(--sa-positive-bg);
766
- color: #047857;
767
- border: 1px solid #a7f3d0;
774
+ background: var(--sa-color-positive-surface);
775
+ color: var(--sa-color-positive-fg);
776
+ border: 1px solid var(--sa-color-positive-border);
768
777
  }
769
778
  .pd-diff-chip.rm {
770
- background: #fef2f2;
771
- color: #b91c1c;
772
- border: 1px solid #fecaca;
779
+ background: var(--sa-color-negative-surface);
780
+ color: var(--sa-color-negative-fg);
781
+ border: 1px solid var(--sa-color-negative-border);
773
782
  }
774
783
  .pd-diff-chip.mod {
775
- background: var(--sa-border-soft);
776
- color: var(--sa-muted-dark);
777
- border: 1px solid var(--sa-border);
784
+ background: var(--sa-color-border-soft);
785
+ color: var(--sa-color-fg-secondary);
786
+ border: 1px solid var(--sa-color-border);
778
787
  }
779
788
  .pd-diff-list {
780
789
  padding: 12px;
@@ -786,23 +795,35 @@ async function executeTerminate(): Promise<void> {
786
795
  display: flex;
787
796
  align-items: center;
788
797
  gap: 10px;
789
- background: #fff;
790
- border: 1px solid var(--sa-border);
798
+ background: var(--sa-color-bg-surface);
799
+ border: 1px solid var(--sa-color-border);
791
800
  border-radius: 8px;
792
801
  padding: 11px 12px 11px 0;
793
802
  overflow: hidden;
794
803
  }
795
804
  .pd-diff-row.add {
796
- background: linear-gradient(90deg, var(--sa-positive-bg) 0%, #fff 60%);
797
- border-color: #a7f3d0;
805
+ background: linear-gradient(
806
+ 90deg,
807
+ var(--sa-color-positive-surface) 0%,
808
+ var(--sa-color-bg-surface) 60%
809
+ );
810
+ border-color: var(--sa-color-positive-border);
798
811
  }
799
812
  .pd-diff-row.rm {
800
- background: linear-gradient(90deg, #fef2f2 0%, #fff 60%);
801
- border-color: #fecaca;
813
+ background: linear-gradient(
814
+ 90deg,
815
+ var(--sa-color-negative-surface) 0%,
816
+ var(--sa-color-bg-surface) 60%
817
+ );
818
+ border-color: var(--sa-color-negative-border);
802
819
  }
803
820
  .pd-diff-row.mod {
804
- background: linear-gradient(90deg, var(--sa-bg-surface-2) 0%, #fff 60%);
805
- border-color: var(--sa-border);
821
+ background: linear-gradient(
822
+ 90deg,
823
+ var(--sa-color-bg-sunken) 0%,
824
+ var(--sa-color-bg-surface) 60%
825
+ );
826
+ border-color: var(--sa-color-border);
806
827
  }
807
828
  .pd-diff-icon {
808
829
  width: 32px;
@@ -810,17 +831,17 @@ async function executeTerminate(): Promise<void> {
810
831
  display: grid;
811
832
  place-items: center;
812
833
  flex: 0 0 32px;
813
- color: #fff;
814
- font: 700 16px var(--sa-font-body);
834
+ color: var(--sa-color-fg-on-accent);
835
+ font: 700 var(--sa-text-lg) var(--sa-font-body);
815
836
  }
816
837
  .pd-diff-row.add .pd-diff-icon {
817
- background: #10b981;
838
+ background: var(--sa-color-positive-strong);
818
839
  }
819
840
  .pd-diff-row.rm .pd-diff-icon {
820
- background: #ef4444;
841
+ background: var(--sa-color-negative-strong);
821
842
  }
822
843
  .pd-diff-row.mod .pd-diff-icon {
823
- background: var(--sa-muted);
844
+ background: var(--sa-color-inverse-surface);
824
845
  }
825
846
  .pd-diff-body {
826
847
  flex: 1;
@@ -831,63 +852,63 @@ async function executeTerminate(): Promise<void> {
831
852
  flex-wrap: wrap;
832
853
  }
833
854
  .pd-diff-kind {
834
- font: 700 10px var(--sa-font-mono);
855
+ font: 700 var(--sa-text-2xs) var(--sa-font-mono);
835
856
  text-transform: uppercase;
836
857
  letter-spacing: 0.1em;
837
- color: var(--sa-muted);
858
+ color: var(--sa-color-fg-muted);
838
859
  }
839
860
  .pd-diff-label {
840
- font-size: 13.5px;
861
+ font-size: var(--sa-text-md);
841
862
  font-weight: 600;
842
- color: var(--sa-heading);
863
+ color: var(--sa-color-fg-heading);
843
864
  }
844
865
  .pd-diff-key {
845
- font: 500 11px var(--sa-font-mono);
846
- color: var(--sa-muted-light);
866
+ font: 500 var(--sa-text-xs) var(--sa-font-mono);
867
+ color: var(--sa-color-fg-subtle);
847
868
  }
848
869
  .pd-diff-vals {
849
870
  display: flex;
850
871
  align-items: center;
851
872
  gap: 6px;
852
- font: 500 12px var(--sa-font-mono);
873
+ font: 500 var(--sa-text-sm) var(--sa-font-mono);
853
874
  }
854
875
  .pd-diff-strike {
855
876
  text-decoration: line-through;
856
- color: var(--sa-muted-light);
877
+ color: var(--sa-color-fg-subtle);
857
878
  }
858
879
  .pd-diff-arrow {
859
- color: #cbd5e1;
880
+ color: var(--sa-color-fg-disabled);
860
881
  }
861
882
  .pd-diff-new {
862
- color: #047857;
883
+ color: var(--sa-color-positive-fg);
863
884
  font-weight: 600;
864
885
  }
865
886
  .pd-diff-tag {
866
887
  margin-left: auto;
867
- font-size: 11px;
888
+ font-size: var(--sa-text-xs);
868
889
  font-weight: 600;
869
890
  padding: 2px 9px;
870
891
  border-radius: 999px;
871
892
  border: 1px solid;
872
893
  }
873
894
  .pd-diff-tag.add {
874
- background: #fff;
875
- color: #047857;
876
- border-color: #a7f3d0;
895
+ background: var(--sa-color-bg-surface);
896
+ color: var(--sa-color-positive-fg);
897
+ border-color: var(--sa-color-positive-border);
877
898
  }
878
899
  .pd-diff-tag.rm {
879
- background: #fff;
880
- color: #b91c1c;
881
- border-color: #fecaca;
900
+ background: var(--sa-color-bg-surface);
901
+ color: var(--sa-color-negative-fg);
902
+ border-color: var(--sa-color-negative-border);
882
903
  }
883
904
  .pd-diff-tag.mod {
884
- background: #fff;
885
- color: var(--sa-muted-dark);
886
- border-color: #cbd5e1;
905
+ background: var(--sa-color-bg-surface);
906
+ color: var(--sa-color-fg-secondary);
907
+ border-color: var(--sa-color-border-strong);
887
908
  }
888
909
  .pd-diff-row.plain {
889
- background: #fff;
890
- border-color: var(--sa-border);
910
+ background: var(--sa-color-bg-surface);
911
+ border-color: var(--sa-color-border);
891
912
  padding: 11px 12px 11px 0;
892
913
  }
893
914
  .pd-diff-section {
@@ -896,10 +917,10 @@ async function executeTerminate(): Promise<void> {
896
917
  gap: 8px;
897
918
  margin-top: 6px;
898
919
  padding: 0 2px;
899
- font-size: 10.5px;
920
+ font-size: var(--sa-text-xs);
900
921
  text-transform: uppercase;
901
922
  letter-spacing: 0.1em;
902
- color: var(--sa-muted-light);
923
+ color: var(--sa-color-fg-subtle);
903
924
  font-weight: 700;
904
925
  }
905
926
  .pd-diff-section:first-child {
@@ -908,18 +929,18 @@ async function executeTerminate(): Promise<void> {
908
929
  .pd-diff-section hr {
909
930
  flex: 1;
910
931
  border: 0;
911
- border-top: 1px dashed var(--sa-border);
932
+ border-top: 1px dashed var(--sa-color-border);
912
933
  }
913
934
  .pd-diff-empty {
914
935
  padding: 28px 18px;
915
936
  text-align: center;
916
- color: var(--sa-muted-light);
917
- font-size: 13px;
937
+ color: var(--sa-color-fg-subtle);
938
+ font-size: var(--sa-text-md);
918
939
  }
919
940
  .pd-diff-empty b {
920
941
  display: block;
921
- color: var(--sa-muted-dark);
922
- font-size: 14px;
942
+ color: var(--sa-color-fg-secondary);
943
+ font-size: var(--sa-text-lg);
923
944
  margin-bottom: 4px;
924
945
  }
925
946
 
@@ -935,7 +956,7 @@ async function executeTerminate(): Promise<void> {
935
956
  align-items: center;
936
957
  gap: 14px;
937
958
  padding: 9px 0;
938
- border-top: 1px solid var(--sa-border-soft);
959
+ border-top: 1px solid var(--sa-color-border-soft);
939
960
  }
940
961
  .pd-audit-row:first-child {
941
962
  border-top: 0;
@@ -947,48 +968,48 @@ async function executeTerminate(): Promise<void> {
947
968
  flex: 0 0 auto;
948
969
  }
949
970
  .pd-audit-draft {
950
- background: #f59e0b;
971
+ background: var(--sa-color-warning-strong);
951
972
  }
952
973
  .pd-audit-add {
953
- background: #10b981;
974
+ background: var(--sa-color-positive-strong);
954
975
  }
955
976
  .pd-audit-change {
956
- background: var(--sa-primary);
977
+ background: var(--sa-color-accent);
957
978
  }
958
979
  .pd-audit-publish {
959
- background: #8b5cf6;
980
+ background: var(--sa-color-feature);
960
981
  }
961
982
  .pd-audit-remove {
962
- background: #ef4444;
983
+ background: var(--sa-color-negative-strong);
963
984
  }
964
985
  .pd-audit-when {
965
- font-size: 11.5px;
966
- color: var(--sa-muted);
986
+ font-size: var(--sa-text-sm);
987
+ color: var(--sa-color-fg-muted);
967
988
  min-width: 130px;
968
989
  }
969
990
  .pd-audit-avatar {
970
991
  width: 24px;
971
992
  height: 24px;
972
993
  border-radius: 50%;
973
- background: var(--sa-heading);
974
- color: #fff;
994
+ background: var(--sa-color-inverse-bg);
995
+ color: var(--sa-color-fg-on-accent);
975
996
  display: grid;
976
997
  place-items: center;
977
- font: 700 11px var(--sa-font-body);
998
+ font: 700 var(--sa-text-xs) var(--sa-font-body);
978
999
  flex: 0 0 auto;
979
1000
  }
980
1001
  .pd-audit-who {
981
- font-size: 12px;
982
- color: var(--sa-muted-dark);
1002
+ font-size: var(--sa-text-sm);
1003
+ color: var(--sa-color-fg-secondary);
983
1004
  min-width: 64px;
984
1005
  }
985
1006
  .pd-audit-what {
986
- font-size: 13px;
987
- color: var(--sa-heading);
1007
+ font-size: var(--sa-text-md);
1008
+ color: var(--sa-color-fg-heading);
988
1009
  flex: 1;
989
1010
  }
990
1011
 
991
- @media (max-width: 1180px) {
1012
+ @media (max-width: 1023.98px) {
992
1013
  .pd-body {
993
1014
  grid-template-columns: 1fr;
994
1015
  }