@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
@@ -491,11 +491,11 @@ function recordsEqual(a: Record<string, number>, b: Record<string, number>): boo
491
491
  align-items: flex-start;
492
492
  gap: 8px;
493
493
  padding: 10px 12px;
494
- background: #fef2f2;
495
- border: 1px solid #fecaca;
494
+ background: var(--sa-color-negative-surface);
495
+ border: 1px solid var(--sa-color-negative-border);
496
496
  border-radius: 8px;
497
- color: #b91c1c;
498
- font-size: 12.5px;
497
+ color: var(--sa-color-negative-fg);
498
+ font-size: var(--sa-text-md);
499
499
  line-height: 1.5;
500
500
  }
501
501
  .bve-overlap-ico {
@@ -506,7 +506,7 @@ function recordsEqual(a: Record<string, number>, b: Record<string, number>): boo
506
506
  grid-template-columns: 1fr 1fr;
507
507
  gap: 18px;
508
508
  }
509
- @media (max-width: 1100px) {
509
+ @media (max-width: 1023.98px) {
510
510
  .bve-grid {
511
511
  grid-template-columns: 1fr;
512
512
  }
@@ -521,20 +521,20 @@ function recordsEqual(a: Record<string, number>, b: Record<string, number>): boo
521
521
  align-items: baseline;
522
522
  justify-content: space-between;
523
523
  gap: 12px;
524
- font-size: 11.5px;
524
+ font-size: var(--sa-text-sm);
525
525
  font-weight: 700;
526
526
  text-transform: uppercase;
527
527
  letter-spacing: 0.08em;
528
- color: var(--sa-muted-dark);
528
+ color: var(--sa-color-fg-secondary);
529
529
  padding-top: 2px;
530
530
  }
531
531
  .bve-section-label--top {
532
532
  margin-top: 8px;
533
533
  }
534
534
  .bve-section-count {
535
- font-size: 10.5px;
535
+ font-size: var(--sa-text-xs);
536
536
  font-weight: 600;
537
- color: var(--sa-muted-light);
537
+ color: var(--sa-color-fg-subtle);
538
538
  text-transform: none;
539
539
  letter-spacing: 0;
540
540
  }
@@ -555,20 +555,20 @@ function recordsEqual(a: Record<string, number>, b: Record<string, number>): boo
555
555
  gap: 4px;
556
556
  }
557
557
  .bve-field-label {
558
- font-size: 11px;
559
- color: var(--sa-muted-dark);
558
+ font-size: var(--sa-text-xs);
559
+ color: var(--sa-color-fg-secondary);
560
560
  font-weight: 600;
561
561
  }
562
562
  .bve-field-hint {
563
- font-size: 10.5px;
564
- color: var(--sa-muted-light);
563
+ font-size: var(--sa-text-xs);
564
+ color: var(--sa-color-fg-subtle);
565
565
  }
566
566
  .bve-input-grp {
567
567
  display: inline-flex;
568
568
  align-items: stretch;
569
- border: 1px solid #cbd5e1;
569
+ border: 1px solid var(--sa-color-border-strong);
570
570
  border-radius: 6px;
571
- background: #fff;
571
+ background: var(--sa-color-bg-surface);
572
572
  }
573
573
  .bve-input-grp .bve-input {
574
574
  border: 0;
@@ -578,28 +578,28 @@ function recordsEqual(a: Record<string, number>, b: Record<string, number>): boo
578
578
  display: inline-flex;
579
579
  align-items: center;
580
580
  padding: 0 8px;
581
- font-size: 11.5px;
582
- color: var(--sa-muted);
583
- background: var(--sa-bg-surface-2);
584
- border-left: 1px solid var(--sa-border);
581
+ font-size: var(--sa-text-sm);
582
+ color: var(--sa-color-fg-muted);
583
+ background: var(--sa-color-bg-sunken);
584
+ border-left: 1px solid var(--sa-color-border);
585
585
  border-radius: 0 6px 6px 0;
586
586
  }
587
587
  .bve-input {
588
588
  padding: 6px 10px;
589
- border: 1px solid #cbd5e1;
589
+ border: 1px solid var(--sa-color-border-strong);
590
590
  border-radius: 6px;
591
- font-size: 13px;
591
+ font-size: var(--sa-text-md);
592
592
  font-family: inherit;
593
- color: var(--sa-heading);
594
- background: #fff;
593
+ color: var(--sa-color-fg-heading);
594
+ background: var(--sa-color-bg-surface);
595
595
  }
596
596
  .bve-input--readonly {
597
- color: var(--sa-muted-light);
598
- background: var(--sa-bg-surface-2);
597
+ color: var(--sa-color-fg-subtle);
598
+ background: var(--sa-color-bg-sunken);
599
599
  }
600
600
  .bve-savings {
601
- font-size: 11.5px;
602
- color: var(--sa-muted-dark);
601
+ font-size: var(--sa-text-sm);
602
+ color: var(--sa-color-fg-secondary);
603
603
  display: inline-flex;
604
604
  align-items: center;
605
605
  gap: 8px;
@@ -607,11 +607,11 @@ function recordsEqual(a: Record<string, number>, b: Record<string, number>): boo
607
607
  }
608
608
  .bve-savings-pill {
609
609
  padding: 1px 6px;
610
- background: #d1fae5;
611
- color: #065f46;
610
+ background: var(--sa-color-positive-surface-strong);
611
+ color: var(--sa-color-positive-fg);
612
612
  border-radius: 4px;
613
613
  font-weight: 700;
614
- font-size: 10.5px;
614
+ font-size: var(--sa-text-xs);
615
615
  letter-spacing: 0.04em;
616
616
  }
617
617
  .bve-toggle-row {
@@ -619,19 +619,19 @@ function recordsEqual(a: Record<string, number>, b: Record<string, number>): boo
619
619
  align-items: center;
620
620
  gap: 8px;
621
621
  cursor: pointer;
622
- font-size: 13px;
622
+ font-size: var(--sa-text-md);
623
623
  }
624
624
  .bve-toggle-label {
625
- color: var(--sa-heading);
625
+ color: var(--sa-color-fg-heading);
626
626
  }
627
627
  .bve-textarea {
628
628
  padding: 8px 10px;
629
- border: 1px solid #cbd5e1;
629
+ border: 1px solid var(--sa-color-border-strong);
630
630
  border-radius: 6px;
631
- font-size: 13px;
631
+ font-size: var(--sa-text-md);
632
632
  font-family: inherit;
633
- color: var(--sa-heading);
634
- background: #fff;
633
+ color: var(--sa-color-fg-heading);
634
+ background: var(--sa-color-bg-surface);
635
635
  resize: vertical;
636
636
  }
637
637
  .bve-actions {
@@ -641,35 +641,35 @@ function recordsEqual(a: Record<string, number>, b: Record<string, number>): boo
641
641
  }
642
642
  .bve-btn {
643
643
  padding: 7px 14px;
644
- background: #fff;
645
- border: 1px solid #cbd5e1;
644
+ background: var(--sa-color-bg-surface);
645
+ border: 1px solid var(--sa-color-border-strong);
646
646
  border-radius: 6px;
647
647
  cursor: pointer;
648
- font-size: 12.5px;
648
+ font-size: var(--sa-text-md);
649
649
  font-family: inherit;
650
- color: var(--sa-heading);
650
+ color: var(--sa-color-fg-heading);
651
651
  }
652
652
  .bve-btn:hover:not(:disabled) {
653
- background: var(--sa-bg-surface-2);
653
+ background: var(--sa-color-bg-sunken);
654
654
  }
655
655
  .bve-btn:disabled {
656
656
  cursor: not-allowed;
657
657
  opacity: 0.5;
658
658
  }
659
659
  .bve-btn--primary {
660
- background: var(--sa-primary);
661
- border-color: var(--sa-primary);
662
- color: #fff;
660
+ background: var(--sa-color-accent);
661
+ border-color: var(--sa-color-accent);
662
+ color: var(--sa-color-fg-on-accent);
663
663
  }
664
664
  .bve-btn--primary:hover:not(:disabled) {
665
- background: var(--sa-primary-strong);
665
+ background: var(--sa-color-accent-strong);
666
666
  }
667
667
  .bve-error {
668
668
  padding: 8px 12px;
669
- background: #fef2f2;
670
- border: 1px solid #fecaca;
669
+ background: var(--sa-color-negative-surface);
670
+ border: 1px solid var(--sa-color-negative-border);
671
671
  border-radius: 6px;
672
- color: #b91c1c;
673
- font-size: 12.5px;
672
+ color: var(--sa-color-negative-fg);
673
+ font-size: var(--sa-text-md);
674
674
  }
675
675
  </style>
@@ -109,16 +109,16 @@ function statusMetaOf(v: BundleVersionRow): BundleStatusMeta {
109
109
  flex-direction: column;
110
110
  gap: 8px;
111
111
  padding: 14px 16px;
112
- background: #fbfbfd;
113
- border: 1px solid var(--bv-border, var(--sa-border));
112
+ background: var(--sa-color-bg-surface-raised);
113
+ border: 1px solid var(--bv-border, var(--sa-color-border));
114
114
  border-radius: 10px;
115
115
  }
116
116
  .bv-vstrip-label {
117
- font-size: 10.5px;
117
+ font-size: var(--sa-text-xs);
118
118
  font-weight: 700;
119
119
  text-transform: uppercase;
120
120
  letter-spacing: 0.1em;
121
- color: var(--sa-muted);
121
+ color: var(--sa-color-fg-muted);
122
122
  }
123
123
  .bv-vstrip-tabs {
124
124
  display: flex;
@@ -134,12 +134,12 @@ function statusMetaOf(v: BundleVersionRow): BundleStatusMeta {
134
134
  row-gap: 2px;
135
135
  align-items: center;
136
136
  padding: 8px 12px;
137
- background: #fff;
138
- border: 1px solid var(--sa-border);
137
+ background: var(--sa-color-bg-surface);
138
+ border: 1px solid var(--sa-color-border);
139
139
  border-radius: 8px;
140
140
  cursor: pointer;
141
141
  font-family: inherit;
142
- color: var(--sa-heading);
142
+ color: var(--sa-color-fg-heading);
143
143
  text-align: left;
144
144
  transition:
145
145
  border-color 0.12s,
@@ -147,21 +147,21 @@ function statusMetaOf(v: BundleVersionRow): BundleStatusMeta {
147
147
  background 0.12s;
148
148
  }
149
149
  .bv-vtab:hover {
150
- background: var(--sa-bg-surface-2);
150
+ background: var(--sa-color-bg-sunken);
151
151
  }
152
152
  .bv-vtab-current {
153
- border-color: var(--sa-primary);
154
- box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.12);
153
+ border-color: var(--sa-color-accent);
154
+ box-shadow: 0 0 0 2px var(--sa-shadow-tint-3);
155
155
  }
156
156
  .bv-vtab-name {
157
157
  font:
158
- 700 13px 'JetBrains Mono',
158
+ 700 var(--sa-text-md) 'JetBrains Mono',
159
159
  ui-monospace,
160
160
  monospace;
161
161
  letter-spacing: 0.02em;
162
162
  }
163
163
  .bv-vtab-status {
164
- font-size: 10.5px;
164
+ font-size: var(--sa-text-xs);
165
165
  font-weight: 700;
166
166
  letter-spacing: 0.04em;
167
167
  text-transform: uppercase;
@@ -170,30 +170,30 @@ function statusMetaOf(v: BundleVersionRow): BundleStatusMeta {
170
170
  justify-self: end;
171
171
  }
172
172
  .bv-vtab-status.live {
173
- background: #d1fae5;
174
- color: #065f46;
173
+ background: var(--sa-color-positive-surface-strong);
174
+ color: var(--sa-color-positive-fg);
175
175
  }
176
176
  .bv-vtab-status.scheduled {
177
- background: #fef3c7;
178
- color: #92400e;
177
+ background: var(--sa-color-warning-surface-strong);
178
+ color: var(--sa-color-warning-fg);
179
179
  }
180
180
  .bv-vtab-status.superseded {
181
- background: var(--sa-border);
182
- color: var(--sa-muted-dark);
181
+ background: var(--sa-color-border);
182
+ color: var(--sa-color-fg-secondary);
183
183
  }
184
184
  .bv-vtab-status.draft {
185
- background: #dbeafe;
186
- color: #1e40af;
185
+ background: var(--sa-color-info-surface-strong);
186
+ color: var(--sa-color-info-fg);
187
187
  }
188
188
  .bv-vtab-dates {
189
189
  grid-column: 1 / -1;
190
- font-size: 11px;
191
- color: var(--sa-muted);
190
+ font-size: var(--sa-text-xs);
191
+ color: var(--sa-color-fg-muted);
192
192
  }
193
193
  .bv-vtab-price {
194
194
  grid-column: 1 / -1;
195
- font-size: 11.5px;
196
- color: var(--sa-muted-dark);
195
+ font-size: var(--sa-text-sm);
196
+ color: var(--sa-color-fg-secondary);
197
197
  font-weight: 600;
198
198
  }
199
199
 
@@ -202,15 +202,15 @@ function statusMetaOf(v: BundleVersionRow): BundleStatusMeta {
202
202
  align-items: center;
203
203
  gap: 6px;
204
204
  padding: 8px 12px;
205
- background: #fff;
206
- border: 1px dashed #cbd5e1;
207
- color: var(--sa-primary);
208
- font-size: 12.5px;
205
+ background: var(--sa-color-bg-surface);
206
+ border: 1px dashed var(--sa-color-border-strong);
207
+ color: var(--sa-color-accent);
208
+ font-size: var(--sa-text-md);
209
209
  font-weight: 600;
210
210
  }
211
211
  .bv-vtab-new:hover:not(:disabled) {
212
- background: var(--sa-primary-50);
213
- border-color: #93c5fd;
212
+ background: var(--sa-color-accent-surface-strong);
213
+ border-color: var(--sa-color-info-border);
214
214
  }
215
215
  .bv-vtab-new:disabled {
216
216
  opacity: 0.45;
@@ -490,8 +490,8 @@ async function doSubmit(code: string): Promise<void> {
490
490
  }
491
491
 
492
492
  .pl-dlg__sub {
493
- font-size: 12.5px;
494
- color: var(--sa-muted, var(--sa-muted));
493
+ font-size: var(--sa-text-md);
494
+ color: var(--sa-color-fg-muted);
495
495
  margin-top: 3px;
496
496
  line-height: 1.4;
497
497
  }
@@ -507,10 +507,10 @@ async function doSubmit(code: string): Promise<void> {
507
507
  display: inline-flex;
508
508
  align-items: center;
509
509
  gap: 6px;
510
- font-size: 12px;
511
- color: var(--sa-muted-dark, var(--sa-muted-dark));
512
- background: var(--sa-primary-50);
513
- border: 1px solid #bfdbfe;
510
+ font-size: var(--sa-text-sm);
511
+ color: var(--sa-color-fg-secondary);
512
+ background: var(--sa-color-accent-surface-strong);
513
+ border: 1px solid var(--sa-color-info-border);
514
514
  border-radius: 999px;
515
515
  padding: 4px 12px;
516
516
  }
@@ -536,10 +536,10 @@ async function doSubmit(code: string): Promise<void> {
536
536
  }
537
537
 
538
538
  .pl-field label {
539
- font: 600 11px var(--sa-font-body, system-ui, sans-serif);
539
+ font: 600 var(--sa-text-xs) var(--sa-font-body, system-ui, sans-serif);
540
540
  letter-spacing: 0.04em;
541
541
  text-transform: uppercase;
542
- color: var(--sa-muted, var(--sa-muted));
542
+ color: var(--sa-color-fg-muted);
543
543
  display: flex;
544
544
  align-items: baseline;
545
545
  gap: 6px;
@@ -549,21 +549,21 @@ async function doSubmit(code: string): Promise<void> {
549
549
  font-weight: 500;
550
550
  text-transform: none;
551
551
  letter-spacing: 0;
552
- color: var(--sa-muted-light);
553
- font-size: 11px;
552
+ color: var(--sa-color-fg-subtle);
553
+ font-size: var(--sa-text-xs);
554
554
  }
555
555
 
556
556
  .pl-field__error {
557
- font-size: 11.5px;
558
- color: #b91c1c;
557
+ font-size: var(--sa-text-sm);
558
+ color: var(--sa-color-negative-fg);
559
559
  }
560
560
 
561
561
  .pl-input--invalid {
562
- border-color: #fca5a5;
562
+ border-color: var(--sa-color-negative-border);
563
563
  }
564
564
 
565
565
  .pl-input::placeholder {
566
- color: #cbd5e1;
566
+ color: var(--sa-color-fg-disabled);
567
567
  }
568
568
 
569
569
  .pl-textarea {
@@ -575,18 +575,18 @@ async function doSubmit(code: string): Promise<void> {
575
575
  .pl-slug-input {
576
576
  display: flex;
577
577
  align-items: stretch;
578
- background: #fff;
579
- border: 1px solid var(--sa-border, var(--sa-border));
578
+ background: var(--sa-color-bg-surface);
579
+ border: 1px solid var(--sa-color-border);
580
580
  border-radius: 8px;
581
581
  overflow: hidden;
582
582
  }
583
583
 
584
584
  .pl-slug-input__prefix {
585
585
  padding: 9px 12px;
586
- background: var(--sa-bg-surface-2);
587
- color: var(--sa-muted-light);
588
- font: 500 12px var(--sa-font-mono, ui-monospace, monospace);
589
- border-right: 1px solid var(--sa-border, var(--sa-border));
586
+ background: var(--sa-color-bg-sunken);
587
+ color: var(--sa-color-fg-subtle);
588
+ font: 500 var(--sa-text-sm) var(--sa-font-mono, ui-monospace, monospace);
589
+ border-right: 1px solid var(--sa-color-border);
590
590
  white-space: nowrap;
591
591
  }
592
592
 
@@ -338,23 +338,23 @@ async function doSubmit(code: string): Promise<void> {
338
338
  }
339
339
 
340
340
  .pl-dlg__sub {
341
- font-size: 12.5px;
342
- color: var(--sa-muted, var(--sa-muted));
341
+ font-size: var(--sa-text-md);
342
+ color: var(--sa-color-fg-muted);
343
343
  margin-top: 3px;
344
344
  }
345
345
 
346
346
  .pl-dlg__sep {
347
- color: #cbd5e1;
347
+ color: var(--sa-color-fg-disabled);
348
348
  margin: 0 6px;
349
349
  }
350
350
 
351
351
  .pl-dlg__sub code {
352
352
  font-family: var(--sa-font-mono, ui-monospace, monospace);
353
- background: var(--sa-border-soft);
354
- color: var(--sa-muted-dark, var(--sa-muted-dark));
353
+ background: var(--sa-color-border-soft);
354
+ color: var(--sa-color-fg-secondary);
355
355
  padding: 1px 6px;
356
356
  border-radius: 4px;
357
- font-size: 11.5px;
357
+ font-size: var(--sa-text-sm);
358
358
  }
359
359
 
360
360
  .pl-dlg__body {
@@ -189,13 +189,13 @@ async function onSubmit() {
189
189
  .pc-dlg__title {
190
190
  font-family: var(--sa-font-head, system-ui, sans-serif);
191
191
  font-weight: 700;
192
- font-size: 18px;
193
- color: var(--sa-heading, var(--sa-heading));
192
+ font-size: var(--sa-text-xl);
193
+ color: var(--sa-color-fg-heading);
194
194
  }
195
195
 
196
196
  .pc-dlg__sub {
197
- font-size: 12.5px;
198
- color: var(--sa-muted, var(--sa-muted));
197
+ font-size: var(--sa-text-md);
198
+ color: var(--sa-color-fg-muted);
199
199
  margin-top: 2px;
200
200
  }
201
201
 
@@ -207,14 +207,14 @@ async function onSubmit() {
207
207
  }
208
208
 
209
209
  .pc-dlg__foot {
210
- border-top: 1px solid var(--sa-border, var(--sa-border));
210
+ border-top: 1px solid var(--sa-color-border);
211
211
  }
212
212
 
213
213
  .pc-error {
214
- background: #fef2f2;
215
- border: 1px solid #fecaca;
216
- color: #b91c1c;
217
- font-size: 13px;
214
+ background: var(--sa-color-negative-surface);
215
+ border: 1px solid var(--sa-color-negative-border);
216
+ color: var(--sa-color-negative-fg);
217
+ font-size: var(--sa-text-md);
218
218
  margin: 8px 0 0;
219
219
  padding: 8px 12px;
220
220
  border-radius: 8px;