@dybo-ai/design 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/theme.css ADDED
@@ -0,0 +1,730 @@
1
+ /* =========================================================================
2
+ DYBO Design System — CSS Custom Properties
3
+ Source: Figma "DYBO" (file ZHtkvTEeTYlNVbSncLyI1a)
4
+ Style: Glassmorphism (translucent surfaces + backdrop blur)
5
+ Font: Urbanist — load from Google Fonts:
6
+ <link href="https://fonts.googleapis.com/css2?family=Urbanist:wght@400;500;600;700&display=swap" rel="stylesheet">
7
+ ========================================================================= */
8
+
9
+ :root {
10
+ /* ---- Brand ---- */
11
+ --dybo-color-brand-logo: #1d335c;
12
+ --dybo-color-brand-blue-yonder: #5878a7;
13
+ --dybo-color-brand-dark-orb: #141927;
14
+ --dybo-color-brand-cultured: #f3f6fa;
15
+ --dybo-color-brand-gainsboro: #dbdfe5;
16
+
17
+ /* ---- Text ---- */
18
+ --dybo-color-text-primary: #0a1323;
19
+ --dybo-color-text-secondary: #f4f4f6;
20
+ --dybo-color-text-muted: #545f74;
21
+ --dybo-color-text-gray: #868686;
22
+
23
+ /* ---- Neutral ---- */
24
+ --dybo-color-black: #000000;
25
+ --dybo-color-white: #ffffff;
26
+ --dybo-color-grayish-blue-50: #f4f4f6;
27
+ --dybo-color-grayish-blue-300: #c2c7cf;
28
+ --dybo-color-midnight-sky-300: #e6e7f7;
29
+ --dybo-color-midnight-sky-700: #48495d;
30
+
31
+ /* ---- Surfaces (glass) ---- */
32
+ --dybo-surface-page: #e6eaf0;
33
+ --dybo-surface-card: rgba(240, 241, 244, 0.7);
34
+ --dybo-surface-card-solid: rgba(240, 241, 244, 0.9);
35
+ --dybo-surface-input: rgba(244, 244, 246, 0.7);
36
+
37
+ /* ---- Lines & shadows ---- */
38
+ --dybo-line-stroke: #ffffff;
39
+ --dybo-shadow-key: rgba(10, 19, 35, 0.1);
40
+ --dybo-shadow-ambient: rgba(170, 180, 192, 0.73);
41
+ --dybo-elevation-card:
42
+ 0 8px 24px rgba(10, 19, 35, 0.1), 0 2px 8px rgba(170, 180, 192, 0.35);
43
+ --dybo-drop-shadow: 0 4px 4px rgba(10, 19, 35, 0.1);
44
+
45
+ /* ---- Semantic (recommended mapping) ---- */
46
+ --dybo-success: #20a156;
47
+ --dybo-success-bright: #28ca6b;
48
+ --dybo-success-bg: #eafbf1;
49
+ --dybo-warning: #f16c24;
50
+ --dybo-warning-bg: #ffe5d8;
51
+ --dybo-danger: #a21a17;
52
+ --dybo-danger-bg: #fffbfb;
53
+ --dybo-info: #0399ae;
54
+ --dybo-info-bg: #d3f7fc;
55
+
56
+ /* ---- Status / priority (DYBO domain) ---- */
57
+ --dybo-status-resolved-fg: #0399ae;
58
+ --dybo-status-resolved-bg: #d3f7fc;
59
+ --dybo-status-high-priority-fg: #682a5d;
60
+ --dybo-status-high-priority-bg: #eee0ec;
61
+ --dybo-status-medium-priority-fg: #f16c24;
62
+ --dybo-status-medium-priority-bg: #ffe5d8;
63
+ --dybo-status-brand-fg: #0a1323;
64
+ --dybo-status-brand-bg: #d0d3fe;
65
+
66
+ /* ---- Typography ---- */
67
+ --dybo-font-family: "Urbanist", sans-serif;
68
+ --dybo-font-weight-regular: 400;
69
+ --dybo-font-weight-medium: 500;
70
+ --dybo-font-weight-semibold: 600;
71
+ --dybo-font-weight-bold: 700;
72
+
73
+ --dybo-font-size-xs: 12px; /* Uppercase / Tiny */
74
+ --dybo-font-size-sm: 14px; /* Small body / H6 / links / placeholder */
75
+ --dybo-font-size-md: 16px; /* Body / Link */
76
+ --dybo-font-size-lg: 18px; /* Subtitle */
77
+ --dybo-font-size-xl: 24px; /* Medium Title */
78
+
79
+ /* ---- Spacing ---- */
80
+ --dybo-space-000: 0;
81
+ --dybo-space-050: 4px;
82
+ --dybo-space-100: 8px;
83
+ --dybo-space-150: 12px;
84
+ --dybo-space-200: 16px;
85
+ --dybo-space-250: 20px;
86
+ --dybo-space-400: 32px;
87
+
88
+ /* ---- Radius ---- */
89
+ --dybo-radius-sm: 12px;
90
+ --dybo-radius-alt: 16px;
91
+ --dybo-radius-md: 20px;
92
+ --dybo-radius-full: 999px;
93
+
94
+ /* ---- Opacity ---- */
95
+ --dybo-opacity-light: 0.16;
96
+ --dybo-opacity-medium: 0.32;
97
+ --dybo-opacity-intense: 0.64;
98
+
99
+ /* ---- Border ---- */
100
+ --dybo-border-sm: 1px;
101
+
102
+ /* ---- Glass ---- */
103
+ --dybo-glass-blur: 4px;
104
+
105
+ /* ---- Sidebar ---- */
106
+ --dybo-sidebar-bg: #1d2433;
107
+ --dybo-sidebar-hover: #273043;
108
+ --dybo-sidebar-text: #c9cdd6;
109
+ --dybo-sidebar-width: 240px;
110
+ --dybo-topbar-height: 60px;
111
+ }
112
+
113
+ /* =========================================================================
114
+ Tailwind V4 — @theme block
115
+ Generates utilities: bg-dybo-*, text-dybo-*, rounded-dybo-*, shadow-dybo-*
116
+ Usage in consuming app:
117
+ @import "tailwindcss";
118
+ @import "@dybo-ai/design/theme.css";
119
+ ========================================================================= */
120
+ @theme {
121
+ /* Colors */
122
+ --color-dybo-logo: #1d335c;
123
+ --color-dybo-blue: #5878a7;
124
+ --color-dybo-dark-orb: #141927;
125
+ --color-dybo-cultured: #f3f6fa;
126
+ --color-dybo-gainsboro: #dbdfe5;
127
+ --color-dybo-ink: #0a1323;
128
+ --color-dybo-on-dark: #f4f4f6;
129
+ --color-dybo-muted: #545f74;
130
+ --color-dybo-gray: #868686;
131
+ --color-dybo-page: #e6eaf0;
132
+ --color-dybo-stroke: #ffffff;
133
+ --color-dybo-line: #c2c7cf;
134
+ --color-dybo-success: #20a156;
135
+ --color-dybo-success-bg: #eafbf1;
136
+ --color-dybo-warning: #f16c24;
137
+ --color-dybo-warning-bg: #ffe5d8;
138
+ --color-dybo-danger: #a21a17;
139
+ --color-dybo-danger-bg: #fffbfb;
140
+ --color-dybo-info: #0399ae;
141
+ --color-dybo-info-bg: #d3f7fc;
142
+ --color-dybo-sidebar: #1d2433;
143
+
144
+ /* Border radius */
145
+ --radius-dybo-sm: 12px;
146
+ --radius-dybo-alt: 16px;
147
+ --radius-dybo-md: 20px;
148
+ --radius-dybo-full: 999px;
149
+
150
+ /* Shadows */
151
+ --shadow-dybo-card:
152
+ 0 8px 24px rgba(10, 19, 35, 0.1), 0 2px 8px rgba(170, 180, 192, 0.35);
153
+ --shadow-dybo-drop: 0 4px 4px rgba(10, 19, 35, 0.1);
154
+
155
+ /* Backdrop blur */
156
+ --blur-dybo: 4px;
157
+
158
+ /* Font */
159
+ --font-dybo: "Urbanist", sans-serif;
160
+
161
+ /* Spacing extras */
162
+ --spacing-dybo-050: 4px;
163
+ --spacing-dybo-100: 8px;
164
+ --spacing-dybo-150: 12px;
165
+ --spacing-dybo-200: 16px;
166
+ --spacing-dybo-250: 20px;
167
+ --spacing-dybo-400: 32px;
168
+ }
169
+
170
+ /* ---- Base + reusable helpers ---------------------------------------- */
171
+
172
+ body {
173
+ font-family: var(--dybo-font-family);
174
+ color: var(--dybo-color-text-primary);
175
+ background: var(--dybo-surface-page);
176
+ }
177
+
178
+ /* Glassmorphism card — the signature DYBO surface */
179
+ .dybo-glass {
180
+ background: var(--dybo-surface-card);
181
+ border: var(--dybo-border-sm) solid var(--dybo-line-stroke);
182
+ border-radius: var(--dybo-radius-md);
183
+ box-shadow: var(--dybo-elevation-card);
184
+ backdrop-filter: blur(var(--dybo-glass-blur));
185
+ -webkit-backdrop-filter: blur(var(--dybo-glass-blur));
186
+ }
187
+
188
+ /* Buttons */
189
+ .dybo-btn {
190
+ font-family: inherit;
191
+ font-size: var(--dybo-font-size-md);
192
+ font-weight: var(--dybo-font-weight-medium);
193
+ letter-spacing: 1px;
194
+ padding: var(--dybo-space-150) var(--dybo-space-400);
195
+ border-radius: var(--dybo-radius-sm);
196
+ border: none;
197
+ cursor: pointer;
198
+ transition:
199
+ background 0.15s,
200
+ opacity 0.15s;
201
+ }
202
+ .dybo-btn--primary {
203
+ background: var(--dybo-color-text-primary);
204
+ color: var(--dybo-color-white);
205
+ }
206
+ .dybo-btn--primary:hover {
207
+ background: var(--dybo-color-brand-dark-orb);
208
+ }
209
+ .dybo-btn--secondary {
210
+ background: var(--dybo-color-grayish-blue-50);
211
+ color: var(--dybo-color-text-primary);
212
+ }
213
+ .dybo-btn--secondary:hover {
214
+ background: var(--dybo-color-brand-gainsboro);
215
+ }
216
+ .dybo-btn--ghost {
217
+ background: transparent;
218
+ color: var(--dybo-color-text-primary);
219
+ border: 1px solid var(--dybo-color-grayish-blue-300);
220
+ }
221
+ .dybo-btn--ghost:hover {
222
+ background: var(--dybo-color-grayish-blue-50);
223
+ }
224
+ .dybo-btn--danger {
225
+ background: var(--dybo-danger);
226
+ color: var(--dybo-color-white);
227
+ }
228
+ .dybo-btn--danger:hover {
229
+ opacity: 0.88;
230
+ }
231
+ .dybo-btn:disabled {
232
+ opacity: var(--dybo-opacity-intense);
233
+ cursor: not-allowed;
234
+ }
235
+
236
+ /* Input field */
237
+ .dybo-input {
238
+ font-family: inherit;
239
+ font-size: var(--dybo-font-size-sm);
240
+ color: var(--dybo-color-text-primary);
241
+ background: var(--dybo-surface-input);
242
+ border: var(--dybo-border-sm) solid var(--dybo-line-stroke);
243
+ border-radius: var(--dybo-radius-sm);
244
+ box-shadow: var(--dybo-drop-shadow);
245
+ padding: var(--dybo-space-150) var(--dybo-space-200);
246
+ width: 100%;
247
+ transition:
248
+ border-color 0.15s,
249
+ box-shadow 0.15s;
250
+ }
251
+ .dybo-input::placeholder {
252
+ color: var(--dybo-color-text-muted);
253
+ letter-spacing: 1px;
254
+ }
255
+ .dybo-input:focus {
256
+ outline: none;
257
+ border-color: var(--dybo-color-brand-blue-yonder);
258
+ box-shadow: 0 0 0 3px rgba(88, 120, 167, 0.18);
259
+ }
260
+
261
+ /* Select field */
262
+ .dybo-select {
263
+ font-family: inherit;
264
+ font-size: var(--dybo-font-size-sm);
265
+ color: var(--dybo-color-text-primary);
266
+ background: var(--dybo-surface-input);
267
+ border: var(--dybo-border-sm) solid var(--dybo-line-stroke);
268
+ border-radius: var(--dybo-radius-sm);
269
+ box-shadow: var(--dybo-drop-shadow);
270
+ padding: var(--dybo-space-150) var(--dybo-space-200);
271
+ width: 100%;
272
+ cursor: pointer;
273
+ appearance: none;
274
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23545f74' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
275
+ background-repeat: no-repeat;
276
+ background-position: right 14px center;
277
+ padding-right: 36px;
278
+ transition:
279
+ border-color 0.15s,
280
+ box-shadow 0.15s;
281
+ }
282
+ .dybo-select:focus {
283
+ outline: none;
284
+ border-color: var(--dybo-color-brand-blue-yonder);
285
+ box-shadow: 0 0 0 3px rgba(88, 120, 167, 0.18);
286
+ }
287
+
288
+ /* Type presets */
289
+ .dybo-title {
290
+ font-size: var(--dybo-font-size-xl);
291
+ font-weight: var(--dybo-font-weight-regular);
292
+ line-height: 1.35;
293
+ letter-spacing: 1px;
294
+ }
295
+ .dybo-subtitle {
296
+ font-size: var(--dybo-font-size-lg);
297
+ font-weight: var(--dybo-font-weight-regular);
298
+ line-height: 1.35;
299
+ letter-spacing: 1px;
300
+ }
301
+ .dybo-body {
302
+ font-size: var(--dybo-font-size-md);
303
+ font-weight: var(--dybo-font-weight-medium);
304
+ line-height: 1.5;
305
+ }
306
+ .dybo-body-sm {
307
+ font-size: var(--dybo-font-size-sm);
308
+ font-weight: var(--dybo-font-weight-medium);
309
+ line-height: 1.15;
310
+ }
311
+ .dybo-link {
312
+ font-size: var(--dybo-font-size-sm);
313
+ font-weight: var(--dybo-font-weight-bold);
314
+ line-height: 1.5;
315
+ }
316
+ .dybo-h6 {
317
+ font-size: var(--dybo-font-size-sm);
318
+ font-weight: var(--dybo-font-weight-semibold);
319
+ line-height: 1.5;
320
+ letter-spacing: 1px;
321
+ }
322
+ .dybo-uppercase {
323
+ font-size: var(--dybo-font-size-xs);
324
+ font-weight: var(--dybo-font-weight-medium);
325
+ line-height: 1.35;
326
+ letter-spacing: 1px;
327
+ text-transform: uppercase;
328
+ }
329
+
330
+ /* Status badges */
331
+ .dybo-badge {
332
+ display: inline-block;
333
+ padding: 2px 10px;
334
+ border-radius: var(--dybo-radius-full);
335
+ font-size: var(--dybo-font-size-xs);
336
+ font-weight: var(--dybo-font-weight-semibold);
337
+ letter-spacing: 1px;
338
+ }
339
+ .dybo-badge--resolved {
340
+ color: var(--dybo-status-resolved-fg);
341
+ background: var(--dybo-status-resolved-bg);
342
+ }
343
+ .dybo-badge--high {
344
+ color: var(--dybo-status-high-priority-fg);
345
+ background: var(--dybo-status-high-priority-bg);
346
+ }
347
+ .dybo-badge--medium {
348
+ color: var(--dybo-status-medium-priority-fg);
349
+ background: var(--dybo-status-medium-priority-bg);
350
+ }
351
+ .dybo-badge--brand {
352
+ color: var(--dybo-status-brand-fg);
353
+ background: var(--dybo-status-brand-bg);
354
+ }
355
+ .dybo-badge--success {
356
+ color: var(--dybo-success);
357
+ background: var(--dybo-success-bg);
358
+ }
359
+ .dybo-badge--warning {
360
+ color: var(--dybo-warning);
361
+ background: var(--dybo-warning-bg);
362
+ }
363
+ .dybo-badge--danger {
364
+ color: var(--dybo-danger);
365
+ background: var(--dybo-danger-bg);
366
+ }
367
+
368
+ /* ---- Alert ---- */
369
+ .dybo-alert {
370
+ display: flex;
371
+ align-items: flex-start;
372
+ gap: var(--dybo-space-150);
373
+ padding: var(--dybo-space-150) var(--dybo-space-200);
374
+ border-radius: var(--dybo-radius-sm);
375
+ border-left: 4px solid transparent;
376
+ font-size: var(--dybo-font-size-sm);
377
+ font-weight: var(--dybo-font-weight-medium);
378
+ line-height: 1.5;
379
+ }
380
+ .dybo-alert--success {
381
+ background: var(--dybo-success-bg);
382
+ border-color: var(--dybo-success);
383
+ color: #14703b;
384
+ }
385
+ .dybo-alert--warning {
386
+ background: var(--dybo-warning-bg);
387
+ border-color: var(--dybo-warning);
388
+ color: #a54a0e;
389
+ }
390
+ .dybo-alert--danger {
391
+ background: var(--dybo-danger-bg);
392
+ border-color: var(--dybo-danger);
393
+ color: var(--dybo-danger);
394
+ }
395
+ .dybo-alert--info {
396
+ background: var(--dybo-info-bg);
397
+ border-color: var(--dybo-info);
398
+ color: #026f80;
399
+ }
400
+
401
+ /* ---- App shell layout ---- */
402
+ .dybo-app-shell {
403
+ display: flex;
404
+ min-height: 100vh;
405
+ background: var(--dybo-surface-page);
406
+ }
407
+
408
+ /* ---- Sidebar ---- */
409
+ .dybo-sidebar {
410
+ width: var(--dybo-sidebar-width);
411
+ flex-shrink: 0;
412
+ background: var(--dybo-sidebar-bg);
413
+ color: var(--dybo-sidebar-text);
414
+ display: flex;
415
+ flex-direction: column;
416
+ position: sticky;
417
+ top: 0;
418
+ height: 100vh;
419
+ overflow-y: auto;
420
+ }
421
+ .dybo-sidebar__brand {
422
+ padding: 22px 20px 18px;
423
+ border-bottom: 1px solid rgba(255, 255, 255, 0.07);
424
+ }
425
+ .dybo-sidebar__nav {
426
+ padding: 14px 12px;
427
+ display: flex;
428
+ flex-direction: column;
429
+ gap: 2px;
430
+ flex-grow: 1;
431
+ }
432
+ .dybo-sidebar__section {
433
+ font-size: var(--dybo-font-size-xs);
434
+ text-transform: uppercase;
435
+ letter-spacing: 1px;
436
+ color: rgba(255, 255, 255, 0.45);
437
+ padding: 18px 12px 7px;
438
+ font-weight: var(--dybo-font-weight-bold);
439
+ }
440
+ .dybo-sidebar__footer {
441
+ padding: 14px 16px;
442
+ border-top: 1px solid rgba(255, 255, 255, 0.07);
443
+ display: flex;
444
+ flex-direction: column;
445
+ gap: 10px;
446
+ }
447
+
448
+ /* ---- Nav item ---- */
449
+ .dybo-nav-item {
450
+ display: flex;
451
+ align-items: center;
452
+ gap: 10px;
453
+ padding: 9px 12px;
454
+ border-radius: 8px;
455
+ color: var(--dybo-sidebar-text);
456
+ font-size: var(--dybo-font-size-sm);
457
+ font-weight: var(--dybo-font-weight-medium);
458
+ text-decoration: none;
459
+ cursor: pointer;
460
+ border: none;
461
+ background: transparent;
462
+ width: 100%;
463
+ text-align: left;
464
+ transition:
465
+ background 0.15s,
466
+ color 0.15s;
467
+ }
468
+ .dybo-nav-item:hover {
469
+ background: var(--dybo-sidebar-hover);
470
+ color: #ffffff;
471
+ }
472
+ .dybo-nav-item--active {
473
+ background: var(--dybo-color-brand-blue-yonder);
474
+ color: #ffffff;
475
+ }
476
+ .dybo-nav-item__dot {
477
+ width: 7px;
478
+ height: 7px;
479
+ border-radius: 50%;
480
+ background: currentColor;
481
+ opacity: 0.55;
482
+ flex-shrink: 0;
483
+ }
484
+ .dybo-nav-item--active .dybo-nav-item__dot {
485
+ opacity: 1;
486
+ }
487
+
488
+ /* ---- Top bar ---- */
489
+ .dybo-topbar {
490
+ height: var(--dybo-topbar-height);
491
+ background: var(--dybo-sidebar-bg);
492
+ border-bottom: 3px solid var(--dybo-color-brand-blue-yonder);
493
+ display: flex;
494
+ align-items: center;
495
+ padding: 0 28px;
496
+ gap: 12px;
497
+ flex-shrink: 0;
498
+ }
499
+ .dybo-topbar__title {
500
+ font-size: 20px;
501
+ font-weight: var(--dybo-font-weight-semibold);
502
+ color: #ffffff;
503
+ letter-spacing: -0.2px;
504
+ flex-grow: 1;
505
+ }
506
+
507
+ /* ---- Main content area ---- */
508
+ .dybo-main {
509
+ flex-grow: 1;
510
+ min-width: 0;
511
+ display: flex;
512
+ flex-direction: column;
513
+ }
514
+ .dybo-content {
515
+ padding: 28px;
516
+ flex-grow: 1;
517
+ }
518
+
519
+ /* ---- Data table ---- */
520
+ .dybo-table-wrap {
521
+ overflow-x: auto;
522
+ border-radius: var(--dybo-radius-sm);
523
+ }
524
+ .dybo-table {
525
+ border-collapse: collapse;
526
+ width: 100%;
527
+ font-size: var(--dybo-font-size-sm);
528
+ background: var(--dybo-surface-card-solid);
529
+ }
530
+ .dybo-table th,
531
+ .dybo-table td {
532
+ padding: 10px 14px;
533
+ border-bottom: 1px solid rgba(194, 199, 207, 0.4);
534
+ white-space: nowrap;
535
+ }
536
+ .dybo-table thead th {
537
+ position: sticky;
538
+ top: 0;
539
+ background: rgba(230, 234, 240, 0.95);
540
+ color: var(--dybo-color-text-muted);
541
+ font-weight: var(--dybo-font-weight-semibold);
542
+ font-size: var(--dybo-font-size-xs);
543
+ text-transform: uppercase;
544
+ letter-spacing: 0.5px;
545
+ text-align: right;
546
+ border-bottom: 2px solid rgba(194, 199, 207, 0.6);
547
+ }
548
+ .dybo-table thead th.left,
549
+ .dybo-table td.left {
550
+ text-align: left;
551
+ }
552
+ .dybo-table td {
553
+ text-align: right;
554
+ color: var(--dybo-color-text-muted);
555
+ font-variant-numeric: tabular-nums;
556
+ }
557
+ .dybo-table td.left {
558
+ color: var(--dybo-color-text-primary);
559
+ font-weight: var(--dybo-font-weight-medium);
560
+ }
561
+ .dybo-table tbody tr:nth-child(even) {
562
+ background: rgba(240, 241, 244, 0.45);
563
+ }
564
+ .dybo-table tbody tr:hover {
565
+ background: rgba(88, 120, 167, 0.07);
566
+ }
567
+ .dybo-table tbody tr.dybo-table__row--clickable {
568
+ cursor: pointer;
569
+ }
570
+
571
+ /* ---- Tabs ---- */
572
+ .dybo-tabs {
573
+ display: flex;
574
+ flex-wrap: wrap;
575
+ gap: 4px;
576
+ border-bottom: 2px solid rgba(194, 199, 207, 0.5);
577
+ margin-bottom: var(--dybo-space-200);
578
+ }
579
+ .dybo-tab {
580
+ border: none;
581
+ background: transparent;
582
+ color: var(--dybo-color-text-muted);
583
+ font-family: inherit;
584
+ font-weight: var(--dybo-font-weight-semibold);
585
+ font-size: var(--dybo-font-size-sm);
586
+ padding: 9px 14px;
587
+ border-radius: 8px 8px 0 0;
588
+ border-bottom: 2px solid transparent;
589
+ margin-bottom: -2px;
590
+ cursor: pointer;
591
+ transition:
592
+ color 0.15s,
593
+ background 0.15s;
594
+ }
595
+ .dybo-tab:hover {
596
+ color: var(--dybo-color-text-primary);
597
+ background: rgba(88, 120, 167, 0.07);
598
+ }
599
+ .dybo-tab--active {
600
+ color: var(--dybo-color-text-primary);
601
+ border-bottom-color: var(--dybo-color-brand-blue-yonder);
602
+ }
603
+
604
+ /* ---- Overview grid ---- */
605
+ .dybo-overview-grid {
606
+ display: grid;
607
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
608
+ gap: 1px;
609
+ background: rgba(194, 199, 207, 0.4);
610
+ border-radius: var(--dybo-radius-sm);
611
+ overflow: hidden;
612
+ }
613
+ .dybo-overview-field {
614
+ background: var(--dybo-surface-card-solid);
615
+ padding: 12px 18px;
616
+ display: flex;
617
+ flex-direction: column;
618
+ gap: 4px;
619
+ }
620
+ .dybo-overview-field__label {
621
+ font-size: var(--dybo-font-size-xs);
622
+ text-transform: uppercase;
623
+ letter-spacing: 0.5px;
624
+ color: var(--dybo-color-text-muted);
625
+ font-weight: var(--dybo-font-weight-semibold);
626
+ }
627
+ .dybo-overview-field__value {
628
+ font-size: var(--dybo-font-size-md);
629
+ color: var(--dybo-color-text-primary);
630
+ font-weight: var(--dybo-font-weight-medium);
631
+ }
632
+
633
+ /* ---- Login card ---- */
634
+ .dybo-login-wrap {
635
+ min-height: 100vh;
636
+ display: flex;
637
+ align-items: center;
638
+ justify-content: center;
639
+ background: var(--dybo-surface-page);
640
+ padding: 24px;
641
+ }
642
+ .dybo-login-card {
643
+ width: 100%;
644
+ max-width: 380px;
645
+ padding: 36px 32px;
646
+ background: var(--dybo-surface-card);
647
+ border: var(--dybo-border-sm) solid var(--dybo-line-stroke);
648
+ border-radius: var(--dybo-radius-md);
649
+ box-shadow: var(--dybo-elevation-card);
650
+ backdrop-filter: blur(16px);
651
+ -webkit-backdrop-filter: blur(16px);
652
+ }
653
+ .dybo-login-card__subtitle {
654
+ text-align: center;
655
+ color: var(--dybo-color-text-muted);
656
+ font-size: var(--dybo-font-size-sm);
657
+ margin-bottom: 24px;
658
+ margin-top: 4px;
659
+ }
660
+
661
+ /* ---- Modal ---- */
662
+ .dybo-modal-backdrop {
663
+ position: fixed;
664
+ inset: 0;
665
+ background: rgba(10, 19, 35, 0.45);
666
+ backdrop-filter: blur(2px);
667
+ -webkit-backdrop-filter: blur(2px);
668
+ display: flex;
669
+ align-items: center;
670
+ justify-content: center;
671
+ z-index: 1000;
672
+ padding: 24px;
673
+ }
674
+ .dybo-modal {
675
+ width: 100%;
676
+ max-width: 520px;
677
+ background: var(--dybo-surface-card-solid);
678
+ border: var(--dybo-border-sm) solid var(--dybo-line-stroke);
679
+ border-radius: var(--dybo-radius-md);
680
+ box-shadow: 0 24px 64px rgba(10, 19, 35, 0.2);
681
+ display: flex;
682
+ flex-direction: column;
683
+ max-height: calc(100vh - 48px);
684
+ overflow: hidden;
685
+ }
686
+ .dybo-modal__header {
687
+ display: flex;
688
+ align-items: center;
689
+ justify-content: space-between;
690
+ padding: 20px 24px 16px;
691
+ border-bottom: 1px solid rgba(194, 199, 207, 0.4);
692
+ flex-shrink: 0;
693
+ }
694
+ .dybo-modal__title {
695
+ font-size: var(--dybo-font-size-lg);
696
+ font-weight: var(--dybo-font-weight-semibold);
697
+ color: var(--dybo-color-text-primary);
698
+ margin: 0;
699
+ }
700
+ .dybo-modal__close {
701
+ background: transparent;
702
+ border: none;
703
+ cursor: pointer;
704
+ color: var(--dybo-color-text-muted);
705
+ padding: 4px;
706
+ border-radius: 6px;
707
+ display: flex;
708
+ align-items: center;
709
+ justify-content: center;
710
+ transition:
711
+ background 0.15s,
712
+ color 0.15s;
713
+ }
714
+ .dybo-modal__close:hover {
715
+ background: rgba(194, 199, 207, 0.3);
716
+ color: var(--dybo-color-text-primary);
717
+ }
718
+ .dybo-modal__body {
719
+ padding: 24px;
720
+ overflow-y: auto;
721
+ flex-grow: 1;
722
+ }
723
+ .dybo-modal__footer {
724
+ padding: 16px 24px 20px;
725
+ border-top: 1px solid rgba(194, 199, 207, 0.4);
726
+ display: flex;
727
+ gap: 12px;
728
+ justify-content: flex-end;
729
+ flex-shrink: 0;
730
+ }