@ravileal/ui 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +241 -2
  3. package/dist/components/Alert.d.ts +14 -0
  4. package/dist/components/Avatar.d.ts +11 -0
  5. package/dist/components/Badge.d.ts +23 -0
  6. package/dist/components/Button.d.ts +20 -0
  7. package/dist/components/Card.d.ts +36 -0
  8. package/dist/components/Checkbox.d.ts +7 -0
  9. package/dist/components/ColorPicker.d.ts +33 -0
  10. package/dist/components/Combobox.d.ts +23 -0
  11. package/dist/components/ConfirmModal.d.ts +14 -0
  12. package/dist/components/CopyValue.d.ts +31 -0
  13. package/dist/components/DataTable.d.ts +27 -0
  14. package/dist/components/DatePicker.d.ts +33 -0
  15. package/dist/components/Drawer.d.ts +16 -0
  16. package/dist/components/Dropdown.d.ts +51 -0
  17. package/dist/components/DropdownMenu.d.ts +26 -0
  18. package/dist/components/EmptyState.d.ts +10 -0
  19. package/dist/components/FileUpload.d.ts +14 -0
  20. package/dist/components/FormField.d.ts +24 -0
  21. package/dist/components/InlineEditorCard.d.ts +19 -0
  22. package/dist/components/ListScreen.d.ts +48 -0
  23. package/dist/components/Modal.d.ts +22 -0
  24. package/dist/components/MonthSelector.d.ts +24 -0
  25. package/dist/components/NumberStepper.d.ts +16 -0
  26. package/dist/components/PageHeader.d.ts +11 -0
  27. package/dist/components/Portal.d.ts +11 -0
  28. package/dist/components/ProgressBar.d.ts +13 -0
  29. package/dist/components/Radio.d.ts +5 -0
  30. package/dist/components/RowActions.d.ts +17 -0
  31. package/dist/components/ScreenSkeleton.d.ts +26 -0
  32. package/dist/components/SearchInput.d.ts +13 -0
  33. package/dist/components/SegmentedControl.d.ts +16 -0
  34. package/dist/components/Skeleton.d.ts +14 -0
  35. package/dist/components/Slider.d.ts +17 -0
  36. package/dist/components/Spinner.d.ts +8 -0
  37. package/dist/components/Switch.d.ts +15 -0
  38. package/dist/components/Tabs.d.ts +15 -0
  39. package/dist/components/TextInput.d.ts +13 -0
  40. package/dist/components/Textarea.d.ts +6 -0
  41. package/dist/components/Toast.d.ts +21 -0
  42. package/dist/components/Tooltip.d.ts +22 -0
  43. package/dist/components/VisuallyHidden.d.ts +6 -0
  44. package/dist/index.d.ts +82 -0
  45. package/dist/index.js +3253 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/internal/ScreenCaptureOverlay.d.ts +16 -0
  48. package/dist/internal/clipboard.d.ts +11 -0
  49. package/dist/internal/color.utils.d.ts +21 -0
  50. package/dist/internal/screen-color-picker.d.ts +12 -0
  51. package/dist/internal/tone.d.ts +1 -0
  52. package/dist/internal/useFocusTrap.d.ts +7 -0
  53. package/dist/internal/useIsomorphicLayoutEffect.d.ts +6 -0
  54. package/dist/internal/usePopover.d.ts +30 -0
  55. package/dist/styles.css +1702 -0
  56. package/package.json +105 -4
@@ -0,0 +1,1702 @@
1
+ @layer ravileal-ui {
2
+ :root {
3
+ --ui-bg: #0b1422;
4
+ --ui-surface: #101c2e;
5
+ --ui-surface-2: #17273a;
6
+ --ui-border: #24384f;
7
+ --ui-text: #eaf0f8;
8
+ --ui-text-2: #9fb4cd;
9
+ --ui-text-3: #7b93b0;
10
+ --ui-accent: #00c9a7;
11
+ --ui-blue: #4f7cff;
12
+ --ui-green: #22c55e;
13
+ --ui-red: #f87171;
14
+ --ui-amber: #f59e0b;
15
+ --ui-purple: #a855f7;
16
+ --ui-shadow: 0 4px 24px rgba(0, 0, 0, 0.5);
17
+ --ui-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.5);
18
+ --ui-overlay: rgba(0, 0, 0, 0.6);
19
+ --ui-on-accent: #ffffff;
20
+ }
21
+
22
+ [data-ui-theme='light'],
23
+ .ui-theme-light {
24
+ --ui-bg: #eef2f8;
25
+ --ui-surface: #ffffff;
26
+ --ui-surface-2: #f4f7fb;
27
+ --ui-border: #d3ddec;
28
+ --ui-text: #16233a;
29
+ --ui-text-2: #4a6480;
30
+ --ui-text-3: #5c7089;
31
+ --ui-accent: #009e85;
32
+ --ui-blue: #3b5fe0;
33
+ --ui-green: #16a34a;
34
+ --ui-red: #dc2626;
35
+ --ui-amber: #d97706;
36
+ --ui-purple: #9333ea;
37
+ --ui-shadow: 0 4px 24px rgba(0, 0, 0, 0.09);
38
+ --ui-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.12);
39
+ --ui-overlay: rgba(0, 0, 0, 0.35);
40
+ --ui-on-accent: #ffffff;
41
+ }
42
+
43
+ .ui-scroll-y {
44
+ overflow-y: auto;
45
+ }
46
+ .ui-scroll-y::-webkit-scrollbar {
47
+ width: 5px;
48
+ }
49
+ .ui-scroll-y::-webkit-scrollbar-track {
50
+ background: transparent;
51
+ }
52
+ .ui-scroll-y::-webkit-scrollbar-thumb {
53
+ background: var(--ui-border);
54
+ border-radius: 3px;
55
+ }
56
+ .ui-scroll-y::-webkit-scrollbar-thumb:hover {
57
+ background: var(--ui-text-3);
58
+ }
59
+
60
+ .ui-dropdown {
61
+ position: relative;
62
+ display: flex;
63
+ width: 100%;
64
+ min-width: 0;
65
+ }
66
+ .ui-dropdown.is-inline {
67
+ width: auto;
68
+ }
69
+ .ui-dropdown-trigger {
70
+ display: flex;
71
+ align-items: center;
72
+ gap: 6px;
73
+ width: 100%;
74
+ min-width: 0;
75
+ padding: 3px 8px;
76
+ border: 1px solid var(--ui-border);
77
+ border-radius: 7px;
78
+ background: var(--ui-surface-2);
79
+ color: var(--ui-text-2);
80
+ cursor: pointer;
81
+ text-align: left;
82
+ }
83
+ .ui-dropdown-trigger.is-md {
84
+ padding: 9px 12px;
85
+ border-radius: 8px;
86
+ background: var(--ui-surface);
87
+ }
88
+ .ui-dropdown-trigger:hover {
89
+ border-color: var(--ui-text-3);
90
+ }
91
+ .ui-dropdown-trigger[aria-expanded='true'],
92
+ .ui-dropdown-trigger:focus-visible {
93
+ border-color: var(--ui-accent);
94
+ outline: none;
95
+ }
96
+ .ui-dropdown-trigger:disabled {
97
+ opacity: 0.5;
98
+ cursor: not-allowed;
99
+ }
100
+ .ui-dropdown-value {
101
+ flex: 1;
102
+ min-width: 0;
103
+ overflow: hidden;
104
+ text-overflow: ellipsis;
105
+ white-space: nowrap;
106
+ }
107
+ .ui-dropdown-caret {
108
+ flex-shrink: 0;
109
+ font-size: 9px;
110
+ line-height: 1;
111
+ color: var(--ui-text-3);
112
+ }
113
+ .ui-dropdown-icon {
114
+ flex-shrink: 0;
115
+ display: inline-flex;
116
+ align-items: center;
117
+ justify-content: center;
118
+ color: var(--ui-text-3);
119
+ }
120
+ .ui-dropdown-dot {
121
+ width: 8px;
122
+ height: 8px;
123
+ border-radius: 50%;
124
+ flex-shrink: 0;
125
+ }
126
+ .ui-dropdown-menu {
127
+ position: fixed;
128
+ z-index: 2000;
129
+ padding: 4px;
130
+ background: var(--ui-surface);
131
+ border: 1px solid var(--ui-border);
132
+ border-radius: 10px;
133
+ box-shadow: var(--ui-shadow);
134
+ overflow-y: auto;
135
+ scrollbar-width: thin;
136
+ scrollbar-color: var(--ui-border) transparent;
137
+ }
138
+ .ui-dropdown-menu::-webkit-scrollbar {
139
+ width: 6px;
140
+ }
141
+ .ui-dropdown-menu::-webkit-scrollbar-track {
142
+ background: transparent;
143
+ }
144
+ .ui-dropdown-menu::-webkit-scrollbar-thumb {
145
+ background: var(--ui-border);
146
+ border-radius: 3px;
147
+ }
148
+ .ui-dropdown-menu::-webkit-scrollbar-thumb:hover {
149
+ background: var(--ui-text-3);
150
+ }
151
+ .ui-dropdown-option {
152
+ display: flex;
153
+ align-items: center;
154
+ gap: 8px;
155
+ padding: 7px 10px;
156
+ border-radius: 7px;
157
+ font-size: 13px;
158
+ color: var(--ui-text-2);
159
+ cursor: pointer;
160
+ }
161
+ .ui-dropdown-option-label {
162
+ flex: 1;
163
+ min-width: 0;
164
+ overflow: hidden;
165
+ text-overflow: ellipsis;
166
+ white-space: nowrap;
167
+ }
168
+ .ui-dropdown-option.is-active {
169
+ background: var(--ui-surface-2);
170
+ }
171
+ .ui-dropdown-option.is-selected {
172
+ color: var(--ui-text);
173
+ font-weight: 600;
174
+ }
175
+ .ui-dropdown-check {
176
+ flex-shrink: 0;
177
+ font-size: 11px;
178
+ color: var(--ui-accent);
179
+ }
180
+ .ui-dropdown-trigger.is-invalid {
181
+ border-color: var(--ui-red);
182
+ }
183
+
184
+ .ui-month-selector {
185
+ display: inline-flex;
186
+ align-items: stretch;
187
+ height: 36px;
188
+ background: var(--ui-surface);
189
+ border: 1px solid var(--ui-border);
190
+ border-radius: 8px;
191
+ overflow: hidden;
192
+ }
193
+ .ui-month-selector-arrow {
194
+ display: inline-flex;
195
+ align-items: center;
196
+ justify-content: center;
197
+ padding: 0 10px;
198
+ color: var(--ui-text-2);
199
+ background: none;
200
+ border: none;
201
+ font-size: 14px;
202
+ line-height: 1;
203
+ cursor: pointer;
204
+ }
205
+ .ui-month-selector-arrow:hover:not(:disabled) {
206
+ background: var(--ui-surface-2);
207
+ color: var(--ui-text);
208
+ }
209
+ .ui-month-selector-arrow:disabled {
210
+ opacity: 0.3;
211
+ cursor: not-allowed;
212
+ }
213
+ .ui-month-selector-middle {
214
+ display: flex;
215
+ align-items: stretch;
216
+ border-left: 1px solid var(--ui-border);
217
+ border-right: 1px solid var(--ui-border);
218
+ }
219
+ .ui-month-selector-label {
220
+ display: flex;
221
+ align-items: center;
222
+ justify-content: center;
223
+ padding: 7px 12px;
224
+ min-width: 90px;
225
+ font-size: 13px;
226
+ font-weight: 600;
227
+ color: var(--ui-text);
228
+ text-align: center;
229
+ }
230
+ .ui-month-selector .ui-dropdown {
231
+ width: auto;
232
+ }
233
+ .ui-month-selector .ui-dropdown-trigger {
234
+ border: 0;
235
+ border-radius: 0;
236
+ background: transparent;
237
+ padding: 7px 12px;
238
+ min-width: 90px;
239
+ justify-content: center;
240
+ gap: 0;
241
+ }
242
+ .ui-month-selector .ui-dropdown-trigger:hover {
243
+ background: var(--ui-surface-2);
244
+ border-color: transparent;
245
+ }
246
+ .ui-month-selector .ui-dropdown-trigger[aria-expanded='true'],
247
+ .ui-month-selector .ui-dropdown-trigger:focus-visible {
248
+ border-color: transparent;
249
+ box-shadow: inset 0 0 0 1px var(--ui-accent);
250
+ }
251
+ .ui-month-selector .ui-dropdown-value {
252
+ flex: 0 1 auto;
253
+ font-size: 13px;
254
+ font-weight: 600;
255
+ color: var(--ui-text);
256
+ }
257
+ .ui-month-selector .ui-dropdown-caret {
258
+ display: none;
259
+ }
260
+
261
+ .ui-tooltip {
262
+ position: fixed;
263
+ z-index: 3000;
264
+ padding: 6px 9px;
265
+ background: var(--ui-surface-2);
266
+ border: 1px solid var(--ui-border);
267
+ border-radius: 7px;
268
+ box-shadow: var(--ui-shadow);
269
+ color: var(--ui-text);
270
+ font-size: 12px;
271
+ line-height: 1.45;
272
+ word-break: break-word;
273
+ pointer-events: none;
274
+ }
275
+ .ui-tooltip-label {
276
+ display: block;
277
+ font-size: 10px;
278
+ font-weight: 600;
279
+ letter-spacing: 0.04em;
280
+ text-transform: uppercase;
281
+ color: var(--ui-text-3);
282
+ margin-bottom: 2px;
283
+ }
284
+
285
+ .ui-copy-value {
286
+ transition:
287
+ transform 0.1s ease,
288
+ opacity 0.1s ease,
289
+ color 0.15s ease;
290
+ }
291
+ .ui-copy-value:active {
292
+ transform: scale(0.94);
293
+ opacity: 0.6;
294
+ }
295
+
296
+ .ui-datepicker-icon {
297
+ flex-shrink: 0;
298
+ color: var(--ui-text-3);
299
+ }
300
+ .ui-datepicker-menu {
301
+ position: fixed;
302
+ z-index: 2000;
303
+ padding: 12px;
304
+ background: var(--ui-surface);
305
+ border: 1px solid var(--ui-border);
306
+ border-radius: 12px;
307
+ box-shadow: var(--ui-shadow);
308
+ }
309
+ .ui-datepicker-head {
310
+ display: flex;
311
+ align-items: center;
312
+ justify-content: space-between;
313
+ margin-bottom: 10px;
314
+ }
315
+ .ui-datepicker-title {
316
+ font-size: 13px;
317
+ font-weight: 700;
318
+ color: var(--ui-text);
319
+ }
320
+ .ui-datepicker-nav {
321
+ display: flex;
322
+ gap: 4px;
323
+ }
324
+ .ui-datepicker-nav button {
325
+ width: 26px;
326
+ height: 26px;
327
+ display: flex;
328
+ align-items: center;
329
+ justify-content: center;
330
+ border: 1px solid var(--ui-border);
331
+ border-radius: 7px;
332
+ background: var(--ui-surface-2);
333
+ color: var(--ui-text-2);
334
+ font-size: 13px;
335
+ line-height: 1;
336
+ cursor: pointer;
337
+ }
338
+ .ui-datepicker-nav button:hover {
339
+ border-color: var(--ui-text-3);
340
+ color: var(--ui-text);
341
+ }
342
+ .ui-datepicker-grid {
343
+ display: grid;
344
+ grid-template-columns: repeat(7, 32px);
345
+ gap: 2px;
346
+ }
347
+ .ui-datepicker-wd {
348
+ height: 20px;
349
+ font-size: 10px;
350
+ font-weight: 700;
351
+ text-transform: uppercase;
352
+ color: var(--ui-text-3);
353
+ text-align: center;
354
+ line-height: 20px;
355
+ }
356
+ .ui-datepicker-day {
357
+ width: 32px;
358
+ height: 30px;
359
+ border: 1px solid transparent;
360
+ border-radius: 7px;
361
+ background: transparent;
362
+ color: var(--ui-text-2);
363
+ font-size: 12px;
364
+ cursor: pointer;
365
+ }
366
+ .ui-datepicker-day:hover {
367
+ background: var(--ui-surface-2);
368
+ color: var(--ui-text);
369
+ }
370
+ .ui-datepicker-day.is-out {
371
+ color: var(--ui-text-3);
372
+ opacity: 0.5;
373
+ }
374
+ .ui-datepicker-day.is-today {
375
+ border-color: var(--ui-accent);
376
+ }
377
+ .ui-datepicker-day.is-selected {
378
+ background: var(--ui-accent);
379
+ border-color: var(--ui-accent);
380
+ color: var(--ui-on-accent);
381
+ font-weight: 700;
382
+ }
383
+ .ui-datepicker-day.is-selected:hover {
384
+ background: var(--ui-accent);
385
+ color: var(--ui-on-accent);
386
+ }
387
+ .ui-datepicker-foot {
388
+ display: flex;
389
+ justify-content: space-between;
390
+ margin-top: 10px;
391
+ padding-top: 8px;
392
+ border-top: 1px solid var(--ui-border);
393
+ }
394
+ .ui-datepicker-foot button {
395
+ padding: 4px 8px;
396
+ border: none;
397
+ border-radius: 6px;
398
+ background: none;
399
+ color: var(--ui-accent);
400
+ font-size: 12px;
401
+ font-weight: 600;
402
+ cursor: pointer;
403
+ }
404
+ .ui-datepicker-foot button:hover {
405
+ background: var(--ui-surface-2);
406
+ }
407
+
408
+ .ui-checkbox,
409
+ .ui-radio {
410
+ appearance: none;
411
+ -webkit-appearance: none;
412
+ display: inline-block;
413
+ flex-shrink: 0;
414
+ width: 16px;
415
+ height: 16px;
416
+ margin: 0;
417
+ padding: 0;
418
+ border: 1px solid var(--ui-border);
419
+ background-color: var(--ui-surface-2);
420
+ background-position: center;
421
+ background-repeat: no-repeat;
422
+ cursor: pointer;
423
+ transition:
424
+ background-color 0.15s,
425
+ border-color 0.15s;
426
+ }
427
+ .ui-checkbox {
428
+ border-radius: 5px;
429
+ }
430
+ .ui-radio {
431
+ border-radius: 50%;
432
+ }
433
+ .ui-checkbox.is-sm,
434
+ .ui-radio.is-sm {
435
+ width: 14px;
436
+ height: 14px;
437
+ }
438
+ .ui-checkbox:hover:not(:disabled),
439
+ .ui-radio:hover:not(:disabled) {
440
+ border-color: var(--ui-accent);
441
+ }
442
+ .ui-checkbox:checked {
443
+ border-color: var(--ui-accent);
444
+ background-color: var(--ui-accent);
445
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 8.5 6.8 11.2 12 5.4' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
446
+ background-size: 13px 13px;
447
+ }
448
+ .ui-checkbox.is-sm:checked {
449
+ background-size: 11px 11px;
450
+ }
451
+ .ui-radio:checked {
452
+ border-color: var(--ui-accent);
453
+ background-color: var(--ui-accent);
454
+ background-image: radial-gradient(circle, var(--ui-on-accent) 0 2.4px, transparent 3px);
455
+ }
456
+ .ui-radio.is-sm:checked {
457
+ background-image: radial-gradient(circle, var(--ui-on-accent) 0 2px, transparent 2.6px);
458
+ }
459
+ .ui-checkbox:focus-visible,
460
+ .ui-radio:focus-visible {
461
+ outline: 2px solid var(--ui-accent);
462
+ outline-offset: 2px;
463
+ }
464
+ .ui-checkbox:disabled,
465
+ .ui-radio:disabled {
466
+ opacity: 0.45;
467
+ cursor: not-allowed;
468
+ }
469
+
470
+ .ui-skeleton {
471
+ background: linear-gradient(
472
+ 90deg,
473
+ var(--ui-surface-2) 25%,
474
+ var(--ui-border) 37%,
475
+ var(--ui-surface-2) 63%
476
+ );
477
+ background-size: 400% 100%;
478
+ animation: ui-skeleton-shimmer 1.4s ease infinite;
479
+ }
480
+
481
+ @keyframes ui-skeleton-shimmer {
482
+ 0% {
483
+ background-position: 100% 50%;
484
+ }
485
+ 100% {
486
+ background-position: 0 50%;
487
+ }
488
+ }
489
+
490
+ @media (prefers-reduced-motion: reduce) {
491
+ .ui-skeleton {
492
+ animation: none;
493
+ }
494
+ }
495
+ }
496
+
497
+ @layer ravileal-ui {
498
+ .ui-visually-hidden {
499
+ position: absolute !important;
500
+ width: 1px !important;
501
+ height: 1px !important;
502
+ padding: 0 !important;
503
+ margin: -1px !important;
504
+ overflow: hidden !important;
505
+ clip: rect(0, 0, 0, 0) !important;
506
+ white-space: nowrap !important;
507
+ border: 0 !important;
508
+ }
509
+
510
+ .ui-button {
511
+ display: inline-flex;
512
+ align-items: center;
513
+ justify-content: center;
514
+ gap: 7px;
515
+ border: 1px solid transparent;
516
+ font-family: inherit;
517
+ font-weight: 600;
518
+ line-height: 1;
519
+ cursor: pointer;
520
+ white-space: nowrap;
521
+ transition:
522
+ background-color 0.15s,
523
+ border-color 0.15s,
524
+ color 0.15s,
525
+ filter 0.15s;
526
+ }
527
+ .ui-button--sm {
528
+ height: 28px;
529
+ padding: 0 10px;
530
+ border-radius: 7px;
531
+ font-size: 12px;
532
+ }
533
+ .ui-button--md {
534
+ height: 36px;
535
+ padding: 0 16px;
536
+ border-radius: 8px;
537
+ font-size: 13px;
538
+ }
539
+ .ui-button--lg {
540
+ height: 42px;
541
+ padding: 0 22px;
542
+ border-radius: 9px;
543
+ font-size: 14px;
544
+ }
545
+ .ui-button--primary {
546
+ background: var(--ui-accent);
547
+ color: var(--ui-on-accent);
548
+ }
549
+ .ui-button--primary:hover:not(:disabled) {
550
+ filter: brightness(1.08);
551
+ }
552
+ .ui-button--secondary {
553
+ background: var(--ui-surface-2);
554
+ border-color: var(--ui-border);
555
+ color: var(--ui-text);
556
+ }
557
+ .ui-button--secondary:hover:not(:disabled) {
558
+ border-color: var(--ui-text-3);
559
+ }
560
+ .ui-button--ghost {
561
+ background: transparent;
562
+ color: var(--ui-text-2);
563
+ }
564
+ .ui-button--ghost:hover:not(:disabled) {
565
+ background: var(--ui-surface-2);
566
+ color: var(--ui-text);
567
+ }
568
+ .ui-button--danger {
569
+ background: var(--ui-red);
570
+ color: var(--ui-on-accent);
571
+ }
572
+ .ui-button--danger:hover:not(:disabled) {
573
+ filter: brightness(1.06);
574
+ }
575
+ .ui-button:disabled {
576
+ opacity: 0.55;
577
+ cursor: not-allowed;
578
+ }
579
+ .ui-button:focus-visible {
580
+ outline: 2px solid var(--ui-accent);
581
+ outline-offset: 2px;
582
+ }
583
+ .ui-button.is-full {
584
+ width: 100%;
585
+ }
586
+ .ui-button-label {
587
+ display: inline-flex;
588
+ align-items: center;
589
+ }
590
+ .ui-button--icon {
591
+ width: 36px;
592
+ padding: 0;
593
+ flex-shrink: 0;
594
+ }
595
+ .ui-button--icon.ui-button--sm {
596
+ width: 28px;
597
+ }
598
+ .ui-button--icon.ui-button--lg {
599
+ width: 42px;
600
+ }
601
+ .ui-spinner {
602
+ display: inline-block;
603
+ border-style: solid;
604
+ border-color: color-mix(in srgb, currentColor 28%, transparent);
605
+ border-top-color: currentColor;
606
+ border-radius: 50%;
607
+ animation: ui-spin 0.8s linear infinite;
608
+ }
609
+ @keyframes ui-spin {
610
+ to {
611
+ transform: rotate(360deg);
612
+ }
613
+ }
614
+
615
+ .ui-progress {
616
+ position: relative;
617
+ width: 100%;
618
+ overflow: hidden;
619
+ background: var(--ui-surface-2);
620
+ border-radius: 999px;
621
+ }
622
+ .ui-progress--sm {
623
+ height: 4px;
624
+ }
625
+ .ui-progress--md {
626
+ height: 8px;
627
+ }
628
+ .ui-progress-bar {
629
+ display: block;
630
+ height: 100%;
631
+ background: var(--ui-accent);
632
+ border-radius: inherit;
633
+ transition: width 0.2s ease;
634
+ }
635
+ .ui-progress.is-indeterminate .ui-progress-bar {
636
+ width: 40%;
637
+ animation: ui-progress-indeterminate 1.2s ease-in-out infinite;
638
+ }
639
+ @keyframes ui-progress-indeterminate {
640
+ 0% {
641
+ transform: translateX(-110%);
642
+ }
643
+ 100% {
644
+ transform: translateX(260%);
645
+ }
646
+ }
647
+
648
+ .ui-input-wrap {
649
+ display: flex;
650
+ align-items: center;
651
+ gap: 8px;
652
+ width: 100%;
653
+ padding: 0 10px;
654
+ border: 1px solid var(--ui-border);
655
+ border-radius: 8px;
656
+ background: var(--ui-surface);
657
+ transition:
658
+ border-color 0.15s,
659
+ box-shadow 0.15s;
660
+ }
661
+ .ui-input-wrap--sm {
662
+ height: 30px;
663
+ }
664
+ .ui-input-wrap--md {
665
+ height: 36px;
666
+ }
667
+ .ui-input-wrap:focus-within {
668
+ border-color: var(--ui-accent);
669
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--ui-accent) 18%, transparent);
670
+ }
671
+ .ui-input-wrap.is-invalid {
672
+ border-color: var(--ui-red);
673
+ }
674
+ .ui-input-wrap.is-disabled {
675
+ opacity: 0.55;
676
+ }
677
+ .ui-input {
678
+ flex: 1;
679
+ min-width: 0;
680
+ height: 100%;
681
+ padding: 0;
682
+ border: none;
683
+ outline: none;
684
+ background: transparent;
685
+ color: var(--ui-text);
686
+ font-family: inherit;
687
+ font-size: 13px;
688
+ }
689
+ .ui-input-wrap--sm .ui-input {
690
+ font-size: 12px;
691
+ }
692
+ .ui-input::placeholder {
693
+ color: var(--ui-text-3);
694
+ }
695
+ .ui-input-icon {
696
+ display: inline-flex;
697
+ align-items: center;
698
+ flex-shrink: 0;
699
+ color: var(--ui-text-3);
700
+ }
701
+ .ui-input-clear {
702
+ display: inline-flex;
703
+ align-items: center;
704
+ justify-content: center;
705
+ flex-shrink: 0;
706
+ width: 20px;
707
+ height: 20px;
708
+ padding: 0;
709
+ border: none;
710
+ border-radius: 5px;
711
+ background: transparent;
712
+ color: var(--ui-text-3);
713
+ font-size: 15px;
714
+ line-height: 1;
715
+ cursor: pointer;
716
+ }
717
+ .ui-input-clear:hover {
718
+ background: var(--ui-surface-2);
719
+ color: var(--ui-text);
720
+ }
721
+ .ui-textarea {
722
+ width: 100%;
723
+ min-height: 80px;
724
+ padding: 9px 12px;
725
+ border: 1px solid var(--ui-border);
726
+ border-radius: 8px;
727
+ outline: none;
728
+ background: var(--ui-surface);
729
+ color: var(--ui-text);
730
+ font-family: inherit;
731
+ font-size: 13px;
732
+ line-height: 1.5;
733
+ resize: vertical;
734
+ transition:
735
+ border-color 0.15s,
736
+ box-shadow 0.15s;
737
+ }
738
+ .ui-textarea:focus {
739
+ border-color: var(--ui-accent);
740
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--ui-accent) 18%, transparent);
741
+ }
742
+ .ui-textarea[aria-invalid='true'] {
743
+ border-color: var(--ui-red);
744
+ }
745
+
746
+ .ui-form-field {
747
+ display: flex;
748
+ flex-direction: column;
749
+ gap: 5px;
750
+ }
751
+ .ui-form-label {
752
+ font-size: 12px;
753
+ font-weight: 600;
754
+ color: var(--ui-text);
755
+ }
756
+ .ui-form-required {
757
+ color: var(--ui-red);
758
+ }
759
+ .ui-form-hint {
760
+ font-size: 11px;
761
+ color: var(--ui-text-2);
762
+ }
763
+ .ui-form-error {
764
+ font-size: 11px;
765
+ color: var(--ui-red);
766
+ }
767
+
768
+ .ui-switch-row {
769
+ display: flex;
770
+ align-items: center;
771
+ justify-content: space-between;
772
+ gap: 16px;
773
+ }
774
+ .ui-switch-row.is-disabled {
775
+ opacity: 0.6;
776
+ }
777
+ .ui-switch-copy {
778
+ display: flex;
779
+ flex-direction: column;
780
+ gap: 2px;
781
+ min-width: 0;
782
+ }
783
+ .ui-switch-label {
784
+ font-size: 13px;
785
+ color: var(--ui-text);
786
+ }
787
+ .ui-switch-description {
788
+ font-size: 11px;
789
+ color: var(--ui-text-2);
790
+ }
791
+ .ui-switch {
792
+ position: relative;
793
+ flex-shrink: 0;
794
+ width: 44px;
795
+ height: 24px;
796
+ padding: 0;
797
+ border: 1px solid var(--ui-border);
798
+ border-radius: 999px;
799
+ background: var(--ui-surface-2);
800
+ cursor: pointer;
801
+ transition:
802
+ background-color 0.15s,
803
+ border-color 0.15s;
804
+ }
805
+ .ui-switch--sm {
806
+ width: 36px;
807
+ height: 20px;
808
+ }
809
+ .ui-switch.is-checked {
810
+ background: var(--ui-accent);
811
+ border-color: var(--ui-accent);
812
+ }
813
+ .ui-switch-thumb {
814
+ position: absolute;
815
+ top: 2px;
816
+ left: 2px;
817
+ width: 18px;
818
+ height: 18px;
819
+ border-radius: 50%;
820
+ background: var(--ui-on-accent);
821
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
822
+ transition: left 0.15s ease;
823
+ }
824
+ .ui-switch--sm .ui-switch-thumb {
825
+ width: 14px;
826
+ height: 14px;
827
+ }
828
+ .ui-switch.is-checked .ui-switch-thumb {
829
+ left: calc(100% - 20px);
830
+ }
831
+ .ui-switch--sm.is-checked .ui-switch-thumb {
832
+ left: calc(100% - 16px);
833
+ }
834
+ .ui-switch:disabled {
835
+ opacity: 0.5;
836
+ cursor: not-allowed;
837
+ }
838
+ .ui-switch:focus-visible {
839
+ outline: 2px solid var(--ui-accent);
840
+ outline-offset: 2px;
841
+ }
842
+
843
+ .ui-slider {
844
+ display: flex;
845
+ flex-direction: column;
846
+ gap: 6px;
847
+ }
848
+ .ui-slider-head {
849
+ display: flex;
850
+ align-items: center;
851
+ justify-content: space-between;
852
+ gap: 12px;
853
+ }
854
+ .ui-slider-label {
855
+ font-size: 12px;
856
+ color: var(--ui-text);
857
+ }
858
+ .ui-slider-value {
859
+ font-size: 12px;
860
+ color: var(--ui-text-2);
861
+ font-variant-numeric: tabular-nums;
862
+ }
863
+ .ui-slider-input {
864
+ width: 100%;
865
+ accent-color: var(--ui-accent);
866
+ cursor: pointer;
867
+ }
868
+ .ui-slider-input:disabled {
869
+ opacity: 0.5;
870
+ cursor: not-allowed;
871
+ }
872
+
873
+ .ui-alert {
874
+ display: flex;
875
+ align-items: flex-start;
876
+ gap: 12px;
877
+ padding: 12px 14px;
878
+ border: 1px solid;
879
+ border-radius: 10px;
880
+ font-size: 13px;
881
+ }
882
+ .ui-alert-content {
883
+ flex: 1;
884
+ min-width: 0;
885
+ }
886
+ .ui-alert-title {
887
+ font-weight: 600;
888
+ margin-bottom: 2px;
889
+ }
890
+ .ui-alert-body {
891
+ color: var(--ui-text-2);
892
+ line-height: 1.5;
893
+ }
894
+ .ui-alert-actions {
895
+ display: flex;
896
+ align-items: center;
897
+ gap: 8px;
898
+ flex-shrink: 0;
899
+ }
900
+ .ui-alert-dismiss {
901
+ padding: 0 4px;
902
+ border: none;
903
+ background: none;
904
+ color: inherit;
905
+ font-size: 16px;
906
+ line-height: 1;
907
+ cursor: pointer;
908
+ opacity: 0.7;
909
+ }
910
+ .ui-alert-dismiss:hover {
911
+ opacity: 1;
912
+ }
913
+ .ui-alert--info {
914
+ background: color-mix(in srgb, var(--ui-blue) 12%, var(--ui-surface));
915
+ border-color: color-mix(in srgb, var(--ui-blue) 32%, transparent);
916
+ color: var(--ui-blue);
917
+ }
918
+ .ui-alert--success {
919
+ background: color-mix(in srgb, var(--ui-green) 12%, var(--ui-surface));
920
+ border-color: color-mix(in srgb, var(--ui-green) 32%, transparent);
921
+ color: var(--ui-green);
922
+ }
923
+ .ui-alert--warning {
924
+ background: color-mix(in srgb, var(--ui-amber) 12%, var(--ui-surface));
925
+ border-color: color-mix(in srgb, var(--ui-amber) 32%, transparent);
926
+ color: var(--ui-amber);
927
+ }
928
+ .ui-alert--danger {
929
+ background: color-mix(in srgb, var(--ui-red) 12%, var(--ui-surface));
930
+ border-color: color-mix(in srgb, var(--ui-red) 32%, transparent);
931
+ color: var(--ui-red);
932
+ }
933
+ .ui-alert--neutral {
934
+ background: var(--ui-surface-2);
935
+ border-color: var(--ui-border);
936
+ color: var(--ui-text);
937
+ }
938
+
939
+ .ui-badge {
940
+ display: inline-flex;
941
+ align-items: center;
942
+ gap: 5px;
943
+ padding: 2px 8px;
944
+ border: 1px solid transparent;
945
+ border-radius: 999px;
946
+ font-size: 11px;
947
+ font-weight: 600;
948
+ line-height: 1.5;
949
+ white-space: nowrap;
950
+ }
951
+ .ui-badge-dot {
952
+ width: 6px;
953
+ height: 6px;
954
+ border-radius: 50%;
955
+ background: currentColor;
956
+ flex-shrink: 0;
957
+ }
958
+ .ui-badge--soft.ui-badge--neutral {
959
+ background: var(--ui-surface-2);
960
+ color: var(--ui-text-2);
961
+ }
962
+ .ui-badge--soft.ui-badge--info {
963
+ background: color-mix(in srgb, var(--ui-blue) 14%, transparent);
964
+ color: var(--ui-blue);
965
+ }
966
+ .ui-badge--soft.ui-badge--success {
967
+ background: color-mix(in srgb, var(--ui-green) 14%, transparent);
968
+ color: var(--ui-green);
969
+ }
970
+ .ui-badge--soft.ui-badge--warning {
971
+ background: color-mix(in srgb, var(--ui-amber) 14%, transparent);
972
+ color: var(--ui-amber);
973
+ }
974
+ .ui-badge--soft.ui-badge--danger {
975
+ background: color-mix(in srgb, var(--ui-red) 14%, transparent);
976
+ color: var(--ui-red);
977
+ }
978
+ .ui-badge--soft.ui-badge--accent {
979
+ background: color-mix(in srgb, var(--ui-accent) 14%, transparent);
980
+ color: var(--ui-accent);
981
+ }
982
+ .ui-badge--soft.ui-badge--purple {
983
+ background: color-mix(in srgb, var(--ui-purple) 14%, transparent);
984
+ color: var(--ui-purple);
985
+ }
986
+ .ui-badge--solid.ui-badge--neutral {
987
+ background: var(--ui-text-2);
988
+ color: var(--ui-on-accent);
989
+ }
990
+ .ui-badge--solid.ui-badge--info {
991
+ background: var(--ui-blue);
992
+ color: var(--ui-on-accent);
993
+ }
994
+ .ui-badge--solid.ui-badge--success {
995
+ background: var(--ui-green);
996
+ color: var(--ui-on-accent);
997
+ }
998
+ .ui-badge--solid.ui-badge--warning {
999
+ background: var(--ui-amber);
1000
+ color: var(--ui-on-accent);
1001
+ }
1002
+ .ui-badge--solid.ui-badge--danger {
1003
+ background: var(--ui-red);
1004
+ color: var(--ui-on-accent);
1005
+ }
1006
+ .ui-badge--solid.ui-badge--accent {
1007
+ background: var(--ui-accent);
1008
+ color: var(--ui-on-accent);
1009
+ }
1010
+ .ui-badge--solid.ui-badge--purple {
1011
+ background: var(--ui-purple);
1012
+ color: var(--ui-on-accent);
1013
+ }
1014
+ .ui-badge--outline.ui-badge--neutral {
1015
+ border-color: var(--ui-border);
1016
+ color: var(--ui-text-2);
1017
+ }
1018
+ .ui-badge--outline.ui-badge--info {
1019
+ border-color: var(--ui-blue);
1020
+ color: var(--ui-blue);
1021
+ }
1022
+ .ui-badge--outline.ui-badge--success {
1023
+ border-color: var(--ui-green);
1024
+ color: var(--ui-green);
1025
+ }
1026
+ .ui-badge--outline.ui-badge--warning {
1027
+ border-color: var(--ui-amber);
1028
+ color: var(--ui-amber);
1029
+ }
1030
+ .ui-badge--outline.ui-badge--danger {
1031
+ border-color: var(--ui-red);
1032
+ color: var(--ui-red);
1033
+ }
1034
+ .ui-badge--outline.ui-badge--accent {
1035
+ border-color: var(--ui-accent);
1036
+ color: var(--ui-accent);
1037
+ }
1038
+ .ui-badge--outline.ui-badge--purple {
1039
+ border-color: var(--ui-purple);
1040
+ color: var(--ui-purple);
1041
+ }
1042
+ .ui-chip {
1043
+ padding: 3px 6px 3px 9px;
1044
+ border-radius: 7px;
1045
+ }
1046
+ .ui-chip-icon {
1047
+ display: inline-flex;
1048
+ align-items: center;
1049
+ }
1050
+ .ui-chip-label {
1051
+ display: inline-flex;
1052
+ align-items: center;
1053
+ }
1054
+ .ui-chip-remove {
1055
+ display: inline-flex;
1056
+ align-items: center;
1057
+ justify-content: center;
1058
+ width: 16px;
1059
+ height: 16px;
1060
+ padding: 0;
1061
+ border: none;
1062
+ border-radius: 4px;
1063
+ background: transparent;
1064
+ color: inherit;
1065
+ font-size: 14px;
1066
+ line-height: 1;
1067
+ cursor: pointer;
1068
+ opacity: 0.7;
1069
+ }
1070
+ .ui-chip-remove:hover {
1071
+ background: color-mix(in srgb, currentColor 15%, transparent);
1072
+ opacity: 1;
1073
+ }
1074
+
1075
+ .ui-card {
1076
+ background: var(--ui-surface);
1077
+ border: 1px solid var(--ui-border);
1078
+ border-radius: 12px;
1079
+ overflow: hidden;
1080
+ }
1081
+ .ui-card--pad-none {
1082
+ padding: 0;
1083
+ }
1084
+ .ui-card--pad-sm {
1085
+ padding: 12px;
1086
+ }
1087
+ .ui-card--pad-md {
1088
+ padding: 16px;
1089
+ }
1090
+ .ui-card--pad-lg {
1091
+ padding: 20px;
1092
+ }
1093
+ .ui-card-header {
1094
+ display: flex;
1095
+ align-items: flex-start;
1096
+ justify-content: space-between;
1097
+ gap: 12px;
1098
+ padding: 16px 20px;
1099
+ border-bottom: 1px solid var(--ui-border);
1100
+ }
1101
+ .ui-card-title {
1102
+ font-size: 13px;
1103
+ font-weight: 600;
1104
+ color: var(--ui-text);
1105
+ }
1106
+ .ui-card-subtitle {
1107
+ margin-top: 2px;
1108
+ font-size: 12px;
1109
+ color: var(--ui-text-2);
1110
+ }
1111
+ .ui-card-actions {
1112
+ display: flex;
1113
+ align-items: center;
1114
+ gap: 8px;
1115
+ flex-shrink: 0;
1116
+ }
1117
+ .ui-card-body {
1118
+ padding: 20px;
1119
+ }
1120
+ .ui-card-footer {
1121
+ display: flex;
1122
+ align-items: center;
1123
+ justify-content: flex-end;
1124
+ gap: 8px;
1125
+ padding: 14px 20px;
1126
+ border-top: 1px solid var(--ui-border);
1127
+ }
1128
+
1129
+ .ui-empty-state {
1130
+ display: flex;
1131
+ flex-direction: column;
1132
+ align-items: center;
1133
+ gap: 8px;
1134
+ padding: 40px 24px;
1135
+ text-align: center;
1136
+ color: var(--ui-text-2);
1137
+ }
1138
+ .ui-empty-state-icon {
1139
+ display: flex;
1140
+ align-items: center;
1141
+ justify-content: center;
1142
+ width: 40px;
1143
+ height: 40px;
1144
+ margin-bottom: 2px;
1145
+ border-radius: 50%;
1146
+ background: var(--ui-surface-2);
1147
+ color: var(--ui-text-3);
1148
+ }
1149
+ .ui-empty-state-title {
1150
+ font-size: 14px;
1151
+ font-weight: 600;
1152
+ color: var(--ui-text);
1153
+ }
1154
+ .ui-empty-state-description {
1155
+ max-width: 380px;
1156
+ font-size: 12px;
1157
+ line-height: 1.5;
1158
+ }
1159
+ .ui-empty-state-action {
1160
+ margin-top: 8px;
1161
+ }
1162
+
1163
+ .ui-page-header {
1164
+ display: flex;
1165
+ align-items: flex-start;
1166
+ justify-content: space-between;
1167
+ gap: 16px;
1168
+ margin-bottom: 24px;
1169
+ }
1170
+ .ui-page-header-main {
1171
+ display: flex;
1172
+ align-items: flex-start;
1173
+ gap: 10px;
1174
+ min-width: 0;
1175
+ }
1176
+ .ui-page-header-title {
1177
+ margin: 0;
1178
+ font-size: 22px;
1179
+ font-weight: 700;
1180
+ letter-spacing: -0.5px;
1181
+ color: var(--ui-text);
1182
+ }
1183
+ .ui-page-header-subtitle {
1184
+ margin: 2px 0 0;
1185
+ font-size: 13px;
1186
+ color: var(--ui-text-2);
1187
+ }
1188
+ .ui-page-header-actions {
1189
+ display: flex;
1190
+ align-items: center;
1191
+ gap: 8px;
1192
+ flex-shrink: 0;
1193
+ }
1194
+ .ui-page-header-back {
1195
+ display: inline-flex;
1196
+ align-items: center;
1197
+ justify-content: center;
1198
+ width: 32px;
1199
+ height: 32px;
1200
+ padding: 0;
1201
+ border: 1px solid var(--ui-border);
1202
+ border-radius: 8px;
1203
+ background: var(--ui-surface);
1204
+ color: var(--ui-text-2);
1205
+ font-size: 18px;
1206
+ line-height: 1;
1207
+ cursor: pointer;
1208
+ }
1209
+ .ui-page-header-back:hover {
1210
+ border-color: var(--ui-text-3);
1211
+ color: var(--ui-text);
1212
+ }
1213
+
1214
+ .ui-combobox {
1215
+ position: relative;
1216
+ width: 100%;
1217
+ }
1218
+ .ui-combobox-menu {
1219
+ position: absolute;
1220
+ top: calc(100% + 4px);
1221
+ right: 0;
1222
+ left: 0;
1223
+ z-index: 2000;
1224
+ max-height: 260px;
1225
+ padding: 4px;
1226
+ overflow-y: auto;
1227
+ background: var(--ui-surface);
1228
+ border: 1px solid var(--ui-border);
1229
+ border-radius: 10px;
1230
+ box-shadow: var(--ui-shadow);
1231
+ }
1232
+ .ui-combobox-option {
1233
+ display: flex;
1234
+ flex-direction: column;
1235
+ gap: 1px;
1236
+ padding: 7px 10px;
1237
+ border-radius: 7px;
1238
+ color: var(--ui-text-2);
1239
+ font-size: 13px;
1240
+ cursor: pointer;
1241
+ }
1242
+ .ui-combobox-option.is-active {
1243
+ background: var(--ui-surface-2);
1244
+ }
1245
+ .ui-combobox-option.is-selected {
1246
+ color: var(--ui-text);
1247
+ font-weight: 600;
1248
+ }
1249
+ .ui-combobox-option.is-disabled {
1250
+ opacity: 0.5;
1251
+ cursor: not-allowed;
1252
+ }
1253
+ .ui-combobox-description {
1254
+ font-size: 11px;
1255
+ color: var(--ui-text-3);
1256
+ }
1257
+ .ui-combobox-empty {
1258
+ padding: 10px;
1259
+ color: var(--ui-text-3);
1260
+ font-size: 12px;
1261
+ text-align: center;
1262
+ }
1263
+
1264
+ .ui-tabs {
1265
+ display: flex;
1266
+ gap: 4px;
1267
+ border-bottom: 1px solid var(--ui-border);
1268
+ }
1269
+ .ui-tab {
1270
+ margin-bottom: -1px;
1271
+ padding: 8px 12px;
1272
+ border: none;
1273
+ border-bottom: 2px solid transparent;
1274
+ background: none;
1275
+ color: var(--ui-text-2);
1276
+ font-family: inherit;
1277
+ font-size: 13px;
1278
+ cursor: pointer;
1279
+ }
1280
+ .ui-tab:hover {
1281
+ color: var(--ui-text);
1282
+ }
1283
+ .ui-tab.is-active {
1284
+ border-bottom-color: var(--ui-accent);
1285
+ color: var(--ui-text);
1286
+ font-weight: 600;
1287
+ }
1288
+ .ui-tab:disabled {
1289
+ opacity: 0.5;
1290
+ cursor: not-allowed;
1291
+ }
1292
+ .ui-tab:focus-visible {
1293
+ outline: 2px solid var(--ui-accent);
1294
+ outline-offset: 2px;
1295
+ }
1296
+
1297
+ .ui-segmented {
1298
+ display: inline-flex;
1299
+ gap: 2px;
1300
+ padding: 3px;
1301
+ border: 1px solid var(--ui-border);
1302
+ border-radius: 9px;
1303
+ background: var(--ui-surface-2);
1304
+ }
1305
+ .ui-segmented-item {
1306
+ padding: 6px 12px;
1307
+ border: none;
1308
+ border-radius: 6px;
1309
+ background: transparent;
1310
+ color: var(--ui-text-2);
1311
+ font-family: inherit;
1312
+ font-size: 12px;
1313
+ cursor: pointer;
1314
+ }
1315
+ .ui-segmented--sm .ui-segmented-item {
1316
+ padding: 4px 10px;
1317
+ font-size: 11px;
1318
+ }
1319
+ .ui-segmented-item.is-active {
1320
+ background: var(--ui-surface);
1321
+ color: var(--ui-text);
1322
+ font-weight: 600;
1323
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
1324
+ }
1325
+ .ui-segmented-item:disabled {
1326
+ opacity: 0.5;
1327
+ cursor: not-allowed;
1328
+ }
1329
+ .ui-segmented-item:focus-visible {
1330
+ outline: 2px solid var(--ui-accent);
1331
+ outline-offset: 2px;
1332
+ }
1333
+
1334
+ .ui-menu {
1335
+ position: relative;
1336
+ display: inline-flex;
1337
+ }
1338
+ .ui-menu-trigger {
1339
+ display: inline-flex;
1340
+ align-items: center;
1341
+ gap: 6px;
1342
+ padding: 7px 12px;
1343
+ border: 1px solid var(--ui-border);
1344
+ border-radius: 8px;
1345
+ background: var(--ui-surface-2);
1346
+ color: var(--ui-text);
1347
+ font-family: inherit;
1348
+ font-size: 13px;
1349
+ cursor: pointer;
1350
+ }
1351
+ .ui-menu-trigger:hover {
1352
+ border-color: var(--ui-text-3);
1353
+ }
1354
+ .ui-menu-trigger:focus-visible {
1355
+ outline: 2px solid var(--ui-accent);
1356
+ outline-offset: 2px;
1357
+ }
1358
+ .ui-menu-caret {
1359
+ color: var(--ui-text-3);
1360
+ font-size: 9px;
1361
+ }
1362
+ .ui-menu-list {
1363
+ position: absolute;
1364
+ top: calc(100% + 4px);
1365
+ left: 0;
1366
+ z-index: 2000;
1367
+ min-width: 180px;
1368
+ padding: 4px;
1369
+ background: var(--ui-surface);
1370
+ border: 1px solid var(--ui-border);
1371
+ border-radius: 10px;
1372
+ box-shadow: var(--ui-shadow);
1373
+ }
1374
+ .ui-menu-list.is-end {
1375
+ right: 0;
1376
+ left: auto;
1377
+ }
1378
+ .ui-menu-item {
1379
+ display: flex;
1380
+ align-items: center;
1381
+ gap: 8px;
1382
+ width: 100%;
1383
+ padding: 7px 10px;
1384
+ border: none;
1385
+ border-radius: 7px;
1386
+ background: none;
1387
+ color: var(--ui-text-2);
1388
+ font-family: inherit;
1389
+ font-size: 13px;
1390
+ text-align: left;
1391
+ cursor: pointer;
1392
+ }
1393
+ .ui-menu-item:hover,
1394
+ .ui-menu-item:focus-visible {
1395
+ background: var(--ui-surface-2);
1396
+ color: var(--ui-text);
1397
+ outline: none;
1398
+ }
1399
+ .ui-menu-item.is-danger {
1400
+ color: var(--ui-red);
1401
+ }
1402
+ .ui-menu-item:disabled {
1403
+ opacity: 0.5;
1404
+ cursor: not-allowed;
1405
+ }
1406
+ .ui-menu-item-icon {
1407
+ display: inline-flex;
1408
+ justify-content: center;
1409
+ width: 16px;
1410
+ }
1411
+ .ui-menu-separator {
1412
+ height: 1px;
1413
+ margin: 4px 2px;
1414
+ background: var(--ui-border);
1415
+ }
1416
+
1417
+ .ui-drawer-overlay {
1418
+ position: fixed;
1419
+ inset: 0;
1420
+ z-index: 2000;
1421
+ display: flex;
1422
+ background: var(--ui-overlay);
1423
+ }
1424
+ .ui-drawer {
1425
+ display: flex;
1426
+ flex-direction: column;
1427
+ height: 100%;
1428
+ margin-left: auto;
1429
+ background: var(--ui-surface);
1430
+ border-left: 1px solid var(--ui-border);
1431
+ box-shadow: var(--ui-shadow-lg);
1432
+ outline: none;
1433
+ }
1434
+ .ui-drawer--left {
1435
+ margin-right: auto;
1436
+ margin-left: 0;
1437
+ border-right: 1px solid var(--ui-border);
1438
+ border-left: none;
1439
+ }
1440
+ .ui-drawer-header {
1441
+ display: flex;
1442
+ align-items: center;
1443
+ justify-content: space-between;
1444
+ gap: 12px;
1445
+ padding: 18px 20px;
1446
+ border-bottom: 1px solid var(--ui-border);
1447
+ }
1448
+ .ui-drawer-title {
1449
+ font-size: 16px;
1450
+ font-weight: 700;
1451
+ color: var(--ui-text);
1452
+ }
1453
+ .ui-drawer-close {
1454
+ display: inline-flex;
1455
+ align-items: center;
1456
+ justify-content: center;
1457
+ padding: 4px 8px;
1458
+ border: 1px solid var(--ui-border);
1459
+ border-radius: 7px;
1460
+ background: var(--ui-surface-2);
1461
+ color: var(--ui-text-2);
1462
+ font-size: 15px;
1463
+ line-height: 1;
1464
+ cursor: pointer;
1465
+ }
1466
+ .ui-drawer-body {
1467
+ flex: 1;
1468
+ padding: 20px;
1469
+ overflow-y: auto;
1470
+ }
1471
+ .ui-drawer-footer {
1472
+ display: flex;
1473
+ justify-content: flex-end;
1474
+ gap: 8px;
1475
+ padding: 14px 20px;
1476
+ border-top: 1px solid var(--ui-border);
1477
+ }
1478
+
1479
+ .ui-toast-viewport {
1480
+ position: fixed;
1481
+ z-index: 4000;
1482
+ display: flex;
1483
+ flex-direction: column;
1484
+ gap: 8px;
1485
+ width: min(360px, calc(100vw - 32px));
1486
+ pointer-events: none;
1487
+ }
1488
+ .ui-toast-viewport--bottom-right {
1489
+ right: 16px;
1490
+ bottom: 16px;
1491
+ align-items: flex-end;
1492
+ }
1493
+ .ui-toast-viewport--bottom-left {
1494
+ bottom: 16px;
1495
+ left: 16px;
1496
+ align-items: flex-start;
1497
+ }
1498
+ .ui-toast-viewport--bottom-center {
1499
+ bottom: 16px;
1500
+ left: 50%;
1501
+ align-items: center;
1502
+ transform: translateX(-50%);
1503
+ }
1504
+ .ui-toast-viewport--top-right {
1505
+ top: 16px;
1506
+ right: 16px;
1507
+ align-items: flex-end;
1508
+ }
1509
+ .ui-toast-viewport--top-center {
1510
+ top: 16px;
1511
+ left: 50%;
1512
+ align-items: center;
1513
+ transform: translateX(-50%);
1514
+ }
1515
+ .ui-toast {
1516
+ display: flex;
1517
+ align-items: flex-start;
1518
+ gap: 12px;
1519
+ width: 100%;
1520
+ padding: 12px 14px;
1521
+ border: 1px solid var(--ui-border);
1522
+ border-left: 3px solid var(--ui-accent);
1523
+ border-radius: 10px;
1524
+ background: var(--ui-surface);
1525
+ box-shadow: var(--ui-shadow);
1526
+ pointer-events: auto;
1527
+ animation: ui-toast-in 0.15s ease-out;
1528
+ }
1529
+ .ui-toast--info {
1530
+ border-left-color: var(--ui-blue);
1531
+ }
1532
+ .ui-toast--success {
1533
+ border-left-color: var(--ui-green);
1534
+ }
1535
+ .ui-toast--warning {
1536
+ border-left-color: var(--ui-amber);
1537
+ }
1538
+ .ui-toast--danger {
1539
+ border-left-color: var(--ui-red);
1540
+ }
1541
+ .ui-toast-content {
1542
+ flex: 1;
1543
+ min-width: 0;
1544
+ }
1545
+ .ui-toast-title {
1546
+ font-size: 13px;
1547
+ font-weight: 600;
1548
+ color: var(--ui-text);
1549
+ }
1550
+ .ui-toast-description {
1551
+ margin-top: 2px;
1552
+ font-size: 12px;
1553
+ line-height: 1.45;
1554
+ color: var(--ui-text-2);
1555
+ }
1556
+ .ui-toast-close {
1557
+ padding: 0 4px;
1558
+ border: none;
1559
+ background: none;
1560
+ color: var(--ui-text-3);
1561
+ font-size: 16px;
1562
+ line-height: 1;
1563
+ cursor: pointer;
1564
+ }
1565
+ .ui-toast-close:hover {
1566
+ color: var(--ui-text);
1567
+ }
1568
+ @keyframes ui-toast-in {
1569
+ from {
1570
+ opacity: 0;
1571
+ transform: translateY(6px);
1572
+ }
1573
+ to {
1574
+ opacity: 1;
1575
+ transform: translateY(0);
1576
+ }
1577
+ }
1578
+
1579
+ .ui-data-table-wrap {
1580
+ width: 100%;
1581
+ overflow-x: auto;
1582
+ border: 1px solid var(--ui-border);
1583
+ border-radius: 12px;
1584
+ background: var(--ui-surface);
1585
+ }
1586
+ .ui-data-table {
1587
+ width: 100%;
1588
+ border-collapse: collapse;
1589
+ color: var(--ui-text);
1590
+ font-size: 13px;
1591
+ }
1592
+ .ui-data-table caption {
1593
+ padding: 12px 16px;
1594
+ font-weight: 600;
1595
+ text-align: left;
1596
+ }
1597
+ .ui-data-table th {
1598
+ padding: 10px 14px;
1599
+ border-bottom: 1px solid var(--ui-border);
1600
+ background: var(--ui-surface-2);
1601
+ color: var(--ui-text-2);
1602
+ font-size: 11px;
1603
+ font-weight: 700;
1604
+ letter-spacing: 0.04em;
1605
+ text-transform: uppercase;
1606
+ white-space: nowrap;
1607
+ }
1608
+ .ui-data-table td {
1609
+ padding: 11px 14px;
1610
+ border-bottom: 1px solid var(--ui-border);
1611
+ color: var(--ui-text-2);
1612
+ }
1613
+ .ui-data-table tbody tr:last-child td {
1614
+ border-bottom: none;
1615
+ }
1616
+ .ui-data-table tbody tr.is-clickable {
1617
+ cursor: pointer;
1618
+ }
1619
+ .ui-data-table tbody tr.is-clickable:hover {
1620
+ background: var(--ui-surface-2);
1621
+ }
1622
+ .ui-data-table tbody tr.is-clickable:focus-visible {
1623
+ outline: 2px solid var(--ui-accent);
1624
+ outline-offset: -2px;
1625
+ }
1626
+ .ui-data-table-empty {
1627
+ padding: 28px;
1628
+ color: var(--ui-text-3);
1629
+ text-align: center;
1630
+ }
1631
+ .ui-data-table-sort {
1632
+ display: inline-flex;
1633
+ align-items: center;
1634
+ gap: 6px;
1635
+ padding: 0;
1636
+ border: none;
1637
+ background: none;
1638
+ color: inherit;
1639
+ font: inherit;
1640
+ letter-spacing: inherit;
1641
+ text-transform: inherit;
1642
+ cursor: pointer;
1643
+ }
1644
+ .ui-data-table-sort-icon {
1645
+ color: var(--ui-text-3);
1646
+ font-size: 9px;
1647
+ }
1648
+
1649
+ .ui-file-upload {
1650
+ display: flex;
1651
+ flex-direction: column;
1652
+ align-items: center;
1653
+ justify-content: center;
1654
+ gap: 6px;
1655
+ padding: 24px;
1656
+ border: 1.5px dashed var(--ui-border);
1657
+ border-radius: 12px;
1658
+ background: var(--ui-surface);
1659
+ color: var(--ui-text-2);
1660
+ text-align: center;
1661
+ cursor: pointer;
1662
+ transition:
1663
+ border-color 0.15s,
1664
+ background-color 0.15s;
1665
+ }
1666
+ .ui-file-upload:hover:not(.is-disabled),
1667
+ .ui-file-upload.is-dragging {
1668
+ border-color: var(--ui-accent);
1669
+ background: color-mix(in srgb, var(--ui-accent) 8%, var(--ui-surface));
1670
+ }
1671
+ .ui-file-upload:focus-visible {
1672
+ outline: 2px solid var(--ui-accent);
1673
+ outline-offset: 2px;
1674
+ }
1675
+ .ui-file-upload.is-disabled {
1676
+ opacity: 0.5;
1677
+ cursor: not-allowed;
1678
+ }
1679
+ .ui-file-upload-input {
1680
+ display: none;
1681
+ }
1682
+ .ui-file-upload-icon {
1683
+ display: flex;
1684
+ align-items: center;
1685
+ justify-content: center;
1686
+ width: 36px;
1687
+ height: 36px;
1688
+ border-radius: 50%;
1689
+ background: var(--ui-surface-2);
1690
+ color: var(--ui-accent);
1691
+ font-size: 18px;
1692
+ }
1693
+ .ui-file-upload-label {
1694
+ color: var(--ui-text);
1695
+ font-size: 13px;
1696
+ font-weight: 600;
1697
+ }
1698
+ .ui-file-upload-hint {
1699
+ color: var(--ui-text-3);
1700
+ font-size: 11px;
1701
+ }
1702
+ }