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