@umituz/web-dashboard 4.7.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +62 -88
  2. package/package.json +6 -15
  3. package/src/{domain/config → config}/DashboardConfig.ts +1 -1
  4. package/src/config/index.ts +1 -0
  5. package/src/domains/analytics/components/AnalyticsCard.tsx +1 -6
  6. package/src/domains/analytics/components/AnalyticsChart.tsx +2 -14
  7. package/src/domains/analytics/components/AnalyticsLayout.tsx +3 -17
  8. package/src/domains/analytics/components/MetricCard.tsx +1 -6
  9. package/src/domains/analytics/utils/i18nKeys.ts +0 -9
  10. package/src/domains/auth/components/AuthLayout.tsx +1 -26
  11. package/src/domains/auth/components/ForgotPasswordForm.tsx +2 -14
  12. package/src/domains/auth/components/LoginForm.tsx +2 -15
  13. package/src/domains/auth/components/RegisterForm.tsx +3 -14
  14. package/src/domains/auth/components/ResetPasswordForm.tsx +3 -14
  15. package/src/domains/auth/components/shared/AuthErrorBanner.tsx +1 -11
  16. package/src/domains/auth/components/shared/EmailInput.tsx +2 -20
  17. package/src/domains/auth/components/shared/PasswordInput.tsx +3 -22
  18. package/src/domains/auth/components/shared/PasswordStrengthIndicator.tsx +1 -13
  19. package/src/domains/auth/components/shared/SocialLoginButtons.tsx +1 -15
  20. package/src/domains/auth/utils/i18nKeys.ts +0 -18
  21. package/src/{domain/config/CalendarConfig.ts → domains/calendar/config.ts} +1 -1
  22. package/src/domains/calendar/hooks/useCalendar.ts +1 -1
  23. package/src/domains/calendar/index.ts +1 -0
  24. package/src/domains/calendar/utils/index.ts +0 -6
  25. package/src/domains/charts/components.tsx +2 -2
  26. package/src/domains/layouts/components/BrandLogo.tsx +7 -22
  27. package/src/domains/layouts/components/DashboardHeader.tsx +2 -23
  28. package/src/domains/layouts/components/DashboardLayout.tsx +2 -39
  29. package/src/domains/layouts/components/DashboardSidebar.tsx +3 -21
  30. package/src/domains/permissions/PermissionsContext.tsx +1 -17
  31. package/src/domains/permissions/utils/i18nKeys.ts +0 -5
  32. package/src/domains/session/DemoLogin.tsx +2 -10
  33. package/src/domains/session/OrgSwitcher.tsx +2 -10
  34. package/src/domains/settings/components/AuditLogList.tsx +1 -10
  35. package/src/domains/settings/components/PermissionMatrixScreen.tsx +1 -8
  36. package/src/domains/settings/components/SettingsLayout.tsx +1 -21
  37. package/src/domains/settings/components/SettingsSection.tsx +1 -13
  38. package/src/domains/settings/components/UserManagementTable.tsx +1 -8
  39. package/src/domains/settings/utils/i18nKeys.ts +0 -6
  40. package/src/index.ts +2 -19
  41. package/src/styles/dashboard.contract.test.ts +42 -0
  42. package/src/styles/dashboard.css +483 -920
  43. package/src/domain/config/index.ts +0 -6
  44. package/src/i18n/I18nContext.tsx +0 -33
  45. package/src/i18n/defaultT.test.ts +0 -43
  46. package/src/i18n/defaultT.ts +0 -34
  47. package/src/i18n/index.ts +0 -7
  48. package/src/i18n/types.ts +0 -13
  49. package/src/primitives/Button.tsx +0 -24
  50. package/src/primitives/Checkbox.tsx +0 -17
  51. package/src/primitives/Input.tsx +0 -23
  52. package/src/primitives/Skeleton.tsx +0 -6
  53. package/src/primitives/cn.ts +0 -10
  54. package/src/primitives/index.ts +0 -23
  55. package/src/styles/tokens.contract.test.ts +0 -91
  56. package/src/styles/tokens.css +0 -116
@@ -1,27 +1,25 @@
1
- /**
2
- * @umituz/web-dashboard — component stylesheet (udb-* BEM)
3
- *
4
- * Camp-agnostic by construction:
5
- * - Every rule sets its own box-sizing / background / border explicitly,
6
- * so a host's Tailwind preflight (or any other reset) cannot leak in.
7
- * - Load order still matters with resets that use `*` selectors: import
8
- * this file AFTER your base layer.
9
- * - Colors, spacing and typography come exclusively from the `--u-*`
10
- * tokens (see `tokens.css`); override them for theming and dark mode.
11
- *
12
- * Sections:
13
- * 1. Scope & reset 5. Header/menus 9. Settings
14
- * 2. Layout helpers 6. Auth 10. Analytics
15
- * 3. App shell 7. Forms (auth) 11. Shared blocks
16
- * 4. Sidebar
17
- */
18
1
 
19
2
  @import "@umituz/web-design-system/styles.css";
20
- @import "./tokens.css";
21
-
22
- /* ============================================================
23
- * 1. Scope & reset
24
- * ============================================================ */
3
+ :root {
4
+ --udb-font-size-xs: 11px;
5
+ --udb-font-size-sm: 12px;
6
+ --udb-font-size-md: 14px;
7
+ --udb-font-size-lg: 16px;
8
+ --udb-font-size-xl: 20px;
9
+ --udb-font-size-2xl: 24px;
10
+ --udb-font-size-3xl: 30px;
11
+ --udb-font-size-4xl: 36px;
12
+ --udb-border-strong: #cbd5e1;
13
+ --udb-sidebar-width: 240px;
14
+ --udb-sidebar-width-collapsed: 64px;
15
+ --udb-header-height: 56px;
16
+ --udb-sidebar-bg: var(--color-card);
17
+ --udb-sidebar-text: var(--color-foreground);
18
+ --udb-sidebar-muted: var(--color-muted-foreground);
19
+ --udb-sidebar-border: var(--color-border);
20
+ --udb-sidebar-accent: var(--color-muted);
21
+ --udb-sidebar-accent-text: var(--color-foreground);
22
+ }
25
23
 
26
24
  .udb-root,
27
25
  .udb-root *,
@@ -29,17 +27,14 @@
29
27
  .udb-root *::after {
30
28
  box-sizing: border-box;
31
29
  }
32
-
33
30
  .udb-root {
34
- font-family: var(--u-font-sans);
35
- color: var(--u-color-text);
36
- background: var(--u-color-bg);
37
- font-size: var(--u-font-size-md);
31
+ font-family: var(--font-sans);
32
+ color: var(--color-foreground);
33
+ background: var(--color-background);
34
+ font-size: var(--udb-font-size-md);
38
35
  line-height: 1.5;
39
36
  -webkit-font-smoothing: antialiased;
40
37
  }
41
-
42
- /* Screen-reader-only helper (replaces utility-framework sr-only). */
43
38
  .udb-sr-only {
44
39
  position: absolute;
45
40
  width: 1px;
@@ -51,84 +46,64 @@
51
46
  white-space: nowrap;
52
47
  border: 0;
53
48
  }
54
-
55
- /* ============================================================
56
- * 2. Layout helpers
57
- * ============================================================ */
58
-
59
49
  .udb-stack {
60
50
  display: flex;
61
51
  flex-direction: column;
62
- gap: var(--u-space-5);
52
+ gap: 20px;
63
53
  }
64
-
65
54
  .udb-row {
66
55
  display: flex;
67
56
  align-items: center;
68
57
  }
69
-
70
58
  .udb-grid {
71
59
  display: grid;
72
- gap: var(--u-space-5);
60
+ gap: 20px;
73
61
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
74
62
  }
75
-
76
63
  .udb-card--sm {
77
- padding: var(--u-space-4);
64
+ padding: 16px;
78
65
  }
79
-
80
66
  .udb-card--lg {
81
- padding: var(--u-space-8);
67
+ padding: 40px;
82
68
  }
83
-
84
- /* ============================================================
85
- * 3. App shell
86
- * ============================================================ */
87
-
88
69
  .udb-layout {
89
70
  display: flex;
90
71
  height: 100vh;
91
72
  width: 100%;
92
73
  overflow: hidden;
93
74
  }
94
-
95
75
  .udb-layout__sidebar {
96
76
  display: none;
97
77
  flex-direction: column;
98
78
  flex-shrink: 0;
99
- width: var(--u-sidebar-width);
100
- border-right: 1px solid var(--u-sidebar-border);
101
- background: var(--u-sidebar-bg);
79
+ width: var(--udb-sidebar-width);
80
+ border-right: 1px solid var(--udb-sidebar-border);
81
+ background: var(--udb-sidebar-bg);
102
82
  transition: width 0.3s ease;
103
83
  }
104
-
105
84
  .udb-layout__sidebar--collapsed {
106
- width: var(--u-sidebar-width-collapsed);
85
+ width: var(--udb-sidebar-width-collapsed);
107
86
  }
108
-
109
87
  .udb-layout__mobile {
110
88
  position: fixed;
111
89
  inset: 0;
112
90
  z-index: 50;
113
91
  }
114
-
115
92
  .udb-layout__backdrop {
116
93
  position: absolute;
117
94
  inset: 0;
118
95
  background: rgba(15, 23, 42, 0.45);
119
96
  }
120
-
121
97
  .udb-layout__mobile-sidebar {
122
98
  position: absolute;
123
99
  left: 0;
124
100
  top: 0;
125
101
  height: 100%;
126
- width: var(--u-sidebar-width);
127
- border-right: 1px solid var(--u-sidebar-border);
128
- background: var(--u-sidebar-bg);
129
- box-shadow: var(--u-shadow-lg);
102
+ width: var(--udb-sidebar-width);
103
+ border-right: 1px solid var(--udb-sidebar-border);
104
+ background: var(--udb-sidebar-bg);
105
+ box-shadow: var(--shadow-lg);
130
106
  }
131
-
132
107
  .udb-layout__main {
133
108
  display: flex;
134
109
  flex: 1;
@@ -136,121 +111,98 @@
136
111
  overflow: hidden;
137
112
  min-width: 0;
138
113
  }
139
-
140
114
  .udb-layout__content {
141
115
  flex: 1;
142
116
  overflow-y: auto;
143
- padding: var(--u-space-4);
117
+ padding: 16px;
144
118
  }
145
-
146
- /* Full desktop behavior from 768px up. */
147
119
  @media (min-width: 768px) {
148
120
  .udb-layout__sidebar {
149
121
  display: flex;
150
122
  }
151
-
152
123
  .udb-layout__content {
153
- padding: var(--u-space-7);
124
+ padding: 32px;
154
125
  }
155
126
  }
156
-
157
- /* Route-transition skeleton page. */
158
127
  .udb-page-skeleton {
159
128
  margin: 0 auto;
160
129
  width: 100%;
161
130
  max-width: 1280px;
162
131
  display: flex;
163
132
  flex-direction: column;
164
- gap: var(--u-space-6);
133
+ gap: 24px;
165
134
  }
166
-
167
135
  .udb-skeleton--title {
168
136
  height: 32px;
169
137
  width: 33%;
170
- border-radius: var(--u-radius-lg);
138
+ border-radius: var(--radius-lg);
171
139
  }
172
-
173
140
  .udb-skeleton-grid {
174
141
  display: grid;
175
- gap: var(--u-space-4);
142
+ gap: 16px;
176
143
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
177
144
  }
178
-
179
145
  .udb-skeleton--card {
180
146
  height: 112px;
181
- border-radius: var(--u-radius-xl);
147
+ border-radius: var(--radius-xl);
182
148
  }
183
-
184
149
  .udb-skeleton--section {
185
150
  height: 256px;
186
- border-radius: var(--u-radius-xl);
151
+ border-radius: var(--radius-xl);
187
152
  }
188
-
189
- /* ============================================================
190
- * 4. Sidebar
191
- * ============================================================ */
192
-
193
153
  .udb-sidebar {
194
154
  display: flex;
195
155
  flex-direction: column;
196
156
  height: 100%;
197
157
  width: 100%;
198
- color: var(--u-sidebar-text);
158
+ color: var(--udb-sidebar-text);
199
159
  }
200
-
201
160
  .udb-sidebar__brand {
202
161
  display: flex;
203
- height: var(--u-header-height);
162
+ height: var(--udb-header-height);
204
163
  align-items: center;
205
- gap: var(--u-space-3);
206
- border-bottom: 1px solid var(--u-sidebar-border);
207
- padding: 0 var(--u-space-4);
164
+ gap: 12px;
165
+ border-bottom: 1px solid var(--udb-sidebar-border);
166
+ padding: 0 16px;
208
167
  }
209
-
210
168
  .udb-brand-logo {
211
169
  flex-shrink: 0;
212
170
  }
213
-
214
171
  .udb-sidebar__brand-text {
215
172
  display: flex;
216
173
  flex-direction: column;
217
174
  min-width: 0;
218
175
  }
219
-
220
176
  .udb-sidebar__brand-name {
221
- font-size: var(--u-font-size-2xl);
177
+ font-size: var(--udb-font-size-2xl);
222
178
  font-weight: 900;
223
179
  letter-spacing: -0.04em;
224
180
  line-height: 1;
225
- color: var(--u-sidebar-text);
181
+ color: var(--udb-sidebar-text);
226
182
  }
227
-
228
183
  .udb-sidebar__brand-tagline {
229
- margin-top: var(--u-space-2);
230
- margin-left: var(--u-space-1);
231
- font-size: var(--u-font-size-xs);
232
- font-weight: var(--u-font-weight-bold);
184
+ margin-top: 8px;
185
+ margin-left: 4px;
186
+ font-size: var(--udb-font-size-xs);
187
+ font-weight: var(--font-weight-bold);
233
188
  text-transform: lowercase;
234
189
  letter-spacing: -0.02em;
235
- color: var(--u-color-primary);
190
+ color: var(--color-primary);
236
191
  opacity: 0.75;
237
192
  user-select: none;
238
193
  }
239
-
240
194
  .udb-sidebar__create {
241
- padding: var(--u-space-4) var(--u-space-3);
242
- border-bottom: 1px solid var(--u-sidebar-border);
195
+ padding: 16px 12px;
196
+ border-bottom: 1px solid var(--udb-sidebar-border);
243
197
  }
244
-
245
198
  .udb-sidebar__create-btn {
246
199
  width: 100%;
247
200
  height: 44px;
248
201
  justify-content: flex-start;
249
- padding: 0 var(--u-space-4);
250
- border-radius: var(--u-radius-lg);
251
- box-shadow: var(--u-shadow-md);
202
+ padding: 0 16px;
203
+ border-radius: var(--radius-lg);
204
+ box-shadow: var(--shadow-md);
252
205
  }
253
-
254
206
  .udb-sidebar__create-btn--collapsed {
255
207
  width: 40px;
256
208
  height: 40px;
@@ -258,226 +210,188 @@
258
210
  margin: 0 auto;
259
211
  justify-content: center;
260
212
  }
261
-
262
213
  .udb-sidebar__create-icon {
263
214
  width: 16px;
264
215
  height: 16px;
265
216
  flex-shrink: 0;
266
217
  }
267
-
268
218
  .udb-sidebar__create-label {
269
- font-weight: var(--u-font-weight-bold);
219
+ font-weight: var(--font-weight-bold);
270
220
  letter-spacing: -0.02em;
271
221
  }
272
-
273
222
  .udb-sidebar__nav {
274
223
  flex: 1;
275
224
  overflow-y: auto;
276
- padding: var(--u-space-3) var(--u-space-2);
225
+ padding: 12px 8px;
277
226
  }
278
-
279
227
  .udb-sidebar__groups {
280
228
  display: flex;
281
229
  flex-direction: column;
282
- gap: var(--u-space-6);
230
+ gap: 24px;
283
231
  }
284
-
285
232
  .udb-sidebar__group {
286
233
  display: flex;
287
234
  flex-direction: column;
288
- gap: var(--u-space-1);
235
+ gap: 4px;
289
236
  }
290
-
291
237
  .udb-sidebar__group-toggle {
292
238
  display: flex;
293
239
  width: 100%;
294
240
  align-items: center;
295
241
  justify-content: space-between;
296
- margin-bottom: var(--u-space-1);
297
- padding: var(--u-space-2) var(--u-space-3);
242
+ margin-bottom: 4px;
243
+ padding: 8px 12px;
298
244
  border: none;
299
- border-radius: var(--u-radius-md);
245
+ border-radius: var(--radius-md);
300
246
  background: transparent;
301
247
  cursor: pointer;
302
248
  }
303
-
304
249
  .udb-sidebar__group-toggle:hover {
305
- background: var(--u-sidebar-accent);
250
+ background: var(--udb-sidebar-accent);
306
251
  }
307
-
308
252
  .udb-sidebar__group-title {
309
253
  font-size: 10px;
310
- font-weight: var(--u-font-weight-bold);
254
+ font-weight: var(--font-weight-bold);
311
255
  text-transform: uppercase;
312
256
  letter-spacing: 0.12em;
313
- color: var(--u-sidebar-muted);
257
+ color: var(--udb-sidebar-muted);
314
258
  opacity: 0.75;
315
259
  }
316
-
317
260
  .udb-sidebar__group-chevron {
318
261
  display: flex;
319
262
  flex-shrink: 0;
320
263
  }
321
-
322
264
  .udb-sidebar__chevron-icon {
323
265
  width: 14px;
324
266
  height: 14px;
325
- color: var(--u-sidebar-muted);
267
+ color: var(--udb-sidebar-muted);
326
268
  }
327
-
328
269
  .udb-sidebar__item {
329
270
  display: flex;
330
271
  align-items: center;
331
- gap: var(--u-space-3);
332
- padding: 10px var(--u-space-3);
333
- border-radius: var(--u-radius-md);
334
- font-size: var(--u-font-size-md);
335
- font-weight: var(--u-font-weight-medium);
336
- color: var(--u-sidebar-text);
272
+ gap: 12px;
273
+ padding: 10px 12px;
274
+ border-radius: var(--radius-md);
275
+ font-size: var(--udb-font-size-md);
276
+ font-weight: var(--font-weight-medium);
277
+ color: var(--udb-sidebar-text);
337
278
  opacity: 0.75;
338
279
  text-decoration: none;
339
280
  transition: background-color 0.2s ease, color 0.2s ease;
340
281
  }
341
-
342
282
  .udb-sidebar__item:hover {
343
- background: var(--u-sidebar-accent);
344
- color: var(--u-sidebar-accent-text);
283
+ background: var(--udb-sidebar-accent);
284
+ color: var(--udb-sidebar-accent-text);
345
285
  opacity: 1;
346
286
  }
347
-
348
287
  .udb-sidebar__item--active {
349
- background: var(--u-sidebar-accent);
350
- color: var(--u-sidebar-accent-text);
288
+ background: var(--udb-sidebar-accent);
289
+ color: var(--udb-sidebar-accent-text);
351
290
  opacity: 1;
352
- box-shadow: var(--u-shadow-sm);
291
+ box-shadow: var(--shadow-sm);
353
292
  }
354
-
355
293
  .udb-sidebar__item-icon {
356
294
  width: 16px;
357
295
  height: 16px;
358
296
  flex-shrink: 0;
359
297
  }
360
-
361
298
  .udb-sidebar--collapsed .udb-sidebar__item {
362
299
  justify-content: center;
363
300
  }
364
-
365
301
  .udb-sidebar--collapsed .udb-sidebar__brand,
366
302
  .udb-sidebar--collapsed .udb-sidebar__create {
367
303
  justify-content: center;
368
304
  padding-left: 0;
369
305
  padding-right: 0;
370
306
  }
371
-
372
307
  .udb-sidebar__footer {
373
- border-top: 1px solid var(--u-sidebar-border);
374
- padding: var(--u-space-3);
308
+ border-top: 1px solid var(--udb-sidebar-border);
309
+ padding: 12px;
375
310
  display: flex;
376
311
  align-items: center;
377
312
  justify-content: space-between;
378
313
  }
379
-
380
314
  .udb-sidebar--collapsed .udb-sidebar__footer {
381
315
  justify-content: center;
382
316
  }
383
-
384
317
  .udb-sidebar__footer-label {
385
- padding: 0 var(--u-space-2);
318
+ padding: 0 8px;
386
319
  font-size: 10px;
387
- font-weight: var(--u-font-weight-bold);
320
+ font-weight: var(--font-weight-bold);
388
321
  text-transform: uppercase;
389
322
  letter-spacing: 0.1em;
390
- color: var(--u-sidebar-muted);
323
+ color: var(--udb-sidebar-muted);
391
324
  }
392
-
393
325
  .udb-sidebar__footer-btn {
394
- color: var(--u-sidebar-text);
326
+ color: var(--udb-sidebar-text);
395
327
  }
396
-
397
328
  .udb-sidebar__footer-icon {
398
329
  width: 16px;
399
330
  height: 16px;
400
331
  }
401
-
402
- /* ============================================================
403
- * 5. Header / menus / notifications / profile
404
- * ============================================================ */
405
-
406
332
  .udb-header {
407
333
  display: flex;
408
- height: var(--u-header-height);
334
+ height: var(--udb-header-height);
409
335
  align-items: center;
410
336
  justify-content: space-between;
411
337
  flex-shrink: 0;
412
- gap: var(--u-space-3);
413
- border-bottom: 1px solid var(--u-color-border);
414
- background: var(--u-color-surface);
415
- padding: 0 var(--u-space-4);
338
+ gap: 12px;
339
+ border-bottom: 1px solid var(--color-border);
340
+ background: var(--color-card);
341
+ padding: 0 16px;
416
342
  z-index: 30;
417
343
  }
418
-
419
344
  .udb-header__lead {
420
345
  display: flex;
421
346
  align-items: center;
422
- gap: var(--u-space-3);
347
+ gap: 12px;
423
348
  min-width: 0;
424
349
  }
425
-
426
350
  .udb-header__title {
427
351
  margin: 0;
428
- font-size: var(--u-font-size-md);
352
+ font-size: var(--udb-font-size-md);
429
353
  font-weight: 600;
430
- color: var(--u-color-text);
354
+ color: var(--color-foreground);
431
355
  overflow: hidden;
432
356
  text-overflow: ellipsis;
433
357
  white-space: nowrap;
434
358
  }
435
-
436
359
  .udb-header__mobile-toggle {
437
360
  display: inline-flex;
438
361
  }
439
-
440
362
  .udb-header__desktop-toggle {
441
363
  display: none;
442
364
  }
443
-
444
365
  @media (min-width: 768px) {
445
366
  .udb-header__mobile-toggle {
446
367
  display: none;
447
368
  }
448
-
449
369
  .udb-header__desktop-toggle {
450
370
  display: inline-flex;
451
371
  }
452
372
  }
453
-
454
373
  .udb-header__actions {
455
374
  display: flex;
456
375
  align-items: center;
457
- gap: var(--u-space-2);
376
+ gap: 8px;
458
377
  }
459
-
460
378
  .udb-header__icon-btn {
461
379
  height: 36px;
462
380
  width: 36px;
463
- color: var(--u-color-muted);
381
+ color: var(--color-muted-foreground);
464
382
  }
465
-
466
383
  .udb-header__icon {
467
384
  width: 16px;
468
385
  height: 16px;
469
386
  }
470
-
471
387
  .udb-header__toggle-icon {
472
388
  width: 20px;
473
389
  height: 20px;
474
390
  }
475
-
476
391
  .udb-header__anchor {
477
392
  position: relative;
478
393
  display: inline-flex;
479
394
  }
480
-
481
395
  .udb-header__unread {
482
396
  position: absolute;
483
397
  top: 6px;
@@ -486,25 +400,22 @@
486
400
  width: 8px;
487
401
  height: 8px;
488
402
  }
489
-
490
403
  .udb-header__unread-core {
491
404
  position: relative;
492
405
  display: inline-flex;
493
406
  width: 8px;
494
407
  height: 8px;
495
408
  border-radius: 50%;
496
- background: var(--u-color-danger);
409
+ background: var(--color-destructive);
497
410
  }
498
-
499
411
  .udb-header__unread-core::before {
500
412
  content: "";
501
413
  position: absolute;
502
414
  inset: 0;
503
415
  border-radius: 50%;
504
- background: var(--u-color-danger);
416
+ background: var(--color-destructive);
505
417
  animation: udb-ping 1.2s cubic-bezier(0, 0, 0.2, 1) infinite;
506
418
  }
507
-
508
419
  @keyframes udb-ping {
509
420
  0% {
510
421
  transform: scale(1);
@@ -516,36 +427,30 @@
516
427
  opacity: 0;
517
428
  }
518
429
  }
519
-
520
430
  .udb-header__divider {
521
431
  width: 1px;
522
432
  height: 24px;
523
- margin: 0 var(--u-space-1);
524
- background: var(--u-color-border);
433
+ margin: 0 4px;
434
+ background: var(--color-border);
525
435
  }
526
-
527
- /* Click-outside layer for popover menus. */
528
436
  .udb-overlay {
529
437
  position: fixed;
530
438
  inset: 0;
531
439
  z-index: 40;
532
440
  }
533
-
534
- /* Generic popover menu. */
535
441
  .udb-menu {
536
442
  position: absolute;
537
443
  top: 48px;
538
444
  right: 0;
539
445
  min-width: 224px;
540
- background: var(--u-color-surface);
541
- border: 1px solid var(--u-color-border);
542
- border-radius: var(--u-radius-lg);
543
- box-shadow: var(--u-shadow-lg);
446
+ background: var(--color-card);
447
+ border: 1px solid var(--color-border);
448
+ border-radius: var(--radius-lg);
449
+ box-shadow: var(--shadow-lg);
544
450
  overflow: hidden;
545
451
  z-index: 50;
546
452
  animation: udb-pop 0.18s ease;
547
453
  }
548
-
549
454
  @keyframes udb-pop {
550
455
  from {
551
456
  opacity: 0;
@@ -556,204 +461,172 @@
556
461
  transform: none;
557
462
  }
558
463
  }
559
-
560
464
  .udb-menu__header {
561
465
  display: flex;
562
466
  align-items: center;
563
467
  justify-content: space-between;
564
- padding: var(--u-space-3) var(--u-space-4);
565
- border-bottom: 1px solid var(--u-color-border);
566
- background: var(--u-color-surface-muted);
468
+ padding: 12px 16px;
469
+ border-bottom: 1px solid var(--color-border);
470
+ background: var(--color-muted);
567
471
  }
568
-
569
472
  .udb-menu__heading {
570
473
  margin: 0;
571
- font-size: var(--u-font-size-sm);
572
- font-weight: var(--u-font-weight-bold);
474
+ font-size: var(--udb-font-size-sm);
475
+ font-weight: var(--font-weight-bold);
573
476
  text-transform: uppercase;
574
477
  letter-spacing: 0.08em;
575
- color: var(--u-color-text);
478
+ color: var(--color-foreground);
576
479
  }
577
-
578
480
  .udb-menu__action {
579
481
  border: none;
580
482
  background: transparent;
581
483
  padding: 0;
582
484
  font-size: 10px;
583
- font-weight: var(--u-font-weight-bold);
485
+ font-weight: var(--font-weight-bold);
584
486
  text-transform: uppercase;
585
- color: var(--u-color-primary);
487
+ color: var(--color-primary);
586
488
  cursor: pointer;
587
489
  }
588
-
589
490
  .udb-menu__action:hover {
590
491
  text-decoration: underline;
591
492
  }
592
-
593
493
  .udb-menu__item {
594
494
  display: flex;
595
495
  width: 100%;
596
496
  align-items: center;
597
497
  gap: 10px;
598
- padding: var(--u-space-2) var(--u-space-3);
498
+ padding: 8px 12px;
599
499
  border: none;
600
- border-radius: var(--u-radius-md);
500
+ border-radius: var(--radius-md);
601
501
  background: transparent;
602
502
  font-family: inherit;
603
- font-size: var(--u-font-size-md);
604
- color: var(--u-color-text);
503
+ font-size: var(--udb-font-size-md);
504
+ color: var(--color-foreground);
605
505
  cursor: pointer;
606
506
  text-align: left;
607
507
  }
608
-
609
508
  .udb-menu__item:hover {
610
- background: var(--u-color-surface-muted);
509
+ background: var(--color-muted);
611
510
  }
612
-
613
511
  .udb-menu__item--danger {
614
- color: var(--u-color-danger);
615
- font-weight: var(--u-font-weight-medium);
512
+ color: var(--color-destructive);
513
+ font-weight: var(--font-weight-medium);
616
514
  }
617
-
618
515
  .udb-menu__item--danger:hover {
619
- background: var(--u-color-danger-soft);
516
+ background: var(--color-destructive-soft, color-mix(in srgb, var(--color-destructive, #dc2626) 10%, transparent));
620
517
  }
621
-
622
518
  .udb-menu__item-icon {
623
519
  width: 16px;
624
520
  height: 16px;
625
- color: var(--u-color-muted);
521
+ color: var(--color-muted-foreground);
626
522
  flex-shrink: 0;
627
523
  }
628
-
629
524
  .udb-menu__item--danger .udb-menu__item-icon {
630
- color: var(--u-color-danger);
525
+ color: var(--color-destructive);
631
526
  }
632
-
633
- /* Notifications popover. */
634
527
  .udb-notif {
635
528
  width: 320px;
636
529
  }
637
-
638
530
  .udb-notif__list {
639
531
  max-height: 400px;
640
532
  overflow-y: auto;
641
533
  }
642
-
643
534
  .udb-notif__item {
644
535
  display: flex;
645
536
  align-items: flex-start;
646
- gap: var(--u-space-3);
647
- padding: var(--u-space-3) var(--u-space-4);
648
- border-bottom: 1px solid var(--u-color-border);
537
+ gap: 12px;
538
+ padding: 12px 16px;
539
+ border-bottom: 1px solid var(--color-border);
649
540
  }
650
-
651
541
  .udb-notif__item:last-child {
652
542
  border-bottom: none;
653
543
  }
654
-
655
544
  .udb-notif__item:hover {
656
- background: var(--u-color-surface-muted);
545
+ background: var(--color-muted);
657
546
  }
658
-
659
547
  .udb-notif__item--unread {
660
- background: var(--u-color-primary-soft);
548
+ background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary, #2563eb) 10%, transparent));
661
549
  }
662
-
663
550
  .udb-notif__body {
664
551
  flex: 1;
665
552
  min-width: 0;
666
553
  }
667
-
668
554
  .udb-notif__text {
669
555
  margin: 0;
670
- font-size: var(--u-font-size-md);
556
+ font-size: var(--udb-font-size-md);
671
557
  line-height: 1.35;
672
- color: var(--u-color-text);
558
+ color: var(--color-foreground);
673
559
  }
674
-
675
560
  .udb-notif__meta {
676
561
  display: flex;
677
562
  align-items: center;
678
- gap: var(--u-space-1);
679
- margin: var(--u-space-1) 0 0;
563
+ gap: 4px;
564
+ margin: 4px 0 0;
680
565
  font-size: 10px;
681
- color: var(--u-color-muted);
566
+ color: var(--color-muted-foreground);
682
567
  }
683
-
684
568
  .udb-notif__dot {
685
569
  display: inline-block;
686
570
  width: 4px;
687
571
  height: 4px;
688
572
  border-radius: 50%;
689
- background: var(--u-color-muted);
573
+ background: var(--color-muted-foreground);
690
574
  opacity: 0.5;
691
575
  }
692
-
693
576
  .udb-notif__dismiss {
694
577
  display: flex;
695
578
  flex-shrink: 0;
696
579
  border: none;
697
580
  padding: 0;
698
581
  background: transparent;
699
- color: var(--u-color-muted);
582
+ color: var(--color-muted-foreground);
700
583
  cursor: pointer;
701
584
  }
702
-
703
585
  .udb-notif__dismiss:hover {
704
- color: var(--u-color-text);
586
+ color: var(--color-foreground);
705
587
  }
706
-
707
588
  .udb-notif__dismiss-icon {
708
589
  width: 12px;
709
590
  height: 12px;
710
591
  }
711
-
712
592
  .udb-notif__empty {
713
- padding: var(--u-space-8) var(--u-space-4);
593
+ padding: 40px 16px;
714
594
  text-align: center;
715
595
  }
716
-
717
596
  .udb-notif__empty-icon {
718
597
  display: flex;
719
598
  width: 40px;
720
599
  height: 40px;
721
600
  align-items: center;
722
601
  justify-content: center;
723
- margin: 0 auto var(--u-space-3);
602
+ margin: 0 auto 12px;
724
603
  border-radius: 50%;
725
- background: var(--u-color-surface-muted);
604
+ background: var(--color-muted);
726
605
  }
727
-
728
606
  .udb-notif__empty-bell {
729
607
  width: 20px;
730
608
  height: 20px;
731
- color: var(--u-color-muted);
609
+ color: var(--color-muted-foreground);
732
610
  opacity: 0.6;
733
611
  }
734
-
735
612
  .udb-notif__empty-text {
736
613
  margin: 0;
737
- font-size: var(--u-font-size-md);
738
- color: var(--u-color-muted);
614
+ font-size: var(--udb-font-size-md);
615
+ color: var(--color-muted-foreground);
739
616
  }
740
-
741
- /* Profile trigger & menu. */
742
617
  .udb-profile-btn {
743
618
  display: flex;
744
619
  align-items: center;
745
- gap: var(--u-space-2);
746
- padding: var(--u-space-1);
620
+ gap: 8px;
621
+ padding: 4px;
747
622
  border: none;
748
- border-radius: var(--u-radius-pill);
623
+ border-radius: 9999px;
749
624
  background: transparent;
750
625
  cursor: pointer;
751
626
  }
752
-
753
627
  .udb-profile-btn:hover {
754
- background: var(--u-color-surface-muted);
628
+ background: var(--color-muted);
755
629
  }
756
-
757
630
  .udb-avatar {
758
631
  display: flex;
759
632
  width: 32px;
@@ -761,679 +634,552 @@
761
634
  align-items: center;
762
635
  justify-content: center;
763
636
  border-radius: 50%;
764
- border: 1px solid var(--u-color-primary);
765
- background: var(--u-color-primary-soft);
766
- color: var(--u-color-primary);
637
+ border: 1px solid var(--color-primary);
638
+ background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary, #2563eb) 10%, transparent));
639
+ color: var(--color-primary);
767
640
  font-size: 10px;
768
- font-weight: var(--u-font-weight-bold);
641
+ font-weight: var(--font-weight-bold);
769
642
  overflow: hidden;
770
643
  }
771
-
772
644
  .udb-avatar__img {
773
645
  width: 100%;
774
646
  height: 100%;
775
647
  object-fit: cover;
776
648
  display: block;
777
649
  }
778
-
779
650
  .udb-profile-btn__chevron {
780
651
  width: 16px;
781
652
  height: 16px;
782
- color: var(--u-color-muted);
653
+ color: var(--color-muted-foreground);
783
654
  transition: transform 0.2s ease;
784
655
  }
785
-
786
656
  .udb-profile-btn__chevron--open {
787
657
  transform: rotate(180deg);
788
658
  }
789
-
790
659
  .udb-profile-menu {
791
660
  width: 224px;
792
- padding: var(--u-space-2);
661
+ padding: 8px;
793
662
  }
794
-
795
663
  .udb-profile-menu__id {
796
- padding: var(--u-space-2) var(--u-space-3);
797
- border-bottom: 1px solid var(--u-color-border);
798
- margin-bottom: var(--u-space-1);
664
+ padding: 8px 12px;
665
+ border-bottom: 1px solid var(--color-border);
666
+ margin-bottom: 4px;
799
667
  }
800
-
801
668
  .udb-profile-menu__name {
802
669
  margin: 0;
803
- font-size: var(--u-font-size-md);
804
- font-weight: var(--u-font-weight-bold);
805
- color: var(--u-color-text);
670
+ font-size: var(--udb-font-size-md);
671
+ font-weight: var(--font-weight-bold);
672
+ color: var(--color-foreground);
806
673
  }
807
-
808
674
  .udb-profile-menu__email {
809
675
  margin: 0;
810
- font-size: var(--u-font-size-sm);
811
- color: var(--u-color-muted);
676
+ font-size: var(--udb-font-size-sm);
677
+ color: var(--color-muted-foreground);
812
678
  overflow: hidden;
813
679
  text-overflow: ellipsis;
814
680
  white-space: nowrap;
815
681
  }
816
-
817
682
  .udb-profile-menu__items {
818
683
  display: flex;
819
684
  flex-direction: column;
820
685
  }
821
-
822
686
  .udb-profile-menu__separator {
823
687
  height: 1px;
824
- margin: var(--u-space-2) 0;
825
- background: var(--u-color-border);
688
+ margin: 8px 0;
689
+ background: var(--color-border);
826
690
  }
827
-
828
- /* ============================================================
829
- * 6. Auth pages
830
- * ============================================================ */
831
-
832
691
  .udb-auth {
833
692
  display: flex;
834
693
  flex-direction: column;
835
694
  min-height: 100dvh;
836
- background: var(--u-color-bg);
695
+ background: var(--color-background);
837
696
  }
838
-
839
697
  .udb-auth__header {
840
698
  display: flex;
841
699
  align-items: center;
842
700
  justify-content: space-between;
843
- gap: var(--u-space-3);
844
- padding: var(--u-space-4) var(--u-space-6);
701
+ gap: 12px;
702
+ padding: 16px 24px;
845
703
  }
846
-
847
704
  .udb-auth__brand {
848
705
  display: flex;
849
706
  align-items: center;
850
- gap: var(--u-space-2);
707
+ gap: 8px;
851
708
  }
852
-
853
709
  .udb-auth__brand-name {
854
- font-size: var(--u-font-size-lg);
855
- font-weight: var(--u-font-weight-bold);
710
+ font-size: var(--udb-font-size-lg);
711
+ font-weight: var(--font-weight-bold);
856
712
  letter-spacing: -0.02em;
857
- color: var(--u-color-text);
713
+ color: var(--color-foreground);
858
714
  }
859
-
860
715
  .udb-auth__home-link {
861
- font-size: var(--u-font-size-md);
862
- color: var(--u-color-muted);
716
+ font-size: var(--udb-font-size-md);
717
+ color: var(--color-muted-foreground);
863
718
  text-decoration: none;
864
719
  }
865
-
866
720
  .udb-auth__home-link:hover {
867
- color: var(--u-color-text);
721
+ color: var(--color-foreground);
868
722
  text-decoration: underline;
869
723
  }
870
-
871
724
  .udb-auth__main {
872
725
  display: flex;
873
726
  flex: 1;
874
727
  align-items: center;
875
728
  justify-content: center;
876
- padding: var(--u-space-6) var(--u-space-4);
729
+ padding: 24px 16px;
877
730
  }
878
-
879
731
  .udb-auth__column {
880
732
  display: flex;
881
733
  flex-direction: column;
882
734
  width: 100%;
883
735
  max-width: 420px;
884
736
  }
885
-
886
737
  .udb-auth__card {
887
- background: var(--u-color-surface);
888
- border: 1px solid var(--u-color-border);
889
- border-radius: var(--u-radius-xl);
890
- box-shadow: var(--u-shadow-lg);
891
- padding: var(--u-space-8) var(--u-space-7);
738
+ background: var(--color-card);
739
+ border: 1px solid var(--color-border);
740
+ border-radius: var(--radius-xl);
741
+ box-shadow: var(--shadow-lg);
742
+ padding: 40px 32px;
892
743
  }
893
-
894
744
  .udb-auth__tagline {
895
- margin: 0 0 var(--u-space-5);
745
+ margin: 0 0 20px;
896
746
  text-align: center;
897
- font-size: var(--u-font-size-xs);
898
- font-weight: var(--u-font-weight-bold);
747
+ font-size: var(--udb-font-size-xs);
748
+ font-weight: var(--font-weight-bold);
899
749
  text-transform: uppercase;
900
750
  letter-spacing: 0.1em;
901
- color: var(--u-color-primary);
751
+ color: var(--color-primary);
902
752
  }
903
-
904
753
  .udb-auth__social {
905
- margin-top: var(--u-space-5);
754
+ margin-top: 20px;
906
755
  }
907
-
908
756
  .udb-auth__footer {
909
- padding: var(--u-space-4) var(--u-space-6);
757
+ padding: 16px 24px;
910
758
  }
911
-
912
759
  .udb-auth__footer-inner {
913
760
  display: flex;
914
761
  flex-direction: column;
915
762
  align-items: center;
916
- gap: var(--u-space-2);
763
+ gap: 8px;
917
764
  text-align: center;
918
- font-size: var(--u-font-size-xs);
919
- color: var(--u-color-muted);
765
+ font-size: var(--udb-font-size-xs);
766
+ color: var(--color-muted-foreground);
920
767
  }
921
-
922
768
  .udb-auth__footer-inner > p {
923
769
  margin: 0;
924
770
  }
925
-
926
771
  .udb-auth__footer-links {
927
772
  display: flex;
928
773
  align-items: center;
929
774
  justify-content: center;
930
775
  flex-wrap: wrap;
931
- gap: var(--u-space-4);
776
+ gap: 16px;
932
777
  }
933
-
934
778
  .udb-auth__footer-link {
935
- font-size: var(--u-font-size-xs);
936
- color: var(--u-color-muted);
779
+ font-size: var(--udb-font-size-xs);
780
+ color: var(--color-muted-foreground);
937
781
  text-decoration: none;
938
782
  }
939
-
940
783
  .udb-auth__footer-link:hover {
941
- color: var(--u-color-text);
784
+ color: var(--color-foreground);
942
785
  text-decoration: underline;
943
786
  }
944
-
945
- /* "Or continue with" divider. */
946
787
  .udb-divider-row {
947
788
  display: flex;
948
789
  align-items: center;
949
- gap: var(--u-space-3);
950
- margin: var(--u-space-5) 0;
790
+ gap: 12px;
791
+ margin: 20px 0;
951
792
  }
952
-
953
793
  .udb-divider-row::before,
954
794
  .udb-divider-row::after {
955
795
  content: "";
956
796
  flex: 1;
957
797
  height: 1px;
958
- background: var(--u-color-border);
798
+ background: var(--color-border);
959
799
  }
960
-
961
800
  .udb-divider-row__label {
962
- font-size: var(--u-font-size-xs);
963
- font-weight: var(--u-font-weight-medium);
801
+ font-size: var(--udb-font-size-xs);
802
+ font-weight: var(--font-weight-medium);
964
803
  text-transform: uppercase;
965
804
  letter-spacing: 0.06em;
966
- color: var(--u-color-muted);
805
+ color: var(--color-muted-foreground);
967
806
  white-space: nowrap;
968
807
  }
969
-
970
- /* Social provider buttons. */
971
808
  .udb-social-grid {
972
809
  display: grid;
973
810
  grid-template-columns: repeat(2, minmax(0, 1fr));
974
- gap: var(--u-space-3);
811
+ gap: 12px;
975
812
  }
976
-
977
813
  .udb-social-grid__btn {
978
814
  width: 100%;
979
815
  }
980
-
981
816
  .udb-social-grid__icon {
982
817
  width: 16px;
983
818
  height: 16px;
984
819
  flex-shrink: 0;
985
820
  }
986
-
987
- /* Standalone social button (AuthLayout provider grid). */
988
821
  .udb-social-btn {
989
822
  display: inline-flex;
990
823
  align-items: center;
991
824
  justify-content: center;
992
- gap: var(--u-space-2);
825
+ gap: 8px;
993
826
  height: 40px;
994
- padding: 0 var(--u-space-3);
995
- border: 1px solid var(--u-color-border-strong);
996
- border-radius: var(--u-radius-md);
997
- background: var(--u-color-surface);
998
- color: var(--u-color-text);
827
+ padding: 0 12px;
828
+ border: 1px solid var(--udb-border-strong);
829
+ border-radius: var(--radius-md);
830
+ background: var(--color-card);
831
+ color: var(--color-foreground);
999
832
  font-family: inherit;
1000
- font-size: var(--u-font-size-md);
1001
- font-weight: var(--u-font-weight-medium);
833
+ font-size: var(--udb-font-size-md);
834
+ font-weight: var(--font-weight-medium);
1002
835
  cursor: pointer;
1003
836
  }
1004
-
1005
837
  .udb-social-btn:hover {
1006
- background: var(--u-color-surface-muted);
838
+ background: var(--color-muted);
1007
839
  }
1008
-
1009
840
  .udb-social-btn__icon {
1010
841
  display: inline-flex;
1011
842
  align-items: center;
1012
843
  justify-content: center;
1013
844
  flex-shrink: 0;
1014
845
  }
1015
-
1016
846
  .udb-social-btn__icon svg {
1017
847
  width: 16px;
1018
848
  height: 16px;
1019
849
  }
1020
-
1021
- /* ============================================================
1022
- * 7. Forms (auth + generic fields)
1023
- * ============================================================ */
1024
-
1025
- /* Shared spinner (also used by onboarding/analytics icons). */
1026
850
  @keyframes udb-spin {
1027
851
  to {
1028
852
  transform: rotate(360deg);
1029
853
  }
1030
854
  }
1031
-
1032
855
  .udb-spin {
1033
856
  animation: udb-spin 1s linear infinite;
1034
857
  }
1035
-
1036
858
  .udb-form {
1037
859
  display: flex;
1038
860
  flex-direction: column;
1039
- gap: var(--u-space-4);
861
+ gap: 16px;
1040
862
  width: 100%;
1041
863
  }
1042
-
1043
864
  .udb-form__header {
1044
865
  display: flex;
1045
866
  flex-direction: column;
1046
- gap: var(--u-space-1);
867
+ gap: 4px;
1047
868
  text-align: center;
1048
869
  }
1049
-
1050
870
  .udb-form__title {
1051
871
  margin: 0;
1052
- font-size: var(--u-font-size-2xl);
1053
- font-weight: var(--u-font-weight-bold);
872
+ font-size: var(--udb-font-size-2xl);
873
+ font-weight: var(--font-weight-bold);
1054
874
  letter-spacing: -0.02em;
1055
875
  line-height: 1.2;
1056
- color: var(--u-color-text);
876
+ color: var(--color-foreground);
1057
877
  }
1058
-
1059
878
  .udb-form__title--lg {
1060
- font-size: var(--u-font-size-3xl);
879
+ font-size: var(--udb-font-size-3xl);
1061
880
  }
1062
-
1063
881
  .udb-form__subtitle {
1064
882
  margin: 0;
1065
- font-size: var(--u-font-size-md);
1066
- color: var(--u-color-muted);
883
+ font-size: var(--udb-font-size-md);
884
+ color: var(--color-muted-foreground);
1067
885
  }
1068
-
1069
886
  .udb-form__subtitle-strong {
1070
- color: var(--u-color-text);
1071
- font-weight: var(--u-font-weight-medium);
887
+ color: var(--color-foreground);
888
+ font-weight: var(--font-weight-medium);
1072
889
  }
1073
-
1074
890
  .udb-form__row {
1075
891
  display: flex;
1076
892
  align-items: center;
1077
893
  justify-content: space-between;
1078
- gap: var(--u-space-3);
1079
- font-size: var(--u-font-size-md);
894
+ gap: 12px;
895
+ font-size: var(--udb-font-size-md);
1080
896
  }
1081
-
1082
897
  .udb-form__footer-text {
1083
898
  margin: 0;
1084
899
  text-align: center;
1085
- font-size: var(--u-font-size-md);
1086
- color: var(--u-color-muted);
900
+ font-size: var(--udb-font-size-md);
901
+ color: var(--color-muted-foreground);
1087
902
  }
1088
-
1089
- /* Tighter group inside a form (e.g. password + strength meter). */
1090
903
  .udb-form__group {
1091
904
  display: flex;
1092
905
  flex-direction: column;
1093
- gap: var(--u-space-3);
906
+ gap: 12px;
1094
907
  }
1095
-
1096
- /* Single labeled field. */
1097
908
  .udb-field {
1098
909
  display: flex;
1099
910
  flex-direction: column;
1100
911
  gap: 6px;
1101
912
  }
1102
-
1103
913
  .udb-field__label {
1104
- font-size: var(--u-font-size-md);
1105
- font-weight: var(--u-font-weight-medium);
1106
- color: var(--u-color-text);
914
+ font-size: var(--udb-font-size-md);
915
+ font-weight: var(--font-weight-medium);
916
+ color: var(--color-foreground);
1107
917
  }
1108
-
1109
918
  .udb-field__required {
1110
919
  margin-left: 2px;
1111
- color: var(--u-color-danger);
920
+ color: var(--color-destructive);
1112
921
  }
1113
-
1114
922
  .udb-field__error {
1115
923
  margin: 0;
1116
- font-size: var(--u-font-size-sm);
1117
- color: var(--u-color-danger);
924
+ font-size: var(--udb-font-size-sm);
925
+ color: var(--color-destructive);
1118
926
  }
1119
-
1120
- /* Inline error banner. */
1121
927
  .udb-form-alert {
1122
928
  display: flex;
1123
929
  align-items: flex-start;
1124
- gap: var(--u-space-2);
1125
- padding: 10px var(--u-space-3);
1126
- border-radius: var(--u-radius-md);
1127
- background: var(--u-color-danger-soft);
1128
- color: var(--u-color-danger);
1129
- font-size: var(--u-font-size-md);
930
+ gap: 8px;
931
+ padding: 10px 12px;
932
+ border-radius: var(--radius-md);
933
+ background: var(--color-destructive-soft, color-mix(in srgb, var(--color-destructive, #dc2626) 10%, transparent));
934
+ color: var(--color-destructive);
935
+ font-size: var(--udb-font-size-md);
1130
936
  }
1131
-
1132
937
  .udb-form-alert__icon {
1133
938
  width: 16px;
1134
939
  height: 16px;
1135
940
  flex-shrink: 0;
1136
941
  margin-top: 2px;
1137
942
  }
1138
-
1139
- /* Checkbox line (remember me, terms). */
1140
943
  .udb-check-label {
1141
944
  display: flex;
1142
945
  align-items: center;
1143
- gap: var(--u-space-2);
1144
- font-size: var(--u-font-size-md);
1145
- color: var(--u-color-muted);
946
+ gap: 8px;
947
+ font-size: var(--udb-font-size-md);
948
+ color: var(--color-muted-foreground);
1146
949
  cursor: pointer;
1147
950
  }
1148
-
1149
951
  .udb-check-label--multiline {
1150
952
  align-items: flex-start;
1151
953
  }
1152
-
1153
954
  .udb-check-label__text {
1154
955
  flex: 1;
1155
956
  line-height: 1.45;
1156
957
  }
1157
-
1158
- /* Inline text buttons ("Forgot password?", "Sign up"). */
1159
958
  .udb-link-btn {
1160
959
  display: inline;
1161
960
  border: none;
1162
961
  padding: 0;
1163
962
  background: transparent;
1164
963
  font-family: inherit;
1165
- font-size: var(--u-font-size-md);
1166
- color: var(--u-color-primary);
964
+ font-size: var(--udb-font-size-md);
965
+ color: var(--color-primary);
1167
966
  cursor: pointer;
1168
967
  }
1169
-
1170
968
  .udb-link-btn:hover {
1171
969
  text-decoration: underline;
1172
970
  }
1173
-
1174
971
  .udb-link-btn:disabled {
1175
972
  pointer-events: none;
1176
973
  opacity: 0.55;
1177
974
  }
1178
-
1179
975
  .udb-link-btn--strong {
1180
976
  font-weight: 600;
1181
977
  }
1182
-
1183
978
  .udb-text-link {
1184
- color: var(--u-color-primary);
979
+ color: var(--color-primary);
1185
980
  text-decoration: none;
1186
981
  }
1187
-
1188
982
  .udb-text-link:hover {
1189
983
  text-decoration: underline;
1190
984
  }
1191
-
1192
- /* Full-width submit button. */
1193
985
  .udb-submit-btn {
1194
986
  width: 100%;
1195
987
  height: 44px;
1196
988
  }
1197
-
1198
989
  .udb-submit-btn--pill {
1199
990
  height: 48px;
1200
- border-radius: var(--u-radius-pill);
991
+ border-radius: 9999px;
1201
992
  }
1202
-
1203
993
  .udb-btn__spinner {
1204
994
  animation: udb-spin 1s linear infinite;
1205
995
  }
1206
-
1207
- /* Password field with visibility toggle. */
1208
996
  .udb-password-wrap {
1209
997
  position: relative;
1210
998
  width: 100%;
1211
999
  }
1212
-
1213
1000
  .udb-input--with-toggle {
1214
1001
  padding-right: 44px;
1215
1002
  }
1216
-
1217
1003
  .udb-password-toggle {
1218
1004
  position: absolute;
1219
1005
  right: 2px;
1220
1006
  top: 50%;
1221
1007
  transform: translateY(-50%);
1222
1008
  }
1223
-
1224
1009
  .udb-password-toggle__icon {
1225
1010
  width: 16px;
1226
1011
  height: 16px;
1227
- color: var(--u-color-muted);
1012
+ color: var(--color-muted-foreground);
1228
1013
  }
1229
-
1230
1014
  .udb-input--error {
1231
- border-color: var(--u-color-danger);
1015
+ border-color: var(--color-destructive);
1232
1016
  }
1233
-
1234
1017
  .udb-input--error:focus-visible {
1235
- border-color: var(--u-color-danger);
1236
- box-shadow: 0 0 0 3px var(--u-color-danger-soft);
1018
+ border-color: var(--color-destructive);
1019
+ box-shadow: 0 0 0 3px var(--color-destructive-soft, color-mix(in srgb, var(--color-destructive, #dc2626) 10%, transparent));
1237
1020
  }
1238
-
1239
- /* Password strength meter. */
1240
1021
  .udb-strength {
1241
1022
  display: flex;
1242
1023
  flex-direction: column;
1243
1024
  gap: 6px;
1244
- margin-top: var(--u-space-1);
1025
+ margin-top: 4px;
1245
1026
  }
1246
-
1247
1027
  .udb-strength__bars {
1248
1028
  display: grid;
1249
1029
  grid-template-columns: repeat(4, minmax(0, 1fr));
1250
- gap: var(--u-space-2);
1030
+ gap: 8px;
1251
1031
  }
1252
-
1253
1032
  .udb-strength__bar {
1254
1033
  height: 4px;
1255
- border-radius: var(--u-radius-pill);
1256
- background: var(--u-color-border-strong);
1034
+ border-radius: 9999px;
1035
+ background: var(--udb-border-strong);
1257
1036
  transition: background-color 0.2s ease;
1258
1037
  }
1259
-
1260
1038
  .udb-strength__bar--weak {
1261
- background: var(--u-color-danger);
1039
+ background: var(--color-destructive);
1262
1040
  }
1263
-
1264
1041
  .udb-strength__bar--fair {
1265
- background: var(--u-color-warning);
1042
+ background: var(--color-warning);
1266
1043
  }
1267
-
1268
1044
  .udb-strength__bar--good {
1269
- background: var(--u-color-primary);
1045
+ background: var(--color-primary);
1270
1046
  }
1271
-
1272
1047
  .udb-strength__bar--strong {
1273
- background: var(--u-color-success);
1048
+ background: var(--color-success);
1274
1049
  }
1275
-
1276
1050
  .udb-strength__label {
1277
1051
  margin: 0;
1278
- font-size: var(--u-font-size-xs);
1279
- color: var(--u-color-muted);
1052
+ font-size: var(--udb-font-size-xs);
1053
+ color: var(--color-muted-foreground);
1280
1054
  }
1281
-
1282
1055
  .udb-strength__label--weak {
1283
- color: var(--u-color-danger);
1056
+ color: var(--color-destructive);
1284
1057
  }
1285
-
1286
1058
  .udb-strength__label--fair {
1287
- color: var(--u-color-warning);
1059
+ color: var(--color-warning);
1288
1060
  }
1289
-
1290
1061
  .udb-strength__label--good {
1291
- color: var(--u-color-primary);
1062
+ color: var(--color-primary);
1292
1063
  }
1293
-
1294
1064
  .udb-strength__label--strong {
1295
- color: var(--u-color-success);
1065
+ color: var(--color-success);
1296
1066
  }
1297
-
1298
- /* Success badge + ordered steps (forgot-password done state). */
1299
1067
  .udb-success-badge {
1300
1068
  display: flex;
1301
1069
  align-items: center;
1302
1070
  justify-content: center;
1303
1071
  width: 48px;
1304
1072
  height: 48px;
1305
- margin: 0 auto var(--u-space-4);
1073
+ margin: 0 auto 16px;
1306
1074
  border-radius: 50%;
1307
- background: var(--u-color-success-soft);
1075
+ background: var(--color-success-soft, color-mix(in srgb, var(--color-success, #16a34a) 12%, transparent));
1308
1076
  }
1309
-
1310
1077
  .udb-success-badge__icon {
1311
1078
  width: 24px;
1312
1079
  height: 24px;
1313
- color: var(--u-color-success);
1080
+ color: var(--color-success);
1314
1081
  }
1315
-
1316
1082
  .udb-steps-list {
1317
1083
  display: flex;
1318
1084
  flex-direction: column;
1319
- gap: var(--u-space-3);
1320
- margin: var(--u-space-4) 0 0;
1085
+ gap: 12px;
1086
+ margin: 16px 0 0;
1321
1087
  padding: 0;
1322
1088
  list-style: none;
1323
1089
  }
1324
-
1325
1090
  .udb-steps-list__item {
1326
1091
  display: flex;
1327
1092
  align-items: flex-start;
1328
- gap: var(--u-space-2);
1329
- font-size: var(--u-font-size-md);
1330
- color: var(--u-color-text);
1093
+ gap: 8px;
1094
+ font-size: var(--udb-font-size-md);
1095
+ color: var(--color-foreground);
1331
1096
  }
1332
-
1333
1097
  .udb-steps-list__icon {
1334
1098
  width: 16px;
1335
1099
  height: 16px;
1336
1100
  flex-shrink: 0;
1337
1101
  margin-top: 2px;
1338
- color: var(--u-color-success);
1102
+ color: var(--color-success);
1339
1103
  }
1340
-
1341
1104
  .udb-back-link {
1342
1105
  display: inline-flex;
1343
1106
  align-items: center;
1344
1107
  gap: 6px;
1345
- margin-top: var(--u-space-4);
1108
+ margin-top: 16px;
1346
1109
  border: none;
1347
1110
  padding: 0;
1348
1111
  background: transparent;
1349
1112
  font-family: inherit;
1350
- font-size: var(--u-font-size-md);
1351
- color: var(--u-color-muted);
1113
+ font-size: var(--udb-font-size-md);
1114
+ color: var(--color-muted-foreground);
1352
1115
  cursor: pointer;
1353
1116
  }
1354
-
1355
1117
  .udb-back-link:hover {
1356
- color: var(--u-color-text);
1118
+ color: var(--color-foreground);
1357
1119
  }
1358
-
1359
1120
  .udb-back-link__icon {
1360
1121
  width: 14px;
1361
1122
  height: 14px;
1362
1123
  }
1363
-
1364
- /* ============================================================
1365
- * 9. Settings
1366
- * ============================================================ */
1367
-
1368
1124
  .udb-settings {
1369
1125
  display: flex;
1370
1126
  width: 100%;
1371
1127
  height: 100vh;
1372
1128
  overflow: hidden;
1373
- background: var(--u-color-bg);
1129
+ background: var(--color-background);
1374
1130
  }
1375
-
1376
1131
  .udb-settings__sidebar {
1377
1132
  display: none;
1378
1133
  flex-direction: column;
1379
1134
  flex-shrink: 0;
1380
1135
  width: 280px;
1381
- border-right: 1px solid var(--u-color-border);
1382
- background: var(--u-color-surface);
1136
+ border-right: 1px solid var(--color-border);
1137
+ background: var(--color-card);
1383
1138
  transition: width 0.3s ease;
1384
1139
  }
1385
-
1386
1140
  .udb-settings__sidebar--collapsed {
1387
1141
  width: 72px;
1388
1142
  overflow: hidden;
1389
1143
  }
1390
-
1391
1144
  .udb-settings__sidebar-header {
1392
1145
  display: flex;
1393
1146
  align-items: center;
1394
1147
  justify-content: space-between;
1395
- gap: var(--u-space-2);
1396
- padding: var(--u-space-4);
1397
- border-bottom: 1px solid var(--u-color-border);
1148
+ gap: 8px;
1149
+ padding: 16px;
1150
+ border-bottom: 1px solid var(--color-border);
1398
1151
  }
1399
-
1400
1152
  .udb-settings__sidebar-title {
1401
1153
  margin: 0;
1402
- font-size: var(--u-font-size-lg);
1403
- font-weight: var(--u-font-weight-bold);
1404
- color: var(--u-color-text);
1154
+ font-size: var(--udb-font-size-lg);
1155
+ font-weight: var(--font-weight-bold);
1156
+ color: var(--color-foreground);
1405
1157
  white-space: nowrap;
1406
1158
  overflow: hidden;
1407
1159
  text-overflow: ellipsis;
1408
1160
  }
1409
-
1410
1161
  .udb-settings__sidebar-toggle {
1411
1162
  display: inline-flex;
1412
1163
  flex-shrink: 0;
1413
1164
  }
1414
-
1415
1165
  .udb-settings__toggle-icon {
1416
1166
  width: 20px;
1417
1167
  height: 20px;
1418
1168
  }
1419
-
1420
1169
  .udb-settings__toggle-icon-lg {
1421
1170
  width: 24px;
1422
1171
  height: 24px;
1423
1172
  }
1424
-
1425
1173
  .udb-settings__nav {
1426
1174
  flex: 1;
1427
1175
  overflow-y: auto;
1428
- padding: var(--u-space-3) var(--u-space-2);
1176
+ padding: 12px 8px;
1429
1177
  }
1430
-
1431
1178
  .udb-settings__mobile {
1432
1179
  position: fixed;
1433
1180
  inset: 0;
1434
1181
  z-index: 50;
1435
1182
  }
1436
-
1437
1183
  .udb-settings__mobile-sidebar {
1438
1184
  position: absolute;
1439
1185
  left: 0;
@@ -1441,17 +1187,15 @@
1441
1187
  height: 100%;
1442
1188
  width: 280px;
1443
1189
  overflow-y: auto;
1444
- border-right: 1px solid var(--u-color-border);
1445
- background: var(--u-color-surface);
1446
- box-shadow: var(--u-shadow-lg);
1190
+ border-right: 1px solid var(--color-border);
1191
+ background: var(--color-card);
1192
+ box-shadow: var(--shadow-lg);
1447
1193
  }
1448
-
1449
1194
  .udb-backdrop {
1450
1195
  position: absolute;
1451
1196
  inset: 0;
1452
1197
  background: rgba(15, 23, 42, 0.45);
1453
1198
  }
1454
-
1455
1199
  .udb-settings__main {
1456
1200
  display: flex;
1457
1201
  flex: 1;
@@ -1459,134 +1203,115 @@
1459
1203
  overflow: hidden;
1460
1204
  min-width: 0;
1461
1205
  }
1462
-
1463
1206
  .udb-settings__mobile-header {
1464
1207
  display: flex;
1465
1208
  align-items: center;
1466
1209
  justify-content: space-between;
1467
- gap: var(--u-space-3);
1468
- padding: var(--u-space-3) var(--u-space-4);
1469
- border-bottom: 1px solid var(--u-color-border);
1470
- background: var(--u-color-surface);
1210
+ gap: 12px;
1211
+ padding: 12px 16px;
1212
+ border-bottom: 1px solid var(--color-border);
1213
+ background: var(--color-card);
1471
1214
  }
1472
-
1473
1215
  .udb-settings__mobile-lead {
1474
1216
  display: flex;
1475
1217
  align-items: center;
1476
- gap: var(--u-space-2);
1218
+ gap: 8px;
1477
1219
  min-width: 0;
1478
1220
  }
1479
-
1480
1221
  .udb-settings__mobile-title {
1481
1222
  margin: 0;
1482
- font-size: var(--u-font-size-md);
1223
+ font-size: var(--udb-font-size-md);
1483
1224
  font-weight: 600;
1484
- color: var(--u-color-text);
1225
+ color: var(--color-foreground);
1485
1226
  white-space: nowrap;
1486
1227
  overflow: hidden;
1487
1228
  text-overflow: ellipsis;
1488
1229
  }
1489
-
1490
1230
  .udb-settings__content {
1491
1231
  flex: 1;
1492
1232
  overflow-y: auto;
1493
- padding: var(--u-space-5) var(--u-space-4);
1233
+ padding: 20px 16px;
1494
1234
  }
1495
-
1496
1235
  .udb-settings__skeleton {
1497
1236
  display: flex;
1498
1237
  flex-direction: column;
1499
- gap: var(--u-space-4);
1238
+ gap: 16px;
1500
1239
  max-width: 640px;
1501
1240
  }
1502
-
1503
1241
  .udb-settings__skeleton-list {
1504
1242
  display: flex;
1505
1243
  flex-direction: column;
1506
- gap: var(--u-space-2);
1244
+ gap: 8px;
1507
1245
  }
1508
-
1509
1246
  .udb-settings__skeleton-row {
1510
1247
  height: 14px;
1511
1248
  width: 100%;
1512
- border-radius: var(--u-radius-sm);
1249
+ border-radius: var(--radius-sm);
1513
1250
  }
1514
-
1515
1251
  @media (min-width: 768px) {
1516
1252
  .udb-settings__sidebar {
1517
1253
  display: flex;
1518
1254
  }
1519
-
1520
1255
  .udb-settings__mobile,
1521
1256
  .udb-settings__mobile-header {
1522
1257
  display: none;
1523
1258
  }
1524
-
1525
1259
  .udb-settings__content {
1526
- padding: var(--u-space-8);
1260
+ padding: 40px;
1527
1261
  }
1528
1262
  }
1529
-
1530
- /* Settings nav sections (shared by desktop & mobile drawers). */
1531
1263
  .udb-settings-nav {
1532
1264
  display: flex;
1533
1265
  flex-direction: column;
1534
- gap: var(--u-space-5);
1266
+ gap: 20px;
1535
1267
  }
1536
-
1537
1268
  .udb-settings-nav__title {
1538
1269
  margin: 0;
1539
- padding: 0 var(--u-space-3);
1270
+ padding: 0 12px;
1540
1271
  font-size: 10px;
1541
- font-weight: var(--u-font-weight-bold);
1272
+ font-weight: var(--font-weight-bold);
1542
1273
  text-transform: uppercase;
1543
1274
  letter-spacing: 0.1em;
1544
- color: var(--u-color-muted);
1275
+ color: var(--color-muted-foreground);
1545
1276
  }
1546
-
1547
1277
  .udb-settings-nav__items {
1548
1278
  display: flex;
1549
1279
  flex-direction: column;
1550
1280
  gap: 2px;
1551
1281
  }
1552
-
1553
1282
  .udb-settings-nav__item {
1554
1283
  display: flex;
1555
1284
  width: 100%;
1556
1285
  align-items: center;
1557
- gap: var(--u-space-3);
1558
- padding: var(--u-space-2) var(--u-space-3);
1286
+ gap: 12px;
1287
+ padding: 8px 12px;
1559
1288
  border: none;
1560
- border-radius: var(--u-radius-md);
1289
+ border-radius: var(--radius-md);
1561
1290
  background: transparent;
1562
1291
  font-family: inherit;
1563
- font-size: var(--u-font-size-md);
1564
- color: var(--u-color-text);
1292
+ font-size: var(--udb-font-size-md);
1293
+ color: var(--color-foreground);
1565
1294
  opacity: 0.75;
1566
1295
  text-align: left;
1567
1296
  text-decoration: none;
1568
1297
  cursor: pointer;
1569
1298
  transition: background-color 0.15s ease, color 0.15s ease;
1570
1299
  }
1571
-
1572
1300
  .udb-settings-nav__item:hover {
1573
- background: var(--u-color-surface-muted);
1301
+ background: var(--color-muted);
1574
1302
  opacity: 1;
1575
1303
  }
1576
-
1577
1304
  .udb-settings-nav__item--active {
1578
- background: var(--u-color-primary-soft);
1579
- color: var(--u-color-primary);
1305
+ background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary, #2563eb) 10%, transparent));
1306
+ color: var(--color-primary);
1580
1307
  opacity: 1;
1581
- font-weight: var(--u-font-weight-medium);
1308
+ font-weight: var(--font-weight-medium);
1582
1309
  }
1583
-
1584
1310
  .udb-settings-nav__item-icon {
1585
1311
  width: 16px;
1586
1312
  height: 16px;
1587
1313
  flex-shrink: 0;
1588
1314
  }
1589
-
1590
1315
  .udb-settings-nav__item-label {
1591
1316
  flex: 1;
1592
1317
  min-width: 0;
@@ -1594,273 +1319,222 @@
1594
1319
  overflow: hidden;
1595
1320
  text-overflow: ellipsis;
1596
1321
  }
1597
-
1598
1322
  .udb-settings-nav__badge {
1599
- padding: 1px var(--u-space-2);
1600
- border-radius: var(--u-radius-pill);
1601
- background: var(--u-color-primary-soft);
1602
- color: var(--u-color-primary);
1323
+ padding: 1px 8px;
1324
+ border-radius: 9999px;
1325
+ background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary, #2563eb) 10%, transparent));
1326
+ color: var(--color-primary);
1603
1327
  font-size: 10px;
1604
- font-weight: var(--u-font-weight-bold);
1328
+ font-weight: var(--font-weight-bold);
1605
1329
  }
1606
-
1607
1330
  .udb-settings-nav__chevron {
1608
1331
  width: 14px;
1609
1332
  height: 14px;
1610
- color: var(--u-color-muted);
1333
+ color: var(--color-muted-foreground);
1611
1334
  flex-shrink: 0;
1612
1335
  }
1613
-
1614
- /* ============================================================
1615
- * 10. Analytics
1616
- * ============================================================ */
1617
-
1618
1336
  .udb-analytics {
1619
1337
  display: flex;
1620
1338
  flex-direction: column;
1621
- gap: var(--u-space-6);
1339
+ gap: 24px;
1622
1340
  width: 100%;
1623
1341
  }
1624
-
1625
1342
  .udb-analytics__header {
1626
1343
  display: flex;
1627
1344
  align-items: center;
1628
1345
  justify-content: space-between;
1629
1346
  flex-wrap: wrap;
1630
- gap: var(--u-space-3);
1347
+ gap: 12px;
1631
1348
  }
1632
-
1633
1349
  .udb-analytics__heading {
1634
1350
  min-width: 0;
1635
1351
  }
1636
-
1637
1352
  .udb-analytics__title {
1638
1353
  margin: 0;
1639
- font-size: var(--u-font-size-3xl);
1640
- font-weight: var(--u-font-weight-bold);
1354
+ font-size: var(--udb-font-size-3xl);
1355
+ font-weight: var(--font-weight-bold);
1641
1356
  letter-spacing: -0.02em;
1642
1357
  line-height: 1.2;
1643
- color: var(--u-color-text);
1358
+ color: var(--color-foreground);
1644
1359
  }
1645
-
1646
1360
  .udb-analytics__description {
1647
- margin: var(--u-space-1) 0 0;
1648
- font-size: var(--u-font-size-md);
1649
- color: var(--u-color-muted);
1361
+ margin: 4px 0 0;
1362
+ font-size: var(--udb-font-size-md);
1363
+ color: var(--color-muted-foreground);
1650
1364
  }
1651
-
1652
1365
  .udb-analytics__actions {
1653
1366
  display: flex;
1654
1367
  align-items: center;
1655
1368
  flex-wrap: wrap;
1656
- gap: var(--u-space-2);
1369
+ gap: 8px;
1657
1370
  }
1658
-
1659
1371
  .udb-analytics__action-icon {
1660
1372
  width: 16px;
1661
1373
  height: 16px;
1662
1374
  }
1663
-
1664
1375
  .udb-analytics__loading {
1665
1376
  display: flex;
1666
1377
  align-items: center;
1667
1378
  justify-content: center;
1668
- padding: var(--u-space-8) 0;
1379
+ padding: 40px 0;
1669
1380
  }
1670
-
1671
1381
  .udb-analytics__loading-spinner {
1672
1382
  width: 48px;
1673
1383
  height: 48px;
1674
- color: var(--u-color-muted);
1384
+ color: var(--color-muted-foreground);
1675
1385
  }
1676
-
1677
1386
  .udb-analytics__metrics {
1678
1387
  display: grid;
1679
1388
  grid-template-columns: 1fr;
1680
- gap: var(--u-space-4);
1389
+ gap: 16px;
1681
1390
  }
1682
-
1683
1391
  .udb-analytics__charts {
1684
1392
  display: grid;
1685
1393
  grid-template-columns: 1fr;
1686
- gap: var(--u-space-6);
1394
+ gap: 24px;
1687
1395
  }
1688
-
1689
1396
  @media (min-width: 640px) {
1690
1397
  .udb-analytics__metrics {
1691
1398
  grid-template-columns: repeat(2, minmax(0, 1fr));
1692
1399
  }
1693
1400
  }
1694
-
1695
1401
  @media (min-width: 1024px) {
1696
1402
  .udb-analytics__metrics--wide {
1697
1403
  grid-template-columns: repeat(4, minmax(0, 1fr));
1698
1404
  }
1699
-
1700
1405
  .udb-analytics__charts {
1701
1406
  grid-template-columns: repeat(2, minmax(0, 1fr));
1702
1407
  }
1703
1408
  }
1704
-
1705
- /* Period selector chip. */
1706
1409
  .udb-period-select {
1707
1410
  display: flex;
1708
1411
  align-items: center;
1709
- gap: var(--u-space-2);
1412
+ gap: 8px;
1710
1413
  height: 36px;
1711
- padding: 0 var(--u-space-3);
1712
- border: 1px solid var(--u-color-border-strong);
1713
- border-radius: var(--u-radius-md);
1714
- background: var(--u-color-surface);
1414
+ padding: 0 12px;
1415
+ border: 1px solid var(--udb-border-strong);
1416
+ border-radius: var(--radius-md);
1417
+ background: var(--color-card);
1715
1418
  }
1716
-
1717
1419
  .udb-period-select__icon {
1718
1420
  width: 16px;
1719
1421
  height: 16px;
1720
- color: var(--u-color-muted);
1422
+ color: var(--color-muted-foreground);
1721
1423
  flex-shrink: 0;
1722
1424
  }
1723
-
1724
1425
  .udb-period-select__select {
1725
1426
  height: 100%;
1726
1427
  border: none;
1727
1428
  background: transparent;
1728
1429
  font-family: inherit;
1729
- font-size: var(--u-font-size-sm);
1730
- color: var(--u-color-text);
1430
+ font-size: var(--udb-font-size-sm);
1431
+ color: var(--color-foreground);
1731
1432
  outline: none;
1732
1433
  cursor: pointer;
1733
1434
  }
1734
-
1735
- /* Chart card internals. */
1736
1435
  .udb-analytics-card__status {
1737
1436
  display: flex;
1738
1437
  align-items: center;
1739
1438
  justify-content: center;
1740
- gap: var(--u-space-3);
1439
+ gap: 12px;
1741
1440
  min-height: 192px;
1742
1441
  }
1743
-
1744
1442
  .udb-analytics-card__status--error {
1745
- color: var(--u-color-danger);
1443
+ color: var(--color-destructive);
1746
1444
  }
1747
-
1748
1445
  .udb-analytics-card__spinner {
1749
1446
  width: 32px;
1750
1447
  height: 32px;
1751
- color: var(--u-color-muted);
1448
+ color: var(--color-muted-foreground);
1752
1449
  }
1753
-
1754
1450
  .udb-analytics-card__error-icon {
1755
1451
  width: 20px;
1756
1452
  height: 20px;
1757
1453
  flex-shrink: 0;
1758
1454
  }
1759
-
1760
1455
  .udb-analytics-card__error-text {
1761
1456
  margin: 0;
1762
- font-size: var(--u-font-size-md);
1457
+ font-size: var(--udb-font-size-md);
1763
1458
  }
1764
-
1765
1459
  .udb-analytics-card__header {
1766
- margin-bottom: var(--u-space-6);
1460
+ margin-bottom: 24px;
1767
1461
  }
1768
-
1769
1462
  .udb-analytics-card__title {
1770
1463
  margin: 0;
1771
- font-size: var(--u-font-size-lg);
1464
+ font-size: var(--udb-font-size-lg);
1772
1465
  font-weight: 600;
1773
- color: var(--u-color-text);
1466
+ color: var(--color-foreground);
1774
1467
  }
1775
-
1776
1468
  .udb-analytics-card__description {
1777
- margin: var(--u-space-1) 0 0;
1778
- font-size: var(--u-font-size-sm);
1779
- color: var(--u-color-muted);
1469
+ margin: 4px 0 0;
1470
+ font-size: var(--udb-font-size-sm);
1471
+ color: var(--color-muted-foreground);
1780
1472
  }
1781
-
1782
1473
  .udb-analytics-card__metrics {
1783
1474
  display: grid;
1784
1475
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
1785
- gap: var(--u-space-4);
1786
- margin-top: var(--u-space-4);
1476
+ gap: 16px;
1477
+ margin-top: 16px;
1787
1478
  }
1788
-
1789
- /* Chart container + dependency-free SVG renderer surfaces. */
1790
1479
  .udb-chart {
1791
1480
  position: relative;
1792
1481
  width: 100%;
1793
1482
  }
1794
-
1795
1483
  .udb-chart__empty {
1796
1484
  display: flex;
1797
1485
  align-items: center;
1798
1486
  justify-content: center;
1799
1487
  height: 100%;
1800
1488
  min-height: 192px;
1801
- padding: var(--u-space-6);
1489
+ padding: 24px;
1802
1490
  text-align: center;
1803
- font-size: var(--u-font-size-md);
1804
- color: var(--u-color-muted);
1491
+ font-size: var(--udb-font-size-md);
1492
+ color: var(--color-muted-foreground);
1805
1493
  }
1806
-
1807
1494
  .udb-chart__axis {
1808
- font-size: var(--u-font-size-sm);
1809
- fill: var(--u-color-muted);
1495
+ font-size: var(--udb-font-size-sm);
1496
+ fill: var(--color-muted-foreground);
1810
1497
  }
1811
-
1812
1498
  .udb-chart__grid {
1813
- stroke: var(--u-color-border);
1499
+ stroke: var(--color-border);
1814
1500
  }
1815
-
1816
1501
  .udb-chart__svg {
1817
1502
  display: block;
1818
1503
  width: 100%;
1819
1504
  height: 100%;
1820
1505
  overflow: visible;
1821
1506
  }
1822
-
1823
1507
  .udb-chart__legend {
1824
1508
  display: flex;
1825
1509
  align-items: center;
1826
1510
  justify-content: center;
1827
1511
  flex-wrap: wrap;
1828
- gap: var(--u-space-3);
1829
- margin-top: var(--u-space-3);
1512
+ gap: 12px;
1513
+ margin-top: 12px;
1830
1514
  }
1831
-
1832
1515
  .udb-chart__chip {
1833
1516
  display: inline-flex;
1834
1517
  align-items: center;
1835
- gap: var(--u-space-2);
1836
- font-size: var(--u-font-size-sm);
1837
- color: var(--u-color-muted);
1518
+ gap: 8px;
1519
+ font-size: var(--udb-font-size-sm);
1520
+ color: var(--color-muted-foreground);
1838
1521
  }
1839
-
1840
1522
  .udb-chart__chip-dot {
1841
1523
  width: 8px;
1842
1524
  height: 8px;
1843
1525
  border-radius: 50%;
1844
1526
  flex-shrink: 0;
1845
1527
  }
1846
-
1847
- /* ============================================================
1848
- * 11. Shared blocks — empty state, tables, org switcher, matrix,
1849
- * audit list (used by guards, session and settings skeletons)
1850
- * ============================================================ */
1851
-
1852
- /* Generic empty / forbidden state. */
1853
1528
  .udb-empty {
1854
1529
  display: flex;
1855
1530
  flex-direction: column;
1856
1531
  align-items: center;
1857
1532
  justify-content: center;
1858
- gap: var(--u-space-3);
1859
- padding: var(--u-space-8) var(--u-space-6);
1533
+ gap: 12px;
1534
+ padding: 40px 24px;
1860
1535
  text-align: center;
1861
- color: var(--u-color-muted);
1536
+ color: var(--color-muted-foreground);
1862
1537
  }
1863
-
1864
1538
  .udb-empty__icon {
1865
1539
  display: flex;
1866
1540
  align-items: center;
@@ -1868,109 +1542,90 @@
1868
1542
  width: 40px;
1869
1543
  height: 40px;
1870
1544
  border-radius: 50%;
1871
- background: var(--u-color-surface-muted);
1545
+ background: var(--color-muted);
1872
1546
  }
1873
-
1874
1547
  .udb-empty__glyph {
1875
1548
  width: 20px;
1876
1549
  height: 20px;
1877
- color: var(--u-color-muted);
1550
+ color: var(--color-muted-foreground);
1878
1551
  opacity: 0.7;
1879
1552
  }
1880
-
1881
1553
  .udb-empty__text {
1882
1554
  margin: 0;
1883
- font-size: var(--u-font-size-md);
1884
- font-weight: var(--u-font-weight-medium);
1885
- color: var(--u-color-text);
1555
+ font-size: var(--udb-font-size-md);
1556
+ font-weight: var(--font-weight-medium);
1557
+ color: var(--color-foreground);
1886
1558
  }
1887
-
1888
1559
  .udb-empty__hint {
1889
1560
  margin: 0;
1890
- font-size: var(--u-font-size-sm);
1891
- color: var(--u-color-muted);
1561
+ font-size: var(--udb-font-size-sm);
1562
+ color: var(--color-muted-foreground);
1892
1563
  }
1893
-
1894
- /* Data tables (user management, permission matrix). */
1895
1564
  .udb-table__wrap {
1896
1565
  width: 100%;
1897
1566
  overflow-x: auto;
1898
- border: 1px solid var(--u-color-border);
1899
- border-radius: var(--u-radius-lg);
1900
- background: var(--u-color-surface);
1567
+ border: 1px solid var(--color-border);
1568
+ border-radius: var(--radius-lg);
1569
+ background: var(--color-card);
1901
1570
  }
1902
-
1903
1571
  .udb-table {
1904
1572
  width: 100%;
1905
1573
  border-collapse: collapse;
1906
- font-size: var(--u-font-size-md);
1574
+ font-size: var(--udb-font-size-md);
1907
1575
  }
1908
-
1909
1576
  .udb-table__th {
1910
- padding: var(--u-space-2) var(--u-space-3);
1911
- border-bottom: 1px solid var(--u-color-border-strong);
1577
+ padding: 8px 12px;
1578
+ border-bottom: 1px solid var(--udb-border-strong);
1912
1579
  text-align: left;
1913
- font-size: var(--u-font-size-xs);
1914
- font-weight: var(--u-font-weight-bold);
1580
+ font-size: var(--udb-font-size-xs);
1581
+ font-weight: var(--font-weight-bold);
1915
1582
  text-transform: uppercase;
1916
1583
  letter-spacing: 0.06em;
1917
- color: var(--u-color-muted);
1584
+ color: var(--color-muted-foreground);
1918
1585
  white-space: nowrap;
1919
1586
  }
1920
-
1921
1587
  .udb-table__th--code {
1922
1588
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1923
1589
  text-transform: none;
1924
1590
  letter-spacing: 0;
1925
1591
  }
1926
-
1927
1592
  .udb-table__td {
1928
- padding: var(--u-space-3);
1929
- border-bottom: 1px solid var(--u-color-border);
1930
- color: var(--u-color-text);
1593
+ padding: 12px;
1594
+ border-bottom: 1px solid var(--color-border);
1595
+ color: var(--color-foreground);
1931
1596
  }
1932
-
1933
1597
  .udb-table__row:last-child .udb-table__td {
1934
1598
  border-bottom: none;
1935
1599
  }
1936
-
1937
1600
  .udb-table__row:hover .udb-table__td {
1938
- background: var(--u-color-surface-muted);
1601
+ background: var(--color-muted);
1939
1602
  }
1940
-
1941
1603
  .udb-table__td--strong {
1942
- font-weight: var(--u-font-weight-medium);
1604
+ font-weight: var(--font-weight-medium);
1943
1605
  white-space: nowrap;
1944
1606
  }
1945
-
1946
1607
  .udb-table__td--center {
1947
1608
  text-align: center;
1948
1609
  }
1949
-
1950
- /* Org switcher (reuses udb-profile-btn / udb-avatar / udb-menu). */
1951
1610
  .udb-org {
1952
1611
  display: flex;
1953
1612
  flex-direction: column;
1954
1613
  align-items: flex-start;
1955
1614
  line-height: 1.2;
1956
1615
  }
1957
-
1958
1616
  .udb-org__name {
1959
- font-size: var(--u-font-size-md);
1960
- font-weight: var(--u-font-weight-medium);
1961
- color: var(--u-color-text);
1617
+ font-size: var(--udb-font-size-md);
1618
+ font-weight: var(--font-weight-medium);
1619
+ color: var(--color-foreground);
1962
1620
  }
1963
-
1964
1621
  .udb-org__meta {
1965
1622
  font-size: 10px;
1966
1623
  text-transform: capitalize;
1967
- color: var(--u-color-muted);
1624
+ color: var(--color-muted-foreground);
1968
1625
  }
1969
-
1970
1626
  .udb-org-menu {
1971
- padding: var(--u-space-2);
1627
+ padding: 8px;
1972
1628
  }
1973
-
1974
1629
  .udb-org-menu__label {
1975
1630
  flex: 1;
1976
1631
  min-width: 0;
@@ -1978,298 +1633,249 @@
1978
1633
  text-overflow: ellipsis;
1979
1634
  white-space: nowrap;
1980
1635
  }
1981
-
1982
1636
  .udb-org-menu__check {
1983
1637
  width: 14px;
1984
1638
  height: 14px;
1985
- color: var(--u-color-primary);
1639
+ color: var(--color-primary);
1986
1640
  }
1987
-
1988
1641
  .udb-menu__item--active {
1989
- background: var(--u-color-primary-soft);
1990
- color: var(--u-color-primary);
1991
- font-weight: var(--u-font-weight-medium);
1642
+ background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary, #2563eb) 10%, transparent));
1643
+ color: var(--color-primary);
1644
+ font-weight: var(--font-weight-medium);
1992
1645
  }
1993
-
1994
- /* Permission matrix cells. */
1995
1646
  .udb-matrix__cell {
1996
1647
  display: inline-flex;
1997
1648
  align-items: center;
1998
1649
  justify-content: center;
1999
1650
  width: 28px;
2000
1651
  height: 28px;
2001
- border: 1px solid var(--u-color-border-strong);
2002
- border-radius: var(--u-radius-sm);
2003
- background: var(--u-color-surface);
1652
+ border: 1px solid var(--udb-border-strong);
1653
+ border-radius: var(--radius-sm);
1654
+ background: var(--color-card);
2004
1655
  cursor: pointer;
2005
1656
  }
2006
-
2007
1657
  .udb-matrix__cell:hover {
2008
- border-color: var(--u-color-primary);
1658
+ border-color: var(--color-primary);
2009
1659
  }
2010
-
2011
1660
  .udb-matrix__cell--on {
2012
- border-color: var(--u-color-primary);
2013
- background: var(--u-color-primary-soft);
1661
+ border-color: var(--color-primary);
1662
+ background: var(--color-primary-soft, color-mix(in srgb, var(--color-primary, #2563eb) 10%, transparent));
2014
1663
  }
2015
-
2016
1664
  .udb-matrix__check {
2017
1665
  width: 14px;
2018
1666
  height: 14px;
2019
- color: var(--u-color-success);
1667
+ color: var(--color-success);
2020
1668
  }
2021
-
2022
1669
  .udb-matrix__deny {
2023
1670
  width: 14px;
2024
1671
  height: 14px;
2025
- color: var(--u-color-muted);
1672
+ color: var(--color-muted-foreground);
2026
1673
  opacity: 0.5;
2027
1674
  }
2028
-
2029
- /* Audit log rows. */
2030
1675
  .udb-audit {
2031
1676
  display: flex;
2032
1677
  flex-direction: column;
2033
1678
  margin: 0;
2034
1679
  padding: 0;
2035
1680
  list-style: none;
2036
- border: 1px solid var(--u-color-border);
2037
- border-radius: var(--u-radius-lg);
2038
- background: var(--u-color-surface);
1681
+ border: 1px solid var(--color-border);
1682
+ border-radius: var(--radius-lg);
1683
+ background: var(--color-card);
2039
1684
  overflow: hidden;
2040
1685
  }
2041
-
2042
1686
  .udb-audit__item {
2043
1687
  display: flex;
2044
1688
  align-items: baseline;
2045
- gap: var(--u-space-4);
2046
- padding: var(--u-space-3) var(--u-space-4);
2047
- border-bottom: 1px solid var(--u-color-border);
2048
- font-size: var(--u-font-size-md);
1689
+ gap: 16px;
1690
+ padding: 12px 16px;
1691
+ border-bottom: 1px solid var(--color-border);
1692
+ font-size: var(--udb-font-size-md);
2049
1693
  }
2050
-
2051
1694
  .udb-audit__item:last-child {
2052
1695
  border-bottom: none;
2053
1696
  }
2054
-
2055
1697
  .udb-audit__at {
2056
1698
  flex-shrink: 0;
2057
1699
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
2058
- font-size: var(--u-font-size-sm);
2059
- color: var(--u-color-muted);
1700
+ font-size: var(--udb-font-size-sm);
1701
+ color: var(--color-muted-foreground);
2060
1702
  }
2061
-
2062
1703
  .udb-audit__actor {
2063
1704
  flex-shrink: 0;
2064
- font-weight: var(--u-font-weight-medium);
2065
- color: var(--u-color-text);
1705
+ font-weight: var(--font-weight-medium);
1706
+ color: var(--color-foreground);
2066
1707
  }
2067
-
2068
1708
  .udb-audit__action {
2069
1709
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
2070
- font-size: var(--u-font-size-sm);
2071
- color: var(--u-color-primary);
1710
+ font-size: var(--udb-font-size-sm);
1711
+ color: var(--color-primary);
2072
1712
  }
2073
-
2074
1713
  .udb-audit__target {
2075
1714
  min-width: 0;
2076
1715
  overflow: hidden;
2077
1716
  text-overflow: ellipsis;
2078
1717
  white-space: nowrap;
2079
- color: var(--u-color-muted);
1718
+ color: var(--color-muted-foreground);
2080
1719
  }
2081
-
2082
- /* ============================================================
2083
- * 12. Charts — card frame, legend, hover tooltip
2084
- * ============================================================ */
2085
-
2086
1720
  .udb-chartcard {
2087
1721
  display: flex;
2088
1722
  flex-direction: column;
2089
1723
  min-width: 0;
2090
- background: var(--u-color-surface);
2091
- border: 1px solid var(--u-color-border);
2092
- border-radius: var(--u-radius-lg);
2093
- box-shadow: var(--u-shadow-sm);
1724
+ background: var(--color-card);
1725
+ border: 1px solid var(--color-border);
1726
+ border-radius: var(--radius-lg);
1727
+ box-shadow: var(--shadow-sm);
2094
1728
  }
2095
-
2096
1729
  .udb-chartcard__head {
2097
1730
  display: flex;
2098
1731
  align-items: flex-start;
2099
1732
  justify-content: space-between;
2100
- gap: var(--u-space-3);
1733
+ gap: 12px;
2101
1734
  padding: 14px 18px 4px;
2102
1735
  flex-wrap: wrap;
2103
1736
  }
2104
-
2105
1737
  .udb-chartcard__heading {
2106
1738
  min-width: 0;
2107
1739
  }
2108
-
2109
1740
  .udb-chartcard__title {
2110
- font-size: var(--u-font-size-md);
1741
+ font-size: var(--udb-font-size-md);
2111
1742
  font-weight: 600;
2112
- color: var(--u-color-text);
1743
+ color: var(--color-foreground);
2113
1744
  }
2114
-
2115
1745
  .udb-chartcard__sub {
2116
- font-size: var(--u-font-size-sm);
2117
- color: var(--u-color-muted);
1746
+ font-size: var(--udb-font-size-sm);
1747
+ color: var(--color-muted-foreground);
2118
1748
  margin-top: 1px;
2119
1749
  }
2120
-
2121
1750
  .udb-chartcard__tools {
2122
1751
  display: flex;
2123
1752
  align-items: center;
2124
1753
  gap: 12px;
2125
1754
  flex-wrap: wrap;
2126
1755
  }
2127
-
2128
1756
  .udb-chartcard__body {
2129
1757
  padding: 10px 14px 14px;
2130
1758
  min-width: 0;
2131
1759
  }
2132
-
2133
1760
  .udb-chartcard__body svg {
2134
1761
  display: block;
2135
1762
  width: 100%;
2136
1763
  height: auto;
2137
1764
  }
2138
-
2139
1765
  .udb-chartcard__plot {
2140
1766
  position: relative;
2141
1767
  }
2142
-
2143
1768
  .udb-chartlegend {
2144
1769
  display: flex;
2145
1770
  flex-wrap: wrap;
2146
1771
  gap: 5px 14px;
2147
1772
  }
2148
-
2149
1773
  .udb-chartlegend__item {
2150
1774
  display: inline-flex;
2151
1775
  align-items: center;
2152
1776
  gap: 6px;
2153
- font-size: var(--u-font-size-sm);
2154
- color: var(--u-color-text);
1777
+ font-size: var(--udb-font-size-sm);
1778
+ color: var(--color-foreground);
2155
1779
  white-space: nowrap;
2156
1780
  }
2157
-
2158
1781
  .udb-chartlegend__dot {
2159
1782
  width: 8px;
2160
1783
  height: 8px;
2161
1784
  border-radius: 2.5px;
2162
1785
  flex: none;
2163
1786
  }
2164
-
2165
1787
  .udb-chartlegend__value {
2166
1788
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
2167
- color: var(--u-color-muted);
2168
- font-size: var(--u-font-size-xs);
1789
+ color: var(--color-muted-foreground);
1790
+ font-size: var(--udb-font-size-xs);
2169
1791
  }
2170
-
2171
1792
  .udb-chartlegend__hint {
2172
- color: var(--u-color-muted);
2173
- font-size: var(--u-font-size-xs);
1793
+ color: var(--color-muted-foreground);
1794
+ font-size: var(--udb-font-size-xs);
2174
1795
  }
2175
-
2176
1796
  .udb-charttip {
2177
1797
  position: absolute;
2178
1798
  pointer-events: none;
2179
- background: var(--u-color-text);
2180
- color: var(--u-color-bg);
2181
- border-radius: var(--u-radius-md);
1799
+ background: var(--color-foreground);
1800
+ color: var(--color-background);
1801
+ border-radius: var(--radius-md);
2182
1802
  padding: 7px 10px;
2183
- font-size: var(--u-font-size-sm);
2184
- box-shadow: var(--u-shadow-lg);
1803
+ font-size: var(--udb-font-size-sm);
1804
+ box-shadow: var(--shadow-lg);
2185
1805
  z-index: 30;
2186
1806
  min-width: 120px;
2187
1807
  transform: translate(-50%, calc(-100% - 10px));
2188
1808
  }
2189
-
2190
1809
  .udb-charttip__title {
2191
1810
  font-weight: 600;
2192
1811
  margin-bottom: 2px;
2193
1812
  white-space: nowrap;
2194
1813
  }
2195
-
2196
1814
  .udb-charttip__row {
2197
1815
  display: flex;
2198
1816
  align-items: center;
2199
1817
  gap: 6px;
2200
1818
  justify-content: space-between;
2201
1819
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
2202
- font-size: var(--u-font-size-xs);
1820
+ font-size: var(--udb-font-size-xs);
2203
1821
  }
2204
-
2205
1822
  .udb-charttip__row b {
2206
1823
  font-weight: 600;
2207
1824
  }
2208
-
2209
1825
  .udb-charttip__label {
2210
1826
  display: inline-flex;
2211
1827
  align-items: center;
2212
1828
  gap: 5px;
2213
1829
  }
2214
-
2215
1830
  .udb-hbars {
2216
1831
  display: flex;
2217
1832
  flex-direction: column;
2218
1833
  gap: 10px;
2219
1834
  }
2220
-
2221
1835
  .udb-hbars__row {
2222
1836
  display: grid;
2223
1837
  grid-template-columns: minmax(120px, 1.2fr) 2fr auto;
2224
1838
  align-items: center;
2225
1839
  gap: 12px;
2226
1840
  }
2227
-
2228
1841
  .udb-hbars__label {
2229
1842
  min-width: 0;
2230
1843
  }
2231
-
2232
1844
  .udb-hbars__name {
2233
1845
  font-weight: 600;
2234
- font-size: var(--u-font-size-sm);
1846
+ font-size: var(--udb-font-size-sm);
2235
1847
  overflow: hidden;
2236
1848
  text-overflow: ellipsis;
2237
1849
  white-space: nowrap;
2238
- color: var(--u-color-text);
1850
+ color: var(--color-foreground);
2239
1851
  }
2240
-
2241
1852
  .udb-hbars__sub {
2242
- font-size: var(--u-font-size-xs);
2243
- color: var(--u-color-muted);
1853
+ font-size: var(--udb-font-size-xs);
1854
+ color: var(--color-muted-foreground);
2244
1855
  }
2245
-
2246
1856
  .udb-hbars__track {
2247
1857
  height: 8px;
2248
- background: var(--u-color-border);
1858
+ background: var(--color-border);
2249
1859
  border-radius: 999px;
2250
1860
  overflow: hidden;
2251
1861
  }
2252
-
2253
1862
  .udb-hbars__fill {
2254
1863
  height: 100%;
2255
- background: var(--u-color-primary);
1864
+ background: var(--color-primary);
2256
1865
  border-radius: 999px;
2257
1866
  }
2258
-
2259
1867
  .udb-hbars__value {
2260
- font-size: var(--u-font-size-sm);
2261
- color: var(--u-color-text);
1868
+ font-size: var(--udb-font-size-sm);
1869
+ color: var(--color-foreground);
2262
1870
  text-align: right;
2263
1871
  font-variant-numeric: tabular-nums;
2264
1872
  }
2265
-
2266
1873
  .udb-barchart {
2267
1874
  display: flex;
2268
1875
  align-items: flex-end;
2269
1876
  gap: 3px;
2270
1877
  width: 100%;
2271
1878
  }
2272
-
2273
1879
  .udb-barchart__col {
2274
1880
  position: relative;
2275
1881
  display: flex;
@@ -2278,7 +1884,6 @@
2278
1884
  min-width: 0;
2279
1885
  height: 100%;
2280
1886
  }
2281
-
2282
1887
  .udb-barchart__bars {
2283
1888
  display: flex;
2284
1889
  align-items: flex-end;
@@ -2287,19 +1892,16 @@
2287
1892
  width: 100%;
2288
1893
  height: 100%;
2289
1894
  }
2290
-
2291
1895
  .udb-barchart__bars .udb-barchart__bar {
2292
1896
  flex: 1;
2293
1897
  width: auto;
2294
1898
  }
2295
-
2296
1899
  .udb-barchart__bar {
2297
1900
  width: 100%;
2298
1901
  min-height: 2px;
2299
1902
  border-radius: 3px 3px 0 0;
2300
1903
  transition: opacity 150ms ease, height 300ms ease;
2301
1904
  }
2302
-
2303
1905
  .udb-barchart__tip {
2304
1906
  position: absolute;
2305
1907
  bottom: calc(100% + 6px);
@@ -2308,54 +1910,46 @@
2308
1910
  padding: 4px 8px;
2309
1911
  white-space: nowrap;
2310
1912
  pointer-events: none;
2311
- border: 1px solid var(--u-color-border);
2312
- border-radius: var(--u-radius-sm);
2313
- background: var(--u-color-surface);
2314
- box-shadow: var(--u-shadow-sm);
2315
- font-size: var(--u-font-size-xs);
2316
- color: var(--u-color-muted);
1913
+ border: 1px solid var(--color-border);
1914
+ border-radius: var(--radius-sm);
1915
+ background: var(--color-card);
1916
+ box-shadow: var(--shadow-sm);
1917
+ font-size: var(--udb-font-size-xs);
1918
+ color: var(--color-muted-foreground);
2317
1919
  }
2318
-
2319
1920
  .udb-barchart__tiptitle {
2320
- font-weight: var(--u-font-weight-medium);
2321
- color: var(--u-color-text);
1921
+ font-weight: var(--font-weight-medium);
1922
+ color: var(--color-foreground);
2322
1923
  }
2323
-
2324
1924
  .udb-barchart__tiprow {
2325
1925
  display: flex;
2326
1926
  align-items: center;
2327
1927
  justify-content: space-between;
2328
1928
  gap: 10px;
2329
1929
  }
2330
-
2331
1930
  .udb-barchart__tiplabel {
2332
1931
  display: inline-flex;
2333
1932
  align-items: center;
2334
1933
  gap: 5px;
2335
1934
  }
2336
-
2337
1935
  .udb-barchart__tip b {
2338
1936
  margin-right: 4px;
2339
- font-weight: var(--u-font-weight-medium);
2340
- color: var(--u-color-text);
1937
+ font-weight: var(--font-weight-medium);
1938
+ color: var(--color-foreground);
2341
1939
  }
2342
-
2343
1940
  .udb-donut {
2344
1941
  display: flex;
2345
1942
  align-items: center;
2346
1943
  gap: 20px;
2347
1944
  }
2348
-
2349
1945
  .udb-donut__wrap {
2350
1946
  position: relative;
2351
1947
  flex-shrink: 0;
2352
1948
  }
2353
-
2354
1949
  .udb-donut__seg {
2355
1950
  cursor: pointer;
2356
1951
  transition: stroke-width 150ms ease, opacity 150ms ease;
2357
1952
  }
2358
-
2359
1953
  .udb-donut__center {
2360
1954
  position: absolute;
2361
1955
  inset: 0;
@@ -2364,20 +1958,17 @@
2364
1958
  align-items: center;
2365
1959
  justify-content: center;
2366
1960
  }
2367
-
2368
1961
  .udb-donut__value {
2369
- font-size: var(--u-font-size-lg);
2370
- font-weight: var(--u-font-weight-bold);
2371
- color: var(--u-color-text);
1962
+ font-size: var(--udb-font-size-lg);
1963
+ font-weight: var(--font-weight-bold);
1964
+ color: var(--color-foreground);
2372
1965
  font-variant-numeric: tabular-nums;
2373
1966
  }
2374
-
2375
1967
  .udb-donut__label {
2376
1968
  margin-top: 2px;
2377
- font-size: var(--u-font-size-xs);
2378
- color: var(--u-color-muted);
1969
+ font-size: var(--udb-font-size-xs);
1970
+ color: var(--color-muted-foreground);
2379
1971
  }
2380
-
2381
1972
  .udb-donut__list {
2382
1973
  display: flex;
2383
1974
  min-width: 0;
@@ -2385,77 +1976,65 @@
2385
1976
  flex-direction: column;
2386
1977
  gap: 6px;
2387
1978
  }
2388
-
2389
1979
  .udb-donut__item {
2390
1980
  display: flex;
2391
1981
  align-items: center;
2392
1982
  justify-content: space-between;
2393
1983
  gap: 8px;
2394
1984
  padding: 4px 6px;
2395
- border-radius: var(--u-radius-sm);
1985
+ border-radius: var(--radius-sm);
2396
1986
  }
2397
-
2398
1987
  .udb-donut__item:hover {
2399
- background: var(--u-color-surface-muted);
1988
+ background: var(--color-muted);
2400
1989
  }
2401
-
2402
1990
  .udb-donut__itemlabel {
2403
1991
  display: flex;
2404
1992
  min-width: 0;
2405
1993
  align-items: center;
2406
1994
  gap: 8px;
2407
- font-size: var(--u-font-size-sm);
2408
- color: var(--u-color-text);
1995
+ font-size: var(--udb-font-size-sm);
1996
+ color: var(--color-foreground);
2409
1997
  }
2410
-
2411
1998
  .udb-donut__dot {
2412
1999
  width: 8px;
2413
2000
  height: 8px;
2414
2001
  flex-shrink: 0;
2415
2002
  border-radius: 3px;
2416
2003
  }
2417
-
2418
2004
  .udb-donut__itemvalue {
2419
2005
  flex-shrink: 0;
2420
- font-size: var(--u-font-size-sm);
2421
- font-weight: var(--u-font-weight-medium);
2422
- color: var(--u-color-text);
2006
+ font-size: var(--udb-font-size-sm);
2007
+ font-weight: var(--font-weight-medium);
2008
+ color: var(--color-foreground);
2423
2009
  font-variant-numeric: tabular-nums;
2424
2010
  }
2425
-
2426
2011
  .udb-donut__pct {
2427
2012
  margin-left: 6px;
2428
- color: var(--u-color-muted);
2013
+ color: var(--color-muted-foreground);
2429
2014
  }
2430
-
2431
2015
  .udb-linechart {
2432
2016
  position: relative;
2433
2017
  width: 100%;
2434
2018
  user-select: none;
2435
2019
  }
2436
-
2437
2020
  .udb-linechart__svg {
2438
2021
  display: block;
2439
2022
  width: 100%;
2440
2023
  }
2441
-
2442
2024
  .udb-linechart__axis {
2443
- fill: var(--u-color-muted);
2444
- font-size: var(--u-font-size-xs);
2445
- font-family: var(--u-font-sans);
2025
+ fill: var(--color-muted-foreground);
2026
+ font-size: var(--udb-font-size-xs);
2027
+ font-family: var(--font-sans);
2446
2028
  }
2447
-
2448
2029
  .udb-linechart__grid {
2449
- stroke: var(--u-color-border);
2030
+ stroke: var(--color-border);
2450
2031
  stroke-width: 1;
2451
2032
  }
2452
-
2453
2033
  .udb-linechart__crosshair {
2454
- stroke: var(--u-color-border-strong);
2034
+ stroke: var(--udb-border-strong);
2455
2035
  stroke-width: 1;
2456
2036
  stroke-dasharray: 3 3;
2457
2037
  }
2458
-
2459
2038
  .udb-linechart__tip {
2460
2039
  position: absolute;
2461
2040
  top: 8px;
@@ -2463,67 +2042,57 @@
2463
2042
  min-width: 132px;
2464
2043
  padding: 8px;
2465
2044
  pointer-events: none;
2466
- border: 1px solid var(--u-color-border);
2467
- border-radius: var(--u-radius-md);
2468
- background: var(--u-color-surface);
2469
- box-shadow: var(--u-shadow-md);
2045
+ border: 1px solid var(--color-border);
2046
+ border-radius: var(--radius-md);
2047
+ background: var(--color-card);
2048
+ box-shadow: var(--shadow-md);
2470
2049
  }
2471
-
2472
2050
  .udb-linechart__tiptitle {
2473
2051
  margin-bottom: 4px;
2474
- font-size: var(--u-font-size-xs);
2475
- color: var(--u-color-muted);
2052
+ font-size: var(--udb-font-size-xs);
2053
+ color: var(--color-muted-foreground);
2476
2054
  }
2477
-
2478
2055
  .udb-linechart__tiprow {
2479
2056
  display: flex;
2480
2057
  align-items: center;
2481
2058
  justify-content: space-between;
2482
2059
  gap: 12px;
2483
- font-size: var(--u-font-size-sm);
2060
+ font-size: var(--udb-font-size-sm);
2484
2061
  }
2485
-
2486
2062
  .udb-linechart__tiprow span {
2487
2063
  display: flex;
2488
2064
  align-items: center;
2489
2065
  gap: 6px;
2490
- color: var(--u-color-muted);
2066
+ color: var(--color-muted-foreground);
2491
2067
  }
2492
-
2493
2068
  .udb-linechart__tiprow b {
2494
- font-weight: var(--u-font-weight-medium);
2495
- color: var(--u-color-text);
2069
+ font-weight: var(--font-weight-medium);
2070
+ color: var(--color-foreground);
2496
2071
  font-variant-numeric: tabular-nums;
2497
2072
  }
2498
-
2499
2073
  .udb-linechart__swatch {
2500
2074
  display: inline-block;
2501
2075
  width: 12px;
2502
2076
  height: 3px;
2503
2077
  border-radius: 999px;
2504
2078
  }
2505
-
2506
2079
  .udb-linechart__legendhost {
2507
2080
  margin-top: 4px;
2508
2081
  padding: 0 8px;
2509
2082
  }
2510
-
2511
2083
  .udb-pageheader__breadcrumbs .udb-pageheader__crumb + .udb-pageheader__crumb::before {
2512
2084
  content: "/";
2513
2085
  margin-right: 0.375rem;
2514
2086
  color: var(--color-muted-foreground);
2515
2087
  opacity: 0.6;
2516
2088
  }
2517
-
2518
2089
  .udb-pageheader__breadcrumbs a {
2519
2090
  color: inherit;
2520
2091
  text-decoration: none;
2521
2092
  }
2522
-
2523
2093
  .udb-pageheader__breadcrumbs a:hover {
2524
2094
  text-decoration: underline;
2525
2095
  }
2526
-
2527
2096
  .udb-pageheader__breadcrumbs {
2528
2097
  display: flex;
2529
2098
  align-items: center;
@@ -2531,7 +2100,6 @@
2531
2100
  font-size: 0.8125rem;
2532
2101
  color: var(--color-muted-foreground);
2533
2102
  }
2534
-
2535
2103
  .udb-pageheader {
2536
2104
  display: flex;
2537
2105
  flex-wrap: wrap;
@@ -2540,11 +2108,9 @@
2540
2108
  gap: 0.75rem;
2541
2109
  margin-bottom: 1.25rem;
2542
2110
  }
2543
-
2544
2111
  .udb-pageheader__main {
2545
2112
  min-width: 0;
2546
2113
  }
2547
-
2548
2114
  .udb-pageheader__kicker {
2549
2115
  margin: 0 0 0.25rem;
2550
2116
  font-size: 0.6875rem;
@@ -2553,7 +2119,6 @@
2553
2119
  text-transform: uppercase;
2554
2120
  color: var(--color-muted-foreground);
2555
2121
  }
2556
-
2557
2122
  .udb-pageheader__title {
2558
2123
  margin: 0;
2559
2124
  font-size: 1.375rem;
@@ -2562,14 +2127,12 @@
2562
2127
  letter-spacing: -0.01em;
2563
2128
  color: var(--color-foreground);
2564
2129
  }
2565
-
2566
2130
  .udb-pageheader__subtitle {
2567
2131
  margin: 0.25rem 0 0;
2568
2132
  font-size: 0.875rem;
2569
2133
  line-height: 1.45;
2570
2134
  color: var(--color-muted-foreground);
2571
2135
  }
2572
-
2573
2136
  .udb-pageheader__actions {
2574
2137
  display: flex;
2575
2138
  flex-wrap: wrap;