@rovela-ai/sdk 0.15.4 → 0.16.1
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.
- package/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +22 -22
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/OrderStatusChart.js +3 -3
- package/dist/admin/components/OrderStatusChart.js.map +1 -1
- package/dist/admin/components/OrderTable.js +2 -2
- package/dist/admin/components/OrderTable.js.map +1 -1
- package/dist/admin/components/PeriodSelector.d.ts +7 -0
- package/dist/admin/components/PeriodSelector.d.ts.map +1 -1
- package/dist/admin/components/PeriodSelector.js +5 -12
- package/dist/admin/components/PeriodSelector.js.map +1 -1
- package/dist/admin/components/PrimaryMetricsRow.d.ts.map +1 -1
- package/dist/admin/components/PrimaryMetricsRow.js +7 -7
- package/dist/admin/components/PrimaryMetricsRow.js.map +1 -1
- package/dist/admin/styles/admin-theme.css +565 -435
- package/package.json +1 -1
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* Usage: Wrap admin content with class="rovela-admin-theme"
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
/*
|
|
11
|
-
@import
|
|
10
|
+
/* Plus Jakarta Sans arrives via next/font (template app/admin/layout.tsx sets
|
|
11
|
+
--admin-font-jakarta on the segment). No render-blocking @import — the
|
|
12
|
+
system stack below is the graceful fallback for stores on older templates. */
|
|
12
13
|
|
|
13
14
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
14
15
|
DESIGN TOKENS - CSS Variables
|
|
@@ -19,11 +20,18 @@
|
|
|
19
20
|
COLOR PALETTE - Rovela Brand
|
|
20
21
|
───────────────────────────────────────────────────────────────────────── */
|
|
21
22
|
|
|
22
|
-
/* Primary - Emerald
|
|
23
|
+
/* Primary - Emerald. The accent is SCARCE by design: one primary button per
|
|
24
|
+
view, active nav, links. Status colors never borrow it. */
|
|
23
25
|
--admin-primary: 163 86% 37%; /* #0CAF7D */
|
|
24
26
|
--admin-primary-hover: 163 86% 32%; /* Darker on hover */
|
|
25
|
-
--admin-primary-
|
|
27
|
+
--admin-primary-active: 163 88% 28%; /* Pressed */
|
|
28
|
+
--admin-primary-light: 163 60% 93%; /* Tint for active nav / selections */
|
|
26
29
|
--admin-primary-foreground: 0 0% 100%; /* White text on primary */
|
|
30
|
+
/* Accent alias — several class families (setup guide, highlights) reference
|
|
31
|
+
--admin-accent; it was previously UNDEFINED and those tints silently
|
|
32
|
+
failed. It aliases primary: one accent, everywhere. */
|
|
33
|
+
--admin-accent: 163 86% 37%;
|
|
34
|
+
--admin-accent-deep: 163 88% 26%; /* Readable accent text on tints */
|
|
27
35
|
|
|
28
36
|
/* Backgrounds - Aligned with Rovela platform */
|
|
29
37
|
--admin-background: 36 36% 95%; /* Warm Cream #F7F3ED - matches platform */
|
|
@@ -32,15 +40,16 @@
|
|
|
32
40
|
--admin-sidebar: 36 20% 97%; /* Very light warm gray - blends with content */
|
|
33
41
|
--admin-sidebar-hover: 36 15% 93%; /* Subtle hover */
|
|
34
42
|
--admin-sidebar-border: 36 15% 88%; /* Very subtle border */
|
|
35
|
-
--admin-sidebar-active: 163
|
|
36
|
-
--admin-sidebar-active-text: 163
|
|
37
|
-
|
|
38
|
-
/* Text Colors
|
|
39
|
-
|
|
40
|
-
--admin-foreground
|
|
41
|
-
--admin-foreground-
|
|
42
|
-
--admin-
|
|
43
|
-
--admin-sidebar-foreground
|
|
43
|
+
--admin-sidebar-active: 163 60% 93%; /* Tinted emerald for active */
|
|
44
|
+
--admin-sidebar-active-text: 163 88% 26%; /* Deep emerald — readable on tint */
|
|
45
|
+
|
|
46
|
+
/* Text Colors — warm ink family (matches the platform's #2D3436 lineage;
|
|
47
|
+
the previous cool 220-hue grays clashed with the cream ground). */
|
|
48
|
+
--admin-foreground: 190 12% 17%; /* Warm near-black ink */
|
|
49
|
+
--admin-foreground-muted: 190 6% 42%; /* Secondary text (4.5:1 on cream) */
|
|
50
|
+
--admin-foreground-subtle: 190 5% 58%; /* Tertiary/placeholder */
|
|
51
|
+
--admin-sidebar-foreground: 190 10% 22%; /* Dark text for light sidebar */
|
|
52
|
+
--admin-sidebar-foreground-muted: 190 6% 44%; /* Medium gray for inactive */
|
|
44
53
|
--admin-sidebar-logo-filter: none; /* Colored logo on light sidebar */
|
|
45
54
|
|
|
46
55
|
/* Borders - Warm gray to match Rovela platform */
|
|
@@ -48,39 +57,57 @@
|
|
|
48
57
|
--admin-border-hover: 36 15% 82%; /* Darker on hover */
|
|
49
58
|
--admin-border-focus: 163 86% 37%; /* Primary on focus */
|
|
50
59
|
|
|
51
|
-
/* Status
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
--admin-
|
|
56
|
-
--admin-
|
|
57
|
-
--admin-
|
|
58
|
-
--admin-
|
|
59
|
-
--admin-
|
|
60
|
-
--admin-
|
|
61
|
-
--admin-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
/* Status TONES — ONE recipe everywhere: `-light` = tinted background,
|
|
61
|
+
`-dark` = darker readable foreground (4.5:1 on its tint). Badges,
|
|
62
|
+
alerts and status chips all consume these pairs; never raw base colors
|
|
63
|
+
as text and never `base / 0.1` alpha tints (the old second recipe). */
|
|
64
|
+
--admin-success: 160 84% 33%; /* Green base (icons, accents) */
|
|
65
|
+
--admin-success-light: 152 48% 92%; /* #E2F5EC tinted bg */
|
|
66
|
+
--admin-success-dark: 159 83% 26%; /* #0B7A57 readable fg */
|
|
67
|
+
--admin-warning: 40 90% 50%; /* Amber base */
|
|
68
|
+
--admin-warning-light: 40 86% 92%; /* #FCF0D8 tinted bg */
|
|
69
|
+
--admin-warning-dark: 39 70% 31%; /* #8A6116 readable fg */
|
|
70
|
+
--admin-error: 4 74% 52%; /* Red base */
|
|
71
|
+
/* Alias — several components (UsersTable, CustomerTable) and CC-generated
|
|
72
|
+
custom pages reference --admin-destructive; leaving it undefined renders
|
|
73
|
+
empty hsl() (the black-donut disease). Always mirror --admin-error. */
|
|
74
|
+
--admin-destructive: 4 74% 52%;
|
|
75
|
+
--admin-error-light: 5 81% 94%; /* #FCE5E3 tinted bg */
|
|
76
|
+
--admin-error-dark: 5 61% 44%; /* #B3372C readable fg */
|
|
77
|
+
--admin-error-foreground: 0 0% 100%; /* On solid error surfaces */
|
|
78
|
+
--admin-info: 210 70% 46%; /* Blue base */
|
|
79
|
+
--admin-info-light: 209 70% 94%; /* #E3EFFA tinted bg */
|
|
80
|
+
--admin-info-dark: 211 63% 40%; /* #2563A8 readable fg */
|
|
81
|
+
/* Attention — "needs a human" (unfulfilled, action required). Distinct from
|
|
82
|
+
warning: olive, calmer, non-alarming. New in the 2026-07 redesign. */
|
|
83
|
+
--admin-attention: 74 55% 40%;
|
|
84
|
+
--admin-attention-light: 70 48% 90%; /* #EEF2D9 tinted bg */
|
|
85
|
+
--admin-attention-dark: 71 58% 27%; /* #5F6E1D readable fg */
|
|
64
86
|
|
|
65
87
|
/* ─────────────────────────────────────────────────────────────────────────
|
|
66
88
|
TYPOGRAPHY - Plus Jakarta Sans
|
|
67
89
|
───────────────────────────────────────────────────────────────────────── */
|
|
68
|
-
--admin-font-sans: 'Plus Jakarta Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
90
|
+
--admin-font-sans: var(--admin-font-jakarta, 'Plus Jakarta Sans'), system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
69
91
|
--admin-font-mono: 'SF Mono', 'Fira Code', 'Fira Mono', Menlo, Consolas, monospace;
|
|
70
92
|
|
|
71
93
|
/* Override store font variables to use Rovela's Plus Jakarta Sans in admin */
|
|
72
94
|
--font-heading: 'Plus Jakarta Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
73
95
|
--font-body: 'Plus Jakarta Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
74
96
|
|
|
75
|
-
/* Font Sizes
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
--admin-text-
|
|
81
|
-
--admin-text-
|
|
82
|
-
--admin-text-
|
|
83
|
-
--admin-text-
|
|
97
|
+
/* Font Sizes — the Polaris inversion (2026-07 redesign): headings barely
|
|
98
|
+
bigger than body, hierarchy through WEIGHT. 13px is the working size;
|
|
99
|
+
20px page titles are the only large text. Deliberate collapses:
|
|
100
|
+
2xl == 3xl (both 20px) so legacy consumers of either land on the same
|
|
101
|
+
page-title size. */
|
|
102
|
+
--admin-text-2xs: 0.6875rem; /* 11px - micro (counters, footnotes) */
|
|
103
|
+
--admin-text-xs: 0.75rem; /* 12px - meta, badges, helper text */
|
|
104
|
+
--admin-text-sm: 0.8125rem; /* 13px - body & tables (working size) */
|
|
105
|
+
--admin-text-base: 0.8125rem; /* 13px - base for admin (was 14) */
|
|
106
|
+
--admin-text-md: 0.875rem; /* 14px - card/section headings */
|
|
107
|
+
--admin-text-lg: 0.9375rem; /* 15px - modal titles, prominent rows */
|
|
108
|
+
--admin-text-xl: 1rem; /* 16px - rare emphasis */
|
|
109
|
+
--admin-text-2xl: 1.25rem; /* 20px - stat values, page titles */
|
|
110
|
+
--admin-text-3xl: 1.25rem; /* 20px - page titles (was 26) */
|
|
84
111
|
|
|
85
112
|
/* Font Weights */
|
|
86
113
|
--admin-font-normal: 400;
|
|
@@ -93,10 +120,10 @@
|
|
|
93
120
|
--admin-leading-normal: 1.5;
|
|
94
121
|
--admin-leading-relaxed: 1.625;
|
|
95
122
|
|
|
96
|
-
/* Letter Spacing */
|
|
97
|
-
--admin-tracking-tight: -0.
|
|
123
|
+
/* Letter Spacing — negative tracking only at 20px+; eyebrows get +0.06em */
|
|
124
|
+
--admin-tracking-tight: -0.01em;
|
|
98
125
|
--admin-tracking-normal: 0;
|
|
99
|
-
--admin-tracking-wide: 0.
|
|
126
|
+
--admin-tracking-wide: 0.06em;
|
|
100
127
|
|
|
101
128
|
/* ─────────────────────────────────────────────────────────────────────────
|
|
102
129
|
SPACING SCALE (8px base)
|
|
@@ -123,13 +150,17 @@
|
|
|
123
150
|
/* ─────────────────────────────────────────────────────────────────────────
|
|
124
151
|
BORDERS & RADIUS - Aligned with Rovela platform scale
|
|
125
152
|
───────────────────────────────────────────────────────────────────────── */
|
|
153
|
+
/* One radius language (2026-07 redesign): 6px controls & badges, 10px
|
|
154
|
+
cards & tables, 12px modals. Never larger on functional surfaces — the
|
|
155
|
+
oversized-radius look is the #1 generic-dashboard tell. sm == md is a
|
|
156
|
+
deliberate collapse (both are "control" radius). */
|
|
126
157
|
--admin-radius-none: 0;
|
|
127
|
-
--admin-radius-xs: 0.25rem; /* 4px -
|
|
128
|
-
--admin-radius-sm: 0.
|
|
129
|
-
--admin-radius-md: 0.
|
|
130
|
-
--admin-radius-lg:
|
|
131
|
-
--admin-radius-xl:
|
|
132
|
-
--admin-radius-2xl:
|
|
158
|
+
--admin-radius-xs: 0.25rem; /* 4px - tiny elements */
|
|
159
|
+
--admin-radius-sm: 0.375rem; /* 6px - controls, badges, inputs */
|
|
160
|
+
--admin-radius-md: 0.375rem; /* 6px - buttons (was 12) */
|
|
161
|
+
--admin-radius-lg: 0.625rem; /* 10px - cards, tables (was 16) */
|
|
162
|
+
--admin-radius-xl: 0.75rem; /* 12px - modals (was 24) */
|
|
163
|
+
--admin-radius-2xl: 1rem; /* 16px (was 32) */
|
|
133
164
|
--admin-radius-full: 9999px; /* Pills, avatars */
|
|
134
165
|
|
|
135
166
|
/* Border Widths */
|
|
@@ -139,19 +170,22 @@
|
|
|
139
170
|
/* ─────────────────────────────────────────────────────────────────────────
|
|
140
171
|
SHADOWS - Aligned with Rovela platform shadow system
|
|
141
172
|
───────────────────────────────────────────────────────────────────────── */
|
|
142
|
-
/* Fine-grained elevation scale
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
--admin-shadow-
|
|
146
|
-
--admin-shadow-
|
|
147
|
-
--admin-shadow-
|
|
148
|
-
--admin-shadow-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
--shadow-rovela-
|
|
173
|
+
/* Fine-grained elevation scale — whispers, not drops. Hairline borders do
|
|
174
|
+
the separating; shadows only hint at elevation (cards) or float layers
|
|
175
|
+
(dropdowns, modals). */
|
|
176
|
+
--admin-shadow-xs: 0 1px 2px 0 rgb(24 34 33 / 0.03);
|
|
177
|
+
--admin-shadow-sm: 0 1px 2px rgb(24 34 33 / 0.04);
|
|
178
|
+
--admin-shadow-md: 0 2px 8px -2px rgb(24 34 33 / 0.08);
|
|
179
|
+
--admin-shadow-lg: 0 8px 24px -8px rgb(24 34 33 / 0.14);
|
|
180
|
+
--admin-shadow-xl: 0 16px 40px -12px rgb(24 34 33 / 0.18);
|
|
181
|
+
--admin-shadow-2xl: 0 24px 48px -12px rgb(24 34 33 / 0.22);
|
|
182
|
+
|
|
183
|
+
/* Platform shadow aliases — SAME values as the scale above (they were a
|
|
184
|
+
duplicated parallel system; now they alias). */
|
|
185
|
+
--shadow-rovela-sm: var(--admin-shadow-sm);
|
|
186
|
+
--shadow-rovela-md: var(--admin-shadow-md);
|
|
187
|
+
--shadow-rovela-lg: var(--admin-shadow-lg);
|
|
188
|
+
--shadow-rovela-xl: var(--admin-shadow-xl);
|
|
155
189
|
|
|
156
190
|
/* Colored Shadows - Primary emerald glow */
|
|
157
191
|
--admin-shadow-primary-sm: 0 2px 8px 0 hsl(163 86% 37% / 0.12);
|
|
@@ -168,17 +202,21 @@
|
|
|
168
202
|
/* ─────────────────────────────────────────────────────────────────────────
|
|
169
203
|
TRANSITIONS & ANIMATIONS - Aligned with Rovela platform timing
|
|
170
204
|
───────────────────────────────────────────────────────────────────────── */
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
--admin-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
--admin-transition-
|
|
178
|
-
--admin-transition-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
--admin-transition-
|
|
205
|
+
/* Snappy, decisive timing (2026-07 redesign): 140ms for color/state
|
|
206
|
+
feedback, 180ms for anything that moves. 250ms read as laggy at admin
|
|
207
|
+
interaction density. */
|
|
208
|
+
--admin-ease: cubic-bezier(0.2, 0, 0.2, 1);
|
|
209
|
+
--admin-transition-fast: 140ms var(--admin-ease);
|
|
210
|
+
--admin-transition-base: 180ms var(--admin-ease);
|
|
211
|
+
--admin-transition-slow: 280ms var(--admin-ease);
|
|
212
|
+
--admin-transition-slower: 360ms var(--admin-ease);
|
|
213
|
+
|
|
214
|
+
/* Specific transitions */
|
|
215
|
+
--admin-transition-colors: color 140ms var(--admin-ease), background-color 140ms var(--admin-ease), border-color 140ms var(--admin-ease), fill 140ms var(--admin-ease), stroke 140ms var(--admin-ease);
|
|
216
|
+
--admin-transition-opacity: opacity 140ms var(--admin-ease);
|
|
217
|
+
--admin-transition-shadow: box-shadow 180ms var(--admin-ease);
|
|
218
|
+
--admin-transition-transform: transform 180ms var(--admin-ease);
|
|
219
|
+
--admin-transition-all: color 140ms var(--admin-ease), background-color 140ms var(--admin-ease), border-color 140ms var(--admin-ease), box-shadow 180ms var(--admin-ease), transform 120ms var(--admin-ease), opacity 140ms var(--admin-ease);
|
|
182
220
|
|
|
183
221
|
/* Rovela Easing - matches platform timing */
|
|
184
222
|
--admin-ease-rovela: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
@@ -221,230 +259,13 @@
|
|
|
221
259
|
}
|
|
222
260
|
|
|
223
261
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
224
|
-
DARK MODE
|
|
262
|
+
NO DARK MODE — deliberate (2026-07 redesign).
|
|
263
|
+
The Rovela platform is light-only (forcedTheme="light"); the admin matches.
|
|
264
|
+
The previous dark support was ~210 triplicated lines (media query + .dark
|
|
265
|
+
class + .dark ancestor) that fractured the brand and doubled the QA surface.
|
|
266
|
+
Do not reintroduce without a platform-wide dark-mode decision.
|
|
225
267
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
226
268
|
|
|
227
|
-
/* Dark mode via prefers-color-scheme media query */
|
|
228
|
-
@media (prefers-color-scheme: dark) {
|
|
229
|
-
.rovela-admin-theme:not(.light) {
|
|
230
|
-
/* Backgrounds - Dark blue-gray palette */
|
|
231
|
-
--admin-background: 200 10% 10%; /* Dark blue-gray */
|
|
232
|
-
--admin-background-subtle: 200 10% 14%; /* Slightly lighter */
|
|
233
|
-
--admin-card: 200 10% 14%; /* Card surfaces */
|
|
234
|
-
--admin-sidebar: 200 10% 12%; /* Slightly lighter than content bg */
|
|
235
|
-
--admin-sidebar-hover: 200 10% 18%; /* Visible hover */
|
|
236
|
-
--admin-sidebar-border: 200 10% 20%; /* Subtle border */
|
|
237
|
-
--admin-sidebar-active: 163 86% 15%; /* Dark primary bg for active */
|
|
238
|
-
--admin-sidebar-active-text: 163 86% 45%; /* Primary color text */
|
|
239
|
-
|
|
240
|
-
/* Text Colors - Inverted for dark mode */
|
|
241
|
-
--admin-foreground: 36 36% 95%; /* Cream text */
|
|
242
|
-
--admin-foreground-muted: 196 6% 60%; /* Muted text */
|
|
243
|
-
--admin-foreground-subtle: 196 6% 50%; /* Subtle text */
|
|
244
|
-
--admin-sidebar-foreground: 200 10% 90%; /* Light text for dark sidebar */
|
|
245
|
-
--admin-sidebar-foreground-muted: 200 10% 60%; /* Muted gray for inactive */
|
|
246
|
-
--admin-sidebar-logo-filter: brightness(0) invert(1); /* White logo on dark sidebar */
|
|
247
|
-
|
|
248
|
-
/* Primary - Brighter emerald for dark mode */
|
|
249
|
-
--admin-primary: 163 86% 45%; /* Brighter emerald */
|
|
250
|
-
--admin-primary-hover: 163 86% 50%; /* Even brighter on hover */
|
|
251
|
-
--admin-primary-light: 163 86% 20%; /* Muted primary for backgrounds */
|
|
252
|
-
--admin-primary-foreground: 200 10% 10%; /* Dark text on primary */
|
|
253
|
-
|
|
254
|
-
/* Borders - Darker warm gray */
|
|
255
|
-
--admin-border: 200 10% 20%; /* Dark border */
|
|
256
|
-
--admin-border-hover: 200 10% 25%; /* Slightly lighter on hover */
|
|
257
|
-
--admin-border-focus: 163 86% 45%; /* Brighter primary on focus */
|
|
258
|
-
|
|
259
|
-
/* Status Colors - Adjusted for dark mode visibility */
|
|
260
|
-
--admin-success: 168 100% 40%; /* Brighter teal */
|
|
261
|
-
--admin-success-light: 168 100% 15%; /* Dark teal bg */
|
|
262
|
-
--admin-success-dark: 168 100% 60%; /* Light teal text */
|
|
263
|
-
--admin-warning: 43 97% 50%; /* Adjusted yellow */
|
|
264
|
-
--admin-warning-light: 43 97% 15%; /* Dark yellow bg */
|
|
265
|
-
--admin-warning-dark: 43 97% 70%; /* Light yellow text */
|
|
266
|
-
--admin-error: 0 100% 65%; /* Brighter red */
|
|
267
|
-
--admin-error-light: 0 100% 15%; /* Dark red bg */
|
|
268
|
-
--admin-error-dark: 0 100% 75%; /* Light red text */
|
|
269
|
-
--admin-info: 199 89% 55%; /* Brighter blue */
|
|
270
|
-
--admin-info-light: 199 89% 15%; /* Dark blue bg */
|
|
271
|
-
--admin-info-dark: 199 89% 70%; /* Light blue text */
|
|
272
|
-
|
|
273
|
-
/* Shadows - More visible in dark mode */
|
|
274
|
-
--admin-shadow-sm: 0 2px 4px rgb(0 0 0 / 0.3);
|
|
275
|
-
--admin-shadow-md: 0 4px 12px rgb(0 0 0 / 0.4);
|
|
276
|
-
--admin-shadow-lg: 0 8px 24px rgb(0 0 0 / 0.5);
|
|
277
|
-
--admin-shadow-xl: 0 16px 48px rgb(0 0 0 / 0.6);
|
|
278
|
-
|
|
279
|
-
/* Standard variable mappings for dark mode */
|
|
280
|
-
--background: var(--admin-background);
|
|
281
|
-
--foreground: var(--admin-foreground);
|
|
282
|
-
--card: var(--admin-card);
|
|
283
|
-
--card-foreground: var(--admin-foreground);
|
|
284
|
-
--popover: var(--admin-card);
|
|
285
|
-
--popover-foreground: var(--admin-foreground);
|
|
286
|
-
--primary: var(--admin-primary);
|
|
287
|
-
--primary-foreground: var(--admin-primary-foreground);
|
|
288
|
-
--secondary: var(--admin-background-subtle);
|
|
289
|
-
--secondary-foreground: var(--admin-foreground);
|
|
290
|
-
--muted: var(--admin-background-subtle);
|
|
291
|
-
--muted-foreground: var(--admin-foreground-muted);
|
|
292
|
-
--accent: var(--admin-primary-light);
|
|
293
|
-
--accent-foreground: var(--admin-primary);
|
|
294
|
-
--border: var(--admin-border);
|
|
295
|
-
--input: var(--admin-border);
|
|
296
|
-
--ring: var(--admin-primary);
|
|
297
|
-
--destructive: var(--admin-error);
|
|
298
|
-
--destructive-foreground: 0 0% 100%;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/* Explicit dark mode class (for manual toggle) */
|
|
303
|
-
.rovela-admin-theme.dark {
|
|
304
|
-
/* Backgrounds - Dark blue-gray palette */
|
|
305
|
-
--admin-background: 200 10% 10%;
|
|
306
|
-
--admin-background-subtle: 200 10% 14%;
|
|
307
|
-
--admin-card: 200 10% 14%;
|
|
308
|
-
--admin-sidebar: 200 10% 12%; /* Slightly lighter than content bg */
|
|
309
|
-
--admin-sidebar-hover: 200 10% 18%; /* Visible hover */
|
|
310
|
-
--admin-sidebar-border: 200 10% 20%; /* Subtle border */
|
|
311
|
-
--admin-sidebar-active: 163 86% 15%; /* Dark primary bg for active */
|
|
312
|
-
--admin-sidebar-active-text: 163 86% 45%; /* Primary color text */
|
|
313
|
-
|
|
314
|
-
/* Text Colors */
|
|
315
|
-
--admin-foreground: 36 36% 95%;
|
|
316
|
-
--admin-foreground-muted: 196 6% 60%;
|
|
317
|
-
--admin-foreground-subtle: 196 6% 50%;
|
|
318
|
-
--admin-sidebar-foreground: 200 10% 90%; /* Light text for dark sidebar */
|
|
319
|
-
--admin-sidebar-foreground-muted: 200 10% 60%; /* Muted gray for inactive */
|
|
320
|
-
--admin-sidebar-logo-filter: brightness(0) invert(1); /* White logo on dark sidebar */
|
|
321
|
-
|
|
322
|
-
/* Primary */
|
|
323
|
-
--admin-primary: 163 86% 45%;
|
|
324
|
-
--admin-primary-hover: 163 86% 50%;
|
|
325
|
-
--admin-primary-light: 163 86% 20%;
|
|
326
|
-
--admin-primary-foreground: 200 10% 10%;
|
|
327
|
-
|
|
328
|
-
/* Borders */
|
|
329
|
-
--admin-border: 200 10% 20%;
|
|
330
|
-
--admin-border-hover: 200 10% 25%;
|
|
331
|
-
--admin-border-focus: 163 86% 45%;
|
|
332
|
-
|
|
333
|
-
/* Status Colors */
|
|
334
|
-
--admin-success: 168 100% 40%;
|
|
335
|
-
--admin-success-light: 168 100% 15%;
|
|
336
|
-
--admin-success-dark: 168 100% 60%;
|
|
337
|
-
--admin-warning: 43 97% 50%;
|
|
338
|
-
--admin-warning-light: 43 97% 15%;
|
|
339
|
-
--admin-warning-dark: 43 97% 70%;
|
|
340
|
-
--admin-error: 0 100% 65%;
|
|
341
|
-
--admin-error-light: 0 100% 15%;
|
|
342
|
-
--admin-error-dark: 0 100% 75%;
|
|
343
|
-
--admin-info: 199 89% 55%;
|
|
344
|
-
--admin-info-light: 199 89% 15%;
|
|
345
|
-
--admin-info-dark: 199 89% 70%;
|
|
346
|
-
|
|
347
|
-
/* Shadows */
|
|
348
|
-
--admin-shadow-sm: 0 2px 4px rgb(0 0 0 / 0.3);
|
|
349
|
-
--admin-shadow-md: 0 4px 12px rgb(0 0 0 / 0.4);
|
|
350
|
-
--admin-shadow-lg: 0 8px 24px rgb(0 0 0 / 0.5);
|
|
351
|
-
--admin-shadow-xl: 0 16px 48px rgb(0 0 0 / 0.6);
|
|
352
|
-
|
|
353
|
-
/* Standard variable mappings */
|
|
354
|
-
--background: var(--admin-background);
|
|
355
|
-
--foreground: var(--admin-foreground);
|
|
356
|
-
--card: var(--admin-card);
|
|
357
|
-
--card-foreground: var(--admin-foreground);
|
|
358
|
-
--popover: var(--admin-card);
|
|
359
|
-
--popover-foreground: var(--admin-foreground);
|
|
360
|
-
--primary: var(--admin-primary);
|
|
361
|
-
--primary-foreground: var(--admin-primary-foreground);
|
|
362
|
-
--secondary: var(--admin-background-subtle);
|
|
363
|
-
--secondary-foreground: var(--admin-foreground);
|
|
364
|
-
--muted: var(--admin-background-subtle);
|
|
365
|
-
--muted-foreground: var(--admin-foreground-muted);
|
|
366
|
-
--accent: var(--admin-primary-light);
|
|
367
|
-
--accent-foreground: var(--admin-primary);
|
|
368
|
-
--border: var(--admin-border);
|
|
369
|
-
--input: var(--admin-border);
|
|
370
|
-
--ring: var(--admin-primary);
|
|
371
|
-
--destructive: var(--admin-error);
|
|
372
|
-
--destructive-foreground: 0 0% 100%;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
/* Dark mode when .dark class is on ancestor (next-themes pattern) */
|
|
376
|
-
.dark .rovela-admin-theme {
|
|
377
|
-
/* Backgrounds - Dark blue-gray palette */
|
|
378
|
-
--admin-background: 200 10% 10%;
|
|
379
|
-
--admin-background-subtle: 200 10% 14%;
|
|
380
|
-
--admin-card: 200 10% 14%;
|
|
381
|
-
--admin-sidebar: 200 10% 12%; /* Slightly lighter than content bg */
|
|
382
|
-
--admin-sidebar-hover: 200 10% 18%; /* Visible hover */
|
|
383
|
-
--admin-sidebar-border: 200 10% 20%; /* Subtle border */
|
|
384
|
-
--admin-sidebar-active: 163 86% 15%; /* Dark primary bg for active */
|
|
385
|
-
--admin-sidebar-active-text: 163 86% 45%; /* Primary color text */
|
|
386
|
-
|
|
387
|
-
/* Text Colors */
|
|
388
|
-
--admin-foreground: 36 36% 95%;
|
|
389
|
-
--admin-foreground-muted: 196 6% 60%;
|
|
390
|
-
--admin-foreground-subtle: 196 6% 50%;
|
|
391
|
-
--admin-sidebar-foreground: 200 10% 90%; /* Light text for dark sidebar */
|
|
392
|
-
--admin-sidebar-foreground-muted: 200 10% 60%; /* Muted gray for inactive */
|
|
393
|
-
--admin-sidebar-logo-filter: brightness(0) invert(1); /* White logo on dark sidebar */
|
|
394
|
-
|
|
395
|
-
/* Primary */
|
|
396
|
-
--admin-primary: 163 86% 45%;
|
|
397
|
-
--admin-primary-hover: 163 86% 50%;
|
|
398
|
-
--admin-primary-light: 163 86% 20%;
|
|
399
|
-
--admin-primary-foreground: 200 10% 10%;
|
|
400
|
-
|
|
401
|
-
/* Borders */
|
|
402
|
-
--admin-border: 200 10% 20%;
|
|
403
|
-
--admin-border-hover: 200 10% 25%;
|
|
404
|
-
--admin-border-focus: 163 86% 45%;
|
|
405
|
-
|
|
406
|
-
/* Status Colors */
|
|
407
|
-
--admin-success: 168 100% 40%;
|
|
408
|
-
--admin-success-light: 168 100% 15%;
|
|
409
|
-
--admin-success-dark: 168 100% 60%;
|
|
410
|
-
--admin-warning: 43 97% 50%;
|
|
411
|
-
--admin-warning-light: 43 97% 15%;
|
|
412
|
-
--admin-warning-dark: 43 97% 70%;
|
|
413
|
-
--admin-error: 0 100% 65%;
|
|
414
|
-
--admin-error-light: 0 100% 15%;
|
|
415
|
-
--admin-error-dark: 0 100% 75%;
|
|
416
|
-
--admin-info: 199 89% 55%;
|
|
417
|
-
--admin-info-light: 199 89% 15%;
|
|
418
|
-
--admin-info-dark: 199 89% 70%;
|
|
419
|
-
|
|
420
|
-
/* Shadows */
|
|
421
|
-
--admin-shadow-sm: 0 2px 4px rgb(0 0 0 / 0.3);
|
|
422
|
-
--admin-shadow-md: 0 4px 12px rgb(0 0 0 / 0.4);
|
|
423
|
-
--admin-shadow-lg: 0 8px 24px rgb(0 0 0 / 0.5);
|
|
424
|
-
--admin-shadow-xl: 0 16px 48px rgb(0 0 0 / 0.6);
|
|
425
|
-
|
|
426
|
-
/* Standard variable mappings */
|
|
427
|
-
--background: var(--admin-background);
|
|
428
|
-
--foreground: var(--admin-foreground);
|
|
429
|
-
--card: var(--admin-card);
|
|
430
|
-
--card-foreground: var(--admin-foreground);
|
|
431
|
-
--popover: var(--admin-card);
|
|
432
|
-
--popover-foreground: var(--admin-foreground);
|
|
433
|
-
--primary: var(--admin-primary);
|
|
434
|
-
--primary-foreground: var(--admin-primary-foreground);
|
|
435
|
-
--secondary: var(--admin-background-subtle);
|
|
436
|
-
--secondary-foreground: var(--admin-foreground);
|
|
437
|
-
--muted: var(--admin-background-subtle);
|
|
438
|
-
--muted-foreground: var(--admin-foreground-muted);
|
|
439
|
-
--accent: var(--admin-primary-light);
|
|
440
|
-
--accent-foreground: var(--admin-primary);
|
|
441
|
-
--border: var(--admin-border);
|
|
442
|
-
--input: var(--admin-border);
|
|
443
|
-
--ring: var(--admin-primary);
|
|
444
|
-
--destructive: var(--admin-error);
|
|
445
|
-
--destructive-foreground: 0 0% 100%;
|
|
446
|
-
}
|
|
447
|
-
|
|
448
269
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
449
270
|
BASE STYLES
|
|
450
271
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
@@ -465,6 +286,53 @@
|
|
|
465
286
|
border-color: hsl(var(--admin-border));
|
|
466
287
|
}
|
|
467
288
|
|
|
289
|
+
/* ═══════════════════════════════════════════════════════════════════════════
|
|
290
|
+
SCOPE FENCE — storefront-bleed isolation (2026-07 redesign, load-bearing)
|
|
291
|
+
|
|
292
|
+
The admin renders inside the merchant's own Next app: the storefront's
|
|
293
|
+
globals.css (brand fonts, `@layer base` heading sizes — often display
|
|
294
|
+
clamp() sizes of 56-96px) is in scope on /admin. Historically only
|
|
295
|
+
.admin-page-title / .admin-card-title neutralized this, so any BARE
|
|
296
|
+
heading inherited merchant typography (the documented giant-h1 bug class).
|
|
297
|
+
|
|
298
|
+
This fence pins every bare element to the admin system STRUCTURALLY:
|
|
299
|
+
selectors here are (0,1,1) — they beat the store's layered base rules AND
|
|
300
|
+
single-class Tailwind utilities regardless of load order, while any
|
|
301
|
+
.admin-* class (0,2,0) still wins over the fence. Bare headings are
|
|
302
|
+
deliberately modest (hierarchy through weight — the Polaris inversion);
|
|
303
|
+
pages that want the real page-title anatomy use .admin-page-title.
|
|
304
|
+
═══════════════════════════════════════════════════════════════════════════ */
|
|
305
|
+
|
|
306
|
+
.rovela-admin-theme :is(h1, h2, h3, h4, h5, h6) {
|
|
307
|
+
font-family: var(--admin-font-sans);
|
|
308
|
+
color: hsl(var(--admin-foreground));
|
|
309
|
+
line-height: 1.35;
|
|
310
|
+
letter-spacing: var(--admin-tracking-normal);
|
|
311
|
+
}
|
|
312
|
+
.rovela-admin-theme h1 {
|
|
313
|
+
font-size: var(--admin-text-2xl); /* 20px */
|
|
314
|
+
font-weight: var(--admin-font-semibold);
|
|
315
|
+
letter-spacing: var(--admin-tracking-tight);
|
|
316
|
+
}
|
|
317
|
+
.rovela-admin-theme h2 {
|
|
318
|
+
font-size: var(--admin-text-lg); /* 15px */
|
|
319
|
+
font-weight: var(--admin-font-semibold);
|
|
320
|
+
}
|
|
321
|
+
.rovela-admin-theme h3 {
|
|
322
|
+
font-size: var(--admin-text-md); /* 14px */
|
|
323
|
+
font-weight: var(--admin-font-semibold);
|
|
324
|
+
}
|
|
325
|
+
.rovela-admin-theme :is(h4, h5, h6) {
|
|
326
|
+
font-size: var(--admin-text-base); /* 13px */
|
|
327
|
+
font-weight: var(--admin-font-semibold);
|
|
328
|
+
}
|
|
329
|
+
.rovela-admin-theme :is(p, span, li, td, th, dt, dd, label, a) {
|
|
330
|
+
font-family: var(--admin-font-sans);
|
|
331
|
+
}
|
|
332
|
+
.rovela-admin-theme :is(button, input, select, textarea) {
|
|
333
|
+
font-family: var(--admin-font-sans);
|
|
334
|
+
}
|
|
335
|
+
|
|
468
336
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
469
337
|
LAYOUT STRUCTURE
|
|
470
338
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
@@ -531,7 +399,7 @@
|
|
|
531
399
|
|
|
532
400
|
.rovela-admin-theme .admin-heading-1 {
|
|
533
401
|
font-size: var(--admin-text-3xl);
|
|
534
|
-
font-weight: var(--admin-font-
|
|
402
|
+
font-weight: var(--admin-font-semibold);
|
|
535
403
|
line-height: var(--admin-leading-tight);
|
|
536
404
|
letter-spacing: var(--admin-tracking-tight);
|
|
537
405
|
color: hsl(var(--admin-foreground));
|
|
@@ -554,8 +422,8 @@
|
|
|
554
422
|
unlayered (like the rest of admin-theme.css), so it wins over the store's
|
|
555
423
|
layered base heading regardless of the store's typography. */
|
|
556
424
|
.rovela-admin-theme .admin-page-title {
|
|
557
|
-
font-size: var(--admin-text-3xl);
|
|
558
|
-
font-weight: var(--admin-font-
|
|
425
|
+
font-size: var(--admin-text-3xl); /* 20px — the only large text */
|
|
426
|
+
font-weight: var(--admin-font-semibold);
|
|
559
427
|
line-height: var(--admin-leading-tight);
|
|
560
428
|
letter-spacing: var(--admin-tracking-tight);
|
|
561
429
|
color: hsl(var(--admin-foreground));
|
|
@@ -586,7 +454,7 @@
|
|
|
586
454
|
Without this rule, browsers render the bare <h3> at ~1.17em and the title
|
|
587
455
|
reads oversized against the .admin-text-sm body. */
|
|
588
456
|
.rovela-admin-theme .admin-card-title {
|
|
589
|
-
font-size: var(--admin-text-
|
|
457
|
+
font-size: var(--admin-text-md); /* 14px semibold — card headings */
|
|
590
458
|
font-weight: var(--admin-font-semibold);
|
|
591
459
|
line-height: var(--admin-leading-tight);
|
|
592
460
|
color: hsl(var(--admin-foreground));
|
|
@@ -645,19 +513,21 @@
|
|
|
645
513
|
border-color: hsl(var(--admin-border-hover));
|
|
646
514
|
}
|
|
647
515
|
|
|
516
|
+
/* Card anatomy: 16px internal metrics everywhere (Polaris card spec) so
|
|
517
|
+
sibling cards share a baseline grid. */
|
|
648
518
|
.rovela-admin-theme .admin-card-header {
|
|
649
|
-
padding: var(--admin-space-
|
|
650
|
-
border-bottom: var(--admin-border-width) solid hsl(var(--admin-border));
|
|
519
|
+
padding: var(--admin-space-4);
|
|
520
|
+
border-bottom: var(--admin-border-width) solid hsl(var(--admin-border) / 0.6);
|
|
651
521
|
}
|
|
652
522
|
|
|
653
523
|
.rovela-admin-theme .admin-card-body {
|
|
654
|
-
padding: var(--admin-space-
|
|
524
|
+
padding: var(--admin-space-4);
|
|
655
525
|
}
|
|
656
526
|
|
|
657
527
|
.rovela-admin-theme .admin-card-footer {
|
|
658
|
-
padding: var(--admin-space-
|
|
659
|
-
border-top: var(--admin-border-width) solid hsl(var(--admin-border));
|
|
660
|
-
background: hsl(var(--admin-background-subtle) / 0.
|
|
528
|
+
padding: var(--admin-space-3) var(--admin-space-4);
|
|
529
|
+
border-top: var(--admin-border-width) solid hsl(var(--admin-border) / 0.6);
|
|
530
|
+
background: hsl(var(--admin-background-subtle) / 0.35);
|
|
661
531
|
}
|
|
662
532
|
|
|
663
533
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -667,7 +537,7 @@
|
|
|
667
537
|
.rovela-admin-theme .admin-input {
|
|
668
538
|
display: flex;
|
|
669
539
|
width: 100%;
|
|
670
|
-
height: 2.
|
|
540
|
+
height: 2.25rem; /* 36px — form-context control height */
|
|
671
541
|
padding: 0 var(--admin-space-3);
|
|
672
542
|
font-family: var(--admin-font-sans);
|
|
673
543
|
font-size: var(--admin-text-base);
|
|
@@ -786,13 +656,18 @@
|
|
|
786
656
|
BUTTON COMPONENTS
|
|
787
657
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
788
658
|
|
|
659
|
+
/* Buttons — the premium press model (2026-07 redesign): NO glows, NO upward
|
|
660
|
+
hover lift (both read as template flair). Feedback is a decisive shade
|
|
661
|
+
change on hover, a 0.5px downward press + darker shade on :active (the
|
|
662
|
+
button physically responds under the cursor), and a soft accent ring on
|
|
663
|
+
keyboard focus. One primary per view. */
|
|
789
664
|
.rovela-admin-theme .admin-btn {
|
|
790
665
|
display: inline-flex;
|
|
791
666
|
align-items: center;
|
|
792
667
|
justify-content: center;
|
|
793
668
|
gap: var(--admin-space-2);
|
|
794
|
-
height: 2.
|
|
795
|
-
padding: 0 var(--admin-space-
|
|
669
|
+
height: 2.25rem; /* 36px form-context (was 40) */
|
|
670
|
+
padding: 0 var(--admin-space-3-5);
|
|
796
671
|
font-family: var(--admin-font-sans);
|
|
797
672
|
font-size: var(--admin-text-base);
|
|
798
673
|
font-weight: var(--admin-font-medium);
|
|
@@ -810,73 +685,75 @@
|
|
|
810
685
|
cursor: not-allowed;
|
|
811
686
|
}
|
|
812
687
|
|
|
688
|
+
.rovela-admin-theme .admin-btn:active:not(:disabled) {
|
|
689
|
+
transform: translateY(0.5px);
|
|
690
|
+
}
|
|
691
|
+
|
|
813
692
|
.rovela-admin-theme .admin-btn:focus-visible {
|
|
814
|
-
outline:
|
|
815
|
-
|
|
693
|
+
outline: none;
|
|
694
|
+
box-shadow: 0 0 0 3px hsl(var(--admin-primary) / 0.25);
|
|
816
695
|
}
|
|
817
696
|
|
|
818
|
-
/* Primary Button
|
|
697
|
+
/* Primary Button */
|
|
819
698
|
.rovela-admin-theme .admin-btn-primary {
|
|
820
699
|
background: hsl(var(--admin-primary));
|
|
821
700
|
color: hsl(var(--admin-primary-foreground));
|
|
822
|
-
box-shadow:
|
|
701
|
+
box-shadow: var(--admin-shadow-xs);
|
|
823
702
|
}
|
|
824
703
|
|
|
825
704
|
.rovela-admin-theme .admin-btn-primary:hover:not(:disabled) {
|
|
826
705
|
background: hsl(var(--admin-primary-hover));
|
|
827
|
-
box-shadow: 0 0 20px hsl(var(--admin-primary) / 0.4), 0 4px 12px hsl(var(--admin-primary) / 0.25);
|
|
828
|
-
transform: translateY(-1px);
|
|
829
706
|
}
|
|
830
707
|
|
|
831
708
|
.rovela-admin-theme .admin-btn-primary:active:not(:disabled) {
|
|
832
|
-
background: hsl(var(--admin-primary-
|
|
833
|
-
box-shadow: 0 0 10px hsl(var(--admin-primary) / 0.3);
|
|
834
|
-
transform: translateY(0);
|
|
709
|
+
background: hsl(var(--admin-primary-active));
|
|
835
710
|
}
|
|
836
711
|
|
|
837
|
-
/* Secondary Button */
|
|
712
|
+
/* Secondary Button — white + hairline */
|
|
838
713
|
.rovela-admin-theme .admin-btn-secondary {
|
|
839
714
|
background: hsl(var(--admin-card));
|
|
840
715
|
color: hsl(var(--admin-foreground));
|
|
841
716
|
border-color: hsl(var(--admin-border));
|
|
717
|
+
box-shadow: var(--admin-shadow-xs);
|
|
842
718
|
}
|
|
843
719
|
|
|
844
720
|
.rovela-admin-theme .admin-btn-secondary:hover:not(:disabled) {
|
|
845
|
-
background: hsl(
|
|
721
|
+
background: hsl(36 30% 98%);
|
|
846
722
|
border-color: hsl(var(--admin-border-hover));
|
|
847
723
|
}
|
|
848
724
|
|
|
849
725
|
.rovela-admin-theme .admin-btn-secondary:active:not(:disabled) {
|
|
850
|
-
background: hsl(var(--admin-background-subtle));
|
|
851
|
-
box-shadow: var(--admin-shadow-inner);
|
|
726
|
+
background: hsl(var(--admin-background-subtle) / 0.6);
|
|
852
727
|
}
|
|
853
728
|
|
|
854
729
|
/* Ghost Button */
|
|
855
730
|
.rovela-admin-theme .admin-btn-ghost {
|
|
856
731
|
background: transparent;
|
|
857
|
-
color: hsl(var(--admin-foreground));
|
|
732
|
+
color: hsl(var(--admin-foreground-muted));
|
|
858
733
|
}
|
|
859
734
|
|
|
860
735
|
.rovela-admin-theme .admin-btn-ghost:hover:not(:disabled) {
|
|
861
|
-
background: hsl(var(--admin-
|
|
736
|
+
background: hsl(var(--admin-foreground) / 0.05);
|
|
737
|
+
color: hsl(var(--admin-foreground));
|
|
862
738
|
}
|
|
863
739
|
|
|
864
|
-
/* Destructive Button
|
|
740
|
+
/* Destructive Button — solid error surface */
|
|
865
741
|
.rovela-admin-theme .admin-btn-destructive {
|
|
866
742
|
background: hsl(var(--admin-error));
|
|
867
|
-
color:
|
|
868
|
-
box-shadow:
|
|
743
|
+
color: hsl(var(--admin-error-foreground));
|
|
744
|
+
box-shadow: var(--admin-shadow-xs);
|
|
869
745
|
}
|
|
870
746
|
|
|
871
747
|
.rovela-admin-theme .admin-btn-destructive:hover:not(:disabled) {
|
|
872
748
|
background: hsl(var(--admin-error-dark));
|
|
873
|
-
box-shadow: 0 0 20px hsl(var(--admin-error) / 0.4), 0 4px 12px hsl(var(--admin-error) / 0.25);
|
|
874
|
-
transform: translateY(-1px);
|
|
875
749
|
}
|
|
876
750
|
|
|
877
751
|
.rovela-admin-theme .admin-btn-destructive:active:not(:disabled) {
|
|
878
|
-
|
|
879
|
-
|
|
752
|
+
background: hsl(var(--admin-error-dark));
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
.rovela-admin-theme .admin-btn-destructive:focus-visible {
|
|
756
|
+
box-shadow: 0 0 0 3px hsl(var(--admin-error) / 0.3);
|
|
880
757
|
}
|
|
881
758
|
|
|
882
759
|
/* Button Sizes */
|
|
@@ -906,6 +783,9 @@
|
|
|
906
783
|
BADGE COMPONENTS
|
|
907
784
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
908
785
|
|
|
786
|
+
/* Badges — six tones, ONE recipe (tinted bg + darker fg), 6px radius (a
|
|
787
|
+
soft rectangle, not a pill — pills at 12px read as noise in dense tables),
|
|
788
|
+
past-tense ≤2-word labels. The same status is the same color everywhere. */
|
|
909
789
|
.rovela-admin-theme .admin-badge {
|
|
910
790
|
display: inline-flex;
|
|
911
791
|
align-items: center;
|
|
@@ -914,10 +794,15 @@
|
|
|
914
794
|
font-size: var(--admin-text-xs);
|
|
915
795
|
font-weight: var(--admin-font-medium);
|
|
916
796
|
line-height: var(--admin-leading-normal);
|
|
917
|
-
border-radius: var(--admin-radius-
|
|
797
|
+
border-radius: var(--admin-radius-sm);
|
|
918
798
|
white-space: nowrap;
|
|
919
799
|
}
|
|
920
800
|
|
|
801
|
+
.rovela-admin-theme .admin-badge-attention {
|
|
802
|
+
background: hsl(var(--admin-attention-light));
|
|
803
|
+
color: hsl(var(--admin-attention-dark));
|
|
804
|
+
}
|
|
805
|
+
|
|
921
806
|
.rovela-admin-theme .admin-badge-success {
|
|
922
807
|
background: hsl(var(--admin-success-light));
|
|
923
808
|
color: hsl(var(--admin-success-dark));
|
|
@@ -1042,28 +927,31 @@
|
|
|
1042
927
|
background: hsl(var(--admin-card));
|
|
1043
928
|
}
|
|
1044
929
|
|
|
930
|
+
/* Index-table anatomy (2026-07 redesign): 13px cells with tabular numerals,
|
|
931
|
+
~38px rows (8px vertical padding), 1px hairline separators — never zebra —
|
|
932
|
+
quiet row hover, sentence-case 12px header labels (uppercase shouting was
|
|
933
|
+
the old look; weight + color carry the hierarchy now). */
|
|
1045
934
|
.rovela-admin-theme .admin-table {
|
|
1046
935
|
width: 100%;
|
|
1047
936
|
border-collapse: collapse;
|
|
1048
937
|
font-size: var(--admin-text-base);
|
|
938
|
+
font-variant-numeric: tabular-nums;
|
|
1049
939
|
}
|
|
1050
940
|
|
|
1051
941
|
.rovela-admin-theme .admin-table th {
|
|
1052
|
-
padding: var(--admin-space-
|
|
942
|
+
padding: var(--admin-space-2-5) var(--admin-space-4);
|
|
1053
943
|
font-size: var(--admin-text-xs);
|
|
1054
944
|
font-weight: var(--admin-font-semibold);
|
|
1055
|
-
text-transform: uppercase;
|
|
1056
|
-
letter-spacing: var(--admin-tracking-wide);
|
|
1057
945
|
color: hsl(var(--admin-foreground-muted));
|
|
1058
946
|
background: transparent;
|
|
1059
947
|
text-align: left;
|
|
1060
|
-
border-bottom:
|
|
948
|
+
border-bottom: var(--admin-border-width) solid hsl(var(--admin-border));
|
|
1061
949
|
}
|
|
1062
950
|
|
|
1063
951
|
.rovela-admin-theme .admin-table td {
|
|
1064
|
-
padding: var(--admin-space-4);
|
|
952
|
+
padding: var(--admin-space-2) var(--admin-space-4);
|
|
1065
953
|
color: hsl(var(--admin-foreground));
|
|
1066
|
-
border-bottom: var(--admin-border-width) solid hsl(var(--admin-border));
|
|
954
|
+
border-bottom: var(--admin-border-width) solid hsl(var(--admin-border) / 0.6);
|
|
1067
955
|
vertical-align: middle;
|
|
1068
956
|
}
|
|
1069
957
|
|
|
@@ -1072,11 +960,11 @@
|
|
|
1072
960
|
}
|
|
1073
961
|
|
|
1074
962
|
.rovela-admin-theme .admin-table tbody tr {
|
|
1075
|
-
transition: var(--admin-
|
|
963
|
+
transition: background-color 100ms var(--admin-ease);
|
|
1076
964
|
}
|
|
1077
965
|
|
|
1078
966
|
.rovela-admin-theme .admin-table tbody tr:hover {
|
|
1079
|
-
background: hsl(
|
|
967
|
+
background: hsl(36 30% 97.5%);
|
|
1080
968
|
}
|
|
1081
969
|
|
|
1082
970
|
.rovela-admin-theme .admin-table-empty {
|
|
@@ -1089,13 +977,18 @@
|
|
|
1089
977
|
SIDEBAR COMPONENTS
|
|
1090
978
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
1091
979
|
|
|
980
|
+
/* Sidebar (2026-07 redesign): 240px light surface, 32px rows, 18px icons,
|
|
981
|
+
tinted-emerald active state (one of the few sanctioned accent uses),
|
|
982
|
+
uppercase 11px eyebrow group labels. Labels always visible — no icon rail
|
|
983
|
+
for a merchant audience. */
|
|
1092
984
|
.rovela-admin-theme .admin-sidebar {
|
|
1093
985
|
display: flex;
|
|
1094
986
|
flex-direction: column;
|
|
1095
|
-
width:
|
|
987
|
+
width: 15rem; /* 240px (was 256) */
|
|
1096
988
|
min-height: 100vh;
|
|
1097
989
|
background: hsl(var(--admin-sidebar));
|
|
1098
990
|
color: hsl(var(--admin-sidebar-foreground));
|
|
991
|
+
border-right: var(--admin-border-width) solid hsl(var(--admin-sidebar-border));
|
|
1099
992
|
flex-shrink: 0;
|
|
1100
993
|
}
|
|
1101
994
|
|
|
@@ -1190,28 +1083,27 @@
|
|
|
1190
1083
|
}
|
|
1191
1084
|
|
|
1192
1085
|
.rovela-admin-theme .admin-sidebar-section-title {
|
|
1193
|
-
/*
|
|
1194
|
-
|
|
1195
|
-
padding: var(--admin-space-1) var(--admin-space-
|
|
1196
|
-
padding-top: var(--admin-space-
|
|
1197
|
-
font-size: var(--admin-text-
|
|
1198
|
-
font-weight: var(--admin-font-
|
|
1199
|
-
text-transform:
|
|
1200
|
-
letter-spacing: var(--admin-tracking-
|
|
1201
|
-
color: hsl(var(--admin-sidebar-foreground-muted) / 0.
|
|
1086
|
+
/* Eyebrow group label — the platform's signature uppercase-tracked micro
|
|
1087
|
+
type. Encodes grouping structurally instead of extra whitespace. */
|
|
1088
|
+
padding: var(--admin-space-1) var(--admin-space-2-5);
|
|
1089
|
+
padding-top: var(--admin-space-3);
|
|
1090
|
+
font-size: var(--admin-text-2xs);
|
|
1091
|
+
font-weight: var(--admin-font-semibold);
|
|
1092
|
+
text-transform: uppercase;
|
|
1093
|
+
letter-spacing: var(--admin-tracking-wide);
|
|
1094
|
+
color: hsl(var(--admin-sidebar-foreground-muted) / 0.75);
|
|
1202
1095
|
}
|
|
1203
1096
|
|
|
1204
1097
|
.rovela-admin-theme .admin-sidebar-item {
|
|
1205
1098
|
display: flex;
|
|
1206
1099
|
align-items: center;
|
|
1207
|
-
gap: var(--admin-space-
|
|
1208
|
-
/*
|
|
1209
|
-
|
|
1210
|
-
padding 12px + leading) — well above the 32px admin standard. */
|
|
1211
|
-
padding: var(--admin-space-1-5) var(--admin-space-3);
|
|
1100
|
+
gap: var(--admin-space-2-5);
|
|
1101
|
+
/* 32px row: 13px/500 label + 18px icon + 7px vertical padding. */
|
|
1102
|
+
padding: 0.4375rem var(--admin-space-2-5);
|
|
1212
1103
|
font-size: var(--admin-text-sm);
|
|
1104
|
+
font-weight: var(--admin-font-medium);
|
|
1213
1105
|
color: hsl(var(--admin-sidebar-foreground-muted));
|
|
1214
|
-
border-radius: var(--admin-radius-
|
|
1106
|
+
border-radius: var(--admin-radius-sm);
|
|
1215
1107
|
transition: var(--admin-transition-colors);
|
|
1216
1108
|
cursor: pointer;
|
|
1217
1109
|
text-decoration: none;
|
|
@@ -1219,14 +1111,23 @@
|
|
|
1219
1111
|
}
|
|
1220
1112
|
|
|
1221
1113
|
.rovela-admin-theme .admin-sidebar-item:hover {
|
|
1222
|
-
background: hsl(var(--admin-
|
|
1114
|
+
background: hsl(var(--admin-foreground) / 0.04);
|
|
1223
1115
|
color: hsl(var(--admin-sidebar-foreground));
|
|
1224
1116
|
}
|
|
1225
1117
|
|
|
1118
|
+
.rovela-admin-theme .admin-sidebar-item:active {
|
|
1119
|
+
background: hsl(var(--admin-foreground) / 0.07);
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
.rovela-admin-theme .admin-sidebar-item:focus-visible {
|
|
1123
|
+
outline: none;
|
|
1124
|
+
box-shadow: inset 0 0 0 2px hsl(var(--admin-primary) / 0.35);
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1226
1127
|
.rovela-admin-theme .admin-sidebar-item.active {
|
|
1227
1128
|
background: hsl(var(--admin-sidebar-active));
|
|
1228
1129
|
color: hsl(var(--admin-sidebar-active-text));
|
|
1229
|
-
font-weight: var(--admin-font-
|
|
1130
|
+
font-weight: var(--admin-font-semibold);
|
|
1230
1131
|
}
|
|
1231
1132
|
|
|
1232
1133
|
.rovela-admin-theme .admin-sidebar-item.active .admin-sidebar-item-icon {
|
|
@@ -1234,16 +1135,16 @@
|
|
|
1234
1135
|
}
|
|
1235
1136
|
|
|
1236
1137
|
.rovela-admin-theme .admin-sidebar-item-icon {
|
|
1237
|
-
width: 1.
|
|
1238
|
-
height: 1.
|
|
1138
|
+
width: 1.125rem;
|
|
1139
|
+
height: 1.125rem;
|
|
1239
1140
|
flex-shrink: 0;
|
|
1240
1141
|
}
|
|
1241
1142
|
|
|
1242
1143
|
/* Sidebar item icon (svg) - ensure consistent sizing */
|
|
1243
1144
|
.rovela-admin-theme .admin-sidebar-item svg,
|
|
1244
1145
|
.rovela-admin-theme .admin-sidebar-item-svg {
|
|
1245
|
-
width: 1.
|
|
1246
|
-
height: 1.
|
|
1146
|
+
width: 1.125rem;
|
|
1147
|
+
height: 1.125rem;
|
|
1247
1148
|
flex-shrink: 0;
|
|
1248
1149
|
}
|
|
1249
1150
|
|
|
@@ -1271,18 +1172,24 @@
|
|
|
1271
1172
|
gap: var(--admin-space-1-5);
|
|
1272
1173
|
}
|
|
1273
1174
|
|
|
1175
|
+
/* Footer links behave like nav rows (hover surface, radius) — consistent
|
|
1176
|
+
interaction grammar top to bottom of the sidebar. */
|
|
1274
1177
|
.rovela-admin-theme .admin-sidebar-footer-link {
|
|
1275
1178
|
display: flex;
|
|
1276
1179
|
align-items: center;
|
|
1277
|
-
gap: var(--admin-space-2);
|
|
1180
|
+
gap: var(--admin-space-2-5);
|
|
1181
|
+
padding: 0.375rem var(--admin-space-2-5);
|
|
1278
1182
|
font-size: var(--admin-text-sm);
|
|
1279
|
-
|
|
1183
|
+
font-weight: var(--admin-font-medium);
|
|
1184
|
+
border-radius: var(--admin-radius-sm);
|
|
1185
|
+
color: hsl(var(--admin-sidebar-foreground-muted));
|
|
1280
1186
|
text-decoration: none;
|
|
1281
1187
|
transition: var(--admin-transition-colors);
|
|
1282
1188
|
}
|
|
1283
1189
|
|
|
1284
1190
|
.rovela-admin-theme .admin-sidebar-footer-link:hover {
|
|
1285
|
-
|
|
1191
|
+
background: hsl(var(--admin-foreground) / 0.04);
|
|
1192
|
+
color: hsl(var(--admin-sidebar-foreground));
|
|
1286
1193
|
}
|
|
1287
1194
|
|
|
1288
1195
|
/* Powered by Rovela link */
|
|
@@ -2017,10 +1924,13 @@
|
|
|
2017
1924
|
min-width: 0;
|
|
2018
1925
|
}
|
|
2019
1926
|
|
|
1927
|
+
/* Stat/KPI card — the calm band (2026-07 redesign): 11px uppercase label,
|
|
1928
|
+
20px tabular value, no gradient washes (functional surfaces stay flat),
|
|
1929
|
+
hover only hints when the card links somewhere. */
|
|
2020
1930
|
.rovela-admin-theme .admin-stat-card {
|
|
2021
1931
|
display: block;
|
|
2022
1932
|
position: relative;
|
|
2023
|
-
padding: var(--admin-space-
|
|
1933
|
+
padding: var(--admin-space-4);
|
|
2024
1934
|
background: hsl(var(--admin-card));
|
|
2025
1935
|
border: var(--admin-border-width) solid hsl(var(--admin-border));
|
|
2026
1936
|
border-radius: var(--admin-radius-lg);
|
|
@@ -2035,46 +1945,37 @@
|
|
|
2035
1945
|
border-color: hsl(var(--admin-border-hover));
|
|
2036
1946
|
}
|
|
2037
1947
|
|
|
2038
|
-
.rovela-admin-theme .admin-stat-card::before {
|
|
2039
|
-
content: '';
|
|
2040
|
-
position: absolute;
|
|
2041
|
-
inset: 0;
|
|
2042
|
-
background: linear-gradient(135deg, hsl(var(--admin-primary) / 0.03) 0%, transparent 60%);
|
|
2043
|
-
opacity: 0;
|
|
2044
|
-
transition: var(--admin-transition-opacity);
|
|
2045
|
-
pointer-events: none;
|
|
2046
|
-
}
|
|
2047
|
-
|
|
2048
|
-
.rovela-admin-theme .admin-stat-card:hover::before {
|
|
2049
|
-
opacity: 1;
|
|
2050
|
-
}
|
|
2051
|
-
|
|
2052
1948
|
.rovela-admin-theme .admin-stat-icon {
|
|
2053
1949
|
display: flex;
|
|
2054
1950
|
align-items: center;
|
|
2055
1951
|
justify-content: center;
|
|
2056
1952
|
flex-shrink: 0;
|
|
2057
|
-
width: 2.
|
|
2058
|
-
height: 2.
|
|
2059
|
-
background: hsl(var(--admin-primary
|
|
2060
|
-
color: hsl(var(--admin-
|
|
2061
|
-
border-radius: var(--admin-radius-
|
|
1953
|
+
width: 2.25rem;
|
|
1954
|
+
height: 2.25rem;
|
|
1955
|
+
background: hsl(var(--admin-primary) / 0.08);
|
|
1956
|
+
color: hsl(var(--admin-accent-deep));
|
|
1957
|
+
border-radius: var(--admin-radius-sm);
|
|
2062
1958
|
}
|
|
2063
1959
|
|
|
2064
1960
|
.rovela-admin-theme .admin-stat-icon svg {
|
|
2065
|
-
width: 1.
|
|
2066
|
-
height: 1.
|
|
1961
|
+
width: 1.125rem;
|
|
1962
|
+
height: 1.125rem;
|
|
2067
1963
|
}
|
|
2068
1964
|
|
|
2069
1965
|
.rovela-admin-theme .admin-stat-value {
|
|
2070
1966
|
font-size: var(--admin-text-2xl);
|
|
2071
|
-
font-weight: var(--admin-font-
|
|
1967
|
+
font-weight: var(--admin-font-semibold);
|
|
1968
|
+
letter-spacing: var(--admin-tracking-tight);
|
|
1969
|
+
font-variant-numeric: tabular-nums;
|
|
2072
1970
|
color: hsl(var(--admin-foreground));
|
|
2073
1971
|
line-height: 1.2;
|
|
2074
1972
|
}
|
|
2075
1973
|
|
|
2076
1974
|
.rovela-admin-theme .admin-stat-label {
|
|
2077
|
-
font-size: var(--admin-text-
|
|
1975
|
+
font-size: var(--admin-text-2xs);
|
|
1976
|
+
font-weight: var(--admin-font-semibold);
|
|
1977
|
+
text-transform: uppercase;
|
|
1978
|
+
letter-spacing: var(--admin-tracking-wide);
|
|
2078
1979
|
color: hsl(var(--admin-foreground-muted));
|
|
2079
1980
|
}
|
|
2080
1981
|
|
|
@@ -2273,21 +2174,11 @@
|
|
|
2273
2174
|
}
|
|
2274
2175
|
|
|
2275
2176
|
/* Active indicator bar for nav items */
|
|
2177
|
+
/* Left indicator bar RETIRED (2026-07 redesign): the tinted active surface
|
|
2178
|
+
carries the state on its own; bar + tint was double signaling. Rule kept
|
|
2179
|
+
(display:none) because AdminNav still renders the element. */
|
|
2276
2180
|
.rovela-admin-theme .admin-sidebar-indicator {
|
|
2277
|
-
|
|
2278
|
-
left: 0;
|
|
2279
|
-
top: 50%;
|
|
2280
|
-
transform: translateY(-50%);
|
|
2281
|
-
height: 1.5rem;
|
|
2282
|
-
width: 3px;
|
|
2283
|
-
border-radius: 0 var(--admin-radius-full) var(--admin-radius-full) 0;
|
|
2284
|
-
background: hsl(var(--admin-sidebar-active-text));
|
|
2285
|
-
opacity: 0;
|
|
2286
|
-
transition: opacity 0.2s var(--admin-ease-rovela);
|
|
2287
|
-
}
|
|
2288
|
-
|
|
2289
|
-
.rovela-admin-theme .admin-sidebar-item.active .admin-sidebar-indicator {
|
|
2290
|
-
opacity: 1;
|
|
2181
|
+
display: none;
|
|
2291
2182
|
}
|
|
2292
2183
|
|
|
2293
2184
|
/* View store link button */
|
|
@@ -2444,28 +2335,28 @@
|
|
|
2444
2335
|
|
|
2445
2336
|
/* Status-specific badge variants for orders */
|
|
2446
2337
|
.rovela-admin-theme .admin-badge-pending {
|
|
2447
|
-
background: hsl(var(--admin-warning)
|
|
2448
|
-
color: hsl(var(--admin-warning));
|
|
2338
|
+
background: hsl(var(--admin-warning-light));
|
|
2339
|
+
color: hsl(var(--admin-warning-dark));
|
|
2449
2340
|
}
|
|
2450
2341
|
|
|
2451
2342
|
.rovela-admin-theme .admin-badge-paid {
|
|
2452
|
-
background: hsl(var(--admin-success)
|
|
2453
|
-
color: hsl(var(--admin-success));
|
|
2343
|
+
background: hsl(var(--admin-success-light));
|
|
2344
|
+
color: hsl(var(--admin-success-dark));
|
|
2454
2345
|
}
|
|
2455
2346
|
|
|
2456
2347
|
.rovela-admin-theme .admin-badge-shipped {
|
|
2457
|
-
background: hsl(var(--admin-info)
|
|
2458
|
-
color: hsl(var(--admin-info));
|
|
2348
|
+
background: hsl(var(--admin-info-light));
|
|
2349
|
+
color: hsl(var(--admin-info-dark));
|
|
2459
2350
|
}
|
|
2460
2351
|
|
|
2461
2352
|
.rovela-admin-theme .admin-badge-delivered {
|
|
2462
|
-
background: hsl(var(--admin-
|
|
2463
|
-
color: hsl(var(--admin-
|
|
2353
|
+
background: hsl(var(--admin-success-light));
|
|
2354
|
+
color: hsl(var(--admin-success-dark));
|
|
2464
2355
|
}
|
|
2465
2356
|
|
|
2466
2357
|
.rovela-admin-theme .admin-badge-cancelled {
|
|
2467
|
-
background: hsl(var(--admin-error)
|
|
2468
|
-
color: hsl(var(--admin-error));
|
|
2358
|
+
background: hsl(var(--admin-error-light));
|
|
2359
|
+
color: hsl(var(--admin-error-dark));
|
|
2469
2360
|
}
|
|
2470
2361
|
|
|
2471
2362
|
.rovela-admin-theme .admin-badge-refunded {
|
|
@@ -2475,13 +2366,13 @@
|
|
|
2475
2366
|
|
|
2476
2367
|
/* Out of stock variant */
|
|
2477
2368
|
.rovela-admin-theme .admin-badge-out-of-stock {
|
|
2478
|
-
background: hsl(var(--admin-error)
|
|
2479
|
-
color: hsl(var(--admin-error));
|
|
2369
|
+
background: hsl(var(--admin-error-light));
|
|
2370
|
+
color: hsl(var(--admin-error-dark));
|
|
2480
2371
|
}
|
|
2481
2372
|
|
|
2482
2373
|
.rovela-admin-theme .admin-badge-low-stock {
|
|
2483
|
-
background: hsl(var(--admin-warning)
|
|
2484
|
-
color: hsl(var(--admin-warning));
|
|
2374
|
+
background: hsl(var(--admin-warning-light));
|
|
2375
|
+
color: hsl(var(--admin-warning-dark));
|
|
2485
2376
|
}
|
|
2486
2377
|
|
|
2487
2378
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -2502,14 +2393,45 @@
|
|
|
2502
2393
|
border-bottom: none;
|
|
2503
2394
|
}
|
|
2504
2395
|
|
|
2505
|
-
/*
|
|
2396
|
+
/* Row identifier link (order numbers etc.) — monospace INK, not accent
|
|
2397
|
+
(premium pass: accent scarcity — 15 emerald IDs per screen shouted). The
|
|
2398
|
+
accent appears only on hover, signaling the action without spraying color. */
|
|
2506
2399
|
.rovela-admin-theme .admin-table-row-link {
|
|
2507
|
-
|
|
2400
|
+
font-family: var(--admin-font-mono);
|
|
2401
|
+
font-size: var(--admin-text-xs);
|
|
2402
|
+
letter-spacing: -0.01em;
|
|
2403
|
+
color: hsl(var(--admin-foreground));
|
|
2508
2404
|
font-weight: var(--admin-font-medium);
|
|
2509
2405
|
text-decoration: none;
|
|
2406
|
+
background: none;
|
|
2407
|
+
border: none;
|
|
2408
|
+
padding: 0;
|
|
2409
|
+
cursor: pointer;
|
|
2510
2410
|
transition: var(--admin-transition-colors);
|
|
2511
2411
|
}
|
|
2512
2412
|
|
|
2413
|
+
.rovela-admin-theme .admin-table-row-link:hover {
|
|
2414
|
+
color: hsl(var(--admin-accent-deep));
|
|
2415
|
+
}
|
|
2416
|
+
|
|
2417
|
+
/* In-table selects go QUIET (premium pass): a full-bordered 36px control per
|
|
2418
|
+
row dominates a dense table. Ghost until hover — systemic, covers every
|
|
2419
|
+
table's row-level AdminSelect. */
|
|
2420
|
+
.rovela-admin-theme td .admin-select-trigger {
|
|
2421
|
+
height: 1.75rem;
|
|
2422
|
+
border-color: transparent;
|
|
2423
|
+
background: transparent;
|
|
2424
|
+
color: hsl(var(--admin-foreground-muted));
|
|
2425
|
+
font-size: var(--admin-text-xs);
|
|
2426
|
+
box-shadow: none;
|
|
2427
|
+
}
|
|
2428
|
+
|
|
2429
|
+
.rovela-admin-theme td .admin-select-trigger:hover {
|
|
2430
|
+
border-color: hsl(var(--admin-border));
|
|
2431
|
+
background: hsl(var(--admin-card));
|
|
2432
|
+
color: hsl(var(--admin-foreground));
|
|
2433
|
+
}
|
|
2434
|
+
|
|
2513
2435
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
2514
2436
|
SKELETON LOADERS
|
|
2515
2437
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
@@ -2583,17 +2505,18 @@
|
|
|
2583
2505
|
TABLE HEADER STYLES
|
|
2584
2506
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
2585
2507
|
|
|
2508
|
+
/* Duplicate of .admin-table th kept for the components that target
|
|
2509
|
+
.admin-table-header directly — values MUST stay in lockstep with the
|
|
2510
|
+
canonical table header above. */
|
|
2586
2511
|
.rovela-admin-theme .admin-table-header {
|
|
2587
2512
|
background: transparent;
|
|
2588
|
-
border-bottom:
|
|
2513
|
+
border-bottom: var(--admin-border-width) solid hsl(var(--admin-border));
|
|
2589
2514
|
}
|
|
2590
2515
|
|
|
2591
2516
|
.rovela-admin-theme .admin-table-header th {
|
|
2592
|
-
padding: var(--admin-space-
|
|
2517
|
+
padding: var(--admin-space-2-5) var(--admin-space-4);
|
|
2593
2518
|
font-size: var(--admin-text-xs);
|
|
2594
2519
|
font-weight: var(--admin-font-semibold);
|
|
2595
|
-
text-transform: uppercase;
|
|
2596
|
-
letter-spacing: var(--admin-tracking-wide);
|
|
2597
2520
|
color: hsl(var(--admin-foreground-muted));
|
|
2598
2521
|
text-align: left;
|
|
2599
2522
|
background: transparent;
|
|
@@ -2655,13 +2578,13 @@
|
|
|
2655
2578
|
}
|
|
2656
2579
|
|
|
2657
2580
|
.rovela-admin-theme .admin-badge-active {
|
|
2658
|
-
background: hsl(var(--admin-success)
|
|
2659
|
-
color: hsl(var(--admin-success));
|
|
2581
|
+
background: hsl(var(--admin-success-light));
|
|
2582
|
+
color: hsl(var(--admin-success-dark));
|
|
2660
2583
|
}
|
|
2661
2584
|
|
|
2662
2585
|
.rovela-admin-theme .admin-badge-archived {
|
|
2663
|
-
background: hsl(var(--admin-error)
|
|
2664
|
-
color: hsl(var(--admin-error));
|
|
2586
|
+
background: hsl(var(--admin-error-light));
|
|
2587
|
+
color: hsl(var(--admin-error-dark));
|
|
2665
2588
|
}
|
|
2666
2589
|
|
|
2667
2590
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -2669,13 +2592,13 @@
|
|
|
2669
2592
|
═══════════════════════════════════════════════════════════════════════════ */
|
|
2670
2593
|
|
|
2671
2594
|
.rovela-admin-theme .admin-badge-verified {
|
|
2672
|
-
background: hsl(var(--admin-success)
|
|
2673
|
-
color: hsl(var(--admin-success));
|
|
2595
|
+
background: hsl(var(--admin-success-light));
|
|
2596
|
+
color: hsl(var(--admin-success-dark));
|
|
2674
2597
|
}
|
|
2675
2598
|
|
|
2676
2599
|
.rovela-admin-theme .admin-badge-unverified {
|
|
2677
|
-
background: hsl(var(--admin-warning)
|
|
2678
|
-
color: hsl(var(--admin-warning));
|
|
2600
|
+
background: hsl(var(--admin-warning-light));
|
|
2601
|
+
color: hsl(var(--admin-warning-dark));
|
|
2679
2602
|
}
|
|
2680
2603
|
|
|
2681
2604
|
/* ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -3500,16 +3423,18 @@
|
|
|
3500
3423
|
cursor: not-allowed;
|
|
3501
3424
|
}
|
|
3502
3425
|
|
|
3426
|
+
/* Active chip: solid emerald (the ops-console + platform pill grammar) —
|
|
3427
|
+
unambiguous selected state, no squinting at outline tints. */
|
|
3503
3428
|
.rovela-admin-theme .admin-chip-active {
|
|
3504
3429
|
border-color: hsl(var(--admin-primary));
|
|
3505
|
-
color: hsl(var(--admin-primary));
|
|
3506
|
-
background: hsl(var(--admin-primary)
|
|
3430
|
+
color: hsl(var(--admin-primary-foreground));
|
|
3431
|
+
background: hsl(var(--admin-primary));
|
|
3507
3432
|
}
|
|
3508
3433
|
|
|
3509
3434
|
.rovela-admin-theme .admin-chip-active:hover:not(:disabled) {
|
|
3510
|
-
border-color: hsl(var(--admin-primary));
|
|
3511
|
-
background: hsl(var(--admin-primary)
|
|
3512
|
-
color: hsl(var(--admin-primary));
|
|
3435
|
+
border-color: hsl(var(--admin-primary-hover));
|
|
3436
|
+
background: hsl(var(--admin-primary-hover));
|
|
3437
|
+
color: hsl(var(--admin-primary-foreground));
|
|
3513
3438
|
}
|
|
3514
3439
|
|
|
3515
3440
|
/* Bulk action bar — replaces the filter row when one or more rows are
|
|
@@ -3658,15 +3583,17 @@
|
|
|
3658
3583
|
color: hsl(var(--admin-foreground-muted));
|
|
3659
3584
|
}
|
|
3660
3585
|
|
|
3661
|
-
/* Danger button
|
|
3586
|
+
/* Danger button — ALIAS of .admin-btn-destructive (it was a redundant near
|
|
3587
|
+
duplicate; values must stay in lockstep with the destructive button). */
|
|
3662
3588
|
.rovela-admin-theme .admin-btn-danger {
|
|
3663
3589
|
background: hsl(var(--admin-error));
|
|
3664
|
-
color: hsl(var(--admin-error-foreground
|
|
3665
|
-
border: 1px solid
|
|
3590
|
+
color: hsl(var(--admin-error-foreground));
|
|
3591
|
+
border: 1px solid transparent;
|
|
3592
|
+
box-shadow: var(--admin-shadow-xs);
|
|
3666
3593
|
}
|
|
3667
3594
|
|
|
3668
3595
|
.rovela-admin-theme .admin-btn-danger:hover:not(:disabled) {
|
|
3669
|
-
background: hsl(var(--admin-error)
|
|
3596
|
+
background: hsl(var(--admin-error-dark));
|
|
3670
3597
|
}
|
|
3671
3598
|
|
|
3672
3599
|
.rovela-admin-theme .admin-btn-danger:disabled {
|
|
@@ -4245,3 +4172,206 @@
|
|
|
4245
4172
|
.rovela-admin-theme .admin-datepicker-action.is-primary {
|
|
4246
4173
|
color: hsl(var(--admin-primary));
|
|
4247
4174
|
}
|
|
4175
|
+
|
|
4176
|
+
/* ═══════════════════════════════════════════════════════════════════════════
|
|
4177
|
+
PAGE HEADER BAND — the Rovela identity zone (2026-07 premium pass)
|
|
4178
|
+
|
|
4179
|
+
The platform's signature (/ops, /developers): an accent-washed gradient
|
|
4180
|
+
band with an uppercase eyebrow and the 20px title, hairline bottom. Full
|
|
4181
|
+
bleed against the sidebar via negative margins that cancel the content
|
|
4182
|
+
padding. Every admin page opens with this — it is what makes the admin
|
|
4183
|
+
read as Rovela at a glance.
|
|
4184
|
+
═══════════════════════════════════════════════════════════════════════════ */
|
|
4185
|
+
|
|
4186
|
+
.rovela-admin-theme .admin-page-header {
|
|
4187
|
+
display: flex;
|
|
4188
|
+
align-items: flex-end;
|
|
4189
|
+
justify-content: space-between;
|
|
4190
|
+
flex-wrap: wrap;
|
|
4191
|
+
gap: var(--admin-space-4);
|
|
4192
|
+
margin: calc(var(--admin-space-6) * -1) calc(var(--admin-space-6) * -1) var(--admin-space-6);
|
|
4193
|
+
padding: var(--admin-space-6) var(--admin-space-6) var(--admin-space-5);
|
|
4194
|
+
background: linear-gradient(to bottom, hsl(var(--admin-accent) / 0.055), transparent);
|
|
4195
|
+
border-bottom: var(--admin-border-width) solid hsl(var(--admin-border) / 0.7);
|
|
4196
|
+
}
|
|
4197
|
+
|
|
4198
|
+
.rovela-admin-theme .admin-page-header-eyebrow {
|
|
4199
|
+
font-size: var(--admin-text-2xs);
|
|
4200
|
+
font-weight: var(--admin-font-semibold);
|
|
4201
|
+
text-transform: uppercase;
|
|
4202
|
+
letter-spacing: 0.14em;
|
|
4203
|
+
color: hsl(var(--admin-accent-deep));
|
|
4204
|
+
margin-bottom: var(--admin-space-1);
|
|
4205
|
+
}
|
|
4206
|
+
|
|
4207
|
+
.rovela-admin-theme .admin-page-header-sub {
|
|
4208
|
+
font-size: var(--admin-text-xs);
|
|
4209
|
+
color: hsl(var(--admin-foreground-muted));
|
|
4210
|
+
margin-top: var(--admin-space-1);
|
|
4211
|
+
}
|
|
4212
|
+
|
|
4213
|
+
.rovela-admin-theme .admin-page-header-actions {
|
|
4214
|
+
display: flex;
|
|
4215
|
+
align-items: center;
|
|
4216
|
+
flex-wrap: wrap;
|
|
4217
|
+
gap: var(--admin-space-2);
|
|
4218
|
+
}
|
|
4219
|
+
|
|
4220
|
+
/* Narrow content column for settings/detail pages (tables stay full width). */
|
|
4221
|
+
.rovela-admin-theme .admin-content-narrow {
|
|
4222
|
+
max-width: 60rem;
|
|
4223
|
+
margin-left: auto;
|
|
4224
|
+
margin-right: auto;
|
|
4225
|
+
}
|
|
4226
|
+
|
|
4227
|
+
/* ── Delta chips — the KPI band's tinted pills (replaces colored plain text) */
|
|
4228
|
+
.rovela-admin-theme .admin-delta {
|
|
4229
|
+
display: inline-flex;
|
|
4230
|
+
align-items: center;
|
|
4231
|
+
gap: 2px;
|
|
4232
|
+
padding: 1px var(--admin-space-1-5);
|
|
4233
|
+
border-radius: var(--admin-radius-full);
|
|
4234
|
+
font-size: var(--admin-text-2xs);
|
|
4235
|
+
font-weight: var(--admin-font-semibold);
|
|
4236
|
+
font-variant-numeric: tabular-nums;
|
|
4237
|
+
line-height: 1.5;
|
|
4238
|
+
white-space: nowrap;
|
|
4239
|
+
}
|
|
4240
|
+
.rovela-admin-theme .admin-delta svg { width: 0.75rem; height: 0.75rem; }
|
|
4241
|
+
.rovela-admin-theme .admin-delta-good {
|
|
4242
|
+
background: hsl(var(--admin-success-light));
|
|
4243
|
+
color: hsl(var(--admin-success-dark));
|
|
4244
|
+
}
|
|
4245
|
+
.rovela-admin-theme .admin-delta-bad {
|
|
4246
|
+
background: hsl(var(--admin-error-light));
|
|
4247
|
+
color: hsl(var(--admin-error-dark));
|
|
4248
|
+
}
|
|
4249
|
+
.rovela-admin-theme .admin-delta-flat {
|
|
4250
|
+
background: hsl(var(--admin-background-subtle) / 0.7);
|
|
4251
|
+
color: hsl(var(--admin-foreground-muted));
|
|
4252
|
+
}
|
|
4253
|
+
|
|
4254
|
+
/* ── Segmented control — period pills (replaces the dropdown) */
|
|
4255
|
+
.rovela-admin-theme .admin-segmented {
|
|
4256
|
+
display: inline-flex;
|
|
4257
|
+
align-items: center;
|
|
4258
|
+
padding: 2px;
|
|
4259
|
+
background: hsl(var(--admin-card));
|
|
4260
|
+
border: var(--admin-border-width) solid hsl(var(--admin-border));
|
|
4261
|
+
border-radius: var(--admin-radius-full);
|
|
4262
|
+
}
|
|
4263
|
+
.rovela-admin-theme .admin-segmented-option {
|
|
4264
|
+
border: none;
|
|
4265
|
+
background: transparent;
|
|
4266
|
+
border-radius: var(--admin-radius-full);
|
|
4267
|
+
padding: var(--admin-space-1) var(--admin-space-3);
|
|
4268
|
+
font-family: var(--admin-font-sans);
|
|
4269
|
+
font-size: var(--admin-text-xs);
|
|
4270
|
+
font-weight: var(--admin-font-medium);
|
|
4271
|
+
color: hsl(var(--admin-foreground-muted));
|
|
4272
|
+
cursor: pointer;
|
|
4273
|
+
transition: var(--admin-transition-colors);
|
|
4274
|
+
}
|
|
4275
|
+
.rovela-admin-theme .admin-segmented-option:hover:not(:disabled):not(.active) {
|
|
4276
|
+
color: hsl(var(--admin-foreground));
|
|
4277
|
+
}
|
|
4278
|
+
.rovela-admin-theme .admin-segmented-option.active {
|
|
4279
|
+
background: hsl(var(--admin-primary));
|
|
4280
|
+
color: hsl(var(--admin-primary-foreground));
|
|
4281
|
+
}
|
|
4282
|
+
.rovela-admin-theme .admin-segmented-option:focus-visible {
|
|
4283
|
+
outline: none;
|
|
4284
|
+
box-shadow: 0 0 0 2px hsl(var(--admin-primary) / 0.3);
|
|
4285
|
+
}
|
|
4286
|
+
|
|
4287
|
+
/* ── Ghost select — quiet in-table controls (row status changers). The old
|
|
4288
|
+
full-bordered 36px selects dominated dense tables; this one whispers until
|
|
4289
|
+
hovered. */
|
|
4290
|
+
.rovela-admin-theme .admin-select-ghost {
|
|
4291
|
+
appearance: none;
|
|
4292
|
+
height: 1.75rem;
|
|
4293
|
+
padding: 0 var(--admin-space-6) 0 var(--admin-space-2);
|
|
4294
|
+
font-family: var(--admin-font-sans);
|
|
4295
|
+
font-size: var(--admin-text-xs);
|
|
4296
|
+
font-weight: var(--admin-font-medium);
|
|
4297
|
+
color: hsl(var(--admin-foreground-muted));
|
|
4298
|
+
background: transparent;
|
|
4299
|
+
border: var(--admin-border-width) solid transparent;
|
|
4300
|
+
border-radius: var(--admin-radius-sm);
|
|
4301
|
+
cursor: pointer;
|
|
4302
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%239AA3A0' 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");
|
|
4303
|
+
background-repeat: no-repeat;
|
|
4304
|
+
background-position: right var(--admin-space-1-5) center;
|
|
4305
|
+
transition: var(--admin-transition-colors);
|
|
4306
|
+
}
|
|
4307
|
+
.rovela-admin-theme .admin-select-ghost:hover {
|
|
4308
|
+
border-color: hsl(var(--admin-border));
|
|
4309
|
+
background-color: hsl(var(--admin-card));
|
|
4310
|
+
color: hsl(var(--admin-foreground));
|
|
4311
|
+
}
|
|
4312
|
+
.rovela-admin-theme .admin-select-ghost:focus {
|
|
4313
|
+
outline: none;
|
|
4314
|
+
border-color: hsl(var(--admin-primary));
|
|
4315
|
+
box-shadow: 0 0 0 3px hsl(var(--admin-primary) / 0.12);
|
|
4316
|
+
background-color: hsl(var(--admin-card));
|
|
4317
|
+
color: hsl(var(--admin-foreground));
|
|
4318
|
+
}
|
|
4319
|
+
|
|
4320
|
+
/* ── Monospace identifier cell (order numbers, SKUs) — ink, not accent.
|
|
4321
|
+
Accent scarcity: identifiers are data, not actions. */
|
|
4322
|
+
.rovela-admin-theme .admin-id {
|
|
4323
|
+
font-family: var(--admin-font-mono);
|
|
4324
|
+
font-size: var(--admin-text-xs);
|
|
4325
|
+
font-weight: var(--admin-font-medium);
|
|
4326
|
+
color: hsl(var(--admin-foreground));
|
|
4327
|
+
letter-spacing: -0.01em;
|
|
4328
|
+
}
|
|
4329
|
+
a.rovela-admin-theme .admin-id:hover,
|
|
4330
|
+
.rovela-admin-theme a .admin-id:hover,
|
|
4331
|
+
.rovela-admin-theme a.admin-id:hover {
|
|
4332
|
+
color: hsl(var(--admin-accent-deep));
|
|
4333
|
+
}
|
|
4334
|
+
|
|
4335
|
+
/* ── Numeric cell — right-aligned tabular money/count columns. */
|
|
4336
|
+
.rovela-admin-theme .admin-cell-num {
|
|
4337
|
+
text-align: right;
|
|
4338
|
+
font-variant-numeric: tabular-nums;
|
|
4339
|
+
}
|
|
4340
|
+
.rovela-admin-theme th.admin-cell-num {
|
|
4341
|
+
text-align: right;
|
|
4342
|
+
}
|
|
4343
|
+
|
|
4344
|
+
/* ── Sidebar utility links (Edit store / View store): quiet footer rows, not
|
|
4345
|
+
boxed buttons — one interaction grammar top to bottom of the sidebar. */
|
|
4346
|
+
.rovela-admin-theme .admin-sidebar-link {
|
|
4347
|
+
display: flex;
|
|
4348
|
+
align-items: center;
|
|
4349
|
+
justify-content: flex-start;
|
|
4350
|
+
gap: var(--admin-space-2-5);
|
|
4351
|
+
width: 100%;
|
|
4352
|
+
padding: 0.375rem var(--admin-space-2-5);
|
|
4353
|
+
font-size: var(--admin-text-sm);
|
|
4354
|
+
font-weight: var(--admin-font-medium);
|
|
4355
|
+
color: hsl(var(--admin-sidebar-foreground-muted));
|
|
4356
|
+
background: transparent;
|
|
4357
|
+
border: none;
|
|
4358
|
+
border-radius: var(--admin-radius-sm);
|
|
4359
|
+
text-decoration: none;
|
|
4360
|
+
cursor: pointer;
|
|
4361
|
+
transition: var(--admin-transition-colors);
|
|
4362
|
+
}
|
|
4363
|
+
.rovela-admin-theme .admin-sidebar-link:hover {
|
|
4364
|
+
background: hsl(var(--admin-foreground) / 0.04);
|
|
4365
|
+
color: hsl(var(--admin-sidebar-foreground));
|
|
4366
|
+
}
|
|
4367
|
+
.rovela-admin-theme .admin-sidebar-link svg {
|
|
4368
|
+
width: 1rem;
|
|
4369
|
+
height: 1rem;
|
|
4370
|
+
}
|
|
4371
|
+
|
|
4372
|
+
/* Decorative stat-card icons RETIRED (premium pass): an icon chip on every
|
|
4373
|
+
KPI is the canonical dashboard-template tell. Hidden at the system level so
|
|
4374
|
+
legacy markup (and CC-generated custom stat cards) lose them too. */
|
|
4375
|
+
.rovela-admin-theme .admin-stat-icon {
|
|
4376
|
+
display: none;
|
|
4377
|
+
}
|