uiplex 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +207 -0
  3. package/dist/Box/Box.d.ts +52 -0
  4. package/dist/Box/Box.d.ts.map +1 -0
  5. package/dist/Box/index.d.ts +3 -0
  6. package/dist/Box/index.d.ts.map +1 -0
  7. package/dist/Button/Button.d.ts +17 -0
  8. package/dist/Button/Button.d.ts.map +1 -0
  9. package/dist/Button/index.d.ts +3 -0
  10. package/dist/Button/index.d.ts.map +1 -0
  11. package/dist/CircularProgress/CircularProgress.d.ts +23 -0
  12. package/dist/CircularProgress/CircularProgress.d.ts.map +1 -0
  13. package/dist/CircularProgress/index.d.ts +3 -0
  14. package/dist/CircularProgress/index.d.ts.map +1 -0
  15. package/dist/Flex/Flex.d.ts +57 -0
  16. package/dist/Flex/Flex.d.ts.map +1 -0
  17. package/dist/Flex/index.d.ts +3 -0
  18. package/dist/Flex/index.d.ts.map +1 -0
  19. package/dist/FormControl/FormControl.d.ts +20 -0
  20. package/dist/FormControl/FormControl.d.ts.map +1 -0
  21. package/dist/FormControl/FormErrorMessage.d.ts +8 -0
  22. package/dist/FormControl/FormErrorMessage.d.ts.map +1 -0
  23. package/dist/FormControl/FormLabel.d.ts +9 -0
  24. package/dist/FormControl/FormLabel.d.ts.map +1 -0
  25. package/dist/FormControl/index.d.ts +7 -0
  26. package/dist/FormControl/index.d.ts.map +1 -0
  27. package/dist/Grid/Grid.d.ts +42 -0
  28. package/dist/Grid/Grid.d.ts.map +1 -0
  29. package/dist/Grid/index.d.ts +3 -0
  30. package/dist/Grid/index.d.ts.map +1 -0
  31. package/dist/IconButton/IconButton.d.ts +15 -0
  32. package/dist/IconButton/IconButton.d.ts.map +1 -0
  33. package/dist/IconButton/index.d.ts +3 -0
  34. package/dist/IconButton/index.d.ts.map +1 -0
  35. package/dist/Input/Input.d.ts +13 -0
  36. package/dist/Input/Input.d.ts.map +1 -0
  37. package/dist/Input/index.d.ts +3 -0
  38. package/dist/Input/index.d.ts.map +1 -0
  39. package/dist/Link/Link.d.ts +13 -0
  40. package/dist/Link/Link.d.ts.map +1 -0
  41. package/dist/Link/index.d.ts +3 -0
  42. package/dist/Link/index.d.ts.map +1 -0
  43. package/dist/Loader/Loader.d.ts +12 -0
  44. package/dist/Loader/Loader.d.ts.map +1 -0
  45. package/dist/Loader/index.d.ts +3 -0
  46. package/dist/Loader/index.d.ts.map +1 -0
  47. package/dist/Modal/Modal.d.ts +45 -0
  48. package/dist/Modal/Modal.d.ts.map +1 -0
  49. package/dist/Modal/index.d.ts +3 -0
  50. package/dist/Modal/index.d.ts.map +1 -0
  51. package/dist/Popover/Popover.d.ts +43 -0
  52. package/dist/Popover/Popover.d.ts.map +1 -0
  53. package/dist/Popover/index.d.ts +3 -0
  54. package/dist/Popover/index.d.ts.map +1 -0
  55. package/dist/Radio/Radio.d.ts +34 -0
  56. package/dist/Radio/Radio.d.ts.map +1 -0
  57. package/dist/Radio/index.d.ts +3 -0
  58. package/dist/Radio/index.d.ts.map +1 -0
  59. package/dist/Text/Text.d.ts +17 -0
  60. package/dist/Text/Text.d.ts.map +1 -0
  61. package/dist/Text/index.d.ts +3 -0
  62. package/dist/Text/index.d.ts.map +1 -0
  63. package/dist/Textarea/Textarea.d.ts +14 -0
  64. package/dist/Textarea/Textarea.d.ts.map +1 -0
  65. package/dist/Textarea/index.d.ts +3 -0
  66. package/dist/Textarea/index.d.ts.map +1 -0
  67. package/dist/Theme/ThemeProvider.d.ts +15 -0
  68. package/dist/Theme/ThemeProvider.d.ts.map +1 -0
  69. package/dist/Theme/ThemeScript.d.ts +31 -0
  70. package/dist/Theme/ThemeScript.d.ts.map +1 -0
  71. package/dist/Theme/ThemeToggle.d.ts +10 -0
  72. package/dist/Theme/ThemeToggle.d.ts.map +1 -0
  73. package/dist/Theme/index.d.ts +5 -0
  74. package/dist/Theme/index.d.ts.map +1 -0
  75. package/dist/Toast/Toast.d.ts +26 -0
  76. package/dist/Toast/Toast.d.ts.map +1 -0
  77. package/dist/Toast/ToastContainerGlobal.d.ts +3 -0
  78. package/dist/Toast/ToastContainerGlobal.d.ts.map +1 -0
  79. package/dist/Toast/ToastProvider.d.ts +11 -0
  80. package/dist/Toast/ToastProvider.d.ts.map +1 -0
  81. package/dist/Toast/ToastStatic.d.ts +18 -0
  82. package/dist/Toast/ToastStatic.d.ts.map +1 -0
  83. package/dist/Toast/index.d.ts +6 -0
  84. package/dist/Toast/index.d.ts.map +1 -0
  85. package/dist/Toast/toastManager.d.ts +28 -0
  86. package/dist/Toast/toastManager.d.ts.map +1 -0
  87. package/dist/Toast/useToast.d.ts +17 -0
  88. package/dist/Toast/useToast.d.ts.map +1 -0
  89. package/dist/Tooltip/Tooltip.d.ts +14 -0
  90. package/dist/Tooltip/Tooltip.d.ts.map +1 -0
  91. package/dist/Tooltip/index.d.ts +3 -0
  92. package/dist/Tooltip/index.d.ts.map +1 -0
  93. package/dist/hooks/index.d.ts +5 -0
  94. package/dist/hooks/index.d.ts.map +1 -0
  95. package/dist/hooks/useDisclosure.d.ts +8 -0
  96. package/dist/hooks/useDisclosure.d.ts.map +1 -0
  97. package/dist/hooks/useOutsideClick.d.ts +8 -0
  98. package/dist/hooks/useOutsideClick.d.ts.map +1 -0
  99. package/dist/index.cjs +1097 -0
  100. package/dist/index.css +2339 -0
  101. package/dist/index.d.ts +59 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +1056 -0
  104. package/package.json +72 -0
package/dist/index.css ADDED
@@ -0,0 +1,2339 @@
1
+ .ui-button {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ gap: 0.5rem;
6
+ border-radius: 0.375rem;
7
+ font-weight: 500;
8
+ transition: all 0.2s ease-in-out;
9
+ border: none;
10
+ cursor: pointer;
11
+ font-family: inherit;
12
+ text-decoration: none;
13
+ outline: none;
14
+ position: relative;
15
+ }
16
+
17
+ .ui-button:focus-visible {
18
+ outline: 2px solid var(--accent-primary, #bb00ed);
19
+ outline-offset: 2px;
20
+ }
21
+
22
+ .ui-button:disabled {
23
+ opacity: 0.5;
24
+ cursor: not-allowed;
25
+ pointer-events: none;
26
+ }
27
+
28
+ .ui-button--loading {
29
+ cursor: wait;
30
+ }
31
+
32
+ .ui-button__spinner {
33
+ width: 1em;
34
+ height: 1em;
35
+ animation: spin 1s linear infinite;
36
+ }
37
+
38
+ .ui-button__left-icon,
39
+ .ui-button__right-icon {
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ }
44
+
45
+ .ui-button__content {
46
+ display: flex;
47
+ align-items: center;
48
+ }
49
+
50
+ @keyframes spin {
51
+ from {
52
+ transform: rotate(0deg);
53
+ }
54
+ to {
55
+ transform: rotate(360deg);
56
+ }
57
+ }
58
+
59
+ /* Variants */
60
+ .ui-button--primary {
61
+ background-color: var(--accent-primary, #bb00ed);
62
+ color: white;
63
+ }
64
+
65
+ .ui-button--primary:hover:not(:disabled) {
66
+ background-color: var(--accent-secondary, #bb00ed);
67
+ }
68
+
69
+ .ui-button--secondary {
70
+ background-color: var(--bg-secondary, #f3f4f6);
71
+ color: var(--text-primary, #111827);
72
+ }
73
+
74
+ .ui-button--secondary:hover:not(:disabled) {
75
+ background-color: var(--bg-tertiary, #e5e7eb);
76
+ }
77
+
78
+ .ui-button--outline {
79
+ background-color: transparent;
80
+ border: 1px solid var(--border-secondary, #d1d5db);
81
+ color: var(--text-secondary, #374151);
82
+ }
83
+
84
+ .ui-button--outline:hover:not(:disabled) {
85
+ background-color: var(--bg-secondary, #f9fafb);
86
+ }
87
+
88
+ .ui-button--link {
89
+ background-color: transparent;
90
+ color: var(--accent-primary, #bb00ed);
91
+ padding: 0;
92
+ text-decoration: underline;
93
+ }
94
+
95
+ .ui-button--link:hover:not(:disabled) {
96
+ color: var(--accent-secondary, #bb00ed);
97
+ text-decoration: none;
98
+ }
99
+
100
+ /* Sizes */
101
+ .ui-button--xs {
102
+ height: 1.5rem;
103
+ padding: 0 0.5rem;
104
+ font-size: 0.75rem;
105
+ gap: 0.25rem;
106
+ }
107
+
108
+ .ui-button--xs .ui-button__spinner {
109
+ width: 0.75rem;
110
+ height: 0.75rem;
111
+ }
112
+
113
+ .ui-button--sm {
114
+ height: 2rem;
115
+ padding: 0 0.75rem;
116
+ font-size: 0.875rem;
117
+ gap: 0.375rem;
118
+ }
119
+
120
+ .ui-button--md {
121
+ height: 2.5rem;
122
+ padding: 0.5rem 1rem;
123
+ gap: 0.5rem;
124
+ }
125
+
126
+ .ui-button--lg {
127
+ height: 3rem;
128
+ padding: 0 1.5rem;
129
+ font-size: 1.125rem;
130
+ gap: 0.625rem;
131
+ }
132
+
133
+ /* Color Schemes */
134
+ .ui-button--blue.ui-button--primary {
135
+ background-color: #2563eb;
136
+ color: white;
137
+ }
138
+
139
+ .ui-button--blue.ui-button--primary:hover:not(:disabled) {
140
+ background-color: #1d4ed8;
141
+ }
142
+
143
+ .ui-button--blue.ui-button--outline {
144
+ border-color: #2563eb;
145
+ color: #2563eb;
146
+ }
147
+
148
+ .ui-button--blue.ui-button--outline:hover:not(:disabled) {
149
+ background-color: #eff6ff;
150
+ }
151
+
152
+ .ui-button--blue.ui-button--link {
153
+ color: #2563eb;
154
+ }
155
+
156
+ .ui-button--blue.ui-button--link:hover:not(:disabled) {
157
+ color: #1d4ed8;
158
+ }
159
+
160
+ .ui-button--green.ui-button--primary {
161
+ background-color: #059669;
162
+ color: white;
163
+ }
164
+
165
+ .ui-button--green.ui-button--primary:hover:not(:disabled) {
166
+ background-color: #047857;
167
+ }
168
+
169
+ .ui-button--green.ui-button--outline {
170
+ border-color: #059669;
171
+ color: #059669;
172
+ }
173
+
174
+ .ui-button--green.ui-button--outline:hover:not(:disabled) {
175
+ background-color: #ecfdf5;
176
+ }
177
+
178
+ .ui-button--green.ui-button--link {
179
+ color: #059669;
180
+ }
181
+
182
+ .ui-button--green.ui-button--link:hover:not(:disabled) {
183
+ color: #047857;
184
+ }
185
+
186
+ .ui-button--red.ui-button--primary {
187
+ background-color: #dc2626;
188
+ color: white;
189
+ }
190
+
191
+ .ui-button--red.ui-button--primary:hover:not(:disabled) {
192
+ background-color: #b91c1c;
193
+ }
194
+
195
+ .ui-button--red.ui-button--outline {
196
+ border-color: #dc2626;
197
+ color: #dc2626;
198
+ }
199
+
200
+ .ui-button--red.ui-button--outline:hover:not(:disabled) {
201
+ background-color: #fef2f2;
202
+ }
203
+
204
+ .ui-button--red.ui-button--link {
205
+ color: #dc2626;
206
+ }
207
+
208
+ .ui-button--red.ui-button--link:hover:not(:disabled) {
209
+ color: #b91c1c;
210
+ }
211
+
212
+ .ui-button--yellow.ui-button--primary {
213
+ background-color: #d97706;
214
+ color: white;
215
+ }
216
+
217
+ .ui-button--yellow.ui-button--primary:hover:not(:disabled) {
218
+ background-color: #b45309;
219
+ }
220
+
221
+ .ui-button--yellow.ui-button--outline {
222
+ border-color: #d97706;
223
+ color: #d97706;
224
+ }
225
+
226
+ .ui-button--yellow.ui-button--outline:hover:not(:disabled) {
227
+ background-color: #fffbeb;
228
+ }
229
+
230
+ .ui-button--yellow.ui-button--link {
231
+ color: #d97706;
232
+ }
233
+
234
+ .ui-button--yellow.ui-button--link:hover:not(:disabled) {
235
+ color: #b45309;
236
+ }
237
+
238
+ .ui-button--purple.ui-button--primary {
239
+ background-color: #7c3aed;
240
+ color: white;
241
+ }
242
+
243
+ .ui-button--purple.ui-button--primary:hover:not(:disabled) {
244
+ background-color: #6d28d9;
245
+ }
246
+
247
+ .ui-button--purple.ui-button--outline {
248
+ border-color: #7c3aed;
249
+ color: #7c3aed;
250
+ }
251
+
252
+ .ui-button--purple.ui-button--outline:hover:not(:disabled) {
253
+ background-color: #faf5ff;
254
+ }
255
+
256
+ .ui-button--purple.ui-button--link {
257
+ color: #7c3aed;
258
+ }
259
+
260
+ .ui-button--purple.ui-button--link:hover:not(:disabled) {
261
+ color: #6d28d9;
262
+ }
263
+
264
+ .ui-button--gray.ui-button--primary {
265
+ background-color: #6b7280;
266
+ color: white;
267
+ }
268
+
269
+ .ui-button--gray.ui-button--primary:hover:not(:disabled) {
270
+ background-color: #4b5563;
271
+ }
272
+
273
+ .ui-button--gray.ui-button--outline {
274
+ border-color: #6b7280;
275
+ color: #6b7280;
276
+ }
277
+
278
+ .ui-button--gray.ui-button--outline:hover:not(:disabled) {
279
+ background-color: #f9fafb;
280
+ }
281
+
282
+ .ui-button--gray.ui-button--link {
283
+ color: #6b7280;
284
+ }
285
+
286
+ .ui-button--gray.ui-button--link:hover:not(:disabled) {
287
+ color: #4b5563;
288
+ }
289
+
290
+ /* Base Loader Styles */
291
+ .ui-loader {
292
+ display: flex;
293
+ align-items: center;
294
+ justify-content: center;
295
+ width: 100%;
296
+ height: 100%;
297
+ color: var(--accent-primary, #fbbf24); /* Vibrant yellow color */
298
+ }
299
+
300
+ /* Enhanced neon yellow for better visibility */
301
+ .ui-loader--spinner .ui-loader__spinner {
302
+ filter: drop-shadow(0 0 4px rgba(251, 191, 36, 0.6));
303
+ }
304
+
305
+ .ui-loader--centered {
306
+ position: absolute;
307
+ top: 0;
308
+ left: 0;
309
+ right: 0;
310
+ bottom: 0;
311
+ background-color: rgba(255, 255, 255, 0.8);
312
+ z-index: 1000;
313
+ }
314
+
315
+ /* Size Variants */
316
+ .ui-loader--xs {
317
+ min-width: 16px;
318
+ min-height: 16px;
319
+ }
320
+
321
+ .ui-loader--sm {
322
+ min-width: 24px;
323
+ min-height: 24px;
324
+ }
325
+
326
+ .ui-loader--md {
327
+ min-width: 32px;
328
+ min-height: 32px;
329
+ }
330
+
331
+ .ui-loader--lg {
332
+ min-width: 44px;
333
+ min-height: 44px;
334
+ }
335
+
336
+ /* Spinner Variant */
337
+ .ui-loader--spinner .ui-loader__spinner {
338
+ animation: ui-loader-rotation 1s linear infinite;
339
+ stroke: var(--accent-primary, #fbbf24); /* Vibrant yellow color */
340
+ stroke-width: 3;
341
+ filter: drop-shadow(0 0 4px rgba(251, 191, 36, 0.6));
342
+ }
343
+
344
+ @keyframes ui-loader-rotation {
345
+ 0% {
346
+ transform: rotate(0deg);
347
+ }
348
+ 100% {
349
+ transform: rotate(360deg);
350
+ }
351
+ }
352
+
353
+ /* Dots Variant */
354
+ .ui-loader--dots .ui-loader__dots {
355
+ display: flex;
356
+ gap: 4px;
357
+ align-items: center;
358
+ }
359
+
360
+ .ui-loader--dots .ui-loader__dot {
361
+ width: 8px;
362
+ height: 8px;
363
+ border-radius: 50%;
364
+ background-color: var(--accent-primary, #fbbf24); /* Vibrant yellow color */
365
+ animation: ui-loader-dots 1.4s ease-in-out infinite both;
366
+ filter: drop-shadow(0 0 3px rgba(251, 191, 36, 0.6));
367
+ }
368
+
369
+ .ui-loader--dots .ui-loader__dot:nth-child(1) {
370
+ animation-delay: -0.32s;
371
+ }
372
+
373
+ .ui-loader--dots .ui-loader__dot:nth-child(2) {
374
+ animation-delay: -0.16s;
375
+ }
376
+
377
+ .ui-loader--dots .ui-loader__dot:nth-child(3) {
378
+ animation-delay: 0s;
379
+ }
380
+
381
+ @keyframes ui-loader-dots {
382
+ 0%, 80%, 100% {
383
+ transform: scale(0);
384
+ opacity: 0.5;
385
+ }
386
+ 40% {
387
+ transform: scale(1);
388
+ opacity: 1;
389
+ }
390
+ }
391
+
392
+ /* Pulse Variant */
393
+ .ui-loader--pulse .ui-loader__pulse {
394
+ width: 100%;
395
+ height: 100%;
396
+ border-radius: 50%;
397
+ background-color: var(--accent-primary, #fbbf24); /* Vibrant yellow color */
398
+ animation: ui-loader-pulse 1.2s ease-in-out infinite;
399
+ filter: drop-shadow(0 0 4px rgba(251, 191, 36, 0.6));
400
+ }
401
+
402
+ @keyframes ui-loader-pulse {
403
+ 0% {
404
+ transform: scale(0.8);
405
+ opacity: 0.5;
406
+ }
407
+ 50% {
408
+ transform: scale(1);
409
+ opacity: 1;
410
+ }
411
+ 100% {
412
+ transform: scale(0.8);
413
+ opacity: 0.5;
414
+ }
415
+ }
416
+
417
+ /* Size-specific adjustments for dots */
418
+ .ui-loader--xs .ui-loader__dot {
419
+ width: 4px;
420
+ height: 4px;
421
+ }
422
+
423
+ .ui-loader--sm .ui-loader__dot {
424
+ width: 6px;
425
+ height: 6px;
426
+ }
427
+
428
+ .ui-loader--md .ui-loader__dot {
429
+ width: 8px;
430
+ height: 8px;
431
+ }
432
+
433
+ .ui-loader--lg .ui-loader__dot {
434
+ width: 10px;
435
+ height: 10px;
436
+ }
437
+
438
+ /* Dark theme support */
439
+ @media (prefers-color-scheme: dark) {
440
+ .ui-loader--centered {
441
+ background-color: rgba(0, 0, 0, 0.8);
442
+ }
443
+ }
444
+
445
+ /* Theme-aware background for centered loader */
446
+ [data-theme="dark"] .ui-loader--centered {
447
+ background-color: rgba(0, 0, 0, 0.8);
448
+ }
449
+
450
+ [data-theme="light"] .ui-loader--centered {
451
+ background-color: rgba(255, 255, 255, 0.8);
452
+ }
453
+
454
+ /* Radio Component Styles */
455
+ .ui-radio {
456
+ display: inline-flex;
457
+ align-items: center;
458
+ gap: 8px;
459
+ cursor: pointer;
460
+ user-select: none;
461
+ position: relative;
462
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
463
+ }
464
+
465
+ .ui-radio--disabled {
466
+ cursor: not-allowed;
467
+ opacity: 0.6;
468
+ }
469
+
470
+ .ui-radio__input {
471
+ position: absolute;
472
+ opacity: 0;
473
+ width: 0;
474
+ height: 0;
475
+ }
476
+
477
+ .ui-radio__checkmark {
478
+ position: relative;
479
+ display: inline-block;
480
+ width: 16px;
481
+ height: 16px;
482
+ border: 2px solid var(--border-secondary, #d1d5db);
483
+ border-radius: 50%;
484
+ background-color: var(--bg-primary, white);
485
+ flex-shrink: 0;
486
+ transition: all 0.2s ease;
487
+ margin-top: 1px;
488
+ }
489
+
490
+ .ui-radio__checkmark::after {
491
+ content: '';
492
+ position: absolute;
493
+ top: 50%;
494
+ left: 50%;
495
+ transform: translate(-50%, -50%) scale(0);
496
+ width: 6px;
497
+ height: 6px;
498
+ border-radius: 50%;
499
+ background-color: white;
500
+ transition: transform 0.2s ease;
501
+ }
502
+
503
+ /* Hover state */
504
+ .ui-radio:hover .ui-radio__checkmark {
505
+ border-color: var(--text-tertiary, #9ca3af);
506
+ }
507
+
508
+ /* Checked state */
509
+ .ui-radio__input:checked + .ui-radio__checkmark {
510
+ border-color: var(--accent-primary, #3b82f6);
511
+ background-color: var(--accent-primary, #3b82f6);
512
+ }
513
+
514
+ .ui-radio__input:checked + .ui-radio__checkmark::after {
515
+ transform: translate(-50%, -50%) scale(1);
516
+ }
517
+
518
+ /* Focus state */
519
+ .ui-radio__input:focus + .ui-radio__checkmark {
520
+ outline: 2px solid var(--accent-primary, #3b82f6);
521
+ outline-offset: 2px;
522
+ }
523
+
524
+ /* Disabled state */
525
+ .ui-radio--disabled .ui-radio__checkmark {
526
+ border-color: var(--border-primary, #e5e7eb);
527
+ background-color: var(--bg-secondary, #f9fafb);
528
+ }
529
+
530
+ .ui-radio--disabled .ui-radio__input:checked + .ui-radio__checkmark {
531
+ border-color: var(--border-secondary, #d1d5db);
532
+ background-color: var(--border-secondary, #d1d5db);
533
+ }
534
+
535
+ /* Content styling */
536
+ .ui-radio__content {
537
+ display: flex;
538
+ flex-direction: column;
539
+ gap: 2px;
540
+ justify-content: center;
541
+ }
542
+
543
+ .ui-radio__label {
544
+ font-weight: 500;
545
+ color: var(--text-primary, #111827);
546
+ line-height: 1.4;
547
+ }
548
+
549
+ .ui-radio__description {
550
+ font-size: 0.875rem;
551
+ color: var(--text-secondary, #6b7280);
552
+ line-height: 1.4;
553
+ }
554
+
555
+ /* Size variants */
556
+ .ui-radio--sm .ui-radio__checkmark {
557
+ width: 14px;
558
+ height: 14px;
559
+ border-width: 1.5px;
560
+ }
561
+
562
+ .ui-radio--sm .ui-radio__checkmark::after {
563
+ width: 5px;
564
+ height: 5px;
565
+ }
566
+
567
+ .ui-radio--sm .ui-radio__label {
568
+ font-size: 0.875rem;
569
+ }
570
+
571
+ .ui-radio--sm .ui-radio__description {
572
+ font-size: 0.75rem;
573
+ }
574
+
575
+ .ui-radio--lg .ui-radio__checkmark {
576
+ width: 20px;
577
+ height: 20px;
578
+ border-width: 2.5px;
579
+ }
580
+
581
+ .ui-radio--lg .ui-radio__checkmark::after {
582
+ width: 8px;
583
+ height: 8px;
584
+ }
585
+
586
+ .ui-radio--lg .ui-radio__label {
587
+ font-size: 1.125rem;
588
+ }
589
+
590
+ .ui-radio--lg .ui-radio__description {
591
+ font-size: 1rem;
592
+ }
593
+
594
+ /* Color schemes */
595
+ .ui-radio--blue .ui-radio__input:checked + .ui-radio__checkmark {
596
+ border-color: #3b82f6;
597
+ background-color: #3b82f6;
598
+ }
599
+
600
+ .ui-radio--blue .ui-radio__input:focus + .ui-radio__checkmark {
601
+ outline-color: #3b82f6;
602
+ }
603
+
604
+ .ui-radio--green .ui-radio__input:checked + .ui-radio__checkmark {
605
+ border-color: #10b981;
606
+ background-color: #10b981;
607
+ }
608
+
609
+ .ui-radio--green .ui-radio__input:focus + .ui-radio__checkmark {
610
+ outline-color: #10b981;
611
+ }
612
+
613
+ .ui-radio--red .ui-radio__input:checked + .ui-radio__checkmark {
614
+ border-color: #ef4444;
615
+ background-color: #ef4444;
616
+ }
617
+
618
+ .ui-radio--red .ui-radio__input:focus + .ui-radio__checkmark {
619
+ outline-color: #ef4444;
620
+ }
621
+
622
+ .ui-radio--yellow .ui-radio__input:checked + .ui-radio__checkmark {
623
+ border-color: #f59e0b;
624
+ background-color: #f59e0b;
625
+ }
626
+
627
+ .ui-radio--yellow .ui-radio__input:focus + .ui-radio__checkmark {
628
+ outline-color: #f59e0b;
629
+ }
630
+
631
+ .ui-radio--purple .ui-radio__input:checked + .ui-radio__checkmark {
632
+ border-color: #8b5cf6;
633
+ background-color: #8b5cf6;
634
+ }
635
+
636
+ .ui-radio--purple .ui-radio__input:focus + .ui-radio__checkmark {
637
+ outline-color: #8b5cf6;
638
+ }
639
+
640
+ .ui-radio--gray .ui-radio__input:checked + .ui-radio__checkmark {
641
+ border-color: #6b7280;
642
+ background-color: #6b7280;
643
+ }
644
+
645
+ .ui-radio--gray .ui-radio__input:focus + .ui-radio__checkmark {
646
+ outline-color: #6b7280;
647
+ }
648
+
649
+ /* Radio Group Styles */
650
+ .ui-radio-group {
651
+ display: flex;
652
+ flex-direction: column;
653
+ gap: 12px;
654
+ }
655
+
656
+ .ui-radio-group--horizontal {
657
+ flex-direction: row;
658
+ flex-wrap: wrap;
659
+ gap: 16px;
660
+ }
661
+
662
+
663
+ .ui-text {
664
+ margin: 0;
665
+ color: var(--text-primary, #111827);
666
+ font-family: inherit;
667
+ line-height: 1.6;
668
+ }
669
+
670
+ /* Sizes */
671
+ .ui-text--sm {
672
+ font-size: 0.875rem;
673
+ }
674
+
675
+ .ui-text--md {
676
+ font-size: 1rem;
677
+ }
678
+
679
+ .ui-text--lg {
680
+ font-size: 1.125rem;
681
+ }
682
+
683
+ .ui-text--xl {
684
+ font-size: 1.25rem;
685
+ }
686
+
687
+ /* Weights */
688
+ .ui-text--regular {
689
+ font-weight: 400;
690
+ }
691
+
692
+ .ui-text--medium {
693
+ font-weight: 500;
694
+ }
695
+
696
+ .ui-text--semibold {
697
+ font-weight: 600;
698
+ }
699
+
700
+ .ui-text--bold {
701
+ font-weight: 700;
702
+ }
703
+
704
+ /* Colors */
705
+ .ui-text--primary {
706
+ color: var(--text-primary, #111827);
707
+ }
708
+
709
+ .ui-text--secondary {
710
+ color: var(--text-secondary, #374151);
711
+ }
712
+
713
+ .ui-text--muted {
714
+ color: var(--text-muted, #6b7280);
715
+ }
716
+
717
+ .ui-text--danger {
718
+ color: #dc2626;
719
+ }
720
+
721
+ .ui-text--success {
722
+ color: #16a34a;
723
+ }
724
+
725
+ .ui-text--warning {
726
+ color: #d97706;
727
+ }
728
+
729
+ /* Alignment */
730
+ .ui-text--align-left {
731
+ text-align: left;
732
+ }
733
+
734
+ .ui-text--align-center {
735
+ text-align: center;
736
+ }
737
+
738
+ .ui-text--align-right {
739
+ text-align: right;
740
+ }
741
+
742
+
743
+ .ui-box {
744
+ box-sizing: border-box;
745
+ }
746
+
747
+
748
+ .ui-flex {
749
+ display: flex;
750
+ box-sizing: border-box;
751
+ }
752
+
753
+ /* Direction */
754
+ .ui-flex--row {
755
+ flex-direction: row;
756
+ }
757
+
758
+ .ui-flex--column {
759
+ flex-direction: column;
760
+ }
761
+
762
+ .ui-flex--row-reverse {
763
+ flex-direction: row-reverse;
764
+ }
765
+
766
+ .ui-flex--column-reverse {
767
+ flex-direction: column-reverse;
768
+ }
769
+
770
+ /* Alignment */
771
+ .ui-flex--align-start {
772
+ align-items: flex-start;
773
+ }
774
+
775
+ .ui-flex--align-end {
776
+ align-items: flex-end;
777
+ }
778
+
779
+ .ui-flex--align-center {
780
+ align-items: center;
781
+ }
782
+
783
+ .ui-flex--align-stretch {
784
+ align-items: stretch;
785
+ }
786
+
787
+ .ui-flex--align-baseline {
788
+ align-items: baseline;
789
+ }
790
+
791
+ /* Justify */
792
+ .ui-flex--justify-start {
793
+ justify-content: flex-start;
794
+ }
795
+
796
+ .ui-flex--justify-end {
797
+ justify-content: flex-end;
798
+ }
799
+
800
+ .ui-flex--justify-center {
801
+ justify-content: center;
802
+ }
803
+
804
+ .ui-flex--justify-between {
805
+ justify-content: space-between;
806
+ }
807
+
808
+ .ui-flex--justify-around {
809
+ justify-content: space-around;
810
+ }
811
+
812
+ .ui-flex--justify-evenly {
813
+ justify-content: space-evenly;
814
+ }
815
+
816
+ /* Wrap */
817
+ .ui-flex--wrap-nowrap {
818
+ flex-wrap: nowrap;
819
+ }
820
+
821
+ .ui-flex--wrap-wrap {
822
+ flex-wrap: wrap;
823
+ }
824
+
825
+ .ui-flex--wrap-wrap-reverse {
826
+ flex-wrap: wrap-reverse;
827
+ }
828
+
829
+
830
+ .ui-modal {
831
+ position: fixed;
832
+ top: 0;
833
+ left: 0;
834
+ right: 0;
835
+ bottom: 0;
836
+ z-index: 1000;
837
+ display: flex;
838
+ align-items: center;
839
+ justify-content: center;
840
+ }
841
+
842
+ .ui-modal-overlay {
843
+ position: fixed;
844
+ top: 0;
845
+ left: 0;
846
+ right: 0;
847
+ bottom: 0;
848
+ background-color: rgba(0, 0, 0, 0.5);
849
+ backdrop-filter: blur(4px);
850
+ animation: fadeIn 0.2s ease-out;
851
+ }
852
+
853
+ .ui-modal-content {
854
+ position: relative;
855
+ background-color: var(--bg-primary, #ffffff);
856
+ border-radius: 0.5rem;
857
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1),
858
+ 0 10px 10px -5px rgba(0, 0, 0, 0.04);
859
+ max-height: 90vh;
860
+ overflow: hidden;
861
+ display: flex;
862
+ flex-direction: column;
863
+ animation: slideUp 0.3s ease-out;
864
+ z-index: 1001;
865
+ width: 100%;
866
+ margin: 1rem;
867
+ }
868
+
869
+ .ui-modal-content--centered {
870
+ margin: auto;
871
+ }
872
+
873
+ .ui-modal-content--sm {
874
+ max-width: 24rem;
875
+ }
876
+
877
+ .ui-modal-content--md {
878
+ max-width: 32rem;
879
+ }
880
+
881
+ .ui-modal-content--lg {
882
+ max-width: 48rem;
883
+ }
884
+
885
+ .ui-modal-content--xl {
886
+ max-width: 64rem;
887
+ }
888
+
889
+ .ui-modal-content--full {
890
+ max-width: 90vw;
891
+ max-height: 90vh;
892
+ }
893
+
894
+ .ui-modal-header {
895
+ padding: 1.5rem;
896
+ display: flex;
897
+ align-items: center;
898
+ justify-content: space-between;
899
+ flex-shrink: 0;
900
+ }
901
+
902
+ .ui-modal-header h2,
903
+ .ui-modal-header h3 {
904
+ margin: 0;
905
+ font-size: 1.25rem;
906
+ font-weight: 600;
907
+ color: var(--text-primary, #111827);
908
+ }
909
+
910
+ .ui-modal-body {
911
+ padding: 1.5rem;
912
+ overflow-y: auto;
913
+ flex: 1;
914
+ color: var(--text-secondary, #6b7280);
915
+ }
916
+
917
+ .ui-modal-footer {
918
+ padding: 1.5rem;
919
+ display: flex;
920
+ align-items: center;
921
+ justify-content: flex-end;
922
+ gap: 0.75rem;
923
+ flex-shrink: 0;
924
+ }
925
+
926
+ .ui-modal-close-button {
927
+ background: none;
928
+ border: none;
929
+ padding: 0.5rem;
930
+ cursor: pointer;
931
+ color: var(--text-secondary, #6b7280);
932
+ border-radius: 0.25rem;
933
+ display: flex;
934
+ align-items: center;
935
+ justify-content: center;
936
+ transition: all 0.2s ease-in-out;
937
+ margin-left: auto;
938
+ }
939
+
940
+ .ui-modal-close-button:hover {
941
+ background-color: var(--bg-secondary, #f3f4f6);
942
+ color: var(--text-primary, #111827);
943
+ }
944
+
945
+ .ui-modal-close-button:focus {
946
+ outline: 2px solid var(--accent-primary, #bb00ed);
947
+ outline-offset: 2px;
948
+ }
949
+
950
+ @keyframes fadeIn {
951
+ from {
952
+ opacity: 0;
953
+ }
954
+ to {
955
+ opacity: 1;
956
+ }
957
+ }
958
+
959
+ @keyframes slideUp {
960
+ from {
961
+ opacity: 0;
962
+ transform: translateY(1rem);
963
+ }
964
+ to {
965
+ opacity: 1;
966
+ transform: translateY(0);
967
+ }
968
+ }
969
+
970
+ /* Dark mode support */
971
+ @media (prefers-color-scheme: dark) {
972
+ .ui-modal-content {
973
+ background-color: var(--bg-primary, #1f2937);
974
+ }
975
+
976
+ .ui-modal-close-button:hover {
977
+ background-color: var(--bg-secondary, #374151);
978
+ }
979
+ }
980
+
981
+
982
+ .ui-form-control {
983
+ width: 100%;
984
+ position: relative;
985
+ }
986
+
987
+ .ui-form-label {
988
+ display: block;
989
+ font-size: 0.875rem;
990
+ font-weight: 500;
991
+ color: var(--text-primary, #111827);
992
+ margin-bottom: 0.5rem;
993
+ }
994
+
995
+ .ui-form-label__required {
996
+ color: var(--danger, #dc2626);
997
+ margin-left: 0.25rem;
998
+ }
999
+
1000
+ .ui-form-error-message {
1001
+ display: flex;
1002
+ align-items: center;
1003
+ color: var(--danger, #dc2626);
1004
+ font-size: 0.875rem;
1005
+ margin-top: 0.5rem;
1006
+ }
1007
+
1008
+
1009
+ .ui-input {
1010
+ width: 100%;
1011
+ font-family: inherit;
1012
+ font-size: 1rem;
1013
+ line-height: 1.5;
1014
+ color: var(--text-primary, #111827);
1015
+ background-color: var(--bg-primary, #ffffff);
1016
+ border: 1px solid var(--border-primary, #d1d5db);
1017
+ border-radius: 0.375rem;
1018
+ transition: all 0.2s ease-in-out;
1019
+ outline: none;
1020
+ box-sizing: border-box;
1021
+ }
1022
+
1023
+ .ui-input:focus {
1024
+ border-color: var(--accent-primary, #bb00ed);
1025
+ box-shadow: 0 0 0 3px rgba(187, 0, 237, 0.1);
1026
+ }
1027
+
1028
+ .ui-input:disabled {
1029
+ opacity: 0.6;
1030
+ cursor: not-allowed;
1031
+ background-color: var(--bg-secondary, #f3f4f6);
1032
+ }
1033
+
1034
+ .ui-input--readonly {
1035
+ cursor: default;
1036
+ background-color: var(--bg-secondary, #f3f4f6);
1037
+ }
1038
+
1039
+ .ui-input--invalid {
1040
+ border-color: var(--danger, #dc2626);
1041
+ }
1042
+
1043
+ .ui-input--invalid:focus {
1044
+ border-color: var(--danger, #dc2626);
1045
+ box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.1);
1046
+ }
1047
+
1048
+ /* Sizes */
1049
+ .ui-input--sm {
1050
+ height: 2rem;
1051
+ padding: 0 0.75rem;
1052
+ font-size: 0.875rem;
1053
+ }
1054
+
1055
+ .ui-input--md {
1056
+ height: 2.5rem;
1057
+ padding: 0 1rem;
1058
+ font-size: 1rem;
1059
+ }
1060
+
1061
+ .ui-input--lg {
1062
+ height: 3rem;
1063
+ padding: 0 1.25rem;
1064
+ font-size: 1.125rem;
1065
+ }
1066
+
1067
+ /* Variants */
1068
+ .ui-input--outline {
1069
+ border: 1px solid var(--border-primary, #d1d5db);
1070
+ background-color: var(--bg-primary, #ffffff);
1071
+ }
1072
+
1073
+ .ui-input--filled {
1074
+ border: none;
1075
+ background-color: var(--bg-secondary, #f3f4f6);
1076
+ }
1077
+
1078
+ .ui-input--filled:focus {
1079
+ background-color: var(--bg-primary, #ffffff);
1080
+ border: 1px solid var(--accent-primary, #bb00ed);
1081
+ }
1082
+
1083
+ .ui-input--unstyled {
1084
+ border: none;
1085
+ background-color: transparent;
1086
+ padding: 0;
1087
+ }
1088
+
1089
+ /* Dark mode */
1090
+ @media (prefers-color-scheme: dark) {
1091
+ .ui-input {
1092
+ background-color: var(--bg-primary, #1f2937);
1093
+ border-color: var(--border-primary, #374151);
1094
+ color: var(--text-primary, #f9fafb);
1095
+ }
1096
+
1097
+ .ui-input--filled {
1098
+ background-color: var(--bg-secondary, #374151);
1099
+ }
1100
+
1101
+ .ui-input--filled:focus {
1102
+ background-color: var(--bg-primary, #1f2937);
1103
+ }
1104
+ }
1105
+
1106
+
1107
+ .ui-textarea {
1108
+ width: 100%;
1109
+ font-family: inherit;
1110
+ font-size: 1rem;
1111
+ line-height: 1.5;
1112
+ color: var(--text-primary, #111827);
1113
+ background-color: var(--bg-primary, #ffffff);
1114
+ border: 1px solid var(--border-primary, #d1d5db);
1115
+ border-radius: 0.375rem;
1116
+ transition: all 0.2s ease-in-out;
1117
+ outline: none;
1118
+ box-sizing: border-box;
1119
+ resize: vertical;
1120
+ }
1121
+
1122
+ .ui-textarea:focus {
1123
+ border-color: var(--accent-primary, #bb00ed);
1124
+ box-shadow: 0 0 0 3px rgba(187, 0, 237, 0.1);
1125
+ }
1126
+
1127
+ .ui-textarea:disabled {
1128
+ opacity: 0.6;
1129
+ cursor: not-allowed;
1130
+ background-color: var(--bg-secondary, #f3f4f6);
1131
+ }
1132
+
1133
+ .ui-textarea--readonly {
1134
+ cursor: default;
1135
+ background-color: var(--bg-secondary, #f3f4f6);
1136
+ }
1137
+
1138
+ .ui-textarea--invalid {
1139
+ border-color: var(--danger, #dc2626);
1140
+ }
1141
+
1142
+ .ui-textarea--invalid:focus {
1143
+ border-color: var(--danger, #dc2626);
1144
+ box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.1);
1145
+ }
1146
+
1147
+ /* Sizes */
1148
+ .ui-textarea--sm {
1149
+ padding: 0.5rem 0.75rem;
1150
+ font-size: 0.875rem;
1151
+ min-height: 4rem;
1152
+ }
1153
+
1154
+ .ui-textarea--md {
1155
+ padding: 0.75rem 1rem;
1156
+ font-size: 1rem;
1157
+ min-height: 5rem;
1158
+ }
1159
+
1160
+ .ui-textarea--lg {
1161
+ padding: 1rem 1.25rem;
1162
+ font-size: 1.125rem;
1163
+ min-height: 6rem;
1164
+ }
1165
+
1166
+ /* Variants */
1167
+ .ui-textarea--outline {
1168
+ border: 1px solid var(--border-primary, #d1d5db);
1169
+ background-color: var(--bg-primary, #ffffff);
1170
+ }
1171
+
1172
+ .ui-textarea--filled {
1173
+ border: none;
1174
+ background-color: var(--bg-secondary, #f3f4f6);
1175
+ }
1176
+
1177
+ .ui-textarea--filled:focus {
1178
+ background-color: var(--bg-primary, #ffffff);
1179
+ border: 1px solid var(--accent-primary, #bb00ed);
1180
+ }
1181
+
1182
+ .ui-textarea--unstyled {
1183
+ border: none;
1184
+ background-color: transparent;
1185
+ padding: 0;
1186
+ }
1187
+
1188
+ /* Resize */
1189
+ .ui-textarea--resize-none {
1190
+ resize: none;
1191
+ }
1192
+
1193
+ .ui-textarea--resize-both {
1194
+ resize: both;
1195
+ }
1196
+
1197
+ .ui-textarea--resize-horizontal {
1198
+ resize: horizontal;
1199
+ }
1200
+
1201
+ .ui-textarea--resize-vertical {
1202
+ resize: vertical;
1203
+ }
1204
+
1205
+ /* Dark mode */
1206
+ @media (prefers-color-scheme: dark) {
1207
+ .ui-textarea {
1208
+ background-color: var(--bg-primary, #1f2937);
1209
+ border-color: var(--border-primary, #374151);
1210
+ color: var(--text-primary, #f9fafb);
1211
+ }
1212
+
1213
+ .ui-textarea--filled {
1214
+ background-color: var(--bg-secondary, #374151);
1215
+ }
1216
+
1217
+ .ui-textarea--filled:focus {
1218
+ background-color: var(--bg-primary, #1f2937);
1219
+ }
1220
+ }
1221
+
1222
+
1223
+ .ui-link {
1224
+ color: var(--accent-primary, #bb00ed);
1225
+ text-decoration: none;
1226
+ transition: color 0.2s ease-in-out;
1227
+ cursor: pointer;
1228
+ }
1229
+
1230
+ .ui-link:hover {
1231
+ color: var(--accent-secondary, #9d00c7);
1232
+ }
1233
+
1234
+ .ui-link:focus {
1235
+ outline: 2px solid var(--accent-primary, #bb00ed);
1236
+ outline-offset: 2px;
1237
+ border-radius: 2px;
1238
+ }
1239
+
1240
+ /* Variants */
1241
+ .ui-link--link {
1242
+ text-decoration: underline;
1243
+ }
1244
+
1245
+ .ui-link--link:hover {
1246
+ text-decoration: none;
1247
+ }
1248
+
1249
+ .ui-link--underline {
1250
+ text-decoration: underline;
1251
+ }
1252
+
1253
+ .ui-link--underline:hover {
1254
+ text-decoration: underline;
1255
+ }
1256
+
1257
+ .ui-link--none {
1258
+ text-decoration: none;
1259
+ }
1260
+
1261
+ /* Colors */
1262
+ .ui-link--primary {
1263
+ color: var(--accent-primary, #bb00ed);
1264
+ }
1265
+
1266
+ .ui-link--primary:hover {
1267
+ color: var(--accent-secondary, #9d00c7);
1268
+ }
1269
+
1270
+ .ui-link--secondary {
1271
+ color: var(--text-secondary, #6b7280);
1272
+ }
1273
+
1274
+ .ui-link--secondary:hover {
1275
+ color: var(--text-primary, #111827);
1276
+ }
1277
+
1278
+ .ui-link--accent {
1279
+ color: var(--accent-primary, #bb00ed);
1280
+ }
1281
+
1282
+ .ui-link--accent:hover {
1283
+ color: var(--accent-secondary, #9d00c7);
1284
+ }
1285
+
1286
+
1287
+ .ui-grid {
1288
+ display: grid;
1289
+ box-sizing: border-box;
1290
+ }
1291
+
1292
+
1293
+ .ui-icon-button {
1294
+ display: inline-flex;
1295
+ align-items: center;
1296
+ justify-content: center;
1297
+ border: none;
1298
+ cursor: pointer;
1299
+ font-family: inherit;
1300
+ transition: all 0.2s ease-in-out;
1301
+ outline: none;
1302
+ background: transparent;
1303
+ color: var(--text-primary, #111827);
1304
+ }
1305
+
1306
+ .ui-icon-button:focus-visible {
1307
+ outline: 2px solid var(--accent-primary, #bb00ed);
1308
+ outline-offset: 2px;
1309
+ }
1310
+
1311
+ .ui-icon-button:disabled,
1312
+ .ui-icon-button--disabled {
1313
+ opacity: 0.5;
1314
+ cursor: not-allowed;
1315
+ pointer-events: none;
1316
+ }
1317
+
1318
+ /* Sizes */
1319
+ .ui-icon-button--xs {
1320
+ width: 1.5rem;
1321
+ height: 1.5rem;
1322
+ font-size: 0.75rem;
1323
+ }
1324
+
1325
+ .ui-icon-button--sm {
1326
+ width: 2rem;
1327
+ height: 2rem;
1328
+ font-size: 0.875rem;
1329
+ }
1330
+
1331
+ .ui-icon-button--md {
1332
+ width: 2.5rem;
1333
+ height: 2.5rem;
1334
+ font-size: 1rem;
1335
+ }
1336
+
1337
+ .ui-icon-button--lg {
1338
+ width: 3rem;
1339
+ height: 3rem;
1340
+ font-size: 1.125rem;
1341
+ }
1342
+
1343
+ /* Variants */
1344
+ .ui-icon-button--ghost {
1345
+ background: transparent;
1346
+ }
1347
+
1348
+ .ui-icon-button--ghost:hover:not(:disabled) {
1349
+ background-color: var(--bg-secondary, #f3f4f6);
1350
+ }
1351
+
1352
+ .ui-icon-button--outline {
1353
+ border: 1px solid var(--border-primary, #d1d5db);
1354
+ background: transparent;
1355
+ }
1356
+
1357
+ .ui-icon-button--outline:hover:not(:disabled) {
1358
+ background-color: var(--bg-secondary, #f3f4f6);
1359
+ }
1360
+
1361
+ .ui-icon-button--solid {
1362
+ background-color: var(--accent-primary, #bb00ed);
1363
+ color: white;
1364
+ }
1365
+
1366
+ .ui-icon-button--solid:hover:not(:disabled) {
1367
+ background-color: var(--accent-secondary, #9d00c7);
1368
+ }
1369
+
1370
+ /* Round */
1371
+ .ui-icon-button--round {
1372
+ border-radius: 50%;
1373
+ }
1374
+
1375
+ .ui-icon-button:not(.ui-icon-button--round) {
1376
+ border-radius: 0.375rem;
1377
+ }
1378
+
1379
+ /* Color Schemes */
1380
+ .ui-icon-button--blue.ui-icon-button--solid {
1381
+ background-color: #2563eb;
1382
+ color: white;
1383
+ }
1384
+
1385
+ .ui-icon-button--blue.ui-icon-button--solid:hover:not(:disabled) {
1386
+ background-color: #1d4ed8;
1387
+ }
1388
+
1389
+ .ui-icon-button--green.ui-icon-button--solid {
1390
+ background-color: #059669;
1391
+ color: white;
1392
+ }
1393
+
1394
+ .ui-icon-button--green.ui-icon-button--solid:hover:not(:disabled) {
1395
+ background-color: #047857;
1396
+ }
1397
+
1398
+ .ui-icon-button--red.ui-icon-button--solid {
1399
+ background-color: #dc2626;
1400
+ color: white;
1401
+ }
1402
+
1403
+ .ui-icon-button--red.ui-icon-button--solid:hover:not(:disabled) {
1404
+ background-color: #b91c1c;
1405
+ }
1406
+
1407
+ /* Dark mode */
1408
+ @media (prefers-color-scheme: dark) {
1409
+ .ui-icon-button--ghost:hover:not(:disabled) {
1410
+ background-color: var(--bg-secondary, #374151);
1411
+ }
1412
+
1413
+ .ui-icon-button--outline {
1414
+ border-color: var(--border-primary, #374151);
1415
+ }
1416
+
1417
+ .ui-icon-button--outline:hover:not(:disabled) {
1418
+ background-color: var(--bg-secondary, #374151);
1419
+ }
1420
+ }
1421
+
1422
+
1423
+ .ui-circular-progress {
1424
+ position: relative;
1425
+ display: inline-flex;
1426
+ align-items: center;
1427
+ justify-content: center;
1428
+ }
1429
+
1430
+ .ui-circular-progress__svg {
1431
+ width: 100%;
1432
+ height: 100%;
1433
+ }
1434
+
1435
+ .ui-circular-progress__track {
1436
+ opacity: 0.2;
1437
+ }
1438
+
1439
+ .ui-circular-progress__indicator {
1440
+ transition: stroke-dashoffset 0.3s ease;
1441
+ }
1442
+
1443
+ .ui-circular-progress__indicator--indeterminate {
1444
+ animation: circular-progress-spin 1.4s ease-in-out infinite;
1445
+ stroke-dasharray: var(--dash-array-1, 1px), var(--circumference, 200px);
1446
+ stroke-dashoffset: 0;
1447
+ stroke-linecap: round;
1448
+ transform-origin: center;
1449
+ }
1450
+
1451
+ .ui-circular-progress__label {
1452
+ position: absolute;
1453
+ top: 50%;
1454
+ left: 50%;
1455
+ transform: translate(-50%, -50%);
1456
+ font-size: 0.875rem;
1457
+ font-weight: 500;
1458
+ color: var(--text-primary, #111827);
1459
+ }
1460
+
1461
+ .ui-circular-progress-label {
1462
+ font-size: 0.875rem;
1463
+ font-weight: 500;
1464
+ color: var(--text-primary, #111827);
1465
+ }
1466
+
1467
+ @keyframes circular-progress-spin {
1468
+ 0% {
1469
+ stroke-dasharray: var(--dash-array-1, 1px), var(--circumference, 200px);
1470
+ stroke-dashoffset: 0;
1471
+ transform: rotate(-90deg);
1472
+ }
1473
+ 50% {
1474
+ stroke-dasharray: var(--dash-array-2, 89px), var(--circumference, 200px);
1475
+ stroke-dashoffset: var(--dash-offset-1, -35px);
1476
+ transform: rotate(-90deg);
1477
+ }
1478
+ 100% {
1479
+ stroke-dasharray: var(--dash-array-2, 89px), var(--circumference, 200px);
1480
+ stroke-dashoffset: var(--dash-offset-2, -124px);
1481
+ transform: rotate(270deg);
1482
+ }
1483
+ }
1484
+
1485
+
1486
+ .ui-tooltip-wrapper {
1487
+ position: relative;
1488
+ display: inline-block;
1489
+ }
1490
+
1491
+ .ui-tooltip {
1492
+ position: absolute;
1493
+ z-index: 1000;
1494
+ padding: 0.5rem 0.75rem;
1495
+ font-size: 0.875rem;
1496
+ font-weight: 500;
1497
+ color: white;
1498
+ background-color: rgba(0, 0, 0, 0.9);
1499
+ border-radius: 0.375rem;
1500
+ white-space: nowrap;
1501
+ pointer-events: none;
1502
+ animation: tooltip-fade-in 0.15s ease-out;
1503
+ }
1504
+
1505
+ .ui-tooltip--top {
1506
+ bottom: 100%;
1507
+ left: 50%;
1508
+ transform: translateX(-50%);
1509
+ margin-bottom: 0.5rem;
1510
+ }
1511
+
1512
+ .ui-tooltip--top::after {
1513
+ content: "";
1514
+ position: absolute;
1515
+ top: 100%;
1516
+ left: 50%;
1517
+ transform: translateX(-50%);
1518
+ border: 4px solid transparent;
1519
+ border-top-color: rgba(0, 0, 0, 0.9);
1520
+ }
1521
+
1522
+ .ui-tooltip--bottom {
1523
+ top: 100%;
1524
+ left: 50%;
1525
+ transform: translateX(-50%);
1526
+ margin-top: 0.5rem;
1527
+ }
1528
+
1529
+ .ui-tooltip--bottom::after {
1530
+ content: "";
1531
+ position: absolute;
1532
+ bottom: 100%;
1533
+ left: 50%;
1534
+ transform: translateX(-50%);
1535
+ border: 4px solid transparent;
1536
+ border-bottom-color: rgba(0, 0, 0, 0.9);
1537
+ }
1538
+
1539
+ .ui-tooltip--left {
1540
+ right: 100%;
1541
+ top: 50%;
1542
+ transform: translateY(-50%);
1543
+ margin-right: 0.5rem;
1544
+ }
1545
+
1546
+ .ui-tooltip--left::after {
1547
+ content: "";
1548
+ position: absolute;
1549
+ left: 100%;
1550
+ top: 50%;
1551
+ transform: translateY(-50%);
1552
+ border: 4px solid transparent;
1553
+ border-left-color: rgba(0, 0, 0, 0.9);
1554
+ }
1555
+
1556
+ .ui-tooltip--right {
1557
+ left: 100%;
1558
+ top: 50%;
1559
+ transform: translateY(-50%);
1560
+ margin-left: 0.5rem;
1561
+ }
1562
+
1563
+ .ui-tooltip--right::after {
1564
+ content: "";
1565
+ position: absolute;
1566
+ right: 100%;
1567
+ top: 50%;
1568
+ transform: translateY(-50%);
1569
+ border: 4px solid transparent;
1570
+ border-right-color: rgba(0, 0, 0, 0.9);
1571
+ }
1572
+
1573
+ @keyframes tooltip-fade-in {
1574
+ from {
1575
+ opacity: 0;
1576
+ transform: translateX(-50%) translateY(4px);
1577
+ }
1578
+ to {
1579
+ opacity: 1;
1580
+ transform: translateX(-50%) translateY(0);
1581
+ }
1582
+ }
1583
+
1584
+
1585
+ .ui-toast-container {
1586
+ position: fixed;
1587
+ z-index: 10000;
1588
+ display: flex;
1589
+ flex-direction: column;
1590
+ gap: 0.75rem;
1591
+ pointer-events: none;
1592
+ max-width: 420px;
1593
+ width: 100%;
1594
+ padding: 1rem;
1595
+ }
1596
+
1597
+ .ui-toast-container--top-left {
1598
+ top: 0;
1599
+ left: 0;
1600
+ align-items: flex-start;
1601
+ }
1602
+
1603
+ .ui-toast-container--top-right {
1604
+ top: 0;
1605
+ right: 0;
1606
+ align-items: flex-end;
1607
+ }
1608
+
1609
+ .ui-toast-container--top-center {
1610
+ top: 0;
1611
+ left: 50%;
1612
+ transform: translateX(-50%);
1613
+ align-items: center;
1614
+ }
1615
+
1616
+ .ui-toast-container--bottom-left {
1617
+ bottom: 0;
1618
+ left: 0;
1619
+ align-items: flex-start;
1620
+ }
1621
+
1622
+ .ui-toast-container--bottom-right {
1623
+ bottom: 0;
1624
+ right: 0;
1625
+ align-items: flex-end;
1626
+ }
1627
+
1628
+ .ui-toast-container--bottom-center {
1629
+ bottom: 0;
1630
+ left: 50%;
1631
+ transform: translateX(-50%);
1632
+ align-items: center;
1633
+ }
1634
+
1635
+ .ui-toast {
1636
+ display: flex;
1637
+ align-items: flex-start;
1638
+ gap: 0.75rem;
1639
+ padding: 0.875rem 1rem;
1640
+ background-color: var(--bg-primary, #ffffff);
1641
+ border: 1px solid var(--border-primary, #e2e8f0);
1642
+ border-radius: 0.5rem;
1643
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
1644
+ 0 2px 4px -1px rgba(0, 0, 0, 0.06);
1645
+ min-width: 300px;
1646
+ max-width: 420px;
1647
+ pointer-events: auto;
1648
+ opacity: 0;
1649
+ transform: translateY(-10px);
1650
+ transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out;
1651
+ }
1652
+
1653
+ .ui-toast--visible {
1654
+ opacity: 1;
1655
+ transform: translateY(0);
1656
+ }
1657
+
1658
+ .ui-toast--exiting {
1659
+ opacity: 0;
1660
+ transform: translateY(-10px);
1661
+ }
1662
+
1663
+ .ui-toast--success {
1664
+ border-left: 4px solid #10b981;
1665
+ background-color: #f0fdf4;
1666
+ border-color: #10b981;
1667
+ }
1668
+
1669
+ .ui-toast--success .ui-toast__title {
1670
+ color: #065f46;
1671
+ }
1672
+
1673
+ .ui-toast--success .ui-toast__description {
1674
+ color: #047857;
1675
+ }
1676
+
1677
+ .ui-toast--error {
1678
+ border-left: 4px solid #ef4444;
1679
+ background-color: #fef2f2;
1680
+ border-color: #ef4444;
1681
+ }
1682
+
1683
+ .ui-toast--error .ui-toast__title {
1684
+ color: #991b1b;
1685
+ }
1686
+
1687
+ .ui-toast--error .ui-toast__description {
1688
+ color: #b91c1c;
1689
+ }
1690
+
1691
+ .ui-toast--warning {
1692
+ border-left: 4px solid #f59e0b;
1693
+ background-color: #fffbeb;
1694
+ border-color: #f59e0b;
1695
+ }
1696
+
1697
+ .ui-toast--warning .ui-toast__title {
1698
+ color: #92400e;
1699
+ }
1700
+
1701
+ .ui-toast--warning .ui-toast__description {
1702
+ color: #b45309;
1703
+ }
1704
+
1705
+ .ui-toast--info {
1706
+ border-left: 4px solid #3b82f6;
1707
+ background-color: #eff6ff;
1708
+ border-color: #3b82f6;
1709
+ }
1710
+
1711
+ .ui-toast--info .ui-toast__title {
1712
+ color: #1e40af;
1713
+ }
1714
+
1715
+ .ui-toast--info .ui-toast__description {
1716
+ color: #2563eb;
1717
+ }
1718
+
1719
+ .ui-toast__content {
1720
+ flex: 1;
1721
+ min-width: 0;
1722
+ }
1723
+
1724
+ .ui-toast__title {
1725
+ font-size: 0.875rem;
1726
+ font-weight: 600;
1727
+ color: var(--text-primary, #1a202c);
1728
+ margin-bottom: 0.25rem;
1729
+ line-height: 1.4;
1730
+ }
1731
+
1732
+ .ui-toast__description {
1733
+ font-size: 0.8125rem;
1734
+ color: var(--text-secondary, #4a5568);
1735
+ line-height: 1.5;
1736
+ }
1737
+
1738
+ .ui-toast__close {
1739
+ background: none;
1740
+ border: none;
1741
+ color: var(--text-secondary, #718096);
1742
+ font-size: 1.5rem;
1743
+ line-height: 1;
1744
+ cursor: pointer;
1745
+ padding: 0;
1746
+ width: 1.5rem;
1747
+ height: 1.5rem;
1748
+ display: flex;
1749
+ align-items: center;
1750
+ justify-content: center;
1751
+ flex-shrink: 0;
1752
+ border-radius: 0.25rem;
1753
+ transition: all 0.2s ease-in-out;
1754
+ }
1755
+
1756
+ .ui-toast__close:hover {
1757
+ background-color: var(--bg-secondary, #f7fafc);
1758
+ color: var(--text-primary, #1a202c);
1759
+ }
1760
+
1761
+ .ui-toast__close:active {
1762
+ background-color: var(--bg-tertiary, #edf2f7);
1763
+ }
1764
+
1765
+ /* Dark mode support */
1766
+ @media (prefers-color-scheme: dark) {
1767
+ .ui-toast {
1768
+ border-color: var(--border-primary, #2d3748);
1769
+ }
1770
+
1771
+ .ui-toast--success {
1772
+ background-color: #064e3b;
1773
+ border-color: #10b981;
1774
+ }
1775
+
1776
+ .ui-toast--success .ui-toast__title {
1777
+ color: #6ee7b7;
1778
+ }
1779
+
1780
+ .ui-toast--success .ui-toast__description {
1781
+ color: #34d399;
1782
+ }
1783
+
1784
+ .ui-toast--error {
1785
+ background-color: #7f1d1d;
1786
+ border-color: #ef4444;
1787
+ }
1788
+
1789
+ .ui-toast--error .ui-toast__title {
1790
+ color: #fca5a5;
1791
+ }
1792
+
1793
+ .ui-toast--error .ui-toast__description {
1794
+ color: #f87171;
1795
+ }
1796
+
1797
+ .ui-toast--warning {
1798
+ background-color: #78350f;
1799
+ border-color: #f59e0b;
1800
+ }
1801
+
1802
+ .ui-toast--warning .ui-toast__title {
1803
+ color: #fcd34d;
1804
+ }
1805
+
1806
+ .ui-toast--warning .ui-toast__description {
1807
+ color: #fbbf24;
1808
+ }
1809
+
1810
+ .ui-toast--info {
1811
+ background-color: #1e3a8a;
1812
+ border-color: #3b82f6;
1813
+ }
1814
+
1815
+ .ui-toast--info .ui-toast__title {
1816
+ color: #93c5fd;
1817
+ }
1818
+
1819
+ .ui-toast--info .ui-toast__description {
1820
+ color: #60a5fa;
1821
+ }
1822
+
1823
+ .ui-toast__close {
1824
+ color: var(--text-secondary, #718096);
1825
+ }
1826
+
1827
+ .ui-toast__close:hover {
1828
+ background-color: rgba(255, 255, 255, 0.1);
1829
+ color: var(--text-primary, #f7fafc);
1830
+ }
1831
+
1832
+ .ui-toast__close:active {
1833
+ background-color: rgba(255, 255, 255, 0.2);
1834
+ }
1835
+ }
1836
+
1837
+
1838
+ .ui-popover-wrapper {
1839
+ position: relative;
1840
+ display: inline-block;
1841
+ }
1842
+
1843
+ .ui-popover {
1844
+ position: absolute;
1845
+ z-index: 1000;
1846
+ background-color: var(--bg-primary, #ffffff);
1847
+ border: 1px solid var(--border-primary, #e2e8f0);
1848
+ border-radius: 0.5rem;
1849
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
1850
+ 0 2px 4px -1px rgba(0, 0, 0, 0.06);
1851
+ min-width: 200px;
1852
+ max-width: 320px;
1853
+ padding: 0;
1854
+ animation: ui-popover-fade-in 0.15s ease-out;
1855
+ }
1856
+
1857
+ /* Positioning */
1858
+ .ui-popover--top {
1859
+ bottom: 100%;
1860
+ left: 50%;
1861
+ transform: translateX(-50%);
1862
+ margin-bottom: 8px;
1863
+ }
1864
+
1865
+ .ui-popover--top-start {
1866
+ bottom: 100%;
1867
+ left: 0;
1868
+ transform: none;
1869
+ margin-bottom: 8px;
1870
+ }
1871
+
1872
+ .ui-popover--top-end {
1873
+ bottom: 100%;
1874
+ right: 0;
1875
+ left: auto;
1876
+ transform: none;
1877
+ margin-bottom: 8px;
1878
+ }
1879
+
1880
+ .ui-popover--bottom {
1881
+ top: 100%;
1882
+ left: 50%;
1883
+ transform: translateX(-50%);
1884
+ margin-top: 8px;
1885
+ }
1886
+
1887
+ .ui-popover--bottom-start {
1888
+ top: 100%;
1889
+ left: 0;
1890
+ transform: none;
1891
+ margin-top: 8px;
1892
+ }
1893
+
1894
+ .ui-popover--bottom-end {
1895
+ top: 100%;
1896
+ right: 0;
1897
+ left: auto;
1898
+ transform: none;
1899
+ margin-top: 8px;
1900
+ }
1901
+
1902
+ .ui-popover--left {
1903
+ right: 100%;
1904
+ top: 50%;
1905
+ transform: translateY(-50%);
1906
+ margin-right: 8px;
1907
+ }
1908
+
1909
+ .ui-popover--left-start {
1910
+ right: 100%;
1911
+ top: 0;
1912
+ transform: none;
1913
+ margin-right: 8px;
1914
+ }
1915
+
1916
+ .ui-popover--left-end {
1917
+ right: 100%;
1918
+ bottom: 0;
1919
+ top: auto;
1920
+ transform: none;
1921
+ margin-right: 8px;
1922
+ }
1923
+
1924
+ .ui-popover--right {
1925
+ left: 100%;
1926
+ top: 50%;
1927
+ transform: translateY(-50%);
1928
+ margin-left: 8px;
1929
+ }
1930
+
1931
+ .ui-popover--right-start {
1932
+ left: 100%;
1933
+ top: 0;
1934
+ transform: none;
1935
+ margin-left: 8px;
1936
+ }
1937
+
1938
+ .ui-popover--right-end {
1939
+ left: 100%;
1940
+ bottom: 0;
1941
+ top: auto;
1942
+ transform: none;
1943
+ margin-left: 8px;
1944
+ }
1945
+
1946
+ @keyframes ui-popover-fade-in {
1947
+ from {
1948
+ opacity: 0;
1949
+ }
1950
+ to {
1951
+ opacity: 1;
1952
+ }
1953
+ }
1954
+
1955
+ .ui-popover--with-arrow::before,
1956
+ .ui-popover--with-arrow::after {
1957
+ content: "";
1958
+ position: absolute;
1959
+ width: 0;
1960
+ height: 0;
1961
+ border-style: solid;
1962
+ }
1963
+
1964
+ /* Top arrow - border (::after) */
1965
+ .ui-popover--top.ui-popover--with-arrow::after,
1966
+ .ui-popover--top-start.ui-popover--with-arrow::after,
1967
+ .ui-popover--top-end.ui-popover--with-arrow::after {
1968
+ bottom: -9px;
1969
+ left: var(--arrow-left, 50%);
1970
+ transform: translateX(-50%);
1971
+ border-width: 9px 9px 0 9px;
1972
+ border-color: var(--border-primary, #e2e8f0) transparent transparent transparent;
1973
+ z-index: -1;
1974
+ }
1975
+
1976
+ /* Top arrow - fill (::before) */
1977
+ .ui-popover--top.ui-popover--with-arrow::before,
1978
+ .ui-popover--top-start.ui-popover--with-arrow::before,
1979
+ .ui-popover--top-end.ui-popover--with-arrow::before {
1980
+ bottom: -8px;
1981
+ left: var(--arrow-left, 50%);
1982
+ transform: translateX(-50%);
1983
+ border-width: 8px 8px 0 8px;
1984
+ border-color: var(--bg-primary, #ffffff) transparent transparent transparent;
1985
+ }
1986
+
1987
+ .ui-popover--top-start.ui-popover--with-arrow::after {
1988
+ left: var(--arrow-left, 16px);
1989
+ transform: none;
1990
+ }
1991
+
1992
+ .ui-popover--top-start.ui-popover--with-arrow::before {
1993
+ left: var(--arrow-left, 16px);
1994
+ transform: none;
1995
+ }
1996
+
1997
+ .ui-popover--top-end.ui-popover--with-arrow::after {
1998
+ left: auto;
1999
+ right: calc(100% - var(--arrow-left, 16px));
2000
+ transform: none;
2001
+ }
2002
+
2003
+ .ui-popover--top-end.ui-popover--with-arrow::before {
2004
+ left: auto;
2005
+ right: calc(100% - var(--arrow-left, 16px));
2006
+ transform: none;
2007
+ }
2008
+
2009
+ /* Bottom arrow - border (::after) */
2010
+ .ui-popover--bottom.ui-popover--with-arrow::after,
2011
+ .ui-popover--bottom-start.ui-popover--with-arrow::after,
2012
+ .ui-popover--bottom-end.ui-popover--with-arrow::after {
2013
+ top: -9px;
2014
+ left: var(--arrow-left, 50%);
2015
+ transform: translateX(-50%);
2016
+ border-width: 0 9px 9px 9px;
2017
+ border-color: transparent transparent var(--border-primary, #e2e8f0) transparent;
2018
+ z-index: -1;
2019
+ }
2020
+
2021
+ /* Bottom arrow - fill (::before) */
2022
+ .ui-popover--bottom.ui-popover--with-arrow::before,
2023
+ .ui-popover--bottom-start.ui-popover--with-arrow::before,
2024
+ .ui-popover--bottom-end.ui-popover--with-arrow::before {
2025
+ top: -8px;
2026
+ left: var(--arrow-left, 50%);
2027
+ transform: translateX(-50%);
2028
+ border-width: 0 8px 8px 8px;
2029
+ border-color: transparent transparent var(--bg-primary, #ffffff) transparent;
2030
+ }
2031
+
2032
+ .ui-popover--bottom-start.ui-popover--with-arrow::after {
2033
+ left: var(--arrow-left, 16px);
2034
+ transform: none;
2035
+ }
2036
+
2037
+ .ui-popover--bottom-start.ui-popover--with-arrow::before {
2038
+ left: var(--arrow-left, 16px);
2039
+ transform: none;
2040
+ }
2041
+
2042
+ .ui-popover--bottom-end.ui-popover--with-arrow::after {
2043
+ left: auto;
2044
+ right: calc(100% - var(--arrow-left, 16px));
2045
+ transform: none;
2046
+ }
2047
+
2048
+ .ui-popover--bottom-end.ui-popover--with-arrow::before {
2049
+ left: auto;
2050
+ right: calc(100% - var(--arrow-left, 16px));
2051
+ transform: none;
2052
+ }
2053
+
2054
+ /* Left arrow - border (::after) */
2055
+ .ui-popover--left.ui-popover--with-arrow::after,
2056
+ .ui-popover--left-start.ui-popover--with-arrow::after,
2057
+ .ui-popover--left-end.ui-popover--with-arrow::after {
2058
+ right: -9px;
2059
+ top: var(--arrow-top, 50%);
2060
+ transform: translateY(-50%);
2061
+ border-width: 9px 0 9px 9px;
2062
+ border-color: transparent transparent transparent var(--border-primary, #e2e8f0);
2063
+ z-index: -1;
2064
+ }
2065
+
2066
+ /* Left arrow - fill (::before) */
2067
+ .ui-popover--left.ui-popover--with-arrow::before,
2068
+ .ui-popover--left-start.ui-popover--with-arrow::before,
2069
+ .ui-popover--left-end.ui-popover--with-arrow::before {
2070
+ right: -8px;
2071
+ top: var(--arrow-top, 50%);
2072
+ transform: translateY(-50%);
2073
+ border-width: 8px 0 8px 8px;
2074
+ border-color: transparent transparent transparent var(--bg-primary, #ffffff);
2075
+ }
2076
+
2077
+ .ui-popover--left-start.ui-popover--with-arrow::after {
2078
+ top: var(--arrow-top, 16px);
2079
+ transform: none;
2080
+ }
2081
+
2082
+ .ui-popover--left-start.ui-popover--with-arrow::before {
2083
+ top: var(--arrow-top, 16px);
2084
+ transform: none;
2085
+ }
2086
+
2087
+ .ui-popover--left-end.ui-popover--with-arrow::after {
2088
+ top: auto;
2089
+ bottom: calc(100% - var(--arrow-top, 16px));
2090
+ transform: none;
2091
+ }
2092
+
2093
+ .ui-popover--left-end.ui-popover--with-arrow::before {
2094
+ top: auto;
2095
+ bottom: calc(100% - var(--arrow-top, 16px));
2096
+ transform: none;
2097
+ }
2098
+
2099
+ /* Right arrow - border (::after) */
2100
+ .ui-popover--right.ui-popover--with-arrow::after,
2101
+ .ui-popover--right-start.ui-popover--with-arrow::after,
2102
+ .ui-popover--right-end.ui-popover--with-arrow::after {
2103
+ left: -9px;
2104
+ top: var(--arrow-top, 50%);
2105
+ transform: translateY(-50%);
2106
+ border-width: 9px 9px 9px 0;
2107
+ border-color: transparent var(--border-primary, #e2e8f0) transparent transparent;
2108
+ z-index: -1;
2109
+ }
2110
+
2111
+ /* Right arrow - fill (::before) */
2112
+ .ui-popover--right.ui-popover--with-arrow::before,
2113
+ .ui-popover--right-start.ui-popover--with-arrow::before,
2114
+ .ui-popover--right-end.ui-popover--with-arrow::before {
2115
+ left: -8px;
2116
+ top: var(--arrow-top, 50%);
2117
+ transform: translateY(-50%);
2118
+ border-width: 8px 8px 8px 0;
2119
+ border-color: transparent var(--bg-primary, #ffffff) transparent transparent;
2120
+ }
2121
+
2122
+ .ui-popover--right-start.ui-popover--with-arrow::after {
2123
+ top: var(--arrow-top, 16px);
2124
+ transform: none;
2125
+ }
2126
+
2127
+ .ui-popover--right-start.ui-popover--with-arrow::before {
2128
+ top: var(--arrow-top, 16px);
2129
+ transform: none;
2130
+ }
2131
+
2132
+ .ui-popover--right-end.ui-popover--with-arrow::after {
2133
+ top: auto;
2134
+ bottom: calc(100% - var(--arrow-top, 16px));
2135
+ transform: none;
2136
+ }
2137
+
2138
+ .ui-popover--right-end.ui-popover--with-arrow::before {
2139
+ top: auto;
2140
+ bottom: calc(100% - var(--arrow-top, 16px));
2141
+ transform: none;
2142
+ }
2143
+
2144
+ .ui-popover__content {
2145
+ padding: 0;
2146
+ }
2147
+
2148
+ .ui-popover__header {
2149
+ padding: 0.75rem 1rem;
2150
+ border-bottom: 1px solid var(--border-primary, #e2e8f0);
2151
+ font-size: 0.875rem;
2152
+ font-weight: 600;
2153
+ color: var(--text-primary, #1a202c);
2154
+ display: flex;
2155
+ align-items: center;
2156
+ justify-content: space-between;
2157
+ }
2158
+
2159
+ .ui-popover__header:has(.ui-popover__close) {
2160
+ padding-right: 0.5rem;
2161
+ }
2162
+
2163
+ .ui-popover__body {
2164
+ padding: 1rem;
2165
+ color: var(--text-secondary, #4a5568);
2166
+ font-size: 0.875rem;
2167
+ line-height: 1.5;
2168
+ }
2169
+
2170
+ .ui-popover__footer {
2171
+ padding: 0.75rem 1rem;
2172
+ border-top: 1px solid var(--border-primary, #e2e8f0);
2173
+ display: flex;
2174
+ align-items: center;
2175
+ justify-content: flex-end;
2176
+ gap: 0.5rem;
2177
+ }
2178
+
2179
+ .ui-popover__close {
2180
+ background: none;
2181
+ border: none;
2182
+ color: var(--text-secondary, #718096);
2183
+ cursor: pointer;
2184
+ padding: 0.25rem;
2185
+ display: flex;
2186
+ align-items: center;
2187
+ justify-content: center;
2188
+ border-radius: 0.25rem;
2189
+ transition: all 0.2s ease-in-out;
2190
+ flex-shrink: 0;
2191
+ }
2192
+
2193
+ .ui-popover__close:hover {
2194
+ background-color: var(--bg-secondary, #f7fafc);
2195
+ color: var(--text-primary, #1a202c);
2196
+ }
2197
+
2198
+ .ui-popover__close:active {
2199
+ background-color: var(--bg-tertiary, #edf2f7);
2200
+ }
2201
+
2202
+ /* Dark mode support */
2203
+ @media (prefers-color-scheme: dark) {
2204
+ .ui-popover {
2205
+ background-color: var(--bg-primary, #1a202c);
2206
+ border-color: var(--border-primary, #2d3748);
2207
+ }
2208
+
2209
+ .ui-popover__header {
2210
+ color: var(--text-primary, #f7fafc);
2211
+ border-bottom-color: var(--border-primary, #2d3748);
2212
+ }
2213
+
2214
+ .ui-popover__body {
2215
+ color: var(--text-secondary, #a0aec0);
2216
+ }
2217
+
2218
+ .ui-popover__footer {
2219
+ border-top-color: var(--border-primary, #2d3748);
2220
+ }
2221
+
2222
+ .ui-popover__close {
2223
+ color: var(--text-secondary, #718096);
2224
+ }
2225
+
2226
+ .ui-popover__close:hover {
2227
+ background-color: var(--bg-secondary, #2d3748);
2228
+ color: var(--text-primary, #f7fafc);
2229
+ }
2230
+
2231
+ .ui-popover__close:active {
2232
+ background-color: var(--bg-tertiary, #4a5568);
2233
+ }
2234
+
2235
+ /* Dark mode - Top arrow border */
2236
+ .ui-popover--top.ui-popover--with-arrow::after,
2237
+ .ui-popover--top-start.ui-popover--with-arrow::after,
2238
+ .ui-popover--top-end.ui-popover--with-arrow::after {
2239
+ border-color: var(--border-primary, #2d3748) transparent transparent transparent;
2240
+ }
2241
+
2242
+ /* Dark mode - Top arrow fill */
2243
+ .ui-popover--top.ui-popover--with-arrow::before,
2244
+ .ui-popover--top-start.ui-popover--with-arrow::before,
2245
+ .ui-popover--top-end.ui-popover--with-arrow::before {
2246
+ border-color: var(--bg-primary, #1a202c) transparent transparent transparent;
2247
+ }
2248
+
2249
+ /* Dark mode - Bottom arrow border */
2250
+ .ui-popover--bottom.ui-popover--with-arrow::after,
2251
+ .ui-popover--bottom-start.ui-popover--with-arrow::after,
2252
+ .ui-popover--bottom-end.ui-popover--with-arrow::after {
2253
+ border-color: transparent transparent var(--border-primary, #2d3748) transparent;
2254
+ }
2255
+
2256
+ /* Dark mode - Bottom arrow fill */
2257
+ .ui-popover--bottom.ui-popover--with-arrow::before,
2258
+ .ui-popover--bottom-start.ui-popover--with-arrow::before,
2259
+ .ui-popover--bottom-end.ui-popover--with-arrow::before {
2260
+ border-color: transparent transparent var(--bg-primary, #1a202c) transparent;
2261
+ }
2262
+
2263
+ /* Dark mode - Left arrow border */
2264
+ .ui-popover--left.ui-popover--with-arrow::after,
2265
+ .ui-popover--left-start.ui-popover--with-arrow::after,
2266
+ .ui-popover--left-end.ui-popover--with-arrow::after {
2267
+ border-color: transparent transparent transparent var(--border-primary, #2d3748);
2268
+ }
2269
+
2270
+ /* Dark mode - Left arrow fill */
2271
+ .ui-popover--left.ui-popover--with-arrow::before,
2272
+ .ui-popover--left-start.ui-popover--with-arrow::before,
2273
+ .ui-popover--left-end.ui-popover--with-arrow::before {
2274
+ border-color: transparent transparent transparent var(--bg-primary, #1a202c);
2275
+ }
2276
+
2277
+ /* Dark mode - Right arrow border */
2278
+ .ui-popover--right.ui-popover--with-arrow::after,
2279
+ .ui-popover--right-start.ui-popover--with-arrow::after,
2280
+ .ui-popover--right-end.ui-popover--with-arrow::after {
2281
+ border-color: transparent var(--border-primary, #2d3748) transparent transparent;
2282
+ }
2283
+
2284
+ /* Dark mode - Right arrow fill */
2285
+ .ui-popover--right.ui-popover--with-arrow::before,
2286
+ .ui-popover--right-start.ui-popover--with-arrow::before,
2287
+ .ui-popover--right-end.ui-popover--with-arrow::before {
2288
+ border-color: transparent var(--bg-primary, #1a202c) transparent transparent;
2289
+ }
2290
+ }
2291
+
2292
+
2293
+ /* Uilab Theme Variables */
2294
+
2295
+ :root {
2296
+ /* Light theme variables */
2297
+ --bg-primary: #ffffff;
2298
+ --bg-secondary: #f9fafb;
2299
+ --bg-tertiary: #f3f4f6;
2300
+ --text-primary: #111827;
2301
+ --text-secondary: #6b7280;
2302
+ --text-tertiary: #9ca3af;
2303
+ --border-primary: #e5e7eb;
2304
+ --border-secondary: #d1d5db;
2305
+ --accent-primary: #3b82f6;
2306
+ --accent-secondary: #1d4ed8;
2307
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
2308
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
2309
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
2310
+ }
2311
+
2312
+ [data-theme="dark"] {
2313
+ /* Dark theme variables */
2314
+ --bg-primary: #111827;
2315
+ --bg-secondary: #1f2937;
2316
+ --bg-tertiary: #374151;
2317
+ --text-primary: #f9fafb;
2318
+ --text-secondary: #d1d5db;
2319
+ --text-tertiary: #9ca3af;
2320
+ --border-primary: #374151;
2321
+ --border-secondary: #4b5563;
2322
+ --accent-primary: #60a5fa;
2323
+ --accent-secondary: #3b82f6;
2324
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3);
2325
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.3), 0 2px 4px -2px rgb(0 0 0 / 0.3);
2326
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.3), 0 4px 6px -4px rgb(0 0 0 / 0.3);
2327
+ }
2328
+
2329
+ /* Theme transition for all elements */
2330
+ * {
2331
+ transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
2332
+ }
2333
+
2334
+ /* Body theme styles */
2335
+ body {
2336
+ background-color: var(--bg-primary);
2337
+ color: var(--text-primary);
2338
+ transition: background-color 0.2s ease, color 0.2s ease;
2339
+ }