@rovela-ai/sdk 0.1.28 → 0.1.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 (154) hide show
  1. package/dist/admin/components/AdminGuard.d.ts.map +1 -1
  2. package/dist/admin/components/AdminGuard.js +2 -1
  3. package/dist/admin/components/AdminGuard.js.map +1 -1
  4. package/dist/admin/components/AdminHeader.d.ts.map +1 -1
  5. package/dist/admin/components/AdminHeader.js +16 -1
  6. package/dist/admin/components/AdminHeader.js.map +1 -1
  7. package/dist/admin/components/AdminLayout.d.ts +2 -0
  8. package/dist/admin/components/AdminLayout.d.ts.map +1 -1
  9. package/dist/admin/components/AdminLayout.js +4 -1
  10. package/dist/admin/components/AdminLayout.js.map +1 -1
  11. package/dist/admin/components/AdminLoginForm.d.ts.map +1 -1
  12. package/dist/admin/components/AdminLoginForm.js +23 -1
  13. package/dist/admin/components/AdminLoginForm.js.map +1 -1
  14. package/dist/admin/components/AdminNav.d.ts.map +1 -1
  15. package/dist/admin/components/AdminNav.js +32 -47
  16. package/dist/admin/components/AdminNav.js.map +1 -1
  17. package/dist/admin/components/AdminSetupForm.d.ts.map +1 -1
  18. package/dist/admin/components/AdminSetupForm.js +31 -1
  19. package/dist/admin/components/AdminSetupForm.js.map +1 -1
  20. package/dist/admin/components/CategoryForm.d.ts.map +1 -1
  21. package/dist/admin/components/CategoryForm.js +45 -3
  22. package/dist/admin/components/CategoryForm.js.map +1 -1
  23. package/dist/admin/components/CategorySelect.d.ts.map +1 -1
  24. package/dist/admin/components/CategorySelect.js +21 -14
  25. package/dist/admin/components/CategorySelect.js.map +1 -1
  26. package/dist/admin/components/CustomerTable.d.ts.map +1 -1
  27. package/dist/admin/components/CustomerTable.js +46 -7
  28. package/dist/admin/components/CustomerTable.js.map +1 -1
  29. package/dist/admin/components/DeleteConfirmDialog.d.ts +0 -6
  30. package/dist/admin/components/DeleteConfirmDialog.d.ts.map +1 -1
  31. package/dist/admin/components/DeleteConfirmDialog.js +32 -1
  32. package/dist/admin/components/DeleteConfirmDialog.js.map +1 -1
  33. package/dist/admin/components/InventoryEditor.d.ts.map +1 -1
  34. package/dist/admin/components/InventoryEditor.js +42 -8
  35. package/dist/admin/components/InventoryEditor.js.map +1 -1
  36. package/dist/admin/components/LowStockAlert.d.ts +1 -1
  37. package/dist/admin/components/LowStockAlert.d.ts.map +1 -1
  38. package/dist/admin/components/LowStockAlert.js +25 -15
  39. package/dist/admin/components/LowStockAlert.js.map +1 -1
  40. package/dist/admin/components/OrderDetails.d.ts.map +1 -1
  41. package/dist/admin/components/OrderDetails.js +2 -1
  42. package/dist/admin/components/OrderDetails.js.map +1 -1
  43. package/dist/admin/components/OrderStatusChart.d.ts +1 -1
  44. package/dist/admin/components/OrderStatusChart.d.ts.map +1 -1
  45. package/dist/admin/components/OrderStatusChart.js +24 -14
  46. package/dist/admin/components/OrderStatusChart.js.map +1 -1
  47. package/dist/admin/components/OrderTable.d.ts.map +1 -1
  48. package/dist/admin/components/OrderTable.js +53 -9
  49. package/dist/admin/components/OrderTable.js.map +1 -1
  50. package/dist/admin/components/ProductForm.d.ts.map +1 -1
  51. package/dist/admin/components/ProductForm.js +97 -5
  52. package/dist/admin/components/ProductForm.js.map +1 -1
  53. package/dist/admin/components/ProductTable.d.ts.map +1 -1
  54. package/dist/admin/components/ProductTable.js +59 -13
  55. package/dist/admin/components/ProductTable.js.map +1 -1
  56. package/dist/admin/components/RecentOrders.d.ts +1 -1
  57. package/dist/admin/components/RecentOrders.d.ts.map +1 -1
  58. package/dist/admin/components/RecentOrders.js +24 -12
  59. package/dist/admin/components/RecentOrders.js.map +1 -1
  60. package/dist/admin/components/RefundDialog.d.ts.map +1 -1
  61. package/dist/admin/components/RefundDialog.js +29 -1
  62. package/dist/admin/components/RefundDialog.js.map +1 -1
  63. package/dist/admin/components/RevenueChart.d.ts +1 -1
  64. package/dist/admin/components/RevenueChart.d.ts.map +1 -1
  65. package/dist/admin/components/RevenueChart.js +15 -5
  66. package/dist/admin/components/RevenueChart.js.map +1 -1
  67. package/dist/admin/components/SEOPreview.d.ts +1 -0
  68. package/dist/admin/components/SEOPreview.d.ts.map +1 -1
  69. package/dist/admin/components/SEOPreview.js +4 -1
  70. package/dist/admin/components/SEOPreview.js.map +1 -1
  71. package/dist/admin/components/StatsCards.d.ts +1 -6
  72. package/dist/admin/components/StatsCards.d.ts.map +1 -1
  73. package/dist/admin/components/StatsCards.js +28 -20
  74. package/dist/admin/components/StatsCards.js.map +1 -1
  75. package/dist/admin/components/TagInput.d.ts.map +1 -1
  76. package/dist/admin/components/TagInput.js +10 -7
  77. package/dist/admin/components/TagInput.js.map +1 -1
  78. package/dist/admin/components/VariantManager.d.ts.map +1 -1
  79. package/dist/admin/components/VariantManager.js +56 -4
  80. package/dist/admin/components/VariantManager.js.map +1 -1
  81. package/dist/auth/components/ForgotPasswordForm.d.ts.map +1 -1
  82. package/dist/auth/components/ForgotPasswordForm.js +2 -1
  83. package/dist/auth/components/ForgotPasswordForm.js.map +1 -1
  84. package/dist/auth/components/ResetPasswordForm.d.ts.map +1 -1
  85. package/dist/auth/components/ResetPasswordForm.js +3 -2
  86. package/dist/auth/components/ResetPasswordForm.js.map +1 -1
  87. package/dist/auth/components/SignUpForm.d.ts.map +1 -1
  88. package/dist/auth/components/SignUpForm.js +2 -1
  89. package/dist/auth/components/SignUpForm.js.map +1 -1
  90. package/dist/auth/components/UserMenu.d.ts.map +1 -1
  91. package/dist/auth/components/UserMenu.js +3 -2
  92. package/dist/auth/components/UserMenu.js.map +1 -1
  93. package/dist/auth/components/VerifyEmailNotice.d.ts.map +1 -1
  94. package/dist/auth/components/VerifyEmailNotice.js +2 -1
  95. package/dist/auth/components/VerifyEmailNotice.js.map +1 -1
  96. package/dist/cart/components/AddToCartButton.d.ts.map +1 -1
  97. package/dist/cart/components/AddToCartButton.js +3 -2
  98. package/dist/cart/components/AddToCartButton.js.map +1 -1
  99. package/dist/cart/components/CartDrawer.d.ts.map +1 -1
  100. package/dist/cart/components/CartDrawer.js +2 -1
  101. package/dist/cart/components/CartDrawer.js.map +1 -1
  102. package/dist/cart/components/CartIcon.d.ts.map +1 -1
  103. package/dist/cart/components/CartIcon.js +2 -1
  104. package/dist/cart/components/CartIcon.js.map +1 -1
  105. package/dist/cart/components/CartItem.d.ts.map +1 -1
  106. package/dist/cart/components/CartItem.js +2 -1
  107. package/dist/cart/components/CartItem.js.map +1 -1
  108. package/dist/cart/components/QuantitySelector.d.ts.map +1 -1
  109. package/dist/cart/components/QuantitySelector.js +2 -1
  110. package/dist/cart/components/QuantitySelector.js.map +1 -1
  111. package/dist/checkout/components/CheckoutButton.d.ts.map +1 -1
  112. package/dist/checkout/components/CheckoutButton.js +2 -7
  113. package/dist/checkout/components/CheckoutButton.js.map +1 -1
  114. package/dist/checkout/components/CheckoutSuccess.d.ts.map +1 -1
  115. package/dist/checkout/components/CheckoutSuccess.js +2 -13
  116. package/dist/checkout/components/CheckoutSuccess.js.map +1 -1
  117. package/dist/media/components/DropZone.d.ts.map +1 -1
  118. package/dist/media/components/DropZone.js +2 -7
  119. package/dist/media/components/DropZone.js.map +1 -1
  120. package/dist/media/components/ImageGalleryUpload.d.ts.map +1 -1
  121. package/dist/media/components/ImageGalleryUpload.js +2 -22
  122. package/dist/media/components/ImageGalleryUpload.js.map +1 -1
  123. package/dist/media/components/ImageUpload.d.ts.map +1 -1
  124. package/dist/media/components/ImageUpload.js +2 -16
  125. package/dist/media/components/ImageUpload.js.map +1 -1
  126. package/dist/products/components/CategoryNav.d.ts.map +1 -1
  127. package/dist/products/components/CategoryNav.js +3 -2
  128. package/dist/products/components/CategoryNav.js.map +1 -1
  129. package/dist/products/components/ProductBreadcrumb.d.ts.map +1 -1
  130. package/dist/products/components/ProductBreadcrumb.js +2 -1
  131. package/dist/products/components/ProductBreadcrumb.js.map +1 -1
  132. package/dist/products/components/ProductCard.d.ts.map +1 -1
  133. package/dist/products/components/ProductCard.js +2 -1
  134. package/dist/products/components/ProductCard.js.map +1 -1
  135. package/dist/products/components/ProductDetails.d.ts.map +1 -1
  136. package/dist/products/components/ProductDetails.js +3 -2
  137. package/dist/products/components/ProductDetails.js.map +1 -1
  138. package/dist/products/components/ProductFilters.d.ts.map +1 -1
  139. package/dist/products/components/ProductFilters.js +2 -1
  140. package/dist/products/components/ProductFilters.js.map +1 -1
  141. package/dist/products/components/ProductGallery.d.ts.map +1 -1
  142. package/dist/products/components/ProductGallery.js +4 -3
  143. package/dist/products/components/ProductGallery.js.map +1 -1
  144. package/dist/products/components/ProductGrid.d.ts.map +1 -1
  145. package/dist/products/components/ProductGrid.js +2 -1
  146. package/dist/products/components/ProductGrid.js.map +1 -1
  147. package/dist/products/components/ProductSearch.d.ts.map +1 -1
  148. package/dist/products/components/ProductSearch.js +2 -1
  149. package/dist/products/components/ProductSearch.js.map +1 -1
  150. package/dist/products/components/ProductSort.d.ts.map +1 -1
  151. package/dist/products/components/ProductSort.js +2 -1
  152. package/dist/products/components/ProductSort.js.map +1 -1
  153. package/package.json +6 -1
  154. package/src/admin/styles/admin-theme.css +1308 -0
@@ -0,0 +1,1308 @@
1
+ /**
2
+ * Rovela Admin Theme
3
+ *
4
+ * This CSS file defines the complete visual design system for the admin panel.
5
+ * It ensures the admin experience looks like Rovela regardless of the store's theme.
6
+ *
7
+ * Usage: Wrap admin content with class="rovela-admin-theme"
8
+ */
9
+
10
+ /* ═══════════════════════════════════════════════════════════════════════════
11
+ DESIGN TOKENS - CSS Variables
12
+ ═══════════════════════════════════════════════════════════════════════════ */
13
+
14
+ .rovela-admin-theme {
15
+ /* ─────────────────────────────────────────────────────────────────────────
16
+ COLOR PALETTE - Rovela Brand
17
+ ───────────────────────────────────────────────────────────────────────── */
18
+
19
+ /* Primary - Emerald */
20
+ --admin-primary: 163 86% 37%; /* #0CAF7D */
21
+ --admin-primary-hover: 163 86% 32%; /* Darker on hover */
22
+ --admin-primary-light: 163 86% 95%; /* Very light tint */
23
+ --admin-primary-foreground: 0 0% 100%; /* White text on primary */
24
+
25
+ /* Backgrounds */
26
+ --admin-background: 36 36% 97%; /* Warm off-white #F7F5F2 */
27
+ --admin-background-subtle: 36 30% 94%; /* Slightly darker #F2EEE9 */
28
+ --admin-card: 0 0% 100%; /* Pure white cards */
29
+ --admin-sidebar: 220 20% 14%; /* Dark charcoal #1E2433 */
30
+ --admin-sidebar-hover: 220 20% 18%; /* Sidebar hover state */
31
+
32
+ /* Text Colors */
33
+ --admin-foreground: 220 20% 14%; /* Near-black text */
34
+ --admin-foreground-muted: 220 10% 46%; /* Secondary text #6B7280 */
35
+ --admin-foreground-subtle: 220 10% 64%; /* Tertiary/placeholder */
36
+ --admin-sidebar-foreground: 220 10% 90%;/* Light text on dark */
37
+ --admin-sidebar-foreground-muted: 220 10% 60%;
38
+
39
+ /* Borders */
40
+ --admin-border: 220 13% 91%; /* Light gray border #E5E7EB */
41
+ --admin-border-hover: 220 13% 85%; /* Darker on hover */
42
+ --admin-border-focus: 163 86% 37%; /* Primary on focus */
43
+
44
+ /* Status Colors - Semantic */
45
+ --admin-success: 142 71% 45%; /* Green #22C55E */
46
+ --admin-success-light: 142 76% 95%; /* Light green bg */
47
+ --admin-success-dark: 142 71% 35%; /* Dark green text */
48
+ --admin-warning: 38 92% 50%; /* Amber #F59E0B */
49
+ --admin-warning-light: 38 92% 95%; /* Light amber bg */
50
+ --admin-warning-dark: 38 92% 35%; /* Dark amber text */
51
+ --admin-error: 0 84% 60%; /* Red #EF4444 */
52
+ --admin-error-light: 0 86% 97%; /* Light red bg */
53
+ --admin-error-dark: 0 84% 45%; /* Dark red text */
54
+ --admin-info: 199 89% 48%; /* Blue #0EA5E9 */
55
+ --admin-info-light: 199 89% 96%; /* Light blue bg */
56
+ --admin-info-dark: 199 89% 35%; /* Dark blue text */
57
+
58
+ /* ─────────────────────────────────────────────────────────────────────────
59
+ TYPOGRAPHY - Plus Jakarta Sans
60
+ ───────────────────────────────────────────────────────────────────────── */
61
+ --admin-font-sans: 'Plus Jakarta Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
62
+ --admin-font-mono: 'SF Mono', 'Fira Code', 'Fira Mono', Menlo, Consolas, monospace;
63
+
64
+ /* Font Sizes */
65
+ --admin-text-xs: 0.75rem; /* 12px */
66
+ --admin-text-sm: 0.8125rem; /* 13px */
67
+ --admin-text-base: 0.875rem; /* 14px - base for admin */
68
+ --admin-text-md: 0.9375rem; /* 15px */
69
+ --admin-text-lg: 1rem; /* 16px */
70
+ --admin-text-xl: 1.125rem; /* 18px */
71
+ --admin-text-2xl: 1.375rem; /* 22px */
72
+ --admin-text-3xl: 1.625rem; /* 26px */
73
+
74
+ /* Font Weights */
75
+ --admin-font-normal: 400;
76
+ --admin-font-medium: 500;
77
+ --admin-font-semibold: 600;
78
+ --admin-font-bold: 700;
79
+
80
+ /* Line Heights */
81
+ --admin-leading-tight: 1.25;
82
+ --admin-leading-normal: 1.5;
83
+ --admin-leading-relaxed: 1.625;
84
+
85
+ /* Letter Spacing */
86
+ --admin-tracking-tight: -0.025em;
87
+ --admin-tracking-normal: 0;
88
+ --admin-tracking-wide: 0.05em;
89
+
90
+ /* ─────────────────────────────────────────────────────────────────────────
91
+ SPACING SCALE (8px base)
92
+ ───────────────────────────────────────────────────────────────────────── */
93
+ --admin-space-0: 0;
94
+ --admin-space-0-5: 0.125rem; /* 2px */
95
+ --admin-space-1: 0.25rem; /* 4px */
96
+ --admin-space-1-5: 0.375rem; /* 6px */
97
+ --admin-space-2: 0.5rem; /* 8px */
98
+ --admin-space-2-5: 0.625rem; /* 10px */
99
+ --admin-space-3: 0.75rem; /* 12px */
100
+ --admin-space-3-5: 0.875rem; /* 14px */
101
+ --admin-space-4: 1rem; /* 16px */
102
+ --admin-space-5: 1.25rem; /* 20px */
103
+ --admin-space-6: 1.5rem; /* 24px */
104
+ --admin-space-7: 1.75rem; /* 28px */
105
+ --admin-space-8: 2rem; /* 32px */
106
+ --admin-space-9: 2.25rem; /* 36px */
107
+ --admin-space-10: 2.5rem; /* 40px */
108
+ --admin-space-12: 3rem; /* 48px */
109
+ --admin-space-14: 3.5rem; /* 56px */
110
+ --admin-space-16: 4rem; /* 64px */
111
+
112
+ /* ─────────────────────────────────────────────────────────────────────────
113
+ BORDERS & RADIUS
114
+ ───────────────────────────────────────────────────────────────────────── */
115
+ --admin-radius-none: 0;
116
+ --admin-radius-sm: 0.375rem; /* 6px - small elements */
117
+ --admin-radius-md: 0.5rem; /* 8px - inputs, buttons */
118
+ --admin-radius-lg: 0.75rem; /* 12px - cards */
119
+ --admin-radius-xl: 1rem; /* 16px - modals, large cards */
120
+ --admin-radius-2xl: 1.25rem; /* 20px - extra large */
121
+ --admin-radius-full: 9999px; /* Pills, avatars */
122
+
123
+ /* Border Widths */
124
+ --admin-border-width: 1px;
125
+ --admin-border-width-2: 2px;
126
+
127
+ /* ─────────────────────────────────────────────────────────────────────────
128
+ SHADOWS
129
+ ───────────────────────────────────────────────────────────────────────── */
130
+ --admin-shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.03);
131
+ --admin-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.04), 0 1px 2px -1px rgb(0 0 0 / 0.04);
132
+ --admin-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.05), 0 2px 4px -2px rgb(0 0 0 / 0.04);
133
+ --admin-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.05), 0 4px 6px -4px rgb(0 0 0 / 0.04);
134
+ --admin-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.06), 0 8px 10px -6px rgb(0 0 0 / 0.04);
135
+ --admin-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.15);
136
+
137
+ /* Colored Shadows - Primary glow */
138
+ --admin-shadow-primary-sm: 0 2px 8px 0 hsl(163 86% 37% / 0.12);
139
+ --admin-shadow-primary: 0 4px 14px 0 hsl(163 86% 37% / 0.15);
140
+ --admin-shadow-primary-lg: 0 8px 24px 0 hsl(163 86% 37% / 0.2);
141
+
142
+ /* Inner shadows */
143
+ --admin-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.04);
144
+
145
+ /* ─────────────────────────────────────────────────────────────────────────
146
+ TRANSITIONS & ANIMATIONS
147
+ ───────────────────────────────────────────────────────────────────────── */
148
+ --admin-transition-fast: 100ms ease-out;
149
+ --admin-transition-base: 150ms ease-out;
150
+ --admin-transition-slow: 200ms ease-out;
151
+ --admin-transition-slower: 300ms ease-out;
152
+
153
+ /* Specific transitions */
154
+ --admin-transition-colors: color 150ms ease-out, background-color 150ms ease-out, border-color 150ms ease-out, fill 150ms ease-out, stroke 150ms ease-out;
155
+ --admin-transition-opacity: opacity 150ms ease-out;
156
+ --admin-transition-shadow: box-shadow 150ms ease-out;
157
+ --admin-transition-transform: transform 150ms ease-out;
158
+ --admin-transition-all: all 150ms ease-out;
159
+
160
+ /* ─────────────────────────────────────────────────────────────────────────
161
+ Z-INDEX SCALE
162
+ ───────────────────────────────────────────────────────────────────────── */
163
+ --admin-z-base: 0;
164
+ --admin-z-dropdown: 50;
165
+ --admin-z-sticky: 100;
166
+ --admin-z-fixed: 150;
167
+ --admin-z-overlay: 200;
168
+ --admin-z-modal: 250;
169
+ --admin-z-popover: 300;
170
+ --admin-z-toast: 400;
171
+ --admin-z-tooltip: 500;
172
+
173
+ /* ─────────────────────────────────────────────────────────────────────────
174
+ STANDARD CSS VARIABLE MAPPING (for component compatibility)
175
+ ───────────────────────────────────────────────────────────────────────── */
176
+ --background: var(--admin-background);
177
+ --foreground: var(--admin-foreground);
178
+ --card: var(--admin-card);
179
+ --card-foreground: var(--admin-foreground);
180
+ --popover: var(--admin-card);
181
+ --popover-foreground: var(--admin-foreground);
182
+ --primary: var(--admin-primary);
183
+ --primary-foreground: var(--admin-primary-foreground);
184
+ --secondary: var(--admin-background-subtle);
185
+ --secondary-foreground: var(--admin-foreground);
186
+ --muted: var(--admin-background-subtle);
187
+ --muted-foreground: var(--admin-foreground-muted);
188
+ --accent: var(--admin-primary-light);
189
+ --accent-foreground: var(--admin-primary);
190
+ --border: var(--admin-border);
191
+ --input: var(--admin-border);
192
+ --ring: var(--admin-primary);
193
+ --destructive: var(--admin-error);
194
+ --destructive-foreground: 0 0% 100%;
195
+ }
196
+
197
+ /* ═══════════════════════════════════════════════════════════════════════════
198
+ BASE STYLES
199
+ ═══════════════════════════════════════════════════════════════════════════ */
200
+
201
+ .rovela-admin-theme {
202
+ font-family: var(--admin-font-sans);
203
+ font-size: var(--admin-text-base);
204
+ line-height: var(--admin-leading-normal);
205
+ color: hsl(var(--admin-foreground));
206
+ background: hsl(var(--admin-background));
207
+ -webkit-font-smoothing: antialiased;
208
+ -moz-osx-font-smoothing: grayscale;
209
+ }
210
+
211
+ .rovela-admin-theme *,
212
+ .rovela-admin-theme *::before,
213
+ .rovela-admin-theme *::after {
214
+ border-color: hsl(var(--admin-border));
215
+ }
216
+
217
+ /* ═══════════════════════════════════════════════════════════════════════════
218
+ TYPOGRAPHY UTILITIES
219
+ ═══════════════════════════════════════════════════════════════════════════ */
220
+
221
+ .rovela-admin-theme .admin-heading-1 {
222
+ font-size: var(--admin-text-3xl);
223
+ font-weight: var(--admin-font-bold);
224
+ line-height: var(--admin-leading-tight);
225
+ letter-spacing: var(--admin-tracking-tight);
226
+ color: hsl(var(--admin-foreground));
227
+ }
228
+
229
+ .rovela-admin-theme .admin-heading-2 {
230
+ font-size: var(--admin-text-2xl);
231
+ font-weight: var(--admin-font-semibold);
232
+ line-height: var(--admin-leading-tight);
233
+ letter-spacing: var(--admin-tracking-tight);
234
+ color: hsl(var(--admin-foreground));
235
+ }
236
+
237
+ .rovela-admin-theme .admin-heading-3 {
238
+ font-size: var(--admin-text-xl);
239
+ font-weight: var(--admin-font-semibold);
240
+ line-height: var(--admin-leading-tight);
241
+ color: hsl(var(--admin-foreground));
242
+ }
243
+
244
+ .rovela-admin-theme .admin-heading-4 {
245
+ font-size: var(--admin-text-lg);
246
+ font-weight: var(--admin-font-semibold);
247
+ line-height: var(--admin-leading-tight);
248
+ color: hsl(var(--admin-foreground));
249
+ }
250
+
251
+ .rovela-admin-theme .admin-text-muted {
252
+ color: hsl(var(--admin-foreground-muted));
253
+ }
254
+
255
+ .rovela-admin-theme .admin-text-subtle {
256
+ color: hsl(var(--admin-foreground-subtle));
257
+ }
258
+
259
+ .rovela-admin-theme .admin-label {
260
+ display: block;
261
+ font-size: var(--admin-text-sm);
262
+ font-weight: var(--admin-font-medium);
263
+ color: hsl(var(--admin-foreground));
264
+ margin-bottom: var(--admin-space-1-5);
265
+ }
266
+
267
+ .rovela-admin-theme .admin-label-required::after {
268
+ content: ' *';
269
+ color: hsl(var(--admin-error));
270
+ }
271
+
272
+ .rovela-admin-theme .admin-helper-text {
273
+ font-size: var(--admin-text-xs);
274
+ color: hsl(var(--admin-foreground-muted));
275
+ margin-top: var(--admin-space-1);
276
+ }
277
+
278
+ .rovela-admin-theme .admin-error-text {
279
+ font-size: var(--admin-text-xs);
280
+ color: hsl(var(--admin-error));
281
+ margin-top: var(--admin-space-1);
282
+ }
283
+
284
+ /* ═══════════════════════════════════════════════════════════════════════════
285
+ CARD COMPONENT
286
+ ═══════════════════════════════════════════════════════════════════════════ */
287
+
288
+ .rovela-admin-theme .admin-card {
289
+ background: hsl(var(--admin-card));
290
+ border: var(--admin-border-width) solid hsl(var(--admin-border));
291
+ border-radius: var(--admin-radius-lg);
292
+ box-shadow: var(--admin-shadow-sm);
293
+ }
294
+
295
+ .rovela-admin-theme .admin-card-hover {
296
+ transition: var(--admin-transition-shadow), var(--admin-transition-colors);
297
+ }
298
+
299
+ .rovela-admin-theme .admin-card-hover:hover {
300
+ box-shadow: var(--admin-shadow-md);
301
+ border-color: hsl(var(--admin-border-hover));
302
+ }
303
+
304
+ .rovela-admin-theme .admin-card-header {
305
+ padding: var(--admin-space-5) var(--admin-space-6);
306
+ border-bottom: var(--admin-border-width) solid hsl(var(--admin-border));
307
+ }
308
+
309
+ .rovela-admin-theme .admin-card-body {
310
+ padding: var(--admin-space-6);
311
+ }
312
+
313
+ .rovela-admin-theme .admin-card-footer {
314
+ padding: var(--admin-space-4) var(--admin-space-6);
315
+ border-top: var(--admin-border-width) solid hsl(var(--admin-border));
316
+ background: hsl(var(--admin-background-subtle) / 0.5);
317
+ }
318
+
319
+ /* ═══════════════════════════════════════════════════════════════════════════
320
+ INPUT COMPONENTS
321
+ ═══════════════════════════════════════════════════════════════════════════ */
322
+
323
+ .rovela-admin-theme .admin-input {
324
+ display: flex;
325
+ width: 100%;
326
+ height: 2.5rem; /* 40px */
327
+ padding: 0 var(--admin-space-3);
328
+ font-family: var(--admin-font-sans);
329
+ font-size: var(--admin-text-base);
330
+ color: hsl(var(--admin-foreground));
331
+ background: hsl(var(--admin-card));
332
+ border: var(--admin-border-width) solid hsl(var(--admin-border));
333
+ border-radius: var(--admin-radius-md);
334
+ outline: none;
335
+ transition: var(--admin-transition-colors), var(--admin-transition-shadow);
336
+ }
337
+
338
+ .rovela-admin-theme .admin-input::placeholder {
339
+ color: hsl(var(--admin-foreground-subtle));
340
+ }
341
+
342
+ .rovela-admin-theme .admin-input:hover:not(:focus):not(:disabled) {
343
+ border-color: hsl(var(--admin-border-hover));
344
+ }
345
+
346
+ .rovela-admin-theme .admin-input:focus {
347
+ border-color: hsl(var(--admin-primary));
348
+ box-shadow: 0 0 0 3px hsl(var(--admin-primary) / 0.1);
349
+ }
350
+
351
+ .rovela-admin-theme .admin-input:disabled {
352
+ opacity: 0.5;
353
+ cursor: not-allowed;
354
+ background: hsl(var(--admin-background-subtle));
355
+ }
356
+
357
+ .rovela-admin-theme .admin-input-error {
358
+ border-color: hsl(var(--admin-error));
359
+ }
360
+
361
+ .rovela-admin-theme .admin-input-error:focus {
362
+ border-color: hsl(var(--admin-error));
363
+ box-shadow: 0 0 0 3px hsl(var(--admin-error) / 0.1);
364
+ }
365
+
366
+ /* Textarea */
367
+ .rovela-admin-theme .admin-textarea {
368
+ min-height: 5rem;
369
+ padding: var(--admin-space-3);
370
+ resize: vertical;
371
+ }
372
+
373
+ /* Select */
374
+ .rovela-admin-theme .admin-select {
375
+ appearance: none;
376
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236B7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
377
+ background-repeat: no-repeat;
378
+ background-position: right var(--admin-space-3) center;
379
+ padding-right: var(--admin-space-10);
380
+ }
381
+
382
+ /* Input with icon */
383
+ .rovela-admin-theme .admin-input-icon-wrapper {
384
+ position: relative;
385
+ }
386
+
387
+ .rovela-admin-theme .admin-input-icon-wrapper .admin-input {
388
+ padding-left: var(--admin-space-10);
389
+ }
390
+
391
+ .rovela-admin-theme .admin-input-icon {
392
+ position: absolute;
393
+ left: var(--admin-space-3);
394
+ top: 50%;
395
+ transform: translateY(-50%);
396
+ width: 1.25rem;
397
+ height: 1.25rem;
398
+ color: hsl(var(--admin-foreground-muted));
399
+ pointer-events: none;
400
+ }
401
+
402
+ /* ═══════════════════════════════════════════════════════════════════════════
403
+ BUTTON COMPONENTS
404
+ ═══════════════════════════════════════════════════════════════════════════ */
405
+
406
+ .rovela-admin-theme .admin-btn {
407
+ display: inline-flex;
408
+ align-items: center;
409
+ justify-content: center;
410
+ gap: var(--admin-space-2);
411
+ height: 2.5rem;
412
+ padding: 0 var(--admin-space-4);
413
+ font-family: var(--admin-font-sans);
414
+ font-size: var(--admin-text-base);
415
+ font-weight: var(--admin-font-medium);
416
+ line-height: 1;
417
+ white-space: nowrap;
418
+ border-radius: var(--admin-radius-md);
419
+ border: var(--admin-border-width) solid transparent;
420
+ cursor: pointer;
421
+ outline: none;
422
+ transition: var(--admin-transition-all);
423
+ }
424
+
425
+ .rovela-admin-theme .admin-btn:disabled {
426
+ opacity: 0.5;
427
+ cursor: not-allowed;
428
+ }
429
+
430
+ .rovela-admin-theme .admin-btn:focus-visible {
431
+ outline: 2px solid hsl(var(--admin-primary));
432
+ outline-offset: 2px;
433
+ }
434
+
435
+ /* Primary Button */
436
+ .rovela-admin-theme .admin-btn-primary {
437
+ background: hsl(var(--admin-primary));
438
+ color: hsl(var(--admin-primary-foreground));
439
+ }
440
+
441
+ .rovela-admin-theme .admin-btn-primary:hover:not(:disabled) {
442
+ background: hsl(var(--admin-primary-hover));
443
+ box-shadow: var(--admin-shadow-primary-sm);
444
+ }
445
+
446
+ .rovela-admin-theme .admin-btn-primary:active:not(:disabled) {
447
+ background: hsl(var(--admin-primary-hover));
448
+ box-shadow: var(--admin-shadow-inner);
449
+ }
450
+
451
+ /* Secondary Button */
452
+ .rovela-admin-theme .admin-btn-secondary {
453
+ background: hsl(var(--admin-card));
454
+ color: hsl(var(--admin-foreground));
455
+ border-color: hsl(var(--admin-border));
456
+ }
457
+
458
+ .rovela-admin-theme .admin-btn-secondary:hover:not(:disabled) {
459
+ background: hsl(var(--admin-background-subtle));
460
+ border-color: hsl(var(--admin-border-hover));
461
+ }
462
+
463
+ .rovela-admin-theme .admin-btn-secondary:active:not(:disabled) {
464
+ background: hsl(var(--admin-background-subtle));
465
+ box-shadow: var(--admin-shadow-inner);
466
+ }
467
+
468
+ /* Ghost Button */
469
+ .rovela-admin-theme .admin-btn-ghost {
470
+ background: transparent;
471
+ color: hsl(var(--admin-foreground));
472
+ }
473
+
474
+ .rovela-admin-theme .admin-btn-ghost:hover:not(:disabled) {
475
+ background: hsl(var(--admin-background-subtle));
476
+ }
477
+
478
+ /* Destructive Button */
479
+ .rovela-admin-theme .admin-btn-destructive {
480
+ background: hsl(var(--admin-error));
481
+ color: white;
482
+ }
483
+
484
+ .rovela-admin-theme .admin-btn-destructive:hover:not(:disabled) {
485
+ background: hsl(var(--admin-error-dark));
486
+ }
487
+
488
+ /* Button Sizes */
489
+ .rovela-admin-theme .admin-btn-sm {
490
+ height: 2rem;
491
+ padding: 0 var(--admin-space-3);
492
+ font-size: var(--admin-text-sm);
493
+ border-radius: var(--admin-radius-sm);
494
+ }
495
+
496
+ .rovela-admin-theme .admin-btn-lg {
497
+ height: 2.75rem;
498
+ padding: 0 var(--admin-space-6);
499
+ font-size: var(--admin-text-md);
500
+ }
501
+
502
+ .rovela-admin-theme .admin-btn-icon {
503
+ width: 2.5rem;
504
+ padding: 0;
505
+ }
506
+
507
+ .rovela-admin-theme .admin-btn-icon.admin-btn-sm {
508
+ width: 2rem;
509
+ }
510
+
511
+ /* ═══════════════════════════════════════════════════════════════════════════
512
+ BADGE COMPONENTS
513
+ ═══════════════════════════════════════════════════════════════════════════ */
514
+
515
+ .rovela-admin-theme .admin-badge {
516
+ display: inline-flex;
517
+ align-items: center;
518
+ justify-content: center;
519
+ padding: var(--admin-space-0-5) var(--admin-space-2);
520
+ font-size: var(--admin-text-xs);
521
+ font-weight: var(--admin-font-medium);
522
+ line-height: var(--admin-leading-normal);
523
+ border-radius: var(--admin-radius-full);
524
+ white-space: nowrap;
525
+ }
526
+
527
+ .rovela-admin-theme .admin-badge-success {
528
+ background: hsl(var(--admin-success-light));
529
+ color: hsl(var(--admin-success-dark));
530
+ }
531
+
532
+ .rovela-admin-theme .admin-badge-warning {
533
+ background: hsl(var(--admin-warning-light));
534
+ color: hsl(var(--admin-warning-dark));
535
+ }
536
+
537
+ .rovela-admin-theme .admin-badge-error {
538
+ background: hsl(var(--admin-error-light));
539
+ color: hsl(var(--admin-error-dark));
540
+ }
541
+
542
+ .rovela-admin-theme .admin-badge-info {
543
+ background: hsl(var(--admin-info-light));
544
+ color: hsl(var(--admin-info-dark));
545
+ }
546
+
547
+ .rovela-admin-theme .admin-badge-neutral {
548
+ background: hsl(var(--admin-background-subtle));
549
+ color: hsl(var(--admin-foreground-muted));
550
+ }
551
+
552
+ .rovela-admin-theme .admin-badge-primary {
553
+ background: hsl(var(--admin-primary-light));
554
+ color: hsl(var(--admin-primary));
555
+ }
556
+
557
+ /* Dot badge variant */
558
+ .rovela-admin-theme .admin-badge-dot {
559
+ display: inline-flex;
560
+ align-items: center;
561
+ gap: var(--admin-space-1-5);
562
+ }
563
+
564
+ .rovela-admin-theme .admin-badge-dot::before {
565
+ content: '';
566
+ width: 0.5rem;
567
+ height: 0.5rem;
568
+ border-radius: var(--admin-radius-full);
569
+ background: currentColor;
570
+ }
571
+
572
+ /* ═══════════════════════════════════════════════════════════════════════════
573
+ TABLE COMPONENTS
574
+ ═══════════════════════════════════════════════════════════════════════════ */
575
+
576
+ .rovela-admin-theme .admin-table-wrapper {
577
+ overflow: hidden;
578
+ border-radius: var(--admin-radius-lg);
579
+ border: var(--admin-border-width) solid hsl(var(--admin-border));
580
+ background: hsl(var(--admin-card));
581
+ }
582
+
583
+ .rovela-admin-theme .admin-table {
584
+ width: 100%;
585
+ border-collapse: collapse;
586
+ font-size: var(--admin-text-base);
587
+ }
588
+
589
+ .rovela-admin-theme .admin-table th {
590
+ padding: var(--admin-space-3) var(--admin-space-4);
591
+ font-size: var(--admin-text-xs);
592
+ font-weight: var(--admin-font-semibold);
593
+ text-transform: uppercase;
594
+ letter-spacing: var(--admin-tracking-wide);
595
+ color: hsl(var(--admin-foreground-muted));
596
+ background: hsl(var(--admin-background-subtle));
597
+ text-align: left;
598
+ border-bottom: var(--admin-border-width) solid hsl(var(--admin-border));
599
+ }
600
+
601
+ .rovela-admin-theme .admin-table td {
602
+ padding: var(--admin-space-4);
603
+ color: hsl(var(--admin-foreground));
604
+ border-bottom: var(--admin-border-width) solid hsl(var(--admin-border));
605
+ vertical-align: middle;
606
+ }
607
+
608
+ .rovela-admin-theme .admin-table tbody tr:last-child td {
609
+ border-bottom: none;
610
+ }
611
+
612
+ .rovela-admin-theme .admin-table tbody tr {
613
+ transition: var(--admin-transition-colors);
614
+ }
615
+
616
+ .rovela-admin-theme .admin-table tbody tr:hover {
617
+ background: hsl(var(--admin-background-subtle) / 0.5);
618
+ }
619
+
620
+ .rovela-admin-theme .admin-table-empty {
621
+ padding: var(--admin-space-12) var(--admin-space-4);
622
+ text-align: center;
623
+ color: hsl(var(--admin-foreground-muted));
624
+ }
625
+
626
+ /* ═══════════════════════════════════════════════════════════════════════════
627
+ SIDEBAR COMPONENTS
628
+ ═══════════════════════════════════════════════════════════════════════════ */
629
+
630
+ .rovela-admin-theme .admin-sidebar {
631
+ display: flex;
632
+ flex-direction: column;
633
+ width: 16rem;
634
+ min-height: 100vh;
635
+ background: hsl(var(--admin-sidebar));
636
+ color: hsl(var(--admin-sidebar-foreground));
637
+ }
638
+
639
+ .rovela-admin-theme .admin-sidebar-header {
640
+ display: flex;
641
+ align-items: center;
642
+ gap: var(--admin-space-3);
643
+ padding: var(--admin-space-5) var(--admin-space-4);
644
+ border-bottom: 1px solid hsl(220 20% 22%);
645
+ }
646
+
647
+ .rovela-admin-theme .admin-sidebar-brand {
648
+ display: flex;
649
+ align-items: center;
650
+ gap: var(--admin-space-3);
651
+ font-size: var(--admin-text-lg);
652
+ font-weight: var(--admin-font-semibold);
653
+ color: hsl(var(--admin-sidebar-foreground));
654
+ }
655
+
656
+ .rovela-admin-theme .admin-sidebar-nav {
657
+ flex: 1;
658
+ padding: var(--admin-space-4);
659
+ overflow-y: auto;
660
+ }
661
+
662
+ .rovela-admin-theme .admin-sidebar-section {
663
+ margin-bottom: var(--admin-space-6);
664
+ }
665
+
666
+ .rovela-admin-theme .admin-sidebar-section-title {
667
+ padding: var(--admin-space-2) var(--admin-space-3);
668
+ font-size: var(--admin-text-xs);
669
+ font-weight: var(--admin-font-semibold);
670
+ text-transform: uppercase;
671
+ letter-spacing: var(--admin-tracking-wide);
672
+ color: hsl(var(--admin-sidebar-foreground-muted));
673
+ }
674
+
675
+ .rovela-admin-theme .admin-sidebar-item {
676
+ display: flex;
677
+ align-items: center;
678
+ gap: var(--admin-space-3);
679
+ padding: var(--admin-space-2-5) var(--admin-space-3);
680
+ font-size: var(--admin-text-base);
681
+ color: hsl(var(--admin-sidebar-foreground-muted));
682
+ border-radius: var(--admin-radius-md);
683
+ transition: var(--admin-transition-colors);
684
+ cursor: pointer;
685
+ text-decoration: none;
686
+ }
687
+
688
+ .rovela-admin-theme .admin-sidebar-item:hover {
689
+ background: hsl(var(--admin-sidebar-hover));
690
+ color: hsl(var(--admin-sidebar-foreground));
691
+ }
692
+
693
+ .rovela-admin-theme .admin-sidebar-item.active {
694
+ background: hsl(var(--admin-primary) / 0.15);
695
+ color: hsl(var(--admin-primary));
696
+ }
697
+
698
+ .rovela-admin-theme .admin-sidebar-item.active .admin-sidebar-item-icon {
699
+ color: hsl(var(--admin-primary));
700
+ }
701
+
702
+ .rovela-admin-theme .admin-sidebar-item-icon {
703
+ width: 1.25rem;
704
+ height: 1.25rem;
705
+ flex-shrink: 0;
706
+ }
707
+
708
+ .rovela-admin-theme .admin-sidebar-footer {
709
+ padding: var(--admin-space-4);
710
+ border-top: 1px solid hsl(220 20% 22%);
711
+ }
712
+
713
+ .rovela-admin-theme .admin-sidebar-footer-link {
714
+ display: flex;
715
+ align-items: center;
716
+ gap: var(--admin-space-2);
717
+ font-size: var(--admin-text-sm);
718
+ color: hsl(var(--admin-sidebar-foreground-muted) / 0.6);
719
+ text-decoration: none;
720
+ transition: var(--admin-transition-colors);
721
+ }
722
+
723
+ .rovela-admin-theme .admin-sidebar-footer-link:hover {
724
+ color: hsl(var(--admin-sidebar-foreground-muted));
725
+ }
726
+
727
+ /* ═══════════════════════════════════════════════════════════════════════════
728
+ HEADER COMPONENT
729
+ ═══════════════════════════════════════════════════════════════════════════ */
730
+
731
+ .rovela-admin-theme .admin-header {
732
+ display: flex;
733
+ align-items: center;
734
+ justify-content: space-between;
735
+ height: 4rem;
736
+ padding: 0 var(--admin-space-6);
737
+ background: hsl(var(--admin-card));
738
+ border-bottom: var(--admin-border-width) solid hsl(var(--admin-border));
739
+ }
740
+
741
+ .rovela-admin-theme .admin-header-title {
742
+ font-size: var(--admin-text-lg);
743
+ font-weight: var(--admin-font-semibold);
744
+ color: hsl(var(--admin-foreground));
745
+ }
746
+
747
+ .rovela-admin-theme .admin-header-actions {
748
+ display: flex;
749
+ align-items: center;
750
+ gap: var(--admin-space-3);
751
+ }
752
+
753
+ /* ═══════════════════════════════════════════════════════════════════════════
754
+ AVATAR COMPONENT
755
+ ═══════════════════════════════════════════════════════════════════════════ */
756
+
757
+ .rovela-admin-theme .admin-avatar {
758
+ display: flex;
759
+ align-items: center;
760
+ justify-content: center;
761
+ width: 2.25rem;
762
+ height: 2.25rem;
763
+ border-radius: var(--admin-radius-full);
764
+ background: hsl(var(--admin-primary));
765
+ color: hsl(var(--admin-primary-foreground));
766
+ font-size: var(--admin-text-sm);
767
+ font-weight: var(--admin-font-semibold);
768
+ overflow: hidden;
769
+ }
770
+
771
+ .rovela-admin-theme .admin-avatar img {
772
+ width: 100%;
773
+ height: 100%;
774
+ object-fit: cover;
775
+ }
776
+
777
+ .rovela-admin-theme .admin-avatar-sm {
778
+ width: 1.75rem;
779
+ height: 1.75rem;
780
+ font-size: var(--admin-text-xs);
781
+ }
782
+
783
+ .rovela-admin-theme .admin-avatar-lg {
784
+ width: 3rem;
785
+ height: 3rem;
786
+ font-size: var(--admin-text-lg);
787
+ }
788
+
789
+ /* ═══════════════════════════════════════════════════════════════════════════
790
+ DROPDOWN COMPONENT
791
+ ═══════════════════════════════════════════════════════════════════════════ */
792
+
793
+ .rovela-admin-theme .admin-dropdown {
794
+ position: relative;
795
+ display: inline-block;
796
+ }
797
+
798
+ .rovela-admin-theme .admin-dropdown-content {
799
+ position: absolute;
800
+ top: 100%;
801
+ right: 0;
802
+ z-index: var(--admin-z-dropdown);
803
+ min-width: 12rem;
804
+ margin-top: var(--admin-space-1);
805
+ padding: var(--admin-space-1);
806
+ background: hsl(var(--admin-card));
807
+ border: var(--admin-border-width) solid hsl(var(--admin-border));
808
+ border-radius: var(--admin-radius-lg);
809
+ box-shadow: var(--admin-shadow-lg);
810
+ }
811
+
812
+ .rovela-admin-theme .admin-dropdown-item {
813
+ display: flex;
814
+ align-items: center;
815
+ gap: var(--admin-space-2);
816
+ width: 100%;
817
+ padding: var(--admin-space-2) var(--admin-space-3);
818
+ font-size: var(--admin-text-sm);
819
+ color: hsl(var(--admin-foreground));
820
+ border-radius: var(--admin-radius-sm);
821
+ cursor: pointer;
822
+ transition: var(--admin-transition-colors);
823
+ }
824
+
825
+ .rovela-admin-theme .admin-dropdown-item:hover {
826
+ background: hsl(var(--admin-background-subtle));
827
+ }
828
+
829
+ .rovela-admin-theme .admin-dropdown-item-destructive {
830
+ color: hsl(var(--admin-error));
831
+ }
832
+
833
+ .rovela-admin-theme .admin-dropdown-item-destructive:hover {
834
+ background: hsl(var(--admin-error-light));
835
+ }
836
+
837
+ .rovela-admin-theme .admin-dropdown-divider {
838
+ height: 1px;
839
+ margin: var(--admin-space-1) 0;
840
+ background: hsl(var(--admin-border));
841
+ }
842
+
843
+ /* ═══════════════════════════════════════════════════════════════════════════
844
+ MODAL/DIALOG COMPONENT
845
+ ═══════════════════════════════════════════════════════════════════════════ */
846
+
847
+ .rovela-admin-theme .admin-modal-backdrop {
848
+ position: fixed;
849
+ inset: 0;
850
+ z-index: var(--admin-z-overlay);
851
+ background: rgb(0 0 0 / 0.5);
852
+ backdrop-filter: blur(4px);
853
+ }
854
+
855
+ .rovela-admin-theme .admin-modal {
856
+ position: fixed;
857
+ left: 50%;
858
+ top: 50%;
859
+ transform: translate(-50%, -50%);
860
+ z-index: var(--admin-z-modal);
861
+ width: 100%;
862
+ max-width: 28rem;
863
+ max-height: calc(100vh - 4rem);
864
+ overflow-y: auto;
865
+ background: hsl(var(--admin-card));
866
+ border-radius: var(--admin-radius-xl);
867
+ box-shadow: var(--admin-shadow-2xl);
868
+ }
869
+
870
+ .rovela-admin-theme .admin-modal-header {
871
+ display: flex;
872
+ align-items: flex-start;
873
+ gap: var(--admin-space-3);
874
+ padding: var(--admin-space-6);
875
+ border-bottom: var(--admin-border-width) solid hsl(var(--admin-border));
876
+ }
877
+
878
+ .rovela-admin-theme .admin-modal-icon {
879
+ display: flex;
880
+ align-items: center;
881
+ justify-content: center;
882
+ width: 2.5rem;
883
+ height: 2.5rem;
884
+ border-radius: var(--admin-radius-full);
885
+ flex-shrink: 0;
886
+ }
887
+
888
+ .rovela-admin-theme .admin-modal-icon-error {
889
+ background: hsl(var(--admin-error-light));
890
+ color: hsl(var(--admin-error));
891
+ }
892
+
893
+ .rovela-admin-theme .admin-modal-icon-warning {
894
+ background: hsl(var(--admin-warning-light));
895
+ color: hsl(var(--admin-warning));
896
+ }
897
+
898
+ .rovela-admin-theme .admin-modal-icon-success {
899
+ background: hsl(var(--admin-success-light));
900
+ color: hsl(var(--admin-success));
901
+ }
902
+
903
+ .rovela-admin-theme .admin-modal-icon-info {
904
+ background: hsl(var(--admin-info-light));
905
+ color: hsl(var(--admin-info));
906
+ }
907
+
908
+ .rovela-admin-theme .admin-modal-title {
909
+ font-size: var(--admin-text-lg);
910
+ font-weight: var(--admin-font-semibold);
911
+ color: hsl(var(--admin-foreground));
912
+ }
913
+
914
+ .rovela-admin-theme .admin-modal-description {
915
+ margin-top: var(--admin-space-1);
916
+ font-size: var(--admin-text-sm);
917
+ color: hsl(var(--admin-foreground-muted));
918
+ }
919
+
920
+ .rovela-admin-theme .admin-modal-body {
921
+ padding: var(--admin-space-6);
922
+ }
923
+
924
+ .rovela-admin-theme .admin-modal-footer {
925
+ display: flex;
926
+ justify-content: flex-end;
927
+ gap: var(--admin-space-3);
928
+ padding: var(--admin-space-4) var(--admin-space-6);
929
+ border-top: var(--admin-border-width) solid hsl(var(--admin-border));
930
+ background: hsl(var(--admin-background-subtle) / 0.5);
931
+ }
932
+
933
+ /* ═══════════════════════════════════════════════════════════════════════════
934
+ TOGGLE/SWITCH COMPONENT
935
+ ═══════════════════════════════════════════════════════════════════════════ */
936
+
937
+ .rovela-admin-theme .admin-toggle {
938
+ position: relative;
939
+ display: inline-flex;
940
+ align-items: center;
941
+ width: 2.75rem;
942
+ height: 1.5rem;
943
+ padding: var(--admin-space-0-5);
944
+ background: hsl(var(--admin-border));
945
+ border-radius: var(--admin-radius-full);
946
+ cursor: pointer;
947
+ transition: var(--admin-transition-colors);
948
+ }
949
+
950
+ .rovela-admin-theme .admin-toggle[data-state="checked"] {
951
+ background: hsl(var(--admin-primary));
952
+ }
953
+
954
+ .rovela-admin-theme .admin-toggle-thumb {
955
+ width: 1.25rem;
956
+ height: 1.25rem;
957
+ background: white;
958
+ border-radius: var(--admin-radius-full);
959
+ box-shadow: var(--admin-shadow-sm);
960
+ transition: var(--admin-transition-transform);
961
+ }
962
+
963
+ .rovela-admin-theme .admin-toggle[data-state="checked"] .admin-toggle-thumb {
964
+ transform: translateX(1.25rem);
965
+ }
966
+
967
+ /* ═══════════════════════════════════════════════════════════════════════════
968
+ CHECKBOX COMPONENT
969
+ ═══════════════════════════════════════════════════════════════════════════ */
970
+
971
+ .rovela-admin-theme .admin-checkbox {
972
+ display: flex;
973
+ align-items: center;
974
+ justify-content: center;
975
+ width: 1.125rem;
976
+ height: 1.125rem;
977
+ background: hsl(var(--admin-card));
978
+ border: var(--admin-border-width-2) solid hsl(var(--admin-border));
979
+ border-radius: var(--admin-radius-sm);
980
+ cursor: pointer;
981
+ transition: var(--admin-transition-all);
982
+ }
983
+
984
+ .rovela-admin-theme .admin-checkbox:hover {
985
+ border-color: hsl(var(--admin-primary));
986
+ }
987
+
988
+ .rovela-admin-theme .admin-checkbox[data-state="checked"] {
989
+ background: hsl(var(--admin-primary));
990
+ border-color: hsl(var(--admin-primary));
991
+ color: white;
992
+ }
993
+
994
+ /* ═══════════════════════════════════════════════════════════════════════════
995
+ PAGINATION COMPONENT
996
+ ═══════════════════════════════════════════════════════════════════════════ */
997
+
998
+ .rovela-admin-theme .admin-pagination {
999
+ display: flex;
1000
+ align-items: center;
1001
+ justify-content: space-between;
1002
+ padding: var(--admin-space-3) var(--admin-space-4);
1003
+ border-top: var(--admin-border-width) solid hsl(var(--admin-border));
1004
+ }
1005
+
1006
+ .rovela-admin-theme .admin-pagination-info {
1007
+ font-size: var(--admin-text-sm);
1008
+ color: hsl(var(--admin-foreground-muted));
1009
+ }
1010
+
1011
+ .rovela-admin-theme .admin-pagination-controls {
1012
+ display: flex;
1013
+ align-items: center;
1014
+ gap: var(--admin-space-2);
1015
+ }
1016
+
1017
+ /* ═══════════════════════════════════════════════════════════════════════════
1018
+ EMPTY STATE COMPONENT
1019
+ ═══════════════════════════════════════════════════════════════════════════ */
1020
+
1021
+ .rovela-admin-theme .admin-empty-state {
1022
+ display: flex;
1023
+ flex-direction: column;
1024
+ align-items: center;
1025
+ justify-content: center;
1026
+ padding: var(--admin-space-16) var(--admin-space-4);
1027
+ text-align: center;
1028
+ }
1029
+
1030
+ .rovela-admin-theme .admin-empty-state-icon {
1031
+ width: 3rem;
1032
+ height: 3rem;
1033
+ margin-bottom: var(--admin-space-4);
1034
+ color: hsl(var(--admin-foreground-subtle));
1035
+ }
1036
+
1037
+ .rovela-admin-theme .admin-empty-state-title {
1038
+ font-size: var(--admin-text-lg);
1039
+ font-weight: var(--admin-font-semibold);
1040
+ color: hsl(var(--admin-foreground));
1041
+ margin-bottom: var(--admin-space-2);
1042
+ }
1043
+
1044
+ .rovela-admin-theme .admin-empty-state-description {
1045
+ font-size: var(--admin-text-sm);
1046
+ color: hsl(var(--admin-foreground-muted));
1047
+ max-width: 24rem;
1048
+ margin-bottom: var(--admin-space-6);
1049
+ }
1050
+
1051
+ /* ═══════════════════════════════════════════════════════════════════════════
1052
+ LOADING STATES
1053
+ ═══════════════════════════════════════════════════════════════════════════ */
1054
+
1055
+ .rovela-admin-theme .admin-spinner {
1056
+ width: 1.5rem;
1057
+ height: 1.5rem;
1058
+ border: 2px solid hsl(var(--admin-border));
1059
+ border-top-color: hsl(var(--admin-primary));
1060
+ border-radius: var(--admin-radius-full);
1061
+ animation: admin-spin 0.6s linear infinite;
1062
+ }
1063
+
1064
+ @keyframes admin-spin {
1065
+ to {
1066
+ transform: rotate(360deg);
1067
+ }
1068
+ }
1069
+
1070
+ .rovela-admin-theme .admin-skeleton {
1071
+ background: linear-gradient(
1072
+ 90deg,
1073
+ hsl(var(--admin-background-subtle)) 0%,
1074
+ hsl(var(--admin-border)) 50%,
1075
+ hsl(var(--admin-background-subtle)) 100%
1076
+ );
1077
+ background-size: 200% 100%;
1078
+ animation: admin-shimmer 1.5s ease-in-out infinite;
1079
+ border-radius: var(--admin-radius-md);
1080
+ }
1081
+
1082
+ @keyframes admin-shimmer {
1083
+ 0% {
1084
+ background-position: 200% 0;
1085
+ }
1086
+ 100% {
1087
+ background-position: -200% 0;
1088
+ }
1089
+ }
1090
+
1091
+ /* ═══════════════════════════════════════════════════════════════════════════
1092
+ STAT CARD COMPONENT
1093
+ ═══════════════════════════════════════════════════════════════════════════ */
1094
+
1095
+ .rovela-admin-theme .admin-stat-card {
1096
+ position: relative;
1097
+ padding: var(--admin-space-6);
1098
+ background: hsl(var(--admin-card));
1099
+ border: var(--admin-border-width) solid hsl(var(--admin-border));
1100
+ border-radius: var(--admin-radius-lg);
1101
+ box-shadow: var(--admin-shadow-sm);
1102
+ transition: var(--admin-transition-all);
1103
+ overflow: hidden;
1104
+ }
1105
+
1106
+ .rovela-admin-theme .admin-stat-card:hover {
1107
+ box-shadow: var(--admin-shadow-md);
1108
+ border-color: hsl(var(--admin-border-hover));
1109
+ }
1110
+
1111
+ .rovela-admin-theme .admin-stat-card::before {
1112
+ content: '';
1113
+ position: absolute;
1114
+ inset: 0;
1115
+ background: linear-gradient(135deg, hsl(var(--admin-primary) / 0.03) 0%, transparent 60%);
1116
+ opacity: 0;
1117
+ transition: var(--admin-transition-opacity);
1118
+ }
1119
+
1120
+ .rovela-admin-theme .admin-stat-card:hover::before {
1121
+ opacity: 1;
1122
+ }
1123
+
1124
+ .rovela-admin-theme .admin-stat-icon {
1125
+ display: flex;
1126
+ align-items: center;
1127
+ justify-content: center;
1128
+ width: 2.75rem;
1129
+ height: 2.75rem;
1130
+ background: hsl(var(--admin-primary-light));
1131
+ color: hsl(var(--admin-primary));
1132
+ border-radius: var(--admin-radius-lg);
1133
+ }
1134
+
1135
+ .rovela-admin-theme .admin-stat-value {
1136
+ font-size: var(--admin-text-2xl);
1137
+ font-weight: var(--admin-font-bold);
1138
+ color: hsl(var(--admin-foreground));
1139
+ margin-top: var(--admin-space-4);
1140
+ }
1141
+
1142
+ .rovela-admin-theme .admin-stat-label {
1143
+ font-size: var(--admin-text-sm);
1144
+ color: hsl(var(--admin-foreground-muted));
1145
+ margin-top: var(--admin-space-1);
1146
+ }
1147
+
1148
+ .rovela-admin-theme .admin-stat-trend {
1149
+ display: inline-flex;
1150
+ align-items: center;
1151
+ gap: var(--admin-space-1);
1152
+ font-size: var(--admin-text-xs);
1153
+ font-weight: var(--admin-font-medium);
1154
+ margin-top: var(--admin-space-2);
1155
+ }
1156
+
1157
+ .rovela-admin-theme .admin-stat-trend-up {
1158
+ color: hsl(var(--admin-success));
1159
+ }
1160
+
1161
+ .rovela-admin-theme .admin-stat-trend-down {
1162
+ color: hsl(var(--admin-error));
1163
+ }
1164
+
1165
+ /* ═══════════════════════════════════════════════════════════════════════════
1166
+ CHART COLORS (for Recharts)
1167
+ ═══════════════════════════════════════════════════════════════════════════ */
1168
+
1169
+ .rovela-admin-theme {
1170
+ --chart-primary: 163 86% 37%; /* Emerald - main data */
1171
+ --chart-secondary: 199 89% 48%; /* Blue - secondary data */
1172
+ --chart-tertiary: 38 92% 50%; /* Amber - tertiary data */
1173
+ --chart-quaternary: 142 71% 45%; /* Green - success */
1174
+ --chart-quinary: 0 84% 60%; /* Red - error/negative */
1175
+ --chart-grid: 220 13% 91%; /* Grid lines */
1176
+ --chart-text: 220 10% 46%; /* Axis text */
1177
+ }
1178
+
1179
+ /* ═══════════════════════════════════════════════════════════════════════════
1180
+ ALERT/NOTICE COMPONENT
1181
+ ═══════════════════════════════════════════════════════════════════════════ */
1182
+
1183
+ .rovela-admin-theme .admin-alert {
1184
+ display: flex;
1185
+ gap: var(--admin-space-3);
1186
+ padding: var(--admin-space-4);
1187
+ border-radius: var(--admin-radius-lg);
1188
+ border-left: 4px solid;
1189
+ }
1190
+
1191
+ .rovela-admin-theme .admin-alert-info {
1192
+ background: hsl(var(--admin-info-light));
1193
+ border-left-color: hsl(var(--admin-info));
1194
+ color: hsl(var(--admin-info-dark));
1195
+ }
1196
+
1197
+ .rovela-admin-theme .admin-alert-success {
1198
+ background: hsl(var(--admin-success-light));
1199
+ border-left-color: hsl(var(--admin-success));
1200
+ color: hsl(var(--admin-success-dark));
1201
+ }
1202
+
1203
+ .rovela-admin-theme .admin-alert-warning {
1204
+ background: hsl(var(--admin-warning-light));
1205
+ border-left-color: hsl(var(--admin-warning));
1206
+ color: hsl(var(--admin-warning-dark));
1207
+ }
1208
+
1209
+ .rovela-admin-theme .admin-alert-error {
1210
+ background: hsl(var(--admin-error-light));
1211
+ border-left-color: hsl(var(--admin-error));
1212
+ color: hsl(var(--admin-error-dark));
1213
+ }
1214
+
1215
+ .rovela-admin-theme .admin-alert-icon {
1216
+ width: 1.25rem;
1217
+ height: 1.25rem;
1218
+ flex-shrink: 0;
1219
+ }
1220
+
1221
+ .rovela-admin-theme .admin-alert-title {
1222
+ font-weight: var(--admin-font-semibold);
1223
+ margin-bottom: var(--admin-space-1);
1224
+ }
1225
+
1226
+ .rovela-admin-theme .admin-alert-description {
1227
+ font-size: var(--admin-text-sm);
1228
+ }
1229
+
1230
+ /* ═══════════════════════════════════════════════════════════════════════════
1231
+ TAG/CHIP COMPONENT
1232
+ ═══════════════════════════════════════════════════════════════════════════ */
1233
+
1234
+ .rovela-admin-theme .admin-tag {
1235
+ display: inline-flex;
1236
+ align-items: center;
1237
+ gap: var(--admin-space-1);
1238
+ padding: var(--admin-space-1) var(--admin-space-2);
1239
+ font-size: var(--admin-text-xs);
1240
+ font-weight: var(--admin-font-medium);
1241
+ background: hsl(var(--admin-primary-light));
1242
+ color: hsl(var(--admin-primary));
1243
+ border-radius: var(--admin-radius-full);
1244
+ }
1245
+
1246
+ .rovela-admin-theme .admin-tag-remove {
1247
+ display: flex;
1248
+ align-items: center;
1249
+ justify-content: center;
1250
+ width: 1rem;
1251
+ height: 1rem;
1252
+ border-radius: var(--admin-radius-full);
1253
+ cursor: pointer;
1254
+ transition: var(--admin-transition-colors);
1255
+ }
1256
+
1257
+ .rovela-admin-theme .admin-tag-remove:hover {
1258
+ background: hsl(var(--admin-primary) / 0.2);
1259
+ }
1260
+
1261
+ /* ═══════════════════════════════════════════════════════════════════════════
1262
+ FORM SECTION COMPONENT
1263
+ ═══════════════════════════════════════════════════════════════════════════ */
1264
+
1265
+ .rovela-admin-theme .admin-form-section {
1266
+ background: hsl(var(--admin-card));
1267
+ border: var(--admin-border-width) solid hsl(var(--admin-border));
1268
+ border-radius: var(--admin-radius-lg);
1269
+ box-shadow: var(--admin-shadow-sm);
1270
+ }
1271
+
1272
+ .rovela-admin-theme .admin-form-section-header {
1273
+ padding: var(--admin-space-5) var(--admin-space-6);
1274
+ border-bottom: var(--admin-border-width) solid hsl(var(--admin-border));
1275
+ }
1276
+
1277
+ .rovela-admin-theme .admin-form-section-title {
1278
+ font-size: var(--admin-text-lg);
1279
+ font-weight: var(--admin-font-semibold);
1280
+ color: hsl(var(--admin-foreground));
1281
+ }
1282
+
1283
+ .rovela-admin-theme .admin-form-section-description {
1284
+ font-size: var(--admin-text-sm);
1285
+ color: hsl(var(--admin-foreground-muted));
1286
+ margin-top: var(--admin-space-1);
1287
+ }
1288
+
1289
+ .rovela-admin-theme .admin-form-section-content {
1290
+ padding: var(--admin-space-6);
1291
+ }
1292
+
1293
+ .rovela-admin-theme .admin-form-row {
1294
+ display: grid;
1295
+ gap: var(--admin-space-4);
1296
+ }
1297
+
1298
+ .rovela-admin-theme .admin-form-row-2 {
1299
+ grid-template-columns: repeat(2, 1fr);
1300
+ }
1301
+
1302
+ .rovela-admin-theme .admin-form-group {
1303
+ margin-bottom: var(--admin-space-4);
1304
+ }
1305
+
1306
+ .rovela-admin-theme .admin-form-group:last-child {
1307
+ margin-bottom: 0;
1308
+ }