@vrplatform/voice-chat 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.
package/src/_styles.ts ADDED
@@ -0,0 +1,911 @@
1
+ import { createStyles, keyframes } from '@mantine/emotion';
2
+
3
+ const statusColors = {
4
+ error: '#EB144C',
5
+ };
6
+
7
+ const bars = keyframes({
8
+ '0%, 100%': {
9
+ transform: 'scaleY(0.55)',
10
+ },
11
+ '50%': {
12
+ transform: 'scaleY(1.6)',
13
+ },
14
+ });
15
+
16
+ const listenDot = keyframes({
17
+ '0%, 100%': {
18
+ opacity: 0.42,
19
+ transform: 'scale(0.72)',
20
+ },
21
+ '50%': {
22
+ opacity: 1,
23
+ transform: 'scale(1.08)',
24
+ },
25
+ });
26
+
27
+ const dots = keyframes({
28
+ '0%, 100%': {
29
+ opacity: 0.35,
30
+ transform: 'translateY(0)',
31
+ },
32
+ '50%': {
33
+ opacity: 1,
34
+ transform: 'translateY(-3px)',
35
+ },
36
+ });
37
+
38
+ const roundButtonSize = 44;
39
+ const launcherButtonSize = 56;
40
+
41
+ const iconSvg = {
42
+ width: 20,
43
+ height: 20,
44
+ fill: 'none',
45
+ stroke: 'currentColor',
46
+ strokeLinecap: 'round',
47
+ strokeLinejoin: 'round',
48
+ strokeWidth: 1.8,
49
+ } as const;
50
+
51
+ const hiddenMedia = {
52
+ position: 'fixed',
53
+ right: 0,
54
+ bottom: 0,
55
+ width: 1,
56
+ height: 1,
57
+ opacity: 0,
58
+ pointerEvents: 'none',
59
+ } as const;
60
+
61
+ export const useStyles = createStyles((theme) => {
62
+ const platform = theme.colors.vrplatform;
63
+ const neutral = theme.colors.neutral;
64
+ const amber = theme.colors.amber;
65
+ const focusRing = `${platform[4]}40`;
66
+ const panelShadow = '0 18px 44px rgba(0, 0, 0, 0.24)';
67
+ const elevatedShadow = '0 22px 54px rgba(0, 0, 0, 0.28)';
68
+
69
+ return {
70
+ root: {
71
+ position: 'relative',
72
+ zIndex: 2_147_483_000,
73
+ width: 'min(356px, calc(100vw - 24px))',
74
+ color: neutral[9],
75
+ fontFamily: 'inherit',
76
+ letterSpacing: 0,
77
+
78
+ '& *': {
79
+ boxSizing: 'border-box',
80
+ },
81
+ },
82
+
83
+ rootRight: {
84
+ right: 20,
85
+ },
86
+
87
+ rootLeft: {
88
+ left: 20,
89
+ },
90
+
91
+ rootInline: {
92
+ position: 'relative',
93
+ width: 356,
94
+ maxWidth: '100%',
95
+ },
96
+
97
+ rootFloating: {
98
+ position: 'fixed',
99
+ bottom: 20,
100
+
101
+ '@media (max-width: 640px)': {
102
+ right: 12,
103
+ bottom: 12,
104
+ left: 12,
105
+ width: 'auto',
106
+ },
107
+ },
108
+
109
+ rootCollapsed: {
110
+ width: launcherButtonSize,
111
+
112
+ '@media (max-width: 640px)': {
113
+ right: 12,
114
+ bottom: 12,
115
+ left: 'auto',
116
+ width: launcherButtonSize,
117
+ },
118
+ },
119
+
120
+ launcher: {
121
+ display: 'grid',
122
+ placeItems: 'center',
123
+ width: launcherButtonSize,
124
+ height: launcherButtonSize,
125
+ padding: 4,
126
+ borderRadius: 999,
127
+ background: `linear-gradient(135deg, ${platform[7]}, ${platform[9]})`,
128
+ border: 0,
129
+ boxShadow: panelShadow,
130
+ color: theme.white,
131
+ cursor: 'pointer',
132
+ font: 'inherit',
133
+ transition:
134
+ 'background 160ms ease, box-shadow 160ms ease, transform 160ms ease',
135
+
136
+ '&:hover': {
137
+ background: `linear-gradient(135deg, ${platform[6]}, ${platform[8]})`,
138
+ boxShadow: elevatedShadow,
139
+ transform: 'translateY(-1px)',
140
+ },
141
+
142
+ '&:focus-visible': {
143
+ outline: `3px solid ${focusRing}`,
144
+ outlineOffset: 2,
145
+ },
146
+
147
+ '& svg': {
148
+ ...iconSvg,
149
+ width: 25,
150
+ height: 25,
151
+ },
152
+ },
153
+
154
+ trigger: {
155
+ display: 'grid',
156
+ gridTemplateColumns: `minmax(0, 1fr) repeat(3, ${roundButtonSize}px)`,
157
+ gap: 8,
158
+ alignItems: 'center',
159
+ width: '100%',
160
+ padding: '9px 10px',
161
+ borderRadius: theme.radius.xl,
162
+ background: `linear-gradient(135deg, ${platform[8]}, ${platform[9]})`,
163
+ boxShadow: panelShadow,
164
+ color: theme.white,
165
+ font: 'inherit',
166
+ transition:
167
+ 'background 160ms ease, border-color 160ms ease, box-shadow 160ms ease, transform 160ms ease',
168
+
169
+ '&:hover': {
170
+ boxShadow: elevatedShadow,
171
+ transform: 'translateY(-1px)',
172
+ },
173
+ },
174
+
175
+ triggerCompact: {
176
+ gridTemplateColumns: `minmax(0, 1fr) repeat(2, ${roundButtonSize}px)`,
177
+ },
178
+
179
+ triggerReady: {
180
+ borderColor: platform[4],
181
+ background: `linear-gradient(135deg, ${platform[8]}, ${platform[9]})`,
182
+ },
183
+
184
+ triggerNeedsScreen: {
185
+ borderColor: amber[5],
186
+ background: `linear-gradient(135deg, ${platform[8]}, ${platform[9]})`,
187
+ },
188
+
189
+ triggerConnecting: {
190
+ borderColor: platform[3],
191
+ background: `linear-gradient(135deg, ${platform[7]}, ${platform[9]})`,
192
+ },
193
+
194
+ triggerMuted: {
195
+ borderColor: neutral[6],
196
+ background: `linear-gradient(135deg, ${platform[9]}, ${neutral[9]})`,
197
+ },
198
+
199
+ triggerError: {
200
+ borderColor: statusColors.error,
201
+ background: `linear-gradient(135deg, ${neutral[9]}, #551522)`,
202
+ },
203
+
204
+ triggerMain: {
205
+ display: 'grid',
206
+ gridTemplateColumns: `${roundButtonSize}px minmax(0, 1fr)`,
207
+ gap: 10,
208
+ alignItems: 'center',
209
+ minWidth: 0,
210
+ padding: 0,
211
+ border: 0,
212
+ background: 'transparent',
213
+ color: 'inherit',
214
+ font: 'inherit',
215
+ textAlign: 'left',
216
+
217
+ '&:focus-visible': {
218
+ outline: `3px solid ${focusRing}`,
219
+ outlineOffset: 2,
220
+ },
221
+ },
222
+
223
+ orb: {
224
+ display: 'grid',
225
+ placeItems: 'center',
226
+ width: roundButtonSize,
227
+ height: roundButtonSize,
228
+ borderRadius: 999,
229
+ background: 'rgba(255, 255, 255, 0.1)',
230
+ boxShadow: 'inset 0 0 0 1px rgba(255, 255, 255, 0.14)',
231
+
232
+ '& svg': iconSvg,
233
+ },
234
+
235
+ triggerCopy: {
236
+ display: 'grid',
237
+ gap: 3,
238
+ minWidth: 0,
239
+ },
240
+
241
+ kicker: {
242
+ overflow: 'hidden',
243
+ color: 'rgba(255, 255, 255, 0.68)',
244
+ fontSize: 12,
245
+ lineHeight: 1,
246
+ textOverflow: 'ellipsis',
247
+ whiteSpace: 'nowrap',
248
+ },
249
+
250
+ triggerStatus: {
251
+ overflow: 'hidden',
252
+ fontSize: 18,
253
+ fontWeight: 700,
254
+ lineHeight: 1.1,
255
+ textOverflow: 'ellipsis',
256
+ whiteSpace: 'nowrap',
257
+ },
258
+
259
+ triggerCall: {
260
+ display: 'grid',
261
+ placeItems: 'center',
262
+ width: roundButtonSize,
263
+ height: roundButtonSize,
264
+ padding: 0,
265
+ border: 0,
266
+ borderRadius: 999,
267
+ background: theme.white,
268
+ color: neutral[9],
269
+ cursor: 'pointer',
270
+ font: 'inherit',
271
+
272
+ '&:hover:not(:disabled)': {
273
+ background: neutral[0],
274
+ },
275
+
276
+ '&:disabled': {
277
+ cursor: 'not-allowed',
278
+ opacity: 0.58,
279
+ },
280
+
281
+ '&:focus-visible': {
282
+ outline: `3px solid ${focusRing}`,
283
+ outlineOffset: 2,
284
+ },
285
+
286
+ '& svg': {
287
+ ...iconSvg,
288
+ width: 24,
289
+ height: 24,
290
+ },
291
+ },
292
+
293
+ triggerCallStart: {
294
+ background: theme.colors.green[6],
295
+ color: theme.white,
296
+
297
+ '&:hover:not(:disabled)': {
298
+ background: theme.colors.green[7],
299
+ },
300
+ },
301
+
302
+ triggerCallDanger: {
303
+ background: statusColors.error,
304
+ color: theme.white,
305
+
306
+ '&:hover:not(:disabled)': {
307
+ background: '#C0103F',
308
+ },
309
+ },
310
+
311
+ triggerMute: {
312
+ display: 'grid',
313
+ placeItems: 'center',
314
+ width: roundButtonSize,
315
+ height: roundButtonSize,
316
+ padding: 0,
317
+ border: 0,
318
+ borderRadius: 999,
319
+ background: 'rgba(255, 255, 255, 0.1)',
320
+ boxShadow: 'inset 0 0 0 1px rgba(255, 255, 255, 0.12)',
321
+ color: 'inherit',
322
+ cursor: 'pointer',
323
+ font: 'inherit',
324
+
325
+ '&:hover:not(:disabled)': {
326
+ background: 'rgba(255, 255, 255, 0.16)',
327
+ },
328
+
329
+ '&:disabled': {
330
+ cursor: 'not-allowed',
331
+ opacity: 0.42,
332
+ },
333
+
334
+ '&:focus-visible': {
335
+ outline: `3px solid ${focusRing}`,
336
+ outlineOffset: 2,
337
+ },
338
+
339
+ '& svg': iconSvg,
340
+ },
341
+
342
+ meter: {
343
+ position: 'relative',
344
+ display: 'inline-flex',
345
+ alignItems: 'center',
346
+ justifyContent: 'center',
347
+ gap: 4,
348
+ width: roundButtonSize,
349
+ height: roundButtonSize,
350
+ borderRadius: 999,
351
+ background: 'transparent',
352
+
353
+ '&::before': {
354
+ position: 'absolute',
355
+ inset: 8,
356
+ border: '2px solid currentColor',
357
+ borderRadius: 999,
358
+ content: '""',
359
+ opacity: 0,
360
+ transform: 'scale(0.72)',
361
+ },
362
+
363
+ '& span': {
364
+ width: 4,
365
+ height: 10,
366
+ borderRadius: 999,
367
+ background: 'currentColor',
368
+ opacity: 0.75,
369
+ transformOrigin: 'center',
370
+ },
371
+
372
+ '& span:nth-of-type(2)': {
373
+ animationDelay: '110ms',
374
+ },
375
+
376
+ '& span:nth-of-type(3)': {
377
+ animationDelay: '220ms',
378
+ },
379
+ },
380
+
381
+ meterListening: {
382
+ gap: 5,
383
+
384
+ '&::before': {
385
+ display: 'none',
386
+ },
387
+
388
+ '& span': {
389
+ width: 6,
390
+ height: 6,
391
+ animation: `${listenDot} 1.08s ease-in-out infinite`,
392
+ opacity: 0.52,
393
+ },
394
+ },
395
+
396
+ meterSpeaking: {
397
+ '& span': {
398
+ animation: `${bars} 520ms ease-in-out infinite`,
399
+ },
400
+ },
401
+
402
+ meterThinking: {
403
+ '& span': {
404
+ width: 5,
405
+ height: 5,
406
+ animation: `${dots} 880ms ease-in-out infinite`,
407
+ },
408
+ },
409
+
410
+ meterMuted: {
411
+ '& span': {
412
+ height: 3,
413
+ opacity: 0.46,
414
+ transform: 'rotate(-28deg)',
415
+ },
416
+ },
417
+
418
+ responsePanel: {
419
+ position: 'relative',
420
+ display: 'grid',
421
+ gap: 7,
422
+ marginTop: 0,
423
+ padding: 8,
424
+ border: `1px solid ${platform[6]}`,
425
+ borderRadius: theme.radius.xl,
426
+ background: `linear-gradient(135deg, ${platform[8]}, ${platform[9]})`,
427
+ boxShadow: panelShadow,
428
+ },
429
+
430
+ debugToggleButton: {
431
+ position: 'absolute',
432
+ top: -9,
433
+ right: -9,
434
+ zIndex: 1,
435
+ minWidth: 32,
436
+ height: 22,
437
+ padding: '0 7px',
438
+ border: 0,
439
+ borderRadius: 999,
440
+ background: 'rgba(255, 255, 255, 0.92)',
441
+ boxShadow: '0 6px 16px rgba(0, 0, 0, 0.18)',
442
+ color: platform[8],
443
+ cursor: 'pointer',
444
+ font: 'inherit',
445
+ fontSize: 10,
446
+ fontWeight: 800,
447
+ textTransform: 'uppercase',
448
+
449
+ '&:hover': {
450
+ background: theme.white,
451
+ color: platform[9],
452
+ },
453
+
454
+ '&:focus-visible': {
455
+ outline: `2px solid ${focusRing}`,
456
+ outlineOffset: 1,
457
+ },
458
+ },
459
+
460
+ debugToggleButtonActive: {
461
+ background: platform[1],
462
+ color: platform[9],
463
+ },
464
+
465
+ composer: {
466
+ display: 'grid',
467
+ gridTemplateColumns: '38px minmax(0, 1fr) 40px 40px',
468
+ gap: 8,
469
+ alignItems: 'center',
470
+ minHeight: 54,
471
+ padding: '6px 7px',
472
+ border: 0,
473
+ borderRadius: theme.radius.xl,
474
+ background: 'rgba(255, 255, 255, 0.11)',
475
+ boxShadow: 'inset 0 0 0 1px rgba(255, 255, 255, 0.08)',
476
+ },
477
+
478
+ composerVoiceActive: {
479
+ gridTemplateColumns: '38px minmax(0, 1fr) 38px 38px 40px 40px',
480
+ },
481
+
482
+ composerConnected: {
483
+ gridTemplateColumns: '38px minmax(0, 1fr) 38px 40px 40px',
484
+ },
485
+
486
+ composerInput: {
487
+ minWidth: 0,
488
+ height: 40,
489
+ padding: '0 2px',
490
+ border: 0,
491
+ background: 'transparent',
492
+ color: theme.white,
493
+ font: 'inherit',
494
+ fontSize: 15,
495
+ lineHeight: 1,
496
+ outline: 'none',
497
+
498
+ '&::placeholder': {
499
+ color: 'rgba(255, 255, 255, 0.7)',
500
+ },
501
+
502
+ '&:disabled': {
503
+ cursor: 'not-allowed',
504
+ opacity: 0.6,
505
+ },
506
+ },
507
+
508
+ composerAction: {
509
+ display: 'grid',
510
+ placeItems: 'center',
511
+ width: 38,
512
+ height: 38,
513
+ padding: 0,
514
+ border: 0,
515
+ borderRadius: 999,
516
+ background: 'transparent',
517
+ color: 'rgba(255, 255, 255, 0.74)',
518
+ cursor: 'pointer',
519
+ font: 'inherit',
520
+
521
+ '&:hover:not(:disabled)': {
522
+ background: 'rgba(255, 255, 255, 0.14)',
523
+ color: theme.white,
524
+ },
525
+
526
+ '&:disabled': {
527
+ cursor: 'not-allowed',
528
+ opacity: 0.42,
529
+ },
530
+
531
+ '&:focus-visible': {
532
+ outline: `2px solid ${focusRing}`,
533
+ outlineOffset: 1,
534
+ },
535
+
536
+ '& svg': {
537
+ ...iconSvg,
538
+ width: 21,
539
+ height: 21,
540
+ },
541
+ },
542
+
543
+ composerActionActive: {
544
+ background: theme.white,
545
+ boxShadow: '0 6px 16px rgba(0, 0, 0, 0.2)',
546
+ color: platform[8],
547
+ },
548
+
549
+ composerEnd: {
550
+ color: 'rgba(255, 255, 255, 0.9)',
551
+
552
+ '&:hover:not(:disabled)': {
553
+ background: 'rgba(235, 20, 76, 0.22)',
554
+ color: theme.white,
555
+ },
556
+ },
557
+
558
+ composerSubmit: {
559
+ display: 'grid',
560
+ placeItems: 'center',
561
+ width: 40,
562
+ height: 40,
563
+ padding: 0,
564
+ border: 0,
565
+ borderRadius: 999,
566
+ background: theme.white,
567
+ color: platform[8],
568
+ cursor: 'pointer',
569
+ font: 'inherit',
570
+
571
+ '&:hover:not(:disabled)': {
572
+ background: neutral[0],
573
+ },
574
+
575
+ '&:disabled': {
576
+ background: 'rgba(255, 255, 255, 0.22)',
577
+ color: 'rgba(255, 255, 255, 0.55)',
578
+ cursor: 'not-allowed',
579
+ },
580
+
581
+ '&:focus-visible': {
582
+ outline: `2px solid ${focusRing}`,
583
+ outlineOffset: 1,
584
+ },
585
+
586
+ '& svg': {
587
+ ...iconSvg,
588
+ width: 21,
589
+ height: 21,
590
+ },
591
+ },
592
+
593
+ chatPanel: {
594
+ minHeight: 82,
595
+ border: '1px solid rgba(255, 255, 255, 0.12)',
596
+ borderRadius: theme.radius.lg,
597
+ background: 'rgba(255, 255, 255, 0.08)',
598
+ boxShadow: 'inset 0 1px 0 rgba(255, 255, 255, 0.08)',
599
+ },
600
+
601
+ chatMessages: {
602
+ display: 'grid',
603
+ alignContent: 'start',
604
+ gap: 8,
605
+ maxHeight: 210,
606
+ minHeight: 82,
607
+ margin: 0,
608
+ padding: 8,
609
+ overflow: 'auto',
610
+ listStyle: 'none',
611
+ },
612
+
613
+ chatMessage: {
614
+ display: 'grid',
615
+ gap: 4,
616
+ minWidth: 0,
617
+ padding: '8px 9px',
618
+ border: `1px solid ${neutral[2]}`,
619
+ borderRadius: theme.radius.sm,
620
+ background: theme.white,
621
+
622
+ '& p': {
623
+ margin: 0,
624
+ color: neutral[8],
625
+ fontSize: 13,
626
+ lineHeight: 1.38,
627
+ overflowWrap: 'anywhere',
628
+ whiteSpace: 'pre-wrap',
629
+ },
630
+ },
631
+
632
+ chatMessageStreaming: {
633
+ borderColor: `${platform[3]}99`,
634
+ },
635
+
636
+ chatMessageUser: {
637
+ background: platform[0],
638
+
639
+ '& strong': {
640
+ color: neutral[8],
641
+ },
642
+ },
643
+
644
+ chatMeta: {
645
+ display: 'flex',
646
+ alignItems: 'center',
647
+ justifyContent: 'space-between',
648
+ gap: 8,
649
+ color: neutral[5],
650
+ fontSize: 10,
651
+ lineHeight: 1,
652
+ textTransform: 'uppercase',
653
+
654
+ '& strong': {
655
+ color: platform[7],
656
+ fontWeight: 800,
657
+ },
658
+
659
+ '& time': {
660
+ flex: '0 0 auto',
661
+ },
662
+ },
663
+
664
+ chatEmpty: {
665
+ display: 'grid',
666
+ placeItems: 'center',
667
+ minHeight: 64,
668
+ color: 'rgba(255, 255, 255, 0.62)',
669
+ fontSize: 12,
670
+ lineHeight: 1.25,
671
+ },
672
+
673
+ debugPanel: {
674
+ display: 'grid',
675
+ gap: 6,
676
+ marginTop: 6,
677
+ padding: 8,
678
+ border: '1px solid rgba(0, 0, 0, 0.22)',
679
+ borderRadius: theme.radius.md,
680
+ background: 'rgba(12, 14, 17, 0.92)',
681
+ boxShadow: '0 12px 32px rgba(21, 21, 21, 0.2)',
682
+ color: '#e7f0ec',
683
+ fontFamily:
684
+ 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace',
685
+ fontSize: 11,
686
+ lineHeight: 1.25,
687
+ },
688
+
689
+ debugApiSwitch: {
690
+ display: 'flex',
691
+ alignItems: 'center',
692
+ justifyContent: 'center',
693
+ gap: 6,
694
+ paddingTop: 6,
695
+ borderTop: '1px solid rgba(231, 240, 236, 0.12)',
696
+ color: 'rgba(231, 240, 236, 0.7)',
697
+ fontFamily: 'inherit',
698
+ fontSize: 11,
699
+ fontWeight: 700,
700
+ textTransform: 'uppercase',
701
+ },
702
+
703
+ debugApiOption: {
704
+ padding: 0,
705
+ border: 0,
706
+ background: 'transparent',
707
+ color: 'rgba(231, 240, 236, 0.64)',
708
+ cursor: 'pointer',
709
+ font: 'inherit',
710
+ fontWeight: 800,
711
+ textTransform: 'lowercase',
712
+
713
+ '&:hover': {
714
+ color: theme.white,
715
+ },
716
+
717
+ '&:focus-visible': {
718
+ outline: `2px solid ${focusRing}`,
719
+ outlineOffset: 2,
720
+ },
721
+ },
722
+
723
+ debugApiOptionActive: {
724
+ color: platform[1],
725
+ },
726
+
727
+ debugTitle: {
728
+ display: 'flex',
729
+ alignItems: 'center',
730
+ justifyContent: 'space-between',
731
+ color: platform[1],
732
+ fontWeight: 700,
733
+ textTransform: 'uppercase',
734
+ },
735
+
736
+ debugTitleActions: {
737
+ display: 'flex',
738
+ alignItems: 'center',
739
+ gap: 6,
740
+ },
741
+
742
+ debugCopyButton: {
743
+ position: 'relative',
744
+ display: 'grid',
745
+ placeItems: 'center',
746
+ width: 22,
747
+ height: 22,
748
+ padding: 0,
749
+ border: '1px solid rgba(231, 240, 236, 0.16)',
750
+ borderRadius: theme.radius.sm,
751
+ background: 'rgba(231, 240, 236, 0.06)',
752
+ color: 'rgba(231, 240, 236, 0.82)',
753
+ cursor: 'pointer',
754
+
755
+ '&:hover:not(:disabled)': {
756
+ background: 'rgba(231, 240, 236, 0.12)',
757
+ color: theme.white,
758
+ },
759
+
760
+ '&::after': {
761
+ position: 'absolute',
762
+ right: 0,
763
+ bottom: 'calc(100% + 6px)',
764
+ zIndex: 1,
765
+ width: 'max-content',
766
+ maxWidth: 180,
767
+ padding: '4px 6px',
768
+ border: '1px solid rgba(231, 240, 236, 0.16)',
769
+ borderRadius: theme.radius.xs,
770
+ background: 'rgba(7, 9, 12, 0.98)',
771
+ boxShadow: '0 8px 20px rgba(0, 0, 0, 0.28)',
772
+ color: theme.white,
773
+ content: 'attr(data-tooltip)',
774
+ fontSize: 10,
775
+ fontWeight: 700,
776
+ lineHeight: 1.2,
777
+ opacity: 0,
778
+ pointerEvents: 'none',
779
+ textTransform: 'none',
780
+ transform: 'translateY(2px)',
781
+ transition: 'opacity 120ms ease, transform 120ms ease',
782
+ whiteSpace: 'nowrap',
783
+ },
784
+
785
+ '&:hover:not(:disabled)::after, &:focus-visible:not(:disabled)::after': {
786
+ opacity: 1,
787
+ transform: 'translateY(0)',
788
+ },
789
+
790
+ '&:focus-visible': {
791
+ outline: `2px solid ${focusRing}`,
792
+ outlineOffset: 1,
793
+ },
794
+
795
+ '&:disabled': {
796
+ cursor: 'not-allowed',
797
+ opacity: 0.4,
798
+ },
799
+ },
800
+
801
+ debugList: {
802
+ display: 'grid',
803
+ gap: 4,
804
+ maxHeight: 142,
805
+ margin: 0,
806
+ padding: 0,
807
+ overflow: 'auto',
808
+ listStyle: 'none',
809
+
810
+ '& li': {
811
+ display: 'grid',
812
+ gridTemplateColumns: '58px minmax(102px, auto) minmax(0, 1fr)',
813
+ gap: 6,
814
+ alignItems: 'baseline',
815
+ minWidth: 0,
816
+ },
817
+
818
+ '& time': {
819
+ color: 'rgba(231, 240, 236, 0.52)',
820
+ },
821
+
822
+ '& strong': {
823
+ color: theme.white,
824
+ fontWeight: 760,
825
+ whiteSpace: 'nowrap',
826
+ },
827
+
828
+ '& span': {
829
+ overflow: 'hidden',
830
+ color: 'rgba(231, 240, 236, 0.72)',
831
+ textOverflow: 'ellipsis',
832
+ whiteSpace: 'nowrap',
833
+ },
834
+ },
835
+
836
+ debugEmpty: {
837
+ overflow: 'hidden',
838
+ margin: 0,
839
+ color: 'rgba(231, 240, 236, 0.72)',
840
+ textOverflow: 'ellipsis',
841
+ whiteSpace: 'nowrap',
842
+ },
843
+
844
+ sourcePanel: {
845
+ display: 'grid',
846
+ justifyItems: 'center',
847
+ gap: 6,
848
+ marginTop: 8,
849
+ color: neutral[7],
850
+ fontSize: 12,
851
+ },
852
+
853
+ sourceToggle: {
854
+ minHeight: 24,
855
+ border: '1px solid rgba(0, 0, 0, 0.08)',
856
+ borderRadius: 999,
857
+ background: 'rgba(255, 255, 255, 0.92)',
858
+ boxShadow: '0 8px 22px rgba(0, 0, 0, 0.08)',
859
+ color: platform[8],
860
+ cursor: 'pointer',
861
+ font: 'inherit',
862
+ fontSize: 12,
863
+ fontWeight: 760,
864
+ padding: '0 10px',
865
+
866
+ '&:hover': {
867
+ background: theme.white,
868
+ color: platform[9],
869
+ },
870
+
871
+ '&:focus-visible': {
872
+ outline: `2px solid ${focusRing}`,
873
+ outlineOffset: 2,
874
+ },
875
+ },
876
+
877
+ sourceList: {
878
+ display: 'grid',
879
+ justifyItems: 'center',
880
+ gap: 4,
881
+ width: 'min(300px, 100%)',
882
+ padding: '8px 10px',
883
+ border: '1px solid rgba(0, 0, 0, 0.08)',
884
+ borderRadius: theme.radius.md,
885
+ background: 'rgba(255, 255, 255, 0.96)',
886
+ boxShadow: '0 12px 30px rgba(0, 0, 0, 0.1)',
887
+
888
+ '& a': {
889
+ maxWidth: '100%',
890
+ overflow: 'hidden',
891
+ color: platform[8],
892
+ fontSize: 12,
893
+ fontWeight: 700,
894
+ lineHeight: 1.25,
895
+ textAlign: 'center',
896
+ textDecoration: 'none',
897
+ textOverflow: 'ellipsis',
898
+ whiteSpace: 'nowrap',
899
+
900
+ '&:hover': {
901
+ color: platform[9],
902
+ textDecoration: 'underline',
903
+ },
904
+ },
905
+ },
906
+
907
+ hiddenMedia,
908
+
909
+ captureVideo: hiddenMedia,
910
+ };
911
+ });