glasswind 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.
@@ -0,0 +1,2663 @@
1
+ /* src/styles/tokens.css */
2
+ :root {
3
+ --gl-blur: 16px;
4
+ --gl-saturate: 180%;
5
+ --gl-bg: rgba(255, 255, 255, 0.14);
6
+ --gl-bg-hover: rgba(255, 255, 255, 0.22);
7
+ --gl-bg-active: rgba(255, 255, 255, 0.28);
8
+ --gl-bg-subtle: rgba(255, 255, 255, 0.08);
9
+ --gl-border: rgba(255, 255, 255, 0.30);
10
+ --gl-border-strong: rgba(255, 255, 255, 0.45);
11
+ --gl-highlight: rgba(255, 255, 255, 0.55);
12
+ --gl-shadow: 0 8px 32px rgba(17, 24, 39, 0.18);
13
+ --gl-shadow-lg: 0 20px 60px rgba(17, 24, 39, 0.28);
14
+ --gl-inner-glow: inset 0 1px 0 0 var(--gl-highlight);
15
+ --gl-primary: #6366f1;
16
+ --gl-primary-hover: #4f52e0;
17
+ --gl-primary-contrast: #ffffff;
18
+ --gl-primary-soft: rgba(99, 102, 241, 0.16);
19
+ --gl-success: #22c55e;
20
+ --gl-success-soft: rgba(34, 197, 94, 0.16);
21
+ --gl-danger: #ef4444;
22
+ --gl-danger-soft: rgba(239, 68, 68, 0.16);
23
+ --gl-warning: #f59e0b;
24
+ --gl-warning-soft: rgba(245, 158, 11, 0.16);
25
+ --gl-info: #0ea5e9;
26
+ --gl-info-soft: rgba(14, 165, 233, 0.16);
27
+ --gl-text: rgba(17, 24, 39, 0.94);
28
+ --gl-text-muted: rgba(17, 24, 39, 0.60);
29
+ --gl-text-faint: rgba(17, 24, 39, 0.40);
30
+ --gl-text-on-glass: rgba(17, 24, 39, 0.94);
31
+ --gl-ring: 0 0 0 3px rgba(99, 102, 241, 0.45);
32
+ --gl-radius-sm: 8px;
33
+ --gl-radius: 14px;
34
+ --gl-radius-lg: 20px;
35
+ --gl-radius-xl: 28px;
36
+ --gl-radius-full: 9999px;
37
+ --gl-font:
38
+ -apple-system,
39
+ BlinkMacSystemFont,
40
+ "Segoe UI",
41
+ Roboto,
42
+ Helvetica,
43
+ Arial,
44
+ "Apple Color Emoji",
45
+ "Segoe UI Emoji",
46
+ sans-serif;
47
+ --gl-font-mono:
48
+ ui-monospace,
49
+ SFMono-Regular,
50
+ Menlo,
51
+ Consolas,
52
+ monospace;
53
+ --gl-fs-xs: 0.75rem;
54
+ --gl-fs-sm: 0.85rem;
55
+ --gl-fs: 0.95rem;
56
+ --gl-fs-lg: 1.1rem;
57
+ --gl-fs-xl: 1.35rem;
58
+ --gl-fw: 500;
59
+ --gl-fw-bold: 650;
60
+ --gl-lh: 1.5;
61
+ --gl-space-1: 4px;
62
+ --gl-space-2: 8px;
63
+ --gl-space-3: 12px;
64
+ --gl-space-4: 16px;
65
+ --gl-space-5: 20px;
66
+ --gl-space-6: 24px;
67
+ --gl-space-8: 32px;
68
+ --gl-control-h-sm: 32px;
69
+ --gl-control-h-md: 40px;
70
+ --gl-control-h-lg: 48px;
71
+ --gl-ease: cubic-bezier(0.22, 1, 0.36, 1);
72
+ --gl-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
73
+ --gl-dur-fast: 140ms;
74
+ --gl-dur: 220ms;
75
+ --gl-dur-slow: 340ms;
76
+ --gl-z-dropdown: 900;
77
+ --gl-z-drawer: 1000;
78
+ --gl-z-modal: 1010;
79
+ --gl-z-toast: 1100;
80
+ --gl-z-tooltip: 1200;
81
+ }
82
+ [data-theme=dark],
83
+ .gl-dark {
84
+ --gl-bg: rgba(24, 24, 32, 0.48);
85
+ --gl-bg-hover: rgba(38, 38, 50, 0.58);
86
+ --gl-bg-active: rgba(48, 48, 62, 0.64);
87
+ --gl-bg-subtle: rgba(255, 255, 255, 0.05);
88
+ --gl-border: rgba(255, 255, 255, 0.14);
89
+ --gl-border-strong: rgba(255, 255, 255, 0.26);
90
+ --gl-highlight: rgba(255, 255, 255, 0.16);
91
+ --gl-shadow: 0 8px 32px rgba(0, 0, 0, 0.50);
92
+ --gl-shadow-lg: 0 20px 60px rgba(0, 0, 0, 0.62);
93
+ --gl-primary: #818cf8;
94
+ --gl-primary-hover: #a5b0ff;
95
+ --gl-primary-soft: rgba(129, 140, 248, 0.20);
96
+ --gl-text: rgba(255, 255, 255, 0.94);
97
+ --gl-text-muted: rgba(255, 255, 255, 0.62);
98
+ --gl-text-faint: rgba(255, 255, 255, 0.40);
99
+ --gl-text-on-glass: rgba(255, 255, 255, 0.94);
100
+ --gl-ring: 0 0 0 3px rgba(129, 140, 248, 0.50);
101
+ }
102
+ @media (prefers-color-scheme: dark) {
103
+ .gl-auto {
104
+ --gl-bg: rgba(24, 24, 32, 0.48);
105
+ --gl-bg-hover: rgba(38, 38, 50, 0.58);
106
+ --gl-bg-active: rgba(48, 48, 62, 0.64);
107
+ --gl-bg-subtle: rgba(255, 255, 255, 0.05);
108
+ --gl-border: rgba(255, 255, 255, 0.14);
109
+ --gl-border-strong: rgba(255, 255, 255, 0.26);
110
+ --gl-highlight: rgba(255, 255, 255, 0.16);
111
+ --gl-shadow: 0 8px 32px rgba(0, 0, 0, 0.50);
112
+ --gl-shadow-lg: 0 20px 60px rgba(0, 0, 0, 0.62);
113
+ --gl-primary: #818cf8;
114
+ --gl-primary-hover: #a5b0ff;
115
+ --gl-primary-soft: rgba(129, 140, 248, 0.20);
116
+ --gl-text: rgba(255, 255, 255, 0.94);
117
+ --gl-text-muted: rgba(255, 255, 255, 0.62);
118
+ --gl-text-faint: rgba(255, 255, 255, 0.40);
119
+ --gl-text-on-glass: rgba(255, 255, 255, 0.94);
120
+ --gl-ring: 0 0 0 3px rgba(129, 140, 248, 0.50);
121
+ }
122
+ }
123
+
124
+ /* src/styles/base.css */
125
+ .gl-glass {
126
+ position: relative;
127
+ background: var(--gl-bg);
128
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
129
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
130
+ border: 1px solid var(--gl-border);
131
+ border-radius: var(--gl-radius);
132
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
133
+ color: var(--gl-text-on-glass);
134
+ }
135
+ @supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
136
+ .gl-glass {
137
+ background: rgba(255, 255, 255, 0.85);
138
+ }
139
+ [data-theme=dark] .gl-glass,
140
+ .gl-dark .gl-glass {
141
+ background: rgba(28, 28, 36, 0.92);
142
+ }
143
+ }
144
+ [class^=gl-],
145
+ [class*=" gl-"] {
146
+ box-sizing: border-box;
147
+ }
148
+ .gl-focus-ring:focus-visible,
149
+ .gl-focusable:focus-visible {
150
+ outline: none;
151
+ box-shadow: var(--gl-ring);
152
+ }
153
+ .gl-sr-only {
154
+ position: absolute;
155
+ width: 1px;
156
+ height: 1px;
157
+ padding: 0;
158
+ margin: -1px;
159
+ overflow: hidden;
160
+ clip: rect(0, 0, 0, 0);
161
+ white-space: nowrap;
162
+ border: 0;
163
+ }
164
+ @keyframes gl-fade-in {
165
+ from {
166
+ opacity: 0;
167
+ }
168
+ to {
169
+ opacity: 1;
170
+ }
171
+ }
172
+ @keyframes gl-fade-out {
173
+ from {
174
+ opacity: 1;
175
+ }
176
+ to {
177
+ opacity: 0;
178
+ }
179
+ }
180
+ @keyframes gl-scale-in {
181
+ from {
182
+ opacity: 0;
183
+ transform: scale(0.94);
184
+ }
185
+ to {
186
+ opacity: 1;
187
+ transform: scale(1);
188
+ }
189
+ }
190
+ @keyframes gl-scale-out {
191
+ from {
192
+ opacity: 1;
193
+ transform: scale(1);
194
+ }
195
+ to {
196
+ opacity: 0;
197
+ transform: scale(0.94);
198
+ }
199
+ }
200
+ @keyframes gl-slide-up {
201
+ from {
202
+ opacity: 0;
203
+ transform: translate3d(0, 12px, 0);
204
+ }
205
+ to {
206
+ opacity: 1;
207
+ transform: translate3d(0, 0, 0);
208
+ }
209
+ }
210
+ @keyframes gl-slide-down {
211
+ from {
212
+ opacity: 0;
213
+ transform: translate3d(0, -12px, 0);
214
+ }
215
+ to {
216
+ opacity: 1;
217
+ transform: translate3d(0, 0, 0);
218
+ }
219
+ }
220
+ @keyframes gl-slide-in-right {
221
+ from {
222
+ transform: translate3d(100%, 0, 0);
223
+ }
224
+ to {
225
+ transform: translate3d(0, 0, 0);
226
+ }
227
+ }
228
+ @keyframes gl-slide-in-left {
229
+ from {
230
+ transform: translate3d(-100%, 0, 0);
231
+ }
232
+ to {
233
+ transform: translate3d(0, 0, 0);
234
+ }
235
+ }
236
+ @keyframes gl-slide-in-top {
237
+ from {
238
+ transform: translate3d(0, -100%, 0);
239
+ }
240
+ to {
241
+ transform: translate3d(0, 0, 0);
242
+ }
243
+ }
244
+ @keyframes gl-slide-in-bottom {
245
+ from {
246
+ transform: translate3d(0, 100%, 0);
247
+ }
248
+ to {
249
+ transform: translate3d(0, 0, 0);
250
+ }
251
+ }
252
+ @keyframes gl-spin {
253
+ to {
254
+ transform: rotate(360deg);
255
+ }
256
+ }
257
+ @keyframes gl-toast-in {
258
+ from {
259
+ opacity: 0;
260
+ transform: translate3d(0, 16px, 0) scale(0.96);
261
+ }
262
+ to {
263
+ opacity: 1;
264
+ transform: translate3d(0, 0, 0) scale(1);
265
+ }
266
+ }
267
+ @keyframes gl-indeterminate {
268
+ 0% {
269
+ transform: translateX(-100%);
270
+ }
271
+ 100% {
272
+ transform: translateX(250%);
273
+ }
274
+ }
275
+ @keyframes gl-shimmer {
276
+ 0% {
277
+ background-position: -200% 0;
278
+ }
279
+ 100% {
280
+ background-position: 200% 0;
281
+ }
282
+ }
283
+ @media (prefers-reduced-motion: reduce) {
284
+ [class^=gl-],
285
+ [class*=" gl-"] {
286
+ animation-duration: 0.01ms !important;
287
+ animation-iteration-count: 1 !important;
288
+ transition-duration: 0.01ms !important;
289
+ scroll-behavior: auto !important;
290
+ }
291
+ }
292
+
293
+ /* src/components/Accordion/Accordion.css */
294
+ .gl-accordion {
295
+ display: flex;
296
+ flex-direction: column;
297
+ overflow: hidden;
298
+ font-family: var(--gl-font);
299
+ font-size: var(--gl-fs);
300
+ color: var(--gl-text-on-glass);
301
+ background: var(--gl-bg);
302
+ border: 1px solid var(--gl-border);
303
+ border-radius: var(--gl-radius);
304
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
305
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
306
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
307
+ }
308
+ .gl-accordion__item + .gl-accordion__item {
309
+ border-top: 1px solid var(--gl-border);
310
+ }
311
+ .gl-accordion__item--disabled {
312
+ opacity: 0.55;
313
+ }
314
+ .gl-accordion__header {
315
+ margin: 0;
316
+ font-size: inherit;
317
+ font-weight: inherit;
318
+ line-height: inherit;
319
+ }
320
+ .gl-accordion__trigger {
321
+ display: flex;
322
+ align-items: center;
323
+ justify-content: space-between;
324
+ gap: var(--gl-space-3);
325
+ width: 100%;
326
+ margin: 0;
327
+ padding: var(--gl-space-4) var(--gl-space-5);
328
+ font-family: inherit;
329
+ font-size: var(--gl-fs);
330
+ font-weight: var(--gl-fw-bold);
331
+ line-height: var(--gl-lh);
332
+ text-align: left;
333
+ color: var(--gl-text-on-glass);
334
+ background: transparent;
335
+ border: 0;
336
+ cursor: pointer;
337
+ user-select: none;
338
+ transition: background-color var(--gl-dur) var(--gl-ease), color var(--gl-dur) var(--gl-ease);
339
+ }
340
+ .gl-accordion__trigger:hover {
341
+ background: var(--gl-bg-hover);
342
+ }
343
+ .gl-accordion__trigger:active {
344
+ background: var(--gl-bg-active);
345
+ }
346
+ .gl-accordion__trigger:focus-visible {
347
+ outline: none;
348
+ box-shadow: inset var(--gl-ring);
349
+ }
350
+ .gl-accordion__trigger:disabled {
351
+ cursor: not-allowed;
352
+ }
353
+ .gl-accordion__title {
354
+ flex: 1 1 auto;
355
+ min-width: 0;
356
+ }
357
+ .gl-accordion__chevron {
358
+ display: inline-flex;
359
+ flex: 0 0 auto;
360
+ align-items: center;
361
+ justify-content: center;
362
+ font-size: 1.15em;
363
+ color: var(--gl-text-muted);
364
+ transition: transform var(--gl-dur) var(--gl-ease);
365
+ will-change: transform;
366
+ }
367
+ .gl-accordion__trigger[aria-expanded=true] .gl-accordion__chevron {
368
+ transform: rotate(180deg);
369
+ }
370
+ .gl-accordion__panel {
371
+ display: grid;
372
+ grid-template-rows: 0fr;
373
+ transition: grid-template-rows var(--gl-dur) var(--gl-ease);
374
+ }
375
+ .gl-accordion__panel[data-state=open] {
376
+ grid-template-rows: 1fr;
377
+ }
378
+ .gl-accordion__content {
379
+ overflow: hidden;
380
+ min-height: 0;
381
+ visibility: hidden;
382
+ transition: visibility 0s linear var(--gl-dur);
383
+ }
384
+ .gl-accordion__panel[data-state=open] .gl-accordion__content {
385
+ visibility: visible;
386
+ transition-delay: 0s;
387
+ }
388
+ .gl-accordion__body {
389
+ padding: 0 var(--gl-space-5) var(--gl-space-5);
390
+ color: var(--gl-text-muted);
391
+ font-weight: var(--gl-fw);
392
+ line-height: var(--gl-lh);
393
+ }
394
+
395
+ /* src/components/Avatar/Avatar.css */
396
+ .gl-avatar {
397
+ --_avatar-size: 36px;
398
+ --_avatar-fs: var(--gl-fs-sm);
399
+ position: relative;
400
+ display: inline-flex;
401
+ flex: 0 0 auto;
402
+ align-items: center;
403
+ justify-content: center;
404
+ width: var(--_avatar-size);
405
+ height: var(--_avatar-size);
406
+ font-family: var(--gl-font);
407
+ font-size: var(--_avatar-fs);
408
+ font-weight: var(--gl-fw-bold);
409
+ line-height: 1;
410
+ letter-spacing: 0.02em;
411
+ vertical-align: middle;
412
+ user-select: none;
413
+ color: var(--gl-text-on-glass);
414
+ background: var(--gl-bg);
415
+ border: 1px solid var(--gl-border);
416
+ border-radius: var(--gl-radius-full);
417
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
418
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
419
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
420
+ }
421
+ .gl-avatar::after {
422
+ content: "";
423
+ position: absolute;
424
+ inset: 0;
425
+ z-index: 2;
426
+ padding: 1px;
427
+ border-radius: inherit;
428
+ background:
429
+ linear-gradient(
430
+ 180deg,
431
+ var(--gl-highlight),
432
+ transparent 60%);
433
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
434
+ -webkit-mask-composite: xor;
435
+ mask-composite: exclude;
436
+ opacity: 0.7;
437
+ pointer-events: none;
438
+ }
439
+ .gl-avatar--circle {
440
+ border-radius: var(--gl-radius-full);
441
+ }
442
+ .gl-avatar--square {
443
+ border-radius: var(--gl-radius);
444
+ }
445
+ .gl-avatar--sm {
446
+ --_avatar-size: 28px;
447
+ --_avatar-fs: var(--gl-fs-xs);
448
+ }
449
+ .gl-avatar--md {
450
+ --_avatar-size: 36px;
451
+ --_avatar-fs: var(--gl-fs-sm);
452
+ }
453
+ .gl-avatar--lg {
454
+ --_avatar-size: 48px;
455
+ --_avatar-fs: var(--gl-fs);
456
+ }
457
+ .gl-avatar--xl {
458
+ --_avatar-size: 64px;
459
+ --_avatar-fs: var(--gl-fs-lg);
460
+ }
461
+ .gl-avatar__img {
462
+ position: absolute;
463
+ inset: 0;
464
+ z-index: 1;
465
+ display: block;
466
+ width: 100%;
467
+ height: 100%;
468
+ border-radius: inherit;
469
+ object-fit: cover;
470
+ animation: gl-fade-in var(--gl-dur) var(--gl-ease);
471
+ }
472
+ .gl-avatar__initials {
473
+ display: inline-flex;
474
+ align-items: center;
475
+ justify-content: center;
476
+ text-transform: uppercase;
477
+ }
478
+ .gl-avatar__icon {
479
+ width: 62%;
480
+ height: 62%;
481
+ color: var(--gl-text-muted);
482
+ }
483
+ .gl-avatar__status {
484
+ position: absolute;
485
+ right: 6%;
486
+ bottom: 6%;
487
+ z-index: 3;
488
+ width: 28%;
489
+ height: 28%;
490
+ min-width: 8px;
491
+ min-height: 8px;
492
+ border: 2px solid var(--gl-border-strong);
493
+ border-radius: var(--gl-radius-full);
494
+ box-shadow: var(--gl-shadow);
495
+ animation: gl-scale-in var(--gl-dur) var(--gl-ease-spring);
496
+ }
497
+ .gl-avatar--square .gl-avatar__status {
498
+ right: -3px;
499
+ bottom: -3px;
500
+ }
501
+ .gl-avatar__status--online {
502
+ background: var(--gl-success);
503
+ }
504
+ .gl-avatar__status--offline {
505
+ background: var(--gl-text-faint);
506
+ }
507
+ .gl-avatar__status--busy {
508
+ background: var(--gl-danger);
509
+ }
510
+ .gl-avatar__status--away {
511
+ background: var(--gl-warning);
512
+ }
513
+
514
+ /* src/components/Badge/Badge.css */
515
+ .gl-badge {
516
+ --_badge-accent: var(--gl-text);
517
+ position: relative;
518
+ display: inline-flex;
519
+ align-items: center;
520
+ gap: var(--_badge-gap, var(--gl-space-2));
521
+ padding: var(--_badge-py, var(--gl-space-1)) var(--_badge-px, var(--gl-space-3));
522
+ font-family: var(--gl-font);
523
+ font-size: var(--_badge-fs, var(--gl-fs-sm));
524
+ font-weight: var(--gl-fw-bold);
525
+ line-height: 1;
526
+ white-space: nowrap;
527
+ vertical-align: middle;
528
+ border: 1px solid var(--gl-border);
529
+ border-radius: var(--gl-radius-sm);
530
+ color: var(--gl-text-on-glass);
531
+ }
532
+ .gl-badge--pill {
533
+ border-radius: var(--gl-radius-full);
534
+ }
535
+ .gl-badge--md {
536
+ --_badge-fs: var(--gl-fs-sm);
537
+ --_badge-px: var(--gl-space-3);
538
+ --_badge-py: var(--gl-space-1);
539
+ --_badge-gap: var(--gl-space-2);
540
+ }
541
+ .gl-badge--sm {
542
+ --_badge-fs: var(--gl-fs-xs);
543
+ --_badge-px: var(--gl-space-2);
544
+ --_badge-py: var(--gl-space-1);
545
+ --_badge-gap: var(--gl-space-1);
546
+ }
547
+ .gl-badge--glass {
548
+ background: var(--gl-bg);
549
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
550
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
551
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
552
+ }
553
+ .gl-badge--glass::before {
554
+ content: "";
555
+ position: absolute;
556
+ inset: 0;
557
+ border-radius: inherit;
558
+ padding: 1px;
559
+ background:
560
+ linear-gradient(
561
+ 180deg,
562
+ var(--gl-highlight),
563
+ transparent 60%);
564
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
565
+ -webkit-mask-composite: xor;
566
+ mask-composite: exclude;
567
+ opacity: 0.7;
568
+ pointer-events: none;
569
+ }
570
+ .gl-badge--primary,
571
+ .gl-badge--success,
572
+ .gl-badge--danger,
573
+ .gl-badge--warning,
574
+ .gl-badge--info {
575
+ color: var(--_badge-accent);
576
+ border-color: color-mix(in srgb, var(--_badge-accent) 40%, transparent);
577
+ }
578
+ .gl-badge--primary {
579
+ --_badge-accent: var(--gl-primary);
580
+ background: var(--gl-primary-soft);
581
+ }
582
+ .gl-badge--success {
583
+ --_badge-accent: var(--gl-success);
584
+ background: var(--gl-success-soft);
585
+ }
586
+ .gl-badge--danger {
587
+ --_badge-accent: var(--gl-danger);
588
+ background: var(--gl-danger-soft);
589
+ }
590
+ .gl-badge--warning {
591
+ --_badge-accent: var(--gl-warning);
592
+ background: var(--gl-warning-soft);
593
+ }
594
+ .gl-badge--info {
595
+ --_badge-accent: var(--gl-info);
596
+ background: var(--gl-info-soft);
597
+ }
598
+ .gl-badge__dot {
599
+ flex: none;
600
+ width: 0.5em;
601
+ height: 0.5em;
602
+ border-radius: var(--gl-radius-full);
603
+ background: var(--_badge-accent);
604
+ }
605
+ .gl-badge__label {
606
+ display: inline-flex;
607
+ align-items: center;
608
+ }
609
+
610
+ /* src/components/Button/Button.css */
611
+ .gl-btn {
612
+ --_btn-h: var(--gl-control-h-md);
613
+ --_btn-px: var(--gl-space-5);
614
+ --_btn-fs: var(--gl-fs);
615
+ position: relative;
616
+ display: inline-flex;
617
+ align-items: center;
618
+ justify-content: center;
619
+ gap: var(--gl-space-2);
620
+ height: var(--_btn-h);
621
+ padding: 0 var(--_btn-px);
622
+ font-family: var(--gl-font);
623
+ font-size: var(--_btn-fs);
624
+ font-weight: var(--gl-fw-bold);
625
+ line-height: 1;
626
+ white-space: nowrap;
627
+ text-decoration: none;
628
+ cursor: pointer;
629
+ user-select: none;
630
+ border: 1px solid var(--gl-border);
631
+ border-radius: var(--gl-radius);
632
+ color: var(--gl-text-on-glass);
633
+ background: var(--gl-bg);
634
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
635
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
636
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
637
+ transition:
638
+ transform var(--gl-dur-fast) var(--gl-ease),
639
+ background-color var(--gl-dur) var(--gl-ease),
640
+ border-color var(--gl-dur) var(--gl-ease),
641
+ box-shadow var(--gl-dur) var(--gl-ease),
642
+ opacity var(--gl-dur) var(--gl-ease);
643
+ will-change: transform;
644
+ }
645
+ .gl-btn::before {
646
+ content: "";
647
+ position: absolute;
648
+ inset: 0;
649
+ border-radius: inherit;
650
+ padding: 1px;
651
+ background:
652
+ linear-gradient(
653
+ 180deg,
654
+ var(--gl-highlight),
655
+ transparent 60%);
656
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
657
+ -webkit-mask-composite: xor;
658
+ mask-composite: exclude;
659
+ opacity: 0.7;
660
+ pointer-events: none;
661
+ }
662
+ .gl-btn:hover {
663
+ background: var(--gl-bg-hover);
664
+ transform: translateY(-1px);
665
+ box-shadow: var(--gl-shadow-lg), var(--gl-inner-glow);
666
+ }
667
+ .gl-btn:active {
668
+ transform: translateY(0) scale(0.97);
669
+ background: var(--gl-bg-active);
670
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
671
+ }
672
+ .gl-btn--sm {
673
+ --_btn-h: var(--gl-control-h-sm);
674
+ --_btn-px: var(--gl-space-4);
675
+ --_btn-fs: var(--gl-fs-sm);
676
+ border-radius: var(--gl-radius-sm);
677
+ }
678
+ .gl-btn--lg {
679
+ --_btn-h: var(--gl-control-h-lg);
680
+ --_btn-px: var(--gl-space-6);
681
+ --_btn-fs: var(--gl-fs-lg);
682
+ border-radius: var(--gl-radius-lg);
683
+ }
684
+ .gl-btn--primary {
685
+ background:
686
+ linear-gradient(
687
+ 180deg,
688
+ color-mix(in srgb, var(--gl-primary) 88%, white 12%),
689
+ var(--gl-primary));
690
+ border-color: color-mix(in srgb, var(--gl-primary) 70%, black 30%);
691
+ color: var(--gl-primary-contrast);
692
+ }
693
+ .gl-btn--primary:hover {
694
+ background:
695
+ linear-gradient(
696
+ 180deg,
697
+ color-mix(in srgb, var(--gl-primary) 80%, white 20%),
698
+ var(--gl-primary-hover));
699
+ }
700
+ .gl-btn--primary:active {
701
+ background: var(--gl-primary-hover);
702
+ }
703
+ .gl-btn--secondary {
704
+ background: var(--gl-bg-subtle);
705
+ color: var(--gl-text);
706
+ }
707
+ .gl-btn--ghost {
708
+ background: transparent;
709
+ border-color: transparent;
710
+ box-shadow: none;
711
+ -webkit-backdrop-filter: none;
712
+ backdrop-filter: none;
713
+ color: var(--gl-text);
714
+ }
715
+ .gl-btn--ghost::before {
716
+ display: none;
717
+ }
718
+ .gl-btn--ghost:hover {
719
+ background: var(--gl-bg-subtle);
720
+ box-shadow: none;
721
+ }
722
+ .gl-btn--ghost:active {
723
+ background: var(--gl-bg-hover);
724
+ box-shadow: none;
725
+ }
726
+ .gl-btn--danger {
727
+ background:
728
+ linear-gradient(
729
+ 180deg,
730
+ color-mix(in srgb, var(--gl-danger) 88%, white 12%),
731
+ var(--gl-danger));
732
+ border-color: color-mix(in srgb, var(--gl-danger) 70%, black 30%);
733
+ color: #fff;
734
+ }
735
+ .gl-btn:disabled,
736
+ .gl-btn[aria-disabled=true] {
737
+ opacity: 0.5;
738
+ cursor: not-allowed;
739
+ transform: none;
740
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
741
+ }
742
+ .gl-btn--block {
743
+ display: flex;
744
+ width: 100%;
745
+ }
746
+ .gl-btn--loading {
747
+ cursor: progress;
748
+ color: transparent !important;
749
+ }
750
+ .gl-btn--loading .gl-btn__label,
751
+ .gl-btn--loading .gl-btn__icon {
752
+ opacity: 0;
753
+ }
754
+ .gl-btn__label {
755
+ display: inline-flex;
756
+ align-items: center;
757
+ }
758
+ .gl-btn__icon {
759
+ display: inline-flex;
760
+ align-items: center;
761
+ justify-content: center;
762
+ font-size: 1.1em;
763
+ }
764
+ .gl-btn__spinner {
765
+ position: absolute;
766
+ top: 50%;
767
+ left: 50%;
768
+ width: 1.15em;
769
+ height: 1.15em;
770
+ margin: -0.575em 0 0 -0.575em;
771
+ border: 2px solid currentColor;
772
+ border-top-color: transparent;
773
+ border-radius: var(--gl-radius-full);
774
+ color: var(--gl-text);
775
+ animation: gl-spin 0.7s linear infinite;
776
+ }
777
+ .gl-btn--primary .gl-btn__spinner,
778
+ .gl-btn--danger .gl-btn__spinner {
779
+ color: #fff;
780
+ }
781
+
782
+ /* src/components/Card/Card.css */
783
+ .gl-card {
784
+ --_card-pad: var(--gl-space-6);
785
+ position: relative;
786
+ display: flex;
787
+ flex-direction: column;
788
+ min-width: 0;
789
+ color: var(--gl-text-on-glass);
790
+ border: 1px solid var(--gl-border);
791
+ border-radius: var(--gl-radius-lg);
792
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
793
+ transition:
794
+ transform var(--gl-dur) var(--gl-ease),
795
+ border-color var(--gl-dur) var(--gl-ease),
796
+ box-shadow var(--gl-dur) var(--gl-ease);
797
+ }
798
+ .gl-card::before {
799
+ content: "";
800
+ position: absolute;
801
+ inset: 0;
802
+ border-radius: inherit;
803
+ padding: 1px;
804
+ background:
805
+ linear-gradient(
806
+ 180deg,
807
+ var(--gl-highlight),
808
+ transparent 60%);
809
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
810
+ -webkit-mask-composite: xor;
811
+ mask-composite: exclude;
812
+ opacity: 0.7;
813
+ pointer-events: none;
814
+ }
815
+ .gl-card--glass {
816
+ background: var(--gl-bg);
817
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
818
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
819
+ }
820
+ .gl-card--solid {
821
+ background: var(--gl-bg-subtle);
822
+ -webkit-backdrop-filter: none;
823
+ backdrop-filter: none;
824
+ }
825
+ .gl-card--pad-none {
826
+ --_card-pad: 0px;
827
+ }
828
+ .gl-card--pad-sm {
829
+ --_card-pad: var(--gl-space-3);
830
+ }
831
+ .gl-card--pad-md {
832
+ --_card-pad: var(--gl-space-4);
833
+ }
834
+ .gl-card--pad-lg {
835
+ --_card-pad: var(--gl-space-6);
836
+ }
837
+ .gl-card--hoverable {
838
+ cursor: pointer;
839
+ will-change: transform;
840
+ }
841
+ .gl-card--hoverable:hover {
842
+ transform: translateY(-4px);
843
+ border-color: var(--gl-border-strong);
844
+ box-shadow: var(--gl-shadow-lg), var(--gl-inner-glow);
845
+ }
846
+ .gl-card__header,
847
+ .gl-card__body,
848
+ .gl-card__footer {
849
+ position: relative;
850
+ padding: var(--_card-pad);
851
+ }
852
+ .gl-card__header {
853
+ border-bottom: 1px solid var(--gl-border);
854
+ }
855
+ .gl-card__footer {
856
+ border-top: 1px solid var(--gl-border);
857
+ }
858
+ .gl-card__body {
859
+ flex: 1 1 auto;
860
+ min-height: 0;
861
+ }
862
+
863
+ /* src/components/Checkbox/Checkbox.css */
864
+ .gl-checkbox {
865
+ --_box: 20px;
866
+ --_accent: var(--gl-primary);
867
+ position: relative;
868
+ display: inline-flex;
869
+ align-items: center;
870
+ gap: var(--gl-space-2);
871
+ font-family: var(--gl-font);
872
+ font-size: var(--gl-fs);
873
+ font-weight: var(--gl-fw);
874
+ line-height: var(--gl-lh);
875
+ color: var(--gl-text);
876
+ cursor: pointer;
877
+ user-select: none;
878
+ }
879
+ .gl-checkbox--sm {
880
+ --_box: 16px;
881
+ font-size: var(--gl-fs-sm);
882
+ }
883
+ .gl-checkbox--lg {
884
+ --_box: 24px;
885
+ font-size: var(--gl-fs-lg);
886
+ }
887
+ .gl-checkbox__box {
888
+ position: relative;
889
+ flex: 0 0 auto;
890
+ display: inline-flex;
891
+ align-items: center;
892
+ justify-content: center;
893
+ width: var(--_box);
894
+ height: var(--_box);
895
+ color: var(--gl-primary-contrast);
896
+ background: var(--gl-bg-subtle);
897
+ border: 1px solid var(--gl-border);
898
+ border-radius: var(--gl-radius-sm);
899
+ box-shadow: var(--gl-inner-glow);
900
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
901
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
902
+ transition:
903
+ background-color var(--gl-dur) var(--gl-ease),
904
+ border-color var(--gl-dur) var(--gl-ease),
905
+ box-shadow var(--gl-dur) var(--gl-ease),
906
+ transform var(--gl-dur-fast) var(--gl-ease);
907
+ will-change: transform;
908
+ }
909
+ .gl-checkbox__box::before {
910
+ content: "";
911
+ position: absolute;
912
+ inset: 0;
913
+ border-radius: inherit;
914
+ padding: 1px;
915
+ background:
916
+ linear-gradient(
917
+ 180deg,
918
+ var(--gl-highlight),
919
+ transparent 60%);
920
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
921
+ -webkit-mask-composite: xor;
922
+ mask-composite: exclude;
923
+ opacity: 0.7;
924
+ pointer-events: none;
925
+ }
926
+ .gl-checkbox:hover .gl-checkbox__box {
927
+ border-color: var(--gl-border-strong);
928
+ background: var(--gl-bg);
929
+ }
930
+ .gl-checkbox:active .gl-checkbox__box {
931
+ transform: scale(0.92);
932
+ }
933
+ .gl-checkbox__check {
934
+ width: 72%;
935
+ height: 72%;
936
+ opacity: 0;
937
+ transform: scale(0.6);
938
+ transition: opacity var(--gl-dur-fast) var(--gl-ease), transform var(--gl-dur) var(--gl-ease-spring);
939
+ }
940
+ .gl-checkbox__dash {
941
+ position: absolute;
942
+ width: 56%;
943
+ height: 2px;
944
+ border-radius: var(--gl-radius-full);
945
+ background: currentColor;
946
+ opacity: 0;
947
+ transform: scaleX(0.4);
948
+ transition: opacity var(--gl-dur-fast) var(--gl-ease), transform var(--gl-dur) var(--gl-ease-spring);
949
+ }
950
+ .gl-checkbox__input:checked + .gl-checkbox__box {
951
+ background: var(--_accent);
952
+ border-color: var(--_accent);
953
+ }
954
+ .gl-checkbox__input:checked + .gl-checkbox__box .gl-checkbox__check {
955
+ opacity: 1;
956
+ transform: scale(1);
957
+ }
958
+ .gl-checkbox__input:indeterminate + .gl-checkbox__box {
959
+ background: var(--_accent);
960
+ border-color: var(--_accent);
961
+ }
962
+ .gl-checkbox__input:indeterminate + .gl-checkbox__box .gl-checkbox__check {
963
+ opacity: 0;
964
+ transform: scale(0.6);
965
+ }
966
+ .gl-checkbox__input:indeterminate + .gl-checkbox__box .gl-checkbox__dash {
967
+ opacity: 1;
968
+ transform: scaleX(1);
969
+ }
970
+ .gl-checkbox--error {
971
+ --_accent: var(--gl-danger);
972
+ }
973
+ .gl-checkbox--error .gl-checkbox__box {
974
+ border-color: var(--gl-danger);
975
+ }
976
+ .gl-checkbox--error .gl-checkbox__label {
977
+ color: var(--gl-danger);
978
+ }
979
+ .gl-checkbox__input:focus-visible + .gl-checkbox__box {
980
+ outline: none;
981
+ box-shadow: var(--gl-ring);
982
+ }
983
+ .gl-checkbox--disabled {
984
+ cursor: not-allowed;
985
+ opacity: 0.5;
986
+ }
987
+ .gl-checkbox--disabled .gl-checkbox__box {
988
+ transform: none;
989
+ }
990
+ .gl-checkbox__label {
991
+ display: inline-block;
992
+ }
993
+
994
+ /* src/components/Drawer/Drawer.css */
995
+ .gl-drawer {
996
+ position: fixed;
997
+ inset: 0;
998
+ z-index: var(--gl-z-drawer);
999
+ }
1000
+ .gl-drawer__backdrop {
1001
+ position: fixed;
1002
+ inset: 0;
1003
+ background: rgba(17, 24, 39, 0.45);
1004
+ -webkit-backdrop-filter: blur(2px);
1005
+ backdrop-filter: blur(2px);
1006
+ animation: gl-fade-in var(--gl-dur) var(--gl-ease) both;
1007
+ }
1008
+ .gl-drawer__panel {
1009
+ position: fixed;
1010
+ display: flex;
1011
+ flex-direction: column;
1012
+ max-width: 100%;
1013
+ max-height: 100%;
1014
+ overflow: hidden;
1015
+ font-family: var(--gl-font);
1016
+ font-size: var(--gl-fs);
1017
+ line-height: var(--gl-lh);
1018
+ color: var(--gl-text-on-glass);
1019
+ background: var(--gl-bg);
1020
+ border: 1px solid var(--gl-border);
1021
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1022
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1023
+ box-shadow: var(--gl-shadow-lg), var(--gl-inner-glow);
1024
+ outline: none;
1025
+ will-change: transform;
1026
+ animation-duration: var(--gl-dur);
1027
+ animation-timing-function: var(--gl-ease);
1028
+ animation-fill-mode: both;
1029
+ }
1030
+ @supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
1031
+ .gl-drawer__panel {
1032
+ background: rgba(255, 255, 255, 0.9);
1033
+ }
1034
+ [data-theme=dark] .gl-drawer__panel,
1035
+ .gl-dark .gl-drawer__panel {
1036
+ background: rgba(28, 28, 36, 0.94);
1037
+ }
1038
+ }
1039
+ .gl-drawer__panel--left,
1040
+ .gl-drawer__panel--right {
1041
+ top: 0;
1042
+ height: 100%;
1043
+ }
1044
+ .gl-drawer__panel--left {
1045
+ left: 0;
1046
+ border-top-right-radius: var(--gl-radius-lg);
1047
+ border-bottom-right-radius: var(--gl-radius-lg);
1048
+ animation-name: gl-slide-in-left;
1049
+ }
1050
+ .gl-drawer__panel--right {
1051
+ right: 0;
1052
+ border-top-left-radius: var(--gl-radius-lg);
1053
+ border-bottom-left-radius: var(--gl-radius-lg);
1054
+ animation-name: gl-slide-in-right;
1055
+ }
1056
+ .gl-drawer__panel--top,
1057
+ .gl-drawer__panel--bottom {
1058
+ left: 0;
1059
+ width: 100%;
1060
+ }
1061
+ .gl-drawer__panel--top {
1062
+ top: 0;
1063
+ border-bottom-left-radius: var(--gl-radius-lg);
1064
+ border-bottom-right-radius: var(--gl-radius-lg);
1065
+ animation-name: gl-slide-in-top;
1066
+ }
1067
+ .gl-drawer__panel--bottom {
1068
+ bottom: 0;
1069
+ border-top-left-radius: var(--gl-radius-lg);
1070
+ border-top-right-radius: var(--gl-radius-lg);
1071
+ animation-name: gl-slide-in-bottom;
1072
+ }
1073
+ .gl-drawer__header,
1074
+ .gl-drawer__footer {
1075
+ display: flex;
1076
+ flex: none;
1077
+ align-items: center;
1078
+ gap: var(--gl-space-4);
1079
+ }
1080
+ .gl-drawer__header {
1081
+ padding: var(--gl-space-5) var(--gl-space-6);
1082
+ border-bottom: 1px solid var(--gl-border);
1083
+ }
1084
+ .gl-drawer__title {
1085
+ margin: 0;
1086
+ font-size: var(--gl-fs-lg);
1087
+ font-weight: var(--gl-fw-bold);
1088
+ line-height: 1.25;
1089
+ color: var(--gl-text);
1090
+ }
1091
+ .gl-drawer__body {
1092
+ flex: 1 1 auto;
1093
+ min-height: 0;
1094
+ overflow-y: auto;
1095
+ padding: var(--gl-space-6);
1096
+ }
1097
+ .gl-drawer__footer {
1098
+ justify-content: flex-end;
1099
+ gap: var(--gl-space-3);
1100
+ padding: var(--gl-space-5) var(--gl-space-6);
1101
+ border-top: 1px solid var(--gl-border);
1102
+ }
1103
+ .gl-drawer__close {
1104
+ display: inline-flex;
1105
+ flex: none;
1106
+ align-items: center;
1107
+ justify-content: center;
1108
+ margin-inline-start: auto;
1109
+ width: var(--gl-control-h-sm);
1110
+ height: var(--gl-control-h-sm);
1111
+ padding: 0;
1112
+ cursor: pointer;
1113
+ color: var(--gl-text-muted);
1114
+ background: transparent;
1115
+ border: 1px solid transparent;
1116
+ border-radius: var(--gl-radius-full);
1117
+ transition:
1118
+ transform var(--gl-dur-fast) var(--gl-ease),
1119
+ color var(--gl-dur) var(--gl-ease),
1120
+ background-color var(--gl-dur) var(--gl-ease);
1121
+ }
1122
+ .gl-drawer__close:hover {
1123
+ color: var(--gl-text);
1124
+ background: var(--gl-bg-subtle);
1125
+ }
1126
+ .gl-drawer__close:active {
1127
+ transform: scale(0.94);
1128
+ }
1129
+
1130
+ /* src/components/Dropdown/Dropdown.css */
1131
+ .gl-dropdown {
1132
+ position: relative;
1133
+ display: inline-flex;
1134
+ }
1135
+ .gl-dropdown__trigger {
1136
+ position: relative;
1137
+ display: inline-flex;
1138
+ align-items: center;
1139
+ justify-content: center;
1140
+ gap: var(--gl-space-2);
1141
+ height: var(--gl-control-h-md);
1142
+ padding: 0 var(--gl-space-5);
1143
+ font-family: var(--gl-font);
1144
+ font-size: var(--gl-fs);
1145
+ font-weight: var(--gl-fw-bold);
1146
+ line-height: 1;
1147
+ white-space: nowrap;
1148
+ cursor: pointer;
1149
+ user-select: none;
1150
+ color: var(--gl-text-on-glass);
1151
+ border: 1px solid var(--gl-border);
1152
+ border-radius: var(--gl-radius);
1153
+ background: var(--gl-bg);
1154
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1155
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1156
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
1157
+ transition:
1158
+ transform var(--gl-dur-fast) var(--gl-ease),
1159
+ background-color var(--gl-dur) var(--gl-ease),
1160
+ border-color var(--gl-dur) var(--gl-ease),
1161
+ box-shadow var(--gl-dur) var(--gl-ease);
1162
+ will-change: transform;
1163
+ }
1164
+ .gl-dropdown__trigger::before {
1165
+ content: "";
1166
+ position: absolute;
1167
+ inset: 0;
1168
+ border-radius: inherit;
1169
+ padding: 1px;
1170
+ background:
1171
+ linear-gradient(
1172
+ 180deg,
1173
+ var(--gl-highlight),
1174
+ transparent 60%);
1175
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1176
+ -webkit-mask-composite: xor;
1177
+ mask-composite: exclude;
1178
+ opacity: 0.7;
1179
+ pointer-events: none;
1180
+ }
1181
+ .gl-dropdown__trigger:hover {
1182
+ background: var(--gl-bg-hover);
1183
+ transform: translateY(-1px);
1184
+ box-shadow: var(--gl-shadow-lg), var(--gl-inner-glow);
1185
+ }
1186
+ .gl-dropdown__trigger:active {
1187
+ transform: translateY(0) scale(0.97);
1188
+ background: var(--gl-bg-active);
1189
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
1190
+ }
1191
+ .gl-dropdown__trigger[aria-expanded=true] {
1192
+ background: var(--gl-bg-hover);
1193
+ }
1194
+ .gl-dropdown__trigger:disabled {
1195
+ opacity: 0.5;
1196
+ cursor: not-allowed;
1197
+ transform: none;
1198
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
1199
+ }
1200
+ .gl-dropdown__menu {
1201
+ position: absolute;
1202
+ z-index: var(--gl-z-dropdown);
1203
+ min-width: 12rem;
1204
+ max-width: min(20rem, calc(100vw - var(--gl-space-4)));
1205
+ padding: var(--gl-space-2);
1206
+ display: flex;
1207
+ flex-direction: column;
1208
+ gap: 2px;
1209
+ color: var(--gl-text-on-glass);
1210
+ border: 1px solid var(--gl-border);
1211
+ border-radius: var(--gl-radius);
1212
+ background: var(--gl-bg);
1213
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1214
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1215
+ box-shadow: var(--gl-shadow-lg), var(--gl-inner-glow);
1216
+ outline: none;
1217
+ animation: gl-scale-in var(--gl-dur) var(--gl-ease);
1218
+ }
1219
+ .gl-dropdown__menu::before {
1220
+ content: "";
1221
+ position: absolute;
1222
+ inset: 0;
1223
+ border-radius: inherit;
1224
+ padding: 1px;
1225
+ background:
1226
+ linear-gradient(
1227
+ 180deg,
1228
+ var(--gl-highlight),
1229
+ transparent 60%);
1230
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1231
+ -webkit-mask-composite: xor;
1232
+ mask-composite: exclude;
1233
+ opacity: 0.6;
1234
+ pointer-events: none;
1235
+ }
1236
+ .gl-dropdown__menu--bottom-start {
1237
+ top: calc(100% + var(--gl-space-2));
1238
+ left: 0;
1239
+ transform-origin: top left;
1240
+ }
1241
+ .gl-dropdown__menu--bottom-end {
1242
+ top: calc(100% + var(--gl-space-2));
1243
+ right: 0;
1244
+ transform-origin: top right;
1245
+ }
1246
+ .gl-dropdown__menu--top-start {
1247
+ bottom: calc(100% + var(--gl-space-2));
1248
+ left: 0;
1249
+ transform-origin: bottom left;
1250
+ }
1251
+ .gl-dropdown__menu--top-end {
1252
+ bottom: calc(100% + var(--gl-space-2));
1253
+ right: 0;
1254
+ transform-origin: bottom right;
1255
+ }
1256
+ .gl-dropdown__item {
1257
+ position: relative;
1258
+ display: flex;
1259
+ align-items: center;
1260
+ gap: var(--gl-space-3);
1261
+ width: 100%;
1262
+ padding: var(--gl-space-2) var(--gl-space-3);
1263
+ font-family: var(--gl-font);
1264
+ font-size: var(--gl-fs-sm);
1265
+ font-weight: var(--gl-fw);
1266
+ line-height: var(--gl-lh);
1267
+ text-align: left;
1268
+ white-space: nowrap;
1269
+ cursor: pointer;
1270
+ color: var(--gl-text);
1271
+ border: none;
1272
+ border-radius: var(--gl-radius-sm);
1273
+ background: transparent;
1274
+ transition:
1275
+ transform var(--gl-dur-fast) var(--gl-ease),
1276
+ background-color var(--gl-dur-fast) var(--gl-ease),
1277
+ color var(--gl-dur-fast) var(--gl-ease);
1278
+ will-change: transform;
1279
+ }
1280
+ .gl-dropdown__item:hover,
1281
+ .gl-dropdown__item:focus-visible {
1282
+ background: var(--gl-bg-hover);
1283
+ color: var(--gl-text);
1284
+ }
1285
+ .gl-dropdown__item:active {
1286
+ transform: scale(0.98);
1287
+ background: var(--gl-bg-active);
1288
+ }
1289
+ .gl-dropdown__item:disabled {
1290
+ opacity: 0.45;
1291
+ cursor: not-allowed;
1292
+ background: transparent;
1293
+ transform: none;
1294
+ }
1295
+ .gl-dropdown__item-icon {
1296
+ display: inline-flex;
1297
+ align-items: center;
1298
+ justify-content: center;
1299
+ flex: 0 0 auto;
1300
+ font-size: 1.1em;
1301
+ color: var(--gl-text-muted);
1302
+ }
1303
+ .gl-dropdown__item-label {
1304
+ flex: 1 1 auto;
1305
+ overflow: hidden;
1306
+ text-overflow: ellipsis;
1307
+ }
1308
+ .gl-dropdown__separator {
1309
+ height: 1px;
1310
+ margin: var(--gl-space-2) calc(-1 * var(--gl-space-1));
1311
+ background: var(--gl-border);
1312
+ border: none;
1313
+ }
1314
+ .gl-dropdown__label {
1315
+ padding: var(--gl-space-2) var(--gl-space-3) var(--gl-space-1);
1316
+ font-family: var(--gl-font);
1317
+ font-size: var(--gl-fs-xs);
1318
+ font-weight: var(--gl-fw-bold);
1319
+ letter-spacing: 0.04em;
1320
+ text-transform: uppercase;
1321
+ color: var(--gl-text-faint);
1322
+ user-select: none;
1323
+ }
1324
+
1325
+ /* src/components/Input/Input.css */
1326
+ .gl-input {
1327
+ --_input-h: var(--gl-control-h-md);
1328
+ --_input-px: var(--gl-space-4);
1329
+ --_input-fs: var(--gl-fs);
1330
+ --_input-radius: var(--gl-radius);
1331
+ position: relative;
1332
+ display: inline-flex;
1333
+ align-items: center;
1334
+ gap: var(--gl-space-2);
1335
+ height: var(--_input-h);
1336
+ padding: 0 var(--_input-px);
1337
+ font-family: var(--gl-font);
1338
+ border: 1px solid var(--gl-border);
1339
+ border-radius: var(--_input-radius);
1340
+ color: var(--gl-text-on-glass);
1341
+ background: var(--gl-bg-subtle);
1342
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1343
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1344
+ box-shadow: var(--gl-inner-glow);
1345
+ cursor: text;
1346
+ transition:
1347
+ border-color var(--gl-dur) var(--gl-ease),
1348
+ background-color var(--gl-dur) var(--gl-ease),
1349
+ box-shadow var(--gl-dur) var(--gl-ease);
1350
+ }
1351
+ .gl-input::before {
1352
+ content: "";
1353
+ position: absolute;
1354
+ inset: 0;
1355
+ border-radius: inherit;
1356
+ padding: 1px;
1357
+ background:
1358
+ linear-gradient(
1359
+ 180deg,
1360
+ var(--gl-highlight),
1361
+ transparent 60%);
1362
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1363
+ -webkit-mask-composite: xor;
1364
+ mask-composite: exclude;
1365
+ opacity: 0.6;
1366
+ pointer-events: none;
1367
+ }
1368
+ .gl-input:hover {
1369
+ border-color: var(--gl-border-strong);
1370
+ }
1371
+ .gl-input:focus-within {
1372
+ border-color: var(--gl-border-strong);
1373
+ box-shadow: var(--gl-ring), var(--gl-inner-glow);
1374
+ }
1375
+ .gl-input--subtle {
1376
+ background: var(--gl-bg-subtle);
1377
+ }
1378
+ .gl-input--glass {
1379
+ background: var(--gl-bg);
1380
+ border-color: var(--gl-border);
1381
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
1382
+ }
1383
+ .gl-input--glass:focus-within {
1384
+ box-shadow:
1385
+ var(--gl-ring),
1386
+ var(--gl-shadow),
1387
+ var(--gl-inner-glow);
1388
+ }
1389
+ .gl-input--md {
1390
+ --_input-h: var(--gl-control-h-md);
1391
+ --_input-px: var(--gl-space-4);
1392
+ --_input-fs: var(--gl-fs);
1393
+ --_input-radius: var(--gl-radius);
1394
+ }
1395
+ .gl-input--sm {
1396
+ --_input-h: var(--gl-control-h-sm);
1397
+ --_input-px: var(--gl-space-3);
1398
+ --_input-fs: var(--gl-fs-sm);
1399
+ --_input-radius: var(--gl-radius-sm);
1400
+ gap: var(--gl-space-1);
1401
+ }
1402
+ .gl-input--lg {
1403
+ --_input-h: var(--gl-control-h-lg);
1404
+ --_input-px: var(--gl-space-5);
1405
+ --_input-fs: var(--gl-fs-lg);
1406
+ --_input-radius: var(--gl-radius-lg);
1407
+ }
1408
+ .gl-input--error {
1409
+ border-color: var(--gl-danger);
1410
+ }
1411
+ .gl-input--error:hover {
1412
+ border-color: var(--gl-danger);
1413
+ }
1414
+ .gl-input--error:focus-within {
1415
+ border-color: var(--gl-danger);
1416
+ box-shadow: 0 0 0 3px var(--gl-danger-soft), var(--gl-inner-glow);
1417
+ }
1418
+ .gl-input--block {
1419
+ display: flex;
1420
+ width: 100%;
1421
+ }
1422
+ .gl-input--disabled {
1423
+ opacity: 0.5;
1424
+ cursor: not-allowed;
1425
+ }
1426
+ .gl-input--disabled .gl-input__field {
1427
+ cursor: not-allowed;
1428
+ }
1429
+ .gl-input__field {
1430
+ flex: 1 1 auto;
1431
+ min-width: 0;
1432
+ width: 100%;
1433
+ height: 100%;
1434
+ margin: 0;
1435
+ padding: 0;
1436
+ border: none;
1437
+ outline: none;
1438
+ background: transparent;
1439
+ color: inherit;
1440
+ font-family: inherit;
1441
+ font-size: var(--_input-fs);
1442
+ font-weight: var(--gl-fw);
1443
+ line-height: var(--gl-lh);
1444
+ text-overflow: ellipsis;
1445
+ }
1446
+ .gl-input__field::placeholder {
1447
+ color: var(--gl-text-faint);
1448
+ opacity: 1;
1449
+ }
1450
+ .gl-input__field:disabled {
1451
+ cursor: not-allowed;
1452
+ }
1453
+ .gl-input__field::-webkit-outer-spin-button,
1454
+ .gl-input__field::-webkit-inner-spin-button {
1455
+ -webkit-appearance: none;
1456
+ margin: 0;
1457
+ }
1458
+ .gl-input__icon {
1459
+ display: inline-flex;
1460
+ align-items: center;
1461
+ justify-content: center;
1462
+ flex: 0 0 auto;
1463
+ color: var(--gl-text-muted);
1464
+ font-size: 1.1em;
1465
+ pointer-events: none;
1466
+ }
1467
+ .gl-input__icon--left {
1468
+ margin-inline-start: calc(-1 * var(--gl-space-1));
1469
+ }
1470
+ .gl-input__icon--right {
1471
+ margin-inline-end: calc(-1 * var(--gl-space-1));
1472
+ }
1473
+
1474
+ /* src/components/Modal/Modal.css */
1475
+ .gl-modal__backdrop {
1476
+ position: fixed;
1477
+ inset: 0;
1478
+ z-index: var(--gl-z-modal);
1479
+ display: flex;
1480
+ align-items: center;
1481
+ justify-content: center;
1482
+ padding: var(--gl-space-6);
1483
+ overflow-y: auto;
1484
+ background: rgba(17, 24, 39, 0.55);
1485
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1486
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1487
+ animation: gl-fade-in var(--gl-dur) var(--gl-ease);
1488
+ }
1489
+ .gl-modal__panel {
1490
+ position: relative;
1491
+ display: flex;
1492
+ flex-direction: column;
1493
+ width: 100%;
1494
+ max-height: calc(100vh - var(--gl-space-8) * 2);
1495
+ overflow: hidden;
1496
+ font-family: var(--gl-font);
1497
+ color: var(--gl-text-on-glass);
1498
+ background: var(--gl-bg);
1499
+ border: 1px solid var(--gl-border);
1500
+ border-radius: var(--gl-radius-lg);
1501
+ box-shadow: var(--gl-shadow-lg), var(--gl-inner-glow);
1502
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1503
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1504
+ outline: none;
1505
+ animation: gl-scale-in var(--gl-dur) var(--gl-ease);
1506
+ will-change: transform, opacity;
1507
+ }
1508
+ .gl-modal__panel::before {
1509
+ content: "";
1510
+ position: absolute;
1511
+ inset: 0;
1512
+ border-radius: inherit;
1513
+ padding: 1px;
1514
+ background:
1515
+ linear-gradient(
1516
+ 180deg,
1517
+ var(--gl-highlight),
1518
+ transparent 60%);
1519
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1520
+ -webkit-mask-composite: xor;
1521
+ mask-composite: exclude;
1522
+ opacity: 0.7;
1523
+ pointer-events: none;
1524
+ }
1525
+ .gl-modal__panel--sm {
1526
+ max-width: 380px;
1527
+ }
1528
+ .gl-modal__panel--md {
1529
+ max-width: 520px;
1530
+ }
1531
+ .gl-modal__panel--lg {
1532
+ max-width: 760px;
1533
+ }
1534
+ .gl-modal__panel--full {
1535
+ max-width: none;
1536
+ width: 100%;
1537
+ height: 100%;
1538
+ max-height: none;
1539
+ }
1540
+ .gl-modal__header {
1541
+ display: flex;
1542
+ align-items: center;
1543
+ gap: var(--gl-space-4);
1544
+ flex: none;
1545
+ padding: var(--gl-space-5) var(--gl-space-6);
1546
+ border-bottom: 1px solid var(--gl-border);
1547
+ }
1548
+ .gl-modal__title {
1549
+ margin: 0;
1550
+ font-family: var(--gl-font);
1551
+ font-size: var(--gl-fs-xl);
1552
+ font-weight: var(--gl-fw-bold);
1553
+ line-height: var(--gl-lh);
1554
+ color: var(--gl-text);
1555
+ }
1556
+ .gl-modal__close {
1557
+ display: inline-flex;
1558
+ align-items: center;
1559
+ justify-content: center;
1560
+ flex: none;
1561
+ margin-inline-start: auto;
1562
+ width: var(--gl-control-h-sm);
1563
+ height: var(--gl-control-h-sm);
1564
+ padding: 0;
1565
+ font-size: var(--gl-fs-lg);
1566
+ color: var(--gl-text-muted);
1567
+ cursor: pointer;
1568
+ background: transparent;
1569
+ border: 1px solid transparent;
1570
+ border-radius: var(--gl-radius-full);
1571
+ transition:
1572
+ transform var(--gl-dur-fast) var(--gl-ease),
1573
+ background-color var(--gl-dur) var(--gl-ease),
1574
+ color var(--gl-dur) var(--gl-ease);
1575
+ }
1576
+ .gl-modal__close:hover {
1577
+ color: var(--gl-text);
1578
+ background: var(--gl-bg-subtle);
1579
+ }
1580
+ .gl-modal__close:active {
1581
+ transform: scale(0.92);
1582
+ }
1583
+ .gl-modal__close svg {
1584
+ width: 1em;
1585
+ height: 1em;
1586
+ }
1587
+ .gl-modal__body {
1588
+ flex: 1 1 auto;
1589
+ min-height: 0;
1590
+ padding: var(--gl-space-6);
1591
+ overflow-y: auto;
1592
+ font-size: var(--gl-fs);
1593
+ line-height: var(--gl-lh);
1594
+ color: var(--gl-text);
1595
+ }
1596
+ .gl-modal__footer {
1597
+ display: flex;
1598
+ align-items: center;
1599
+ justify-content: flex-end;
1600
+ gap: var(--gl-space-3);
1601
+ flex: none;
1602
+ padding: var(--gl-space-5) var(--gl-space-6);
1603
+ border-top: 1px solid var(--gl-border);
1604
+ }
1605
+
1606
+ /* src/components/Progress/Progress.css */
1607
+ .gl-progress {
1608
+ --_track-h: 10px;
1609
+ --_fill: var(--gl-primary);
1610
+ display: flex;
1611
+ align-items: center;
1612
+ gap: var(--gl-space-3);
1613
+ width: 100%;
1614
+ font-family: var(--gl-font);
1615
+ }
1616
+ .gl-progress--sm {
1617
+ --_track-h: 6px;
1618
+ }
1619
+ .gl-progress--md {
1620
+ --_track-h: 10px;
1621
+ }
1622
+ .gl-progress--lg {
1623
+ --_track-h: 14px;
1624
+ }
1625
+ .gl-progress--primary {
1626
+ --_fill: var(--gl-primary);
1627
+ }
1628
+ .gl-progress--success {
1629
+ --_fill: var(--gl-success);
1630
+ }
1631
+ .gl-progress--danger {
1632
+ --_fill: var(--gl-danger);
1633
+ }
1634
+ .gl-progress--warning {
1635
+ --_fill: var(--gl-warning);
1636
+ }
1637
+ .gl-progress--info {
1638
+ --_fill: var(--gl-info);
1639
+ }
1640
+ .gl-progress__track {
1641
+ position: relative;
1642
+ flex: 1 1 auto;
1643
+ height: var(--_track-h);
1644
+ overflow: hidden;
1645
+ background: var(--gl-bg-subtle);
1646
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1647
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1648
+ border: 1px solid var(--gl-border);
1649
+ border-radius: var(--gl-radius-full);
1650
+ box-shadow: var(--gl-inner-glow);
1651
+ }
1652
+ .gl-progress__bar {
1653
+ position: absolute;
1654
+ inset: 0;
1655
+ transform-origin: left center;
1656
+ transform: scaleX(var(--gl-progress-value, 0));
1657
+ border-radius: inherit;
1658
+ background:
1659
+ linear-gradient(
1660
+ 90deg,
1661
+ color-mix(in srgb, var(--_fill) 82%, white 18%),
1662
+ var(--_fill));
1663
+ transition: transform var(--gl-dur) var(--gl-ease);
1664
+ will-change: transform;
1665
+ }
1666
+ .gl-progress__bar::after {
1667
+ content: "";
1668
+ position: absolute;
1669
+ inset: 0;
1670
+ border-radius: inherit;
1671
+ background:
1672
+ linear-gradient(
1673
+ 180deg,
1674
+ var(--gl-highlight),
1675
+ transparent 55%);
1676
+ opacity: 0.5;
1677
+ pointer-events: none;
1678
+ }
1679
+ .gl-progress__bar--indeterminate {
1680
+ right: auto;
1681
+ width: 40%;
1682
+ transform: none;
1683
+ transition: none;
1684
+ animation: gl-indeterminate 1.4s var(--gl-ease) infinite;
1685
+ }
1686
+ .gl-progress__label {
1687
+ flex: 0 0 auto;
1688
+ min-width: 3ch;
1689
+ font-size: var(--gl-fs-sm);
1690
+ font-weight: var(--gl-fw-bold);
1691
+ font-variant-numeric: tabular-nums;
1692
+ color: var(--gl-text-muted);
1693
+ text-align: right;
1694
+ }
1695
+ @media (prefers-reduced-motion: reduce) {
1696
+ .gl-progress__bar--indeterminate {
1697
+ left: 0;
1698
+ right: 0;
1699
+ width: auto;
1700
+ transform: none;
1701
+ opacity: 0.6;
1702
+ }
1703
+ }
1704
+
1705
+ /* src/components/Radio/Radio.css */
1706
+ .gl-radio-group {
1707
+ display: flex;
1708
+ gap: var(--gl-space-3);
1709
+ }
1710
+ .gl-radio-group--vertical {
1711
+ flex-direction: column;
1712
+ }
1713
+ .gl-radio-group--horizontal {
1714
+ flex-direction: row;
1715
+ flex-wrap: wrap;
1716
+ align-items: center;
1717
+ gap: var(--gl-space-5);
1718
+ }
1719
+ .gl-radio {
1720
+ --_radio-size: var(--gl-space-5);
1721
+ position: relative;
1722
+ display: inline-flex;
1723
+ align-items: center;
1724
+ gap: var(--gl-space-2);
1725
+ font-family: var(--gl-font);
1726
+ font-size: var(--gl-fs);
1727
+ font-weight: var(--gl-fw);
1728
+ line-height: var(--gl-lh);
1729
+ color: var(--gl-text);
1730
+ cursor: pointer;
1731
+ user-select: none;
1732
+ }
1733
+ .gl-radio__dot {
1734
+ position: relative;
1735
+ display: grid;
1736
+ place-items: center;
1737
+ flex: 0 0 auto;
1738
+ width: var(--_radio-size);
1739
+ height: var(--_radio-size);
1740
+ border: 1px solid var(--gl-border);
1741
+ border-radius: var(--gl-radius-full);
1742
+ background: var(--gl-bg);
1743
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1744
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1745
+ box-shadow: var(--gl-inner-glow);
1746
+ transition:
1747
+ transform var(--gl-dur-fast) var(--gl-ease),
1748
+ background-color var(--gl-dur) var(--gl-ease),
1749
+ border-color var(--gl-dur) var(--gl-ease),
1750
+ box-shadow var(--gl-dur) var(--gl-ease);
1751
+ will-change: transform;
1752
+ }
1753
+ .gl-radio__dot::before {
1754
+ content: "";
1755
+ position: absolute;
1756
+ inset: 0;
1757
+ border-radius: inherit;
1758
+ padding: 1px;
1759
+ background:
1760
+ linear-gradient(
1761
+ 180deg,
1762
+ var(--gl-highlight),
1763
+ transparent 60%);
1764
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
1765
+ -webkit-mask-composite: xor;
1766
+ mask-composite: exclude;
1767
+ opacity: 0.7;
1768
+ pointer-events: none;
1769
+ }
1770
+ .gl-radio__mark {
1771
+ width: 50%;
1772
+ height: 50%;
1773
+ border-radius: var(--gl-radius-full);
1774
+ background: var(--gl-primary);
1775
+ transform: scale(0);
1776
+ opacity: 0;
1777
+ transition: transform var(--gl-dur) var(--gl-ease-spring), opacity var(--gl-dur-fast) var(--gl-ease);
1778
+ will-change: transform;
1779
+ }
1780
+ .gl-radio__label {
1781
+ display: inline-flex;
1782
+ align-items: center;
1783
+ }
1784
+ .gl-radio:not(.gl-radio--disabled):hover .gl-radio__dot {
1785
+ background: var(--gl-bg-hover);
1786
+ border-color: var(--gl-border-strong);
1787
+ }
1788
+ .gl-radio:not(.gl-radio--disabled):active .gl-radio__dot {
1789
+ transform: scale(0.92);
1790
+ }
1791
+ .gl-radio--checked .gl-radio__dot {
1792
+ border-color: var(--gl-primary);
1793
+ background: var(--gl-primary-soft);
1794
+ }
1795
+ .gl-radio--checked .gl-radio__mark {
1796
+ transform: scale(1);
1797
+ opacity: 1;
1798
+ }
1799
+ .gl-radio__input:focus-visible ~ .gl-radio__dot {
1800
+ outline: none;
1801
+ box-shadow: var(--gl-inner-glow), var(--gl-ring);
1802
+ }
1803
+ .gl-radio--disabled {
1804
+ opacity: 0.5;
1805
+ cursor: not-allowed;
1806
+ }
1807
+
1808
+ /* src/components/Select/Select.css */
1809
+ .gl-select {
1810
+ --_sel-h: var(--gl-control-h-md);
1811
+ --_sel-px: var(--gl-space-4);
1812
+ --_sel-fs: var(--gl-fs);
1813
+ --_sel-radius: var(--gl-radius);
1814
+ position: relative;
1815
+ display: inline-flex;
1816
+ align-items: center;
1817
+ width: auto;
1818
+ max-width: 100%;
1819
+ font-family: var(--gl-font);
1820
+ vertical-align: middle;
1821
+ }
1822
+ .gl-select--block {
1823
+ display: flex;
1824
+ width: 100%;
1825
+ }
1826
+ .gl-select__field {
1827
+ appearance: none;
1828
+ -webkit-appearance: none;
1829
+ -moz-appearance: none;
1830
+ width: 100%;
1831
+ height: var(--_sel-h);
1832
+ margin: 0;
1833
+ padding: 0 calc(var(--_sel-px) + 1.5em) 0 var(--_sel-px);
1834
+ font-family: inherit;
1835
+ font-size: var(--_sel-fs);
1836
+ font-weight: var(--gl-fw);
1837
+ line-height: 1;
1838
+ color: var(--gl-text-on-glass);
1839
+ cursor: pointer;
1840
+ border: 1px solid var(--gl-border);
1841
+ border-radius: var(--_sel-radius);
1842
+ background: var(--gl-bg-subtle);
1843
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1844
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1845
+ box-shadow: var(--gl-inner-glow);
1846
+ transition:
1847
+ border-color var(--gl-dur) var(--gl-ease),
1848
+ background-color var(--gl-dur) var(--gl-ease),
1849
+ box-shadow var(--gl-dur) var(--gl-ease);
1850
+ }
1851
+ .gl-select__field:hover {
1852
+ background: var(--gl-bg);
1853
+ border-color: var(--gl-border-strong);
1854
+ }
1855
+ .gl-select__field:focus {
1856
+ outline: none;
1857
+ }
1858
+ .gl-select__chevron {
1859
+ position: absolute;
1860
+ top: 50%;
1861
+ right: var(--_sel-px);
1862
+ display: inline-flex;
1863
+ align-items: center;
1864
+ justify-content: center;
1865
+ color: var(--gl-text-muted);
1866
+ pointer-events: none;
1867
+ transform: translateY(-50%);
1868
+ transition: transform var(--gl-dur) var(--gl-ease), color var(--gl-dur) var(--gl-ease);
1869
+ }
1870
+ .gl-select__chevron svg {
1871
+ display: block;
1872
+ }
1873
+ .gl-select:focus-within .gl-select__field {
1874
+ border-color: var(--gl-border-strong);
1875
+ box-shadow: var(--gl-inner-glow), var(--gl-ring);
1876
+ }
1877
+ .gl-select:focus-within .gl-select__chevron {
1878
+ color: var(--gl-text);
1879
+ transform: translateY(-50%) scale(1.05);
1880
+ }
1881
+ .gl-select--md {
1882
+ --_sel-h: var(--gl-control-h-md);
1883
+ --_sel-px: var(--gl-space-4);
1884
+ --_sel-fs: var(--gl-fs);
1885
+ --_sel-radius: var(--gl-radius);
1886
+ }
1887
+ .gl-select--sm {
1888
+ --_sel-h: var(--gl-control-h-sm);
1889
+ --_sel-px: var(--gl-space-3);
1890
+ --_sel-fs: var(--gl-fs-sm);
1891
+ --_sel-radius: var(--gl-radius-sm);
1892
+ }
1893
+ .gl-select--lg {
1894
+ --_sel-h: var(--gl-control-h-lg);
1895
+ --_sel-px: var(--gl-space-5);
1896
+ --_sel-fs: var(--gl-fs-lg);
1897
+ --_sel-radius: var(--gl-radius-lg);
1898
+ }
1899
+ .gl-select--error .gl-select__field {
1900
+ border-color: var(--gl-danger);
1901
+ }
1902
+ .gl-select--error.gl-select:focus-within .gl-select__field {
1903
+ border-color: var(--gl-danger);
1904
+ box-shadow: var(--gl-inner-glow), 0 0 0 3px var(--gl-danger-soft);
1905
+ }
1906
+ .gl-select--disabled {
1907
+ opacity: 0.5;
1908
+ }
1909
+ .gl-select__field:disabled {
1910
+ cursor: not-allowed;
1911
+ }
1912
+
1913
+ /* src/components/Slider/Slider.css */
1914
+ .gl-slider {
1915
+ --gl-slider-fill: 0%;
1916
+ --_track-h: 6px;
1917
+ --_thumb: 20px;
1918
+ position: relative;
1919
+ display: inline-flex;
1920
+ align-items: center;
1921
+ width: 100%;
1922
+ min-width: 140px;
1923
+ height: var(--gl-control-h-md);
1924
+ font-family: var(--gl-font);
1925
+ }
1926
+ .gl-slider--show-value {
1927
+ margin-top: var(--gl-space-8);
1928
+ }
1929
+ .gl-slider__input {
1930
+ -webkit-appearance: none;
1931
+ appearance: none;
1932
+ width: 100%;
1933
+ height: var(--_thumb);
1934
+ margin: 0;
1935
+ padding: 0;
1936
+ background: transparent;
1937
+ cursor: pointer;
1938
+ border-radius: var(--gl-radius-full);
1939
+ }
1940
+ .gl-slider__input:focus {
1941
+ outline: none;
1942
+ }
1943
+ .gl-slider__input::-moz-focus-outer {
1944
+ border: 0;
1945
+ }
1946
+ .gl-slider__input::-webkit-slider-runnable-track {
1947
+ box-sizing: border-box;
1948
+ height: var(--_track-h);
1949
+ border-radius: var(--gl-radius-full);
1950
+ background:
1951
+ linear-gradient(
1952
+ to right,
1953
+ var(--gl-primary),
1954
+ var(--gl-primary) var(--gl-slider-fill),
1955
+ var(--gl-bg-subtle) var(--gl-slider-fill),
1956
+ var(--gl-bg-subtle));
1957
+ box-shadow: inset 0 0 0 1px var(--gl-border);
1958
+ }
1959
+ .gl-slider__input::-moz-range-track {
1960
+ box-sizing: border-box;
1961
+ height: var(--_track-h);
1962
+ border-radius: var(--gl-radius-full);
1963
+ background:
1964
+ linear-gradient(
1965
+ to right,
1966
+ var(--gl-primary),
1967
+ var(--gl-primary) var(--gl-slider-fill),
1968
+ var(--gl-bg-subtle) var(--gl-slider-fill),
1969
+ var(--gl-bg-subtle));
1970
+ box-shadow: inset 0 0 0 1px var(--gl-border);
1971
+ }
1972
+ .gl-slider__input::-webkit-slider-thumb {
1973
+ -webkit-appearance: none;
1974
+ appearance: none;
1975
+ box-sizing: border-box;
1976
+ width: var(--_thumb);
1977
+ height: var(--_thumb);
1978
+ margin-top: calc((var(--_track-h) - var(--_thumb)) / 2);
1979
+ border: 1px solid var(--gl-border-strong);
1980
+ border-radius: var(--gl-radius-full);
1981
+ background: var(--gl-bg);
1982
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1983
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1984
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
1985
+ cursor: grab;
1986
+ transition: transform var(--gl-dur-fast) var(--gl-ease), box-shadow var(--gl-dur) var(--gl-ease);
1987
+ will-change: transform;
1988
+ }
1989
+ .gl-slider__input::-moz-range-thumb {
1990
+ box-sizing: border-box;
1991
+ width: var(--_thumb);
1992
+ height: var(--_thumb);
1993
+ border: 1px solid var(--gl-border-strong);
1994
+ border-radius: var(--gl-radius-full);
1995
+ background: var(--gl-bg);
1996
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1997
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
1998
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
1999
+ cursor: grab;
2000
+ transition: transform var(--gl-dur-fast) var(--gl-ease), box-shadow var(--gl-dur) var(--gl-ease);
2001
+ will-change: transform;
2002
+ }
2003
+ .gl-slider__input:hover::-webkit-slider-thumb {
2004
+ transform: scale(1.12);
2005
+ }
2006
+ .gl-slider__input:active::-webkit-slider-thumb {
2007
+ transform: scale(1.04);
2008
+ cursor: grabbing;
2009
+ }
2010
+ .gl-slider__input:hover::-moz-range-thumb {
2011
+ transform: scale(1.12);
2012
+ }
2013
+ .gl-slider__input:active::-moz-range-thumb {
2014
+ transform: scale(1.04);
2015
+ cursor: grabbing;
2016
+ }
2017
+ .gl-slider__input:focus-visible::-webkit-slider-thumb {
2018
+ box-shadow:
2019
+ var(--gl-shadow),
2020
+ var(--gl-inner-glow),
2021
+ var(--gl-ring);
2022
+ }
2023
+ .gl-slider__input:focus-visible::-moz-range-thumb {
2024
+ box-shadow:
2025
+ var(--gl-shadow),
2026
+ var(--gl-inner-glow),
2027
+ var(--gl-ring);
2028
+ }
2029
+ .gl-slider__value {
2030
+ position: absolute;
2031
+ left: var(--gl-slider-fill);
2032
+ bottom: 50%;
2033
+ margin-bottom: calc(var(--_thumb) / 2 + var(--gl-space-2));
2034
+ transform: translateX(-50%);
2035
+ min-width: 2ch;
2036
+ padding: var(--gl-space-1) var(--gl-space-2);
2037
+ font-size: var(--gl-fs-xs);
2038
+ font-weight: var(--gl-fw-bold);
2039
+ line-height: 1;
2040
+ text-align: center;
2041
+ color: var(--gl-text-on-glass);
2042
+ background: var(--gl-bg);
2043
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2044
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2045
+ border: 1px solid var(--gl-border);
2046
+ border-radius: var(--gl-radius-sm);
2047
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
2048
+ pointer-events: none;
2049
+ white-space: nowrap;
2050
+ }
2051
+ .gl-slider--disabled {
2052
+ opacity: 0.5;
2053
+ }
2054
+ .gl-slider--disabled .gl-slider__input,
2055
+ .gl-slider--disabled .gl-slider__input::-webkit-slider-thumb {
2056
+ cursor: not-allowed;
2057
+ }
2058
+ .gl-slider--disabled .gl-slider__input::-moz-range-thumb {
2059
+ cursor: not-allowed;
2060
+ }
2061
+ @media (prefers-reduced-motion: reduce) {
2062
+ .gl-slider__input::-webkit-slider-thumb {
2063
+ transition-duration: 0.01ms;
2064
+ }
2065
+ .gl-slider__input::-moz-range-thumb {
2066
+ transition-duration: 0.01ms;
2067
+ }
2068
+ }
2069
+
2070
+ /* src/components/Spinner/Spinner.css */
2071
+ .gl-spinner {
2072
+ --_spinner-size: 1.5rem;
2073
+ --_spinner-bw: 2px;
2074
+ display: inline-flex;
2075
+ align-items: center;
2076
+ justify-content: center;
2077
+ width: var(--_spinner-size);
2078
+ height: var(--_spinner-size);
2079
+ color: inherit;
2080
+ vertical-align: middle;
2081
+ flex: none;
2082
+ }
2083
+ .gl-spinner__ring {
2084
+ width: 100%;
2085
+ height: 100%;
2086
+ border: var(--gl-spinner-bw, var(--_spinner-bw)) solid currentColor;
2087
+ border-top-color: transparent;
2088
+ border-radius: var(--gl-radius-full);
2089
+ opacity: 0.9;
2090
+ animation: gl-spin 0.7s linear infinite;
2091
+ will-change: transform;
2092
+ }
2093
+ .gl-spinner--sm {
2094
+ --_spinner-size: 1rem;
2095
+ --_spinner-bw: 2px;
2096
+ }
2097
+ .gl-spinner--md {
2098
+ --_spinner-size: 1.5rem;
2099
+ --_spinner-bw: 2px;
2100
+ }
2101
+ .gl-spinner--lg {
2102
+ --_spinner-size: 2.25rem;
2103
+ --_spinner-bw: 3px;
2104
+ }
2105
+ .gl-spinner--xl {
2106
+ --_spinner-size: 3rem;
2107
+ --_spinner-bw: 4px;
2108
+ }
2109
+
2110
+ /* src/components/Switch/Switch.css */
2111
+ .gl-switch {
2112
+ --_sw-w: 44px;
2113
+ --_sw-h: 26px;
2114
+ --_sw-pad: 3px;
2115
+ --_sw-thumb: calc(var(--_sw-h) - var(--_sw-pad) * 2);
2116
+ --_sw-travel: calc(var(--_sw-w) - var(--_sw-thumb) - var(--_sw-pad) * 2);
2117
+ display: inline-flex;
2118
+ align-items: center;
2119
+ gap: var(--gl-space-3);
2120
+ font-family: var(--gl-font);
2121
+ font-size: var(--gl-fs);
2122
+ font-weight: var(--gl-fw);
2123
+ line-height: var(--gl-lh);
2124
+ color: var(--gl-text);
2125
+ cursor: pointer;
2126
+ user-select: none;
2127
+ }
2128
+ .gl-switch--sm {
2129
+ --_sw-w: 34px;
2130
+ --_sw-h: 20px;
2131
+ font-size: var(--gl-fs-sm);
2132
+ }
2133
+ .gl-switch--md {
2134
+ --_sw-w: 44px;
2135
+ --_sw-h: 26px;
2136
+ font-size: var(--gl-fs);
2137
+ }
2138
+ .gl-switch--lg {
2139
+ --_sw-w: 54px;
2140
+ --_sw-h: 32px;
2141
+ font-size: var(--gl-fs-lg);
2142
+ }
2143
+ .gl-switch__track {
2144
+ position: relative;
2145
+ flex: none;
2146
+ width: var(--_sw-w);
2147
+ height: var(--_sw-h);
2148
+ border-radius: var(--gl-radius-full);
2149
+ background: var(--gl-bg-subtle);
2150
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2151
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2152
+ border: 1px solid var(--gl-border);
2153
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
2154
+ transition:
2155
+ background-color var(--gl-dur) var(--gl-ease),
2156
+ border-color var(--gl-dur) var(--gl-ease),
2157
+ box-shadow var(--gl-dur) var(--gl-ease);
2158
+ }
2159
+ .gl-switch__track::before {
2160
+ content: "";
2161
+ position: absolute;
2162
+ inset: 0;
2163
+ border-radius: inherit;
2164
+ padding: 1px;
2165
+ background:
2166
+ linear-gradient(
2167
+ 180deg,
2168
+ var(--gl-highlight),
2169
+ transparent 60%);
2170
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
2171
+ -webkit-mask-composite: xor;
2172
+ mask-composite: exclude;
2173
+ opacity: 0.7;
2174
+ pointer-events: none;
2175
+ }
2176
+ .gl-switch__thumb {
2177
+ position: absolute;
2178
+ top: var(--_sw-pad);
2179
+ left: var(--_sw-pad);
2180
+ width: var(--_sw-thumb);
2181
+ height: var(--_sw-thumb);
2182
+ border-radius: var(--gl-radius-full);
2183
+ background: var(--gl-primary-contrast);
2184
+ box-shadow: var(--gl-shadow);
2185
+ transform: translateX(0);
2186
+ transition: transform var(--gl-dur) var(--gl-ease-spring);
2187
+ will-change: transform;
2188
+ }
2189
+ .gl-switch:hover:not(.gl-switch--disabled) .gl-switch__track {
2190
+ background: var(--gl-bg-hover);
2191
+ }
2192
+ .gl-switch--checked .gl-switch__track {
2193
+ background: var(--gl-primary);
2194
+ border-color: color-mix(in srgb, var(--gl-primary) 70%, black 30%);
2195
+ }
2196
+ .gl-switch--checked:hover:not(.gl-switch--disabled) .gl-switch__track {
2197
+ background: var(--gl-primary-hover);
2198
+ }
2199
+ .gl-switch--checked .gl-switch__thumb {
2200
+ transform: translateX(var(--_sw-travel));
2201
+ }
2202
+ .gl-switch__input:focus-visible + .gl-switch__track {
2203
+ box-shadow:
2204
+ var(--gl-shadow),
2205
+ var(--gl-inner-glow),
2206
+ var(--gl-ring);
2207
+ }
2208
+ .gl-switch--disabled {
2209
+ cursor: not-allowed;
2210
+ opacity: 0.5;
2211
+ }
2212
+ .gl-switch__label {
2213
+ color: var(--gl-text);
2214
+ }
2215
+
2216
+ /* src/components/Tabs/Tabs.css */
2217
+ .gl-tabs {
2218
+ display: flex;
2219
+ flex-direction: column;
2220
+ gap: var(--gl-space-4);
2221
+ font-family: var(--gl-font);
2222
+ color: var(--gl-text);
2223
+ }
2224
+ .gl-tabs__list {
2225
+ position: relative;
2226
+ display: inline-flex;
2227
+ align-items: center;
2228
+ gap: var(--gl-space-1);
2229
+ align-self: flex-start;
2230
+ max-width: 100%;
2231
+ padding: var(--gl-space-1);
2232
+ border: 1px solid var(--gl-border);
2233
+ border-radius: var(--gl-radius-full);
2234
+ background: var(--gl-bg);
2235
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2236
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2237
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
2238
+ overflow-x: auto;
2239
+ scrollbar-width: none;
2240
+ }
2241
+ .gl-tabs__list::-webkit-scrollbar {
2242
+ display: none;
2243
+ }
2244
+ .gl-tabs__list::before {
2245
+ content: "";
2246
+ position: absolute;
2247
+ inset: 0;
2248
+ border-radius: inherit;
2249
+ padding: 1px;
2250
+ background:
2251
+ linear-gradient(
2252
+ 180deg,
2253
+ var(--gl-highlight),
2254
+ transparent 60%);
2255
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
2256
+ -webkit-mask-composite: xor;
2257
+ mask-composite: exclude;
2258
+ opacity: 0.7;
2259
+ pointer-events: none;
2260
+ }
2261
+ .gl-tabs__tab {
2262
+ position: relative;
2263
+ display: inline-flex;
2264
+ flex: 0 0 auto;
2265
+ align-items: center;
2266
+ justify-content: center;
2267
+ gap: var(--gl-space-2);
2268
+ height: var(--gl-control-h-sm);
2269
+ padding: 0 var(--gl-space-4);
2270
+ font-family: inherit;
2271
+ font-size: var(--gl-fs-sm);
2272
+ font-weight: var(--gl-fw-bold);
2273
+ line-height: 1;
2274
+ white-space: nowrap;
2275
+ color: var(--gl-text-muted);
2276
+ background: transparent;
2277
+ border: 0;
2278
+ border-radius: var(--gl-radius-full);
2279
+ cursor: pointer;
2280
+ user-select: none;
2281
+ transition:
2282
+ transform var(--gl-dur-fast) var(--gl-ease),
2283
+ color var(--gl-dur) var(--gl-ease),
2284
+ background-color var(--gl-dur) var(--gl-ease),
2285
+ box-shadow var(--gl-dur) var(--gl-ease);
2286
+ will-change: transform;
2287
+ }
2288
+ .gl-tabs__tab:hover {
2289
+ color: var(--gl-text);
2290
+ background: var(--gl-bg-subtle);
2291
+ }
2292
+ .gl-tabs__tab:active {
2293
+ transform: scale(0.97);
2294
+ }
2295
+ .gl-tabs__tab--active {
2296
+ color: var(--gl-text-on-glass);
2297
+ background: var(--gl-bg-hover);
2298
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
2299
+ }
2300
+ .gl-tabs__tab--active:hover {
2301
+ background: var(--gl-bg-active);
2302
+ }
2303
+ .gl-tabs__tab:disabled {
2304
+ opacity: 0.5;
2305
+ cursor: not-allowed;
2306
+ transform: none;
2307
+ }
2308
+ .gl-tabs__tab-label {
2309
+ display: inline-flex;
2310
+ align-items: center;
2311
+ }
2312
+ .gl-tabs__panel {
2313
+ font-family: var(--gl-font);
2314
+ font-size: var(--gl-fs);
2315
+ line-height: var(--gl-lh);
2316
+ color: var(--gl-text);
2317
+ outline: none;
2318
+ }
2319
+ .gl-tabs__panel:not([hidden]) {
2320
+ animation: gl-slide-up var(--gl-dur) var(--gl-ease);
2321
+ }
2322
+ .gl-tabs__panel:focus-visible {
2323
+ outline: none;
2324
+ border-radius: var(--gl-radius);
2325
+ box-shadow: var(--gl-ring);
2326
+ }
2327
+
2328
+ /* src/components/Textarea/Textarea.css */
2329
+ .gl-textarea {
2330
+ position: relative;
2331
+ display: inline-flex;
2332
+ flex-direction: column;
2333
+ min-width: 12rem;
2334
+ border: 1px solid var(--gl-border);
2335
+ border-radius: var(--gl-radius);
2336
+ background: var(--gl-bg-subtle);
2337
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2338
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2339
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
2340
+ color: var(--gl-text-on-glass);
2341
+ transition:
2342
+ border-color var(--gl-dur) var(--gl-ease),
2343
+ box-shadow var(--gl-dur) var(--gl-ease),
2344
+ background-color var(--gl-dur) var(--gl-ease);
2345
+ }
2346
+ .gl-textarea::before {
2347
+ content: "";
2348
+ position: absolute;
2349
+ inset: 0;
2350
+ border-radius: inherit;
2351
+ padding: 1px;
2352
+ background:
2353
+ linear-gradient(
2354
+ 180deg,
2355
+ var(--gl-highlight),
2356
+ transparent 60%);
2357
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
2358
+ -webkit-mask-composite: xor;
2359
+ mask-composite: exclude;
2360
+ opacity: 0.6;
2361
+ pointer-events: none;
2362
+ }
2363
+ .gl-textarea--glass {
2364
+ background: var(--gl-bg);
2365
+ }
2366
+ .gl-textarea--subtle {
2367
+ background: var(--gl-bg-subtle);
2368
+ }
2369
+ .gl-textarea:focus-within {
2370
+ border-color: var(--gl-border-strong);
2371
+ box-shadow:
2372
+ var(--gl-ring),
2373
+ var(--gl-shadow),
2374
+ var(--gl-inner-glow);
2375
+ }
2376
+ .gl-textarea--error {
2377
+ border-color: var(--gl-danger);
2378
+ }
2379
+ .gl-textarea--error:focus-within {
2380
+ border-color: var(--gl-danger);
2381
+ box-shadow:
2382
+ 0 0 0 3px color-mix(in srgb, var(--gl-danger) 40%, transparent),
2383
+ var(--gl-shadow),
2384
+ var(--gl-inner-glow);
2385
+ }
2386
+ .gl-textarea--full {
2387
+ display: flex;
2388
+ width: 100%;
2389
+ }
2390
+ .gl-textarea--disabled {
2391
+ opacity: 0.55;
2392
+ cursor: not-allowed;
2393
+ }
2394
+ .gl-textarea__field {
2395
+ width: 100%;
2396
+ flex: 1 1 auto;
2397
+ min-height: calc(var(--gl-fs) * var(--gl-lh) * 3);
2398
+ margin: 0;
2399
+ padding: var(--gl-space-3) var(--gl-space-4);
2400
+ font-family: var(--gl-font);
2401
+ font-size: var(--gl-fs);
2402
+ font-weight: var(--gl-fw);
2403
+ line-height: var(--gl-lh);
2404
+ color: inherit;
2405
+ background: transparent;
2406
+ border: 0;
2407
+ border-radius: inherit;
2408
+ outline: none;
2409
+ resize: vertical;
2410
+ -webkit-appearance: none;
2411
+ appearance: none;
2412
+ }
2413
+ .gl-textarea__field::placeholder {
2414
+ color: var(--gl-text-faint);
2415
+ }
2416
+ .gl-textarea__field:disabled {
2417
+ cursor: not-allowed;
2418
+ }
2419
+ .gl-textarea--auto .gl-textarea__field {
2420
+ resize: none;
2421
+ overflow: hidden;
2422
+ }
2423
+
2424
+ /* src/components/Toast/Toast.css */
2425
+ .gl-toast-viewport {
2426
+ position: fixed;
2427
+ z-index: var(--gl-z-toast);
2428
+ display: flex;
2429
+ flex-direction: column;
2430
+ gap: var(--gl-space-3);
2431
+ width: min(24rem, calc(100vw - (var(--gl-space-5) * 2)));
2432
+ pointer-events: none;
2433
+ }
2434
+ .gl-toast-viewport--top-right {
2435
+ top: var(--gl-space-5);
2436
+ right: var(--gl-space-5);
2437
+ flex-direction: column-reverse;
2438
+ }
2439
+ .gl-toast-viewport--top-left {
2440
+ top: var(--gl-space-5);
2441
+ left: var(--gl-space-5);
2442
+ flex-direction: column-reverse;
2443
+ }
2444
+ .gl-toast-viewport--bottom-right {
2445
+ bottom: var(--gl-space-5);
2446
+ right: var(--gl-space-5);
2447
+ }
2448
+ .gl-toast-viewport--bottom-left {
2449
+ bottom: var(--gl-space-5);
2450
+ left: var(--gl-space-5);
2451
+ }
2452
+ .gl-toast {
2453
+ --_toast-accent: var(--gl-border-strong);
2454
+ position: relative;
2455
+ display: flex;
2456
+ align-items: flex-start;
2457
+ gap: var(--gl-space-3);
2458
+ width: 100%;
2459
+ padding: var(--gl-space-4);
2460
+ overflow: hidden;
2461
+ pointer-events: auto;
2462
+ font-family: var(--gl-font);
2463
+ color: var(--gl-text-on-glass);
2464
+ background: var(--gl-bg);
2465
+ border: 1px solid var(--gl-border);
2466
+ border-radius: var(--gl-radius);
2467
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
2468
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2469
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2470
+ animation: gl-toast-in var(--gl-dur) var(--gl-ease);
2471
+ will-change: transform, opacity;
2472
+ }
2473
+ .gl-toast::before {
2474
+ content: "";
2475
+ position: absolute;
2476
+ inset: 0;
2477
+ border-radius: inherit;
2478
+ padding: 1px;
2479
+ background:
2480
+ linear-gradient(
2481
+ 180deg,
2482
+ var(--gl-highlight),
2483
+ transparent 60%);
2484
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
2485
+ -webkit-mask-composite: xor;
2486
+ mask-composite: exclude;
2487
+ opacity: 0.7;
2488
+ pointer-events: none;
2489
+ }
2490
+ @supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
2491
+ .gl-toast {
2492
+ background: rgba(255, 255, 255, 0.9);
2493
+ }
2494
+ [data-theme=dark] .gl-toast,
2495
+ .gl-dark .gl-toast {
2496
+ background: rgba(28, 28, 36, 0.94);
2497
+ }
2498
+ }
2499
+ .gl-toast--glass {
2500
+ --_toast-accent: var(--gl-border-strong);
2501
+ }
2502
+ .gl-toast--success {
2503
+ --_toast-accent: var(--gl-success);
2504
+ }
2505
+ .gl-toast--danger {
2506
+ --_toast-accent: var(--gl-danger);
2507
+ }
2508
+ .gl-toast--warning {
2509
+ --_toast-accent: var(--gl-warning);
2510
+ }
2511
+ .gl-toast--info {
2512
+ --_toast-accent: var(--gl-info);
2513
+ }
2514
+ .gl-toast__accent {
2515
+ position: absolute;
2516
+ top: 0;
2517
+ bottom: 0;
2518
+ left: 0;
2519
+ width: 4px;
2520
+ background: var(--_toast-accent);
2521
+ pointer-events: none;
2522
+ }
2523
+ .gl-toast__body {
2524
+ display: flex;
2525
+ flex: 1 1 auto;
2526
+ flex-direction: column;
2527
+ gap: var(--gl-space-1);
2528
+ min-width: 0;
2529
+ padding-left: var(--gl-space-1);
2530
+ }
2531
+ .gl-toast__title {
2532
+ font-size: var(--gl-fs);
2533
+ font-weight: var(--gl-fw-bold);
2534
+ line-height: var(--gl-lh);
2535
+ color: var(--gl-text);
2536
+ }
2537
+ .gl-toast__description {
2538
+ font-size: var(--gl-fs-sm);
2539
+ font-weight: var(--gl-fw);
2540
+ line-height: var(--gl-lh);
2541
+ color: var(--gl-text-muted);
2542
+ overflow-wrap: anywhere;
2543
+ }
2544
+ .gl-toast__close {
2545
+ flex: none;
2546
+ display: inline-flex;
2547
+ align-items: center;
2548
+ justify-content: center;
2549
+ width: 24px;
2550
+ height: 24px;
2551
+ margin: -2px -2px 0 0;
2552
+ padding: 0;
2553
+ color: var(--gl-text-muted);
2554
+ background: transparent;
2555
+ border: 0;
2556
+ border-radius: var(--gl-radius-sm);
2557
+ cursor: pointer;
2558
+ transition:
2559
+ transform var(--gl-dur-fast) var(--gl-ease),
2560
+ color var(--gl-dur-fast) var(--gl-ease),
2561
+ background-color var(--gl-dur-fast) var(--gl-ease);
2562
+ }
2563
+ .gl-toast__close:hover {
2564
+ color: var(--gl-text);
2565
+ background: var(--gl-bg-subtle);
2566
+ }
2567
+ .gl-toast__close:active {
2568
+ transform: scale(0.92);
2569
+ }
2570
+ .gl-toast__close-icon {
2571
+ width: 16px;
2572
+ height: 16px;
2573
+ }
2574
+
2575
+ /* src/components/Tooltip/Tooltip.css */
2576
+ .gl-tooltip-wrap {
2577
+ position: relative;
2578
+ display: inline-flex;
2579
+ }
2580
+ .gl-tooltip {
2581
+ position: absolute;
2582
+ z-index: var(--gl-z-tooltip);
2583
+ max-width: 240px;
2584
+ width: max-content;
2585
+ padding: var(--gl-space-2) var(--gl-space-3);
2586
+ font-family: var(--gl-font);
2587
+ font-size: var(--gl-fs-sm);
2588
+ font-weight: var(--gl-fw);
2589
+ line-height: var(--gl-lh);
2590
+ text-align: center;
2591
+ color: var(--gl-text-on-glass);
2592
+ background: var(--gl-bg);
2593
+ border: 1px solid var(--gl-border);
2594
+ border-radius: var(--gl-radius-sm);
2595
+ box-shadow: var(--gl-shadow), var(--gl-inner-glow);
2596
+ -webkit-backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2597
+ backdrop-filter: blur(var(--gl-blur)) saturate(var(--gl-saturate));
2598
+ pointer-events: none;
2599
+ animation-duration: var(--gl-dur);
2600
+ animation-timing-function: var(--gl-ease);
2601
+ animation-fill-mode: both;
2602
+ will-change: transform, opacity;
2603
+ }
2604
+ .gl-tooltip--top {
2605
+ bottom: calc(100% + var(--gl-space-2));
2606
+ left: 50%;
2607
+ transform: translateX(-50%) scale(1);
2608
+ transform-origin: bottom center;
2609
+ animation-name: gl-tooltip-in-x;
2610
+ }
2611
+ .gl-tooltip--bottom {
2612
+ top: calc(100% + var(--gl-space-2));
2613
+ left: 50%;
2614
+ transform: translateX(-50%) scale(1);
2615
+ transform-origin: top center;
2616
+ animation-name: gl-tooltip-in-x;
2617
+ }
2618
+ .gl-tooltip--left {
2619
+ right: calc(100% + var(--gl-space-2));
2620
+ top: 50%;
2621
+ transform: translateY(-50%) scale(1);
2622
+ transform-origin: center right;
2623
+ animation-name: gl-tooltip-in-y;
2624
+ }
2625
+ .gl-tooltip--right {
2626
+ left: calc(100% + var(--gl-space-2));
2627
+ top: 50%;
2628
+ transform: translateY(-50%) scale(1);
2629
+ transform-origin: center left;
2630
+ animation-name: gl-tooltip-in-y;
2631
+ }
2632
+ @keyframes gl-tooltip-in-x {
2633
+ from {
2634
+ opacity: 0;
2635
+ transform: translateX(-50%) scale(0.94);
2636
+ }
2637
+ to {
2638
+ opacity: 1;
2639
+ transform: translateX(-50%) scale(1);
2640
+ }
2641
+ }
2642
+ @keyframes gl-tooltip-in-y {
2643
+ from {
2644
+ opacity: 0;
2645
+ transform: translateY(-50%) scale(0.94);
2646
+ }
2647
+ to {
2648
+ opacity: 1;
2649
+ transform: translateY(-50%) scale(1);
2650
+ }
2651
+ }
2652
+ @supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
2653
+ .gl-tooltip {
2654
+ background: rgba(255, 255, 255, 0.9);
2655
+ }
2656
+ [data-theme=dark] .gl-tooltip,
2657
+ .gl-dark .gl-tooltip {
2658
+ background: rgba(28, 28, 36, 0.94);
2659
+ }
2660
+ }
2661
+
2662
+ /* src/styles/index.css */
2663
+ /*# sourceMappingURL=styles.css.map */