upload-motion 0.0.0-stage → 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,3417 @@
1
+ /* upload-motion | MIT */
2
+ @property --um-beam-angle {
3
+ syntax: '<angle>';
4
+ inherits: false;
5
+ initial-value: 0deg;
6
+ }
7
+ .um-root {
8
+ --um-accent: #5b5ef4;
9
+ --um-accent-2: #a855f7;
10
+ --um-bg: transparent;
11
+ --um-surface: #ffffff;
12
+ --um-surface-2: #f6f6fb;
13
+ --um-text: #15151f;
14
+ --um-muted: #6b6b80;
15
+ --um-border: #e5e5ef;
16
+ --um-success: #16a34a;
17
+ --um-danger: #e5484d;
18
+ --um-warning: #d97706;
19
+ --um-radius: 18px;
20
+ --um-gap: 12px;
21
+ --um-font: inherit;
22
+ --um-shadow: 0 1px 2px rgb(20 20 50 / 0.04), 0 12px 32px -12px rgb(20 20 50 / 0.16);
23
+ --um-zone-h: 220px;
24
+ --um-time: 1;
25
+ --um-intensity: 1;
26
+ --um-particles: 1;
27
+ --um-tint: color-mix(in oklab, var(--um-accent) 7%, var(--um-surface));
28
+ --um-tint-strong: color-mix(in oklab, var(--um-accent) 16%, var(--um-surface));
29
+ --um-accent-soft: color-mix(in oklab, var(--um-accent) 22%, transparent);
30
+ --um-gradient: linear-gradient(110deg, var(--um-accent), var(--um-accent-2));
31
+ --um-ease: cubic-bezier(0.22, 1, 0.36, 1);
32
+ --um-ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
33
+ --um-spring: linear(0, 0.009, 0.035 2.1%, 0.141, 0.281 6.7%, 0.723 12.9%, 0.938 16.7%, 1.017, 1.077, 1.121, 1.149 24.3%, 1.159, 1.163, 1.161, 1.154 29.9%, 1.129 32.8%, 1.051 39.6%, 1.017 43.1%, 0.991, 0.977 51%, 0.974 53.8%, 0.975 57.1%, 0.997 69.8%, 1.003 76.9%, 1.004 83.8%, 1);
34
+ --um-d-fast: calc(var(--um-time) * 180ms);
35
+ --um-d: calc(var(--um-time) * 360ms);
36
+ --um-d-slow: calc(var(--um-time) * 700ms);
37
+ position: relative;
38
+ font-family: var(--um-font);
39
+ color: var(--um-text);
40
+ background: var(--um-bg);
41
+ font-size: 14px;
42
+ line-height: 1.45;
43
+ -webkit-font-smoothing: antialiased;
44
+ box-sizing: border-box;
45
+ container-type: inline-size;
46
+ }
47
+ .um-root *,
48
+ .um-root *::before,
49
+ .um-root *::after {
50
+ box-sizing: border-box;
51
+ }
52
+ .um-root[data-um-density='compact'] {
53
+ --um-gap: 8px;
54
+ font-size: 13px;
55
+ }
56
+ .um-root[data-um-density='spacious'] {
57
+ --um-gap: 18px;
58
+ font-size: 15px;
59
+ }
60
+ .um-root[data-um-theme='dark'] {
61
+ --um-surface: #15151d;
62
+ --um-surface-2: #1c1c26;
63
+ --um-text: #f2f2f7;
64
+ --um-muted: #9a9ab0;
65
+ --um-border: #2a2a38;
66
+ --um-success: #34d399;
67
+ --um-danger: #ff6b70;
68
+ --um-accent: #7c7fff;
69
+ --um-accent-2: #c084fc;
70
+ --um-shadow: 0 1px 2px rgb(0 0 0 / 0.3), 0 16px 40px -16px rgb(0 0 0 / 0.6);
71
+ --um-tint: color-mix(in oklab, var(--um-accent) 12%, var(--um-surface));
72
+ --um-tint-strong: color-mix(in oklab, var(--um-accent) 24%, var(--um-surface));
73
+ color-scheme: dark;
74
+ }
75
+ @media (prefers-color-scheme: dark) {
76
+ .um-root[data-um-theme='system'] {
77
+ --um-surface: #15151d;
78
+ --um-surface-2: #1c1c26;
79
+ --um-text: #f2f2f7;
80
+ --um-muted: #9a9ab0;
81
+ --um-border: #2a2a38;
82
+ --um-success: #34d399;
83
+ --um-danger: #ff6b70;
84
+ --um-accent: #7c7fff;
85
+ --um-accent-2: #c084fc;
86
+ --um-shadow: 0 1px 2px rgb(0 0 0 / 0.3), 0 16px 40px -16px rgb(0 0 0 / 0.6);
87
+ --um-tint: color-mix(in oklab, var(--um-accent) 12%, var(--um-surface));
88
+ --um-tint-strong: color-mix(in oklab, var(--um-accent) 24%, var(--um-surface));
89
+ color-scheme: dark;
90
+ }
91
+ }
92
+ .um-root[data-um-motion='reduced'] *,
93
+ .um-root[data-um-motion='reduced'] *::before,
94
+ .um-root[data-um-motion='reduced'] *::after {
95
+ animation-duration: 1ms !important;
96
+ animation-delay: 0ms !important;
97
+ animation-iteration-count: 1 !important;
98
+ transition-duration: 1ms !important;
99
+ transition-delay: 0ms !important;
100
+ }
101
+ .um-root[data-um-motion='reduced'] .um-burst,
102
+ .um-root[data-um-motion='reduced'] .um-deco {
103
+ display: none !important;
104
+ }
105
+ .um-root :focus-visible {
106
+ outline: 2px solid var(--um-accent);
107
+ outline-offset: 2px;
108
+ }
109
+ .um-sr-only {
110
+ position: absolute !important;
111
+ width: 1px;
112
+ height: 1px;
113
+ padding: 0;
114
+ margin: -1px;
115
+ overflow: hidden;
116
+ clip: rect(0 0 0 0);
117
+ white-space: nowrap;
118
+ border: 0;
119
+ }
120
+ .um-btn {
121
+ appearance: none;
122
+ border: 0;
123
+ font: inherit;
124
+ font-weight: 600;
125
+ cursor: pointer;
126
+ border-radius: 999px;
127
+ padding: 0.6em 1.2em;
128
+ line-height: 1.2;
129
+ color: var(--um-text);
130
+ background: var(--um-surface-2);
131
+ transition: transform var(--um-d-fast) var(--um-ease), background var(--um-d-fast), opacity var(--um-d-fast), color var(--um-d-fast);
132
+ }
133
+ .um-btn:hover:not(:disabled) {
134
+ transform: translateY(-1px);
135
+ }
136
+ .um-btn:active:not(:disabled) {
137
+ transform: translateY(0) scale(0.97);
138
+ }
139
+ .um-btn:disabled {
140
+ cursor: not-allowed;
141
+ opacity: 0.55;
142
+ }
143
+ .um-btn--solid {
144
+ color: #fff;
145
+ background: var(--um-gradient);
146
+ box-shadow: 0 6px 18px -8px color-mix(in oklab, var(--um-accent) 70%, transparent);
147
+ }
148
+ .um-btn--solid:disabled {
149
+ color: var(--um-muted);
150
+ background: var(--um-surface-2);
151
+ box-shadow: none;
152
+ opacity: 1;
153
+ }
154
+ .um-btn--soft {
155
+ background: var(--um-tint-strong);
156
+ color: var(--um-accent);
157
+ }
158
+ .um-btn--link {
159
+ background: none;
160
+ padding: 0;
161
+ border-radius: 4px;
162
+ color: var(--um-accent);
163
+ text-decoration: underline;
164
+ text-decoration-thickness: 1px;
165
+ text-underline-offset: 3px;
166
+ font-weight: 500;
167
+ }
168
+ .um-btn--link:hover:not(:disabled) {
169
+ transform: none;
170
+ text-decoration-thickness: 2px;
171
+ }
172
+ .um-btn--icon {
173
+ width: 2.5em;
174
+ height: 2.5em;
175
+ padding: 0;
176
+ display: inline-grid;
177
+ place-items: center;
178
+ }
179
+ .um-icon-btn {
180
+ appearance: none;
181
+ border: 0;
182
+ width: 32px;
183
+ height: 32px;
184
+ border-radius: 999px;
185
+ display: inline-grid;
186
+ place-items: center;
187
+ color: var(--um-muted);
188
+ background: transparent;
189
+ cursor: pointer;
190
+ flex: none;
191
+ transition: background var(--um-d-fast), color var(--um-d-fast), transform var(--um-d-fast) var(--um-ease);
192
+ }
193
+ .um-icon-btn:hover {
194
+ background: var(--um-surface-2);
195
+ color: var(--um-text);
196
+ }
197
+ .um-icon-btn:active {
198
+ transform: scale(0.9);
199
+ }
200
+ .um-icon-btn[data-tone='accent'] {
201
+ color: var(--um-accent);
202
+ }
203
+ .um-icon-btn[data-tone='danger']:hover {
204
+ color: var(--um-danger);
205
+ background: color-mix(in oklab, var(--um-danger) 10%, transparent);
206
+ }
207
+ .um-icon-btn:active .um-retry-icon {
208
+ transform: rotate(-200deg);
209
+ transition: transform var(--um-d) var(--um-ease);
210
+ }
211
+ .um-start-btn {
212
+ position: relative;
213
+ overflow: hidden;
214
+ min-width: 9.5em;
215
+ isolation: isolate;
216
+ }
217
+ .um-start-btn__fill {
218
+ position: absolute;
219
+ inset: 0;
220
+ z-index: -1;
221
+ background: color-mix(in oklab, #fff 28%, transparent);
222
+ transform-origin: left;
223
+ transform: scaleX(0);
224
+ transition: transform var(--um-d) var(--um-ease);
225
+ }
226
+ .um-start-btn[data-state='uploading'] .um-start-btn__fill {
227
+ transform: scaleX(var(--um-p));
228
+ }
229
+ .um-start-btn[data-state='done'],
230
+ .um-start-btn[data-state='done']:disabled {
231
+ color: #fff;
232
+ background: var(--um-success);
233
+ box-shadow: none;
234
+ }
235
+ .um-zone {
236
+ position: relative;
237
+ min-height: var(--um-zone-h);
238
+ border-radius: var(--um-radius);
239
+ cursor: pointer;
240
+ -webkit-tap-highlight-color: transparent;
241
+ }
242
+ .um-zone[data-um-disabled='true'] {
243
+ cursor: not-allowed;
244
+ opacity: 0.6;
245
+ }
246
+ .um-zone__content {
247
+ display: grid;
248
+ justify-items: center;
249
+ align-content: center;
250
+ gap: 6px;
251
+ min-height: inherit;
252
+ padding: 24px;
253
+ text-align: center;
254
+ }
255
+ .um-zone__icon {
256
+ display: grid;
257
+ place-items: center;
258
+ width: 48px;
259
+ height: 48px;
260
+ border-radius: 14px;
261
+ color: var(--um-accent);
262
+ background: var(--um-tint-strong);
263
+ margin-bottom: 6px;
264
+ transition: transform var(--um-d) var(--um-spring);
265
+ }
266
+ .um-zone[data-um-drag='accept'] .um-zone__icon {
267
+ transform: translateY(-4px) scale(1.08);
268
+ }
269
+ .um-zone__title {
270
+ font-weight: 650;
271
+ font-size: 1.05em;
272
+ }
273
+ .um-hint {
274
+ color: var(--um-muted);
275
+ font-size: 0.86em;
276
+ }
277
+ .um-ficon {
278
+ --um-k: var(--um-muted);
279
+ position: relative;
280
+ display: inline-grid;
281
+ place-items: center;
282
+ width: calc(var(--um-ficon-size) * 0.82);
283
+ height: var(--um-ficon-size);
284
+ flex: none;
285
+ }
286
+ .um-ficon__paper {
287
+ position: absolute;
288
+ inset: 0;
289
+ display: grid;
290
+ place-items: center;
291
+ color: var(--um-k);
292
+ background: var(--um-surface);
293
+ border: 1.5px solid color-mix(in oklab, var(--um-k) 30%, var(--um-border));
294
+ border-radius: calc(var(--um-ficon-size) * 0.14);
295
+ clip-path: polygon(0 0, 68% 0, 100% 26%, 100% 100%, 0 100%);
296
+ }
297
+ .um-ficon__paper::after {
298
+ content: '';
299
+ position: absolute;
300
+ top: -1px;
301
+ right: -1px;
302
+ width: 34%;
303
+ height: 28%;
304
+ background: color-mix(in oklab, var(--um-k) 22%, var(--um-surface));
305
+ border-bottom-left-radius: 4px;
306
+ }
307
+ .um-ficon__badge {
308
+ position: absolute;
309
+ bottom: 12%;
310
+ left: -12%;
311
+ padding: 1px 4px;
312
+ border-radius: 4px;
313
+ font-size: max(8px, calc(var(--um-ficon-size) * 0.2));
314
+ font-weight: 800;
315
+ letter-spacing: 0.02em;
316
+ line-height: 1.3;
317
+ color: #fff;
318
+ background: var(--um-k);
319
+ box-shadow: 0 2px 6px -2px color-mix(in oklab, var(--um-k) 60%, transparent);
320
+ }
321
+ .um-ficon[data-kind='pdf'] { --um-k: #e5484d; }
322
+ .um-ficon[data-kind='document'] { --um-k: #3b82f6; }
323
+ .um-ficon[data-kind='spreadsheet'] { --um-k: #16a34a; }
324
+ .um-ficon[data-kind='presentation'] { --um-k: #f97316; }
325
+ .um-ficon[data-kind='image'] { --um-k: #8b5cf6; }
326
+ .um-ficon[data-kind='video'] { --um-k: #ec4899; }
327
+ .um-ficon[data-kind='audio'] { --um-k: #f59e0b; }
328
+ .um-ficon[data-kind='archive'] { --um-k: #a16207; }
329
+ .um-ficon[data-kind='code'] { --um-k: #0ea5e9; }
330
+ .um-ficon[data-kind='data'] { --um-k: #ca8a04; }
331
+ .um-ficon[data-kind='text'] { --um-k: #64748b; }
332
+ .um-thumb {
333
+ position: relative;
334
+ display: block;
335
+ width: var(--um-thumb-size);
336
+ height: var(--um-thumb-size);
337
+ border-radius: 10px;
338
+ overflow: hidden;
339
+ background: var(--um-surface-2);
340
+ flex: none;
341
+ }
342
+ .um-thumb img {
343
+ width: 100%;
344
+ height: 100%;
345
+ object-fit: cover;
346
+ display: block;
347
+ opacity: 0;
348
+ transform: scale(1.08);
349
+ transition: opacity var(--um-d) var(--um-ease), transform var(--um-d-slow) var(--um-ease);
350
+ }
351
+ .um-thumb[data-loaded] img {
352
+ opacity: 1;
353
+ transform: none;
354
+ }
355
+ .um-progress {
356
+ --um-pc: var(--um-accent);
357
+ position: relative;
358
+ display: block;
359
+ }
360
+ .um-progress[data-status='success'] { --um-pc: var(--um-success); }
361
+ .um-progress[data-status='error'] { --um-pc: var(--um-danger); }
362
+ .um-progress[data-status='paused'] { --um-pc: var(--um-warning); }
363
+ .um-progress--bar,
364
+ .um-progress--beam {
365
+ height: 4px;
366
+ border-radius: 999px;
367
+ overflow: hidden;
368
+ background: color-mix(in oklab, var(--um-pc) 14%, var(--um-surface-2));
369
+ }
370
+ .um-progress__fill {
371
+ position: absolute;
372
+ inset: 0;
373
+ border-radius: inherit;
374
+ background: var(--um-pc);
375
+ transform-origin: left center;
376
+ transform: scaleX(var(--um-p));
377
+ transition: transform var(--um-d) var(--um-ease), background var(--um-d);
378
+ }
379
+ .um-progress--bar[data-status='queued'] .um-progress__fill {
380
+ transform: scaleX(0.18);
381
+ animation: um-indeterminate calc(var(--um-time) * 1.3s) var(--um-ease-in-out) infinite;
382
+ }
383
+ @keyframes um-indeterminate {
384
+ 0% { translate: -100% 0; }
385
+ 100% { translate: 560% 0; }
386
+ }
387
+ .um-progress--beam {
388
+ height: 6px;
389
+ overflow: visible;
390
+ }
391
+ .um-progress--beam .um-progress__fill {
392
+ background: var(--um-gradient);
393
+ box-shadow: 0 0 12px color-mix(in oklab, var(--um-accent) 55%, transparent);
394
+ overflow: hidden;
395
+ }
396
+ .um-progress--beam .um-progress__fill::after {
397
+ content: '';
398
+ position: absolute;
399
+ inset: 0;
400
+ background: linear-gradient(90deg, transparent, rgb(255 255 255 / 0.75), transparent);
401
+ width: 30%;
402
+ animation: um-beam-sweep calc(var(--um-time) * 1.4s) linear infinite;
403
+ }
404
+ .um-progress--beam[data-status='success'] .um-progress__fill,
405
+ .um-progress--beam[data-status='error'] .um-progress__fill {
406
+ background: var(--um-pc);
407
+ }
408
+ .um-progress--beam:not([data-status='uploading']) .um-progress__fill::after {
409
+ animation: none;
410
+ opacity: 0;
411
+ }
412
+ @keyframes um-beam-sweep {
413
+ from { translate: -110% 0; }
414
+ to { translate: 380% 0; }
415
+ }
416
+ .um-progress--wave {
417
+ height: 12px;
418
+ }
419
+ .um-progress--wave::before {
420
+ content: '';
421
+ position: absolute;
422
+ left: 0;
423
+ right: 0;
424
+ top: 50%;
425
+ border-top: 1.5px dashed color-mix(in oklab, var(--um-pc) 25%, transparent);
426
+ }
427
+ .um-progress__wave-clip {
428
+ position: absolute;
429
+ inset: 0;
430
+ overflow: hidden;
431
+ clip-path: inset(0 calc((1 - var(--um-p)) * 100%) 0 0);
432
+ transition: clip-path var(--um-d) var(--um-ease);
433
+ }
434
+ .um-progress__wave {
435
+ width: 200%;
436
+ height: 100%;
437
+ stroke: var(--um-pc);
438
+ stroke-width: 1.6;
439
+ fill: none;
440
+ vector-effect: non-scaling-stroke;
441
+ animation: um-wave-travel calc(var(--um-time) * 1.6s) linear infinite;
442
+ transform-origin: center;
443
+ transition: transform var(--um-d-slow) var(--um-ease);
444
+ }
445
+ .um-progress__wave path {
446
+ vector-effect: non-scaling-stroke;
447
+ }
448
+ .um-progress--wave[data-status='success'] .um-progress__wave {
449
+ transform: scaleY(0.05);
450
+ animation-play-state: paused;
451
+ }
452
+ @keyframes um-wave-travel {
453
+ from { translate: 0 0; }
454
+ to { translate: -50% 0; }
455
+ }
456
+ .um-progress--ring {
457
+ display: inline-grid;
458
+ place-items: center;
459
+ flex: none;
460
+ }
461
+ .um-progress--ring svg {
462
+ transform: rotate(-90deg);
463
+ display: block;
464
+ }
465
+ .um-progress__track {
466
+ fill: none;
467
+ stroke: color-mix(in oklab, var(--um-pc) 16%, var(--um-surface-2));
468
+ }
469
+ .um-progress__arc {
470
+ fill: none;
471
+ stroke: var(--um-pc);
472
+ stroke-linecap: round;
473
+ transition: stroke-dashoffset var(--um-d) var(--um-ease), stroke var(--um-d);
474
+ }
475
+ .um-progress__label {
476
+ position: absolute;
477
+ font-size: 9px;
478
+ font-weight: 700;
479
+ font-variant-numeric: tabular-nums;
480
+ }
481
+ .um-check__circle {
482
+ fill: var(--um-success);
483
+ stroke: none;
484
+ transform-origin: center;
485
+ animation: um-pop var(--um-d) var(--um-spring) both;
486
+ }
487
+ .um-check__mark {
488
+ fill: none;
489
+ stroke: #fff;
490
+ stroke-width: 2.4;
491
+ stroke-linecap: round;
492
+ stroke-linejoin: round;
493
+ stroke-dasharray: 1;
494
+ stroke-dashoffset: 1;
495
+ animation: um-draw var(--um-d) var(--um-ease) calc(var(--um-time) * 120ms) forwards;
496
+ }
497
+ @keyframes um-draw {
498
+ to { stroke-dashoffset: 0; }
499
+ }
500
+ @keyframes um-pop {
501
+ from { transform: scale(0); }
502
+ to { transform: scale(1); }
503
+ }
504
+ .um-burst {
505
+ position: absolute;
506
+ left: 50%;
507
+ top: 50%;
508
+ width: 0;
509
+ height: 0;
510
+ pointer-events: none;
511
+ z-index: 3;
512
+ }
513
+ .um-burst__p {
514
+ position: absolute;
515
+ left: -3px;
516
+ top: -3px;
517
+ width: 6px;
518
+ height: 6px;
519
+ border-radius: 50%;
520
+ background: var(--c);
521
+ opacity: 0;
522
+ animation: um-burst calc(var(--um-time) * 760ms) cubic-bezier(0.15, 0.8, 0.3, 1) forwards;
523
+ }
524
+ .um-burst[data-shape='petal'] .um-burst__p {
525
+ width: 7px;
526
+ height: 14px;
527
+ border-radius: 50% 50% 50% 50% / 70% 70% 30% 30%;
528
+ left: -3.5px;
529
+ top: -7px;
530
+ }
531
+ .um-burst[data-shape='spark'] .um-burst__p {
532
+ width: 2px;
533
+ height: 12px;
534
+ border-radius: 2px;
535
+ left: -1px;
536
+ top: -6px;
537
+ }
538
+ @keyframes um-burst {
539
+ 0% { opacity: 1; transform: translate(0, 0) rotate(var(--r)) scale(0.2); }
540
+ 70% { opacity: 1; }
541
+ 100% { opacity: 0; transform: translate(var(--x), var(--y)) rotate(var(--r)) scale(var(--s)); }
542
+ }
543
+ .um-list {
544
+ list-style: none;
545
+ margin: 0;
546
+ padding: 0;
547
+ display: grid;
548
+ gap: calc(var(--um-gap) * 0.7);
549
+ }
550
+ .um-list[data-layout='grid'] {
551
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
552
+ }
553
+ .um-list__item {
554
+ min-width: 0;
555
+ animation: um-enter var(--um-d) var(--um-ease) both;
556
+ animation-delay: calc(min(var(--um-i, 0), 8) * 40ms * var(--um-time));
557
+ content-visibility: auto;
558
+ contain-intrinsic-size: auto 64px;
559
+ }
560
+ .um-list__item[data-exiting] {
561
+ animation: um-exit calc(var(--um-time) * 320ms) var(--um-ease) forwards;
562
+ pointer-events: none;
563
+ }
564
+ @keyframes um-enter {
565
+ from { opacity: 0; transform: translateY(10px) scale(0.98); }
566
+ to { opacity: 1; transform: none; }
567
+ }
568
+ @keyframes um-exit {
569
+ to { opacity: 0; transform: translateX(24px) scale(0.96); }
570
+ }
571
+ @keyframes um-shake {
572
+ 0%, 100% { transform: translateX(0); }
573
+ 20% { transform: translateX(calc(-6px * var(--um-intensity))); }
574
+ 40% { transform: translateX(calc(5px * var(--um-intensity))); }
575
+ 60% { transform: translateX(calc(-3px * var(--um-intensity))); }
576
+ 80% { transform: translateX(calc(2px * var(--um-intensity))); }
577
+ }
578
+ .um-card {
579
+ position: relative;
580
+ display: flex;
581
+ align-items: center;
582
+ gap: 12px;
583
+ padding: 10px 10px 10px 12px;
584
+ border-radius: calc(var(--um-radius) * 0.7);
585
+ background: var(--um-surface);
586
+ border: 1px solid var(--um-border);
587
+ transition: border-color var(--um-d), background var(--um-d), box-shadow var(--um-d);
588
+ }
589
+ .um-card[data-status='error'] {
590
+ border-color: color-mix(in oklab, var(--um-danger) 45%, var(--um-border));
591
+ background: color-mix(in oklab, var(--um-danger) 4%, var(--um-surface));
592
+ }
593
+ .um-card[data-status='success'] {
594
+ border-color: color-mix(in oklab, var(--um-success) 30%, var(--um-border));
595
+ }
596
+ .um-card[data-shake] {
597
+ animation: um-shake calc(var(--um-time) * 480ms) var(--um-ease);
598
+ }
599
+ .um-card[data-celebrate] {
600
+ box-shadow: 0 0 0 4px color-mix(in oklab, var(--um-success) 14%, transparent);
601
+ }
602
+ .um-card__media {
603
+ position: relative;
604
+ flex: none;
605
+ display: grid;
606
+ place-items: center;
607
+ min-width: 42px;
608
+ }
609
+ .um-card__check {
610
+ position: absolute;
611
+ right: -6px;
612
+ bottom: -4px;
613
+ filter: drop-shadow(0 2px 4px rgb(0 0 0 / 0.15));
614
+ }
615
+ .um-card__body {
616
+ flex: 1;
617
+ min-width: 0;
618
+ display: grid;
619
+ gap: 5px;
620
+ }
621
+ .um-card__row {
622
+ display: flex;
623
+ align-items: baseline;
624
+ gap: 8px;
625
+ min-width: 0;
626
+ }
627
+ .um-card__name {
628
+ flex: 1;
629
+ min-width: 0;
630
+ font-weight: 600;
631
+ white-space: nowrap;
632
+ overflow: hidden;
633
+ text-overflow: ellipsis;
634
+ }
635
+ .um-card__size {
636
+ flex: none;
637
+ color: var(--um-muted);
638
+ font-size: 0.85em;
639
+ font-variant-numeric: tabular-nums;
640
+ }
641
+ .um-card .um-progress--ring {
642
+ position: absolute;
643
+ left: 22px;
644
+ top: 50%;
645
+ translate: 0 -50%;
646
+ }
647
+ .um-card:has(.um-progress--ring) .um-card__media {
648
+ opacity: 0.15;
649
+ }
650
+ .um-card[data-status='success']:has(.um-progress--ring) .um-card__media,
651
+ .um-card[data-status='error']:has(.um-progress--ring) .um-card__media {
652
+ opacity: 1;
653
+ }
654
+ .um-card[data-status='success'] .um-progress--ring,
655
+ .um-card[data-status='error'] .um-progress--ring {
656
+ display: none;
657
+ }
658
+ .um-status {
659
+ display: flex;
660
+ align-items: center;
661
+ gap: 5px;
662
+ min-width: 0;
663
+ color: var(--um-muted);
664
+ font-size: 0.85em;
665
+ font-variant-numeric: tabular-nums;
666
+ }
667
+ .um-status__text {
668
+ white-space: nowrap;
669
+ overflow: hidden;
670
+ text-overflow: ellipsis;
671
+ }
672
+ .um-status[data-status='error'] {
673
+ color: var(--um-danger);
674
+ font-weight: 500;
675
+ }
676
+ .um-status[data-status='success'] {
677
+ color: var(--um-success);
678
+ }
679
+ .um-status svg {
680
+ flex: none;
681
+ }
682
+ .um-actions {
683
+ display: flex;
684
+ align-items: center;
685
+ gap: 2px;
686
+ flex: none;
687
+ }
688
+ .um-summary {
689
+ display: grid;
690
+ gap: 2px;
691
+ min-width: 0;
692
+ }
693
+ .um-summary__title {
694
+ font-weight: 650;
695
+ }
696
+ .um-summary__detail {
697
+ color: var(--um-muted);
698
+ font-size: 0.9em;
699
+ font-variant-numeric: tabular-nums;
700
+ }
701
+ .um-badge {
702
+ display: inline-flex;
703
+ align-items: center;
704
+ gap: 6px;
705
+ padding: 3px 9px 3px 7px;
706
+ border-radius: 999px;
707
+ font-size: 11px;
708
+ font-weight: 600;
709
+ letter-spacing: 0.01em;
710
+ color: var(--um-warning);
711
+ background: color-mix(in oklab, var(--um-warning) 12%, var(--um-surface));
712
+ border: 1px solid color-mix(in oklab, var(--um-warning) 25%, transparent);
713
+ white-space: nowrap;
714
+ }
715
+ .um-badge__dot {
716
+ width: 6px;
717
+ height: 6px;
718
+ border-radius: 50%;
719
+ background: currentColor;
720
+ animation: um-blink calc(var(--um-time) * 1.6s) ease-in-out infinite;
721
+ }
722
+ @keyframes um-blink {
723
+ 50% { opacity: 0.3; }
724
+ }
725
+ .um-rejections {
726
+ margin-top: var(--um-gap);
727
+ }
728
+ .um-rejection {
729
+ display: flex;
730
+ align-items: center;
731
+ gap: 10px;
732
+ padding: 8px 6px 8px 12px;
733
+ border-radius: 12px;
734
+ color: var(--um-danger);
735
+ background: color-mix(in oklab, var(--um-danger) 8%, var(--um-surface));
736
+ border: 1px solid color-mix(in oklab, var(--um-danger) 22%, transparent);
737
+ font-size: 0.88em;
738
+ }
739
+ .um-rejection__text {
740
+ flex: 1;
741
+ color: var(--um-text);
742
+ }
743
+ .um-rejection svg {
744
+ flex: none;
745
+ }
746
+ .um-panel {
747
+ background: var(--um-surface);
748
+ border: 1px solid var(--um-border);
749
+ border-radius: calc(var(--um-radius) * 1.2);
750
+ box-shadow: var(--um-shadow);
751
+ padding: calc(var(--um-gap) * 1.6);
752
+ }
753
+ .um-panel__header {
754
+ display: flex;
755
+ align-items: flex-start;
756
+ justify-content: space-between;
757
+ gap: 12px;
758
+ margin-bottom: calc(var(--um-gap) * 1.3);
759
+ }
760
+ .um-panel__title {
761
+ margin: 0;
762
+ font-size: 1.25em;
763
+ font-weight: 750;
764
+ letter-spacing: -0.01em;
765
+ }
766
+ .um-panel__desc {
767
+ margin: 2px 0 0;
768
+ color: var(--um-muted);
769
+ font-size: 0.9em;
770
+ }
771
+ .um-queue {
772
+ margin-top: var(--um-gap);
773
+ }
774
+ .um-footer-row {
775
+ display: flex;
776
+ align-items: center;
777
+ justify-content: space-between;
778
+ gap: 12px;
779
+ margin-top: var(--um-gap);
780
+ flex-wrap: wrap;
781
+ }
782
+ @container (max-width: 380px) {
783
+ .um-panel {
784
+ padding: var(--um-gap);
785
+ }
786
+ .um-card {
787
+ gap: 8px;
788
+ padding: 8px;
789
+ }
790
+ }
791
+ .um-beam {
792
+ display: grid;
793
+ gap: var(--um-gap);
794
+ }
795
+ .um-beam__zone {
796
+ --um-zone-h: 230px;
797
+ --um-beam-speed: 4s;
798
+ isolation: isolate;
799
+ overflow: hidden;
800
+ background:
801
+ radial-gradient(ellipse at 50% 0%, color-mix(in oklab, var(--um-accent) 14%, transparent), transparent 70%),
802
+ var(--um-surface);
803
+ border-radius: var(--um-radius);
804
+ }
805
+ .um-beam[data-mode='active'] .um-beam__zone {
806
+ --um-beam-speed: 2.4s;
807
+ }
808
+ .um-beam[data-mode='accept'] .um-beam__zone {
809
+ --um-beam-speed: 0.9s;
810
+ }
811
+ .um-beam__border {
812
+ position: absolute;
813
+ inset: 0;
814
+ z-index: -1;
815
+ border-radius: inherit;
816
+ padding: 1.5px;
817
+ background:
818
+ conic-gradient(from var(--um-beam-angle), transparent 0deg 250deg, var(--um-accent) 300deg, var(--um-accent-2) 340deg, transparent 360deg),
819
+ linear-gradient(var(--um-border), var(--um-border));
820
+ -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
821
+ -webkit-mask-composite: xor;
822
+ mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
823
+ animation: um-beam-rotate calc(var(--um-time) * var(--um-beam-speed)) linear infinite;
824
+ }
825
+ .um-beam[data-mode='accept'] .um-beam__border {
826
+ background:
827
+ conic-gradient(from var(--um-beam-angle), var(--um-accent-2) 0deg, transparent 70deg 110deg, var(--um-accent) 180deg, transparent 250deg 290deg, var(--um-accent-2) 360deg),
828
+ linear-gradient(var(--um-border), var(--um-border));
829
+ padding: 2px;
830
+ }
831
+ .um-beam[data-mode='reject'] .um-beam__border {
832
+ background: linear-gradient(var(--um-danger), var(--um-danger));
833
+ animation: none;
834
+ }
835
+ @keyframes um-beam-rotate {
836
+ to { --um-beam-angle: 360deg; }
837
+ }
838
+ .um-beam__grid {
839
+ position: absolute;
840
+ inset: 0;
841
+ z-index: -1;
842
+ background-image:
843
+ linear-gradient(color-mix(in oklab, var(--um-text) 5%, transparent) 1px, transparent 1px),
844
+ linear-gradient(90deg, color-mix(in oklab, var(--um-text) 5%, transparent) 1px, transparent 1px);
845
+ background-size: 28px 28px;
846
+ -webkit-mask-image: radial-gradient(ellipse at 50% 40%, #000 20%, transparent 70%);
847
+ mask-image: radial-gradient(ellipse at 50% 40%, #000 20%, transparent 70%);
848
+ }
849
+ .um-beam__content {
850
+ display: grid;
851
+ justify-items: center;
852
+ align-content: center;
853
+ gap: 8px;
854
+ min-height: inherit;
855
+ padding: 28px;
856
+ text-align: center;
857
+ }
858
+ .um-beam__icon {
859
+ display: grid;
860
+ place-items: center;
861
+ width: 56px;
862
+ height: 56px;
863
+ margin-bottom: 6px;
864
+ border-radius: 16px;
865
+ color: var(--um-accent);
866
+ background: var(--um-surface-2);
867
+ border: 1px solid var(--um-border);
868
+ box-shadow: 0 0 0 6px color-mix(in oklab, var(--um-accent) 6%, transparent), 0 0 40px -8px var(--um-accent);
869
+ transition: transform var(--um-d) var(--um-spring), box-shadow var(--um-d);
870
+ }
871
+ .um-beam[data-mode='accept'] .um-beam__icon {
872
+ transform: translateY(-6px) scale(1.06);
873
+ box-shadow: 0 0 0 8px var(--um-accent-soft), 0 0 60px -6px var(--um-accent);
874
+ }
875
+ .um-beam__title {
876
+ font-size: 1.15em;
877
+ letter-spacing: -0.01em;
878
+ }
879
+ .um-beam__sub {
880
+ margin: 4px 0;
881
+ }
882
+ .um-beam .um-card {
883
+ background: color-mix(in oklab, var(--um-surface-2) 60%, var(--um-surface));
884
+ }
885
+ .um-beam .um-card[data-celebrate]::after {
886
+ content: '';
887
+ position: absolute;
888
+ inset: 0;
889
+ border-radius: inherit;
890
+ background: linear-gradient(100deg, transparent 20%, color-mix(in oklab, var(--um-success) 25%, transparent) 50%, transparent 80%);
891
+ animation: um-beam-flash calc(var(--um-time) * 900ms) var(--um-ease) forwards;
892
+ pointer-events: none;
893
+ }
894
+ @keyframes um-beam-flash {
895
+ from { transform: translateX(-100%); }
896
+ to { transform: translateX(100%); opacity: 0; }
897
+ }
898
+ .um-beam__badge {
899
+ justify-self: start;
900
+ }
901
+ .um-fan {
902
+ display: grid;
903
+ gap: var(--um-gap);
904
+ }
905
+ .um-fan__zone {
906
+ background: var(--um-tint);
907
+ transition: background var(--um-d) var(--um-ease), transform var(--um-d) var(--um-spring);
908
+ }
909
+ .um-fan[data-mode='over'] .um-fan__zone {
910
+ background: var(--um-tint-strong);
911
+ transform: scale(calc(1 + 0.008 * var(--um-intensity)));
912
+ }
913
+ .um-fan[data-mode='reject'] .um-fan__zone {
914
+ background: color-mix(in oklab, var(--um-danger) 7%, var(--um-surface));
915
+ }
916
+ .um-fan__border {
917
+ position: absolute;
918
+ inset: 0;
919
+ width: 100%;
920
+ height: 100%;
921
+ overflow: visible;
922
+ pointer-events: none;
923
+ }
924
+ .um-fan__border rect {
925
+ fill: none;
926
+ stroke: color-mix(in oklab, var(--um-accent) 55%, transparent);
927
+ stroke-width: 1.5;
928
+ stroke-dasharray: 5 5;
929
+ transition: stroke var(--um-d);
930
+ }
931
+ .um-fan[data-mode='anticipate'] .um-fan__border rect,
932
+ .um-fan[data-mode='over'] .um-fan__border rect {
933
+ stroke: var(--um-accent);
934
+ animation: um-ants calc(var(--um-time) * 700ms) linear infinite;
935
+ }
936
+ .um-fan[data-mode='reject'] .um-fan__border rect {
937
+ stroke: var(--um-danger);
938
+ }
939
+ @keyframes um-ants {
940
+ to { stroke-dashoffset: -20; }
941
+ }
942
+ .um-fan__content {
943
+ display: grid;
944
+ justify-items: center;
945
+ align-content: center;
946
+ min-height: inherit;
947
+ padding: 28px 20px 24px;
948
+ text-align: center;
949
+ }
950
+ .um-fan__stage {
951
+ display: flex;
952
+ align-items: center;
953
+ justify-content: center;
954
+ gap: 18px;
955
+ height: 104px;
956
+ margin-bottom: 14px;
957
+ }
958
+ .um-fan__cards {
959
+ position: relative;
960
+ width: 150px;
961
+ height: 96px;
962
+ }
963
+ .um-fan__card {
964
+ --rot: 0deg;
965
+ --tx: 0px;
966
+ --ty: 0px;
967
+ --sc: 1;
968
+ position: absolute;
969
+ left: 50%;
970
+ top: 50%;
971
+ width: 54px;
972
+ height: 66px;
973
+ margin: -33px 0 0 -27px;
974
+ display: grid;
975
+ place-items: center;
976
+ color: var(--um-accent);
977
+ background: var(--um-surface);
978
+ border: 1.5px solid color-mix(in oklab, var(--um-text) 70%, transparent);
979
+ border-radius: 9px;
980
+ box-shadow: 0 6px 16px -8px rgb(20 20 50 / 0.35);
981
+ transform: translate(var(--tx), var(--ty)) rotate(var(--rot)) scale(var(--sc));
982
+ transition: transform calc(var(--um-time) * 560ms) var(--um-spring), border-color var(--um-d), color var(--um-d);
983
+ }
984
+ .um-fan__card[data-pos='left'] {
985
+ --rot: calc(-14deg * var(--um-intensity));
986
+ --tx: -40px;
987
+ --ty: 6px;
988
+ }
989
+ .um-fan__card[data-pos='right'] {
990
+ --rot: calc(14deg * var(--um-intensity));
991
+ --tx: 40px;
992
+ --ty: 6px;
993
+ }
994
+ .um-fan__card[data-pos='center'] {
995
+ z-index: 1;
996
+ width: 60px;
997
+ height: 74px;
998
+ margin: -37px 0 0 -30px;
999
+ --ty: -4px;
1000
+ }
1001
+ .um-fan__card[data-pos='left'] svg,
1002
+ .um-fan__card[data-pos='right'] svg {
1003
+ border-radius: 50%;
1004
+ }
1005
+ .um-fan[data-mode='idle'] .um-fan__card {
1006
+ animation: um-fan-float calc(var(--um-time) * 3.2s) ease-in-out infinite;
1007
+ }
1008
+ .um-fan[data-mode='idle'] .um-fan__card[data-pos='center'] { animation-delay: -1.1s; }
1009
+ .um-fan[data-mode='idle'] .um-fan__card[data-pos='right'] { animation-delay: -2.2s; }
1010
+ @keyframes um-fan-float {
1011
+ 50% { translate: 0 calc(-3px * var(--um-intensity)); }
1012
+ }
1013
+ .um-fan[data-mode='anticipate'] .um-fan__card[data-pos='left'] {
1014
+ --rot: calc(-22deg * var(--um-intensity));
1015
+ --tx: -54px;
1016
+ --ty: 2px;
1017
+ }
1018
+ .um-fan[data-mode='anticipate'] .um-fan__card[data-pos='right'] {
1019
+ --rot: calc(22deg * var(--um-intensity));
1020
+ --tx: 54px;
1021
+ --ty: 2px;
1022
+ }
1023
+ .um-fan[data-mode='anticipate'] .um-fan__card[data-pos='center'] {
1024
+ --ty: -10px;
1025
+ --sc: 1.05;
1026
+ }
1027
+ .um-fan[data-mode='over'] .um-fan__card {
1028
+ border-color: var(--um-accent);
1029
+ }
1030
+ .um-fan[data-mode='over'] .um-fan__card[data-pos='left'] {
1031
+ --rot: calc(-28deg * var(--um-intensity));
1032
+ --tx: -64px;
1033
+ --ty: -4px;
1034
+ }
1035
+ .um-fan[data-mode='over'] .um-fan__card[data-pos='right'] {
1036
+ --rot: calc(28deg * var(--um-intensity));
1037
+ --tx: 64px;
1038
+ --ty: -4px;
1039
+ }
1040
+ .um-fan[data-mode='over'] .um-fan__card[data-pos='center'] {
1041
+ --ty: -18px;
1042
+ --sc: 1.12;
1043
+ box-shadow: 0 14px 30px -10px color-mix(in oklab, var(--um-accent) 60%, transparent);
1044
+ }
1045
+ .um-fan[data-mode='reject'] .um-fan__card {
1046
+ --tx: 0px;
1047
+ --rot: 0deg;
1048
+ color: var(--um-danger);
1049
+ border-color: var(--um-danger);
1050
+ }
1051
+ .um-fan[data-mode='reject'] .um-fan__cards {
1052
+ animation: um-shake calc(var(--um-time) * 480ms) var(--um-ease);
1053
+ }
1054
+ .um-fan__cards[data-dealt] .um-fan__card {
1055
+ animation: um-fan-deal calc(var(--um-time) * 720ms) var(--um-spring) both;
1056
+ }
1057
+ .um-fan__cards[data-dealt] .um-fan__card[data-pos='center'] { animation-delay: calc(var(--um-time) * 60ms); }
1058
+ .um-fan__cards[data-dealt] .um-fan__card[data-pos='right'] { animation-delay: calc(var(--um-time) * 120ms); }
1059
+ @keyframes um-fan-deal {
1060
+ from { transform: translate(0, 24px) rotate(0deg) scale(0.6); opacity: 0; }
1061
+ }
1062
+ .um-fan__arrow {
1063
+ flex: none;
1064
+ color: var(--um-accent);
1065
+ transition: transform calc(var(--um-time) * 500ms) var(--um-spring);
1066
+ }
1067
+ .um-fan__arrow[data-side='right'] {
1068
+ transform: scaleX(-1);
1069
+ }
1070
+ .um-fan__arrow path {
1071
+ fill: none;
1072
+ stroke: currentColor;
1073
+ stroke-width: 3;
1074
+ stroke-linecap: round;
1075
+ stroke-linejoin: round;
1076
+ stroke-dasharray: 1;
1077
+ stroke-dashoffset: 0;
1078
+ }
1079
+ .um-fan[data-mode='anticipate'] .um-fan__arrow-line,
1080
+ .um-fan[data-mode='over'] .um-fan__arrow-line {
1081
+ animation: um-fan-draw calc(var(--um-time) * 600ms) var(--um-ease) both;
1082
+ }
1083
+ .um-fan[data-mode='anticipate'] .um-fan__arrow-head,
1084
+ .um-fan[data-mode='over'] .um-fan__arrow-head {
1085
+ animation: um-fan-draw calc(var(--um-time) * 300ms) var(--um-ease) calc(var(--um-time) * 450ms) both;
1086
+ }
1087
+ .um-fan[data-mode='over'] .um-fan__arrow[data-side='left'] {
1088
+ transform: translate(calc(8px * var(--um-intensity)), 0);
1089
+ }
1090
+ .um-fan[data-mode='over'] .um-fan__arrow[data-side='right'] {
1091
+ transform: scaleX(-1) translate(calc(8px * var(--um-intensity)), 0);
1092
+ }
1093
+ .um-fan[data-mode='idle'] .um-fan__arrow[data-side='left'] {
1094
+ animation: um-fan-nudge calc(var(--um-time) * 2.4s) ease-in-out infinite;
1095
+ }
1096
+ .um-fan[data-mode='idle'] .um-fan__arrow[data-side='right'] {
1097
+ animation: um-fan-nudge-r calc(var(--um-time) * 2.4s) ease-in-out infinite;
1098
+ }
1099
+ .um-fan[data-mode='reject'] .um-fan__arrow {
1100
+ opacity: 0.25;
1101
+ }
1102
+ @keyframes um-fan-draw {
1103
+ from { stroke-dashoffset: 1; }
1104
+ to { stroke-dashoffset: 0; }
1105
+ }
1106
+ @keyframes um-fan-nudge {
1107
+ 50% { transform: translate(calc(4px * var(--um-intensity)), 2px); }
1108
+ }
1109
+ @keyframes um-fan-nudge-r {
1110
+ 0%, 100% { transform: scaleX(-1); }
1111
+ 50% { transform: scaleX(-1) translate(calc(4px * var(--um-intensity)), 2px); }
1112
+ }
1113
+ .um-fan__title {
1114
+ margin: 0;
1115
+ max-width: 22ch;
1116
+ font-size: clamp(1.05em, 3.6cqi, 1.35em);
1117
+ font-weight: 700;
1118
+ line-height: 1.3;
1119
+ letter-spacing: -0.01em;
1120
+ }
1121
+ .um-fan__title em {
1122
+ font-style: normal;
1123
+ color: var(--um-accent);
1124
+ }
1125
+ .um-fan[data-mode='reject'] .um-fan__title {
1126
+ color: var(--um-danger);
1127
+ }
1128
+ .um-fan__sub {
1129
+ margin: 10px 0 0;
1130
+ color: var(--um-muted);
1131
+ font-size: 0.92em;
1132
+ }
1133
+ .um-fan__hint {
1134
+ margin-top: 6px;
1135
+ font-size: 0.8em;
1136
+ opacity: 0.85;
1137
+ }
1138
+ .um-fan__footer {
1139
+ display: flex;
1140
+ align-items: center;
1141
+ justify-content: center;
1142
+ gap: 12px;
1143
+ flex-wrap: wrap;
1144
+ }
1145
+ .um-fan__footer .um-badge {
1146
+ margin-right: auto;
1147
+ }
1148
+ .um-fan__footer .um-start-btn {
1149
+ margin: 0 auto;
1150
+ }
1151
+ .um-fan__footer .um-badge + .um-start-btn {
1152
+ margin: 0;
1153
+ }
1154
+ @container (max-width: 380px) {
1155
+ .um-fan__stage {
1156
+ gap: 2px;
1157
+ }
1158
+ .um-fan__arrow {
1159
+ width: 30px;
1160
+ height: 30px;
1161
+ }
1162
+ .um-fan__cards {
1163
+ width: 120px;
1164
+ scale: 0.85;
1165
+ }
1166
+ .um-fan__content {
1167
+ padding: 22px 12px 18px;
1168
+ }
1169
+ }
1170
+ .um-essential__zone {
1171
+ --um-zone-h: 180px;
1172
+ border: 1.5px dashed color-mix(in oklab, var(--um-muted) 40%, var(--um-border));
1173
+ background: var(--um-surface);
1174
+ transition: border-color var(--um-d-fast), background var(--um-d-fast);
1175
+ }
1176
+ .um-essential__zone:hover {
1177
+ border-color: color-mix(in oklab, var(--um-accent) 45%, var(--um-border));
1178
+ }
1179
+ .um-essential__zone[data-um-drag='accept'] {
1180
+ border-style: solid;
1181
+ border-color: var(--um-accent);
1182
+ background: var(--um-tint);
1183
+ }
1184
+ .um-essential__zone[data-um-drag='reject'] {
1185
+ border-style: solid;
1186
+ border-color: var(--um-danger);
1187
+ background: color-mix(in oklab, var(--um-danger) 5%, var(--um-surface));
1188
+ }
1189
+ .um-essential__zone .um-zone__icon {
1190
+ width: 40px;
1191
+ height: 40px;
1192
+ border-radius: 10px;
1193
+ background: var(--um-surface-2);
1194
+ color: var(--um-muted);
1195
+ }
1196
+ .um-essential__zone[data-um-drag='accept'] .um-zone__icon {
1197
+ color: var(--um-accent);
1198
+ background: var(--um-tint-strong);
1199
+ }
1200
+ .um-essential .um-card {
1201
+ box-shadow: none;
1202
+ }
1203
+ .um-essential .um-list__item {
1204
+ animation-duration: calc(var(--um-time) * 240ms);
1205
+ }
1206
+ .um-essential .um-progress--bar {
1207
+ height: 3px;
1208
+ }
1209
+ .um-hoop__pills {
1210
+ display: flex;
1211
+ align-items: center;
1212
+ gap: 8px;
1213
+ flex-wrap: wrap;
1214
+ justify-content: flex-end;
1215
+ }
1216
+ .um-hoop__pill {
1217
+ display: inline-flex;
1218
+ gap: 6px;
1219
+ align-items: center;
1220
+ padding: 6px 12px;
1221
+ border-radius: 999px;
1222
+ font-size: 0.82em;
1223
+ font-weight: 600;
1224
+ background: var(--um-surface-2);
1225
+ border: 1px solid var(--um-border);
1226
+ white-space: nowrap;
1227
+ }
1228
+ .um-hoop__pill--accent {
1229
+ background: var(--um-tint-strong);
1230
+ border-color: transparent;
1231
+ }
1232
+ .um-hoop__pill[data-bump] {
1233
+ animation: um-pop-bump calc(var(--um-time) * 520ms) var(--um-spring);
1234
+ }
1235
+ @keyframes um-pop-bump {
1236
+ 40% { transform: scale(1.15); }
1237
+ }
1238
+ .um-hoop__court {
1239
+ --um-zone-h: 360px;
1240
+ position: relative;
1241
+ overflow: hidden;
1242
+ border: 1.5px dashed color-mix(in oklab, var(--um-muted) 35%, transparent);
1243
+ background:
1244
+ radial-gradient(circle at 50% 120%, var(--um-tint) 0%, transparent 60%),
1245
+ var(--um-surface);
1246
+ cursor: default;
1247
+ user-select: none;
1248
+ touch-action: none;
1249
+ transition: border-color var(--um-d), background var(--um-d);
1250
+ }
1251
+ .um-hoop__court[data-um-drag='accept'] {
1252
+ border-color: var(--um-accent);
1253
+ background: var(--um-tint);
1254
+ }
1255
+ .um-hoop__court[data-um-drag='reject'] {
1256
+ border-color: var(--um-danger);
1257
+ }
1258
+ .um-hoop__drop {
1259
+ position: absolute;
1260
+ left: 0;
1261
+ right: 0;
1262
+ top: 22px;
1263
+ display: grid;
1264
+ justify-items: center;
1265
+ gap: 2px;
1266
+ text-align: center;
1267
+ font-size: 0.9em;
1268
+ color: var(--um-muted);
1269
+ }
1270
+ .um-hoop__drop svg {
1271
+ color: var(--um-accent);
1272
+ margin-bottom: 4px;
1273
+ }
1274
+ .um-hoop__drop strong {
1275
+ color: var(--um-text);
1276
+ font-size: 1.05em;
1277
+ }
1278
+ .um-hoop__drop .um-hint {
1279
+ font-size: 0.85em;
1280
+ }
1281
+ .um-hoop__hoop {
1282
+ position: absolute;
1283
+ left: 50%;
1284
+ top: 46%;
1285
+ width: 124px;
1286
+ translate: -50% 0;
1287
+ display: grid;
1288
+ justify-items: center;
1289
+ }
1290
+ .um-hoop__board {
1291
+ position: relative;
1292
+ width: 124px;
1293
+ height: 80px;
1294
+ border-radius: 10px;
1295
+ background: var(--um-surface);
1296
+ border: 1.5px solid color-mix(in oklab, var(--um-text) 22%, transparent);
1297
+ box-shadow: 0 10px 24px -14px rgb(20 20 50 / 0.4);
1298
+ display: grid;
1299
+ place-items: center;
1300
+ }
1301
+ .um-hoop__board-square {
1302
+ width: 44px;
1303
+ height: 32px;
1304
+ margin-top: 14px;
1305
+ border: 2px solid var(--um-accent);
1306
+ border-radius: 4px;
1307
+ opacity: 0.8;
1308
+ }
1309
+ .um-hoop__rim-svg {
1310
+ margin-top: -14px;
1311
+ overflow: visible;
1312
+ }
1313
+ .um-hoop__rim {
1314
+ fill: none;
1315
+ stroke: var(--um-accent);
1316
+ stroke-width: 3.5;
1317
+ }
1318
+ .um-hoop__clip {
1319
+ fill: var(--um-accent);
1320
+ }
1321
+ .um-hoop__net path {
1322
+ fill: none;
1323
+ stroke: color-mix(in oklab, var(--um-text) 40%, transparent);
1324
+ stroke-width: 1;
1325
+ }
1326
+ .um-hoop__net {
1327
+ transform-origin: 48px 12px;
1328
+ }
1329
+ .um-hoop__net[data-swish] {
1330
+ animation: um-net-swish calc(var(--um-time) * 700ms) var(--um-spring);
1331
+ }
1332
+ @keyframes um-net-swish {
1333
+ 30% { transform: scaleY(1.28) scaleX(0.86); }
1334
+ 60% { transform: scaleY(0.94) scaleX(1.04); }
1335
+ }
1336
+ .um-hoop__rim-target {
1337
+ position: absolute;
1338
+ left: 22px;
1339
+ right: 22px;
1340
+ top: 74px;
1341
+ height: 1px;
1342
+ pointer-events: none;
1343
+ }
1344
+ .um-hoop__burst {
1345
+ left: 50%;
1346
+ top: calc(46% + 80px);
1347
+ }
1348
+ .um-hoop__callout {
1349
+ position: absolute;
1350
+ left: 50%;
1351
+ top: calc(46% - 28px);
1352
+ translate: -50% 0;
1353
+ font-weight: 800;
1354
+ font-size: 1.05em;
1355
+ color: var(--um-accent);
1356
+ pointer-events: none;
1357
+ animation: um-callout calc(var(--um-time) * 1.1s) var(--um-ease) forwards;
1358
+ }
1359
+ .um-hoop__callout[data-tone='bad'] {
1360
+ color: var(--um-muted);
1361
+ }
1362
+ @keyframes um-callout {
1363
+ 0% { opacity: 0; transform: translateY(8px) scale(0.8); }
1364
+ 20% { opacity: 1; transform: translateY(0) scale(1.08); }
1365
+ 70% { opacity: 1; transform: translateY(-6px) scale(1); }
1366
+ 100% { opacity: 0; transform: translateY(-16px); }
1367
+ }
1368
+ .um-hoop__dots {
1369
+ position: absolute;
1370
+ inset: 0;
1371
+ width: 100%;
1372
+ height: 100%;
1373
+ pointer-events: none;
1374
+ overflow: visible;
1375
+ }
1376
+ .um-hoop__dots circle {
1377
+ fill: var(--um-accent);
1378
+ }
1379
+ .um-hoop__pad {
1380
+ position: absolute;
1381
+ left: 26px;
1382
+ bottom: 52px;
1383
+ width: 44px;
1384
+ height: 54px;
1385
+ }
1386
+ .um-hoop__token {
1387
+ position: absolute;
1388
+ inset: 0;
1389
+ display: block;
1390
+ padding: 0;
1391
+ border: 0;
1392
+ background: none;
1393
+ }
1394
+ .um-hoop__token-face {
1395
+ position: absolute;
1396
+ inset: 0;
1397
+ display: grid;
1398
+ place-items: end center;
1399
+ padding-bottom: 6px;
1400
+ border-radius: 9px;
1401
+ background: var(--um-surface);
1402
+ border: 1px solid var(--um-border);
1403
+ box-shadow: 0 8px 18px -8px color-mix(in oklab, var(--um-accent) 45%, rgb(20 20 50 / 0.4));
1404
+ }
1405
+ .um-hoop__token-lines {
1406
+ position: absolute;
1407
+ top: 9px;
1408
+ left: 9px;
1409
+ right: 9px;
1410
+ height: 14px;
1411
+ background: repeating-linear-gradient(to bottom, var(--um-border) 0 2px, transparent 2px 5px);
1412
+ border-radius: 1px;
1413
+ }
1414
+ .um-hoop__token-face .um-ficon {
1415
+ scale: 0.8;
1416
+ }
1417
+ .um-hoop__token-face .um-ficon__paper {
1418
+ opacity: 0;
1419
+ }
1420
+ .um-hoop__token--top {
1421
+ cursor: grab;
1422
+ touch-action: none;
1423
+ z-index: 2;
1424
+ transition: transform calc(var(--um-time) * 380ms) var(--um-spring);
1425
+ animation: um-token-idle calc(var(--um-time) * 2.6s) ease-in-out infinite;
1426
+ border-radius: 9px;
1427
+ }
1428
+ .um-hoop__court[data-aiming] .um-hoop__token--top {
1429
+ cursor: grabbing;
1430
+ transition: none;
1431
+ animation: none;
1432
+ }
1433
+ @keyframes um-token-idle {
1434
+ 50% { translate: 0 calc(-4px * var(--um-intensity)); }
1435
+ }
1436
+ .um-hoop__token--stacked {
1437
+ transform: translate(calc(6px + var(--d) * 6px), calc(var(--d) * -4px + 6px)) rotate(calc(8deg + var(--d) * 4deg));
1438
+ opacity: 0.7;
1439
+ }
1440
+ .um-hoop__token--empty {
1441
+ border-radius: 9px;
1442
+ border: 1.5px dashed color-mix(in oklab, var(--um-muted) 40%, transparent);
1443
+ }
1444
+ .um-hoop__count {
1445
+ position: absolute;
1446
+ top: -10px;
1447
+ right: -14px;
1448
+ z-index: 3;
1449
+ min-width: 22px;
1450
+ padding: 2px 6px;
1451
+ border-radius: 999px;
1452
+ font-size: 11px;
1453
+ font-weight: 700;
1454
+ color: #fff;
1455
+ background: var(--um-accent);
1456
+ text-align: center;
1457
+ }
1458
+ .um-hoop__ball {
1459
+ position: absolute;
1460
+ left: 0;
1461
+ top: 0;
1462
+ width: 44px;
1463
+ height: 54px;
1464
+ z-index: 4;
1465
+ pointer-events: none;
1466
+ will-change: transform;
1467
+ }
1468
+ .um-hoop__footer {
1469
+ position: absolute;
1470
+ left: 16px;
1471
+ right: 16px;
1472
+ bottom: 12px;
1473
+ display: flex;
1474
+ align-items: center;
1475
+ justify-content: space-between;
1476
+ gap: 10px;
1477
+ }
1478
+ .um-hoop__tip {
1479
+ flex: 1;
1480
+ text-align: center;
1481
+ font-size: 0.78em;
1482
+ color: var(--um-muted);
1483
+ }
1484
+ .um-hoop__actions {
1485
+ display: flex;
1486
+ align-items: center;
1487
+ gap: 4px;
1488
+ }
1489
+ .um-hoop__actions .um-btn {
1490
+ padding: 0.45em 1em;
1491
+ font-size: 0.85em;
1492
+ }
1493
+ @container (max-width: 460px) {
1494
+ .um-hoop__tip {
1495
+ display: none;
1496
+ }
1497
+ .um-hoop__footer {
1498
+ justify-content: flex-end;
1499
+ }
1500
+ }
1501
+ .um-liquid {
1502
+ display: grid;
1503
+ gap: var(--um-gap);
1504
+ }
1505
+ .um-liquid__vessel {
1506
+ --um-zone-h: 240px;
1507
+ --um-level: 0.1;
1508
+ --um-liquid: var(--um-accent);
1509
+ --um-liquid-2: var(--um-accent-2);
1510
+ overflow: hidden;
1511
+ isolation: isolate;
1512
+ background: var(--um-surface);
1513
+ border: 1.5px solid var(--um-border);
1514
+ box-shadow: inset 0 2px 12px rgb(20 20 50 / 0.06), var(--um-shadow);
1515
+ border-radius: calc(var(--um-radius) * 1.4);
1516
+ transition: border-color var(--um-d);
1517
+ }
1518
+ .um-liquid__vessel[data-um-drag='accept'] {
1519
+ border-color: var(--um-accent);
1520
+ }
1521
+ .um-liquid__vessel[data-um-drag='reject'] {
1522
+ --um-liquid: var(--um-danger);
1523
+ --um-liquid-2: var(--um-danger);
1524
+ }
1525
+ .um-liquid[data-done] .um-liquid__vessel {
1526
+ --um-liquid: var(--um-success);
1527
+ --um-liquid-2: color-mix(in oklab, var(--um-success) 70%, #38bdf8);
1528
+ }
1529
+ .um-liquid[data-error] .um-liquid__vessel {
1530
+ --um-liquid: var(--um-danger);
1531
+ --um-liquid-2: color-mix(in oklab, var(--um-danger) 70%, #f97316);
1532
+ }
1533
+ .um-liquid__fluid {
1534
+ position: absolute;
1535
+ inset: 0;
1536
+ z-index: -1;
1537
+ transform: translateY(calc((1 - var(--um-level)) * 100%));
1538
+ transition: transform calc(var(--um-time) * 900ms) var(--um-ease);
1539
+ }
1540
+ .um-liquid__body {
1541
+ position: absolute;
1542
+ inset: 0;
1543
+ overflow: hidden;
1544
+ background: linear-gradient(180deg, var(--um-liquid-2), var(--um-liquid));
1545
+ transition: background var(--um-d-slow);
1546
+ }
1547
+ .um-liquid__wave {
1548
+ position: absolute;
1549
+ left: 0;
1550
+ bottom: calc(100% - 1px);
1551
+ width: 400%;
1552
+ height: 20px;
1553
+ transform-origin: bottom;
1554
+ animation: um-wave-travel calc(var(--um-time) * 5s) linear infinite;
1555
+ transition: transform var(--um-d-slow) var(--um-spring);
1556
+ }
1557
+ .um-liquid__wave path {
1558
+ transition: fill var(--um-d-slow);
1559
+ }
1560
+ .um-liquid__wave--front path {
1561
+ fill: var(--um-liquid-2);
1562
+ }
1563
+ .um-liquid__wave--back {
1564
+ opacity: 0.45;
1565
+ animation-duration: calc(var(--um-time) * 7s);
1566
+ animation-direction: reverse;
1567
+ bottom: calc(100% + 1px);
1568
+ }
1569
+ .um-liquid__wave--back path {
1570
+ fill: var(--um-liquid);
1571
+ }
1572
+ .um-liquid__vessel[data-um-drag='accept'] .um-liquid__wave {
1573
+ transform: scaleY(calc(1 + 0.9 * var(--um-intensity)));
1574
+ animation-duration: calc(var(--um-time) * 1.6s);
1575
+ }
1576
+ .um-liquid[data-done] .um-liquid__wave {
1577
+ transform: scaleY(0.3);
1578
+ }
1579
+ .um-liquid__bubble {
1580
+ position: absolute;
1581
+ bottom: -12px;
1582
+ border-radius: 50%;
1583
+ border: 1.5px solid rgb(255 255 255 / 0.6);
1584
+ background: rgb(255 255 255 / 0.15);
1585
+ opacity: 0;
1586
+ }
1587
+ .um-liquid[data-active] .um-liquid__bubble {
1588
+ animation: um-bubble 3s ease-in infinite;
1589
+ }
1590
+ @keyframes um-bubble {
1591
+ 0% { transform: translateY(0) translateX(0); opacity: 0; }
1592
+ 15% { opacity: 1; }
1593
+ 100% { transform: translateY(calc(-1 * var(--um-zone-h))) translateX(10px); opacity: 0; }
1594
+ }
1595
+ .um-liquid__layer {
1596
+ position: absolute;
1597
+ inset: 0;
1598
+ display: grid;
1599
+ justify-items: center;
1600
+ align-content: center;
1601
+ gap: 6px;
1602
+ padding: 24px;
1603
+ text-align: center;
1604
+ pointer-events: none;
1605
+ }
1606
+ .um-liquid__layer--inverse {
1607
+ color: #fff;
1608
+ clip-path: inset(calc((1 - var(--um-level)) * 100%) 0 0 0);
1609
+ transition: clip-path calc(var(--um-time) * 900ms) var(--um-ease);
1610
+ }
1611
+ .um-liquid__layer--inverse .um-liquid__detail,
1612
+ .um-liquid__layer--inverse .um-liquid__icon {
1613
+ color: rgb(255 255 255 / 0.85);
1614
+ }
1615
+ .um-liquid__layer--inverse .um-liquid__icon {
1616
+ background: rgb(255 255 255 / 0.18);
1617
+ }
1618
+ .um-liquid__icon {
1619
+ display: grid;
1620
+ place-items: center;
1621
+ width: 56px;
1622
+ height: 56px;
1623
+ border-radius: 50%;
1624
+ color: var(--um-accent);
1625
+ background: var(--um-tint-strong);
1626
+ margin-bottom: 4px;
1627
+ }
1628
+ .um-liquid__percent {
1629
+ font-size: 3em;
1630
+ font-weight: 800;
1631
+ line-height: 1;
1632
+ letter-spacing: -0.04em;
1633
+ font-variant-numeric: tabular-nums;
1634
+ min-height: 48px;
1635
+ display: grid;
1636
+ place-items: center;
1637
+ }
1638
+ .um-liquid__title {
1639
+ font-size: 1.1em;
1640
+ }
1641
+ .um-liquid__detail {
1642
+ color: var(--um-muted);
1643
+ font-size: 0.9em;
1644
+ font-variant-numeric: tabular-nums;
1645
+ }
1646
+ .um-liquid__footer {
1647
+ margin-top: 0;
1648
+ }
1649
+ .um-liquid__footer-actions {
1650
+ display: flex;
1651
+ gap: 8px;
1652
+ align-items: center;
1653
+ }
1654
+ .um-liquid .um-queue {
1655
+ margin-top: 0;
1656
+ }
1657
+ .um-liquid .um-progress--bar {
1658
+ height: 6px;
1659
+ }
1660
+ .um-liquid .um-progress--bar .um-progress__fill {
1661
+ background: linear-gradient(90deg, var(--um-accent), var(--um-accent-2));
1662
+ }
1663
+ .um-liquid .um-progress--bar[data-status='success'] .um-progress__fill {
1664
+ background: var(--um-success);
1665
+ }
1666
+ .um-magnetic {
1667
+ display: grid;
1668
+ gap: var(--um-gap);
1669
+ }
1670
+ .um-magnetic__zone {
1671
+ --um-px: 0.5;
1672
+ --um-py: 0.5;
1673
+ --um-zone-h: 250px;
1674
+ overflow: hidden;
1675
+ isolation: isolate;
1676
+ background: var(--um-surface);
1677
+ border: 1px solid var(--um-border);
1678
+ box-shadow: var(--um-shadow);
1679
+ transition: border-color var(--um-d), box-shadow var(--um-d);
1680
+ }
1681
+ .um-magnetic__field,
1682
+ .um-magnetic__glow {
1683
+ position: absolute;
1684
+ inset: 0;
1685
+ z-index: -1;
1686
+ pointer-events: none;
1687
+ }
1688
+ .um-magnetic__field {
1689
+ background-image: radial-gradient(circle, color-mix(in oklab, var(--um-text) 18%, transparent) 1.2px, transparent 1.6px);
1690
+ background-size: 18px 18px;
1691
+ background-position: center;
1692
+ }
1693
+ .um-magnetic__field::after {
1694
+ content: '';
1695
+ position: absolute;
1696
+ inset: 0;
1697
+ background-image: radial-gradient(circle, var(--um-accent) 2.2px, transparent 2.8px);
1698
+ background-size: 18px 18px;
1699
+ background-position: center;
1700
+ -webkit-mask-image: radial-gradient(circle 120px at calc(var(--um-px) * 100%) calc(var(--um-py) * 100%), #000 0%, transparent 100%);
1701
+ mask-image: radial-gradient(circle 120px at calc(var(--um-px) * 100%) calc(var(--um-py) * 100%), #000 0%, transparent 100%);
1702
+ opacity: 0;
1703
+ transition: opacity var(--um-d);
1704
+ }
1705
+ .um-magnetic__zone:hover .um-magnetic__field::after,
1706
+ .um-magnetic__zone[data-um-drag='accept'] .um-magnetic__field::after {
1707
+ opacity: 1;
1708
+ }
1709
+ .um-magnetic__glow {
1710
+ background: radial-gradient(circle 220px at calc(var(--um-px) * 100%) calc(var(--um-py) * 100%), var(--um-accent-soft), transparent 70%);
1711
+ opacity: 0;
1712
+ transition: opacity var(--um-d);
1713
+ }
1714
+ .um-magnetic__zone:hover .um-magnetic__glow {
1715
+ opacity: 0.6;
1716
+ }
1717
+ .um-magnetic__zone[data-um-drag='accept'] {
1718
+ border-color: var(--um-accent);
1719
+ box-shadow: 0 0 0 4px var(--um-accent-soft), var(--um-shadow);
1720
+ }
1721
+ .um-magnetic__zone[data-um-drag='accept'] .um-magnetic__glow {
1722
+ opacity: 1;
1723
+ }
1724
+ .um-magnetic__zone[data-um-drag='reject'] {
1725
+ border-color: var(--um-danger);
1726
+ }
1727
+ .um-magnetic[data-window-drag] .um-magnetic__field {
1728
+ animation: um-mag-breathe calc(var(--um-time) * 1.2s) ease-in-out infinite;
1729
+ }
1730
+ @keyframes um-mag-breathe {
1731
+ 50% { background-size: 20px 20px; }
1732
+ }
1733
+ .um-magnetic__content {
1734
+ display: grid;
1735
+ justify-items: center;
1736
+ align-content: center;
1737
+ gap: 6px;
1738
+ min-height: inherit;
1739
+ padding: 28px 20px;
1740
+ text-align: center;
1741
+ }
1742
+ .um-magnetic__core {
1743
+ position: relative;
1744
+ display: grid;
1745
+ place-items: center;
1746
+ width: 64px;
1747
+ height: 64px;
1748
+ margin-bottom: 12px;
1749
+ border-radius: 20px;
1750
+ color: #fff;
1751
+ background: var(--um-gradient);
1752
+ box-shadow: 0 16px 30px -12px color-mix(in oklab, var(--um-accent) 70%, transparent);
1753
+ translate: calc((var(--um-px) - 0.5) * 70px * var(--um-intensity)) calc((var(--um-py) - 0.5) * 50px * var(--um-intensity));
1754
+ transition: translate calc(var(--um-time) * 520ms) var(--um-spring), scale var(--um-d) var(--um-spring);
1755
+ }
1756
+ .um-magnetic__zone[data-um-drag='accept'] .um-magnetic__core {
1757
+ scale: 1.12;
1758
+ }
1759
+ .um-magnetic__core[data-snap] {
1760
+ animation: um-mag-snap calc(var(--um-time) * 640ms) var(--um-spring);
1761
+ }
1762
+ @keyframes um-mag-snap {
1763
+ 0% { transform: scale(1.35) rotate(-8deg); }
1764
+ 100% { transform: none; }
1765
+ }
1766
+ .um-magnetic__ring {
1767
+ position: absolute;
1768
+ inset: -12px;
1769
+ border-radius: 28px;
1770
+ border: 1.5px solid var(--um-accent);
1771
+ opacity: 0;
1772
+ pointer-events: none;
1773
+ }
1774
+ .um-magnetic__zone[data-um-drag='accept'] .um-magnetic__ring {
1775
+ animation: um-mag-ring calc(var(--um-time) * 1.4s) var(--um-ease) infinite;
1776
+ }
1777
+ .um-magnetic__zone[data-um-drag='accept'] .um-magnetic__ring--2 {
1778
+ animation-delay: calc(var(--um-time) * 0.7s);
1779
+ }
1780
+ .um-magnetic__core[data-snap] .um-magnetic__ring {
1781
+ animation: um-mag-ring calc(var(--um-time) * 800ms) var(--um-ease) 1;
1782
+ }
1783
+ @keyframes um-mag-ring {
1784
+ 0% { opacity: 0.8; transform: scale(0.8); }
1785
+ 100% { opacity: 0; transform: scale(1.8); }
1786
+ }
1787
+ .um-magnetic__title {
1788
+ font-size: 1.12em;
1789
+ }
1790
+ .um-magnetic__sub {
1791
+ color: var(--um-muted);
1792
+ }
1793
+ .um-magnetic__queue .um-list__item {
1794
+ animation: um-mag-in calc(var(--um-time) * 620ms) var(--um-spring) both;
1795
+ animation-delay: calc(min(var(--um-i, 0), 8) * 50ms * var(--um-time));
1796
+ }
1797
+ .um-magnetic__queue .um-list__item[data-exiting] {
1798
+ animation: um-exit calc(var(--um-time) * 320ms) var(--um-ease) forwards;
1799
+ }
1800
+ @keyframes um-mag-in {
1801
+ from { opacity: 0; transform: translateY(-28px) scale(0.92); }
1802
+ }
1803
+ .um-magnetic__badge {
1804
+ justify-self: start;
1805
+ }
1806
+ .um-media {
1807
+ display: grid;
1808
+ gap: var(--um-gap);
1809
+ }
1810
+ .um-media__grid {
1811
+ display: grid;
1812
+ grid-template-columns: repeat(auto-fill, minmax(132px, 1fr));
1813
+ gap: var(--um-gap);
1814
+ }
1815
+ .um-media__items {
1816
+ display: contents;
1817
+ }
1818
+ .um-media__footer {
1819
+ display: flex;
1820
+ align-items: center;
1821
+ gap: 8px;
1822
+ }
1823
+ .um-media .um-footer-row {
1824
+ margin-top: 0;
1825
+ }
1826
+ .um-zonetile {
1827
+ --um-zone-h: 0px;
1828
+ aspect-ratio: 1;
1829
+ display: grid;
1830
+ place-content: center;
1831
+ justify-items: center;
1832
+ gap: 8px;
1833
+ padding: 12px;
1834
+ text-align: center;
1835
+ border: 1.5px dashed color-mix(in oklab, var(--um-accent) 45%, var(--um-border));
1836
+ background: var(--um-tint);
1837
+ color: var(--um-muted);
1838
+ font-size: 0.88em;
1839
+ font-weight: 600;
1840
+ transition: transform var(--um-d) var(--um-spring), background var(--um-d), border-color var(--um-d);
1841
+ }
1842
+ .um-media--page .um-zonetile {
1843
+ aspect-ratio: 0.78;
1844
+ }
1845
+ .um-zonetile:hover {
1846
+ background: var(--um-tint-strong);
1847
+ }
1848
+ .um-zonetile[data-um-drag='accept'] {
1849
+ transform: scale(1.04);
1850
+ border-style: solid;
1851
+ border-color: var(--um-accent);
1852
+ background: var(--um-tint-strong);
1853
+ color: var(--um-accent);
1854
+ }
1855
+ .um-zonetile[data-um-drag='reject'] {
1856
+ border-color: var(--um-danger);
1857
+ color: var(--um-danger);
1858
+ }
1859
+ .um-zonetile__icon {
1860
+ display: grid;
1861
+ place-items: center;
1862
+ width: 46px;
1863
+ height: 46px;
1864
+ border-radius: 50%;
1865
+ color: var(--um-accent);
1866
+ background: var(--um-surface);
1867
+ box-shadow: 0 6px 16px -8px color-mix(in oklab, var(--um-accent) 60%, transparent);
1868
+ transition: transform var(--um-d) var(--um-spring);
1869
+ }
1870
+ .um-zonetile[data-um-drag='accept'] .um-zonetile__icon {
1871
+ transform: rotate(90deg) scale(1.1);
1872
+ }
1873
+ .um-tile {
1874
+ position: relative;
1875
+ display: grid;
1876
+ gap: 6px;
1877
+ }
1878
+ .um-tile__visual {
1879
+ position: relative;
1880
+ aspect-ratio: 1;
1881
+ border-radius: var(--um-radius);
1882
+ overflow: hidden;
1883
+ background: var(--um-surface-2);
1884
+ border: 1px solid var(--um-border);
1885
+ transition: transform var(--um-d) var(--um-spring), box-shadow var(--um-d);
1886
+ }
1887
+ .um-media--page .um-tile__visual {
1888
+ aspect-ratio: 0.78;
1889
+ overflow: visible;
1890
+ background: none;
1891
+ border: 0;
1892
+ }
1893
+ .um-tile[data-celebrate] .um-tile__visual {
1894
+ animation: um-tile-pop calc(var(--um-time) * 600ms) var(--um-spring);
1895
+ }
1896
+ @keyframes um-tile-pop {
1897
+ 40% { transform: scale(1.05); }
1898
+ }
1899
+ .um-tile[data-status='error'] .um-tile__visual {
1900
+ box-shadow: 0 0 0 2px var(--um-danger);
1901
+ animation: um-shake calc(var(--um-time) * 480ms) var(--um-ease);
1902
+ }
1903
+ .um-tile__overlay {
1904
+ position: absolute;
1905
+ left: 0;
1906
+ right: 0;
1907
+ top: 0;
1908
+ display: flex;
1909
+ justify-content: space-between;
1910
+ align-items: flex-start;
1911
+ padding: 6px;
1912
+ pointer-events: none;
1913
+ }
1914
+ .um-tile__badge {
1915
+ min-height: 22px;
1916
+ padding: 2px 7px;
1917
+ border-radius: 999px;
1918
+ font-size: 11px;
1919
+ font-weight: 700;
1920
+ font-variant-numeric: tabular-nums;
1921
+ color: #fff;
1922
+ background: rgb(10 10 20 / 0.55);
1923
+ backdrop-filter: blur(6px);
1924
+ }
1925
+ .um-tile__badge:empty {
1926
+ visibility: hidden;
1927
+ }
1928
+ .um-tile[data-status='success'] .um-tile__badge {
1929
+ padding: 2px;
1930
+ background: none;
1931
+ backdrop-filter: none;
1932
+ }
1933
+ .um-tile__actions {
1934
+ pointer-events: auto;
1935
+ border-radius: 999px;
1936
+ background: color-mix(in oklab, var(--um-surface) 88%, transparent);
1937
+ box-shadow: 0 4px 12px -4px rgb(0 0 0 / 0.25);
1938
+ opacity: 0;
1939
+ transform: translateY(-4px);
1940
+ transition: opacity var(--um-d-fast), transform var(--um-d-fast);
1941
+ }
1942
+ .um-tile:hover .um-tile__actions,
1943
+ .um-tile:focus-within .um-tile__actions,
1944
+ .um-tile[data-status='error'] .um-tile__actions,
1945
+ .um-tile[data-status='pending'] .um-tile__actions,
1946
+ .um-tile[data-status='canceled'] .um-tile__actions {
1947
+ opacity: 1;
1948
+ transform: none;
1949
+ }
1950
+ @media (hover: none) {
1951
+ .um-tile__actions {
1952
+ opacity: 1;
1953
+ transform: none;
1954
+ }
1955
+ }
1956
+ .um-tile__actions .um-icon-btn {
1957
+ width: 28px;
1958
+ height: 28px;
1959
+ }
1960
+ .um-tile__meta {
1961
+ display: grid;
1962
+ min-width: 0;
1963
+ padding: 0 2px;
1964
+ }
1965
+ .um-tile__name {
1966
+ font-size: 0.86em;
1967
+ font-weight: 600;
1968
+ white-space: nowrap;
1969
+ overflow: hidden;
1970
+ text-overflow: ellipsis;
1971
+ }
1972
+ .um-tile .um-status {
1973
+ font-size: 0.78em;
1974
+ }
1975
+ .um-tile .um-burst {
1976
+ top: 40%;
1977
+ }
1978
+ .um-bloom {
1979
+ position: absolute;
1980
+ inset: 0;
1981
+ display: block;
1982
+ }
1983
+ .um-bloom__under,
1984
+ .um-bloom__over {
1985
+ position: absolute;
1986
+ inset: 0;
1987
+ width: 100%;
1988
+ height: 100%;
1989
+ object-fit: cover;
1990
+ }
1991
+ .um-bloom__under {
1992
+ filter: blur(6px) grayscale(1) brightness(1.1);
1993
+ opacity: 0.55;
1994
+ transform: scale(1.08);
1995
+ }
1996
+ .um-bloom__over {
1997
+ clip-path: circle(calc(var(--um-p) * 72%) at 50% 50%);
1998
+ transition: clip-path calc(var(--um-time) * 500ms) var(--um-ease);
1999
+ }
2000
+ .um-bloom[data-status='pending'] .um-bloom__over,
2001
+ .um-bloom[data-status='queued'] .um-bloom__over {
2002
+ clip-path: circle(0% at 50% 50%);
2003
+ }
2004
+ .um-bloom[data-status='success'] .um-bloom__over {
2005
+ clip-path: circle(75% at 50% 50%);
2006
+ }
2007
+ .um-bloom[data-status='success'] .um-bloom__under {
2008
+ opacity: 0;
2009
+ }
2010
+ .um-bloom__wash {
2011
+ display: grid;
2012
+ place-items: center;
2013
+ color: var(--k);
2014
+ background: color-mix(in oklab, var(--k) 10%, var(--um-surface-2));
2015
+ }
2016
+ .um-bloom__wash--on {
2017
+ color: #fff;
2018
+ background: radial-gradient(circle at 50% 50%, color-mix(in oklab, var(--k) 80%, #fff), var(--k));
2019
+ align-content: center;
2020
+ gap: 4px;
2021
+ }
2022
+ .um-bloom__ext {
2023
+ font-size: 11px;
2024
+ font-weight: 800;
2025
+ letter-spacing: 0.04em;
2026
+ }
2027
+ .um-pixel {
2028
+ position: absolute;
2029
+ inset: 0;
2030
+ display: grid;
2031
+ grid-template-columns: repeat(8, 1fr);
2032
+ grid-template-rows: repeat(8, 1fr);
2033
+ gap: 1px;
2034
+ padding: 1px;
2035
+ transition: gap var(--um-d-slow) var(--um-ease), padding var(--um-d-slow);
2036
+ }
2037
+ .um-pixel__cell {
2038
+ --v: clamp(0, (var(--um-p) - var(--o)) * 24, 1);
2039
+ border-radius: 1px;
2040
+ opacity: var(--v);
2041
+ transform: translate(calc(var(--dx) * (1 - var(--v)) * var(--um-intensity)), calc(var(--dy) * (1 - var(--v)) * var(--um-intensity))) scale(calc(0.3 + 0.7 * var(--v)));
2042
+ transition: opacity calc(var(--um-time) * 450ms) var(--um-ease), transform calc(var(--um-time) * 650ms) var(--um-spring);
2043
+ }
2044
+ .um-pixel[data-status='success'] {
2045
+ gap: 0;
2046
+ padding: 0;
2047
+ }
2048
+ .um-pixel[data-status='success']::after {
2049
+ content: '';
2050
+ position: absolute;
2051
+ inset: 0;
2052
+ background: linear-gradient(115deg, transparent 30%, rgb(255 255 255 / 0.6) 50%, transparent 70%);
2053
+ animation: um-pixel-shine calc(var(--um-time) * 900ms) var(--um-ease) forwards;
2054
+ }
2055
+ @keyframes um-pixel-shine {
2056
+ from { transform: translateX(-100%); }
2057
+ to { transform: translateX(100%); }
2058
+ }
2059
+ .um-pixel__glyph {
2060
+ position: absolute;
2061
+ inset: 0;
2062
+ display: grid;
2063
+ place-items: center;
2064
+ opacity: calc(0.25 + var(--um-p) * 0.75);
2065
+ transition: opacity var(--um-d);
2066
+ }
2067
+ .um-pixel__glyph .um-ficon__paper {
2068
+ background: color-mix(in oklab, var(--um-surface) 90%, transparent);
2069
+ }
2070
+ .um-page {
2071
+ position: absolute;
2072
+ inset: 0;
2073
+ display: block;
2074
+ overflow: hidden;
2075
+ padding: 18px 12px 12px;
2076
+ border-radius: 10px;
2077
+ background: var(--um-surface);
2078
+ border: 1px solid var(--um-border);
2079
+ box-shadow: 0 10px 24px -14px rgb(20 20 50 / 0.35);
2080
+ clip-path: polygon(0 0, calc(100% - 22px) 0, 100% 22px, 100% 100%, 0 100%);
2081
+ }
2082
+ .um-page__fold {
2083
+ position: absolute;
2084
+ top: 0;
2085
+ right: 0;
2086
+ width: 22px;
2087
+ height: 22px;
2088
+ background: linear-gradient(225deg, transparent 50%, color-mix(in oklab, var(--k) 25%, var(--um-surface-2)) 50%);
2089
+ transition: width var(--um-d) var(--um-spring), height var(--um-d) var(--um-spring);
2090
+ }
2091
+ .um-page__lines {
2092
+ display: grid;
2093
+ gap: 6px;
2094
+ }
2095
+ .um-page__line {
2096
+ --ink: clamp(0, (var(--um-p) - var(--li)) * 14, 1);
2097
+ display: block;
2098
+ height: 4px;
2099
+ width: var(--w);
2100
+ border-radius: 2px;
2101
+ background: color-mix(in oklab, var(--um-text) calc(10% + var(--ink) * 55%), transparent);
2102
+ transition: background calc(var(--um-time) * 300ms);
2103
+ }
2104
+ .um-page__line:nth-child(1) {
2105
+ height: 6px;
2106
+ background: color-mix(in oklab, var(--k) calc(20% + var(--ink) * 80%), transparent);
2107
+ }
2108
+ .um-page[data-real] .um-page__lines {
2109
+ gap: 2px;
2110
+ }
2111
+ .um-page[data-real] .um-page__line {
2112
+ height: auto;
2113
+ width: auto;
2114
+ background: none;
2115
+ font: 500 6.5px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace;
2116
+ white-space: pre;
2117
+ overflow: hidden;
2118
+ color: color-mix(in oklab, var(--um-text) calc(18% + var(--ink) * 72%), transparent);
2119
+ }
2120
+ .um-page[data-real] .um-page__line:nth-child(1) {
2121
+ color: color-mix(in oklab, var(--k) calc(30% + var(--ink) * 70%), var(--um-text));
2122
+ font-weight: 700;
2123
+ }
2124
+ .um-page__scan {
2125
+ position: absolute;
2126
+ left: 0;
2127
+ right: 0;
2128
+ top: 0;
2129
+ height: 2px;
2130
+ background: var(--um-accent);
2131
+ box-shadow: 0 0 14px 3px var(--um-accent-soft), 0 -18px 24px -6px var(--um-accent-soft);
2132
+ transform: translateY(calc(var(--um-p) * 100cqh));
2133
+ opacity: 0;
2134
+ transition: transform calc(var(--um-time) * 400ms) var(--um-ease), opacity var(--um-d);
2135
+ }
2136
+ .um-tile__visual {
2137
+ container-type: size;
2138
+ }
2139
+ .um-page[data-status='uploading'] .um-page__scan {
2140
+ opacity: 1;
2141
+ }
2142
+ .um-page__tag {
2143
+ position: absolute;
2144
+ left: 8px;
2145
+ bottom: 8px;
2146
+ }
2147
+ .um-page__stamp {
2148
+ position: absolute;
2149
+ right: 8px;
2150
+ bottom: 14px;
2151
+ padding: 3px 7px;
2152
+ border: 2px solid var(--um-success);
2153
+ border-radius: 6px;
2154
+ color: var(--um-success);
2155
+ font-size: 10px;
2156
+ font-weight: 800;
2157
+ letter-spacing: 0.06em;
2158
+ text-transform: uppercase;
2159
+ background: color-mix(in oklab, var(--um-success) 8%, var(--um-surface));
2160
+ rotate: -12deg;
2161
+ animation: um-stamp calc(var(--um-time) * 520ms) var(--um-spring) both;
2162
+ }
2163
+ @keyframes um-stamp {
2164
+ 0% { transform: scale(2.4); opacity: 0; }
2165
+ 60% { opacity: 1; }
2166
+ 100% { transform: scale(1); opacity: 1; }
2167
+ }
2168
+ .um-page[data-status='success'] .um-page__fold {
2169
+ width: 30px;
2170
+ height: 30px;
2171
+ }
2172
+ .um-page[data-status='error'] {
2173
+ border-color: var(--um-danger);
2174
+ }
2175
+ .um-media__banner {
2176
+ --um-zone-h: 0px;
2177
+ position: relative;
2178
+ display: flex;
2179
+ align-items: center;
2180
+ gap: 16px;
2181
+ padding: 18px 20px;
2182
+ overflow: hidden;
2183
+ isolation: isolate;
2184
+ background: var(--um-surface);
2185
+ border: 1.5px dashed color-mix(in oklab, var(--um-accent) 40%, var(--um-border));
2186
+ transition: border-color var(--um-d), background var(--um-d);
2187
+ }
2188
+ .um-media__banner[data-um-drag='accept'] {
2189
+ border-style: solid;
2190
+ border-color: var(--um-accent);
2191
+ background: var(--um-tint);
2192
+ }
2193
+ .um-media__banner[data-um-drag='reject'] {
2194
+ border-color: var(--um-danger);
2195
+ }
2196
+ .um-media__banner-icon {
2197
+ display: grid;
2198
+ place-items: center;
2199
+ flex: none;
2200
+ width: 48px;
2201
+ height: 48px;
2202
+ border-radius: 14px;
2203
+ color: #fff;
2204
+ background: var(--um-gradient);
2205
+ }
2206
+ .um-media__banner-text {
2207
+ display: grid;
2208
+ gap: 2px;
2209
+ flex: 1;
2210
+ min-width: 0;
2211
+ }
2212
+ .um-media__banner-text > span {
2213
+ color: var(--um-muted);
2214
+ font-size: 0.9em;
2215
+ }
2216
+ .um-media__deco {
2217
+ position: absolute;
2218
+ right: 0;
2219
+ bottom: 0;
2220
+ top: 0;
2221
+ width: 46%;
2222
+ z-index: -1;
2223
+ display: flex;
2224
+ align-items: center;
2225
+ justify-content: flex-end;
2226
+ gap: 4px;
2227
+ padding-right: 18px;
2228
+ opacity: 0.18;
2229
+ -webkit-mask-image: linear-gradient(90deg, transparent, #000 60%);
2230
+ mask-image: linear-gradient(90deg, transparent, #000 60%);
2231
+ }
2232
+ .um-media__deco > span {
2233
+ width: 4px;
2234
+ height: 40%;
2235
+ border-radius: 4px;
2236
+ background: var(--um-accent);
2237
+ transform: scaleY(calc(0.3 + mod(calc(var(--i) * 37), 10) / 14));
2238
+ }
2239
+ .um-media__banner[data-um-drag='accept'] .um-media__deco {
2240
+ opacity: 0.5;
2241
+ }
2242
+ .um-media__banner[data-um-drag='accept'] .um-media__deco > span {
2243
+ animation: um-eq calc(var(--um-time) * 700ms) ease-in-out infinite alternate;
2244
+ animation-delay: calc(var(--i) * -63ms);
2245
+ }
2246
+ @keyframes um-eq {
2247
+ from { transform: scaleY(0.2); }
2248
+ to { transform: scaleY(1.1); }
2249
+ }
2250
+ .um-media--film .um-media__deco > span {
2251
+ width: 10px;
2252
+ height: 14px;
2253
+ border-radius: 2px;
2254
+ transform: none;
2255
+ }
2256
+ .um-vrow {
2257
+ position: relative;
2258
+ display: flex;
2259
+ align-items: center;
2260
+ gap: 14px;
2261
+ padding: 10px 10px 10px 12px;
2262
+ border-radius: calc(var(--um-radius) * 0.75);
2263
+ background: var(--um-surface);
2264
+ border: 1px solid var(--um-border);
2265
+ }
2266
+ .um-vrow[data-status='error'] {
2267
+ border-color: color-mix(in oklab, var(--um-danger) 45%, var(--um-border));
2268
+ }
2269
+ .um-vrow[data-shake] {
2270
+ animation: um-shake calc(var(--um-time) * 480ms) var(--um-ease);
2271
+ }
2272
+ .um-vrow__visual {
2273
+ position: relative;
2274
+ flex: none;
2275
+ width: 64px;
2276
+ height: 64px;
2277
+ border-radius: 10px;
2278
+ overflow: hidden;
2279
+ }
2280
+ .um-vrow[data-visual='filmstrip'] .um-vrow__visual {
2281
+ width: min(52%, 300px);
2282
+ height: 64px;
2283
+ overflow: visible;
2284
+ }
2285
+ .um-vrow[data-visual='waveform'] .um-vrow__visual {
2286
+ width: min(48%, 280px);
2287
+ height: 48px;
2288
+ overflow: visible;
2289
+ }
2290
+ .um-vrow[data-visual='page'] .um-vrow__visual {
2291
+ width: 52px;
2292
+ height: 66px;
2293
+ overflow: visible;
2294
+ container-type: size;
2295
+ }
2296
+ .um-vrow[data-visual='page'] .um-page {
2297
+ padding: 12px 7px 7px;
2298
+ }
2299
+ .um-vrow[data-visual='page'] .um-page__lines {
2300
+ gap: 3.5px;
2301
+ }
2302
+ .um-vrow[data-visual='page'] .um-page__line {
2303
+ height: 2.5px;
2304
+ }
2305
+ .um-vrow[data-visual='page'] .um-page[data-real] .um-page__line {
2306
+ font-size: 3.5px;
2307
+ }
2308
+ .um-vrow[data-visual='page'] .um-page__tag,
2309
+ .um-vrow[data-visual='page'] .um-page__stamp {
2310
+ display: none;
2311
+ }
2312
+ .um-vrow[data-visual='card'] .um-vrow__visual {
2313
+ display: grid;
2314
+ place-items: center;
2315
+ overflow: visible;
2316
+ }
2317
+ .um-vrow__body {
2318
+ flex: 1;
2319
+ min-width: 0;
2320
+ display: grid;
2321
+ gap: 4px;
2322
+ }
2323
+ .um-vrow__burst {
2324
+ left: 40px;
2325
+ }
2326
+ .um-film {
2327
+ position: absolute;
2328
+ inset: 0;
2329
+ display: block;
2330
+ border-radius: 6px;
2331
+ background: #121218;
2332
+ padding: 10px 6px;
2333
+ overflow: hidden;
2334
+ }
2335
+ .um-film::before,
2336
+ .um-film::after {
2337
+ content: '';
2338
+ position: absolute;
2339
+ left: 0;
2340
+ right: 0;
2341
+ height: 5px;
2342
+ background: repeating-linear-gradient(90deg, transparent 0 4px, rgb(255 255 255 / 0.55) 4px 9px, transparent 9px 12px);
2343
+ opacity: 0.7;
2344
+ animation: um-film-roll calc(var(--um-time) * 1s) linear infinite;
2345
+ animation-play-state: paused;
2346
+ }
2347
+ .um-film::before { top: 2.5px; }
2348
+ .um-film::after { bottom: 2.5px; }
2349
+ .um-film[data-status='uploading']::before,
2350
+ .um-film[data-status='uploading']::after {
2351
+ animation-play-state: running;
2352
+ }
2353
+ @keyframes um-film-roll {
2354
+ to { background-position: 12px 0; }
2355
+ }
2356
+ .um-film__strip {
2357
+ display: grid;
2358
+ grid-template-columns: repeat(6, 1fr);
2359
+ gap: 3px;
2360
+ height: 100%;
2361
+ }
2362
+ .um-film__frame {
2363
+ display: grid;
2364
+ place-items: center;
2365
+ overflow: hidden;
2366
+ border-radius: 2px;
2367
+ background: #22222c;
2368
+ color: rgb(255 255 255 / 0.4);
2369
+ filter: grayscale(1) brightness(0.45);
2370
+ transition: filter calc(var(--um-time) * 380ms) var(--um-ease), transform calc(var(--um-time) * 380ms) var(--um-spring);
2371
+ }
2372
+ .um-film__frame img {
2373
+ width: 100%;
2374
+ height: 100%;
2375
+ object-fit: cover;
2376
+ display: block;
2377
+ }
2378
+ .um-film__frame[data-lit] {
2379
+ filter: none;
2380
+ color: #fff;
2381
+ background: color-mix(in oklab, var(--k) 60%, #22222c);
2382
+ animation: um-frame-lit calc(var(--um-time) * 380ms) var(--um-spring);
2383
+ }
2384
+ @keyframes um-frame-lit {
2385
+ 50% { transform: scale(1.08); }
2386
+ }
2387
+ .um-film__playhead {
2388
+ position: absolute;
2389
+ top: 0;
2390
+ bottom: 0;
2391
+ left: calc(6px + var(--um-p) * (100% - 12px));
2392
+ width: 2px;
2393
+ background: var(--um-accent-2);
2394
+ box-shadow: 0 0 10px var(--um-accent-2);
2395
+ transition: left calc(var(--um-time) * 400ms) var(--um-ease);
2396
+ }
2397
+ .um-film[data-status='success'] .um-film__playhead,
2398
+ .um-film[data-status='pending'] .um-film__playhead {
2399
+ opacity: 0;
2400
+ }
2401
+ .um-film[data-status='error'] {
2402
+ box-shadow: 0 0 0 2px var(--um-danger);
2403
+ }
2404
+ .um-wave {
2405
+ position: absolute;
2406
+ inset: 0;
2407
+ display: block;
2408
+ }
2409
+ .um-wave__layer {
2410
+ position: absolute;
2411
+ inset: 0;
2412
+ display: flex;
2413
+ align-items: center;
2414
+ gap: 2px;
2415
+ }
2416
+ .um-wave__layer--fill {
2417
+ clip-path: inset(0 calc((1 - var(--um-p)) * 100%) 0 0);
2418
+ transition: clip-path calc(var(--um-time) * 400ms) var(--um-ease);
2419
+ }
2420
+ .um-wave__bar {
2421
+ flex: 1;
2422
+ height: calc(var(--h) * 100%);
2423
+ min-height: 3px;
2424
+ border-radius: 3px;
2425
+ background: color-mix(in oklab, var(--um-muted) 30%, transparent);
2426
+ }
2427
+ .um-wave__layer--fill .um-wave__bar {
2428
+ background: linear-gradient(180deg, var(--um-accent-2), var(--um-accent));
2429
+ }
2430
+ .um-wave[data-status='success'] .um-wave__layer--fill .um-wave__bar {
2431
+ background: var(--um-success);
2432
+ }
2433
+ .um-wave[data-status='error'] .um-wave__layer--fill .um-wave__bar {
2434
+ background: var(--um-danger);
2435
+ }
2436
+ .um-wave__bar[data-head] {
2437
+ animation: um-eq calc(var(--um-time) * 260ms) ease-in-out infinite alternate;
2438
+ }
2439
+ .um-wave[data-ripple] .um-wave__layer--fill .um-wave__bar {
2440
+ animation: um-wave-ripple calc(var(--um-time) * 700ms) var(--um-ease) both;
2441
+ animation-delay: calc(var(--bi) * 500ms * var(--um-time));
2442
+ }
2443
+ @keyframes um-wave-ripple {
2444
+ 40% { transform: scaleY(1.45); }
2445
+ }
2446
+ .um-wave__play {
2447
+ flex: none;
2448
+ color: #fff;
2449
+ background: var(--um-gradient);
2450
+ }
2451
+ .um-wave__play:hover {
2452
+ color: #fff;
2453
+ background: var(--um-gradient);
2454
+ transform: scale(1.06);
2455
+ }
2456
+ .um-wave__play[aria-pressed='true'] {
2457
+ box-shadow: 0 0 0 4px var(--um-accent-soft);
2458
+ }
2459
+ @container (max-width: 520px) {
2460
+ .um-vrow {
2461
+ flex-wrap: wrap;
2462
+ }
2463
+ .um-vrow[data-visual='filmstrip'] .um-vrow__visual,
2464
+ .um-vrow[data-visual='waveform'] .um-vrow__visual {
2465
+ width: 100%;
2466
+ order: 3;
2467
+ }
2468
+ .um-media__banner .um-badge {
2469
+ display: none;
2470
+ }
2471
+ }
2472
+ .um-orbit {
2473
+ display: grid;
2474
+ gap: var(--um-gap);
2475
+ }
2476
+ .um-orbit__zone {
2477
+ --um-zone-h: 0px;
2478
+ display: flex;
2479
+ align-items: center;
2480
+ gap: 24px;
2481
+ padding: 16px 28px 16px 16px;
2482
+ overflow: hidden;
2483
+ background:
2484
+ radial-gradient(circle at 160px 50%, var(--um-tint-strong), transparent 180px),
2485
+ var(--um-surface);
2486
+ border: 1px solid var(--um-border);
2487
+ box-shadow: var(--um-shadow);
2488
+ }
2489
+ .um-orbit__zone[data-um-drag='accept'] {
2490
+ border-color: var(--um-accent);
2491
+ }
2492
+ .um-orbit__zone[data-um-drag='reject'] {
2493
+ border-color: var(--um-danger);
2494
+ }
2495
+ .um-orbit__system {
2496
+ position: relative;
2497
+ flex: none;
2498
+ width: 296px;
2499
+ height: 296px;
2500
+ }
2501
+ .um-orbit__lane {
2502
+ position: absolute;
2503
+ left: 50%;
2504
+ top: 50%;
2505
+ width: calc(var(--r) * 2);
2506
+ height: calc(var(--r) * 2);
2507
+ translate: -50% -50%;
2508
+ border-radius: 50%;
2509
+ border: 1px dashed color-mix(in oklab, var(--um-accent) 25%, var(--um-border));
2510
+ transition: scale calc(var(--um-time) * 600ms) var(--um-spring);
2511
+ }
2512
+ .um-orbit__zone[data-um-drag='accept'] .um-orbit__lane {
2513
+ scale: 1.08;
2514
+ border-color: var(--um-accent);
2515
+ }
2516
+ .um-orbit__track {
2517
+ position: absolute;
2518
+ left: 50%;
2519
+ top: 50%;
2520
+ width: 0;
2521
+ height: 0;
2522
+ animation: um-spin calc(var(--um-time) * var(--speed)) linear infinite;
2523
+ animation-delay: var(--delay);
2524
+ }
2525
+ .um-orbit[data-active] .um-orbit__track[data-status='uploading'] {
2526
+ animation-duration: calc(var(--um-time) * var(--speed) * 0.55);
2527
+ }
2528
+ .um-orbit__track[data-status='error'],
2529
+ .um-orbit__track[data-status='paused'],
2530
+ .um-orbit__track[data-status='canceled'] {
2531
+ animation-play-state: paused;
2532
+ }
2533
+ .um-orbit__planet {
2534
+ position: absolute;
2535
+ transform: translateX(var(--r));
2536
+ transition: transform calc(var(--um-time) * 700ms) var(--um-ease);
2537
+ }
2538
+ .um-orbit__body {
2539
+ position: absolute;
2540
+ translate: -50% -50%;
2541
+ display: grid;
2542
+ place-items: center;
2543
+ padding: 4px;
2544
+ border-radius: 12px;
2545
+ background: var(--um-surface);
2546
+ border: 1.5px solid var(--k);
2547
+ box-shadow: 0 6px 16px -6px color-mix(in oklab, var(--k) 60%, transparent);
2548
+ animation: um-spin calc(var(--um-time) * var(--speed)) linear infinite reverse;
2549
+ animation-delay: var(--delay);
2550
+ transition: scale calc(var(--um-time) * 700ms) var(--um-ease), opacity calc(var(--um-time) * 700ms);
2551
+ }
2552
+ .um-orbit__body .um-thumb {
2553
+ border-radius: 8px;
2554
+ }
2555
+ .um-orbit__track[data-status='error'] .um-orbit__body,
2556
+ .um-orbit__track[data-status='paused'] .um-orbit__body,
2557
+ .um-orbit__track[data-status='canceled'] .um-orbit__body {
2558
+ animation-play-state: paused;
2559
+ }
2560
+ .um-orbit__track[data-status='error'] .um-orbit__body {
2561
+ border-color: var(--um-danger);
2562
+ box-shadow: 0 0 0 4px color-mix(in oklab, var(--um-danger) 20%, transparent);
2563
+ }
2564
+ .um-orbit__track[data-status='canceled'] .um-orbit__body,
2565
+ .um-orbit__track[data-status='pending'] .um-orbit__body {
2566
+ opacity: 0.55;
2567
+ }
2568
+ .um-orbit__track[data-exiting] .um-orbit__body {
2569
+ scale: 0.1;
2570
+ opacity: 0;
2571
+ }
2572
+ .um-orbit__core {
2573
+ position: absolute;
2574
+ left: 50%;
2575
+ top: 50%;
2576
+ width: 84px;
2577
+ height: 84px;
2578
+ translate: -50% -50%;
2579
+ display: grid;
2580
+ place-items: center;
2581
+ border-radius: 50%;
2582
+ color: #fff;
2583
+ background: var(--um-gradient);
2584
+ box-shadow: 0 0 0 8px var(--um-accent-soft), 0 18px 40px -12px var(--um-accent);
2585
+ z-index: 2;
2586
+ }
2587
+ .um-orbit__core[data-pulse] {
2588
+ animation: um-orbit-pulse calc(var(--um-time) * 700ms) var(--um-spring);
2589
+ }
2590
+ @keyframes um-orbit-pulse {
2591
+ 30% { transform: scale(1.18); box-shadow: 0 0 0 22px transparent, 0 18px 40px -12px var(--um-accent); }
2592
+ }
2593
+ .um-orbit__percent {
2594
+ font-weight: 800;
2595
+ font-size: 1.35em;
2596
+ font-variant-numeric: tabular-nums;
2597
+ }
2598
+ .um-orbit__core .um-check__circle {
2599
+ fill: rgb(255 255 255 / 0.2);
2600
+ }
2601
+ .um-orbit__text {
2602
+ display: grid;
2603
+ gap: 6px;
2604
+ min-width: 0;
2605
+ }
2606
+ .um-orbit__text strong {
2607
+ font-size: 1.2em;
2608
+ letter-spacing: -0.01em;
2609
+ }
2610
+ .um-orbit__text > span {
2611
+ color: var(--um-muted);
2612
+ font-variant-numeric: tabular-nums;
2613
+ }
2614
+ .um-orbit__text .um-badge {
2615
+ justify-self: start;
2616
+ }
2617
+ @container (max-width: 560px) {
2618
+ .um-orbit__zone {
2619
+ flex-direction: column;
2620
+ padding: 16px;
2621
+ text-align: center;
2622
+ }
2623
+ .um-orbit__system {
2624
+ width: 260px;
2625
+ height: 260px;
2626
+ scale: 0.88;
2627
+ }
2628
+ .um-orbit__text .um-badge {
2629
+ justify-self: center;
2630
+ }
2631
+ }
2632
+ .um-portal {
2633
+ display: grid;
2634
+ gap: var(--um-gap);
2635
+ }
2636
+ .um-portal__zone {
2637
+ --um-zone-h: 260px;
2638
+ display: flex;
2639
+ align-items: center;
2640
+ gap: 28px;
2641
+ padding: 24px 28px;
2642
+ overflow: hidden;
2643
+ isolation: isolate;
2644
+ background:
2645
+ radial-gradient(circle at 22% 50%, var(--um-tint-strong), transparent 55%),
2646
+ var(--um-surface);
2647
+ border: 1px solid var(--um-border);
2648
+ box-shadow: var(--um-shadow);
2649
+ }
2650
+ .um-portal__gate {
2651
+ position: relative;
2652
+ flex: none;
2653
+ width: 168px;
2654
+ height: 168px;
2655
+ display: grid;
2656
+ place-items: center;
2657
+ }
2658
+ .um-portal__halo {
2659
+ position: absolute;
2660
+ inset: -18px;
2661
+ border-radius: 50%;
2662
+ background: radial-gradient(circle, color-mix(in oklab, var(--um-accent) 30%, transparent), transparent 70%);
2663
+ opacity: 0.5;
2664
+ transition: opacity var(--um-d), transform var(--um-d-slow) var(--um-spring);
2665
+ }
2666
+ .um-portal__ring {
2667
+ position: absolute;
2668
+ inset: 0;
2669
+ border-radius: 50%;
2670
+ background: conic-gradient(from 0deg, var(--um-accent), var(--um-accent-2), transparent 40%, var(--um-accent) 60%, var(--um-accent-2), var(--um-accent));
2671
+ -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 10px), #000 calc(100% - 9px));
2672
+ mask: radial-gradient(farthest-side, transparent calc(100% - 10px), #000 calc(100% - 9px));
2673
+ animation: um-spin calc(var(--um-time) * 6s) linear infinite;
2674
+ transition: inset var(--um-d-slow) var(--um-spring);
2675
+ }
2676
+ .um-portal__ring--inner {
2677
+ inset: 18px;
2678
+ opacity: 0.7;
2679
+ animation-direction: reverse;
2680
+ animation-duration: calc(var(--um-time) * 4s);
2681
+ -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 4px), #000 calc(100% - 3px));
2682
+ mask: radial-gradient(farthest-side, transparent calc(100% - 4px), #000 calc(100% - 3px));
2683
+ }
2684
+ .um-portal__core {
2685
+ position: absolute;
2686
+ inset: 26px;
2687
+ border-radius: 50%;
2688
+ display: grid;
2689
+ place-items: center;
2690
+ background:
2691
+ repeating-conic-gradient(from 0deg, color-mix(in oklab, var(--um-accent) 22%, transparent) 0 12deg, transparent 12deg 30deg),
2692
+ radial-gradient(circle, color-mix(in oklab, var(--um-accent-2) 40%, #0b0b18) 0%, #0b0b18 70%);
2693
+ box-shadow: inset 0 0 30px rgb(0 0 0 / 0.6);
2694
+ animation: um-spin calc(var(--um-time) * 10s) linear infinite reverse;
2695
+ }
2696
+ .um-portal__core .um-check {
2697
+ animation: um-spin calc(var(--um-time) * 10s) linear infinite;
2698
+ }
2699
+ .um-portal__progress {
2700
+ position: absolute;
2701
+ inset: -10px;
2702
+ width: calc(100% + 20px);
2703
+ height: calc(100% + 20px);
2704
+ rotate: -90deg;
2705
+ overflow: visible;
2706
+ }
2707
+ .um-portal__progress circle {
2708
+ fill: none;
2709
+ stroke: var(--um-accent);
2710
+ stroke-width: 2;
2711
+ stroke-linecap: round;
2712
+ stroke-dasharray: 1;
2713
+ stroke-dashoffset: calc(1 - var(--um-p));
2714
+ opacity: 0;
2715
+ transition: stroke-dashoffset var(--um-d) var(--um-ease), opacity var(--um-d), stroke var(--um-d);
2716
+ }
2717
+ .um-portal[data-active] .um-portal__progress circle {
2718
+ opacity: 1;
2719
+ }
2720
+ .um-portal[data-active] .um-portal__ring {
2721
+ animation-duration: calc(var(--um-time) * 2.2s);
2722
+ }
2723
+ .um-portal__zone[data-um-drag='accept'] .um-portal__ring {
2724
+ inset: -10px;
2725
+ animation-duration: calc(var(--um-time) * 1.2s);
2726
+ }
2727
+ .um-portal__zone[data-um-drag='accept'] .um-portal__halo {
2728
+ opacity: 1;
2729
+ transform: scale(1.25);
2730
+ }
2731
+ .um-portal__zone[data-um-drag='reject'] .um-portal__ring {
2732
+ filter: grayscale(1);
2733
+ animation-play-state: paused;
2734
+ }
2735
+ .um-portal__gate[data-flash] .um-portal__halo {
2736
+ animation: um-portal-flash calc(var(--um-time) * 1.1s) var(--um-ease);
2737
+ }
2738
+ .um-portal[data-complete] .um-portal__progress circle {
2739
+ stroke: var(--um-success);
2740
+ opacity: 1;
2741
+ }
2742
+ @keyframes um-portal-flash {
2743
+ 0% { opacity: 0.5; transform: scale(1); background: radial-gradient(circle, color-mix(in oklab, var(--um-success) 60%, transparent), transparent 70%); }
2744
+ 40% { opacity: 1; transform: scale(1.5); }
2745
+ 100% { opacity: 0.5; transform: scale(1); }
2746
+ }
2747
+ @keyframes um-spin {
2748
+ to { rotate: 360deg; }
2749
+ }
2750
+ .um-portal__ghost {
2751
+ position: absolute;
2752
+ left: 50%;
2753
+ top: 50%;
2754
+ width: 0;
2755
+ height: 0;
2756
+ z-index: 2;
2757
+ pointer-events: none;
2758
+ animation: um-spiral calc(var(--um-time) * 1150ms) cubic-bezier(0.55, 0, 0.6, 1) both;
2759
+ }
2760
+ .um-portal__ghost .um-ficon {
2761
+ position: absolute;
2762
+ translate: -50% -50%;
2763
+ }
2764
+ @keyframes um-spiral {
2765
+ 0% { transform: rotate(var(--a)) translateX(var(--r)) scale(1); opacity: 0; }
2766
+ 12% { opacity: 1; }
2767
+ 100% { transform: rotate(calc(var(--a) + 540deg)) translateX(0) scale(0.05); opacity: 0.2; }
2768
+ }
2769
+ .um-portal__text {
2770
+ display: grid;
2771
+ gap: 6px;
2772
+ min-width: 0;
2773
+ }
2774
+ .um-portal__text strong {
2775
+ font-size: 1.2em;
2776
+ letter-spacing: -0.01em;
2777
+ }
2778
+ .um-portal__text > span {
2779
+ color: var(--um-muted);
2780
+ font-variant-numeric: tabular-nums;
2781
+ }
2782
+ .um-portal__text .um-badge {
2783
+ justify-self: start;
2784
+ }
2785
+ @container (max-width: 500px) {
2786
+ .um-portal__zone {
2787
+ flex-direction: column;
2788
+ text-align: center;
2789
+ }
2790
+ .um-portal__text .um-badge {
2791
+ justify-self: center;
2792
+ }
2793
+ }
2794
+ .um-ring {
2795
+ display: grid;
2796
+ gap: var(--um-gap);
2797
+ }
2798
+ .um-ring__zone {
2799
+ --um-zone-h: 0px;
2800
+ display: flex;
2801
+ align-items: center;
2802
+ gap: 32px;
2803
+ padding: 24px 28px;
2804
+ background: var(--um-surface);
2805
+ border: 1px solid var(--um-border);
2806
+ box-shadow: var(--um-shadow);
2807
+ transition: border-color var(--um-d), background var(--um-d);
2808
+ }
2809
+ .um-ring__zone[data-um-drag='accept'] {
2810
+ border-color: var(--um-accent);
2811
+ background: var(--um-tint);
2812
+ }
2813
+ .um-ring__zone[data-um-drag='reject'] {
2814
+ border-color: var(--um-danger);
2815
+ }
2816
+ .um-ring__dial {
2817
+ position: relative;
2818
+ flex: none;
2819
+ width: 184px;
2820
+ height: 184px;
2821
+ transition: transform var(--um-d) var(--um-spring);
2822
+ }
2823
+ .um-ring__zone[data-um-drag='accept'] .um-ring__dial {
2824
+ transform: scale(1.05) rotate(calc(6deg * var(--um-intensity)));
2825
+ }
2826
+ .um-ring__dial svg {
2827
+ display: block;
2828
+ overflow: visible;
2829
+ }
2830
+ .um-ring__base {
2831
+ fill: none;
2832
+ stroke: var(--um-surface-2);
2833
+ stroke-dasharray: 3 7;
2834
+ }
2835
+ .um-ring__segment {
2836
+ transform-origin: 92px 92px;
2837
+ transition: rotate calc(var(--um-time) * 600ms) var(--um-spring);
2838
+ animation: um-ring-seg-in calc(var(--um-time) * 600ms) var(--um-ease) both;
2839
+ }
2840
+ @keyframes um-ring-seg-in {
2841
+ from { opacity: 0; }
2842
+ }
2843
+ .um-ring__track {
2844
+ fill: none;
2845
+ stroke: color-mix(in oklab, var(--k) 18%, var(--um-surface-2));
2846
+ stroke-linecap: round;
2847
+ transition: stroke-dasharray calc(var(--um-time) * 600ms) var(--um-ease);
2848
+ }
2849
+ .um-ring__fill {
2850
+ fill: none;
2851
+ stroke: var(--k);
2852
+ stroke-linecap: round;
2853
+ transition: stroke-dasharray var(--um-d) var(--um-ease), stroke var(--um-d);
2854
+ }
2855
+ .um-ring__segment[data-status='error'] .um-ring__fill,
2856
+ .um-ring__segment[data-status='error'] .um-ring__track {
2857
+ stroke: var(--um-danger);
2858
+ stroke-dasharray: 2 4;
2859
+ }
2860
+ .um-ring__segment[data-status='pending'] .um-ring__track {
2861
+ stroke-dasharray: 2 5;
2862
+ }
2863
+ .um-ring[data-done] .um-ring__fill {
2864
+ stroke: var(--um-success);
2865
+ }
2866
+ .um-ring[data-done] .um-ring__dial svg {
2867
+ animation: um-ring-merge calc(var(--um-time) * 900ms) var(--um-spring);
2868
+ }
2869
+ @keyframes um-ring-merge {
2870
+ 40% { transform: scale(0.92) rotate(-20deg); }
2871
+ }
2872
+ .um-ring__center {
2873
+ position: absolute;
2874
+ inset: 0;
2875
+ display: grid;
2876
+ place-content: center;
2877
+ justify-items: center;
2878
+ color: var(--um-accent);
2879
+ text-align: center;
2880
+ }
2881
+ .um-ring__percent {
2882
+ font-size: 2.2em;
2883
+ font-weight: 800;
2884
+ color: var(--um-text);
2885
+ letter-spacing: -0.03em;
2886
+ line-height: 1;
2887
+ font-variant-numeric: tabular-nums;
2888
+ }
2889
+ .um-ring__count {
2890
+ margin-top: 4px;
2891
+ color: var(--um-muted);
2892
+ font-size: 0.82em;
2893
+ }
2894
+ .um-ring__text {
2895
+ display: grid;
2896
+ gap: 6px;
2897
+ min-width: 0;
2898
+ }
2899
+ .um-ring__text strong {
2900
+ font-size: 1.2em;
2901
+ letter-spacing: -0.01em;
2902
+ }
2903
+ .um-ring__detail {
2904
+ color: var(--um-muted);
2905
+ font-variant-numeric: tabular-nums;
2906
+ }
2907
+ .um-ring__browse {
2908
+ margin: 6px 0 2px;
2909
+ }
2910
+ .um-ring__text .um-badge {
2911
+ justify-self: start;
2912
+ }
2913
+ @container (max-width: 520px) {
2914
+ .um-ring__zone {
2915
+ flex-direction: column;
2916
+ text-align: center;
2917
+ }
2918
+ .um-ring__text .um-badge {
2919
+ justify-self: center;
2920
+ }
2921
+ }
2922
+ .um-stack__layout {
2923
+ display: grid;
2924
+ grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr);
2925
+ gap: calc(var(--um-gap) * 1.5);
2926
+ }
2927
+ @container (max-width: 560px) {
2928
+ .um-stack__layout {
2929
+ grid-template-columns: 1fr;
2930
+ }
2931
+ }
2932
+ .um-stack__deck {
2933
+ --um-zone-h: 300px;
2934
+ position: relative;
2935
+ perspective: 900px;
2936
+ perspective-origin: 50% -20%;
2937
+ border-radius: calc(var(--um-radius) * 1.2);
2938
+ background: radial-gradient(ellipse at 50% 100%, var(--um-tint-strong), transparent 70%), var(--um-surface-2);
2939
+ border: 1px solid var(--um-border);
2940
+ cursor: default;
2941
+ transition: border-color var(--um-d), background var(--um-d);
2942
+ }
2943
+ .um-stack__deck[data-count='0'] {
2944
+ cursor: pointer;
2945
+ }
2946
+ .um-stack__deck[data-um-drag='accept'] {
2947
+ border-color: var(--um-accent);
2948
+ background: radial-gradient(ellipse at 50% 100%, var(--um-accent-soft), transparent 70%), var(--um-tint);
2949
+ }
2950
+ .um-stack__deck[data-um-drag='reject'] {
2951
+ border-color: var(--um-danger);
2952
+ }
2953
+ .um-stack__card,
2954
+ .um-stack__ghost,
2955
+ .um-stack__placeholder {
2956
+ --d: 0;
2957
+ position: absolute;
2958
+ left: 50%;
2959
+ bottom: 34px;
2960
+ width: min(300px, 82%);
2961
+ translate: -50% 0;
2962
+ border-radius: 16px;
2963
+ transform-origin: 50% 100%;
2964
+ transform: translateY(calc(var(--d) * -16px)) translateZ(calc(var(--d) * -40px)) rotateX(calc(var(--d) * 4deg));
2965
+ transition: transform calc(var(--um-time) * 560ms) var(--um-spring), opacity var(--um-d), filter var(--um-d);
2966
+ z-index: calc(10 - var(--d));
2967
+ }
2968
+ .um-stack__card {
2969
+ display: grid;
2970
+ grid-template-columns: auto minmax(0, 1fr);
2971
+ align-items: center;
2972
+ gap: 8px 12px;
2973
+ padding: 14px;
2974
+ background: var(--um-surface);
2975
+ border: 1px solid var(--um-border);
2976
+ box-shadow: 0 calc(10px - var(--d) * 2px) 30px -14px rgb(20 20 50 / 0.35);
2977
+ filter: brightness(calc(1 - var(--d) * 0.04));
2978
+ animation: um-stack-in calc(var(--um-time) * 620ms) var(--um-spring) both;
2979
+ }
2980
+ .um-stack__card > .um-progress,
2981
+ .um-stack__card > .um-stack__foot {
2982
+ grid-column: 1 / -1;
2983
+ }
2984
+ .um-stack__card:not([data-front]) > :not(.um-thumb, .um-ficon, .um-stack__meta) {
2985
+ visibility: hidden;
2986
+ }
2987
+ @keyframes um-stack-in {
2988
+ from { opacity: 0; transform: translateY(-120px) rotateX(-30deg) scale(0.9); }
2989
+ }
2990
+ .um-stack__card[data-status='error'] {
2991
+ border-color: color-mix(in oklab, var(--um-danger) 50%, var(--um-border));
2992
+ animation: um-shake calc(var(--um-time) * 480ms) var(--um-ease);
2993
+ }
2994
+ .um-stack__card[data-exit='land'] {
2995
+ animation: um-stack-land calc(var(--um-time) * 700ms) var(--um-ease) forwards;
2996
+ z-index: 20;
2997
+ }
2998
+ .um-stack__card[data-exit='discard'] {
2999
+ animation: um-stack-discard calc(var(--um-time) * 500ms) var(--um-ease) forwards;
3000
+ }
3001
+ @keyframes um-stack-land {
3002
+ 0% { transform: none; opacity: 1; }
3003
+ 40% { transform: translate(40px, -40px) rotate(8deg) scale(1.02); opacity: 1; }
3004
+ 100% { transform: translate(140%, -10px) rotate(18deg) scale(0.4); opacity: 0; }
3005
+ }
3006
+ @keyframes um-stack-discard {
3007
+ to { transform: translateY(60px) rotate(-6deg) scale(0.9); opacity: 0; }
3008
+ }
3009
+ .um-stack__deck:hover .um-stack__card:not([data-front]):not([data-exit]),
3010
+ .um-stack__deck:focus-within .um-stack__card:not([data-front]):not([data-exit]) {
3011
+ transform: translateY(calc(var(--d) * -26px)) translateX(calc(var(--d) * 14px * var(--um-intensity))) rotate(calc(var(--d) * 4deg * var(--um-intensity))) translateZ(calc(var(--d) * -30px));
3012
+ }
3013
+ .um-stack__meta {
3014
+ display: grid;
3015
+ min-width: 0;
3016
+ }
3017
+ .um-stack__name {
3018
+ font-weight: 650;
3019
+ white-space: nowrap;
3020
+ overflow: hidden;
3021
+ text-overflow: ellipsis;
3022
+ }
3023
+ .um-stack__size {
3024
+ color: var(--um-muted);
3025
+ font-size: 0.85em;
3026
+ }
3027
+ .um-stack__foot {
3028
+ display: flex;
3029
+ align-items: center;
3030
+ justify-content: space-between;
3031
+ gap: 8px;
3032
+ min-width: 0;
3033
+ }
3034
+ .um-stack__empty {
3035
+ position: absolute;
3036
+ inset: 0;
3037
+ }
3038
+ .um-stack__ghost {
3039
+ height: 120px;
3040
+ border: 1.5px dashed color-mix(in oklab, var(--um-muted) 30%, transparent);
3041
+ background: color-mix(in oklab, var(--um-surface) 60%, transparent);
3042
+ }
3043
+ .um-stack__placeholder {
3044
+ display: grid;
3045
+ justify-items: center;
3046
+ align-content: center;
3047
+ gap: 4px;
3048
+ min-height: 150px;
3049
+ padding: 16px;
3050
+ text-align: center;
3051
+ background: var(--um-surface);
3052
+ border: 1.5px dashed color-mix(in oklab, var(--um-accent) 45%, transparent);
3053
+ color: var(--um-muted);
3054
+ }
3055
+ .um-stack__placeholder svg {
3056
+ color: var(--um-accent);
3057
+ }
3058
+ .um-stack__placeholder strong {
3059
+ color: var(--um-text);
3060
+ }
3061
+ .um-stack__deck[data-um-drag='accept'] .um-stack__ghost {
3062
+ transform: translateY(calc(var(--d) * -28px)) rotate(calc(var(--d) * -5deg));
3063
+ }
3064
+ .um-stack__deck[data-um-drag='accept'] .um-stack__placeholder {
3065
+ transform: translateY(-10px) scale(1.04);
3066
+ border-color: var(--um-accent);
3067
+ }
3068
+ .um-stack__more {
3069
+ position: absolute;
3070
+ top: 14px;
3071
+ left: 14px;
3072
+ padding: 2px 8px;
3073
+ border-radius: 999px;
3074
+ font-size: 12px;
3075
+ font-weight: 700;
3076
+ background: var(--um-surface);
3077
+ border: 1px solid var(--um-border);
3078
+ }
3079
+ .um-stack__add {
3080
+ position: absolute;
3081
+ top: 10px;
3082
+ right: 10px;
3083
+ }
3084
+ .um-stack__tray {
3085
+ display: grid;
3086
+ align-content: start;
3087
+ gap: 8px;
3088
+ padding: 14px;
3089
+ border-radius: calc(var(--um-radius) * 1.2);
3090
+ border: 1px solid var(--um-border);
3091
+ background: var(--um-surface);
3092
+ min-height: 120px;
3093
+ }
3094
+ .um-stack__tray-title {
3095
+ font-size: 0.85em;
3096
+ color: var(--um-muted);
3097
+ }
3098
+ .um-stack__tray-title strong {
3099
+ color: var(--um-success);
3100
+ }
3101
+ .um-stack__tray-empty {
3102
+ color: var(--um-muted);
3103
+ font-size: 0.85em;
3104
+ opacity: 0.7;
3105
+ }
3106
+ .um-stack__done {
3107
+ gap: 6px;
3108
+ }
3109
+ .um-stack__done .um-list__item {
3110
+ animation: um-stack-tray-in calc(var(--um-time) * 600ms) var(--um-spring) both;
3111
+ }
3112
+ @keyframes um-stack-tray-in {
3113
+ from { opacity: 0; transform: translateX(-60px) rotate(-10deg) scale(0.8); }
3114
+ }
3115
+ .um-stack__chip {
3116
+ display: flex;
3117
+ align-items: center;
3118
+ gap: 8px;
3119
+ padding: 5px 8px 5px 5px;
3120
+ border-radius: 10px;
3121
+ background: var(--um-surface-2);
3122
+ font-size: 0.85em;
3123
+ }
3124
+ .um-stack__chip .um-ficon {
3125
+ scale: 0.8;
3126
+ }
3127
+ .um-stack__chip-name {
3128
+ flex: 1;
3129
+ min-width: 0;
3130
+ white-space: nowrap;
3131
+ overflow: hidden;
3132
+ text-overflow: ellipsis;
3133
+ }
3134
+ .um-stack__toggle {
3135
+ margin-left: auto;
3136
+ }
3137
+ .um-wavebar {
3138
+ display: grid;
3139
+ gap: 10px;
3140
+ }
3141
+ .um-wavebar__bar {
3142
+ --um-zone-h: 0px;
3143
+ position: relative;
3144
+ display: flex;
3145
+ align-items: center;
3146
+ gap: 16px;
3147
+ min-height: 96px;
3148
+ padding: 18px 20px 22px 28px;
3149
+ border-radius: calc(var(--um-radius) * 1.35);
3150
+ background: var(--um-surface);
3151
+ border: 1px solid var(--um-border);
3152
+ box-shadow: var(--um-shadow);
3153
+ overflow: hidden;
3154
+ isolation: isolate;
3155
+ transition: transform var(--um-d) var(--um-spring), box-shadow var(--um-d), border-color var(--um-d);
3156
+ }
3157
+ .um-wavebar[data-state='idle'] .um-wavebar__bar {
3158
+ cursor: pointer;
3159
+ }
3160
+ .um-wavebar[data-state='idle'] .um-wavebar__bar:hover {
3161
+ border-color: color-mix(in oklab, var(--um-accent) 35%, var(--um-border));
3162
+ }
3163
+ .um-wavebar[data-drag='accept'] .um-wavebar__bar {
3164
+ transform: scale(calc(1 + 0.02 * var(--um-intensity)));
3165
+ border-color: var(--um-accent);
3166
+ box-shadow: 0 0 0 4px var(--um-accent-soft), var(--um-shadow);
3167
+ }
3168
+ .um-wavebar[data-drag='reject'] .um-wavebar__bar {
3169
+ border-color: var(--um-danger);
3170
+ animation: um-shake calc(var(--um-time) * 480ms) var(--um-ease);
3171
+ }
3172
+ .um-wavebar__fill {
3173
+ position: absolute;
3174
+ inset: 0;
3175
+ z-index: -1;
3176
+ background: var(--um-tint);
3177
+ transform-origin: left center;
3178
+ transform: scaleX(var(--um-p));
3179
+ transition: transform calc(var(--um-time) * 600ms) var(--um-ease), background var(--um-d-slow);
3180
+ }
3181
+ .um-wavebar__edge {
3182
+ position: absolute;
3183
+ top: 0;
3184
+ bottom: 0;
3185
+ left: calc(var(--um-p) * 100%);
3186
+ width: 1px;
3187
+ z-index: -1;
3188
+ background: color-mix(in oklab, var(--um-accent) 18%, var(--um-border));
3189
+ transition: left calc(var(--um-time) * 600ms) var(--um-ease), opacity var(--um-d);
3190
+ }
3191
+ .um-wavebar[data-state='idle'] .um-wavebar__fill,
3192
+ .um-wavebar[data-state='idle'] .um-wavebar__edge {
3193
+ opacity: 0;
3194
+ }
3195
+ .um-wavebar[data-state='idle'][data-drag='accept'] .um-wavebar__fill {
3196
+ opacity: 1;
3197
+ transform: scaleX(1);
3198
+ background: var(--um-tint-strong);
3199
+ }
3200
+ .um-wavebar[data-state='done'] .um-wavebar__fill {
3201
+ background: color-mix(in oklab, var(--um-success) 8%, var(--um-surface));
3202
+ }
3203
+ .um-wavebar[data-state='done'] .um-wavebar__edge {
3204
+ opacity: 0;
3205
+ }
3206
+ .um-wavebar[data-state='error'] .um-wavebar__fill {
3207
+ background: color-mix(in oklab, var(--um-danger) 7%, var(--um-surface));
3208
+ }
3209
+ .um-wavebar[data-state='paused'] .um-wavebar__fill {
3210
+ background: color-mix(in oklab, var(--um-warning) 8%, var(--um-surface));
3211
+ }
3212
+ .um-wavebar__text {
3213
+ flex: 1;
3214
+ min-width: 0;
3215
+ display: grid;
3216
+ gap: 4px;
3217
+ }
3218
+ .um-wavebar__title {
3219
+ display: flex;
3220
+ align-items: center;
3221
+ gap: 8px;
3222
+ font-size: 1.12em;
3223
+ font-weight: 650;
3224
+ letter-spacing: -0.01em;
3225
+ min-width: 0;
3226
+ }
3227
+ .um-wavebar__check {
3228
+ flex: none;
3229
+ }
3230
+ .um-wavebar__badge {
3231
+ margin-left: 2px;
3232
+ }
3233
+ .um-wavebar__detail {
3234
+ color: var(--um-muted);
3235
+ font-size: 0.95em;
3236
+ font-variant-numeric: tabular-nums;
3237
+ white-space: nowrap;
3238
+ overflow: hidden;
3239
+ text-overflow: ellipsis;
3240
+ }
3241
+ .um-wavebar__hint {
3242
+ font-size: 1em;
3243
+ }
3244
+ .um-wavebar__controls {
3245
+ display: flex;
3246
+ align-items: center;
3247
+ gap: 10px;
3248
+ flex: none;
3249
+ }
3250
+ .um-wavebar__controls .um-icon-btn {
3251
+ width: 40px;
3252
+ height: 40px;
3253
+ background: color-mix(in oklab, var(--um-text) 6%, var(--um-surface));
3254
+ color: var(--um-text);
3255
+ }
3256
+ .um-wavebar__controls .um-icon-btn:hover {
3257
+ background: color-mix(in oklab, var(--um-text) 11%, var(--um-surface));
3258
+ }
3259
+ .um-wavebar__controls .um-icon-btn[data-tone='accent'] {
3260
+ color: var(--um-accent);
3261
+ }
3262
+ .um-wavebar__browse {
3263
+ color: var(--um-accent);
3264
+ background: var(--um-tint-strong);
3265
+ }
3266
+ .um-wavebar__wave-clip {
3267
+ position: absolute;
3268
+ left: 4px;
3269
+ right: 4px;
3270
+ bottom: 10px;
3271
+ height: 16px;
3272
+ overflow: hidden;
3273
+ clip-path: inset(0 calc((1 - var(--um-p)) * 100% - 12px) 0 0);
3274
+ transition: clip-path calc(var(--um-time) * 600ms) var(--um-ease), opacity var(--um-d);
3275
+ pointer-events: none;
3276
+ }
3277
+ .um-wavebar__wave {
3278
+ display: block;
3279
+ width: 200%;
3280
+ height: 100%;
3281
+ fill: none;
3282
+ stroke: var(--um-accent);
3283
+ stroke-width: 1.6;
3284
+ stroke-linecap: round;
3285
+ transform-origin: 50% 50%;
3286
+ animation: um-wave-travel calc(var(--um-time) * 2.4s) linear infinite;
3287
+ transition: transform calc(var(--um-time) * 900ms) var(--um-spring), stroke var(--um-d-slow);
3288
+ }
3289
+ .um-wavebar__wave path {
3290
+ vector-effect: non-scaling-stroke;
3291
+ }
3292
+ .um-wavebar[data-state='idle'] .um-wavebar__wave-clip {
3293
+ opacity: 0;
3294
+ }
3295
+ .um-wavebar[data-state='idle'][data-drag='accept'] .um-wavebar__wave-clip {
3296
+ opacity: 1;
3297
+ clip-path: inset(0 0 0 0);
3298
+ }
3299
+ .um-wavebar[data-drag='accept'] .um-wavebar__wave {
3300
+ transform: scaleY(calc(1 + 0.8 * var(--um-intensity)));
3301
+ animation-duration: calc(var(--um-time) * 0.9s);
3302
+ }
3303
+ .um-wavebar[data-state='paused'] .um-wavebar__wave {
3304
+ animation-play-state: paused;
3305
+ stroke: var(--um-warning);
3306
+ }
3307
+ .um-wavebar[data-state='done'] .um-wavebar__wave {
3308
+ transform: scaleY(0.04);
3309
+ stroke: var(--um-success);
3310
+ animation-play-state: paused;
3311
+ }
3312
+ .um-wavebar[data-state='error'] .um-wavebar__wave {
3313
+ stroke: var(--um-danger);
3314
+ transform: scaleY(1.6);
3315
+ animation-play-state: paused;
3316
+ }
3317
+ .um-wavebar__burst {
3318
+ left: 40px;
3319
+ }
3320
+ .um-wavebar__drawer {
3321
+ display: grid;
3322
+ grid-template-rows: 1fr;
3323
+ animation: um-drawer calc(var(--um-time) * 420ms) var(--um-ease);
3324
+ }
3325
+ .um-wavebar__drawer[hidden] {
3326
+ display: none;
3327
+ }
3328
+ .um-wavebar__drawer-inner {
3329
+ min-height: 0;
3330
+ padding: 10px;
3331
+ border-radius: calc(var(--um-radius) * 1.1);
3332
+ background: var(--um-surface);
3333
+ border: 1px solid var(--um-border);
3334
+ box-shadow: var(--um-shadow);
3335
+ }
3336
+ .um-wavebar__drawer-inner .um-queue {
3337
+ margin-top: 0;
3338
+ }
3339
+ .um-wavebar__drawer-inner .um-rejections {
3340
+ margin: 0 0 10px;
3341
+ }
3342
+ @keyframes um-drawer {
3343
+ from { grid-template-rows: 0fr; opacity: 0; transform: translateY(-8px); }
3344
+ }
3345
+ .um-menu {
3346
+ position: relative;
3347
+ }
3348
+ .um-menu__list {
3349
+ position: absolute;
3350
+ top: calc(100% + 8px);
3351
+ right: 0;
3352
+ z-index: 20;
3353
+ min-width: 200px;
3354
+ padding: 6px;
3355
+ display: grid;
3356
+ border-radius: 14px;
3357
+ background: var(--um-surface);
3358
+ border: 1px solid var(--um-border);
3359
+ box-shadow: 0 18px 40px -12px rgb(20 20 50 / 0.3);
3360
+ animation: um-menu-in calc(var(--um-time) * 200ms) var(--um-ease);
3361
+ transform-origin: top right;
3362
+ }
3363
+ .um-menu[data-align='start'] .um-menu__list {
3364
+ right: auto;
3365
+ left: 0;
3366
+ transform-origin: top left;
3367
+ }
3368
+ .um-menu__item {
3369
+ appearance: none;
3370
+ border: 0;
3371
+ background: none;
3372
+ font: inherit;
3373
+ text-align: left;
3374
+ padding: 9px 12px;
3375
+ border-radius: 9px;
3376
+ color: var(--um-text);
3377
+ cursor: pointer;
3378
+ }
3379
+ .um-menu__item:hover:not(:disabled),
3380
+ .um-menu__item:focus-visible {
3381
+ background: var(--um-surface-2);
3382
+ outline: none;
3383
+ }
3384
+ .um-menu__item:disabled {
3385
+ color: var(--um-muted);
3386
+ opacity: 0.6;
3387
+ cursor: default;
3388
+ }
3389
+ .um-menu__item[data-tone='danger']:not(:disabled) {
3390
+ color: var(--um-danger);
3391
+ }
3392
+ @keyframes um-menu-in {
3393
+ from { opacity: 0; transform: scale(0.94) translateY(-4px); }
3394
+ }
3395
+ @container (max-width: 520px) {
3396
+ .um-wavebar__bar {
3397
+ flex-wrap: wrap;
3398
+ row-gap: 10px;
3399
+ padding: 16px 16px 30px 18px;
3400
+ }
3401
+ .um-wavebar__text {
3402
+ flex-basis: 100%;
3403
+ }
3404
+ .um-wavebar__title {
3405
+ flex-wrap: wrap;
3406
+ }
3407
+ .um-wavebar__controls {
3408
+ margin-left: auto;
3409
+ }
3410
+ .um-wavebar__controls {
3411
+ gap: 6px;
3412
+ }
3413
+ .um-wavebar__controls .um-icon-btn {
3414
+ width: 36px;
3415
+ height: 36px;
3416
+ }
3417
+ }