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