@dybo-ai/design 1.2.0 → 2.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.
@@ -0,0 +1,1112 @@
1
+ /* =========================================================================
2
+ DYBO Design System — LEGACY theme (frozen)
3
+ This is the exact theme.css shipped through v1.x, kept for any consumer that
4
+ still needs the original visual system built independently of DYBO's real
5
+ product screens. Do not edit — this file is frozen. New work should use the
6
+ default theme.css instead. Removal planned for 3.0.
7
+ ========================================================================= */
8
+
9
+ /* =========================================================================
10
+ DYBO Design System — CSS Custom Properties
11
+ Source: Figma "DYBO" (file ZHtkvTEeTYlNVbSncLyI1a)
12
+ Style: Glassmorphism (translucent surfaces + backdrop blur)
13
+ Font: Urbanist — load from Google Fonts:
14
+ <link href="https://fonts.googleapis.com/css2?family=Urbanist:wght@400;500;600;700&display=swap" rel="stylesheet">
15
+ ========================================================================= */
16
+
17
+ :root {
18
+ /* ---- Brand ---- */
19
+ --dybo-color-brand-logo: #1d335c;
20
+ --dybo-color-brand-blue-yonder: #5878a7;
21
+ --dybo-color-brand-dark-orb: #141927;
22
+ --dybo-color-brand-cultured: #f3f6fa;
23
+ --dybo-color-brand-gainsboro: #dbdfe5;
24
+ --dybo-color-brand-dandelion: #e9d72f;
25
+
26
+ /* ---- Portal (ticket-management / client portal) ---- */
27
+ --dybo-portal-surface-operator: #e4e4e4;
28
+ --dybo-portal-surface-card-high: rgba(240, 241, 244, 0.92);
29
+ --dybo-portal-surface-card-high-dark: rgba(18, 26, 45, 0.92);
30
+ --dybo-portal-shadow-level-1: 0px 4px 8px #1419271f;
31
+ --dybo-portal-shadow-level-2: 0px 8px 28px #14192729;
32
+ --dybo-portal-drawer-backdrop: rgba(10, 15, 25, 0.3);
33
+ --dybo-portal-feedback-success-light: #90eabd;
34
+ --dybo-portal-feedback-success-bg: #d6f0e3;
35
+ --dybo-portal-feedback-warning: #cc6600;
36
+ --dybo-portal-feedback-warning-bg: #fff2e5;
37
+ --dybo-portal-feedback-destructive: #fa3848;
38
+ --dybo-portal-feedback-info-bg: #d9e3f0;
39
+ --dybo-portal-priority-urgent-bg: rgba(250, 56, 72, 0.12);
40
+ --dybo-portal-priority-urgent-fg: #c81e2c;
41
+ --dybo-portal-priority-high-bg: rgba(255, 128, 0, 0.15);
42
+ --dybo-portal-priority-high-fg: #a85400;
43
+ --dybo-portal-priority-medium-bg: rgba(242, 185, 13, 0.2);
44
+ --dybo-portal-priority-medium-fg: #9d6607;
45
+ --dybo-portal-priority-low-bg: rgba(151, 163, 180, 0.24);
46
+ --dybo-portal-priority-low-fg: #50627c;
47
+ --dybo-portal-priority-none-bg: rgba(192, 198, 206, 0.35);
48
+ --dybo-portal-priority-none-fg: #677283;
49
+ --dybo-portal-ticket-open-bg: #d9e3f2;
50
+ --dybo-portal-ticket-open-fg: #2e5b9e;
51
+ --dybo-portal-ticket-pending-bg: #e9dff6;
52
+ --dybo-portal-ticket-pending-fg: #7146aa;
53
+ --dybo-portal-ticket-snoozed-bg: #d7dde5;
54
+ --dybo-portal-ticket-snoozed-fg: #58687e;
55
+ --dybo-portal-ticket-resolved-bg: #d6f0e3;
56
+ --dybo-portal-ticket-resolved-fg: #1a6640;
57
+ --dybo-icon-rail-width: 80px;
58
+
59
+ /* ---- Text ---- */
60
+ --dybo-color-text-primary: #0a1323;
61
+ --dybo-color-text-secondary: #f4f4f6;
62
+ --dybo-color-text-muted: #545f74;
63
+ --dybo-color-text-gray: #868686;
64
+
65
+ /* ---- Neutral ---- */
66
+ --dybo-color-black: #000000;
67
+ --dybo-color-white: #ffffff;
68
+ --dybo-color-grayish-blue-50: #f4f4f6;
69
+ --dybo-color-grayish-blue-300: #c2c7cf;
70
+ --dybo-color-midnight-sky-300: #e6e7f7;
71
+ --dybo-color-midnight-sky-700: #48495d;
72
+
73
+ /* ---- Surfaces (glass) ---- */
74
+ --dybo-surface-page: #e6eaf0;
75
+ --dybo-surface-card: rgba(240, 241, 244, 0.7);
76
+ --dybo-surface-card-solid: rgba(240, 241, 244, 0.9);
77
+ --dybo-surface-input: rgba(244, 244, 246, 0.7);
78
+
79
+ /* ---- Lines & shadows ---- */
80
+ --dybo-line-stroke: #ffffff;
81
+ --dybo-shadow-key: rgba(10, 19, 35, 0.1);
82
+ --dybo-shadow-ambient: rgba(170, 180, 192, 0.73);
83
+ --dybo-elevation-card:
84
+ 0 8px 24px rgba(10, 19, 35, 0.1), 0 2px 8px rgba(170, 180, 192, 0.35);
85
+ --dybo-drop-shadow: 0 4px 4px rgba(10, 19, 35, 0.1);
86
+
87
+ /* ---- Semantic (recommended mapping) ---- */
88
+ --dybo-success: #20a156;
89
+ --dybo-success-bright: #28ca6b;
90
+ --dybo-success-bg: #eafbf1;
91
+ --dybo-warning: #f16c24;
92
+ --dybo-warning-bg: #ffe5d8;
93
+ --dybo-danger: #a21a17;
94
+ --dybo-danger-bg: #fffbfb;
95
+ --dybo-info: #0399ae;
96
+ --dybo-info-bg: #d3f7fc;
97
+
98
+ /* ---- Status / priority (DYBO domain) ---- */
99
+ --dybo-status-resolved-fg: #0399ae;
100
+ --dybo-status-resolved-bg: #d3f7fc;
101
+ --dybo-status-high-priority-fg: #682a5d;
102
+ --dybo-status-high-priority-bg: #eee0ec;
103
+ --dybo-status-medium-priority-fg: #f16c24;
104
+ --dybo-status-medium-priority-bg: #ffe5d8;
105
+ --dybo-status-brand-fg: #0a1323;
106
+ --dybo-status-brand-bg: #d0d3fe;
107
+
108
+ /* ---- Typography ---- */
109
+ --dybo-font-family: "Urbanist", sans-serif;
110
+ --dybo-font-weight-regular: 400;
111
+ --dybo-font-weight-medium: 500;
112
+ --dybo-font-weight-semibold: 600;
113
+ --dybo-font-weight-bold: 700;
114
+
115
+ --dybo-font-size-xs: 12px; /* Uppercase / Tiny */
116
+ --dybo-font-size-sm: 14px; /* Small body / H6 / links / placeholder */
117
+ --dybo-font-size-md: 16px; /* Body / Link */
118
+ --dybo-font-size-lg: 18px; /* Subtitle */
119
+ --dybo-font-size-xl: 24px; /* Medium Title */
120
+
121
+ /* ---- Spacing ---- */
122
+ --dybo-space-000: 0;
123
+ --dybo-space-050: 4px;
124
+ --dybo-space-100: 8px;
125
+ --dybo-space-150: 12px;
126
+ --dybo-space-200: 16px;
127
+ --dybo-space-250: 20px;
128
+ --dybo-space-400: 32px;
129
+
130
+ /* ---- Radius ---- */
131
+ --dybo-radius-sm: 12px;
132
+ --dybo-radius-alt: 16px;
133
+ --dybo-radius-md: 20px;
134
+ --dybo-radius-full: 999px;
135
+
136
+ /* ---- Opacity ---- */
137
+ --dybo-opacity-light: 0.16;
138
+ --dybo-opacity-medium: 0.32;
139
+ --dybo-opacity-intense: 0.64;
140
+ --dybo-opacity-semi-opaque: 0.4;
141
+ --dybo-opacity-semi-transparent: 0.08;
142
+
143
+ /* ---- Border ---- */
144
+ --dybo-border-sm: 1px;
145
+
146
+ /* ---- Glass ---- */
147
+ --dybo-glass-blur: 4px;
148
+
149
+ /* ---- Sidebar ---- */
150
+ --dybo-sidebar-bg: #1d2433;
151
+ --dybo-sidebar-hover: #273043;
152
+ --dybo-sidebar-text: #c9cdd6;
153
+ --dybo-sidebar-width: 240px;
154
+ --dybo-topbar-height: 60px;
155
+ }
156
+
157
+ /* =========================================================================
158
+ Tailwind V4 — @theme block
159
+ Generates utilities: bg-dybo-*, text-dybo-*, rounded-dybo-*, shadow-dybo-*
160
+ Usage in consuming app:
161
+ @import "tailwindcss";
162
+ @import "@dybo-ai/design/legacy-theme.css";
163
+ ========================================================================= */
164
+ @theme {
165
+ /* Colors */
166
+ --color-dybo-logo: #1d335c;
167
+ --color-dybo-blue: #5878a7;
168
+ --color-dybo-dark-orb: #141927;
169
+ --color-dybo-cultured: #f3f6fa;
170
+ --color-dybo-gainsboro: #dbdfe5;
171
+ --color-dybo-ink: #0a1323;
172
+ --color-dybo-on-dark: #f4f4f6;
173
+ --color-dybo-muted: #545f74;
174
+ --color-dybo-gray: #868686;
175
+ --color-dybo-page: #e6eaf0;
176
+ --color-dybo-stroke: #ffffff;
177
+ --color-dybo-line: #c2c7cf;
178
+ --color-dybo-success: #20a156;
179
+ --color-dybo-success-bg: #eafbf1;
180
+ --color-dybo-warning: #f16c24;
181
+ --color-dybo-warning-bg: #ffe5d8;
182
+ --color-dybo-danger: #a21a17;
183
+ --color-dybo-danger-bg: #fffbfb;
184
+ --color-dybo-info: #0399ae;
185
+ --color-dybo-info-bg: #d3f7fc;
186
+ --color-dybo-sidebar: #1d2433;
187
+ --color-dybo-dandelion: #e9d72f;
188
+ --color-dybo-operator-page: #e4e4e4;
189
+
190
+ /* Border radius */
191
+ --radius-dybo-sm: 12px;
192
+ --radius-dybo-alt: 16px;
193
+ --radius-dybo-md: 20px;
194
+ --radius-dybo-full: 999px;
195
+
196
+ /* Shadows */
197
+ --shadow-dybo-card:
198
+ 0 8px 24px rgba(10, 19, 35, 0.1), 0 2px 8px rgba(170, 180, 192, 0.35);
199
+ --shadow-dybo-drop: 0 4px 4px rgba(10, 19, 35, 0.1);
200
+ --shadow-dybo-portal-1: 0px 4px 8px #1419271f;
201
+ --shadow-dybo-portal-2: 0px 8px 28px #14192729;
202
+
203
+ /* Backdrop blur */
204
+ --blur-dybo: 4px;
205
+
206
+ /* Font */
207
+ --font-dybo: "Urbanist", sans-serif;
208
+
209
+ /* Spacing extras */
210
+ --spacing-dybo-050: 4px;
211
+ --spacing-dybo-100: 8px;
212
+ --spacing-dybo-150: 12px;
213
+ --spacing-dybo-200: 16px;
214
+ --spacing-dybo-250: 20px;
215
+ --spacing-dybo-400: 32px;
216
+ }
217
+
218
+ /* ---- Base + reusable helpers ---------------------------------------- */
219
+
220
+ body {
221
+ font-family: var(--dybo-font-family);
222
+ color: var(--dybo-color-text-primary);
223
+ background: var(--dybo-surface-page);
224
+ }
225
+
226
+ /* Glassmorphism card — the signature DYBO surface */
227
+ .dybo-glass {
228
+ background: var(--dybo-surface-card);
229
+ border: var(--dybo-border-sm) solid var(--dybo-line-stroke);
230
+ border-radius: var(--dybo-radius-md);
231
+ box-shadow: var(--dybo-elevation-card);
232
+ backdrop-filter: blur(var(--dybo-glass-blur));
233
+ -webkit-backdrop-filter: blur(var(--dybo-glass-blur));
234
+ }
235
+
236
+ /* Buttons */
237
+ .dybo-btn {
238
+ font-family: inherit;
239
+ font-size: var(--dybo-font-size-md);
240
+ font-weight: var(--dybo-font-weight-medium);
241
+ letter-spacing: 1px;
242
+ padding: var(--dybo-space-150) var(--dybo-space-400);
243
+ border-radius: var(--dybo-radius-sm);
244
+ border: none;
245
+ cursor: pointer;
246
+ transition:
247
+ background 0.15s,
248
+ opacity 0.15s;
249
+ }
250
+ .dybo-btn--primary {
251
+ background: var(--dybo-color-text-primary);
252
+ color: var(--dybo-color-white);
253
+ }
254
+ .dybo-btn--primary:hover {
255
+ background: var(--dybo-color-brand-dark-orb);
256
+ }
257
+ .dybo-btn--secondary {
258
+ background: var(--dybo-color-grayish-blue-50);
259
+ color: var(--dybo-color-text-primary);
260
+ }
261
+ .dybo-btn--secondary:hover {
262
+ background: var(--dybo-color-brand-gainsboro);
263
+ }
264
+ .dybo-btn--ghost {
265
+ background: transparent;
266
+ color: var(--dybo-color-text-primary);
267
+ border: 1px solid var(--dybo-color-grayish-blue-300);
268
+ }
269
+ .dybo-btn--ghost:hover {
270
+ background: var(--dybo-color-grayish-blue-50);
271
+ }
272
+ .dybo-btn--danger {
273
+ background: var(--dybo-danger);
274
+ color: var(--dybo-color-white);
275
+ }
276
+ .dybo-btn--danger:hover {
277
+ opacity: 0.88;
278
+ }
279
+ .dybo-btn:disabled {
280
+ opacity: var(--dybo-opacity-intense);
281
+ cursor: not-allowed;
282
+ }
283
+
284
+ /* Input field */
285
+ .dybo-input {
286
+ font-family: inherit;
287
+ font-size: var(--dybo-font-size-sm);
288
+ color: var(--dybo-color-text-primary);
289
+ background: var(--dybo-surface-input);
290
+ border: var(--dybo-border-sm) solid var(--dybo-line-stroke);
291
+ border-radius: var(--dybo-radius-sm);
292
+ box-shadow: var(--dybo-drop-shadow);
293
+ padding: var(--dybo-space-150) var(--dybo-space-200);
294
+ width: 100%;
295
+ transition:
296
+ border-color 0.15s,
297
+ box-shadow 0.15s;
298
+ }
299
+ .dybo-input::placeholder {
300
+ color: var(--dybo-color-text-muted);
301
+ letter-spacing: 1px;
302
+ }
303
+ .dybo-input:focus {
304
+ outline: none;
305
+ border-color: var(--dybo-color-brand-blue-yonder);
306
+ box-shadow: 0 0 0 3px rgba(88, 120, 167, 0.18);
307
+ }
308
+
309
+ /* Select field */
310
+ .dybo-select {
311
+ font-family: inherit;
312
+ font-size: var(--dybo-font-size-sm);
313
+ color: var(--dybo-color-text-primary);
314
+ background: var(--dybo-surface-input);
315
+ border: var(--dybo-border-sm) solid var(--dybo-line-stroke);
316
+ border-radius: var(--dybo-radius-sm);
317
+ box-shadow: var(--dybo-drop-shadow);
318
+ padding: var(--dybo-space-150) var(--dybo-space-200);
319
+ width: 100%;
320
+ cursor: pointer;
321
+ appearance: none;
322
+ 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");
323
+ background-repeat: no-repeat;
324
+ background-position: right 14px center;
325
+ padding-right: 36px;
326
+ transition:
327
+ border-color 0.15s,
328
+ box-shadow 0.15s;
329
+ }
330
+ .dybo-select:focus {
331
+ outline: none;
332
+ border-color: var(--dybo-color-brand-blue-yonder);
333
+ box-shadow: 0 0 0 3px rgba(88, 120, 167, 0.18);
334
+ }
335
+
336
+ /* Type presets */
337
+ .dybo-title {
338
+ font-size: var(--dybo-font-size-xl);
339
+ font-weight: var(--dybo-font-weight-regular);
340
+ line-height: 1.35;
341
+ letter-spacing: 1px;
342
+ }
343
+ .dybo-subtitle {
344
+ font-size: var(--dybo-font-size-lg);
345
+ font-weight: var(--dybo-font-weight-regular);
346
+ line-height: 1.35;
347
+ letter-spacing: 1px;
348
+ }
349
+ .dybo-body {
350
+ font-size: var(--dybo-font-size-md);
351
+ font-weight: var(--dybo-font-weight-medium);
352
+ line-height: 1.5;
353
+ }
354
+ .dybo-body-sm {
355
+ font-size: var(--dybo-font-size-sm);
356
+ font-weight: var(--dybo-font-weight-medium);
357
+ line-height: 1.15;
358
+ }
359
+ .dybo-link {
360
+ font-size: var(--dybo-font-size-sm);
361
+ font-weight: var(--dybo-font-weight-bold);
362
+ line-height: 1.5;
363
+ }
364
+ .dybo-h6 {
365
+ font-size: var(--dybo-font-size-sm);
366
+ font-weight: var(--dybo-font-weight-semibold);
367
+ line-height: 1.5;
368
+ letter-spacing: 1px;
369
+ }
370
+ .dybo-uppercase {
371
+ font-size: var(--dybo-font-size-xs);
372
+ font-weight: var(--dybo-font-weight-medium);
373
+ line-height: 1.35;
374
+ letter-spacing: 1px;
375
+ text-transform: uppercase;
376
+ }
377
+
378
+ /* Status badges */
379
+ .dybo-badge {
380
+ display: inline-block;
381
+ padding: 2px 10px;
382
+ border-radius: var(--dybo-radius-full);
383
+ font-size: var(--dybo-font-size-xs);
384
+ font-weight: var(--dybo-font-weight-semibold);
385
+ letter-spacing: 1px;
386
+ }
387
+ .dybo-badge--resolved {
388
+ color: var(--dybo-status-resolved-fg);
389
+ background: var(--dybo-status-resolved-bg);
390
+ }
391
+ .dybo-badge--high {
392
+ color: var(--dybo-status-high-priority-fg);
393
+ background: var(--dybo-status-high-priority-bg);
394
+ }
395
+ .dybo-badge--medium {
396
+ color: var(--dybo-status-medium-priority-fg);
397
+ background: var(--dybo-status-medium-priority-bg);
398
+ }
399
+ .dybo-badge--brand {
400
+ color: var(--dybo-status-brand-fg);
401
+ background: var(--dybo-status-brand-bg);
402
+ }
403
+ .dybo-badge--success {
404
+ color: var(--dybo-success);
405
+ background: var(--dybo-success-bg);
406
+ }
407
+ .dybo-badge--warning {
408
+ color: var(--dybo-warning);
409
+ background: var(--dybo-warning-bg);
410
+ }
411
+ .dybo-badge--danger {
412
+ color: var(--dybo-danger);
413
+ background: var(--dybo-danger-bg);
414
+ }
415
+
416
+ /* ---- Alert ---- */
417
+ .dybo-alert {
418
+ display: flex;
419
+ align-items: flex-start;
420
+ gap: var(--dybo-space-150);
421
+ padding: var(--dybo-space-150) var(--dybo-space-200);
422
+ border-radius: var(--dybo-radius-sm);
423
+ border-left: 4px solid transparent;
424
+ font-size: var(--dybo-font-size-sm);
425
+ font-weight: var(--dybo-font-weight-medium);
426
+ line-height: 1.5;
427
+ }
428
+ .dybo-alert--success {
429
+ background: var(--dybo-success-bg);
430
+ border-color: var(--dybo-success);
431
+ color: #14703b;
432
+ }
433
+ .dybo-alert--warning {
434
+ background: var(--dybo-warning-bg);
435
+ border-color: var(--dybo-warning);
436
+ color: #a54a0e;
437
+ }
438
+ .dybo-alert--danger {
439
+ background: var(--dybo-danger-bg);
440
+ border-color: var(--dybo-danger);
441
+ color: var(--dybo-danger);
442
+ }
443
+ .dybo-alert--info {
444
+ background: var(--dybo-info-bg);
445
+ border-color: var(--dybo-info);
446
+ color: #026f80;
447
+ }
448
+
449
+ /* ---- App shell layout ---- */
450
+ .dybo-app-shell {
451
+ display: flex;
452
+ min-height: 100vh;
453
+ background: var(--dybo-surface-page);
454
+ }
455
+
456
+ /* ---- Sidebar ---- */
457
+ .dybo-sidebar {
458
+ width: var(--dybo-sidebar-width);
459
+ flex-shrink: 0;
460
+ background: var(--dybo-sidebar-bg);
461
+ color: var(--dybo-sidebar-text);
462
+ display: flex;
463
+ flex-direction: column;
464
+ position: sticky;
465
+ top: 0;
466
+ height: 100vh;
467
+ overflow-y: auto;
468
+ }
469
+ .dybo-sidebar__brand {
470
+ padding: 22px 20px 18px;
471
+ border-bottom: 1px solid rgba(255, 255, 255, 0.07);
472
+ }
473
+ .dybo-sidebar__nav {
474
+ padding: 14px 12px;
475
+ display: flex;
476
+ flex-direction: column;
477
+ gap: 2px;
478
+ flex-grow: 1;
479
+ }
480
+ .dybo-sidebar__section {
481
+ font-size: var(--dybo-font-size-xs);
482
+ text-transform: uppercase;
483
+ letter-spacing: 1px;
484
+ color: rgba(255, 255, 255, 0.45);
485
+ padding: 18px 12px 7px;
486
+ font-weight: var(--dybo-font-weight-bold);
487
+ }
488
+ .dybo-sidebar__footer {
489
+ padding: 14px 16px;
490
+ border-top: 1px solid rgba(255, 255, 255, 0.07);
491
+ display: flex;
492
+ flex-direction: column;
493
+ gap: 10px;
494
+ }
495
+
496
+ /* ---- Nav item ---- */
497
+ .dybo-nav-item {
498
+ display: flex;
499
+ align-items: center;
500
+ gap: 10px;
501
+ padding: 9px 12px;
502
+ border-radius: 8px;
503
+ color: var(--dybo-sidebar-text);
504
+ font-size: var(--dybo-font-size-sm);
505
+ font-weight: var(--dybo-font-weight-medium);
506
+ text-decoration: none;
507
+ cursor: pointer;
508
+ border: none;
509
+ background: transparent;
510
+ width: 100%;
511
+ text-align: left;
512
+ transition:
513
+ background 0.15s,
514
+ color 0.15s;
515
+ }
516
+ .dybo-nav-item:hover {
517
+ background: var(--dybo-sidebar-hover);
518
+ color: #ffffff;
519
+ }
520
+ .dybo-nav-item--active {
521
+ background: var(--dybo-color-brand-blue-yonder);
522
+ color: #ffffff;
523
+ }
524
+ .dybo-nav-item__dot {
525
+ width: 7px;
526
+ height: 7px;
527
+ border-radius: 50%;
528
+ background: currentColor;
529
+ opacity: 0.55;
530
+ flex-shrink: 0;
531
+ }
532
+ .dybo-nav-item--active .dybo-nav-item__dot {
533
+ opacity: 1;
534
+ }
535
+
536
+ /* ---- Top bar ---- */
537
+ .dybo-topbar {
538
+ height: var(--dybo-topbar-height);
539
+ background: var(--dybo-sidebar-bg);
540
+ border-bottom: 3px solid var(--dybo-color-brand-blue-yonder);
541
+ display: flex;
542
+ align-items: center;
543
+ padding: 0 28px;
544
+ gap: 12px;
545
+ flex-shrink: 0;
546
+ }
547
+ .dybo-topbar__title {
548
+ font-size: 20px;
549
+ font-weight: var(--dybo-font-weight-semibold);
550
+ color: #ffffff;
551
+ letter-spacing: -0.2px;
552
+ flex-grow: 1;
553
+ }
554
+
555
+ /* ---- Main content area ---- */
556
+ .dybo-main {
557
+ flex-grow: 1;
558
+ min-width: 0;
559
+ display: flex;
560
+ flex-direction: column;
561
+ }
562
+ .dybo-content {
563
+ padding: 28px;
564
+ flex-grow: 1;
565
+ }
566
+
567
+ /* ---- Data table ---- */
568
+ .dybo-table-wrap {
569
+ overflow-x: auto;
570
+ border-radius: var(--dybo-radius-sm);
571
+ }
572
+ .dybo-table {
573
+ border-collapse: collapse;
574
+ width: 100%;
575
+ font-size: var(--dybo-font-size-sm);
576
+ background: var(--dybo-surface-card-solid);
577
+ }
578
+ .dybo-table th,
579
+ .dybo-table td {
580
+ padding: 10px 14px;
581
+ border-bottom: 1px solid rgba(194, 199, 207, 0.4);
582
+ white-space: nowrap;
583
+ }
584
+ .dybo-table thead th {
585
+ position: sticky;
586
+ top: 0;
587
+ background: rgba(230, 234, 240, 0.95);
588
+ color: var(--dybo-color-text-muted);
589
+ font-weight: var(--dybo-font-weight-semibold);
590
+ font-size: var(--dybo-font-size-xs);
591
+ text-transform: uppercase;
592
+ letter-spacing: 0.5px;
593
+ text-align: right;
594
+ border-bottom: 2px solid rgba(194, 199, 207, 0.6);
595
+ }
596
+ .dybo-table thead th.left,
597
+ .dybo-table td.left {
598
+ text-align: left;
599
+ }
600
+ .dybo-table td {
601
+ text-align: right;
602
+ color: var(--dybo-color-text-muted);
603
+ font-variant-numeric: tabular-nums;
604
+ }
605
+ .dybo-table td.left {
606
+ color: var(--dybo-color-text-primary);
607
+ font-weight: var(--dybo-font-weight-medium);
608
+ }
609
+ .dybo-table tbody tr:nth-child(even) {
610
+ background: rgba(240, 241, 244, 0.45);
611
+ }
612
+ .dybo-table tbody tr:hover {
613
+ background: rgba(88, 120, 167, 0.07);
614
+ }
615
+ .dybo-table tbody tr.dybo-table__row--clickable {
616
+ cursor: pointer;
617
+ }
618
+
619
+ /* ---- Tabs ---- */
620
+ .dybo-tabs {
621
+ display: flex;
622
+ flex-wrap: wrap;
623
+ gap: 4px;
624
+ border-bottom: 2px solid rgba(194, 199, 207, 0.5);
625
+ margin-bottom: var(--dybo-space-200);
626
+ }
627
+ .dybo-tab {
628
+ border: none;
629
+ background: transparent;
630
+ color: var(--dybo-color-text-muted);
631
+ font-family: inherit;
632
+ font-weight: var(--dybo-font-weight-semibold);
633
+ font-size: var(--dybo-font-size-sm);
634
+ padding: 9px 14px;
635
+ border-radius: 8px 8px 0 0;
636
+ border-bottom: 2px solid transparent;
637
+ margin-bottom: -2px;
638
+ cursor: pointer;
639
+ transition:
640
+ color 0.15s,
641
+ background 0.15s;
642
+ }
643
+ .dybo-tab:hover {
644
+ color: var(--dybo-color-text-primary);
645
+ background: rgba(88, 120, 167, 0.07);
646
+ }
647
+ .dybo-tab--active {
648
+ color: var(--dybo-color-text-primary);
649
+ border-bottom-color: var(--dybo-color-brand-blue-yonder);
650
+ }
651
+
652
+ /* ---- Overview grid ---- */
653
+ .dybo-overview-grid {
654
+ display: grid;
655
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
656
+ gap: 1px;
657
+ background: rgba(194, 199, 207, 0.4);
658
+ border-radius: var(--dybo-radius-sm);
659
+ overflow: hidden;
660
+ }
661
+ .dybo-overview-field {
662
+ background: var(--dybo-surface-card-solid);
663
+ padding: 12px 18px;
664
+ display: flex;
665
+ flex-direction: column;
666
+ gap: 4px;
667
+ }
668
+ .dybo-overview-field__label {
669
+ font-size: var(--dybo-font-size-xs);
670
+ text-transform: uppercase;
671
+ letter-spacing: 0.5px;
672
+ color: var(--dybo-color-text-muted);
673
+ font-weight: var(--dybo-font-weight-semibold);
674
+ }
675
+ .dybo-overview-field__value {
676
+ font-size: var(--dybo-font-size-md);
677
+ color: var(--dybo-color-text-primary);
678
+ font-weight: var(--dybo-font-weight-medium);
679
+ }
680
+
681
+ /* ---- Login card ---- */
682
+ .dybo-login-wrap {
683
+ min-height: 100vh;
684
+ display: flex;
685
+ align-items: center;
686
+ justify-content: center;
687
+ background: var(--dybo-surface-page);
688
+ padding: 24px;
689
+ }
690
+ .dybo-login-card {
691
+ width: 100%;
692
+ max-width: 380px;
693
+ padding: 36px 32px;
694
+ background: var(--dybo-surface-card);
695
+ border: var(--dybo-border-sm) solid var(--dybo-line-stroke);
696
+ border-radius: var(--dybo-radius-md);
697
+ box-shadow: var(--dybo-elevation-card);
698
+ backdrop-filter: blur(16px);
699
+ -webkit-backdrop-filter: blur(16px);
700
+ }
701
+ .dybo-login-card__subtitle {
702
+ text-align: center;
703
+ color: var(--dybo-color-text-muted);
704
+ font-size: var(--dybo-font-size-sm);
705
+ margin-bottom: 24px;
706
+ margin-top: 4px;
707
+ }
708
+
709
+ /* ---- Modal ---- */
710
+ .dybo-modal-backdrop {
711
+ position: fixed;
712
+ inset: 0;
713
+ background: rgba(10, 19, 35, 0.45);
714
+ backdrop-filter: blur(2px);
715
+ -webkit-backdrop-filter: blur(2px);
716
+ display: flex;
717
+ align-items: center;
718
+ justify-content: center;
719
+ z-index: 1000;
720
+ padding: 24px;
721
+ }
722
+ .dybo-modal {
723
+ width: 100%;
724
+ max-width: 520px;
725
+ background: var(--dybo-surface-card-solid);
726
+ border: var(--dybo-border-sm) solid var(--dybo-line-stroke);
727
+ border-radius: var(--dybo-radius-md);
728
+ box-shadow: 0 24px 64px rgba(10, 19, 35, 0.2);
729
+ display: flex;
730
+ flex-direction: column;
731
+ max-height: calc(100vh - 48px);
732
+ overflow: hidden;
733
+ }
734
+ .dybo-modal__header {
735
+ display: flex;
736
+ align-items: center;
737
+ justify-content: space-between;
738
+ padding: 20px 24px 16px;
739
+ border-bottom: 1px solid rgba(194, 199, 207, 0.4);
740
+ flex-shrink: 0;
741
+ }
742
+ .dybo-modal__title {
743
+ font-size: var(--dybo-font-size-lg);
744
+ font-weight: var(--dybo-font-weight-semibold);
745
+ color: var(--dybo-color-text-primary);
746
+ margin: 0;
747
+ }
748
+ .dybo-modal__close {
749
+ background: transparent;
750
+ border: none;
751
+ cursor: pointer;
752
+ color: var(--dybo-color-text-muted);
753
+ padding: 4px;
754
+ border-radius: 6px;
755
+ display: flex;
756
+ align-items: center;
757
+ justify-content: center;
758
+ transition:
759
+ background 0.15s,
760
+ color 0.15s;
761
+ }
762
+ .dybo-modal__close:hover {
763
+ background: rgba(194, 199, 207, 0.3);
764
+ color: var(--dybo-color-text-primary);
765
+ }
766
+ .dybo-modal__body {
767
+ padding: 24px;
768
+ overflow-y: auto;
769
+ flex-grow: 1;
770
+ }
771
+ .dybo-modal__footer {
772
+ padding: 16px 24px 20px;
773
+ border-top: 1px solid rgba(194, 199, 207, 0.4);
774
+ display: flex;
775
+ gap: 12px;
776
+ justify-content: flex-end;
777
+ flex-shrink: 0;
778
+ }
779
+
780
+ .dybo-modal .dybo-input,
781
+ .dybo-modal .dybo-select,
782
+ .dybo-drawer-panel .dybo-input,
783
+ .dybo-drawer-panel .dybo-select {
784
+ background: hsl(var(--popover));
785
+ }
786
+
787
+ /* ---- Drawer (ticket-management Debbie panel pattern) ---- */
788
+ .dybo-drawer-backdrop {
789
+ position: fixed;
790
+ inset: 0;
791
+ z-index: 1000;
792
+ background: var(--dybo-portal-drawer-backdrop);
793
+ }
794
+ .dybo-drawer-panel {
795
+ position: fixed;
796
+ top: 0;
797
+ height: 100%;
798
+ width: min(380px, 90vw);
799
+ max-width: 100%;
800
+ background: hsl(var(--card));
801
+ color: hsl(var(--card-foreground));
802
+ border-color: hsl(var(--border));
803
+ box-shadow: var(--dybo-portal-shadow-level-2);
804
+ display: flex;
805
+ flex-direction: column;
806
+ z-index: 1001;
807
+ overflow: hidden;
808
+ }
809
+ .dybo-drawer-panel--right {
810
+ right: 0;
811
+ border-left: var(--dybo-border-sm) solid hsl(var(--border));
812
+ }
813
+ .dybo-drawer-panel--left {
814
+ left: 0;
815
+ border-right: var(--dybo-border-sm) solid hsl(var(--border));
816
+ }
817
+ .dybo-drawer-panel__header {
818
+ display: flex;
819
+ align-items: center;
820
+ justify-content: space-between;
821
+ flex-shrink: 0;
822
+ padding: 16px 20px;
823
+ border-bottom: 1px solid hsl(var(--border));
824
+ }
825
+ .dybo-drawer-panel__title {
826
+ font-size: var(--dybo-font-size-lg);
827
+ font-weight: var(--dybo-font-weight-semibold);
828
+ color: var(--dybo-color-text-primary);
829
+ margin: 0;
830
+ }
831
+ .dybo-drawer-panel__close {
832
+ background: transparent;
833
+ border: none;
834
+ cursor: pointer;
835
+ color: var(--dybo-color-text-muted);
836
+ padding: 4px;
837
+ border-radius: 6px;
838
+ display: flex;
839
+ align-items: center;
840
+ justify-content: center;
841
+ transition:
842
+ background 0.15s,
843
+ color 0.15s;
844
+ }
845
+ .dybo-drawer-panel__close:hover {
846
+ background: rgba(194, 199, 207, 0.3);
847
+ color: var(--dybo-color-text-primary);
848
+ }
849
+ .dybo-drawer-panel__body {
850
+ flex: 1;
851
+ min-height: 0;
852
+ overflow-y: auto;
853
+ padding: 20px;
854
+ }
855
+ .dybo-drawer-panel__body--flush {
856
+ padding: 0;
857
+ display: flex;
858
+ flex-direction: column;
859
+ }
860
+ .dybo-drawer-panel__footer {
861
+ flex-shrink: 0;
862
+ padding: 16px 20px;
863
+ border-top: 1px solid hsl(var(--border));
864
+ display: flex;
865
+ gap: 12px;
866
+ justify-content: flex-end;
867
+ }
868
+
869
+ /* =========================================================================
870
+ Portal / Ticket Management patterns
871
+ ========================================================================= */
872
+
873
+ .dybo-surface-operator {
874
+ background: var(--dybo-portal-surface-operator);
875
+ }
876
+
877
+ .dybo-shadow-level-1 {
878
+ box-shadow: var(--dybo-portal-shadow-level-1);
879
+ }
880
+ .dybo-shadow-level-2 {
881
+ box-shadow: var(--dybo-portal-shadow-level-2);
882
+ }
883
+
884
+ /* Nav tabs — uppercase pill tabs */
885
+ .dybo-navtabs {
886
+ display: flex;
887
+ flex-wrap: wrap;
888
+ gap: 4px;
889
+ }
890
+ .dybo-navtab {
891
+ display: inline-flex;
892
+ align-items: center;
893
+ justify-content: center;
894
+ height: 26px;
895
+ padding: 0 12px;
896
+ border-radius: var(--dybo-radius-md);
897
+ font-size: var(--dybo-font-size-xs);
898
+ font-weight: var(--dybo-font-weight-medium);
899
+ letter-spacing: 1px;
900
+ text-transform: uppercase;
901
+ color: var(--dybo-color-text-primary);
902
+ opacity: var(--dybo-opacity-intense);
903
+ border: 1px solid transparent;
904
+ background: transparent;
905
+ backdrop-filter: blur(2px);
906
+ -webkit-backdrop-filter: blur(2px);
907
+ transition: all 0.2s;
908
+ white-space: nowrap;
909
+ cursor: pointer;
910
+ font-family: inherit;
911
+ }
912
+ .dybo-navtab:hover {
913
+ opacity: 1;
914
+ }
915
+ .dybo-navtab--active {
916
+ opacity: 1;
917
+ background: rgba(244, 244, 246, 0.7);
918
+ border-color: var(--dybo-line-stroke);
919
+ }
920
+
921
+ /* Priority badges */
922
+ .dybo-priority {
923
+ display: inline-flex;
924
+ align-items: center;
925
+ gap: 5px;
926
+ padding: 2px 10px;
927
+ border-radius: var(--dybo-radius-full);
928
+ font-size: var(--dybo-font-size-xs);
929
+ font-weight: var(--dybo-font-weight-semibold);
930
+ line-height: 1.4;
931
+ white-space: nowrap;
932
+ }
933
+ .dybo-priority::before {
934
+ content: "";
935
+ width: 6px;
936
+ height: 6px;
937
+ border-radius: var(--dybo-radius-full);
938
+ background: currentColor;
939
+ flex-shrink: 0;
940
+ }
941
+ .dybo-priority--urgent {
942
+ background: var(--dybo-portal-priority-urgent-bg);
943
+ color: var(--dybo-portal-priority-urgent-fg);
944
+ }
945
+ .dybo-priority--high {
946
+ background: var(--dybo-portal-priority-high-bg);
947
+ color: var(--dybo-portal-priority-high-fg);
948
+ }
949
+ .dybo-priority--medium {
950
+ background: var(--dybo-portal-priority-medium-bg);
951
+ color: var(--dybo-portal-priority-medium-fg);
952
+ }
953
+ .dybo-priority--low {
954
+ background: var(--dybo-portal-priority-low-bg);
955
+ color: var(--dybo-portal-priority-low-fg);
956
+ }
957
+ .dybo-priority--none {
958
+ background: var(--dybo-portal-priority-none-bg);
959
+ color: var(--dybo-portal-priority-none-fg);
960
+ }
961
+ .dybo-priority--none::before {
962
+ opacity: 0.45;
963
+ }
964
+
965
+ /* Ticket status badges (ChatWoot) */
966
+ .dybo-ticket-status {
967
+ display: inline-flex;
968
+ align-items: center;
969
+ padding: 2px 10px;
970
+ border-radius: var(--dybo-radius-full);
971
+ font-size: var(--dybo-font-size-xs);
972
+ font-weight: var(--dybo-font-weight-semibold);
973
+ line-height: 1.4;
974
+ white-space: nowrap;
975
+ }
976
+ .dybo-ticket-status--open {
977
+ background: var(--dybo-portal-ticket-open-bg);
978
+ color: var(--dybo-portal-ticket-open-fg);
979
+ }
980
+ .dybo-ticket-status--pending {
981
+ background: var(--dybo-portal-ticket-pending-bg);
982
+ color: var(--dybo-portal-ticket-pending-fg);
983
+ }
984
+ .dybo-ticket-status--snoozed {
985
+ background: var(--dybo-portal-ticket-snoozed-bg);
986
+ color: var(--dybo-portal-ticket-snoozed-fg);
987
+ }
988
+ .dybo-ticket-status--resolved {
989
+ background: var(--dybo-portal-ticket-resolved-bg);
990
+ color: var(--dybo-portal-ticket-resolved-fg);
991
+ }
992
+
993
+ /* Scope tabs — Unassigned / Mine / All */
994
+ .dybo-scope {
995
+ display: inline-flex;
996
+ align-items: center;
997
+ gap: 4px;
998
+ border: 1px solid var(--dybo-color-grayish-blue-300);
999
+ background: rgba(244, 244, 246, 0.7);
1000
+ border-radius: var(--dybo-radius-sm);
1001
+ padding: 4px;
1002
+ }
1003
+ .dybo-scope-tab {
1004
+ display: inline-flex;
1005
+ align-items: center;
1006
+ gap: 8px;
1007
+ height: 44px;
1008
+ padding: 0 14px;
1009
+ border-radius: 10px;
1010
+ font-size: 13px;
1011
+ font-weight: var(--dybo-font-weight-semibold);
1012
+ color: var(--dybo-color-text-primary);
1013
+ opacity: var(--dybo-opacity-intense);
1014
+ background: transparent;
1015
+ border: 0;
1016
+ cursor: pointer;
1017
+ white-space: nowrap;
1018
+ transition: all 0.2s;
1019
+ font-family: inherit;
1020
+ }
1021
+ .dybo-scope-tab:hover {
1022
+ opacity: 1;
1023
+ }
1024
+ .dybo-scope-tab--active {
1025
+ opacity: 1;
1026
+ background: var(--dybo-color-text-primary);
1027
+ color: var(--dybo-color-white);
1028
+ }
1029
+ .dybo-scope-tab:focus-visible {
1030
+ outline: 2px solid var(--dybo-color-brand-logo);
1031
+ outline-offset: 2px;
1032
+ }
1033
+ .dybo-scope-count {
1034
+ display: inline-flex;
1035
+ align-items: center;
1036
+ justify-content: center;
1037
+ min-width: 22px;
1038
+ height: 20px;
1039
+ padding: 0 6px;
1040
+ border-radius: var(--dybo-radius-full);
1041
+ font-size: 11px;
1042
+ font-weight: var(--dybo-font-weight-bold);
1043
+ background: rgba(10, 19, 35, 0.1);
1044
+ }
1045
+ .dybo-scope-tab--active .dybo-scope-count {
1046
+ background: rgba(255, 255, 255, 0.24);
1047
+ }
1048
+
1049
+ /* Icon rail sidebar */
1050
+ .dybo-icon-rail {
1051
+ display: none;
1052
+ height: 100%;
1053
+ width: var(--dybo-icon-rail-width);
1054
+ flex-shrink: 0;
1055
+ flex-direction: column;
1056
+ align-items: center;
1057
+ background: var(--dybo-surface-page);
1058
+ padding: 16px 0;
1059
+ }
1060
+ @media (min-width: 768px) {
1061
+ .dybo-icon-rail {
1062
+ display: flex;
1063
+ }
1064
+ }
1065
+ .dybo-icon-rail__brand {
1066
+ margin-bottom: 24px;
1067
+ }
1068
+ .dybo-icon-rail__nav {
1069
+ display: flex;
1070
+ flex: 1;
1071
+ width: 100%;
1072
+ align-items: center;
1073
+ justify-content: center;
1074
+ }
1075
+ .dybo-icon-rail__pill {
1076
+ border-radius: 13px;
1077
+ border: 1px solid var(--dybo-line-stroke);
1078
+ background: var(--dybo-surface-card);
1079
+ padding: 6px;
1080
+ box-shadow: var(--dybo-portal-shadow-level-1);
1081
+ backdrop-filter: blur(4px);
1082
+ -webkit-backdrop-filter: blur(4px);
1083
+ }
1084
+ .dybo-icon-rail__items {
1085
+ display: flex;
1086
+ flex-direction: column;
1087
+ align-items: center;
1088
+ gap: 0;
1089
+ }
1090
+ .dybo-icon-rail__item {
1091
+ display: flex;
1092
+ align-items: center;
1093
+ justify-content: center;
1094
+ padding: 12px;
1095
+ height: 48px;
1096
+ width: 40px;
1097
+ border-radius: 11px;
1098
+ color: var(--dybo-color-brand-logo);
1099
+ opacity: var(--dybo-opacity-intense);
1100
+ text-decoration: none;
1101
+ transition: all 0.2s;
1102
+ }
1103
+ .dybo-icon-rail__item:hover {
1104
+ opacity: 1;
1105
+ }
1106
+ .dybo-icon-rail__item--active {
1107
+ height: 40px;
1108
+ border-radius: 13px;
1109
+ background: rgba(20, 25, 39, 0.1);
1110
+ opacity: 1;
1111
+ color: var(--dybo-color-brand-dark-orb);
1112
+ }