@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
@@ -25,7 +25,7 @@ defineProps<{
25
25
  display: inline-flex;
26
26
  align-items: center;
27
27
  gap: 4px;
28
- font-size: 10.5px;
28
+ font-size: var(--sa-text-xs);
29
29
  font-weight: 700;
30
30
  letter-spacing: 0.04em;
31
31
  padding: 3px 8px;
@@ -36,27 +36,27 @@ defineProps<{
36
36
  color: inherit;
37
37
  }
38
38
  .sa-pill--positive {
39
- background: var(--sa-positive-soft, rgba(4, 120, 87, 0.1));
40
- color: var(--sa-positive, #047857);
39
+ background: var(--sa-color-positive-surface);
40
+ color: var(--sa-color-positive-fg);
41
41
  }
42
42
  .sa-pill--warning {
43
- background: var(--sa-warning-soft, rgba(245, 158, 11, 0.1));
44
- color: var(--sa-warning, #b45309);
43
+ background: var(--sa-color-warning-surface-strong);
44
+ color: var(--sa-color-warning-fg);
45
45
  }
46
46
  .sa-pill--negative {
47
- background: var(--sa-negative-soft, rgba(220, 38, 38, 0.08));
48
- color: var(--sa-negative, #dc2626);
47
+ background: var(--sa-color-negative-surface);
48
+ color: var(--sa-color-negative);
49
49
  }
50
50
  .sa-pill--muted {
51
- background: var(--sa-border-soft);
52
- color: var(--sa-muted, var(--sa-muted));
51
+ background: var(--sa-color-border-soft);
52
+ color: var(--sa-color-fg-muted);
53
53
  }
54
54
  .sa-pill--primary {
55
- background: var(--sa-primary-soft, rgba(63, 107, 255, 0.08));
56
- color: var(--sa-primary, #3f6bff);
55
+ background: var(--sa-color-accent-surface);
56
+ color: var(--sa-color-accent);
57
57
  }
58
58
  .sa-pill--accent {
59
- background: rgba(245, 158, 11, 0.16);
60
- color: #b45309;
59
+ background: var(--sa-color-warning-surface-strong);
60
+ color: var(--sa-color-warning-fg);
61
61
  }
62
62
  </style>
@@ -44,7 +44,7 @@ function formatMax(n: number): string {
44
44
 
45
45
  <style scoped>
46
46
  .sp-limits-row {
47
- border-bottom: 1px solid rgba(0, 0, 0, 0.06);
47
+ border-bottom: 1px solid var(--sa-color-border-soft);
48
48
  }
49
49
  .sp-limits-row td {
50
50
  padding: 8px 12px;
@@ -54,14 +54,14 @@ function formatMax(n: number): string {
54
54
  font-weight: 500;
55
55
  }
56
56
  .sp-limits-row__target--ok {
57
- color: var(--q-positive, #21ba45);
57
+ color: var(--sa-color-positive);
58
58
  font-weight: 600;
59
59
  }
60
60
  .sp-limits-row__target--bad {
61
- color: var(--q-negative, #c10015);
61
+ color: var(--sa-color-negative);
62
62
  font-weight: 600;
63
63
  }
64
64
  .sp-limits-row--exceeded {
65
- background: rgba(193, 0, 21, 0.05);
65
+ background: var(--sa-color-negative-surface);
66
66
  }
67
67
  </style>
@@ -400,7 +400,7 @@ function formatDate(date: Date | string | null | undefined): string {
400
400
  BlinkMacSystemFont,
401
401
  system-ui,
402
402
  sans-serif;
403
- color: var(--sa-heading);
403
+ color: var(--sa-color-fg-heading);
404
404
  }
405
405
  .msb-head {
406
406
  display: flex;
@@ -410,45 +410,45 @@ function formatDate(date: Date | string | null | undefined): string {
410
410
  }
411
411
  .msb-title {
412
412
  margin: 0;
413
- font-size: 20px;
413
+ font-size: var(--sa-text-xl);
414
414
  font-weight: 700;
415
415
  letter-spacing: -0.01em;
416
416
  }
417
417
  .msb-sub {
418
418
  margin: 4px 0 0;
419
- color: var(--sa-muted);
420
- font-size: 13px;
419
+ color: var(--sa-color-fg-muted);
420
+ font-size: var(--sa-text-md);
421
421
  max-width: 580px;
422
422
  line-height: 1.5;
423
423
  }
424
424
  .msb-loading {
425
425
  padding: 32px;
426
426
  text-align: center;
427
- color: var(--sa-muted);
427
+ color: var(--sa-color-fg-muted);
428
428
  }
429
429
  .msb-empty {
430
430
  padding: 32px 24px;
431
431
  text-align: center;
432
- background: #fff;
433
- border: 1px dashed #cbd5e1;
432
+ background: var(--sa-color-bg-surface);
433
+ border: 1px dashed var(--sa-color-border-strong);
434
434
  border-radius: 12px;
435
- color: var(--sa-muted-dark);
435
+ color: var(--sa-color-fg-secondary);
436
436
  }
437
437
  .msb-empty-link {
438
438
  background: transparent;
439
439
  border: 0;
440
- color: var(--sa-primary);
440
+ color: var(--sa-color-accent);
441
441
  cursor: pointer;
442
442
  font: inherit;
443
443
  text-decoration: underline;
444
444
  }
445
445
  .msb-error {
446
446
  padding: 10px 14px;
447
- background: #fef2f2;
448
- border: 1px solid #fecaca;
447
+ background: var(--sa-color-negative-surface);
448
+ border: 1px solid var(--sa-color-negative-border);
449
449
  border-radius: 8px;
450
- color: #b91c1c;
451
- font-size: 13px;
450
+ color: var(--sa-color-negative-fg);
451
+ font-size: var(--sa-text-md);
452
452
  }
453
453
  .msb-list {
454
454
  display: flex;
@@ -456,14 +456,14 @@ function formatDate(date: Date | string | null | undefined): string {
456
456
  gap: 10px;
457
457
  }
458
458
  .msb-card {
459
- background: #fff;
460
- border: 1px solid var(--sa-border);
459
+ background: var(--sa-color-bg-surface);
460
+ border: 1px solid var(--sa-color-border);
461
461
  border-radius: 12px;
462
462
  padding: 14px 18px;
463
463
  }
464
464
  .msb-card--canceled-pending {
465
- border-color: #fde68a;
466
- background: var(--sa-warning-bg);
465
+ border-color: var(--sa-color-warning-border);
466
+ background: var(--sa-color-warning-surface);
467
467
  }
468
468
  .msb-card--canceled {
469
469
  opacity: 0.65;
@@ -482,18 +482,18 @@ function formatDate(date: Date | string | null | undefined): string {
482
482
  }
483
483
  .msb-card-key {
484
484
  font:
485
- 700 13px 'JetBrains Mono',
485
+ 700 var(--sa-text-md) 'JetBrains Mono',
486
486
  ui-monospace,
487
487
  monospace;
488
488
  letter-spacing: 0.04em;
489
489
  }
490
490
  .msb-card-meta {
491
491
  margin-top: 4px;
492
- font-size: 12.5px;
493
- color: var(--sa-muted);
492
+ font-size: var(--sa-text-md);
493
+ color: var(--sa-color-fg-muted);
494
494
  }
495
495
  .msb-chip {
496
- font-size: 10.5px;
496
+ font-size: var(--sa-text-xs);
497
497
  font-weight: 700;
498
498
  text-transform: uppercase;
499
499
  letter-spacing: 0.06em;
@@ -501,25 +501,25 @@ function formatDate(date: Date | string | null | undefined): string {
501
501
  border-radius: 999px;
502
502
  }
503
503
  .msb-chip--active {
504
- background: #d1fae5;
505
- color: #065f46;
504
+ background: var(--sa-color-positive-surface-strong);
505
+ color: var(--sa-color-positive-fg);
506
506
  }
507
507
  .msb-chip--canceled-pending {
508
- background: #fef3c7;
509
- color: #92400e;
508
+ background: var(--sa-color-warning-surface-strong);
509
+ color: var(--sa-color-warning-fg);
510
510
  }
511
511
  .msb-chip--canceled {
512
- background: var(--sa-border);
513
- color: var(--sa-muted-dark);
512
+ background: var(--sa-color-border);
513
+ color: var(--sa-color-fg-secondary);
514
514
  }
515
515
  .msb-cancel-info {
516
516
  margin-top: 10px;
517
517
  padding: 8px 12px;
518
- background: var(--sa-warning-bg);
519
- border: 1px solid #fde68a;
518
+ background: var(--sa-color-warning-surface);
519
+ border: 1px solid var(--sa-color-warning-border);
520
520
  border-radius: 6px;
521
- color: #92400e;
522
- font-size: 12.5px;
521
+ color: var(--sa-color-warning-fg);
522
+ font-size: var(--sa-text-md);
523
523
  }
524
524
 
525
525
  .msb-btn {
@@ -527,51 +527,51 @@ function formatDate(date: Date | string | null | undefined): string {
527
527
  align-items: center;
528
528
  gap: 6px;
529
529
  padding: 7px 14px;
530
- background: #fff;
531
- border: 1px solid #cbd5e1;
530
+ background: var(--sa-color-bg-surface);
531
+ border: 1px solid var(--sa-color-border-strong);
532
532
  border-radius: 7px;
533
533
  cursor: pointer;
534
534
  font-family: inherit;
535
- font-size: 13px;
536
- color: var(--sa-heading);
535
+ font-size: var(--sa-text-md);
536
+ color: var(--sa-color-fg-heading);
537
537
  }
538
538
  .msb-btn:hover:not(:disabled) {
539
- background: var(--sa-bg-surface-2);
539
+ background: var(--sa-color-bg-sunken);
540
540
  }
541
541
  .msb-btn:disabled {
542
542
  cursor: not-allowed;
543
543
  opacity: 0.55;
544
544
  }
545
545
  .msb-btn--primary {
546
- background: var(--sa-primary);
547
- border-color: var(--sa-primary);
548
- color: #fff;
546
+ background: var(--sa-color-accent);
547
+ border-color: var(--sa-color-accent);
548
+ color: var(--sa-color-fg-on-accent);
549
549
  }
550
550
  .msb-btn--primary:hover:not(:disabled) {
551
- background: var(--sa-primary-strong);
551
+ background: var(--sa-color-accent-strong);
552
552
  }
553
553
  .msb-btn--ghost {
554
554
  background: transparent;
555
- border-color: #fca5a5;
556
- color: #b91c1c;
555
+ border-color: var(--sa-color-negative-border);
556
+ color: var(--sa-color-negative-fg);
557
557
  }
558
558
  .msb-btn--ghost:hover:not(:disabled) {
559
- background: #fef2f2;
559
+ background: var(--sa-color-negative-surface);
560
560
  }
561
561
 
562
562
  .msb-modal-bg {
563
563
  position: fixed;
564
564
  inset: 0;
565
- background: rgba(15, 23, 42, 0.55);
565
+ background: var(--sa-color-bg-overlay);
566
566
  display: grid;
567
567
  place-items: center;
568
568
  z-index: 1000;
569
569
  }
570
570
  .msb-modal {
571
571
  width: min(520px, 96vw);
572
- background: #fff;
572
+ background: var(--sa-color-bg-surface);
573
573
  border-radius: 12px;
574
- box-shadow: 0 20px 60px rgba(15, 23, 42, 0.25);
574
+ box-shadow: 0 20px 60px var(--sa-shadow-tint-4);
575
575
  display: flex;
576
576
  flex-direction: column;
577
577
  }
@@ -580,23 +580,23 @@ function formatDate(date: Date | string | null | undefined): string {
580
580
  align-items: center;
581
581
  justify-content: space-between;
582
582
  padding: 16px 20px 10px;
583
- border-bottom: 1px solid var(--sa-border);
583
+ border-bottom: 1px solid var(--sa-color-border);
584
584
  }
585
585
  .msb-modal-title {
586
- font-size: 16px;
586
+ font-size: var(--sa-text-lg);
587
587
  font-weight: 700;
588
588
  }
589
589
  .msb-modal-x {
590
590
  background: transparent;
591
591
  border: 0;
592
592
  cursor: pointer;
593
- color: var(--sa-muted);
593
+ color: var(--sa-color-fg-muted);
594
594
  padding: 4px;
595
595
  border-radius: 4px;
596
596
  }
597
597
  .msb-modal-x:hover {
598
- background: var(--sa-border-soft);
599
- color: var(--sa-heading);
598
+ background: var(--sa-color-border-soft);
599
+ color: var(--sa-color-fg-heading);
600
600
  }
601
601
  .msb-modal-body {
602
602
  padding: 16px 20px;
@@ -606,8 +606,8 @@ function formatDate(date: Date | string | null | undefined): string {
606
606
  }
607
607
  .msb-modal-foot {
608
608
  padding: 12px 20px;
609
- border-top: 1px solid var(--sa-border);
610
- background: var(--sa-bg-surface-2);
609
+ border-top: 1px solid var(--sa-color-border);
610
+ background: var(--sa-color-bg-sunken);
611
611
  border-radius: 0 0 12px 12px;
612
612
  display: flex;
613
613
  justify-content: flex-end;
@@ -619,21 +619,21 @@ function formatDate(date: Date | string | null | undefined): string {
619
619
  gap: 4px;
620
620
  }
621
621
  .msb-field-label {
622
- font-size: 12px;
622
+ font-size: var(--sa-text-sm);
623
623
  font-weight: 600;
624
- color: var(--sa-muted-dark);
624
+ color: var(--sa-color-fg-secondary);
625
625
  }
626
626
  .msb-field-hint {
627
- font-size: 11px;
628
- color: var(--sa-muted-light);
627
+ font-size: var(--sa-text-xs);
628
+ color: var(--sa-color-fg-subtle);
629
629
  }
630
630
  .msb-input {
631
631
  padding: 7px 10px;
632
- border: 1px solid #cbd5e1;
632
+ border: 1px solid var(--sa-color-border-strong);
633
633
  border-radius: 6px;
634
634
  font-family: inherit;
635
- font-size: 13px;
636
- color: var(--sa-heading);
637
- background: #fff;
635
+ font-size: var(--sa-text-md);
636
+ color: var(--sa-color-fg-heading);
637
+ background: var(--sa-color-bg-surface);
638
638
  }
639
639
  </style>
@@ -302,24 +302,24 @@ defineExpose({ draft });
302
302
  align-items: center;
303
303
  gap: 8px;
304
304
  font-family: 'SF Mono', Consolas, monospace;
305
- font-size: 11px;
305
+ font-size: var(--sa-text-xs);
306
306
  letter-spacing: 0.1em;
307
307
  text-transform: uppercase;
308
- color: var(--q-primary, #0f766e);
309
- background: rgba(15, 118, 110, 0.08);
308
+ color: var(--sa-color-accent);
309
+ background: var(--sa-color-accent-surface);
310
310
  padding: 6px 11px;
311
311
  border-radius: 999px;
312
- border: 1px solid rgba(15, 118, 110, 0.2);
312
+ border: 1px solid var(--sa-color-accent-border);
313
313
  }
314
314
  .sp-onb__header h1 {
315
315
  margin: 12px 0 8px;
316
- font-size: clamp(1.6rem, 3vw, 2.4rem);
316
+ font-size: var(--sa-text-4xl);
317
317
  line-height: 1.1;
318
318
  letter-spacing: -0.01em;
319
319
  }
320
320
  .sp-onb__header p {
321
321
  margin: 0;
322
- color: rgba(0, 0, 0, 0.6);
322
+ color: var(--sa-color-fg-secondary);
323
323
  max-width: 640px;
324
324
  }
325
325
  .sp-onb__layout {
@@ -339,26 +339,26 @@ defineExpose({ draft });
339
339
  gap: 20px;
340
340
  }
341
341
  .sp-onb__section {
342
- background: #fff;
343
- border: 1px solid rgba(0, 0, 0, 0.08);
342
+ background: var(--sa-color-bg-surface);
343
+ border: 1px solid var(--sa-color-border);
344
344
  border-radius: 22px;
345
345
  padding: 26px 28px 24px;
346
- box-shadow: 0 24px 80px rgba(31, 41, 51, 0.05);
346
+ box-shadow: 0 24px 80px var(--sa-shadow-tint-1);
347
347
  }
348
348
  .sp-onb__sec-head {
349
349
  padding-bottom: 14px;
350
350
  margin-bottom: 18px;
351
- border-bottom: 1px dashed rgba(0, 0, 0, 0.08);
351
+ border-bottom: 1px dashed var(--sa-color-border);
352
352
  }
353
353
  .sp-onb__sec-head h2 {
354
354
  margin: 6px 0 0;
355
- font-size: 1.4rem;
355
+ font-size: var(--sa-text-2xl);
356
356
  letter-spacing: -0.005em;
357
357
  }
358
358
  .sp-onb__sec-head p {
359
359
  margin: 4px 0 0;
360
- color: rgba(0, 0, 0, 0.55);
361
- font-size: 13px;
360
+ color: var(--sa-color-fg-muted);
361
+ font-size: var(--sa-text-md);
362
362
  max-width: 520px;
363
363
  }
364
364
  .sp-onb__sec-num {
@@ -366,22 +366,22 @@ defineExpose({ draft });
366
366
  align-items: center;
367
367
  gap: 8px;
368
368
  font-family: 'SF Mono', Consolas, monospace;
369
- font-size: 11px;
369
+ font-size: var(--sa-text-xs);
370
370
  letter-spacing: 0.16em;
371
371
  text-transform: uppercase;
372
- color: var(--q-primary, #0f766e);
372
+ color: var(--sa-color-accent);
373
373
  font-weight: 700;
374
374
  }
375
375
  .sp-onb__sec-num::before {
376
376
  content: '';
377
377
  width: 28px;
378
378
  height: 1px;
379
- background: var(--q-primary, #0f766e);
379
+ background: var(--sa-color-accent);
380
380
  }
381
381
  .sp-onb__loading {
382
382
  padding: 40px;
383
383
  text-align: center;
384
- color: rgba(0, 0, 0, 0.5);
384
+ color: var(--sa-color-fg-subtle);
385
385
  }
386
386
  .sp-onb__actions {
387
387
  display: flex;
@@ -392,22 +392,22 @@ defineExpose({ draft });
392
392
  }
393
393
  .sp-onb__back-btn {
394
394
  background: none;
395
- border: 1px solid rgba(0, 0, 0, 0.15);
395
+ border: 1px solid var(--sa-color-border-strong);
396
396
  border-radius: 10px;
397
397
  padding: 10px 16px;
398
398
  font-family: inherit;
399
- font-size: 13px;
399
+ font-size: var(--sa-text-md);
400
400
  cursor: pointer;
401
- color: rgba(0, 0, 0, 0.7);
401
+ color: var(--sa-color-fg-body);
402
402
  }
403
403
  .sp-onb__back-btn:hover {
404
- border-color: rgba(0, 0, 0, 0.4);
404
+ border-color: var(--sa-color-border-strong);
405
405
  }
406
406
  .sp-onb__error {
407
- color: #b91c1c;
408
- background: rgba(220, 38, 38, 0.08);
407
+ color: var(--sa-color-negative-fg);
408
+ background: var(--sa-color-negative-surface);
409
409
  padding: 10px 14px;
410
410
  border-radius: 8px;
411
- font-size: 13px;
411
+ font-size: var(--sa-text-md);
412
412
  }
413
413
  </style>
@@ -157,16 +157,10 @@ const rawJson = computed(() => {
157
157
 
158
158
  <style scoped>
159
159
  .sp-package-snapshot {
160
- --sp-text-muted: rgba(0, 0, 0, 0.55);
161
- --sp-text-strong: rgba(0, 0, 0, 0.85);
162
- --sp-border: rgba(0, 0, 0, 0.08);
163
- --sp-pre-bg: rgba(0, 0, 0, 0.04);
164
- }
165
- body.body--dark .sp-package-snapshot {
166
- --sp-text-muted: rgba(255, 255, 255, 0.62);
167
- --sp-text-strong: rgba(255, 255, 255, 0.85);
168
- --sp-border: rgba(255, 255, 255, 0.16);
169
- --sp-pre-bg: rgba(255, 255, 255, 0.06);
160
+ --sp-text-muted: var(--sa-color-fg-muted);
161
+ --sp-text-strong: var(--sa-color-fg-heading);
162
+ --sp-border: var(--sa-color-border);
163
+ --sp-pre-bg: var(--sa-color-bg-sunken);
170
164
  }
171
165
  .sp-package-snapshot__head {
172
166
  display: flex;
@@ -176,7 +170,7 @@ body.body--dark .sp-package-snapshot {
176
170
  flex-wrap: wrap;
177
171
  }
178
172
  .sp-package-snapshot__eyebrow {
179
- font-size: 12px;
173
+ font-size: var(--sa-text-sm);
180
174
  text-transform: uppercase;
181
175
  letter-spacing: 0.05em;
182
176
  color: var(--sp-text-muted);
@@ -186,11 +180,11 @@ body.body--dark .sp-package-snapshot {
186
180
  .sp-package-snapshot__sub {
187
181
  margin: 0;
188
182
  color: var(--sp-text-muted);
189
- font-size: 13px;
183
+ font-size: var(--sa-text-md);
190
184
  }
191
185
  .sp-package-snapshot__empty {
192
186
  color: var(--sp-text-muted);
193
- font-size: 13px;
187
+ font-size: var(--sa-text-md);
194
188
  font-style: italic;
195
189
  }
196
190
  .sp-package-snapshot__list {
@@ -210,7 +204,7 @@ body.body--dark .sp-package-snapshot {
210
204
  }
211
205
  .sp-package-snapshot__muted {
212
206
  color: var(--sp-text-muted);
213
- font-size: 13px;
207
+ font-size: var(--sa-text-md);
214
208
  }
215
209
  .sp-package-snapshot__bundles {
216
210
  margin: 0;
@@ -227,13 +221,13 @@ body.body--dark .sp-package-snapshot {
227
221
  padding: 12px;
228
222
  background: var(--sp-pre-bg);
229
223
  border-radius: 4px;
230
- font-size: 12px;
224
+ font-size: var(--sa-text-sm);
231
225
  overflow-x: auto;
232
226
  max-height: 320px;
233
227
  }
234
228
  code {
235
229
  font-family: 'SFMono-Regular', Menlo, Consolas, monospace;
236
- font-size: 12px;
230
+ font-size: var(--sa-text-sm);
237
231
  background: var(--sp-pre-bg);
238
232
  padding: 1px 4px;
239
233
  border-radius: 3px;
@@ -71,8 +71,8 @@ defineEmits<{ accept: [] }>();
71
71
 
72
72
  <style scoped>
73
73
  .sp-pending-version {
74
- border: 1px solid rgba(242, 192, 55, 0.4);
75
- background: rgba(242, 192, 55, 0.08);
74
+ border: 1px solid var(--sa-color-warning-border);
75
+ background: var(--sa-color-warning-surface);
76
76
  border-radius: 6px;
77
77
  padding: 12px 16px;
78
78
  display: flex;
@@ -87,35 +87,35 @@ defineEmits<{ accept: [] }>();
87
87
  .sp-pending-version__chip {
88
88
  padding: 2px 8px;
89
89
  border-radius: 12px;
90
- font-size: 12px;
90
+ font-size: var(--sa-text-sm);
91
91
  font-weight: 600;
92
92
  text-transform: uppercase;
93
93
  }
94
94
  .sp-pending-version__chip--good {
95
- background: rgba(33, 186, 69, 0.15);
96
- color: var(--q-positive, #21ba45);
95
+ background: var(--sa-color-positive-surface-strong);
96
+ color: var(--sa-color-positive);
97
97
  }
98
98
  .sp-pending-version__chip--warn {
99
- background: rgba(193, 0, 21, 0.15);
100
- color: var(--q-negative, #c10015);
99
+ background: var(--sa-color-negative-surface-strong);
100
+ color: var(--sa-color-negative);
101
101
  }
102
102
  .sp-pending-version__note {
103
103
  margin: 0;
104
- color: rgba(0, 0, 0, 0.75);
104
+ color: var(--sa-color-fg-body);
105
105
  }
106
106
  .sp-pending-version__effective,
107
107
  .sp-pending-version__accepted {
108
108
  margin: 0;
109
- font-size: 13px;
110
- color: rgba(0, 0, 0, 0.6);
109
+ font-size: var(--sa-text-md);
110
+ color: var(--sa-color-fg-secondary);
111
111
  }
112
112
  .sp-pending-version__btn {
113
113
  align-self: flex-start;
114
114
  padding: 6px 14px;
115
115
  border-radius: 4px;
116
116
  border: 0;
117
- background: var(--q-primary, #1976d2);
118
- color: white;
117
+ background: var(--sa-color-accent);
118
+ color: var(--sa-color-fg-on-accent);
119
119
  font-weight: 600;
120
120
  cursor: pointer;
121
121
  }