@rovela-ai/sdk 0.3.22 → 0.3.30

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 (125) hide show
  1. package/dist/admin/api/index.d.ts +4 -0
  2. package/dist/admin/api/index.d.ts.map +1 -1
  3. package/dist/admin/api/index.js +6 -0
  4. package/dist/admin/api/index.js.map +1 -1
  5. package/dist/admin/api/products-bulk.d.ts +38 -0
  6. package/dist/admin/api/products-bulk.d.ts.map +1 -0
  7. package/dist/admin/api/products-bulk.js +135 -0
  8. package/dist/admin/api/products-bulk.js.map +1 -0
  9. package/dist/admin/api/products-stats.d.ts +34 -0
  10. package/dist/admin/api/products-stats.d.ts.map +1 -0
  11. package/dist/admin/api/products-stats.js +43 -0
  12. package/dist/admin/api/products-stats.js.map +1 -0
  13. package/dist/admin/api/products.d.ts.map +1 -1
  14. package/dist/admin/api/products.js +56 -5
  15. package/dist/admin/api/products.js.map +1 -1
  16. package/dist/admin/api/setup-guide.d.ts +78 -0
  17. package/dist/admin/api/setup-guide.d.ts.map +1 -0
  18. package/dist/admin/api/setup-guide.js +235 -0
  19. package/dist/admin/api/setup-guide.js.map +1 -0
  20. package/dist/admin/api/stats.d.ts +3 -0
  21. package/dist/admin/api/stats.d.ts.map +1 -1
  22. package/dist/admin/api/stats.js +20 -5
  23. package/dist/admin/api/stats.js.map +1 -1
  24. package/dist/admin/components/AdminLayout.d.ts.map +1 -1
  25. package/dist/admin/components/AdminLayout.js +5 -2
  26. package/dist/admin/components/AdminLayout.js.map +1 -1
  27. package/dist/admin/components/AdminNav.d.ts.map +1 -1
  28. package/dist/admin/components/AdminNav.js +13 -0
  29. package/dist/admin/components/AdminNav.js.map +1 -1
  30. package/dist/admin/components/LowStockAlert.d.ts.map +1 -1
  31. package/dist/admin/components/LowStockAlert.js +1 -1
  32. package/dist/admin/components/LowStockAlert.js.map +1 -1
  33. package/dist/admin/components/OrderStatusChart.d.ts.map +1 -1
  34. package/dist/admin/components/OrderStatusChart.js +7 -1
  35. package/dist/admin/components/OrderStatusChart.js.map +1 -1
  36. package/dist/admin/components/PeriodSelector.d.ts +9 -0
  37. package/dist/admin/components/PeriodSelector.d.ts.map +1 -0
  38. package/dist/admin/components/PeriodSelector.js +19 -0
  39. package/dist/admin/components/PeriodSelector.js.map +1 -0
  40. package/dist/admin/components/PrimaryMetricsRow.d.ts +11 -0
  41. package/dist/admin/components/PrimaryMetricsRow.d.ts.map +1 -0
  42. package/dist/admin/components/PrimaryMetricsRow.js +73 -0
  43. package/dist/admin/components/PrimaryMetricsRow.js.map +1 -0
  44. package/dist/admin/components/ProductTable.d.ts +2 -1
  45. package/dist/admin/components/ProductTable.d.ts.map +1 -1
  46. package/dist/admin/components/ProductTable.js +284 -33
  47. package/dist/admin/components/ProductTable.js.map +1 -1
  48. package/dist/admin/components/RevenueChart.d.ts.map +1 -1
  49. package/dist/admin/components/RevenueChart.js +4 -1
  50. package/dist/admin/components/RevenueChart.js.map +1 -1
  51. package/dist/admin/components/SecondaryMetricsRow.d.ts +14 -0
  52. package/dist/admin/components/SecondaryMetricsRow.d.ts.map +1 -0
  53. package/dist/admin/components/SecondaryMetricsRow.js +45 -0
  54. package/dist/admin/components/SecondaryMetricsRow.js.map +1 -0
  55. package/dist/admin/components/SetupGuide.d.ts +4 -0
  56. package/dist/admin/components/SetupGuide.d.ts.map +1 -0
  57. package/dist/admin/components/SetupGuide.js +238 -0
  58. package/dist/admin/components/SetupGuide.js.map +1 -0
  59. package/dist/admin/components/index.d.ts +7 -0
  60. package/dist/admin/components/index.d.ts.map +1 -1
  61. package/dist/admin/components/index.js +4 -0
  62. package/dist/admin/components/index.js.map +1 -1
  63. package/dist/admin/hooks/index.d.ts +3 -0
  64. package/dist/admin/hooks/index.d.ts.map +1 -1
  65. package/dist/admin/hooks/index.js +2 -0
  66. package/dist/admin/hooks/index.js.map +1 -1
  67. package/dist/admin/hooks/useAdminProductMetrics.d.ts +3 -0
  68. package/dist/admin/hooks/useAdminProductMetrics.d.ts.map +1 -0
  69. package/dist/admin/hooks/useAdminProductMetrics.js +32 -0
  70. package/dist/admin/hooks/useAdminProductMetrics.js.map +1 -0
  71. package/dist/admin/hooks/useAdminProducts.d.ts.map +1 -1
  72. package/dist/admin/hooks/useAdminProducts.js +19 -0
  73. package/dist/admin/hooks/useAdminProducts.js.map +1 -1
  74. package/dist/admin/hooks/useAdminStats.d.ts +7 -1
  75. package/dist/admin/hooks/useAdminStats.d.ts.map +1 -1
  76. package/dist/admin/hooks/useAdminStats.js +31 -2
  77. package/dist/admin/hooks/useAdminStats.js.map +1 -1
  78. package/dist/admin/hooks/useSetupGuide.d.ts +45 -0
  79. package/dist/admin/hooks/useSetupGuide.d.ts.map +1 -0
  80. package/dist/admin/hooks/useSetupGuide.js +57 -0
  81. package/dist/admin/hooks/useSetupGuide.js.map +1 -0
  82. package/dist/admin/index.d.ts +5 -5
  83. package/dist/admin/index.d.ts.map +1 -1
  84. package/dist/admin/index.js +5 -3
  85. package/dist/admin/index.js.map +1 -1
  86. package/dist/admin/server/admin-session.d.ts +37 -0
  87. package/dist/admin/server/admin-session.d.ts.map +1 -1
  88. package/dist/admin/server/admin-session.js +43 -0
  89. package/dist/admin/server/admin-session.js.map +1 -1
  90. package/dist/admin/server/index.d.ts +1 -1
  91. package/dist/admin/server/index.d.ts.map +1 -1
  92. package/dist/admin/server/index.js +1 -1
  93. package/dist/admin/server/index.js.map +1 -1
  94. package/dist/admin/styles/admin-theme.css +634 -8
  95. package/dist/admin/types.d.ts +108 -0
  96. package/dist/admin/types.d.ts.map +1 -1
  97. package/dist/core/cookie-consent/CookieBanner.d.ts.map +1 -1
  98. package/dist/core/cookie-consent/CookieBanner.js +51 -15
  99. package/dist/core/cookie-consent/CookieBanner.js.map +1 -1
  100. package/dist/core/db/index.d.ts +2 -2
  101. package/dist/core/db/index.d.ts.map +1 -1
  102. package/dist/core/db/index.js +3 -1
  103. package/dist/core/db/index.js.map +1 -1
  104. package/dist/core/db/queries.d.ts +181 -17
  105. package/dist/core/db/queries.d.ts.map +1 -1
  106. package/dist/core/db/queries.js +398 -10
  107. package/dist/core/db/queries.js.map +1 -1
  108. package/dist/core/db/schema.d.ts +34 -3
  109. package/dist/core/db/schema.d.ts.map +1 -1
  110. package/dist/core/db/schema.js +19 -1
  111. package/dist/core/db/schema.js.map +1 -1
  112. package/dist/core/server/index.d.ts +2 -1
  113. package/dist/core/server/index.d.ts.map +1 -1
  114. package/dist/core/server/index.js +3 -1
  115. package/dist/core/server/index.js.map +1 -1
  116. package/dist/media/components/ImageGalleryUpload.d.ts.map +1 -1
  117. package/dist/media/components/ImageGalleryUpload.js +9 -2
  118. package/dist/media/components/ImageGalleryUpload.js.map +1 -1
  119. package/dist/products/components/ProductCard.d.ts.map +1 -1
  120. package/dist/products/components/ProductCard.js +8 -1
  121. package/dist/products/components/ProductCard.js.map +1 -1
  122. package/dist/products/components/ProductGallery.d.ts.map +1 -1
  123. package/dist/products/components/ProductGallery.js +14 -3
  124. package/dist/products/components/ProductGallery.js.map +1 -1
  125. package/package.json +13 -1
@@ -1117,7 +1117,9 @@
1117
1117
 
1118
1118
  .rovela-admin-theme .admin-sidebar-nav {
1119
1119
  flex: 1;
1120
- padding: var(--admin-space-4);
1120
+ /* Tightened from space-4 (16px) → space-2-5 (10px) so the whole nav region
1121
+ reclaims 12px vertical space. Sidebar fits in ~700px iframe without scroll. */
1122
+ padding: var(--admin-space-2-5) var(--admin-space-3);
1121
1123
  overflow-y: auto;
1122
1124
  }
1123
1125
 
@@ -1125,7 +1127,9 @@
1125
1127
  .rovela-admin-theme .admin-sidebar-groups {
1126
1128
  display: flex;
1127
1129
  flex-direction: column;
1128
- gap: var(--admin-space-6);
1130
+ /* Tightened from space-6 (24px) → space-3 (12px). Section titles already
1131
+ contribute their own top spacing — extra group gap was double-padding. */
1132
+ gap: var(--admin-space-3);
1129
1133
  }
1130
1134
 
1131
1135
  /* Sidebar navigation items list - replaces Tailwind space-y-1 */
@@ -1143,8 +1147,10 @@
1143
1147
  }
1144
1148
 
1145
1149
  .rovela-admin-theme .admin-sidebar-section-title {
1146
- padding: var(--admin-space-2) var(--admin-space-3);
1147
- padding-top: var(--admin-space-4);
1150
+ /* Tightened from 8/16px → 4/8px vertical, saves 12px per section heading
1151
+ across the four groups (Main / Catalog / Sales + the optional Features). */
1152
+ padding: var(--admin-space-1) var(--admin-space-3);
1153
+ padding-top: var(--admin-space-2);
1148
1154
  font-size: var(--admin-text-xs);
1149
1155
  font-weight: var(--admin-font-medium);
1150
1156
  text-transform: none;
@@ -1156,8 +1162,11 @@
1156
1162
  display: flex;
1157
1163
  align-items: center;
1158
1164
  gap: var(--admin-space-3);
1159
- padding: var(--admin-space-2-5) var(--admin-space-3);
1160
- font-size: var(--admin-text-base);
1165
+ /* Tightened from space-2-5 (10px) space-1-5 (6px) vertical, saves ~8px
1166
+ per row across 12 rows (~96px). Tap target stays at ~36px (icon 20px +
1167
+ padding 12px + leading) — well above the 32px admin standard. */
1168
+ padding: var(--admin-space-1-5) var(--admin-space-3);
1169
+ font-size: var(--admin-text-sm);
1161
1170
  color: hsl(var(--admin-sidebar-foreground-muted));
1162
1171
  border-radius: var(--admin-radius-md);
1163
1172
  transition: var(--admin-transition-colors);
@@ -1204,7 +1213,9 @@
1204
1213
  }
1205
1214
 
1206
1215
  .rovela-admin-theme .admin-sidebar-footer {
1207
- padding: var(--admin-space-4);
1216
+ /* Tightened from space-4 → space-2-5 vertical so the footer cluster
1217
+ (Settings + View Store + UserMenu + Powered by) is more compact. */
1218
+ padding: var(--admin-space-2-5) var(--admin-space-3);
1208
1219
  border-top: var(--admin-border-width) solid hsl(var(--admin-sidebar-border) / 0.5);
1209
1220
  }
1210
1221
 
@@ -1212,7 +1223,9 @@
1212
1223
  .rovela-admin-theme .admin-sidebar-footer-content {
1213
1224
  display: flex;
1214
1225
  flex-direction: column;
1215
- gap: var(--admin-space-3);
1226
+ /* Tightened from space-3 (12px) → space-1-5 (6px) between the four
1227
+ footer rows. The rows themselves carry their own internal padding. */
1228
+ gap: var(--admin-space-1-5);
1216
1229
  }
1217
1230
 
1218
1231
  .rovela-admin-theme .admin-sidebar-footer-link {
@@ -3445,3 +3458,616 @@
3445
3458
  color: hsl(var(--admin-foreground));
3446
3459
  background: hsl(var(--admin-background-subtle));
3447
3460
  }
3461
+
3462
+ /* =============================================================================
3463
+ Product list page — chip filters, bulk action bar, metric-card variants
3464
+ ============================================================================= */
3465
+
3466
+ /* Chip filters (replaces the legacy Status dropdown on the product list).
3467
+ Default: muted pill. Active state: primary border + primary text. */
3468
+ .rovela-admin-theme .admin-chip-row {
3469
+ display: flex;
3470
+ flex-wrap: wrap;
3471
+ gap: 0.5rem;
3472
+ }
3473
+
3474
+ .rovela-admin-theme .admin-chip {
3475
+ display: inline-flex;
3476
+ align-items: center;
3477
+ height: 2rem;
3478
+ padding: 0 0.875rem;
3479
+ border-radius: 9999px;
3480
+ border: 1px solid hsl(var(--admin-border));
3481
+ background: hsl(var(--admin-background));
3482
+ color: hsl(var(--admin-foreground-muted));
3483
+ font-size: 0.8125rem;
3484
+ font-weight: 500;
3485
+ cursor: pointer;
3486
+ transition: var(--admin-transition-colors);
3487
+ white-space: nowrap;
3488
+ }
3489
+
3490
+ .rovela-admin-theme .admin-chip:hover:not(:disabled) {
3491
+ border-color: hsl(var(--admin-border-strong, var(--admin-border)));
3492
+ color: hsl(var(--admin-foreground));
3493
+ background: hsl(var(--admin-background-subtle));
3494
+ }
3495
+
3496
+ .rovela-admin-theme .admin-chip:disabled {
3497
+ opacity: 0.5;
3498
+ cursor: not-allowed;
3499
+ }
3500
+
3501
+ .rovela-admin-theme .admin-chip-active {
3502
+ border-color: hsl(var(--admin-primary));
3503
+ color: hsl(var(--admin-primary));
3504
+ background: hsl(var(--admin-primary) / 0.08);
3505
+ }
3506
+
3507
+ .rovela-admin-theme .admin-chip-active:hover:not(:disabled) {
3508
+ border-color: hsl(var(--admin-primary));
3509
+ background: hsl(var(--admin-primary) / 0.12);
3510
+ color: hsl(var(--admin-primary));
3511
+ }
3512
+
3513
+ /* Bulk action bar — replaces the filter row when one or more rows are
3514
+ selected. Same vertical slot, no layout shift. */
3515
+ .rovela-admin-theme .admin-bulk-bar {
3516
+ display: flex;
3517
+ align-items: center;
3518
+ justify-content: space-between;
3519
+ gap: 1rem;
3520
+ padding: 0.625rem 0.875rem;
3521
+ border: 1px solid hsl(var(--admin-primary) / 0.4);
3522
+ background: hsl(var(--admin-primary) / 0.06);
3523
+ border-radius: var(--admin-radius);
3524
+ }
3525
+
3526
+ .rovela-admin-theme .admin-bulk-bar-count {
3527
+ display: inline-flex;
3528
+ align-items: center;
3529
+ gap: 0.5rem;
3530
+ color: hsl(var(--admin-foreground));
3531
+ font-size: 0.875rem;
3532
+ }
3533
+
3534
+ .rovela-admin-theme .admin-bulk-bar-count strong {
3535
+ font-weight: 600;
3536
+ }
3537
+
3538
+ .rovela-admin-theme .admin-bulk-bar-actions {
3539
+ display: inline-flex;
3540
+ align-items: center;
3541
+ gap: 0.5rem;
3542
+ }
3543
+
3544
+ .rovela-admin-theme .admin-bulk-bar-clear {
3545
+ display: inline-flex;
3546
+ align-items: center;
3547
+ justify-content: center;
3548
+ width: 2rem;
3549
+ height: 2rem;
3550
+ border-radius: var(--admin-radius-sm);
3551
+ border: 1px solid transparent;
3552
+ background: transparent;
3553
+ color: hsl(var(--admin-foreground-muted));
3554
+ cursor: pointer;
3555
+ transition: var(--admin-transition-colors);
3556
+ }
3557
+
3558
+ .rovela-admin-theme .admin-bulk-bar-clear:hover:not(:disabled) {
3559
+ background: hsl(var(--admin-background-subtle));
3560
+ color: hsl(var(--admin-foreground));
3561
+ }
3562
+
3563
+ .rovela-admin-theme .admin-bulk-bar-clear:disabled {
3564
+ opacity: 0.5;
3565
+ cursor: not-allowed;
3566
+ }
3567
+
3568
+ /* Selected-row tint (subtle so the rest of the table stays readable) */
3569
+ .rovela-admin-theme .admin-table-row-selected {
3570
+ background: hsl(var(--admin-primary) / 0.04);
3571
+ }
3572
+
3573
+ .rovela-admin-theme .admin-table-row-selected:hover {
3574
+ background: hsl(var(--admin-primary) / 0.07);
3575
+ }
3576
+
3577
+ /* Metric cards: 3-up variant (the dashboard StatsCards uses 4-up via
3578
+ `admin-stats-grid` only). Also: clickable variant for filter drill-through. */
3579
+ .rovela-admin-theme .admin-stats-grid-3 {
3580
+ display: grid;
3581
+ grid-template-columns: repeat(1, minmax(0, 1fr));
3582
+ gap: 1rem;
3583
+ }
3584
+
3585
+ @media (min-width: 768px) {
3586
+ .rovela-admin-theme .admin-stats-grid-3 {
3587
+ grid-template-columns: repeat(3, minmax(0, 1fr));
3588
+ }
3589
+ }
3590
+
3591
+ .rovela-admin-theme button.admin-stat-card-clickable {
3592
+ text-align: left;
3593
+ cursor: pointer;
3594
+ font: inherit;
3595
+ width: 100%;
3596
+ appearance: none;
3597
+ border: 1px solid hsl(var(--admin-border));
3598
+ }
3599
+
3600
+ .rovela-admin-theme .admin-stat-card-clickable:hover {
3601
+ border-color: hsl(var(--admin-primary) / 0.4);
3602
+ }
3603
+
3604
+ /* Compact metric card variant — used on tighter contexts (product list,
3605
+ future modular dashboards) where the dashboard's full-size cards read
3606
+ as oversized. Drops padding, value font, and icon size by ~one tier.
3607
+ Apply via `admin-stats-grid-compact` modifier on the grid wrapper. */
3608
+ .rovela-admin-theme .admin-stats-grid-compact > .admin-stat-card {
3609
+ padding: var(--admin-space-3);
3610
+ }
3611
+
3612
+ .rovela-admin-theme .admin-stats-grid-compact .admin-stat-icon {
3613
+ width: 2rem;
3614
+ height: 2rem;
3615
+ border-radius: var(--admin-radius-md);
3616
+ }
3617
+
3618
+ .rovela-admin-theme .admin-stats-grid-compact .admin-stat-icon svg {
3619
+ width: 1.125rem;
3620
+ height: 1.125rem;
3621
+ }
3622
+
3623
+ .rovela-admin-theme .admin-stats-grid-compact .admin-stat-value {
3624
+ font-size: var(--admin-text-xl);
3625
+ }
3626
+
3627
+ .rovela-admin-theme .admin-stats-grid-compact .admin-stat-label {
3628
+ font-size: var(--admin-text-xs);
3629
+ }
3630
+
3631
+ .rovela-admin-theme .admin-stats-grid-compact .admin-stat-secondary {
3632
+ font-size: var(--admin-text-xs);
3633
+ }
3634
+
3635
+ .rovela-admin-theme .admin-stats-grid-compact .admin-stat-value-name {
3636
+ font-size: 1rem;
3637
+ }
3638
+
3639
+ /* Best-seller card — product name as the primary value. Truncate to one
3640
+ line so a long name doesn't blow out the card height. */
3641
+ .rovela-admin-theme .admin-stat-value-name {
3642
+ display: block;
3643
+ overflow: hidden;
3644
+ text-overflow: ellipsis;
3645
+ white-space: nowrap;
3646
+ font-size: 1.125rem;
3647
+ font-weight: 600;
3648
+ line-height: 1.2;
3649
+ }
3650
+
3651
+ .rovela-admin-theme .admin-stat-secondary {
3652
+ margin-top: 0.25rem;
3653
+ font-size: 0.75rem;
3654
+ color: hsl(var(--admin-foreground-muted));
3655
+ }
3656
+
3657
+ /* Danger button (used for the bulk Delete action) */
3658
+ .rovela-admin-theme .admin-btn-danger {
3659
+ background: hsl(var(--admin-error));
3660
+ color: hsl(var(--admin-error-foreground, 0 0% 100%));
3661
+ border: 1px solid hsl(var(--admin-error));
3662
+ }
3663
+
3664
+ .rovela-admin-theme .admin-btn-danger:hover:not(:disabled) {
3665
+ background: hsl(var(--admin-error) / 0.9);
3666
+ }
3667
+
3668
+ .rovela-admin-theme .admin-btn-danger:disabled {
3669
+ opacity: 0.5;
3670
+ cursor: not-allowed;
3671
+ }
3672
+
3673
+ /* =============================================================================
3674
+ Setup Guide — new-merchant onboarding card
3675
+ ============================================================================= */
3676
+
3677
+ .rovela-admin-theme .admin-setup-guide {
3678
+ position: relative;
3679
+ margin-bottom: 1.5rem;
3680
+ padding: 1.25rem 1.25rem 1rem;
3681
+ border: 1px solid hsl(var(--admin-accent) / 0.25);
3682
+ border-radius: var(--admin-radius-lg);
3683
+ background: linear-gradient(
3684
+ 135deg,
3685
+ hsl(var(--admin-accent) / 0.04) 0%,
3686
+ hsl(var(--admin-accent) / 0.02) 100%
3687
+ );
3688
+ box-shadow: var(--admin-shadow-sm);
3689
+ }
3690
+
3691
+ .rovela-admin-theme .admin-setup-header {
3692
+ display: flex;
3693
+ align-items: flex-start;
3694
+ justify-content: space-between;
3695
+ gap: 1rem;
3696
+ margin-bottom: 1.25rem;
3697
+ }
3698
+
3699
+ .rovela-admin-theme .admin-setup-header-text {
3700
+ flex: 1;
3701
+ min-width: 0;
3702
+ }
3703
+
3704
+ .rovela-admin-theme .admin-setup-title {
3705
+ display: inline-flex;
3706
+ align-items: center;
3707
+ gap: 0.5rem;
3708
+ margin: 0 0 0.5rem;
3709
+ font-size: 1rem;
3710
+ font-weight: 600;
3711
+ line-height: 1.3;
3712
+ color: hsl(var(--admin-foreground));
3713
+ }
3714
+
3715
+ .rovela-admin-theme .admin-setup-title-icon {
3716
+ width: 1.125rem;
3717
+ height: 1.125rem;
3718
+ color: hsl(var(--admin-accent));
3719
+ }
3720
+
3721
+ .rovela-admin-theme .admin-setup-progress {
3722
+ display: flex;
3723
+ align-items: center;
3724
+ gap: 0.75rem;
3725
+ }
3726
+
3727
+ .rovela-admin-theme .admin-setup-progress-track {
3728
+ flex: 1;
3729
+ height: 0.4rem;
3730
+ border-radius: 9999px;
3731
+ background: hsl(var(--admin-foreground-muted) / 0.15);
3732
+ overflow: hidden;
3733
+ }
3734
+
3735
+ .rovela-admin-theme .admin-setup-progress-fill {
3736
+ height: 100%;
3737
+ background: linear-gradient(
3738
+ 90deg,
3739
+ hsl(var(--admin-accent)) 0%,
3740
+ hsl(var(--admin-primary)) 100%
3741
+ );
3742
+ border-radius: 9999px;
3743
+ transition: width 400ms ease-out;
3744
+ }
3745
+
3746
+ @media (prefers-reduced-motion: reduce) {
3747
+ .rovela-admin-theme .admin-setup-progress-fill {
3748
+ transition: none;
3749
+ }
3750
+ }
3751
+
3752
+ .rovela-admin-theme .admin-setup-progress-label {
3753
+ flex-shrink: 0;
3754
+ font-size: 0.8125rem;
3755
+ font-variant-numeric: tabular-nums;
3756
+ color: hsl(var(--admin-foreground-muted));
3757
+ }
3758
+
3759
+ .rovela-admin-theme .admin-setup-progress-label strong {
3760
+ font-weight: 600;
3761
+ color: hsl(var(--admin-foreground));
3762
+ }
3763
+
3764
+ .rovela-admin-theme .admin-setup-minimize-btn {
3765
+ display: inline-flex;
3766
+ align-items: center;
3767
+ gap: 0.375rem;
3768
+ padding: 0.375rem 0.75rem;
3769
+ font-size: 0.8125rem;
3770
+ font-weight: 500;
3771
+ color: hsl(var(--admin-foreground-muted));
3772
+ background: transparent;
3773
+ border: 1px solid hsl(var(--admin-border));
3774
+ border-radius: var(--admin-radius-sm);
3775
+ cursor: pointer;
3776
+ transition: var(--admin-transition-colors);
3777
+ white-space: nowrap;
3778
+ }
3779
+
3780
+ .rovela-admin-theme .admin-setup-minimize-btn:hover {
3781
+ color: hsl(var(--admin-foreground));
3782
+ background: hsl(var(--admin-background-subtle));
3783
+ }
3784
+
3785
+ /* --- Body: tiers + rows -------------------------------------------------- */
3786
+
3787
+ .rovela-admin-theme .admin-setup-body {
3788
+ display: flex;
3789
+ flex-direction: column;
3790
+ gap: 1rem;
3791
+ }
3792
+
3793
+ .rovela-admin-theme .admin-setup-tier {
3794
+ display: flex;
3795
+ flex-direction: column;
3796
+ gap: 0.25rem;
3797
+ }
3798
+
3799
+ .rovela-admin-theme .admin-setup-tier-header {
3800
+ display: flex;
3801
+ align-items: center;
3802
+ justify-content: space-between;
3803
+ padding: 0.25rem 0.5rem;
3804
+ margin-bottom: 0.25rem;
3805
+ }
3806
+
3807
+ .rovela-admin-theme .admin-setup-tier-title {
3808
+ margin: 0;
3809
+ font-size: 0.6875rem;
3810
+ font-weight: 600;
3811
+ letter-spacing: 0.05em;
3812
+ text-transform: uppercase;
3813
+ color: hsl(var(--admin-foreground-muted));
3814
+ }
3815
+
3816
+ .rovela-admin-theme .admin-setup-tier-subtitle {
3817
+ margin: 0.125rem 0 0;
3818
+ font-size: 0.75rem;
3819
+ color: hsl(var(--admin-foreground-muted) / 0.7);
3820
+ }
3821
+
3822
+ .rovela-admin-theme .admin-setup-tier-count {
3823
+ font-size: 0.75rem;
3824
+ font-variant-numeric: tabular-nums;
3825
+ color: hsl(var(--admin-foreground-muted));
3826
+ font-weight: 500;
3827
+ }
3828
+
3829
+ .rovela-admin-theme .admin-setup-tier.is-complete .admin-setup-tier-count {
3830
+ color: hsl(var(--admin-success));
3831
+ }
3832
+
3833
+ .rovela-admin-theme .admin-setup-tier-rows {
3834
+ display: flex;
3835
+ flex-direction: column;
3836
+ gap: 0.125rem;
3837
+ }
3838
+
3839
+ .rovela-admin-theme .admin-setup-row {
3840
+ border-radius: var(--admin-radius-md);
3841
+ background: hsl(var(--admin-card));
3842
+ border: 1px solid transparent;
3843
+ transition: var(--admin-transition-colors);
3844
+ }
3845
+
3846
+ .rovela-admin-theme .admin-setup-row:hover {
3847
+ background: hsl(var(--admin-background-subtle));
3848
+ }
3849
+
3850
+ .rovela-admin-theme .admin-setup-row.is-expanded {
3851
+ background: hsl(var(--admin-card));
3852
+ border-color: hsl(var(--admin-border));
3853
+ }
3854
+
3855
+ .rovela-admin-theme .admin-setup-row.is-complete .admin-setup-row-title {
3856
+ color: hsl(var(--admin-foreground-muted));
3857
+ text-decoration: line-through;
3858
+ text-decoration-color: hsl(var(--admin-foreground-muted) / 0.4);
3859
+ }
3860
+
3861
+ .rovela-admin-theme .admin-setup-row-header {
3862
+ display: flex;
3863
+ align-items: center;
3864
+ gap: 0.75rem;
3865
+ width: 100%;
3866
+ padding: 0.625rem 0.75rem;
3867
+ font: inherit;
3868
+ color: inherit;
3869
+ background: transparent;
3870
+ border: none;
3871
+ cursor: pointer;
3872
+ text-align: left;
3873
+ }
3874
+
3875
+ .rovela-admin-theme .admin-setup-row-header:focus-visible {
3876
+ outline: 2px solid hsl(var(--admin-accent));
3877
+ outline-offset: -2px;
3878
+ border-radius: var(--admin-radius-md);
3879
+ }
3880
+
3881
+ .rovela-admin-theme .admin-setup-row-icon {
3882
+ flex-shrink: 0;
3883
+ width: 1.125rem;
3884
+ height: 1.125rem;
3885
+ color: hsl(var(--admin-foreground-muted) / 0.5);
3886
+ transition: color 250ms ease-out;
3887
+ }
3888
+
3889
+ .rovela-admin-theme .admin-setup-row-icon.is-complete {
3890
+ color: hsl(var(--admin-success));
3891
+ }
3892
+
3893
+ @media (prefers-reduced-motion: reduce) {
3894
+ .rovela-admin-theme .admin-setup-row-icon {
3895
+ transition: none;
3896
+ }
3897
+ }
3898
+
3899
+ .rovela-admin-theme .admin-setup-row-title {
3900
+ flex: 1;
3901
+ min-width: 0;
3902
+ font-size: 0.875rem;
3903
+ font-weight: 500;
3904
+ color: hsl(var(--admin-foreground));
3905
+ line-height: 1.4;
3906
+ }
3907
+
3908
+ .rovela-admin-theme .admin-setup-row-chevron {
3909
+ flex-shrink: 0;
3910
+ width: 1rem;
3911
+ height: 1rem;
3912
+ color: hsl(var(--admin-foreground-muted));
3913
+ transition: transform 200ms ease-out;
3914
+ }
3915
+
3916
+ .rovela-admin-theme .admin-setup-row-chevron.is-expanded {
3917
+ transform: rotate(180deg);
3918
+ }
3919
+
3920
+ @media (prefers-reduced-motion: reduce) {
3921
+ .rovela-admin-theme .admin-setup-row-chevron {
3922
+ transition: none;
3923
+ }
3924
+ }
3925
+
3926
+ .rovela-admin-theme .admin-setup-row-body {
3927
+ padding: 0 0.75rem 0.875rem 2.625rem;
3928
+ }
3929
+
3930
+ .rovela-admin-theme .admin-setup-row-description {
3931
+ margin: 0 0 0.75rem;
3932
+ font-size: 0.8125rem;
3933
+ line-height: 1.55;
3934
+ color: hsl(var(--admin-foreground-muted));
3935
+ }
3936
+
3937
+ .rovela-admin-theme .admin-setup-row-actions {
3938
+ display: flex;
3939
+ flex-wrap: wrap;
3940
+ gap: 0.5rem;
3941
+ }
3942
+
3943
+ .rovela-admin-theme .admin-setup-row-cta {
3944
+ display: inline-flex;
3945
+ align-items: center;
3946
+ padding: 0.4rem 0.875rem;
3947
+ font-size: 0.8125rem;
3948
+ font-weight: 500;
3949
+ color: hsl(var(--admin-primary-foreground));
3950
+ background: hsl(var(--admin-primary));
3951
+ border-radius: var(--admin-radius-sm);
3952
+ text-decoration: none;
3953
+ transition: var(--admin-transition-colors);
3954
+ white-space: nowrap;
3955
+ }
3956
+
3957
+ .rovela-admin-theme .admin-setup-row-cta:hover {
3958
+ background: hsl(var(--admin-primary) / 0.9);
3959
+ }
3960
+
3961
+ .rovela-admin-theme .admin-setup-row-mark {
3962
+ display: inline-flex;
3963
+ align-items: center;
3964
+ padding: 0.4rem 0.875rem;
3965
+ font-size: 0.8125rem;
3966
+ font-weight: 500;
3967
+ color: hsl(var(--admin-foreground));
3968
+ background: transparent;
3969
+ border: 1px solid hsl(var(--admin-border));
3970
+ border-radius: var(--admin-radius-sm);
3971
+ cursor: pointer;
3972
+ transition: var(--admin-transition-colors);
3973
+ white-space: nowrap;
3974
+ }
3975
+
3976
+ .rovela-admin-theme .admin-setup-row-mark:hover {
3977
+ background: hsl(var(--admin-background-subtle));
3978
+ border-color: hsl(var(--admin-foreground-muted) / 0.4);
3979
+ }
3980
+
3981
+ /* --- Celebration state (100% complete) ----------------------------------- */
3982
+
3983
+ .rovela-admin-theme .admin-setup-celebration {
3984
+ display: flex;
3985
+ align-items: center;
3986
+ gap: 0.875rem;
3987
+ padding: 0.5rem 0.5rem 0.25rem;
3988
+ }
3989
+
3990
+ .rovela-admin-theme .admin-setup-celebration-icon {
3991
+ flex-shrink: 0;
3992
+ width: 1.5rem;
3993
+ height: 1.5rem;
3994
+ color: hsl(var(--admin-accent));
3995
+ }
3996
+
3997
+ .rovela-admin-theme .admin-setup-celebration-text {
3998
+ flex: 1;
3999
+ min-width: 0;
4000
+ }
4001
+
4002
+ .rovela-admin-theme .admin-setup-celebration-title {
4003
+ margin: 0;
4004
+ font-size: 0.9375rem;
4005
+ font-weight: 600;
4006
+ color: hsl(var(--admin-foreground));
4007
+ }
4008
+
4009
+ .rovela-admin-theme .admin-setup-celebration-subtitle {
4010
+ margin: 0.125rem 0 0;
4011
+ font-size: 0.8125rem;
4012
+ color: hsl(var(--admin-foreground-muted));
4013
+ line-height: 1.5;
4014
+ }
4015
+
4016
+ .rovela-admin-theme .admin-setup-celebration-dismiss {
4017
+ flex-shrink: 0;
4018
+ display: inline-flex;
4019
+ align-items: center;
4020
+ padding: 0.4rem 0.875rem;
4021
+ font-size: 0.8125rem;
4022
+ font-weight: 500;
4023
+ color: hsl(var(--admin-foreground));
4024
+ background: transparent;
4025
+ border: 1px solid hsl(var(--admin-border));
4026
+ border-radius: var(--admin-radius-sm);
4027
+ cursor: pointer;
4028
+ transition: var(--admin-transition-colors);
4029
+ white-space: nowrap;
4030
+ }
4031
+
4032
+ .rovela-admin-theme .admin-setup-celebration-dismiss:hover {
4033
+ background: hsl(var(--admin-background-subtle));
4034
+ }
4035
+
4036
+ /* --- Minimized pill (per-session collapsed state) ------------------------ */
4037
+
4038
+ .rovela-admin-theme .admin-setup-minimized {
4039
+ display: inline-flex;
4040
+ align-items: center;
4041
+ gap: 0.5rem;
4042
+ margin-bottom: 1rem;
4043
+ padding: 0.5rem 0.875rem;
4044
+ font-size: 0.8125rem;
4045
+ font-weight: 500;
4046
+ color: hsl(var(--admin-foreground));
4047
+ background: hsl(var(--admin-accent) / 0.08);
4048
+ border: 1px solid hsl(var(--admin-accent) / 0.25);
4049
+ border-radius: 9999px;
4050
+ cursor: pointer;
4051
+ transition: var(--admin-transition-colors);
4052
+ }
4053
+
4054
+ .rovela-admin-theme .admin-setup-minimized:hover {
4055
+ background: hsl(var(--admin-accent) / 0.12);
4056
+ border-color: hsl(var(--admin-accent) / 0.4);
4057
+ }
4058
+
4059
+ .rovela-admin-theme .admin-setup-minimized-icon {
4060
+ width: 0.875rem;
4061
+ height: 0.875rem;
4062
+ color: hsl(var(--admin-accent));
4063
+ }
4064
+
4065
+ .rovela-admin-theme .admin-setup-minimized-chevron {
4066
+ width: 0.875rem;
4067
+ height: 0.875rem;
4068
+ color: hsl(var(--admin-foreground-muted));
4069
+ }
4070
+
4071
+ .rovela-admin-theme .admin-setup-minimized strong {
4072
+ font-weight: 600;
4073
+ }