@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.
- package/README.md +62 -88
- package/package.json +6 -15
- package/src/{domain/config → config}/DashboardConfig.ts +1 -1
- package/src/config/index.ts +1 -0
- package/src/domains/analytics/components/AnalyticsCard.tsx +1 -6
- package/src/domains/analytics/components/AnalyticsChart.tsx +2 -14
- package/src/domains/analytics/components/AnalyticsLayout.tsx +3 -17
- package/src/domains/analytics/components/MetricCard.tsx +1 -6
- package/src/domains/analytics/utils/i18nKeys.ts +0 -9
- package/src/domains/auth/components/AuthLayout.tsx +1 -26
- package/src/domains/auth/components/ForgotPasswordForm.tsx +2 -14
- package/src/domains/auth/components/LoginForm.tsx +2 -15
- package/src/domains/auth/components/RegisterForm.tsx +3 -14
- package/src/domains/auth/components/ResetPasswordForm.tsx +3 -14
- package/src/domains/auth/components/shared/AuthErrorBanner.tsx +1 -11
- package/src/domains/auth/components/shared/EmailInput.tsx +2 -20
- package/src/domains/auth/components/shared/PasswordInput.tsx +3 -22
- package/src/domains/auth/components/shared/PasswordStrengthIndicator.tsx +1 -13
- package/src/domains/auth/components/shared/SocialLoginButtons.tsx +1 -15
- package/src/domains/auth/utils/i18nKeys.ts +0 -18
- package/src/{domain/config/CalendarConfig.ts → domains/calendar/config.ts} +1 -1
- package/src/domains/calendar/hooks/useCalendar.ts +1 -1
- package/src/domains/calendar/index.ts +1 -0
- package/src/domains/calendar/utils/index.ts +0 -6
- package/src/domains/charts/components.tsx +2 -2
- package/src/domains/layouts/components/BrandLogo.tsx +7 -22
- package/src/domains/layouts/components/DashboardHeader.tsx +2 -23
- package/src/domains/layouts/components/DashboardLayout.tsx +2 -39
- package/src/domains/layouts/components/DashboardSidebar.tsx +3 -21
- package/src/domains/permissions/PermissionsContext.tsx +1 -17
- package/src/domains/permissions/utils/i18nKeys.ts +0 -5
- package/src/domains/session/DemoLogin.tsx +2 -10
- package/src/domains/session/OrgSwitcher.tsx +2 -10
- package/src/domains/settings/components/AuditLogList.tsx +1 -10
- package/src/domains/settings/components/PermissionMatrixScreen.tsx +1 -8
- package/src/domains/settings/components/SettingsLayout.tsx +1 -21
- package/src/domains/settings/components/SettingsSection.tsx +1 -13
- package/src/domains/settings/components/UserManagementTable.tsx +1 -8
- package/src/domains/settings/utils/i18nKeys.ts +0 -6
- package/src/index.ts +2 -19
- package/src/styles/dashboard.contract.test.ts +42 -0
- package/src/styles/dashboard.css +483 -920
- package/src/domain/config/index.ts +0 -6
- package/src/i18n/I18nContext.tsx +0 -33
- package/src/i18n/defaultT.test.ts +0 -43
- package/src/i18n/defaultT.ts +0 -34
- package/src/i18n/index.ts +0 -7
- package/src/i18n/types.ts +0 -13
- package/src/primitives/Button.tsx +0 -24
- package/src/primitives/Checkbox.tsx +0 -17
- package/src/primitives/Input.tsx +0 -23
- package/src/primitives/Skeleton.tsx +0 -6
- package/src/primitives/cn.ts +0 -10
- package/src/primitives/index.ts +0 -23
- package/src/styles/tokens.contract.test.ts +0 -91
- package/src/styles/tokens.css +0 -116
package/src/styles/dashboard.css
CHANGED
|
@@ -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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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(--
|
|
35
|
-
color: var(--
|
|
36
|
-
background: var(--
|
|
37
|
-
font-size: var(--
|
|
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:
|
|
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:
|
|
60
|
+
gap: 20px;
|
|
73
61
|
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
|
|
74
62
|
}
|
|
75
|
-
|
|
76
63
|
.udb-card--sm {
|
|
77
|
-
padding:
|
|
64
|
+
padding: 16px;
|
|
78
65
|
}
|
|
79
|
-
|
|
80
66
|
.udb-card--lg {
|
|
81
|
-
padding:
|
|
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(--
|
|
100
|
-
border-right: 1px solid var(--
|
|
101
|
-
background: var(--
|
|
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(--
|
|
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(--
|
|
127
|
-
border-right: 1px solid var(--
|
|
128
|
-
background: var(--
|
|
129
|
-
box-shadow: var(--
|
|
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:
|
|
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:
|
|
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:
|
|
133
|
+
gap: 24px;
|
|
165
134
|
}
|
|
166
|
-
|
|
167
135
|
.udb-skeleton--title {
|
|
168
136
|
height: 32px;
|
|
169
137
|
width: 33%;
|
|
170
|
-
border-radius: var(--
|
|
138
|
+
border-radius: var(--radius-lg);
|
|
171
139
|
}
|
|
172
|
-
|
|
173
140
|
.udb-skeleton-grid {
|
|
174
141
|
display: grid;
|
|
175
|
-
gap:
|
|
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(--
|
|
147
|
+
border-radius: var(--radius-xl);
|
|
182
148
|
}
|
|
183
|
-
|
|
184
149
|
.udb-skeleton--section {
|
|
185
150
|
height: 256px;
|
|
186
|
-
border-radius: var(--
|
|
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(--
|
|
158
|
+
color: var(--udb-sidebar-text);
|
|
199
159
|
}
|
|
200
|
-
|
|
201
160
|
.udb-sidebar__brand {
|
|
202
161
|
display: flex;
|
|
203
|
-
height: var(--
|
|
162
|
+
height: var(--udb-header-height);
|
|
204
163
|
align-items: center;
|
|
205
|
-
gap:
|
|
206
|
-
border-bottom: 1px solid var(--
|
|
207
|
-
padding: 0
|
|
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(--
|
|
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(--
|
|
181
|
+
color: var(--udb-sidebar-text);
|
|
226
182
|
}
|
|
227
|
-
|
|
228
183
|
.udb-sidebar__brand-tagline {
|
|
229
|
-
margin-top:
|
|
230
|
-
margin-left:
|
|
231
|
-
font-size: var(--
|
|
232
|
-
font-weight: var(--
|
|
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(--
|
|
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:
|
|
242
|
-
border-bottom: 1px solid var(--
|
|
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
|
|
250
|
-
border-radius: var(--
|
|
251
|
-
box-shadow: var(--
|
|
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(--
|
|
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:
|
|
225
|
+
padding: 12px 8px;
|
|
277
226
|
}
|
|
278
|
-
|
|
279
227
|
.udb-sidebar__groups {
|
|
280
228
|
display: flex;
|
|
281
229
|
flex-direction: column;
|
|
282
|
-
gap:
|
|
230
|
+
gap: 24px;
|
|
283
231
|
}
|
|
284
|
-
|
|
285
232
|
.udb-sidebar__group {
|
|
286
233
|
display: flex;
|
|
287
234
|
flex-direction: column;
|
|
288
|
-
gap:
|
|
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:
|
|
297
|
-
padding:
|
|
242
|
+
margin-bottom: 4px;
|
|
243
|
+
padding: 8px 12px;
|
|
298
244
|
border: none;
|
|
299
|
-
border-radius: var(--
|
|
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(--
|
|
250
|
+
background: var(--udb-sidebar-accent);
|
|
306
251
|
}
|
|
307
|
-
|
|
308
252
|
.udb-sidebar__group-title {
|
|
309
253
|
font-size: 10px;
|
|
310
|
-
font-weight: var(--
|
|
254
|
+
font-weight: var(--font-weight-bold);
|
|
311
255
|
text-transform: uppercase;
|
|
312
256
|
letter-spacing: 0.12em;
|
|
313
|
-
color: var(--
|
|
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(--
|
|
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:
|
|
332
|
-
padding: 10px
|
|
333
|
-
border-radius: var(--
|
|
334
|
-
font-size: var(--
|
|
335
|
-
font-weight: var(--
|
|
336
|
-
color: var(--
|
|
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(--
|
|
344
|
-
color: var(--
|
|
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(--
|
|
350
|
-
color: var(--
|
|
288
|
+
background: var(--udb-sidebar-accent);
|
|
289
|
+
color: var(--udb-sidebar-accent-text);
|
|
351
290
|
opacity: 1;
|
|
352
|
-
box-shadow: var(--
|
|
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(--
|
|
374
|
-
padding:
|
|
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
|
|
318
|
+
padding: 0 8px;
|
|
386
319
|
font-size: 10px;
|
|
387
|
-
font-weight: var(--
|
|
320
|
+
font-weight: var(--font-weight-bold);
|
|
388
321
|
text-transform: uppercase;
|
|
389
322
|
letter-spacing: 0.1em;
|
|
390
|
-
color: var(--
|
|
323
|
+
color: var(--udb-sidebar-muted);
|
|
391
324
|
}
|
|
392
|
-
|
|
393
325
|
.udb-sidebar__footer-btn {
|
|
394
|
-
color: var(--
|
|
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(--
|
|
334
|
+
height: var(--udb-header-height);
|
|
409
335
|
align-items: center;
|
|
410
336
|
justify-content: space-between;
|
|
411
337
|
flex-shrink: 0;
|
|
412
|
-
gap:
|
|
413
|
-
border-bottom: 1px solid var(--
|
|
414
|
-
background: var(--
|
|
415
|
-
padding: 0
|
|
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:
|
|
347
|
+
gap: 12px;
|
|
423
348
|
min-width: 0;
|
|
424
349
|
}
|
|
425
|
-
|
|
426
350
|
.udb-header__title {
|
|
427
351
|
margin: 0;
|
|
428
|
-
font-size: var(--
|
|
352
|
+
font-size: var(--udb-font-size-md);
|
|
429
353
|
font-weight: 600;
|
|
430
|
-
color: var(--
|
|
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:
|
|
376
|
+
gap: 8px;
|
|
458
377
|
}
|
|
459
|
-
|
|
460
378
|
.udb-header__icon-btn {
|
|
461
379
|
height: 36px;
|
|
462
380
|
width: 36px;
|
|
463
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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
|
|
524
|
-
background: var(--
|
|
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(--
|
|
541
|
-
border: 1px solid var(--
|
|
542
|
-
border-radius: var(--
|
|
543
|
-
box-shadow: var(--
|
|
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:
|
|
565
|
-
border-bottom: 1px solid var(--
|
|
566
|
-
background: var(--
|
|
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(--
|
|
572
|
-
font-weight: var(--
|
|
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(--
|
|
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(--
|
|
485
|
+
font-weight: var(--font-weight-bold);
|
|
584
486
|
text-transform: uppercase;
|
|
585
|
-
color: var(--
|
|
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:
|
|
498
|
+
padding: 8px 12px;
|
|
599
499
|
border: none;
|
|
600
|
-
border-radius: var(--
|
|
500
|
+
border-radius: var(--radius-md);
|
|
601
501
|
background: transparent;
|
|
602
502
|
font-family: inherit;
|
|
603
|
-
font-size: var(--
|
|
604
|
-
color: var(--
|
|
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(--
|
|
509
|
+
background: var(--color-muted);
|
|
611
510
|
}
|
|
612
|
-
|
|
613
511
|
.udb-menu__item--danger {
|
|
614
|
-
color: var(--
|
|
615
|
-
font-weight: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
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:
|
|
647
|
-
padding:
|
|
648
|
-
border-bottom: 1px solid var(--
|
|
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(--
|
|
545
|
+
background: var(--color-muted);
|
|
657
546
|
}
|
|
658
|
-
|
|
659
547
|
.udb-notif__item--unread {
|
|
660
|
-
background: var(--
|
|
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(--
|
|
556
|
+
font-size: var(--udb-font-size-md);
|
|
671
557
|
line-height: 1.35;
|
|
672
|
-
color: var(--
|
|
558
|
+
color: var(--color-foreground);
|
|
673
559
|
}
|
|
674
|
-
|
|
675
560
|
.udb-notif__meta {
|
|
676
561
|
display: flex;
|
|
677
562
|
align-items: center;
|
|
678
|
-
gap:
|
|
679
|
-
margin:
|
|
563
|
+
gap: 4px;
|
|
564
|
+
margin: 4px 0 0;
|
|
680
565
|
font-size: 10px;
|
|
681
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
582
|
+
color: var(--color-muted-foreground);
|
|
700
583
|
cursor: pointer;
|
|
701
584
|
}
|
|
702
|
-
|
|
703
585
|
.udb-notif__dismiss:hover {
|
|
704
|
-
color: var(--
|
|
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:
|
|
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
|
|
602
|
+
margin: 0 auto 12px;
|
|
724
603
|
border-radius: 50%;
|
|
725
|
-
background: var(--
|
|
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(--
|
|
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(--
|
|
738
|
-
color: var(--
|
|
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:
|
|
746
|
-
padding:
|
|
620
|
+
gap: 8px;
|
|
621
|
+
padding: 4px;
|
|
747
622
|
border: none;
|
|
748
|
-
border-radius:
|
|
623
|
+
border-radius: 9999px;
|
|
749
624
|
background: transparent;
|
|
750
625
|
cursor: pointer;
|
|
751
626
|
}
|
|
752
|
-
|
|
753
627
|
.udb-profile-btn:hover {
|
|
754
|
-
background: var(--
|
|
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(--
|
|
765
|
-
background: var(--
|
|
766
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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:
|
|
661
|
+
padding: 8px;
|
|
793
662
|
}
|
|
794
|
-
|
|
795
663
|
.udb-profile-menu__id {
|
|
796
|
-
padding:
|
|
797
|
-
border-bottom: 1px solid var(--
|
|
798
|
-
margin-bottom:
|
|
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(--
|
|
804
|
-
font-weight: var(--
|
|
805
|
-
color: var(--
|
|
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(--
|
|
811
|
-
color: var(--
|
|
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:
|
|
825
|
-
background: var(--
|
|
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(--
|
|
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:
|
|
844
|
-
padding:
|
|
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:
|
|
707
|
+
gap: 8px;
|
|
851
708
|
}
|
|
852
|
-
|
|
853
709
|
.udb-auth__brand-name {
|
|
854
|
-
font-size: var(--
|
|
855
|
-
font-weight: var(--
|
|
710
|
+
font-size: var(--udb-font-size-lg);
|
|
711
|
+
font-weight: var(--font-weight-bold);
|
|
856
712
|
letter-spacing: -0.02em;
|
|
857
|
-
color: var(--
|
|
713
|
+
color: var(--color-foreground);
|
|
858
714
|
}
|
|
859
|
-
|
|
860
715
|
.udb-auth__home-link {
|
|
861
|
-
font-size: var(--
|
|
862
|
-
color: var(--
|
|
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(--
|
|
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:
|
|
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(--
|
|
888
|
-
border: 1px solid var(--
|
|
889
|
-
border-radius: var(--
|
|
890
|
-
box-shadow: var(--
|
|
891
|
-
padding:
|
|
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
|
|
745
|
+
margin: 0 0 20px;
|
|
896
746
|
text-align: center;
|
|
897
|
-
font-size: var(--
|
|
898
|
-
font-weight: var(--
|
|
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(--
|
|
751
|
+
color: var(--color-primary);
|
|
902
752
|
}
|
|
903
|
-
|
|
904
753
|
.udb-auth__social {
|
|
905
|
-
margin-top:
|
|
754
|
+
margin-top: 20px;
|
|
906
755
|
}
|
|
907
|
-
|
|
908
756
|
.udb-auth__footer {
|
|
909
|
-
padding:
|
|
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:
|
|
763
|
+
gap: 8px;
|
|
917
764
|
text-align: center;
|
|
918
|
-
font-size: var(--
|
|
919
|
-
color: var(--
|
|
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:
|
|
776
|
+
gap: 16px;
|
|
932
777
|
}
|
|
933
|
-
|
|
934
778
|
.udb-auth__footer-link {
|
|
935
|
-
font-size: var(--
|
|
936
|
-
color: var(--
|
|
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(--
|
|
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:
|
|
950
|
-
margin:
|
|
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(--
|
|
798
|
+
background: var(--color-border);
|
|
959
799
|
}
|
|
960
|
-
|
|
961
800
|
.udb-divider-row__label {
|
|
962
|
-
font-size: var(--
|
|
963
|
-
font-weight: var(--
|
|
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(--
|
|
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:
|
|
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:
|
|
825
|
+
gap: 8px;
|
|
993
826
|
height: 40px;
|
|
994
|
-
padding: 0
|
|
995
|
-
border: 1px solid var(--
|
|
996
|
-
border-radius: var(--
|
|
997
|
-
background: var(--
|
|
998
|
-
color: var(--
|
|
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(--
|
|
1001
|
-
font-weight: var(--
|
|
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(--
|
|
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:
|
|
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:
|
|
867
|
+
gap: 4px;
|
|
1047
868
|
text-align: center;
|
|
1048
869
|
}
|
|
1049
|
-
|
|
1050
870
|
.udb-form__title {
|
|
1051
871
|
margin: 0;
|
|
1052
|
-
font-size: var(--
|
|
1053
|
-
font-weight: var(--
|
|
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(--
|
|
876
|
+
color: var(--color-foreground);
|
|
1057
877
|
}
|
|
1058
|
-
|
|
1059
878
|
.udb-form__title--lg {
|
|
1060
|
-
font-size: var(--
|
|
879
|
+
font-size: var(--udb-font-size-3xl);
|
|
1061
880
|
}
|
|
1062
|
-
|
|
1063
881
|
.udb-form__subtitle {
|
|
1064
882
|
margin: 0;
|
|
1065
|
-
font-size: var(--
|
|
1066
|
-
color: var(--
|
|
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(--
|
|
1071
|
-
font-weight: var(--
|
|
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:
|
|
1079
|
-
font-size: var(--
|
|
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(--
|
|
1086
|
-
color: var(--
|
|
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:
|
|
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(--
|
|
1105
|
-
font-weight: var(--
|
|
1106
|
-
color: var(--
|
|
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(--
|
|
920
|
+
color: var(--color-destructive);
|
|
1112
921
|
}
|
|
1113
|
-
|
|
1114
922
|
.udb-field__error {
|
|
1115
923
|
margin: 0;
|
|
1116
|
-
font-size: var(--
|
|
1117
|
-
color: var(--
|
|
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:
|
|
1125
|
-
padding: 10px
|
|
1126
|
-
border-radius: var(--
|
|
1127
|
-
background: var(--
|
|
1128
|
-
color: var(--
|
|
1129
|
-
font-size: var(--
|
|
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:
|
|
1144
|
-
font-size: var(--
|
|
1145
|
-
color: var(--
|
|
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(--
|
|
1166
|
-
color: var(--
|
|
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(--
|
|
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:
|
|
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(--
|
|
1012
|
+
color: var(--color-muted-foreground);
|
|
1228
1013
|
}
|
|
1229
|
-
|
|
1230
1014
|
.udb-input--error {
|
|
1231
|
-
border-color: var(--
|
|
1015
|
+
border-color: var(--color-destructive);
|
|
1232
1016
|
}
|
|
1233
|
-
|
|
1234
1017
|
.udb-input--error:focus-visible {
|
|
1235
|
-
border-color: var(--
|
|
1236
|
-
box-shadow: 0 0 0 3px var(--
|
|
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:
|
|
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:
|
|
1030
|
+
gap: 8px;
|
|
1251
1031
|
}
|
|
1252
|
-
|
|
1253
1032
|
.udb-strength__bar {
|
|
1254
1033
|
height: 4px;
|
|
1255
|
-
border-radius:
|
|
1256
|
-
background: var(--
|
|
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(--
|
|
1039
|
+
background: var(--color-destructive);
|
|
1262
1040
|
}
|
|
1263
|
-
|
|
1264
1041
|
.udb-strength__bar--fair {
|
|
1265
|
-
background: var(--
|
|
1042
|
+
background: var(--color-warning);
|
|
1266
1043
|
}
|
|
1267
|
-
|
|
1268
1044
|
.udb-strength__bar--good {
|
|
1269
|
-
background: var(--
|
|
1045
|
+
background: var(--color-primary);
|
|
1270
1046
|
}
|
|
1271
|
-
|
|
1272
1047
|
.udb-strength__bar--strong {
|
|
1273
|
-
background: var(--
|
|
1048
|
+
background: var(--color-success);
|
|
1274
1049
|
}
|
|
1275
|
-
|
|
1276
1050
|
.udb-strength__label {
|
|
1277
1051
|
margin: 0;
|
|
1278
|
-
font-size: var(--
|
|
1279
|
-
color: var(--
|
|
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(--
|
|
1056
|
+
color: var(--color-destructive);
|
|
1284
1057
|
}
|
|
1285
|
-
|
|
1286
1058
|
.udb-strength__label--fair {
|
|
1287
|
-
color: var(--
|
|
1059
|
+
color: var(--color-warning);
|
|
1288
1060
|
}
|
|
1289
|
-
|
|
1290
1061
|
.udb-strength__label--good {
|
|
1291
|
-
color: var(--
|
|
1062
|
+
color: var(--color-primary);
|
|
1292
1063
|
}
|
|
1293
|
-
|
|
1294
1064
|
.udb-strength__label--strong {
|
|
1295
|
-
color: var(--
|
|
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
|
|
1073
|
+
margin: 0 auto 16px;
|
|
1306
1074
|
border-radius: 50%;
|
|
1307
|
-
background: var(--
|
|
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(--
|
|
1080
|
+
color: var(--color-success);
|
|
1314
1081
|
}
|
|
1315
|
-
|
|
1316
1082
|
.udb-steps-list {
|
|
1317
1083
|
display: flex;
|
|
1318
1084
|
flex-direction: column;
|
|
1319
|
-
gap:
|
|
1320
|
-
margin:
|
|
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:
|
|
1329
|
-
font-size: var(--
|
|
1330
|
-
color: var(--
|
|
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(--
|
|
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:
|
|
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(--
|
|
1351
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
1382
|
-
background: var(--
|
|
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:
|
|
1396
|
-
padding:
|
|
1397
|
-
border-bottom: 1px solid var(--
|
|
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(--
|
|
1403
|
-
font-weight: var(--
|
|
1404
|
-
color: var(--
|
|
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:
|
|
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(--
|
|
1445
|
-
background: var(--
|
|
1446
|
-
box-shadow: var(--
|
|
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:
|
|
1468
|
-
padding:
|
|
1469
|
-
border-bottom: 1px solid var(--
|
|
1470
|
-
background: var(--
|
|
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:
|
|
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(--
|
|
1223
|
+
font-size: var(--udb-font-size-md);
|
|
1483
1224
|
font-weight: 600;
|
|
1484
|
-
color: var(--
|
|
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:
|
|
1233
|
+
padding: 20px 16px;
|
|
1494
1234
|
}
|
|
1495
|
-
|
|
1496
1235
|
.udb-settings__skeleton {
|
|
1497
1236
|
display: flex;
|
|
1498
1237
|
flex-direction: column;
|
|
1499
|
-
gap:
|
|
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:
|
|
1244
|
+
gap: 8px;
|
|
1507
1245
|
}
|
|
1508
|
-
|
|
1509
1246
|
.udb-settings__skeleton-row {
|
|
1510
1247
|
height: 14px;
|
|
1511
1248
|
width: 100%;
|
|
1512
|
-
border-radius: var(--
|
|
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:
|
|
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:
|
|
1266
|
+
gap: 20px;
|
|
1535
1267
|
}
|
|
1536
|
-
|
|
1537
1268
|
.udb-settings-nav__title {
|
|
1538
1269
|
margin: 0;
|
|
1539
|
-
padding: 0
|
|
1270
|
+
padding: 0 12px;
|
|
1540
1271
|
font-size: 10px;
|
|
1541
|
-
font-weight: var(--
|
|
1272
|
+
font-weight: var(--font-weight-bold);
|
|
1542
1273
|
text-transform: uppercase;
|
|
1543
1274
|
letter-spacing: 0.1em;
|
|
1544
|
-
color: var(--
|
|
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:
|
|
1558
|
-
padding:
|
|
1286
|
+
gap: 12px;
|
|
1287
|
+
padding: 8px 12px;
|
|
1559
1288
|
border: none;
|
|
1560
|
-
border-radius: var(--
|
|
1289
|
+
border-radius: var(--radius-md);
|
|
1561
1290
|
background: transparent;
|
|
1562
1291
|
font-family: inherit;
|
|
1563
|
-
font-size: var(--
|
|
1564
|
-
color: var(--
|
|
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(--
|
|
1301
|
+
background: var(--color-muted);
|
|
1574
1302
|
opacity: 1;
|
|
1575
1303
|
}
|
|
1576
|
-
|
|
1577
1304
|
.udb-settings-nav__item--active {
|
|
1578
|
-
background: var(--
|
|
1579
|
-
color: var(--
|
|
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(--
|
|
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
|
|
1600
|
-
border-radius:
|
|
1601
|
-
background: var(--
|
|
1602
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
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:
|
|
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:
|
|
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(--
|
|
1640
|
-
font-weight: var(--
|
|
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(--
|
|
1358
|
+
color: var(--color-foreground);
|
|
1644
1359
|
}
|
|
1645
|
-
|
|
1646
1360
|
.udb-analytics__description {
|
|
1647
|
-
margin:
|
|
1648
|
-
font-size: var(--
|
|
1649
|
-
color: var(--
|
|
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:
|
|
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:
|
|
1379
|
+
padding: 40px 0;
|
|
1669
1380
|
}
|
|
1670
|
-
|
|
1671
1381
|
.udb-analytics__loading-spinner {
|
|
1672
1382
|
width: 48px;
|
|
1673
1383
|
height: 48px;
|
|
1674
|
-
color: var(--
|
|
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:
|
|
1389
|
+
gap: 16px;
|
|
1681
1390
|
}
|
|
1682
|
-
|
|
1683
1391
|
.udb-analytics__charts {
|
|
1684
1392
|
display: grid;
|
|
1685
1393
|
grid-template-columns: 1fr;
|
|
1686
|
-
gap:
|
|
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:
|
|
1412
|
+
gap: 8px;
|
|
1710
1413
|
height: 36px;
|
|
1711
|
-
padding: 0
|
|
1712
|
-
border: 1px solid var(--
|
|
1713
|
-
border-radius: var(--
|
|
1714
|
-
background: var(--
|
|
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(--
|
|
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(--
|
|
1730
|
-
color: var(--
|
|
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:
|
|
1439
|
+
gap: 12px;
|
|
1741
1440
|
min-height: 192px;
|
|
1742
1441
|
}
|
|
1743
|
-
|
|
1744
1442
|
.udb-analytics-card__status--error {
|
|
1745
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
1457
|
+
font-size: var(--udb-font-size-md);
|
|
1763
1458
|
}
|
|
1764
|
-
|
|
1765
1459
|
.udb-analytics-card__header {
|
|
1766
|
-
margin-bottom:
|
|
1460
|
+
margin-bottom: 24px;
|
|
1767
1461
|
}
|
|
1768
|
-
|
|
1769
1462
|
.udb-analytics-card__title {
|
|
1770
1463
|
margin: 0;
|
|
1771
|
-
font-size: var(--
|
|
1464
|
+
font-size: var(--udb-font-size-lg);
|
|
1772
1465
|
font-weight: 600;
|
|
1773
|
-
color: var(--
|
|
1466
|
+
color: var(--color-foreground);
|
|
1774
1467
|
}
|
|
1775
|
-
|
|
1776
1468
|
.udb-analytics-card__description {
|
|
1777
|
-
margin:
|
|
1778
|
-
font-size: var(--
|
|
1779
|
-
color: var(--
|
|
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:
|
|
1786
|
-
margin-top:
|
|
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:
|
|
1489
|
+
padding: 24px;
|
|
1802
1490
|
text-align: center;
|
|
1803
|
-
font-size: var(--
|
|
1804
|
-
color: var(--
|
|
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(--
|
|
1809
|
-
fill: var(--
|
|
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(--
|
|
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:
|
|
1829
|
-
margin-top:
|
|
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:
|
|
1836
|
-
font-size: var(--
|
|
1837
|
-
color: var(--
|
|
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:
|
|
1859
|
-
padding:
|
|
1533
|
+
gap: 12px;
|
|
1534
|
+
padding: 40px 24px;
|
|
1860
1535
|
text-align: center;
|
|
1861
|
-
color: var(--
|
|
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(--
|
|
1545
|
+
background: var(--color-muted);
|
|
1872
1546
|
}
|
|
1873
|
-
|
|
1874
1547
|
.udb-empty__glyph {
|
|
1875
1548
|
width: 20px;
|
|
1876
1549
|
height: 20px;
|
|
1877
|
-
color: var(--
|
|
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(--
|
|
1884
|
-
font-weight: var(--
|
|
1885
|
-
color: var(--
|
|
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(--
|
|
1891
|
-
color: var(--
|
|
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(--
|
|
1899
|
-
border-radius: var(--
|
|
1900
|
-
background: var(--
|
|
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(--
|
|
1574
|
+
font-size: var(--udb-font-size-md);
|
|
1907
1575
|
}
|
|
1908
|
-
|
|
1909
1576
|
.udb-table__th {
|
|
1910
|
-
padding:
|
|
1911
|
-
border-bottom: 1px solid var(--
|
|
1577
|
+
padding: 8px 12px;
|
|
1578
|
+
border-bottom: 1px solid var(--udb-border-strong);
|
|
1912
1579
|
text-align: left;
|
|
1913
|
-
font-size: var(--
|
|
1914
|
-
font-weight: var(--
|
|
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(--
|
|
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:
|
|
1929
|
-
border-bottom: 1px solid var(--
|
|
1930
|
-
color: var(--
|
|
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(--
|
|
1601
|
+
background: var(--color-muted);
|
|
1939
1602
|
}
|
|
1940
|
-
|
|
1941
1603
|
.udb-table__td--strong {
|
|
1942
|
-
font-weight: var(--
|
|
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(--
|
|
1960
|
-
font-weight: var(--
|
|
1961
|
-
color: var(--
|
|
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(--
|
|
1624
|
+
color: var(--color-muted-foreground);
|
|
1968
1625
|
}
|
|
1969
|
-
|
|
1970
1626
|
.udb-org-menu {
|
|
1971
|
-
padding:
|
|
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(--
|
|
1639
|
+
color: var(--color-primary);
|
|
1986
1640
|
}
|
|
1987
|
-
|
|
1988
1641
|
.udb-menu__item--active {
|
|
1989
|
-
background: var(--
|
|
1990
|
-
color: var(--
|
|
1991
|
-
font-weight: var(--
|
|
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(--
|
|
2002
|
-
border-radius: var(--
|
|
2003
|
-
background: var(--
|
|
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(--
|
|
1658
|
+
border-color: var(--color-primary);
|
|
2009
1659
|
}
|
|
2010
|
-
|
|
2011
1660
|
.udb-matrix__cell--on {
|
|
2012
|
-
border-color: var(--
|
|
2013
|
-
background: var(--
|
|
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(--
|
|
1667
|
+
color: var(--color-success);
|
|
2020
1668
|
}
|
|
2021
|
-
|
|
2022
1669
|
.udb-matrix__deny {
|
|
2023
1670
|
width: 14px;
|
|
2024
1671
|
height: 14px;
|
|
2025
|
-
color: var(--
|
|
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(--
|
|
2037
|
-
border-radius: var(--
|
|
2038
|
-
background: var(--
|
|
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:
|
|
2046
|
-
padding:
|
|
2047
|
-
border-bottom: 1px solid var(--
|
|
2048
|
-
font-size: var(--
|
|
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(--
|
|
2059
|
-
color: var(--
|
|
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(--
|
|
2065
|
-
color: var(--
|
|
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(--
|
|
2071
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
2091
|
-
border: 1px solid var(--
|
|
2092
|
-
border-radius: var(--
|
|
2093
|
-
box-shadow: var(--
|
|
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:
|
|
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(--
|
|
1741
|
+
font-size: var(--udb-font-size-md);
|
|
2111
1742
|
font-weight: 600;
|
|
2112
|
-
color: var(--
|
|
1743
|
+
color: var(--color-foreground);
|
|
2113
1744
|
}
|
|
2114
|
-
|
|
2115
1745
|
.udb-chartcard__sub {
|
|
2116
|
-
font-size: var(--
|
|
2117
|
-
color: var(--
|
|
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(--
|
|
2154
|
-
color: var(--
|
|
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(--
|
|
2168
|
-
font-size: var(--
|
|
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(--
|
|
2173
|
-
font-size: var(--
|
|
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(--
|
|
2180
|
-
color: var(--
|
|
2181
|
-
border-radius: var(--
|
|
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(--
|
|
2184
|
-
box-shadow: var(--
|
|
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(--
|
|
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(--
|
|
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(--
|
|
1850
|
+
color: var(--color-foreground);
|
|
2239
1851
|
}
|
|
2240
|
-
|
|
2241
1852
|
.udb-hbars__sub {
|
|
2242
|
-
font-size: var(--
|
|
2243
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
1864
|
+
background: var(--color-primary);
|
|
2256
1865
|
border-radius: 999px;
|
|
2257
1866
|
}
|
|
2258
|
-
|
|
2259
1867
|
.udb-hbars__value {
|
|
2260
|
-
font-size: var(--
|
|
2261
|
-
color: var(--
|
|
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(--
|
|
2312
|
-
border-radius: var(--
|
|
2313
|
-
background: var(--
|
|
2314
|
-
box-shadow: var(--
|
|
2315
|
-
font-size: var(--
|
|
2316
|
-
color: var(--
|
|
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(--
|
|
2321
|
-
color: var(--
|
|
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(--
|
|
2340
|
-
color: var(--
|
|
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(--
|
|
2370
|
-
font-weight: var(--
|
|
2371
|
-
color: var(--
|
|
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(--
|
|
2378
|
-
color: var(--
|
|
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(--
|
|
1985
|
+
border-radius: var(--radius-sm);
|
|
2396
1986
|
}
|
|
2397
|
-
|
|
2398
1987
|
.udb-donut__item:hover {
|
|
2399
|
-
background: var(--
|
|
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(--
|
|
2408
|
-
color: var(--
|
|
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(--
|
|
2421
|
-
font-weight: var(--
|
|
2422
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
2444
|
-
font-size: var(--
|
|
2445
|
-
font-family: var(--
|
|
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(--
|
|
2030
|
+
stroke: var(--color-border);
|
|
2450
2031
|
stroke-width: 1;
|
|
2451
2032
|
}
|
|
2452
|
-
|
|
2453
2033
|
.udb-linechart__crosshair {
|
|
2454
|
-
stroke: var(--
|
|
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(--
|
|
2467
|
-
border-radius: var(--
|
|
2468
|
-
background: var(--
|
|
2469
|
-
box-shadow: var(--
|
|
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(--
|
|
2475
|
-
color: var(--
|
|
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(--
|
|
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(--
|
|
2066
|
+
color: var(--color-muted-foreground);
|
|
2491
2067
|
}
|
|
2492
|
-
|
|
2493
2068
|
.udb-linechart__tiprow b {
|
|
2494
|
-
font-weight: var(--
|
|
2495
|
-
color: var(--
|
|
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;
|