@rovela-ai/sdk 0.3.22 → 0.3.27

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 (113) 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 +42 -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 +218 -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 +599 -8
  95. package/dist/admin/types.d.ts +108 -0
  96. package/dist/admin/types.d.ts.map +1 -1
  97. package/dist/core/db/index.d.ts +2 -2
  98. package/dist/core/db/index.d.ts.map +1 -1
  99. package/dist/core/db/index.js +3 -1
  100. package/dist/core/db/index.js.map +1 -1
  101. package/dist/core/db/queries.d.ts +190 -26
  102. package/dist/core/db/queries.d.ts.map +1 -1
  103. package/dist/core/db/queries.js +394 -10
  104. package/dist/core/db/queries.js.map +1 -1
  105. package/dist/core/db/schema.d.ts +34 -3
  106. package/dist/core/db/schema.d.ts.map +1 -1
  107. package/dist/core/db/schema.js +19 -1
  108. package/dist/core/db/schema.js.map +1 -1
  109. package/dist/core/server/index.d.ts +2 -1
  110. package/dist/core/server/index.d.ts.map +1 -1
  111. package/dist/core/server/index.js +3 -1
  112. package/dist/core/server/index.js.map +1 -1
  113. package/package.json +9 -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,581 @@
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
+ /* Best-seller card — product name as the primary value. Truncate to one
3605
+ line so a long name doesn't blow out the card height. */
3606
+ .rovela-admin-theme .admin-stat-value-name {
3607
+ display: block;
3608
+ overflow: hidden;
3609
+ text-overflow: ellipsis;
3610
+ white-space: nowrap;
3611
+ font-size: 1.125rem;
3612
+ font-weight: 600;
3613
+ line-height: 1.2;
3614
+ }
3615
+
3616
+ .rovela-admin-theme .admin-stat-secondary {
3617
+ margin-top: 0.25rem;
3618
+ font-size: 0.75rem;
3619
+ color: hsl(var(--admin-foreground-muted));
3620
+ }
3621
+
3622
+ /* Danger button (used for the bulk Delete action) */
3623
+ .rovela-admin-theme .admin-btn-danger {
3624
+ background: hsl(var(--admin-error));
3625
+ color: hsl(var(--admin-error-foreground, 0 0% 100%));
3626
+ border: 1px solid hsl(var(--admin-error));
3627
+ }
3628
+
3629
+ .rovela-admin-theme .admin-btn-danger:hover:not(:disabled) {
3630
+ background: hsl(var(--admin-error) / 0.9);
3631
+ }
3632
+
3633
+ .rovela-admin-theme .admin-btn-danger:disabled {
3634
+ opacity: 0.5;
3635
+ cursor: not-allowed;
3636
+ }
3637
+
3638
+ /* =============================================================================
3639
+ Setup Guide — new-merchant onboarding card
3640
+ ============================================================================= */
3641
+
3642
+ .rovela-admin-theme .admin-setup-guide {
3643
+ position: relative;
3644
+ margin-bottom: 1.5rem;
3645
+ padding: 1.25rem 1.25rem 1rem;
3646
+ border: 1px solid hsl(var(--admin-accent) / 0.25);
3647
+ border-radius: var(--admin-radius-lg);
3648
+ background: linear-gradient(
3649
+ 135deg,
3650
+ hsl(var(--admin-accent) / 0.04) 0%,
3651
+ hsl(var(--admin-accent) / 0.02) 100%
3652
+ );
3653
+ box-shadow: var(--admin-shadow-sm);
3654
+ }
3655
+
3656
+ .rovela-admin-theme .admin-setup-header {
3657
+ display: flex;
3658
+ align-items: flex-start;
3659
+ justify-content: space-between;
3660
+ gap: 1rem;
3661
+ margin-bottom: 1.25rem;
3662
+ }
3663
+
3664
+ .rovela-admin-theme .admin-setup-header-text {
3665
+ flex: 1;
3666
+ min-width: 0;
3667
+ }
3668
+
3669
+ .rovela-admin-theme .admin-setup-title {
3670
+ display: inline-flex;
3671
+ align-items: center;
3672
+ gap: 0.5rem;
3673
+ margin: 0 0 0.5rem;
3674
+ font-size: 1rem;
3675
+ font-weight: 600;
3676
+ line-height: 1.3;
3677
+ color: hsl(var(--admin-foreground));
3678
+ }
3679
+
3680
+ .rovela-admin-theme .admin-setup-title-icon {
3681
+ width: 1.125rem;
3682
+ height: 1.125rem;
3683
+ color: hsl(var(--admin-accent));
3684
+ }
3685
+
3686
+ .rovela-admin-theme .admin-setup-progress {
3687
+ display: flex;
3688
+ align-items: center;
3689
+ gap: 0.75rem;
3690
+ }
3691
+
3692
+ .rovela-admin-theme .admin-setup-progress-track {
3693
+ flex: 1;
3694
+ height: 0.4rem;
3695
+ border-radius: 9999px;
3696
+ background: hsl(var(--admin-foreground-muted) / 0.15);
3697
+ overflow: hidden;
3698
+ }
3699
+
3700
+ .rovela-admin-theme .admin-setup-progress-fill {
3701
+ height: 100%;
3702
+ background: linear-gradient(
3703
+ 90deg,
3704
+ hsl(var(--admin-accent)) 0%,
3705
+ hsl(var(--admin-primary)) 100%
3706
+ );
3707
+ border-radius: 9999px;
3708
+ transition: width 400ms ease-out;
3709
+ }
3710
+
3711
+ @media (prefers-reduced-motion: reduce) {
3712
+ .rovela-admin-theme .admin-setup-progress-fill {
3713
+ transition: none;
3714
+ }
3715
+ }
3716
+
3717
+ .rovela-admin-theme .admin-setup-progress-label {
3718
+ flex-shrink: 0;
3719
+ font-size: 0.8125rem;
3720
+ font-variant-numeric: tabular-nums;
3721
+ color: hsl(var(--admin-foreground-muted));
3722
+ }
3723
+
3724
+ .rovela-admin-theme .admin-setup-progress-label strong {
3725
+ font-weight: 600;
3726
+ color: hsl(var(--admin-foreground));
3727
+ }
3728
+
3729
+ .rovela-admin-theme .admin-setup-minimize-btn {
3730
+ display: inline-flex;
3731
+ align-items: center;
3732
+ gap: 0.375rem;
3733
+ padding: 0.375rem 0.75rem;
3734
+ font-size: 0.8125rem;
3735
+ font-weight: 500;
3736
+ color: hsl(var(--admin-foreground-muted));
3737
+ background: transparent;
3738
+ border: 1px solid hsl(var(--admin-border));
3739
+ border-radius: var(--admin-radius-sm);
3740
+ cursor: pointer;
3741
+ transition: var(--admin-transition-colors);
3742
+ white-space: nowrap;
3743
+ }
3744
+
3745
+ .rovela-admin-theme .admin-setup-minimize-btn:hover {
3746
+ color: hsl(var(--admin-foreground));
3747
+ background: hsl(var(--admin-background-subtle));
3748
+ }
3749
+
3750
+ /* --- Body: tiers + rows -------------------------------------------------- */
3751
+
3752
+ .rovela-admin-theme .admin-setup-body {
3753
+ display: flex;
3754
+ flex-direction: column;
3755
+ gap: 1rem;
3756
+ }
3757
+
3758
+ .rovela-admin-theme .admin-setup-tier {
3759
+ display: flex;
3760
+ flex-direction: column;
3761
+ gap: 0.25rem;
3762
+ }
3763
+
3764
+ .rovela-admin-theme .admin-setup-tier-header {
3765
+ display: flex;
3766
+ align-items: center;
3767
+ justify-content: space-between;
3768
+ padding: 0.25rem 0.5rem;
3769
+ margin-bottom: 0.25rem;
3770
+ }
3771
+
3772
+ .rovela-admin-theme .admin-setup-tier-title {
3773
+ margin: 0;
3774
+ font-size: 0.6875rem;
3775
+ font-weight: 600;
3776
+ letter-spacing: 0.05em;
3777
+ text-transform: uppercase;
3778
+ color: hsl(var(--admin-foreground-muted));
3779
+ }
3780
+
3781
+ .rovela-admin-theme .admin-setup-tier-subtitle {
3782
+ margin: 0.125rem 0 0;
3783
+ font-size: 0.75rem;
3784
+ color: hsl(var(--admin-foreground-muted) / 0.7);
3785
+ }
3786
+
3787
+ .rovela-admin-theme .admin-setup-tier-count {
3788
+ font-size: 0.75rem;
3789
+ font-variant-numeric: tabular-nums;
3790
+ color: hsl(var(--admin-foreground-muted));
3791
+ font-weight: 500;
3792
+ }
3793
+
3794
+ .rovela-admin-theme .admin-setup-tier.is-complete .admin-setup-tier-count {
3795
+ color: hsl(var(--admin-success));
3796
+ }
3797
+
3798
+ .rovela-admin-theme .admin-setup-tier-rows {
3799
+ display: flex;
3800
+ flex-direction: column;
3801
+ gap: 0.125rem;
3802
+ }
3803
+
3804
+ .rovela-admin-theme .admin-setup-row {
3805
+ border-radius: var(--admin-radius-md);
3806
+ background: hsl(var(--admin-card));
3807
+ border: 1px solid transparent;
3808
+ transition: var(--admin-transition-colors);
3809
+ }
3810
+
3811
+ .rovela-admin-theme .admin-setup-row:hover {
3812
+ background: hsl(var(--admin-background-subtle));
3813
+ }
3814
+
3815
+ .rovela-admin-theme .admin-setup-row.is-expanded {
3816
+ background: hsl(var(--admin-card));
3817
+ border-color: hsl(var(--admin-border));
3818
+ }
3819
+
3820
+ .rovela-admin-theme .admin-setup-row.is-complete .admin-setup-row-title {
3821
+ color: hsl(var(--admin-foreground-muted));
3822
+ text-decoration: line-through;
3823
+ text-decoration-color: hsl(var(--admin-foreground-muted) / 0.4);
3824
+ }
3825
+
3826
+ .rovela-admin-theme .admin-setup-row-header {
3827
+ display: flex;
3828
+ align-items: center;
3829
+ gap: 0.75rem;
3830
+ width: 100%;
3831
+ padding: 0.625rem 0.75rem;
3832
+ font: inherit;
3833
+ color: inherit;
3834
+ background: transparent;
3835
+ border: none;
3836
+ cursor: pointer;
3837
+ text-align: left;
3838
+ }
3839
+
3840
+ .rovela-admin-theme .admin-setup-row-header:focus-visible {
3841
+ outline: 2px solid hsl(var(--admin-accent));
3842
+ outline-offset: -2px;
3843
+ border-radius: var(--admin-radius-md);
3844
+ }
3845
+
3846
+ .rovela-admin-theme .admin-setup-row-icon {
3847
+ flex-shrink: 0;
3848
+ width: 1.125rem;
3849
+ height: 1.125rem;
3850
+ color: hsl(var(--admin-foreground-muted) / 0.5);
3851
+ transition: color 250ms ease-out;
3852
+ }
3853
+
3854
+ .rovela-admin-theme .admin-setup-row-icon.is-complete {
3855
+ color: hsl(var(--admin-success));
3856
+ }
3857
+
3858
+ @media (prefers-reduced-motion: reduce) {
3859
+ .rovela-admin-theme .admin-setup-row-icon {
3860
+ transition: none;
3861
+ }
3862
+ }
3863
+
3864
+ .rovela-admin-theme .admin-setup-row-title {
3865
+ flex: 1;
3866
+ min-width: 0;
3867
+ font-size: 0.875rem;
3868
+ font-weight: 500;
3869
+ color: hsl(var(--admin-foreground));
3870
+ line-height: 1.4;
3871
+ }
3872
+
3873
+ .rovela-admin-theme .admin-setup-row-chevron {
3874
+ flex-shrink: 0;
3875
+ width: 1rem;
3876
+ height: 1rem;
3877
+ color: hsl(var(--admin-foreground-muted));
3878
+ transition: transform 200ms ease-out;
3879
+ }
3880
+
3881
+ .rovela-admin-theme .admin-setup-row-chevron.is-expanded {
3882
+ transform: rotate(180deg);
3883
+ }
3884
+
3885
+ @media (prefers-reduced-motion: reduce) {
3886
+ .rovela-admin-theme .admin-setup-row-chevron {
3887
+ transition: none;
3888
+ }
3889
+ }
3890
+
3891
+ .rovela-admin-theme .admin-setup-row-body {
3892
+ padding: 0 0.75rem 0.875rem 2.625rem;
3893
+ }
3894
+
3895
+ .rovela-admin-theme .admin-setup-row-description {
3896
+ margin: 0 0 0.75rem;
3897
+ font-size: 0.8125rem;
3898
+ line-height: 1.55;
3899
+ color: hsl(var(--admin-foreground-muted));
3900
+ }
3901
+
3902
+ .rovela-admin-theme .admin-setup-row-actions {
3903
+ display: flex;
3904
+ flex-wrap: wrap;
3905
+ gap: 0.5rem;
3906
+ }
3907
+
3908
+ .rovela-admin-theme .admin-setup-row-cta {
3909
+ display: inline-flex;
3910
+ align-items: center;
3911
+ padding: 0.4rem 0.875rem;
3912
+ font-size: 0.8125rem;
3913
+ font-weight: 500;
3914
+ color: hsl(var(--admin-primary-foreground));
3915
+ background: hsl(var(--admin-primary));
3916
+ border-radius: var(--admin-radius-sm);
3917
+ text-decoration: none;
3918
+ transition: var(--admin-transition-colors);
3919
+ white-space: nowrap;
3920
+ }
3921
+
3922
+ .rovela-admin-theme .admin-setup-row-cta:hover {
3923
+ background: hsl(var(--admin-primary) / 0.9);
3924
+ }
3925
+
3926
+ .rovela-admin-theme .admin-setup-row-mark {
3927
+ display: inline-flex;
3928
+ align-items: center;
3929
+ padding: 0.4rem 0.875rem;
3930
+ font-size: 0.8125rem;
3931
+ font-weight: 500;
3932
+ color: hsl(var(--admin-foreground));
3933
+ background: transparent;
3934
+ border: 1px solid hsl(var(--admin-border));
3935
+ border-radius: var(--admin-radius-sm);
3936
+ cursor: pointer;
3937
+ transition: var(--admin-transition-colors);
3938
+ white-space: nowrap;
3939
+ }
3940
+
3941
+ .rovela-admin-theme .admin-setup-row-mark:hover {
3942
+ background: hsl(var(--admin-background-subtle));
3943
+ border-color: hsl(var(--admin-foreground-muted) / 0.4);
3944
+ }
3945
+
3946
+ /* --- Celebration state (100% complete) ----------------------------------- */
3947
+
3948
+ .rovela-admin-theme .admin-setup-celebration {
3949
+ display: flex;
3950
+ align-items: center;
3951
+ gap: 0.875rem;
3952
+ padding: 0.5rem 0.5rem 0.25rem;
3953
+ }
3954
+
3955
+ .rovela-admin-theme .admin-setup-celebration-icon {
3956
+ flex-shrink: 0;
3957
+ width: 1.5rem;
3958
+ height: 1.5rem;
3959
+ color: hsl(var(--admin-accent));
3960
+ }
3961
+
3962
+ .rovela-admin-theme .admin-setup-celebration-text {
3963
+ flex: 1;
3964
+ min-width: 0;
3965
+ }
3966
+
3967
+ .rovela-admin-theme .admin-setup-celebration-title {
3968
+ margin: 0;
3969
+ font-size: 0.9375rem;
3970
+ font-weight: 600;
3971
+ color: hsl(var(--admin-foreground));
3972
+ }
3973
+
3974
+ .rovela-admin-theme .admin-setup-celebration-subtitle {
3975
+ margin: 0.125rem 0 0;
3976
+ font-size: 0.8125rem;
3977
+ color: hsl(var(--admin-foreground-muted));
3978
+ line-height: 1.5;
3979
+ }
3980
+
3981
+ .rovela-admin-theme .admin-setup-celebration-dismiss {
3982
+ flex-shrink: 0;
3983
+ display: inline-flex;
3984
+ align-items: center;
3985
+ padding: 0.4rem 0.875rem;
3986
+ font-size: 0.8125rem;
3987
+ font-weight: 500;
3988
+ color: hsl(var(--admin-foreground));
3989
+ background: transparent;
3990
+ border: 1px solid hsl(var(--admin-border));
3991
+ border-radius: var(--admin-radius-sm);
3992
+ cursor: pointer;
3993
+ transition: var(--admin-transition-colors);
3994
+ white-space: nowrap;
3995
+ }
3996
+
3997
+ .rovela-admin-theme .admin-setup-celebration-dismiss:hover {
3998
+ background: hsl(var(--admin-background-subtle));
3999
+ }
4000
+
4001
+ /* --- Minimized pill (per-session collapsed state) ------------------------ */
4002
+
4003
+ .rovela-admin-theme .admin-setup-minimized {
4004
+ display: inline-flex;
4005
+ align-items: center;
4006
+ gap: 0.5rem;
4007
+ margin-bottom: 1rem;
4008
+ padding: 0.5rem 0.875rem;
4009
+ font-size: 0.8125rem;
4010
+ font-weight: 500;
4011
+ color: hsl(var(--admin-foreground));
4012
+ background: hsl(var(--admin-accent) / 0.08);
4013
+ border: 1px solid hsl(var(--admin-accent) / 0.25);
4014
+ border-radius: 9999px;
4015
+ cursor: pointer;
4016
+ transition: var(--admin-transition-colors);
4017
+ }
4018
+
4019
+ .rovela-admin-theme .admin-setup-minimized:hover {
4020
+ background: hsl(var(--admin-accent) / 0.12);
4021
+ border-color: hsl(var(--admin-accent) / 0.4);
4022
+ }
4023
+
4024
+ .rovela-admin-theme .admin-setup-minimized-icon {
4025
+ width: 0.875rem;
4026
+ height: 0.875rem;
4027
+ color: hsl(var(--admin-accent));
4028
+ }
4029
+
4030
+ .rovela-admin-theme .admin-setup-minimized-chevron {
4031
+ width: 0.875rem;
4032
+ height: 0.875rem;
4033
+ color: hsl(var(--admin-foreground-muted));
4034
+ }
4035
+
4036
+ .rovela-admin-theme .admin-setup-minimized strong {
4037
+ font-weight: 600;
4038
+ }