@oleksandr-94/aura-css 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 (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +593 -0
  3. package/dist/aura-flat.css +1611 -0
  4. package/dist/aura-flat.min.css +1 -0
  5. package/dist/aura-neu.css +1622 -0
  6. package/dist/aura-neu.min.css +1 -0
  7. package/dist/aura.css +1634 -0
  8. package/dist/aura.min.css +1 -0
  9. package/dist/interactions.d.ts +57 -0
  10. package/dist/interactions.global.min.js +1 -0
  11. package/dist/interactions.min.mjs +1 -0
  12. package/dist/interactions.mjs +208 -0
  13. package/package.json +72 -0
  14. package/src/_config.scss +72 -0
  15. package/src/_functions.scss +23 -0
  16. package/src/_layers.scss +4 -0
  17. package/src/_surface.scss +49 -0
  18. package/src/_tokens.scss +65 -0
  19. package/src/base/_a11y.scss +31 -0
  20. package/src/base/_reset.scss +7 -0
  21. package/src/components/_accordion.scss +62 -0
  22. package/src/components/_alert.scss +43 -0
  23. package/src/components/_avatar.scss +50 -0
  24. package/src/components/_badge.scss +61 -0
  25. package/src/components/_button.scss +79 -0
  26. package/src/components/_card.scss +58 -0
  27. package/src/components/_checkbox.scss +51 -0
  28. package/src/components/_dropdown.scss +73 -0
  29. package/src/components/_file.scss +42 -0
  30. package/src/components/_group.scss +51 -0
  31. package/src/components/_input.scss +85 -0
  32. package/src/components/_modal.scss +43 -0
  33. package/src/components/_pagination.scss +87 -0
  34. package/src/components/_progress.scss +44 -0
  35. package/src/components/_radio.scss +42 -0
  36. package/src/components/_range.scss +27 -0
  37. package/src/components/_rating.scss +43 -0
  38. package/src/components/_segmented.scss +60 -0
  39. package/src/components/_switch.scss +79 -0
  40. package/src/components/_table.scss +38 -0
  41. package/src/components/_tabs.scss +150 -0
  42. package/src/components/_toast.scss +59 -0
  43. package/src/components/_tooltip.scss +60 -0
  44. package/src/index.scss +32 -0
  45. package/src/js/global.js +7 -0
  46. package/src/js/interactions.auto.js +5 -0
  47. package/src/js/interactions.js +192 -0
  48. package/src/skins/_flat.scss +29 -0
  49. package/src/skins/_glass.scss +40 -0
  50. package/src/skins/_neu.scss +49 -0
package/dist/aura.css ADDED
@@ -0,0 +1,1634 @@
1
+ @layer base, components, a11y;
2
+ :root {
3
+ --radius-sm: 6px;
4
+ --radius-md: 8px;
5
+ --radius-lg: 12px;
6
+ --radius-pill: 999px;
7
+ --space-1: 4px;
8
+ --space-2: 8px;
9
+ --space-3: 12px;
10
+ --space-4: 16px;
11
+ --space-6: 24px;
12
+ --space-8: 32px;
13
+ --font: "Plus Jakarta Sans", system-ui, sans-serif;
14
+ --fs-xs: 12px;
15
+ --fs-sm: 13px;
16
+ --fs-md: 14px;
17
+ --fs-lg: 16px;
18
+ --fs-xl: 20px;
19
+ --blur: 20px;
20
+ --gradient: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
21
+ --gradient-tint: #ffd23f;
22
+ --z-dropdown: 1000;
23
+ --z-sticky: 1020;
24
+ --z-modal: 1050;
25
+ --z-toast: 1080;
26
+ }
27
+
28
+ :root,
29
+ [data-theme=aura-dark] {
30
+ --primary: #00BD7D;
31
+ --on-primary: #0f1a14;
32
+ --primary-container: color-mix(in srgb, #00BD7D 16%, transparent);
33
+ --on-primary-container: #00BD7D;
34
+ --secondary: #3B82F6;
35
+ --on-secondary: #ffffff;
36
+ --secondary-container: color-mix(in srgb, #3B82F6 16%, transparent);
37
+ --on-secondary-container: #3B82F6;
38
+ --accent: #12E0C0;
39
+ --on-accent: #0f1a14;
40
+ --accent-container: color-mix(in srgb, #12E0C0 16%, transparent);
41
+ --on-accent-container: #12E0C0;
42
+ --success: #16A34A;
43
+ --on-success: #ffffff;
44
+ --success-container: color-mix(in srgb, #16A34A 16%, transparent);
45
+ --on-success-container: #16A34A;
46
+ --warning: #E0913A;
47
+ --on-warning: #0f1a14;
48
+ --warning-container: color-mix(in srgb, #E0913A 16%, transparent);
49
+ --on-warning-container: #E0913A;
50
+ --error: #EA4B5E;
51
+ --on-error: #ffffff;
52
+ --error-container: color-mix(in srgb, #EA4B5E 16%, transparent);
53
+ --on-error-container: #EA4B5E;
54
+ --info: #3B82F6;
55
+ --on-info: #ffffff;
56
+ --info-container: color-mix(in srgb, #3B82F6 16%, transparent);
57
+ --on-info-container: #3B82F6;
58
+ --surface: #0e1526;
59
+ --surface-1: #141d33;
60
+ --surface-2: #1b2540;
61
+ --on-surface: #e7ecf5;
62
+ --on-surface-muted: rgba(231, 236, 245, 0.62);
63
+ --outline: rgba(255, 255, 255, 0.14);
64
+ --outline-strong: rgba(255, 255, 255, 0.24);
65
+ --glass-film: rgba(255, 255, 255, 0.06);
66
+ --glass-film-2: rgba(255, 255, 255, 0.1);
67
+ --tip-bg: rgba(238, 244, 250, 0.96);
68
+ --tip-text: #0e1526;
69
+ --shadow-1: 0 8px 32px rgba(0, 0, 0, 0.4);
70
+ --shadow-2: 0 16px 44px rgba(0, 0, 0, 0.5);
71
+ }
72
+
73
+ [data-theme=aura-light] {
74
+ --primary: #00A86B;
75
+ --on-primary: #ffffff;
76
+ --primary-container: color-mix(in srgb, #00A86B 16%, transparent);
77
+ --on-primary-container: #00A86B;
78
+ --secondary: #2563EB;
79
+ --on-secondary: #ffffff;
80
+ --secondary-container: color-mix(in srgb, #2563EB 16%, transparent);
81
+ --on-secondary-container: #2563EB;
82
+ --accent: #0FB89B;
83
+ --on-accent: #0f1a14;
84
+ --accent-container: color-mix(in srgb, #0FB89B 16%, transparent);
85
+ --on-accent-container: #0FB89B;
86
+ --success: #16A34A;
87
+ --on-success: #ffffff;
88
+ --success-container: color-mix(in srgb, #16A34A 16%, transparent);
89
+ --on-success-container: #16A34A;
90
+ --warning: #D97706;
91
+ --on-warning: #ffffff;
92
+ --warning-container: color-mix(in srgb, #D97706 16%, transparent);
93
+ --on-warning-container: #D97706;
94
+ --error: #DC2626;
95
+ --on-error: #ffffff;
96
+ --error-container: color-mix(in srgb, #DC2626 16%, transparent);
97
+ --on-error-container: #DC2626;
98
+ --info: #2563EB;
99
+ --on-info: #ffffff;
100
+ --info-container: color-mix(in srgb, #2563EB 16%, transparent);
101
+ --on-info-container: #2563EB;
102
+ --surface: #eef3f2;
103
+ --surface-1: #ffffff;
104
+ --surface-2: #f5faf8;
105
+ --on-surface: #10231b;
106
+ --on-surface-muted: rgba(16, 35, 27, 0.62);
107
+ --outline: rgba(12, 70, 50, 0.16);
108
+ --outline-strong: rgba(12, 70, 50, 0.3);
109
+ --glass-film: rgba(255, 255, 255, 0.55);
110
+ --glass-film-2: rgba(255, 255, 255, 0.7);
111
+ --tip-bg: rgba(16, 24, 40, 0.95);
112
+ --tip-text: #eef4fa;
113
+ --shadow-1: 0 10px 30px rgba(10, 90, 60, 0.14);
114
+ --shadow-2: 0 16px 40px rgba(10, 90, 60, 0.18);
115
+ }
116
+
117
+ @layer base {
118
+ *, *::before, *::after {
119
+ box-sizing: border-box;
120
+ }
121
+ }
122
+ @layer a11y {
123
+ @media (prefers-reduced-motion: reduce) {
124
+ *, *::before, *::after {
125
+ animation-duration: 1ms;
126
+ animation-iteration-count: 1;
127
+ transition-duration: 1ms;
128
+ scroll-behavior: auto;
129
+ }
130
+ }
131
+ .sr-only {
132
+ position: absolute !important;
133
+ width: 1px;
134
+ height: 1px;
135
+ padding: 0;
136
+ margin: -1px;
137
+ overflow: hidden;
138
+ clip: rect(0, 0, 0, 0);
139
+ white-space: nowrap;
140
+ border: 0;
141
+ }
142
+ }
143
+ @layer components {
144
+ .btn {
145
+ --_c: var(--primary);
146
+ --_bg: var(--_c);
147
+ --_fg: var(--on-primary);
148
+ display: inline-flex;
149
+ align-items: center;
150
+ justify-content: center;
151
+ gap: var(--space-2);
152
+ font: inherit;
153
+ font-weight: 700;
154
+ font-size: var(--fs-md);
155
+ line-height: 1;
156
+ padding: 10px 18px;
157
+ border-radius: var(--radius-md);
158
+ cursor: pointer;
159
+ transition: filter 0.15s ease, transform 0.05s ease, box-shadow 0.15s ease;
160
+ background: var(--_bg);
161
+ color: var(--_fg);
162
+ border: 1px solid transparent;
163
+ box-shadow: 0 6px 18px color-mix(in srgb, var(--_shadow-color, var(--_bg)) 40%, transparent), inset 0 1px 0 rgba(255, 255, 255, 0.28);
164
+ }
165
+ .btn:hover {
166
+ filter: brightness(1.06);
167
+ }
168
+ .btn:active {
169
+ transform: translateY(1px);
170
+ }
171
+ .btn:focus-visible {
172
+ outline: 2px solid var(--primary);
173
+ outline-offset: 2px;
174
+ }
175
+ .btn:disabled, .btn.btn--disabled {
176
+ opacity: 0.5;
177
+ cursor: not-allowed;
178
+ filter: none;
179
+ }
180
+ .btn.btn--secondary {
181
+ --_c: var(--secondary);
182
+ --_fg: var(--on-secondary);
183
+ }
184
+ .btn.btn--accent {
185
+ --_c: var(--accent);
186
+ --_fg: var(--on-accent);
187
+ }
188
+ .btn.btn--success {
189
+ --_c: var(--success);
190
+ --_fg: var(--on-success);
191
+ }
192
+ .btn.btn--warning {
193
+ --_c: var(--warning);
194
+ --_fg: var(--on-warning);
195
+ }
196
+ .btn.btn--error {
197
+ --_c: var(--error);
198
+ --_fg: var(--on-error);
199
+ }
200
+ .btn.btn--info {
201
+ --_c: var(--info);
202
+ --_fg: var(--on-info);
203
+ }
204
+ .btn.btn--gradient {
205
+ --_bg: linear-gradient(135deg,
206
+ color-mix(in srgb, var(--_c) 62%, var(--gradient-tint)) 0%,
207
+ var(--_c) 48%,
208
+ color-mix(in srgb, var(--_c) 84%, #000) 100%);
209
+ --_shadow-color: var(--_c);
210
+ }
211
+ .btn.btn--ghost {
212
+ background: transparent;
213
+ color: var(--on-surface);
214
+ border: 1px solid var(--outline-strong);
215
+ box-shadow: none;
216
+ }
217
+ .btn.btn--ghost:hover {
218
+ background: color-mix(in srgb, var(--on-surface) 8%, transparent);
219
+ filter: none;
220
+ }
221
+ .btn.btn--ghost:active {
222
+ box-shadow: none;
223
+ transform: translateY(1px);
224
+ }
225
+ .btn.btn--outline {
226
+ background: transparent;
227
+ color: var(--_c);
228
+ border: 1px solid var(--_c);
229
+ box-shadow: none;
230
+ }
231
+ .btn.btn--outline:hover {
232
+ background: color-mix(in srgb, var(--_c) 12%, transparent);
233
+ filter: none;
234
+ }
235
+ .btn.btn--outline:active {
236
+ box-shadow: none;
237
+ transform: translateY(1px);
238
+ }
239
+ .btn.btn--sm {
240
+ padding: 7px 12px;
241
+ font-size: var(--fs-sm);
242
+ border-radius: var(--radius-sm);
243
+ }
244
+ .btn.btn--lg {
245
+ padding: 13px 22px;
246
+ font-size: var(--fs-lg);
247
+ }
248
+ .btn.btn--block {
249
+ display: flex;
250
+ width: 100%;
251
+ }
252
+ }
253
+ @layer components {
254
+ .card {
255
+ --_c: var(--primary);
256
+ background: var(--glass-film);
257
+ -webkit-backdrop-filter: blur(var(--blur)) saturate(180%);
258
+ backdrop-filter: blur(var(--blur)) saturate(180%);
259
+ border: 1px solid var(--outline);
260
+ box-shadow: var(--shadow-1), inset 0 1px 0 rgba(255, 255, 255, 0.12);
261
+ border-radius: var(--radius-lg);
262
+ padding: var(--space-6);
263
+ color: var(--on-surface);
264
+ display: flex;
265
+ flex-direction: column;
266
+ gap: var(--space-4);
267
+ }
268
+ .card__header {
269
+ display: flex;
270
+ align-items: center;
271
+ justify-content: space-between;
272
+ gap: var(--space-3);
273
+ }
274
+ .card__title {
275
+ margin: 0;
276
+ font-size: var(--fs-xl);
277
+ font-weight: 800;
278
+ }
279
+ .card__body {
280
+ margin: 0;
281
+ color: var(--on-surface-muted);
282
+ font-size: var(--fs-md);
283
+ line-height: 1.5;
284
+ }
285
+ .card__actions {
286
+ display: flex;
287
+ gap: var(--space-2);
288
+ margin-top: auto;
289
+ }
290
+ .card--primary {
291
+ --_c: var(--primary);
292
+ }
293
+ .card--success {
294
+ --_c: var(--success);
295
+ }
296
+ .card--warning {
297
+ --_c: var(--warning);
298
+ }
299
+ .card--error {
300
+ --_c: var(--error);
301
+ }
302
+ .card--info {
303
+ --_c: var(--info);
304
+ }
305
+ .card--primary,
306
+ .card--success,
307
+ .card--warning,
308
+ .card--error,
309
+ .card--info {
310
+ border-inline-start: 3px solid var(--_c);
311
+ }
312
+ .card--gradient {
313
+ background: linear-gradient(135deg, color-mix(in srgb, var(--_c) 62%, var(--gradient-tint)) 0%, var(--_c) 48%, color-mix(in srgb, var(--_c) 84%, #000) 100%);
314
+ border: none;
315
+ color: #fff;
316
+ }
317
+ .card--gradient .card__body {
318
+ color: rgba(255, 255, 255, 0.82);
319
+ }
320
+ }
321
+ @layer components {
322
+ .field {
323
+ display: flex;
324
+ flex-direction: column;
325
+ gap: var(--space-2);
326
+ }
327
+ .field__label {
328
+ font-size: var(--fs-xs);
329
+ font-weight: 600;
330
+ color: var(--on-surface);
331
+ }
332
+ .field__label--required::after {
333
+ content: " *";
334
+ color: var(--error);
335
+ }
336
+ .field__hint {
337
+ font-size: var(--fs-xs);
338
+ color: var(--on-surface-muted);
339
+ }
340
+ .field__hint--error {
341
+ color: var(--error);
342
+ }
343
+ .field__hint--success {
344
+ color: var(--success);
345
+ }
346
+ .input,
347
+ .select,
348
+ .textarea {
349
+ background: var(--glass-film);
350
+ -webkit-backdrop-filter: blur(var(--blur));
351
+ backdrop-filter: blur(var(--blur));
352
+ border: 1px solid var(--outline-strong);
353
+ font: inherit;
354
+ font-size: var(--fs-md);
355
+ color: var(--on-surface);
356
+ width: 100%;
357
+ padding: 10px 14px;
358
+ border-radius: var(--radius-md);
359
+ transition: border-color 0.15s ease;
360
+ }
361
+ .input::placeholder,
362
+ .select::placeholder,
363
+ .textarea::placeholder {
364
+ color: var(--on-surface-muted);
365
+ }
366
+ .input:focus-visible,
367
+ .select:focus-visible,
368
+ .textarea:focus-visible {
369
+ outline: 2px solid var(--primary);
370
+ outline-offset: 1px;
371
+ }
372
+ .input:disabled,
373
+ .select:disabled,
374
+ .textarea:disabled {
375
+ opacity: 0.5;
376
+ cursor: not-allowed;
377
+ }
378
+ .textarea {
379
+ min-height: 84px;
380
+ resize: vertical;
381
+ }
382
+ .select {
383
+ appearance: none;
384
+ -webkit-appearance: none;
385
+ padding-inline-end: 34px;
386
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 4.5l3.5 3.5 3.5-3.5' fill='none' stroke='%238b93a1' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
387
+ background-repeat: no-repeat;
388
+ background-position: right 12px center;
389
+ }
390
+ .input--error,
391
+ .select--error,
392
+ .textarea--error {
393
+ border-color: var(--error);
394
+ }
395
+ .input--error:focus-visible,
396
+ .select--error:focus-visible,
397
+ .textarea--error:focus-visible {
398
+ outline-color: var(--error);
399
+ }
400
+ .input--success,
401
+ .select--success,
402
+ .textarea--success {
403
+ border-color: var(--success);
404
+ }
405
+ .input--success:focus-visible,
406
+ .select--success:focus-visible,
407
+ .textarea--success:focus-visible {
408
+ outline-color: var(--success);
409
+ }
410
+ .input--sm, .select--sm, .textarea--sm {
411
+ padding-block: 7px;
412
+ padding-inline: 11px;
413
+ font-size: var(--fs-sm);
414
+ border-radius: var(--radius-sm);
415
+ }
416
+ .input--lg, .select--lg, .textarea--lg {
417
+ padding-block: 13px;
418
+ padding-inline: 16px;
419
+ font-size: var(--fs-lg);
420
+ }
421
+ .select--sm, .select--lg {
422
+ padding-inline-end: 34px;
423
+ }
424
+ }
425
+ @layer components {
426
+ .badge {
427
+ --_bg: color-mix(in srgb, var(--on-surface) 10%, transparent);
428
+ --_fg: var(--on-surface);
429
+ display: inline-flex;
430
+ align-items: center;
431
+ gap: 6px;
432
+ padding: 3px 10px;
433
+ font-size: var(--fs-xs);
434
+ font-weight: 700;
435
+ line-height: 1.5;
436
+ white-space: nowrap;
437
+ border-radius: var(--radius-pill);
438
+ border: 1px solid transparent;
439
+ background: var(--_bg);
440
+ color: var(--_fg);
441
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22);
442
+ }
443
+ .badge.badge--primary {
444
+ --_bg: var(--primary-container);
445
+ --_fg: var(--on-primary-container);
446
+ }
447
+ .badge.badge--secondary {
448
+ --_bg: var(--secondary-container);
449
+ --_fg: var(--on-secondary-container);
450
+ }
451
+ .badge.badge--accent {
452
+ --_bg: var(--accent-container);
453
+ --_fg: var(--on-accent-container);
454
+ }
455
+ .badge.badge--success {
456
+ --_bg: var(--success-container);
457
+ --_fg: var(--on-success-container);
458
+ }
459
+ .badge.badge--warning {
460
+ --_bg: var(--warning-container);
461
+ --_fg: var(--on-warning-container);
462
+ }
463
+ .badge.badge--error {
464
+ --_bg: var(--error-container);
465
+ --_fg: var(--on-error-container);
466
+ }
467
+ .badge.badge--info {
468
+ --_bg: var(--info-container);
469
+ --_fg: var(--on-info-container);
470
+ }
471
+ .badge.badge--outline {
472
+ background: transparent;
473
+ border-color: color-mix(in srgb, var(--_fg) 45%, transparent);
474
+ box-shadow: none;
475
+ }
476
+ .badge.badge--sm {
477
+ padding: 2px 8px;
478
+ font-size: 11px;
479
+ }
480
+ .badge.badge--lg {
481
+ padding: 5px 13px;
482
+ font-size: var(--fs-sm);
483
+ }
484
+ .badge__dot {
485
+ width: 7px;
486
+ height: 7px;
487
+ border-radius: 50%;
488
+ background: currentColor;
489
+ flex: none;
490
+ }
491
+ }
492
+ @layer components {
493
+ .alert {
494
+ --_c: var(--primary);
495
+ display: flex;
496
+ align-items: flex-start;
497
+ gap: 12px;
498
+ padding: 14px 16px;
499
+ border-radius: var(--radius-md);
500
+ background: color-mix(in srgb, var(--_c) 13%, var(--surface-1));
501
+ color: var(--on-surface);
502
+ border: 1px solid var(--outline);
503
+ border-left: 3px solid var(--_c);
504
+ font-size: var(--fs-md);
505
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22);
506
+ }
507
+ .alert.alert--success {
508
+ --_c: var(--success);
509
+ }
510
+ .alert.alert--warning {
511
+ --_c: var(--warning);
512
+ }
513
+ .alert.alert--error {
514
+ --_c: var(--error);
515
+ }
516
+ .alert.alert--info {
517
+ --_c: var(--info);
518
+ }
519
+ .alert__icon {
520
+ color: var(--_c);
521
+ font-size: 18px;
522
+ line-height: 1.35;
523
+ flex: none;
524
+ }
525
+ .alert__title {
526
+ font-weight: 700;
527
+ }
528
+ .alert__body {
529
+ color: var(--on-surface-muted);
530
+ font-size: var(--fs-sm);
531
+ margin-top: 2px;
532
+ }
533
+ }
534
+ @layer components {
535
+ .switch {
536
+ --_c: var(--primary);
537
+ position: relative;
538
+ display: inline-flex;
539
+ flex: none;
540
+ width: 46px;
541
+ height: 26px;
542
+ vertical-align: middle;
543
+ cursor: pointer;
544
+ }
545
+ .switch input {
546
+ position: absolute;
547
+ inset: 0;
548
+ opacity: 0;
549
+ margin: 0;
550
+ cursor: pointer;
551
+ }
552
+ .switch__track {
553
+ position: absolute;
554
+ inset: 0;
555
+ border-radius: var(--radius-pill);
556
+ transition: background 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
557
+ background: var(--glass-film);
558
+ -webkit-backdrop-filter: blur(var(--blur));
559
+ backdrop-filter: blur(var(--blur));
560
+ border: 1px solid var(--outline-strong);
561
+ }
562
+ .switch__thumb {
563
+ position: absolute;
564
+ top: 4px;
565
+ left: 4px;
566
+ width: 18px;
567
+ height: 18px;
568
+ border-radius: 50%;
569
+ background: var(--on-surface-muted);
570
+ transition: transform 0.2s ease, background 0.2s ease;
571
+ }
572
+ .switch input:checked ~ .switch__track {
573
+ --_bg: var(--_c);
574
+ --_fg: #fff;
575
+ background: var(--_bg);
576
+ color: var(--_fg);
577
+ border: 1px solid transparent;
578
+ box-shadow: 0 6px 18px color-mix(in srgb, var(--_shadow-color, var(--_bg)) 40%, transparent), inset 0 1px 0 rgba(255, 255, 255, 0.28);
579
+ }
580
+ .switch input:checked ~ .switch__thumb {
581
+ transform: translateX(20px);
582
+ background: #fff;
583
+ }
584
+ .switch input:focus-visible ~ .switch__track {
585
+ outline: 2px solid var(--_c);
586
+ outline-offset: 2px;
587
+ }
588
+ .switch input:disabled ~ .switch__track,
589
+ .switch input:disabled ~ .switch__thumb {
590
+ opacity: 0.5;
591
+ }
592
+ .switch--success {
593
+ --_c: var(--success);
594
+ }
595
+ .switch--warning {
596
+ --_c: var(--warning);
597
+ }
598
+ .switch--error {
599
+ --_c: var(--error);
600
+ }
601
+ .switch--sm {
602
+ width: 38px;
603
+ height: 22px;
604
+ }
605
+ .switch--sm .switch__thumb {
606
+ width: 14px;
607
+ height: 14px;
608
+ }
609
+ .switch--sm input:checked ~ .switch__thumb {
610
+ transform: translateX(16px);
611
+ }
612
+ .switch--lg {
613
+ width: 56px;
614
+ height: 32px;
615
+ }
616
+ .switch--lg .switch__thumb {
617
+ width: 24px;
618
+ height: 24px;
619
+ }
620
+ .switch--lg input:checked ~ .switch__thumb {
621
+ transform: translateX(24px);
622
+ }
623
+ }
624
+ @layer components {
625
+ .checkbox {
626
+ --_c: var(--primary);
627
+ appearance: none;
628
+ -webkit-appearance: none;
629
+ margin: 0;
630
+ flex: none;
631
+ width: 18px;
632
+ height: 18px;
633
+ border-radius: var(--radius-sm);
634
+ cursor: pointer;
635
+ position: relative;
636
+ vertical-align: middle;
637
+ transition: background 0.15s ease, border-color 0.15s ease;
638
+ background: var(--glass-film);
639
+ -webkit-backdrop-filter: blur(var(--blur));
640
+ backdrop-filter: blur(var(--blur));
641
+ border: 1px solid var(--outline-strong);
642
+ }
643
+ .checkbox:checked, .checkbox:indeterminate {
644
+ --_bg: var(--_c);
645
+ --_fg: #fff;
646
+ background: var(--_bg);
647
+ color: var(--_fg);
648
+ border: 1px solid transparent;
649
+ box-shadow: 0 6px 18px color-mix(in srgb, var(--_shadow-color, var(--_bg)) 40%, transparent), inset 0 1px 0 rgba(255, 255, 255, 0.28);
650
+ }
651
+ .checkbox:checked::after {
652
+ content: "";
653
+ position: absolute;
654
+ left: 50%;
655
+ top: 50%;
656
+ width: 5px;
657
+ height: 9px;
658
+ border: solid #fff;
659
+ border-width: 0 2px 2px 0;
660
+ transform: translate(-50%, -58%) rotate(45deg);
661
+ }
662
+ .checkbox:indeterminate::after {
663
+ content: "";
664
+ position: absolute;
665
+ left: 3px;
666
+ right: 3px;
667
+ top: calc(50% - 1px);
668
+ height: 2px;
669
+ background: #fff;
670
+ border-radius: 1px;
671
+ }
672
+ .checkbox:focus-visible {
673
+ outline: 2px solid var(--_c);
674
+ outline-offset: 2px;
675
+ }
676
+ .checkbox:disabled {
677
+ opacity: 0.5;
678
+ cursor: not-allowed;
679
+ }
680
+ .checkbox.checkbox--success {
681
+ --_c: var(--success);
682
+ }
683
+ .checkbox.checkbox--warning {
684
+ --_c: var(--warning);
685
+ }
686
+ .checkbox.checkbox--error {
687
+ --_c: var(--error);
688
+ }
689
+ }
690
+ @layer components {
691
+ .radio {
692
+ --_c: var(--primary);
693
+ appearance: none;
694
+ -webkit-appearance: none;
695
+ margin: 0;
696
+ flex: none;
697
+ width: 18px;
698
+ height: 18px;
699
+ border-radius: 50%;
700
+ cursor: pointer;
701
+ position: relative;
702
+ vertical-align: middle;
703
+ transition: background 0.15s ease, border-color 0.15s ease;
704
+ background: var(--glass-film);
705
+ -webkit-backdrop-filter: blur(var(--blur));
706
+ backdrop-filter: blur(var(--blur));
707
+ border: 1px solid var(--outline-strong);
708
+ }
709
+ .radio:checked {
710
+ --_bg: var(--_c);
711
+ --_fg: #fff;
712
+ background: var(--_bg);
713
+ color: var(--_fg);
714
+ border: 1px solid transparent;
715
+ box-shadow: 0 6px 18px color-mix(in srgb, var(--_shadow-color, var(--_bg)) 40%, transparent), inset 0 1px 0 rgba(255, 255, 255, 0.28);
716
+ }
717
+ .radio:checked::after {
718
+ content: "";
719
+ position: absolute;
720
+ inset: 4px;
721
+ border-radius: 50%;
722
+ background: #fff;
723
+ }
724
+ .radio:focus-visible {
725
+ outline: 2px solid var(--_c);
726
+ outline-offset: 2px;
727
+ }
728
+ .radio:disabled {
729
+ opacity: 0.5;
730
+ cursor: not-allowed;
731
+ }
732
+ .radio.radio--success {
733
+ --_c: var(--success);
734
+ }
735
+ .radio.radio--warning {
736
+ --_c: var(--warning);
737
+ }
738
+ .radio.radio--error {
739
+ --_c: var(--error);
740
+ }
741
+ }
742
+ @layer components {
743
+ .range {
744
+ --_c: var(--primary);
745
+ width: 100%;
746
+ height: 22px;
747
+ accent-color: var(--_c);
748
+ cursor: pointer;
749
+ }
750
+ .range:focus-visible {
751
+ outline: 2px solid var(--primary);
752
+ outline-offset: 2px;
753
+ }
754
+ .range:disabled {
755
+ opacity: 0.5;
756
+ cursor: not-allowed;
757
+ }
758
+ .range.range--success {
759
+ --_c: var(--success);
760
+ }
761
+ .range.range--warning {
762
+ --_c: var(--warning);
763
+ }
764
+ .range.range--error {
765
+ --_c: var(--error);
766
+ }
767
+ .range.range--sm {
768
+ height: 16px;
769
+ }
770
+ .range.range--lg {
771
+ height: 28px;
772
+ }
773
+ }
774
+ @layer components {
775
+ .file {
776
+ --_c: var(--primary);
777
+ max-width: 100%;
778
+ font: inherit;
779
+ font-size: var(--fs-sm);
780
+ color: var(--on-surface-muted);
781
+ cursor: pointer;
782
+ }
783
+ .file::file-selector-button {
784
+ font: inherit;
785
+ font-weight: 700;
786
+ font-size: var(--fs-sm);
787
+ margin-inline-end: 12px;
788
+ padding: 8px 14px;
789
+ border: none;
790
+ border-radius: var(--radius-md);
791
+ background: var(--_c);
792
+ color: var(--on-primary);
793
+ cursor: pointer;
794
+ transition: filter 0.15s ease;
795
+ }
796
+ .file::file-selector-button:hover {
797
+ filter: brightness(1.06);
798
+ }
799
+ .file:focus-visible {
800
+ outline: 2px solid var(--primary);
801
+ outline-offset: 2px;
802
+ border-radius: var(--radius-md);
803
+ }
804
+ .file:disabled {
805
+ opacity: 0.5;
806
+ cursor: not-allowed;
807
+ }
808
+ .file.file--ghost::file-selector-button {
809
+ background: transparent;
810
+ color: var(--on-surface);
811
+ border: 1px solid var(--outline-strong);
812
+ }
813
+ }
814
+ @layer components {
815
+ .rating {
816
+ --_c: var(--warning);
817
+ display: inline-flex;
818
+ flex-direction: row-reverse;
819
+ justify-content: flex-end;
820
+ gap: 2px;
821
+ }
822
+ .rating input {
823
+ position: absolute;
824
+ width: 1px;
825
+ height: 1px;
826
+ opacity: 0;
827
+ margin: 0;
828
+ }
829
+ .rating label {
830
+ font-size: 24px;
831
+ line-height: 1;
832
+ color: var(--outline-strong);
833
+ cursor: pointer;
834
+ transition: color 0.12s ease, transform 0.12s ease;
835
+ }
836
+ .rating label:hover {
837
+ transform: scale(1.1);
838
+ }
839
+ .rating input:checked ~ label,
840
+ .rating label:hover,
841
+ .rating label:hover ~ label {
842
+ color: var(--_c);
843
+ }
844
+ .rating input:focus-visible + label {
845
+ outline: 2px solid var(--primary);
846
+ outline-offset: 2px;
847
+ border-radius: 4px;
848
+ }
849
+ .rating.rating--sm label {
850
+ font-size: 18px;
851
+ }
852
+ .rating.rating--lg label {
853
+ font-size: 32px;
854
+ }
855
+ }
856
+ @layer components {
857
+ .tabs {
858
+ display: inline-flex;
859
+ gap: 4px;
860
+ padding: 4px;
861
+ border-radius: var(--radius-md);
862
+ background: var(--glass-film);
863
+ -webkit-backdrop-filter: blur(var(--blur));
864
+ backdrop-filter: blur(var(--blur));
865
+ border: 1px solid var(--outline-strong);
866
+ }
867
+ .tabs--block {
868
+ display: flex;
869
+ width: 100%;
870
+ }
871
+ .tabs--block .tab {
872
+ flex: 1;
873
+ }
874
+ .tab {
875
+ font: inherit;
876
+ font-weight: 700;
877
+ font-size: var(--fs-sm);
878
+ padding: 8px 14px;
879
+ border: none;
880
+ border-radius: var(--radius-sm);
881
+ background: transparent;
882
+ color: var(--on-surface-muted);
883
+ cursor: pointer;
884
+ white-space: nowrap;
885
+ transition: color 0.15s ease;
886
+ }
887
+ .tab:hover:not(.tab--active) {
888
+ color: var(--on-surface);
889
+ }
890
+ .tab:focus-visible {
891
+ outline: 2px solid var(--primary);
892
+ outline-offset: 2px;
893
+ }
894
+ .tab--active {
895
+ --_bg: var(--primary);
896
+ --_fg: var(--on-primary);
897
+ background: var(--_bg);
898
+ color: var(--_fg);
899
+ border: 1px solid transparent;
900
+ box-shadow: 0 6px 18px color-mix(in srgb, var(--_shadow-color, var(--_bg)) 40%, transparent), inset 0 1px 0 rgba(255, 255, 255, 0.28);
901
+ color: var(--_fg);
902
+ }
903
+ .tab-panel {
904
+ margin-top: var(--space-4);
905
+ }
906
+ .tabs--underline {
907
+ gap: 4px;
908
+ padding: 0;
909
+ background: none;
910
+ border: none;
911
+ border-bottom: 1px solid var(--outline);
912
+ border-radius: 0;
913
+ box-shadow: none;
914
+ -webkit-backdrop-filter: none;
915
+ backdrop-filter: none;
916
+ }
917
+ .tabs--underline .tab {
918
+ border-radius: 0;
919
+ padding: 10px 14px;
920
+ border-bottom: 2px solid transparent;
921
+ margin-bottom: -1px;
922
+ }
923
+ .tabs--underline .tab--active {
924
+ background: none;
925
+ box-shadow: none;
926
+ color: var(--primary);
927
+ border-bottom-color: var(--primary);
928
+ }
929
+ .tabs--lift {
930
+ gap: 4px;
931
+ padding: 0;
932
+ background: none;
933
+ border: none;
934
+ border-radius: 0;
935
+ box-shadow: none;
936
+ -webkit-backdrop-filter: none;
937
+ backdrop-filter: none;
938
+ }
939
+ .tabs--lift .tab {
940
+ position: relative;
941
+ z-index: 0;
942
+ border-radius: var(--radius-md) var(--radius-md) 0 0;
943
+ padding: 10px 16px;
944
+ border: 1px solid transparent;
945
+ border-bottom: none;
946
+ margin-bottom: -1px;
947
+ }
948
+ .tabs--lift .tab--active {
949
+ z-index: 1;
950
+ background: var(--surface-1);
951
+ box-shadow: none;
952
+ color: var(--on-surface);
953
+ border-color: var(--outline);
954
+ }
955
+ .tab-panels {
956
+ padding-top: var(--space-4);
957
+ }
958
+ .tab-panels .tab-panel {
959
+ margin-top: 0;
960
+ }
961
+ .tabs--lift + .tab-panels {
962
+ padding: var(--space-6);
963
+ background: var(--surface-1);
964
+ border: 1px solid var(--outline);
965
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
966
+ }
967
+ .tab-card {
968
+ background: var(--surface-1);
969
+ border: 1px solid var(--outline);
970
+ border-radius: var(--radius-lg);
971
+ overflow: hidden;
972
+ }
973
+ .tab-card > .tabs {
974
+ display: flex;
975
+ background: none;
976
+ border: none;
977
+ border-bottom: 1px solid var(--outline);
978
+ border-radius: 0;
979
+ box-shadow: none;
980
+ -webkit-backdrop-filter: none;
981
+ backdrop-filter: none;
982
+ padding: var(--space-2);
983
+ }
984
+ .tab-card > .tabs--underline {
985
+ padding: var(--space-1) var(--space-2) 0;
986
+ }
987
+ .tab-card > .tab-panels {
988
+ margin-top: 0;
989
+ padding: var(--space-6);
990
+ }
991
+ .tabs--sm .tab {
992
+ padding: 5px 10px;
993
+ font-size: var(--fs-xs);
994
+ }
995
+ .tabs--lg .tab {
996
+ padding: 11px 18px;
997
+ font-size: var(--fs-md);
998
+ }
999
+ }
1000
+ @layer components {
1001
+ .table {
1002
+ width: 100%;
1003
+ border-collapse: collapse;
1004
+ font-size: var(--fs-md);
1005
+ color: var(--on-surface);
1006
+ }
1007
+ .table th, .table td {
1008
+ text-align: left;
1009
+ padding: 11px 14px;
1010
+ border-bottom: 1px solid var(--outline);
1011
+ }
1012
+ .table th {
1013
+ font-size: var(--fs-xs);
1014
+ text-transform: uppercase;
1015
+ letter-spacing: 0.05em;
1016
+ font-weight: 700;
1017
+ color: var(--on-surface-muted);
1018
+ }
1019
+ .table tbody tr:last-child td {
1020
+ border-bottom: none;
1021
+ }
1022
+ .table tbody tr:hover {
1023
+ background: color-mix(in srgb, var(--on-surface) 5%, transparent);
1024
+ }
1025
+ .table--zebra tbody tr:nth-child(even) {
1026
+ background: color-mix(in srgb, var(--on-surface) 4%, transparent);
1027
+ }
1028
+ .table--compact th,
1029
+ .table--compact td {
1030
+ padding: 7px 10px;
1031
+ }
1032
+ }
1033
+ @layer components {
1034
+ .group,
1035
+ .btn-group {
1036
+ display: inline-flex;
1037
+ align-items: stretch;
1038
+ border-radius: var(--radius-md);
1039
+ }
1040
+ .group > *,
1041
+ .btn-group > * {
1042
+ position: relative;
1043
+ border-radius: 0;
1044
+ box-shadow: none;
1045
+ }
1046
+ .group > :not(:first-child),
1047
+ .btn-group > :not(:first-child) {
1048
+ margin-inline-start: -1px;
1049
+ }
1050
+ .group > :hover,
1051
+ .group > :focus-visible,
1052
+ .group > :focus-within,
1053
+ .btn-group > :hover,
1054
+ .btn-group > :focus-visible,
1055
+ .btn-group > :focus-within {
1056
+ z-index: 1;
1057
+ }
1058
+ .group > :first-child,
1059
+ .btn-group > :first-child {
1060
+ border-start-start-radius: var(--radius-md);
1061
+ border-end-start-radius: var(--radius-md);
1062
+ }
1063
+ .group > :last-child,
1064
+ .btn-group > :last-child {
1065
+ border-start-end-radius: var(--radius-md);
1066
+ border-end-end-radius: var(--radius-md);
1067
+ }
1068
+ .group > .input,
1069
+ .group > .select,
1070
+ .btn-group > .input,
1071
+ .btn-group > .select {
1072
+ flex: 1;
1073
+ width: auto;
1074
+ min-width: 0;
1075
+ }
1076
+ .group--block,
1077
+ .btn-group--block {
1078
+ display: flex;
1079
+ width: 100%;
1080
+ }
1081
+ .group--block > *,
1082
+ .btn-group--block > * {
1083
+ flex: 1;
1084
+ }
1085
+ }
1086
+ @layer components {
1087
+ .segmented {
1088
+ display: inline-flex;
1089
+ gap: 4px;
1090
+ padding: 4px;
1091
+ border-radius: var(--radius-md);
1092
+ background: var(--glass-film);
1093
+ -webkit-backdrop-filter: blur(var(--blur));
1094
+ backdrop-filter: blur(var(--blur));
1095
+ border: 1px solid var(--outline-strong);
1096
+ }
1097
+ .segmented--block {
1098
+ display: flex;
1099
+ width: 100%;
1100
+ }
1101
+ .segmented--block .segmented__option {
1102
+ flex: 1;
1103
+ }
1104
+ .segmented__option {
1105
+ position: relative;
1106
+ display: inline-flex;
1107
+ flex: none;
1108
+ }
1109
+ .segmented__option input {
1110
+ position: absolute;
1111
+ inset: 0;
1112
+ width: 100%;
1113
+ margin: 0;
1114
+ opacity: 0;
1115
+ cursor: pointer;
1116
+ }
1117
+ .segmented__option span {
1118
+ flex: 1;
1119
+ text-align: center;
1120
+ padding: 8px 14px;
1121
+ border-radius: var(--radius-sm);
1122
+ font-weight: 700;
1123
+ font-size: var(--fs-sm);
1124
+ color: var(--on-surface-muted);
1125
+ white-space: nowrap;
1126
+ -webkit-user-select: none;
1127
+ user-select: none;
1128
+ transition: color 0.15s ease;
1129
+ }
1130
+ .segmented__option input:checked + span {
1131
+ --_c: var(--primary);
1132
+ --_bg: var(--_c);
1133
+ --_fg: var(--on-primary);
1134
+ background: var(--_bg);
1135
+ color: var(--_fg);
1136
+ border: 1px solid transparent;
1137
+ box-shadow: 0 6px 18px color-mix(in srgb, var(--_shadow-color, var(--_bg)) 40%, transparent), inset 0 1px 0 rgba(255, 255, 255, 0.28);
1138
+ color: var(--_fg);
1139
+ }
1140
+ .segmented__option input:focus-visible + span {
1141
+ outline: 2px solid var(--primary);
1142
+ outline-offset: 2px;
1143
+ }
1144
+ }
1145
+ @layer components {
1146
+ .progress {
1147
+ --_c: var(--primary);
1148
+ display: block;
1149
+ width: 100%;
1150
+ height: 8px;
1151
+ border-radius: var(--radius-pill);
1152
+ overflow: hidden;
1153
+ background: var(--glass-film);
1154
+ -webkit-backdrop-filter: blur(var(--blur));
1155
+ backdrop-filter: blur(var(--blur));
1156
+ border: 1px solid var(--outline-strong);
1157
+ }
1158
+ .progress__bar {
1159
+ display: block;
1160
+ height: 100%;
1161
+ border-radius: inherit;
1162
+ background: var(--_c);
1163
+ transition: width 0.3s ease;
1164
+ }
1165
+ .progress--success {
1166
+ --_c: var(--success);
1167
+ }
1168
+ .progress--warning {
1169
+ --_c: var(--warning);
1170
+ }
1171
+ .progress--error {
1172
+ --_c: var(--error);
1173
+ }
1174
+ .spinner {
1175
+ display: inline-block;
1176
+ width: 28px;
1177
+ height: 28px;
1178
+ border: 3px solid var(--outline-strong);
1179
+ border-top-color: var(--primary);
1180
+ border-radius: 50%;
1181
+ animation: spin 0.8s linear infinite;
1182
+ }
1183
+ .spinner--sm {
1184
+ width: 18px;
1185
+ height: 18px;
1186
+ border-width: 2px;
1187
+ }
1188
+ .spinner--lg {
1189
+ width: 40px;
1190
+ height: 40px;
1191
+ border-width: 4px;
1192
+ }
1193
+ @keyframes spin {
1194
+ to {
1195
+ transform: rotate(360deg);
1196
+ }
1197
+ }
1198
+ }
1199
+ @layer components {
1200
+ .tooltip {
1201
+ position: relative;
1202
+ display: inline-flex;
1203
+ }
1204
+ .tooltip__text {
1205
+ visibility: hidden;
1206
+ opacity: 0;
1207
+ position: absolute;
1208
+ bottom: calc(100% + 8px);
1209
+ left: 50%;
1210
+ transform: translateX(-50%);
1211
+ white-space: nowrap;
1212
+ background: var(--tip-bg);
1213
+ color: var(--tip-text);
1214
+ font-size: var(--fs-xs);
1215
+ font-weight: 600;
1216
+ padding: 6px 10px;
1217
+ border-radius: var(--radius-sm);
1218
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);
1219
+ z-index: var(--z-dropdown);
1220
+ transition: opacity 0.15s ease, visibility 0.15s ease;
1221
+ }
1222
+ .tooltip__text::after {
1223
+ content: "";
1224
+ position: absolute;
1225
+ top: 100%;
1226
+ left: 50%;
1227
+ transform: translateX(-50%);
1228
+ border: 5px solid transparent;
1229
+ border-top-color: var(--tip-bg);
1230
+ }
1231
+ .tooltip:hover .tooltip__text,
1232
+ .tooltip:focus-within .tooltip__text {
1233
+ visibility: visible;
1234
+ opacity: 1;
1235
+ }
1236
+ .tooltip--bottom .tooltip__text {
1237
+ bottom: auto;
1238
+ top: calc(100% + 8px);
1239
+ }
1240
+ .tooltip--bottom .tooltip__text::after {
1241
+ top: auto;
1242
+ bottom: 100%;
1243
+ border-top-color: transparent;
1244
+ border-bottom-color: var(--tip-bg);
1245
+ }
1246
+ }
1247
+ @layer components {
1248
+ .modal-overlay {
1249
+ position: fixed;
1250
+ inset: 0;
1251
+ z-index: var(--z-modal);
1252
+ display: grid;
1253
+ place-items: center;
1254
+ padding: 20px;
1255
+ background: rgba(4, 10, 20, 0.5);
1256
+ -webkit-backdrop-filter: blur(4px);
1257
+ backdrop-filter: blur(4px);
1258
+ opacity: 0;
1259
+ visibility: hidden;
1260
+ transition: opacity 0.2s ease, visibility 0.2s ease;
1261
+ }
1262
+ .modal-overlay[data-state=open] {
1263
+ opacity: 1;
1264
+ visibility: visible;
1265
+ }
1266
+ .modal {
1267
+ width: 100%;
1268
+ max-width: 440px;
1269
+ padding: 24px;
1270
+ border-radius: var(--radius-lg);
1271
+ background: var(--surface-1);
1272
+ border: 1px solid var(--outline);
1273
+ box-shadow: var(--shadow-2);
1274
+ transform: translateY(10px) scale(0.98);
1275
+ transition: transform 0.2s ease;
1276
+ }
1277
+ .modal-overlay[data-state=open] .modal {
1278
+ transform: none;
1279
+ }
1280
+ .modal__title {
1281
+ margin: 0 0 8px;
1282
+ font-size: var(--fs-xl);
1283
+ font-weight: 800;
1284
+ }
1285
+ .modal__body {
1286
+ margin: 0 0 20px;
1287
+ color: var(--on-surface-muted);
1288
+ font-size: var(--fs-md);
1289
+ line-height: 1.5;
1290
+ }
1291
+ .modal__actions {
1292
+ display: flex;
1293
+ gap: 10px;
1294
+ justify-content: flex-end;
1295
+ }
1296
+ }
1297
+ @layer components {
1298
+ .dropdown {
1299
+ position: relative;
1300
+ display: inline-block;
1301
+ }
1302
+ .dropdown__menu {
1303
+ position: absolute;
1304
+ top: calc(100% + 6px);
1305
+ left: 0;
1306
+ z-index: var(--z-dropdown);
1307
+ min-width: 180px;
1308
+ padding: 6px;
1309
+ border-radius: var(--radius-md);
1310
+ background: var(--glass-film-2);
1311
+ -webkit-backdrop-filter: blur(var(--blur)) saturate(180%);
1312
+ backdrop-filter: blur(var(--blur)) saturate(180%);
1313
+ border: 1px solid var(--outline);
1314
+ box-shadow: var(--shadow-2), inset 0 1px 0 rgba(255, 255, 255, 0.12);
1315
+ opacity: 0;
1316
+ visibility: hidden;
1317
+ transform: translateY(-4px);
1318
+ transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s ease;
1319
+ }
1320
+ .dropdown__menu--end {
1321
+ left: auto;
1322
+ right: 0;
1323
+ }
1324
+ .dropdown[data-state=open] .dropdown__menu {
1325
+ opacity: 1;
1326
+ visibility: visible;
1327
+ transform: none;
1328
+ }
1329
+ .dropdown__item {
1330
+ display: block;
1331
+ width: 100%;
1332
+ text-align: left;
1333
+ padding: 9px 12px;
1334
+ border: none;
1335
+ border-radius: var(--radius-sm);
1336
+ background: none;
1337
+ color: var(--on-surface);
1338
+ font: inherit;
1339
+ font-size: var(--fs-sm);
1340
+ font-weight: 600;
1341
+ text-decoration: none;
1342
+ cursor: pointer;
1343
+ }
1344
+ .dropdown__item:hover {
1345
+ background: color-mix(in srgb, var(--on-surface) 8%, transparent);
1346
+ }
1347
+ .dropdown__divider {
1348
+ height: 1px;
1349
+ margin: 6px 4px;
1350
+ background: var(--outline);
1351
+ }
1352
+ .dropdown__caret {
1353
+ display: inline-block;
1354
+ width: 8px;
1355
+ height: 8px;
1356
+ margin-inline-start: 6px;
1357
+ border-right: 2px solid currentColor;
1358
+ border-bottom: 2px solid currentColor;
1359
+ border-bottom-right-radius: 2px;
1360
+ transform: translateY(-2px) rotate(45deg);
1361
+ transition: transform 0.2s ease;
1362
+ }
1363
+ .dropdown[data-state=open] .dropdown__caret {
1364
+ transform: translateY(1px) rotate(-135deg);
1365
+ }
1366
+ }
1367
+ @layer components {
1368
+ .avatar {
1369
+ position: relative;
1370
+ display: inline-grid;
1371
+ place-items: center;
1372
+ width: 40px;
1373
+ height: 40px;
1374
+ flex: none;
1375
+ border-radius: 50%;
1376
+ overflow: hidden;
1377
+ font-weight: 700;
1378
+ font-size: var(--fs-md);
1379
+ color: var(--on-surface);
1380
+ background: color-mix(in srgb, var(--primary) 22%, var(--surface-2));
1381
+ border: 2px solid var(--surface-1);
1382
+ }
1383
+ .avatar img {
1384
+ width: 100%;
1385
+ height: 100%;
1386
+ object-fit: cover;
1387
+ border-radius: inherit;
1388
+ }
1389
+ .avatar--sm {
1390
+ width: 30px;
1391
+ height: 30px;
1392
+ font-size: var(--fs-xs);
1393
+ }
1394
+ .avatar--lg {
1395
+ width: 56px;
1396
+ height: 56px;
1397
+ font-size: var(--fs-xl);
1398
+ }
1399
+ .avatar--square {
1400
+ border-radius: var(--radius-md);
1401
+ }
1402
+ .avatar__status {
1403
+ position: absolute;
1404
+ right: 0;
1405
+ bottom: 0;
1406
+ width: 11px;
1407
+ height: 11px;
1408
+ border-radius: 50%;
1409
+ background: var(--on-surface-muted);
1410
+ border: 2px solid var(--surface-1);
1411
+ }
1412
+ .avatar__status--online {
1413
+ background: var(--success);
1414
+ }
1415
+ .avatar__status--busy {
1416
+ background: var(--error);
1417
+ }
1418
+ .avatar-group {
1419
+ display: inline-flex;
1420
+ }
1421
+ .avatar-group .avatar:not(:first-child) {
1422
+ margin-left: -12px;
1423
+ }
1424
+ }
1425
+ @layer components {
1426
+ .accordion {
1427
+ display: flex;
1428
+ flex-direction: column;
1429
+ gap: 8px;
1430
+ }
1431
+ .accordion__item {
1432
+ border-radius: var(--radius-md);
1433
+ overflow: hidden;
1434
+ background: var(--glass-film);
1435
+ -webkit-backdrop-filter: blur(var(--blur)) saturate(180%);
1436
+ backdrop-filter: blur(var(--blur)) saturate(180%);
1437
+ border: 1px solid var(--outline);
1438
+ box-shadow: var(--shadow-1), inset 0 1px 0 rgba(255, 255, 255, 0.12);
1439
+ }
1440
+ .accordion__head {
1441
+ display: flex;
1442
+ align-items: center;
1443
+ justify-content: space-between;
1444
+ gap: 12px;
1445
+ padding: 14px 16px;
1446
+ font-weight: 700;
1447
+ font-size: var(--fs-md);
1448
+ cursor: pointer;
1449
+ list-style: none;
1450
+ -webkit-user-select: none;
1451
+ user-select: none;
1452
+ }
1453
+ .accordion__head::-webkit-details-marker {
1454
+ display: none;
1455
+ }
1456
+ .accordion__head::after {
1457
+ content: "";
1458
+ flex: none;
1459
+ width: 9px;
1460
+ height: 9px;
1461
+ margin-inline-start: 8px;
1462
+ border-right: 2px solid var(--on-surface-muted);
1463
+ border-bottom: 2px solid var(--on-surface-muted);
1464
+ border-bottom-right-radius: 2px;
1465
+ transform: translateY(-2px) rotate(45deg);
1466
+ transition: transform 0.2s ease;
1467
+ }
1468
+ .accordion__head:focus-visible {
1469
+ outline: 2px solid var(--primary);
1470
+ outline-offset: -2px;
1471
+ }
1472
+ .accordion__item[open] > .accordion__head::after {
1473
+ transform: translateY(2px) rotate(-135deg);
1474
+ }
1475
+ .accordion__body {
1476
+ padding: 0 16px 16px;
1477
+ color: var(--on-surface-muted);
1478
+ font-size: var(--fs-sm);
1479
+ line-height: 1.5;
1480
+ }
1481
+ }
1482
+ @layer components {
1483
+ .toast-container {
1484
+ position: fixed;
1485
+ top: 20px;
1486
+ right: 20px;
1487
+ z-index: var(--z-toast);
1488
+ display: flex;
1489
+ flex-direction: column;
1490
+ gap: 10px;
1491
+ width: min(360px, 100vw - 40px);
1492
+ pointer-events: none;
1493
+ }
1494
+ .toast-container--bottom {
1495
+ top: auto;
1496
+ bottom: 20px;
1497
+ }
1498
+ .toast {
1499
+ --_c: var(--primary);
1500
+ pointer-events: auto;
1501
+ display: flex;
1502
+ align-items: flex-start;
1503
+ gap: 12px;
1504
+ padding: 12px 14px;
1505
+ border-radius: var(--radius-md);
1506
+ background: var(--surface-1);
1507
+ border: 1px solid var(--outline);
1508
+ border-left: 3px solid var(--_c);
1509
+ box-shadow: var(--shadow-2);
1510
+ font-size: var(--fs-sm);
1511
+ opacity: 0;
1512
+ transform: translateX(12px);
1513
+ transition: opacity 0.2s ease, transform 0.2s ease;
1514
+ }
1515
+ .toast[data-state=open] {
1516
+ opacity: 1;
1517
+ transform: none;
1518
+ }
1519
+ .toast--success {
1520
+ --_c: var(--success);
1521
+ }
1522
+ .toast--warning {
1523
+ --_c: var(--warning);
1524
+ }
1525
+ .toast--error {
1526
+ --_c: var(--error);
1527
+ }
1528
+ .toast--info {
1529
+ --_c: var(--info);
1530
+ }
1531
+ .toast__body {
1532
+ flex: 1;
1533
+ color: var(--on-surface);
1534
+ line-height: 1.4;
1535
+ }
1536
+ .toast__close {
1537
+ flex: none;
1538
+ border: none;
1539
+ background: none;
1540
+ color: var(--on-surface-muted);
1541
+ font-size: 18px;
1542
+ line-height: 1;
1543
+ cursor: pointer;
1544
+ padding: 0 2px;
1545
+ }
1546
+ .toast__close:hover {
1547
+ color: var(--on-surface);
1548
+ }
1549
+ }
1550
+ @layer components {
1551
+ .pagination {
1552
+ display: inline-flex;
1553
+ gap: 4px;
1554
+ }
1555
+ .pagination__item {
1556
+ min-width: 36px;
1557
+ height: 36px;
1558
+ padding: 0 8px;
1559
+ display: inline-flex;
1560
+ align-items: center;
1561
+ justify-content: center;
1562
+ border-radius: var(--radius-md);
1563
+ border: 1px solid var(--outline);
1564
+ background: var(--surface-1);
1565
+ color: var(--on-surface);
1566
+ font: inherit;
1567
+ font-size: var(--fs-sm);
1568
+ font-weight: 600;
1569
+ text-decoration: none;
1570
+ cursor: pointer;
1571
+ }
1572
+ .pagination__item:hover:not(.pagination__item--active):not(:disabled):not(.pagination__item--disabled) {
1573
+ background: color-mix(in srgb, var(--on-surface) 8%, transparent);
1574
+ }
1575
+ .pagination__item:focus-visible {
1576
+ outline: 2px solid var(--primary);
1577
+ outline-offset: 2px;
1578
+ }
1579
+ .pagination__item:disabled, .pagination__item.pagination__item--disabled {
1580
+ opacity: 0.5;
1581
+ cursor: not-allowed;
1582
+ }
1583
+ .pagination__item--active {
1584
+ --_bg: var(--primary);
1585
+ --_fg: var(--on-primary);
1586
+ background: var(--_bg);
1587
+ color: var(--_fg);
1588
+ border: 1px solid transparent;
1589
+ box-shadow: 0 6px 18px color-mix(in srgb, var(--_shadow-color, var(--_bg)) 40%, transparent), inset 0 1px 0 rgba(255, 255, 255, 0.28);
1590
+ border-color: transparent;
1591
+ }
1592
+ .pagination--joined {
1593
+ gap: 0;
1594
+ }
1595
+ .pagination--joined .pagination__item {
1596
+ position: relative;
1597
+ border-radius: 0;
1598
+ }
1599
+ .pagination--joined .pagination__item:not(:first-child) {
1600
+ margin-inline-start: -1px;
1601
+ }
1602
+ .pagination--joined .pagination__item:hover:not(:disabled):not(.pagination__item--disabled),
1603
+ .pagination--joined .pagination__item:focus-visible,
1604
+ .pagination--joined .pagination__item--active {
1605
+ z-index: 1;
1606
+ }
1607
+ .pagination--joined .pagination__item:first-child {
1608
+ border-start-start-radius: var(--radius-md);
1609
+ border-end-start-radius: var(--radius-md);
1610
+ }
1611
+ .pagination--joined .pagination__item:last-child {
1612
+ border-start-end-radius: var(--radius-md);
1613
+ border-end-end-radius: var(--radius-md);
1614
+ }
1615
+ .pagination--sm .pagination__item {
1616
+ min-width: 30px;
1617
+ height: 30px;
1618
+ font-size: var(--fs-xs);
1619
+ }
1620
+ .pagination__ellipsis {
1621
+ min-width: 24px;
1622
+ height: 36px;
1623
+ display: inline-flex;
1624
+ align-items: flex-end;
1625
+ justify-content: center;
1626
+ padding-bottom: 6px;
1627
+ color: var(--on-surface-muted);
1628
+ -webkit-user-select: none;
1629
+ user-select: none;
1630
+ }
1631
+ .pagination--sm .pagination__ellipsis {
1632
+ height: 30px;
1633
+ }
1634
+ }