@runtypelabs/persona 4.4.1 → 4.4.2

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/dist/widget.css CHANGED
@@ -1,4041 +1 @@
1
- [data-persona-root] {
2
- all: initial;
3
- font-family: var(--persona-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", sans-serif);
4
- font-size: var(--persona-font-size, 1rem);
5
- font-weight: var(--persona-font-weight, 400);
6
- line-height: var(--persona-line-height, 1.5);
7
-
8
- /* Theme-aware markdown variables - inherit from theme colors set by JavaScript */
9
- --persona-md-code-block-bg: var(--persona-container, #f3f4f6);
10
- --persona-md-code-block-border-color: var(--persona-border, #e5e7eb);
11
- --persona-md-inline-code-bg: var(--persona-container, #f3f4f6);
12
- --persona-md-inline-code-color: var(--persona-text, #111827);
13
- --persona-md-table-border-color: var(--persona-border, #e5e7eb);
14
- --persona-md-table-header-bg: var(--persona-container, #f8fafc);
15
- --persona-md-hr-color: var(--persona-divider, #e5e7eb);
16
- --persona-md-blockquote-border-color: var(--persona-accent, #0f0f0f);
17
- --persona-md-blockquote-text-color: var(--persona-muted, #6b7280);
18
- }
19
-
20
- [data-persona-root] * {
21
- box-sizing: border-box;
22
- }
23
-
24
- .persona-flex {
25
- display: flex;
26
- }
27
-
28
- .persona-grid {
29
- display: grid;
30
- }
31
-
32
- .persona-h-full {
33
- height: 100%;
34
- }
35
-
36
- .persona-h-1 {
37
- height: 0.25rem;
38
- }
39
-
40
- .persona-w-full {
41
- width: 100%;
42
- }
43
-
44
- .persona-flex-col {
45
- flex-direction: column;
46
- }
47
-
48
- .persona-flex-wrap {
49
- flex-wrap: wrap;
50
- }
51
-
52
- .persona-items-center {
53
- align-items: center;
54
- }
55
-
56
- .persona-items-end {
57
- align-items: flex-end;
58
- }
59
-
60
- .persona-items-start {
61
- align-items: flex-start;
62
- }
63
-
64
- .persona-justify-center {
65
- justify-content: center;
66
- }
67
-
68
- .persona-justify-between {
69
- justify-content: space-between;
70
- }
71
-
72
- .persona-justify-end {
73
- justify-content: flex-end;
74
- }
75
-
76
- .persona-gap-1 {
77
- gap: 0.25rem;
78
- }
79
-
80
- .persona-gap-2 {
81
- gap: 0.5rem;
82
- }
83
-
84
- .persona-gap-1\.5 {
85
- gap: 0.375rem;
86
- }
87
-
88
- .persona-gap-3 {
89
- gap: 0.75rem;
90
- }
91
-
92
- .persona-gap-6 {
93
- gap: 1.5rem;
94
- }
95
-
96
- [data-persona-root] .persona-widget-container .persona-attachment-drop-overlay {
97
- display: none;
98
- position: absolute;
99
- inset: var(--persona-drop-overlay-inset, 0);
100
- z-index: 50;
101
- flex-direction: column;
102
- align-items: center;
103
- justify-content: center;
104
- gap: 0.5rem;
105
- pointer-events: none;
106
- background: var(--persona-drop-overlay-bg, rgba(59, 130, 246, 0.08));
107
- -webkit-backdrop-filter: blur(var(--persona-drop-overlay-blur, 8px));
108
- backdrop-filter: blur(var(--persona-drop-overlay-blur, 8px));
109
- border: var(--persona-drop-overlay-border, 2px dashed rgba(59, 130, 246, 0.4));
110
- border-radius: var(--persona-drop-overlay-radius, inherit);
111
- transition: opacity 0.15s ease;
112
- }
113
-
114
- [data-persona-root] .persona-widget-container .persona-attachment-drop-overlay .persona-drop-overlay-label {
115
- font-size: var(--persona-drop-overlay-label-size, 0.875rem);
116
- color: var(--persona-drop-overlay-label-color, rgba(59, 130, 246, 0.8));
117
- font-weight: 500;
118
- user-select: none;
119
- }
120
-
121
- [data-persona-root] .persona-widget-container.persona-attachment-drop-active .persona-attachment-drop-overlay {
122
- display: flex;
123
- }
124
-
125
- /* Widget CSS Variables - scoped to widget root to avoid polluting global namespace */
126
- [data-persona-root] {
127
- --persona-radius-sm: 0.125rem;
128
- --persona-radius-md: 0.375rem;
129
- --persona-radius-lg: 0.5rem;
130
- --persona-radius-xl: 0.75rem;
131
- --persona-launcher-radius: 9999px;
132
- --persona-button-radius: 9999px;
133
- --persona-panel-radius: var(--persona-radius-xl);
134
- --persona-input-radius: var(--persona-radius-lg);
135
- --persona-message-user-radius: var(--persona-radius-lg);
136
- --persona-message-assistant-radius: var(--persona-radius-lg);
137
-
138
- /* Markdown Header Variables */
139
- --persona-md-h1-size: 1.5rem;
140
- --persona-md-h1-weight: 700;
141
- --persona-md-h1-margin: 1rem 0 0.5rem;
142
- --persona-md-h1-line-height: 1.25;
143
- --persona-md-h2-size: 1.25rem;
144
- --persona-md-h2-weight: 700;
145
- --persona-md-h2-margin: 0.875rem 0 0.5rem;
146
- --persona-md-h2-line-height: 1.3;
147
- --persona-md-h3-size: 1.125rem;
148
- --persona-md-h3-weight: 600;
149
- --persona-md-h3-margin: 0.75rem 0 0.375rem;
150
- --persona-md-h3-line-height: 1.4;
151
- --persona-md-h4-size: 1rem;
152
- --persona-md-h4-weight: 600;
153
- --persona-md-h4-margin: 0.625rem 0 0.25rem;
154
- --persona-md-h4-line-height: 1.5;
155
- --persona-md-h5-size: 0.875rem;
156
- --persona-md-h5-weight: 600;
157
- --persona-md-h5-margin: 0.5rem 0 0.25rem;
158
- --persona-md-h5-line-height: 1.5;
159
- --persona-md-h6-size: 0.75rem;
160
- --persona-md-h6-weight: 600;
161
- --persona-md-h6-margin: 0.5rem 0 0.25rem;
162
- --persona-md-h6-line-height: 1.5;
163
-
164
- /* Markdown Table Variables */
165
- --persona-md-table-border-color: var(--persona-border, #e5e7eb);
166
- --persona-md-table-header-bg: var(--persona-container, #f8fafc);
167
- --persona-md-table-header-weight: 600;
168
- --persona-md-table-cell-padding: 0.5rem 0.75rem;
169
- --persona-md-table-border-radius: 0.375rem;
170
-
171
- /* Markdown Horizontal Rule Variables */
172
- --persona-md-hr-color: var(--persona-divider, #e5e7eb);
173
- --persona-md-hr-height: 1px;
174
- --persona-md-hr-margin: 1rem 0;
175
-
176
- /* Markdown Blockquote Variables */
177
- --persona-md-blockquote-border-color: #171717;
178
- --persona-md-blockquote-border-width: 3px;
179
- --persona-md-blockquote-padding: 0.5rem 1rem;
180
- --persona-md-blockquote-margin: 0.5rem 0;
181
- --persona-md-blockquote-bg: transparent;
182
- --persona-md-blockquote-text-color: #6b7280;
183
- --persona-md-blockquote-font-style: italic;
184
-
185
- /* Markdown Code Block Variables */
186
- --persona-md-code-block-bg: var(--persona-container, #f3f4f6);
187
- --persona-md-code-block-border-color: var(--persona-border, #e5e7eb);
188
- --persona-md-code-block-text-color: inherit;
189
- --persona-md-code-block-padding: 0.75rem;
190
- --persona-md-code-block-border-radius: 0.375rem;
191
- --persona-md-code-block-font-size: 0.875rem;
192
-
193
- /* Markdown Inline Code Variables */
194
- --persona-md-inline-code-bg: #f3f4f6;
195
- --persona-md-inline-code-padding: 0.125rem 0.375rem;
196
- --persona-md-inline-code-border-radius: 0.25rem;
197
- --persona-md-inline-code-font-size: 0.875em;
198
-
199
- /* Markdown Strong/Em Variables */
200
- --persona-md-strong-weight: 600;
201
- --persona-md-em-style: italic;
202
- }
203
-
204
- .persona-rounded-xl {
205
- border-radius: var(--persona-radius-sm);
206
- }
207
-
208
- .persona-rounded-lg {
209
- border-radius: var(--persona-radius-md);
210
- }
211
-
212
- .persona-rounded-2xl {
213
- border-radius: var(--persona-radius-lg);
214
- }
215
-
216
- .persona-rounded {
217
- border-radius: var(--persona-radius-sm, 0.125rem);
218
- }
219
-
220
- .persona-rounded-md {
221
- border-radius: var(--persona-radius-md, 0.375rem);
222
- }
223
-
224
- .persona-rounded-b {
225
- border-bottom-left-radius: var(--persona-radius-sm, 0.125rem);
226
- border-bottom-right-radius: var(--persona-radius-sm, 0.125rem);
227
- }
228
-
229
- .persona-rounded-full {
230
- border-radius: var(--persona-launcher-radius);
231
- }
232
-
233
- .persona-rounded-launcher {
234
- border-radius: var(--persona-launcher-radius);
235
- }
236
-
237
- .persona-rounded-button {
238
- border-radius: var(--persona-button-radius);
239
- }
240
-
241
- .persona-overflow-hidden {
242
- overflow: hidden;
243
- }
244
-
245
- .persona-overflow-auto {
246
- overflow: auto;
247
- }
248
-
249
- .persona-max-h-\[300px\] {
250
- max-height: 300px;
251
- }
252
-
253
- .persona-bg-persona-surface {
254
- background-color: var(--persona-surface, #ffffff);
255
- }
256
-
257
- .persona-bg-persona-container {
258
- background-color: var(--persona-container, #f8fafc);
259
- }
260
-
261
- .persona-bg-persona-input-background {
262
- background-color: var(--persona-input-background, #ffffff);
263
- }
264
-
265
- .persona-bg-white {
266
- background-color: #ffffff;
267
- }
268
-
269
- .persona-bg-transparent {
270
- background-color: transparent;
271
- }
272
-
273
- .persona-bg-gray-100 {
274
- background-color: #f3f4f6;
275
- }
276
-
277
- .persona-bg-gray-200 {
278
- background-color: #e5e7eb;
279
- }
280
-
281
- .persona-text-persona-primary {
282
- color: var(--persona-primary, #171717);
283
- }
284
-
285
- .persona-text-persona-call-to-action {
286
- color: var(--persona-call-to-action, var(--persona-text-inverse, #ffffff));
287
- }
288
-
289
- .persona-text-persona-muted {
290
- color: var(--persona-muted, #6b7280);
291
- }
292
-
293
- .persona-text-white {
294
- color: #ffffff;
295
- }
296
-
297
- .persona-bg-persona-accent {
298
- background-color: var(--persona-accent, #0f0f0f);
299
- }
300
-
301
- .persona-bg-persona-primary {
302
- background-color: var(--persona-button-primary-bg, var(--persona-primary, #111827));
303
- }
304
-
305
- .persona-italic {
306
- font-style: italic;
307
- }
308
-
309
- .persona-text-base {
310
- font-size: 1rem;
311
- line-height: 1.5rem;
312
- }
313
-
314
- .persona-text-sm {
315
- font-size: 0.875rem;
316
- line-height: 1.25rem;
317
- }
318
-
319
- .persona-text-xs {
320
- font-size: 0.75rem;
321
- line-height: 1rem;
322
- }
323
-
324
- .persona-text-xxs {
325
- font-size: 0.5rem;
326
- line-height: 1rem;
327
- }
328
-
329
- .persona-text-lg {
330
- font-size: 1.125rem;
331
- line-height: 1.75rem;
332
- }
333
-
334
- .persona-text-xl {
335
- font-size: 1.25rem;
336
- line-height: 1.75rem;
337
- }
338
-
339
- .persona-font-semibold {
340
- font-weight: 600;
341
- }
342
-
343
- .persona-font-medium {
344
- font-weight: 500;
345
- }
346
-
347
- .persona-font-mono {
348
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
349
- }
350
-
351
- .persona-text-\[11px\] {
352
- font-size: 11px;
353
- }
354
-
355
- .persona-text-center {
356
- text-align: center;
357
- }
358
-
359
- .persona-text-persona-secondary {
360
- color: var(--persona-secondary, #4b5563);
361
- }
362
-
363
- .persona-leading-none {
364
- line-height: 1;
365
- }
366
-
367
- .persona-whitespace-nowrap {
368
- white-space: nowrap;
369
- }
370
-
371
- .persona-truncate {
372
- overflow: hidden;
373
- text-overflow: ellipsis;
374
- white-space: nowrap;
375
- }
376
-
377
- .persona-break-all {
378
- word-break: break-all;
379
- }
380
-
381
- .persona-break-words {
382
- overflow-wrap: break-word;
383
- word-break: break-word;
384
- }
385
-
386
- .persona-px-4 {
387
- padding-left: 1rem;
388
- padding-right: 1rem;
389
- }
390
-
391
- .persona-px-5 {
392
- padding-left: 1.25rem;
393
- padding-right: 1.25rem;
394
- }
395
-
396
- .persona-px-6 {
397
- padding-left: 1.5rem;
398
- padding-right: 1.5rem;
399
- }
400
-
401
- .persona-py-1\.5 {
402
- padding-top: 0.375rem;
403
- padding-bottom: 0.375rem;
404
- }
405
-
406
- .persona-py-3 {
407
- padding-top: 0.75rem;
408
- padding-bottom: 0.75rem;
409
- }
410
-
411
- .persona-py-4 {
412
- padding-top: 1rem;
413
- padding-bottom: 1rem;
414
- }
415
-
416
- .persona-py-5 {
417
- padding-top: 1.25rem;
418
- padding-bottom: 1.25rem;
419
- }
420
-
421
- .persona-py-6 {
422
- padding-top: 1.5rem;
423
- padding-bottom: 1.5rem;
424
- }
425
-
426
- .persona-py-2\.5 {
427
- padding-top: 0.625rem;
428
- padding-bottom: 0.625rem;
429
- }
430
-
431
- .persona-pr-3 {
432
- padding-right: 0.75rem;
433
- }
434
-
435
- .persona-pl-3 {
436
- padding-left: 0.75rem;
437
- }
438
-
439
- .persona-pl-7 {
440
- padding-left: 1.75rem;
441
- }
442
-
443
- .persona-pr-7 {
444
- padding-right: 1.75rem;
445
- }
446
-
447
- .persona-pl-8 {
448
- padding-left: 2rem;
449
- }
450
-
451
- .persona-pb-0 {
452
- padding-bottom: 0;
453
- }
454
-
455
- .persona-p-6 {
456
- padding: 1.5rem;
457
- }
458
-
459
- .persona-p-0 {
460
- padding: 0;
461
- }
462
-
463
- .persona-p-3 {
464
- padding: 0.75rem;
465
- }
466
-
467
- .persona-px-2 {
468
- padding-left: 0.5rem;
469
- padding-right: 0.5rem;
470
- }
471
-
472
- .persona-px-2\.5 {
473
- padding-left: 0.625rem;
474
- padding-right: 0.625rem;
475
- }
476
-
477
- .persona-px-3 {
478
- padding-left: 0.75rem;
479
- padding-right: 0.75rem;
480
- }
481
-
482
- .persona-py-0\.5 {
483
- padding-top: 0.125rem;
484
- padding-bottom: 0.125rem;
485
- }
486
-
487
- .persona-py-1 {
488
- padding-top: 0.25rem;
489
- padding-bottom: 0.25rem;
490
- }
491
-
492
- .persona-py-2 {
493
- padding-top: 0.5rem;
494
- padding-bottom: 0.5rem;
495
- }
496
-
497
- .persona-mt-2 {
498
- margin-top: 0.5rem;
499
- }
500
-
501
- .persona-ml-auto {
502
- margin-left: auto;
503
- }
504
-
505
- .persona-m-0 {
506
- margin: 0;
507
- }
508
-
509
- .persona-mb-1 {
510
- margin-bottom: 0.25rem;
511
- }
512
-
513
- .persona-ml-4 {
514
- margin-left: 1rem;
515
- }
516
-
517
- .persona-mr-3 {
518
- margin-right: 0.75rem;
519
- }
520
-
521
- .persona-text-right {
522
- text-align: right;
523
- }
524
-
525
- .disabled\:persona-opacity-50:disabled {
526
- opacity: 0.5;
527
- }
528
-
529
- .persona-shadow-2xl {
530
- box-shadow: 0 30px 60px -15px rgba(15, 23, 42, 0.35);
531
- }
532
-
533
- .persona-shadow-sm {
534
- box-shadow: 0 5px 15px rgba(15, 23, 42, 0.08);
535
- }
536
-
537
- .persona-shadow-md {
538
- box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1);
539
- }
540
-
541
- .persona-shadow-lg {
542
- box-shadow: 0 20px 40px rgba(15, 23, 42, 0.18);
543
- }
544
-
545
- .persona-border {
546
- border-width: 1px;
547
- border-style: solid;
548
- border-color: rgba(148, 163, 184, 0.28);
549
- }
550
-
551
- .persona-border-none {
552
- border: none;
553
- }
554
-
555
- .persona-border-b {
556
- border-bottom-width: 1px;
557
- border-bottom-style: solid;
558
- border-bottom-color: rgba(148, 163, 184, 0.28);
559
- }
560
-
561
- .persona-border-gray-100 {
562
- border-color: #f1f5f9;
563
- }
564
-
565
- .persona-border-persona-secondary {
566
- border-color: var(--persona-secondary, #7c3aed);
567
- }
568
-
569
- .persona-border-persona-border {
570
- border-color: var(--persona-border, #e5e7eb);
571
- }
572
-
573
- .persona-border-t {
574
- border-top-width: 1px;
575
- border-top-style: solid;
576
- border-top-color: rgba(148, 163, 184, 0.28);
577
- }
578
-
579
- .persona-border-t-persona-border {
580
- border-top-width: 1px;
581
- border-top-style: solid;
582
- border-top-color: var(--persona-border, #f1f5f9);
583
- }
584
-
585
- .persona-border-b-persona-border {
586
- border-bottom-width: 1px;
587
- border-bottom-style: solid;
588
- border-bottom-color: var(--persona-border, #f1f5f9);
589
- }
590
-
591
- .persona-border-t-persona-divider {
592
- border-top-width: 1px;
593
- border-top-style: solid;
594
- border-top-color: var(--persona-divider, #f1f5f9);
595
- }
596
-
597
- .persona-border-b-persona-divider {
598
- border-bottom-width: 1px;
599
- border-bottom-style: solid;
600
- border-bottom-color: var(--persona-divider, #f1f5f9);
601
- }
602
-
603
- .persona-border-persona-divider {
604
- border-color: var(--persona-divider, #f1f5f9);
605
- }
606
-
607
- .persona-border-persona-message-border {
608
- border-color: var(--persona-message-border, #f1f5f9);
609
- }
610
-
611
- .persona-fixed {
612
- position: fixed;
613
- }
614
-
615
- .persona-bottom-6 {
616
- bottom: 1.5rem;
617
- }
618
-
619
- .persona-top-6 {
620
- top: 1.5rem;
621
- }
622
-
623
- .persona-right-6 {
624
- right: 1.5rem;
625
- }
626
-
627
- .persona-left-6 {
628
- left: 1.5rem;
629
- }
630
-
631
- .persona-top-1\/2 {
632
- top: 50%;
633
- }
634
-
635
- .persona-left-1\/2 {
636
- left: 50%;
637
- }
638
-
639
- .persona-bottom-3 {
640
- bottom: 0.75rem;
641
- }
642
-
643
- .persona-right-5 {
644
- right: 1.25rem;
645
- }
646
-
647
- .persona-place-items-center {
648
- place-items: center;
649
- }
650
-
651
- .persona-h-8 {
652
- height: 2rem;
653
- }
654
-
655
- .persona-w-8 {
656
- width: 2rem;
657
- }
658
-
659
- .persona-h-10 {
660
- height: 2.5rem;
661
- }
662
-
663
- .persona-w-10 {
664
- width: 2.5rem;
665
- }
666
-
667
- .persona-h-12 {
668
- height: 3rem;
669
- }
670
-
671
- .persona-w-12 {
672
- width: 3rem;
673
- }
674
-
675
- .persona-leading-relaxed {
676
- line-height: 1.75;
677
- }
678
-
679
- .persona-max-w-\[85\%\] {
680
- max-width: 85%;
681
- }
682
-
683
- .persona-transition {
684
- transition: transform 160ms ease, background-color 160ms ease,
685
- box-shadow 160ms ease, opacity 160ms ease;
686
- }
687
-
688
- .persona-translate-y-\[-2px\] {
689
- transform: translateY(-2px);
690
- }
691
-
692
- .persona-transform {
693
- /* Enables transform context */
694
- }
695
-
696
- .persona--translate-x-1\/2 {
697
- transform: translateX(-50%);
698
- }
699
-
700
- .persona--translate-y-1\/2 {
701
- transform: translateY(-50%);
702
- }
703
-
704
- .persona-opacity-0 {
705
- opacity: 0;
706
- }
707
-
708
- .persona-opacity-100 {
709
- opacity: 1;
710
- }
711
-
712
- .persona-scale-100 {
713
- transform: scale(1);
714
- }
715
-
716
- .persona-scale-95 {
717
- transform: scale(0.95);
718
- }
719
-
720
- .persona-bg-\[\#f8fafc\] {
721
- background-color: #f8fafc;
722
- }
723
-
724
- .persona-flex-shrink-0 {
725
- flex-shrink: 0;
726
- }
727
-
728
- .persona-min-w-0 {
729
- min-width: 0;
730
- }
731
-
732
- .persona-w-4 {
733
- width: 1rem;
734
- }
735
-
736
- .persona-w-\[28px\] {
737
- width: 28px;
738
- }
739
-
740
- .persona-w-\[70px\] {
741
- width: 70px;
742
- }
743
-
744
- .persona-flex-1 {
745
- flex: 1 1 0%;
746
- }
747
-
748
- .persona-gap-3 {
749
- gap: 0.75rem;
750
- }
751
-
752
- .persona-bg {
753
- background-color: var(--persona-surface, #ffffff);
754
- }
755
-
756
- .persona-inline-flex {
757
- display: inline-flex;
758
- }
759
-
760
- .persona-text-left {
761
- text-align: left;
762
- }
763
-
764
- .persona-text-right {
765
- text-align: right;
766
- }
767
-
768
- .persona-mb-3 {
769
- margin-bottom: 0.75rem;
770
- }
771
-
772
- .persona-mt-2 {
773
- margin-top: 0.5rem;
774
- }
775
-
776
- .persona-h-12,
777
- .persona-w-12,
778
- .persona-h-10,
779
- .persona-w-10,
780
- .persona-h-8,
781
- .persona-w-8 {
782
- flex: none;
783
- }
784
-
785
- .persona-text-right {
786
- text-align: right;
787
- }
788
-
789
- .hover\:persona-bg-gray-200:hover {
790
- background-color: #e5e7eb;
791
- }
792
-
793
- .hover\:persona-bg-persona-container:hover {
794
- background-color: var(--persona-container, #f8fafc);
795
- }
796
-
797
- .hover\:persona-text-persona-primary:hover {
798
- color: var(--persona-primary, #111827);
799
- }
800
-
801
- .hover\:persona-translate-y-\[-2px\]:hover {
802
- transform: translateY(-2px);
803
- }
804
-
805
- .persona-pointer-events-none {
806
- pointer-events: none;
807
- }
808
-
809
- .persona-pointer-events-auto {
810
- pointer-events: auto;
811
- }
812
-
813
- .persona-min-h-\[1\.5rem\] {
814
- min-height: 1.5rem;
815
- }
816
-
817
- .persona-min-h-0 {
818
- min-height: 0;
819
- }
820
-
821
- .persona-resize-none {
822
- resize: none;
823
- }
824
-
825
- .persona-z-10 {
826
- z-index: 10;
827
- }
828
-
829
- .persona-z-50 {
830
- z-index: 50;
831
- }
832
-
833
- .persona-absolute {
834
- position: absolute;
835
- }
836
-
837
- .persona-right-4 {
838
- right: 1rem;
839
- }
840
-
841
- .persona-top-4 {
842
- top: 1rem;
843
- }
844
-
845
- .persona-text-2xl {
846
- font-size: 1.5rem;
847
- line-height: 2rem;
848
- }
849
-
850
- .persona-grid {
851
- display: grid;
852
- }
853
-
854
- .persona-place-items-center {
855
- place-items: center;
856
- }
857
-
858
- .persona-relative {
859
- position: relative;
860
- }
861
-
862
- .persona-overflow-y-auto {
863
- overflow-y: auto;
864
- }
865
-
866
- .persona-widget-body {
867
- overscroll-behavior: contain;
868
- }
869
-
870
- .persona-overflow-hidden {
871
- overflow: hidden;
872
- }
873
-
874
- .persona-min-h-\[320px\] {
875
- min-height: 320px;
876
- }
877
-
878
- .persona-min-h-\[48px\] {
879
- min-height: 48px;
880
- }
881
-
882
- .persona-min-w-\[320px\] {
883
- min-width: 320px;
884
- }
885
-
886
- .persona-max-w-\[420px\] {
887
- max-width: 420px;
888
- }
889
-
890
- .persona-w-\[360px\] {
891
- width: 360px;
892
- }
893
-
894
- .persona-w-\[400px\] {
895
- width: 400px;
896
- }
897
-
898
- .persona-h-\[640px\] {
899
- height: 640px;
900
- }
901
-
902
- .persona-border-transparent {
903
- border-color: transparent;
904
- }
905
-
906
- .persona-outline-none:focus {
907
- outline: none;
908
- }
909
-
910
- .persona-border-none:focus {
911
- border: none !important;
912
- outline: none !important;
913
- }
914
-
915
- /* Ensure textarea in composer form has no border on focus */
916
- .persona-widget-composer textarea:focus {
917
- border: none !important;
918
- outline: none !important;
919
- border-width: 0 !important;
920
- border-style: none !important;
921
- border-color: transparent !important;
922
- box-shadow: none !important;
923
- }
924
-
925
- /* Prevent iOS Safari from zooming on input focus (requires 16px minimum) */
926
- @media (hover: none) and (pointer: coarse) {
927
- .persona-composer-textarea {
928
- font-size: 1rem !important;
929
- }
930
- }
931
-
932
- /* Prevent form container from showing focus styles */
933
- .persona-widget-composer:focus-within {
934
- outline: none !important;
935
- }
936
-
937
- .persona-widget-composer:focus-within textarea {
938
- border: none !important;
939
- outline: none !important;
940
- }
941
-
942
- .persona-whitespace-pre-wrap {
943
- white-space: pre-wrap;
944
- }
945
-
946
- .persona-space-y-1 > * + * {
947
- margin-top: 0.25rem;
948
- }
949
-
950
- .persona-space-y-3 > * + * {
951
- margin-top: 0.75rem;
952
- }
953
-
954
- .persona-space-y-4 > * + * {
955
- margin-top: 1rem;
956
- }
957
-
958
- .persona-form-card {
959
- background-color: var(--persona-surface, #ffffff);
960
- border: 1px solid rgba(148, 163, 184, 0.28);
961
- border-radius: var(--persona-radius-md, 0.375rem);
962
- padding: 1.25rem;
963
- box-shadow: 0 10px 30px rgba(15, 23, 42, 0.12);
964
- }
965
-
966
- .persona-widget-container {
967
- position: relative;
968
- border-radius: var(--persona-panel-radius, var(--persona-radius-xl, 0.75rem));
969
- }
970
-
971
- .persona-widget-composer {
972
- border-radius: var(--persona-input-radius, var(--persona-radius-lg, 0.5rem));
973
- box-shadow: var(--persona-composer-shadow, none);
974
- }
975
-
976
- .persona-form-grid {
977
- display: flex;
978
- flex-direction: column;
979
- }
980
-
981
- .persona-form-field {
982
- display: flex;
983
- flex-direction: column;
984
- }
985
-
986
- .persona-cursor-pointer {
987
- cursor: pointer;
988
- }
989
-
990
- /* Send button tooltip */
991
- .persona-send-button-wrapper {
992
- position: relative;
993
- display: inline-flex;
994
- align-items: center;
995
- justify-content: center;
996
- }
997
-
998
- .persona-send-button-tooltip {
999
- position: absolute;
1000
- bottom: calc(100% + 8px);
1001
- left: 50%;
1002
- transform: translateX(-50%);
1003
- background-color: var(--persona-tooltip-background, #111827);
1004
- color: var(--persona-tooltip-foreground, #ffffff);
1005
- padding: 6px 12px;
1006
- border-radius: var(--persona-radius-sm, 0.125rem);
1007
- font-size: 12px;
1008
- white-space: nowrap;
1009
- opacity: 0;
1010
- pointer-events: none;
1011
- transition: opacity 0.2s;
1012
- z-index: 1000;
1013
- }
1014
-
1015
- .persona-send-button-tooltip::after {
1016
- content: "";
1017
- position: absolute;
1018
- top: 100%;
1019
- left: 50%;
1020
- transform: translateX(-50%);
1021
- border: 4px solid transparent;
1022
- border-top-color: var(--persona-tooltip-background, #111827);
1023
- }
1024
-
1025
- .persona-send-button-wrapper:hover .persona-send-button-tooltip,
1026
- .persona-send-button-wrapper:focus-within .persona-send-button-tooltip {
1027
- opacity: 1;
1028
- }
1029
-
1030
- /* Hide tooltips on touch devices: hover doesn't exist, and they cause clipping issues */
1031
- @media (hover: none), (max-width: 500px) {
1032
- .persona-send-button-wrapper:hover .persona-send-button-tooltip,
1033
- .persona-send-button-wrapper:focus-within .persona-send-button-tooltip {
1034
- opacity: 0;
1035
- }
1036
- }
1037
-
1038
- /* Clear chat button tooltip */
1039
- .persona-clear-chat-button-wrapper {
1040
- position: relative;
1041
- display: inline-flex;
1042
- align-items: center;
1043
- justify-content: center;
1044
- }
1045
-
1046
- .persona-clear-chat-tooltip {
1047
- background-color: var(--persona-tooltip-background, #111827);
1048
- color: var(--persona-tooltip-foreground, #ffffff);
1049
- padding: 6px 12px;
1050
- border-radius: var(--persona-radius-sm, 0.125rem);
1051
- font-size: 12px;
1052
- white-space: nowrap;
1053
- pointer-events: none;
1054
- z-index: 10000;
1055
- }
1056
-
1057
- .persona-clear-chat-tooltip-arrow {
1058
- content: "";
1059
- position: absolute;
1060
- top: 100%;
1061
- left: 50%;
1062
- transform: translateX(-50%);
1063
- border: 4px solid transparent;
1064
- border-top-color: var(--persona-tooltip-background, #111827);
1065
- }
1066
-
1067
- @media (hover: none), (max-width: 500px) {
1068
- .persona-clear-chat-tooltip {
1069
- display: none !important;
1070
- }
1071
- }
1072
-
1073
- /* Typing indicator animation */
1074
- @keyframes persona-typing {
1075
- 0%, 100% {
1076
- opacity: 0.5;
1077
- transform: translateY(0);
1078
- }
1079
- 50% {
1080
- opacity: 1;
1081
- transform: translateY(-2px);
1082
- }
1083
- }
1084
-
1085
- .persona-animate-typing {
1086
- animation: persona-typing 1s infinite;
1087
- }
1088
-
1089
- .persona-space-x-1 > * + * {
1090
- margin-left: 0.25rem;
1091
- }
1092
-
1093
- .persona-h-5 {
1094
- height: 1.25rem;
1095
- }
1096
-
1097
- .persona-h-1\.5 {
1098
- height: 0.375rem;
1099
- }
1100
-
1101
- .persona-w-1\.5 {
1102
- width: 0.375rem;
1103
- }
1104
-
1105
- .persona-sr-only {
1106
- position: absolute;
1107
- width: 1px;
1108
- height: 1px;
1109
- padding: 0;
1110
- margin: -1px;
1111
- overflow: hidden;
1112
- clip: rect(0, 0, 0, 0);
1113
- white-space: nowrap;
1114
- border-width: 0;
1115
- }
1116
-
1117
- /* Voice recognition recording animation */
1118
- @keyframes persona-voice-recording-pulse {
1119
- 0%, 100% {
1120
- opacity: 1;
1121
- transform: scale(1);
1122
- }
1123
- 50% {
1124
- opacity: 0.7;
1125
- transform: scale(1.05);
1126
- }
1127
- }
1128
-
1129
- .persona-voice-recording {
1130
- animation: persona-voice-recording-pulse 1.5s ease-in-out infinite;
1131
- }
1132
-
1133
- .persona-voice-recording svg {
1134
- animation: persona-voice-recording-pulse 1.5s ease-in-out infinite;
1135
- }
1136
-
1137
- /* Voice processing animation (spinner) */
1138
- @keyframes persona-voice-processing-spin {
1139
- from { transform: rotate(0deg); }
1140
- to { transform: rotate(360deg); }
1141
- }
1142
-
1143
- .persona-voice-processing svg {
1144
- animation: persona-voice-processing-spin 1.2s linear infinite;
1145
- }
1146
-
1147
- /* Voice speaking animation (gentle pulse: slower/subtler than recording) */
1148
- @keyframes persona-voice-speaking-pulse {
1149
- 0%, 100% { opacity: 1; transform: scale(1); }
1150
- 50% { opacity: 0.85; transform: scale(1.03); }
1151
- }
1152
-
1153
- .persona-voice-speaking {
1154
- animation: persona-voice-speaking-pulse 2s ease-in-out infinite;
1155
- }
1156
-
1157
- .persona-voice-speaking svg {
1158
- animation: persona-voice-speaking-pulse 2s ease-in-out infinite;
1159
- }
1160
-
1161
- /* Markdown content overflow handling */
1162
- .persona-message-bubble pre {
1163
- overflow-x: auto;
1164
- max-width: 100%;
1165
- word-wrap: break-word;
1166
- word-break: break-word;
1167
- white-space: pre-wrap;
1168
- background-color: var(--persona-md-code-block-bg);
1169
- color: var(--persona-md-code-block-text-color);
1170
- padding: var(--persona-md-code-block-padding);
1171
- border-radius: var(--persona-md-code-block-border-radius);
1172
- margin: 0.5rem 0;
1173
- font-size: var(--persona-md-code-block-font-size);
1174
- line-height: 1.5;
1175
- border: 1px solid var(--persona-md-code-block-border-color);
1176
- }
1177
-
1178
- .persona-message-bubble code {
1179
- word-break: break-word;
1180
- word-wrap: break-word;
1181
- white-space: pre-wrap;
1182
- overflow-wrap: break-word;
1183
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
1184
- font-size: 0.875em;
1185
- }
1186
-
1187
- .persona-message-bubble pre code {
1188
- font-size: inherit;
1189
- background-color: transparent;
1190
- padding: 0;
1191
- border-radius: 0;
1192
- }
1193
-
1194
- .persona-message-bubble img {
1195
- max-width: 100%;
1196
- height: auto;
1197
- display: block;
1198
- margin: 0.5rem 0;
1199
- border-radius: var(--persona-radius-md, 0.375rem);
1200
- }
1201
-
1202
- .persona-message-user-bubble {
1203
- border-radius: var(--persona-message-user-radius, var(--persona-radius-lg, 0.5rem));
1204
- }
1205
-
1206
- .persona-message-assistant-bubble {
1207
- border-radius: var(--persona-message-assistant-radius, var(--persona-radius-lg, 0.5rem));
1208
- border-color: var(--persona-message-assistant-border, var(--persona-border, #e5e7eb));
1209
- }
1210
-
1211
- [data-persona-root] .persona-message-assistant-bubble.persona-shadow-sm {
1212
- box-shadow: var(--persona-message-assistant-shadow, 0 1px 2px 0 rgb(0 0 0 / 0.05));
1213
- }
1214
-
1215
- [data-persona-root] .persona-message-user-bubble.persona-shadow-sm {
1216
- box-shadow: var(--persona-message-user-shadow, 0 5px 15px rgba(15, 23, 42, 0.08));
1217
- }
1218
-
1219
- [data-persona-root] .persona-tool-bubble.persona-shadow-sm {
1220
- box-shadow: var(--persona-tool-bubble-shadow, 0 5px 15px rgba(15, 23, 42, 0.08));
1221
- }
1222
-
1223
- /* ==============================
1224
- Tool call loading animations
1225
- ============================== */
1226
-
1227
- /* Inline formatting classes for template text */
1228
- [data-persona-root] .persona-tool-text-dim {
1229
- opacity: 0.5;
1230
- }
1231
- [data-persona-root] .persona-tool-text-bold {
1232
- font-weight: 600;
1233
- }
1234
- [data-persona-root] .persona-tool-text-italic {
1235
- font-style: italic;
1236
- }
1237
-
1238
- /* Pulse mode: entire text element pulses opacity */
1239
- @keyframes persona-tool-loading-pulse {
1240
- 0%, 100% { opacity: 1; }
1241
- 50% { opacity: 0.4; }
1242
- }
1243
-
1244
- [data-persona-root] .persona-tool-loading-pulse {
1245
- animation: persona-tool-loading-pulse var(--persona-tool-anim-duration, 2s) ease-in-out infinite;
1246
- }
1247
-
1248
- /* Shimmer mode: monochrome brightness sweep per character */
1249
- @keyframes persona-tool-loading-shimmer {
1250
- 0%, 100% { opacity: 0.4; }
1251
- 50% { opacity: 1; }
1252
- }
1253
-
1254
- [data-persona-root] .persona-tool-loading-shimmer .persona-tool-char {
1255
- display: inline-block;
1256
- animation: persona-tool-loading-shimmer var(--persona-tool-anim-duration, 2s) ease-in-out infinite;
1257
- animation-delay: calc(var(--char-index, 0) * 60ms);
1258
- }
1259
-
1260
- /* Shimmer-color mode: color gradient sweep per character */
1261
- @keyframes persona-tool-loading-shimmer-color {
1262
- 0%, 100% {
1263
- color: var(--persona-tool-anim-color, currentColor);
1264
- }
1265
- 50% {
1266
- color: var(--persona-tool-anim-secondary-color, #3b82f6);
1267
- }
1268
- }
1269
-
1270
- [data-persona-root] .persona-tool-loading-shimmer-color .persona-tool-char {
1271
- display: inline-block;
1272
- animation: persona-tool-loading-shimmer-color var(--persona-tool-anim-duration, 2s) ease-in-out infinite;
1273
- animation-delay: calc(var(--char-index, 0) * 60ms);
1274
- }
1275
-
1276
- /* Rainbow mode: hue rotation per character */
1277
- @keyframes persona-tool-loading-rainbow {
1278
- 0% { color: #ef4444; }
1279
- 16% { color: #f59e0b; }
1280
- 33% { color: #22c55e; }
1281
- 50% { color: #06b6d4; }
1282
- 66% { color: #3b82f6; }
1283
- 83% { color: #8b5cf6; }
1284
- 100% { color: #ef4444; }
1285
- }
1286
-
1287
- [data-persona-root] .persona-tool-loading-rainbow .persona-tool-char {
1288
- display: inline-block;
1289
- animation: persona-tool-loading-rainbow var(--persona-tool-anim-duration, 2s) linear infinite;
1290
- animation-delay: calc(var(--char-index, 0) * 80ms);
1291
- }
1292
-
1293
- /* Prefers-reduced-motion: disable all tool loading animations */
1294
- @media (prefers-reduced-motion: reduce) {
1295
- [data-persona-root] .persona-tool-loading-pulse,
1296
- [data-persona-root] .persona-tool-loading-shimmer .persona-tool-char,
1297
- [data-persona-root] .persona-tool-loading-shimmer-color .persona-tool-char,
1298
- [data-persona-root] .persona-tool-loading-rainbow .persona-tool-char {
1299
- animation: none !important;
1300
- }
1301
- }
1302
-
1303
- [data-persona-root] .persona-reasoning-bubble.persona-shadow-sm {
1304
- box-shadow: var(--persona-reasoning-bubble-shadow, 0 5px 15px rgba(15, 23, 42, 0.08));
1305
- }
1306
-
1307
- /* Artifact markdown (no .persona-message-bubble wrapper) */
1308
- [data-persona-root] .persona-markdown-bubble {
1309
- color: var(--persona-text, #111827);
1310
- font-family: var(--persona-md-prose-font-family, inherit);
1311
- }
1312
-
1313
- [data-persona-root] .persona-markdown-bubble p {
1314
- margin: 0 0 1.5em;
1315
- }
1316
-
1317
- [data-persona-root] .persona-markdown-bubble p:last-child {
1318
- margin-bottom: 0;
1319
- }
1320
-
1321
- [data-persona-root] .persona-markdown-bubble code:not(pre code) {
1322
- background-color: var(--persona-md-inline-code-bg);
1323
- color: var(--persona-md-inline-code-color, inherit);
1324
- padding: var(--persona-md-inline-code-padding);
1325
- border-radius: var(--persona-md-inline-code-border-radius);
1326
- font-size: var(--persona-md-inline-code-font-size);
1327
- }
1328
-
1329
- [data-persona-root] .persona-markdown-bubble a {
1330
- color: var(--persona-md-link-color, var(--persona-accent, #0f0f0f));
1331
- text-decoration: underline;
1332
- }
1333
-
1334
- [data-persona-root] .persona-markdown-bubble pre {
1335
- background-color: var(--persona-md-code-block-bg);
1336
- border: 1px solid var(--persona-md-code-block-border-color);
1337
- border-radius: var(--persona-radius-md, 0.375rem);
1338
- padding: 0.75rem 1rem;
1339
- overflow-x: auto;
1340
- font-size: 0.8125rem;
1341
- }
1342
-
1343
- /* Code block copy button */
1344
- .persona-code-block-wrapper {
1345
- position: relative;
1346
- margin: 0.5rem 0;
1347
- }
1348
-
1349
- .persona-code-block-wrapper pre {
1350
- margin: 0 !important;
1351
- border-top-left-radius: 0 !important;
1352
- border-top-right-radius: 0 !important;
1353
- }
1354
-
1355
- .persona-code-block-header {
1356
- display: flex;
1357
- align-items: center;
1358
- justify-content: space-between;
1359
- background-color: var(--persona-md-code-block-bg, #f3f4f6);
1360
- border: 1px solid var(--persona-md-code-block-border-color, #e5e7eb);
1361
- border-bottom: none;
1362
- border-top-left-radius: var(--persona-md-code-block-border-radius, 0.375rem);
1363
- border-top-right-radius: var(--persona-md-code-block-border-radius, 0.375rem);
1364
- padding: 0.25rem 0.5rem 0.25rem 0.75rem;
1365
- font-size: 0.75rem;
1366
- color: var(--persona-text-muted, #6b7280);
1367
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
1368
- }
1369
-
1370
- .persona-code-copy-btn {
1371
- display: inline-flex;
1372
- align-items: center;
1373
- gap: 0.25rem;
1374
- background: none;
1375
- border: 1px solid transparent;
1376
- border-radius: 0.25rem;
1377
- padding: 0.25rem 0.5rem;
1378
- cursor: pointer;
1379
- color: var(--persona-text-muted, #6b7280);
1380
- font-size: 0.75rem;
1381
- font-family: inherit;
1382
- line-height: 1;
1383
- transition: color 0.15s ease, border-color 0.15s ease;
1384
- }
1385
-
1386
- .persona-code-copy-btn:hover {
1387
- color: var(--persona-text, #111827);
1388
- border-color: var(--persona-md-code-block-border-color, #e5e7eb);
1389
- }
1390
-
1391
- .persona-code-copy-btn.persona-code-copied {
1392
- color: #16a34a;
1393
- }
1394
-
1395
- .persona-code-copy-btn.persona-code-copy-generating {
1396
- cursor: default;
1397
- opacity: 0.5;
1398
- }
1399
-
1400
- .persona-code-copy-btn.persona-code-copy-generating:hover {
1401
- color: var(--persona-text-muted, #6b7280);
1402
- border-color: transparent;
1403
- }
1404
-
1405
- /* Ensure all links in chat bubbles have underlines */
1406
- .persona-message-bubble a {
1407
- text-decoration: underline;
1408
- }
1409
-
1410
- .persona-message-bubble a:visited {
1411
- text-decoration: underline;
1412
- }
1413
-
1414
- .persona-message-bubble a:hover {
1415
- text-decoration: underline;
1416
- }
1417
-
1418
- .persona-message-bubble a:active {
1419
- text-decoration: underline;
1420
- }
1421
-
1422
- /* Ensure links in user messages match the text color */
1423
- .persona-message-user-bubble a,
1424
- .persona-message-user-bubble a:visited,
1425
- .persona-message-user-bubble a:hover,
1426
- .persona-message-user-bubble a:active {
1427
- color: inherit;
1428
- text-decoration: underline;
1429
- }
1430
-
1431
- [data-persona-root] .persona-message-assistant-bubble a {
1432
- color: var(--persona-md-link-color, var(--persona-accent, #0f0f0f));
1433
- }
1434
-
1435
- /* Markdown paragraph styles */
1436
- .persona-message-bubble p {
1437
- margin: 0;
1438
- }
1439
-
1440
- .persona-message-bubble p + p {
1441
- margin-top: 0.75rem;
1442
- }
1443
-
1444
- /* Markdown list styles */
1445
- .persona-message-bubble ul,
1446
- .persona-message-bubble ol {
1447
- margin: 0.5rem 0;
1448
- padding-left: 1.5rem;
1449
- }
1450
-
1451
- .persona-message-bubble ul {
1452
- list-style-type: disc;
1453
- }
1454
-
1455
- .persona-message-bubble ol {
1456
- list-style-type: decimal;
1457
- }
1458
-
1459
- .persona-message-bubble li {
1460
- margin: 0.25rem 0;
1461
- padding-left: 0.25rem;
1462
- }
1463
-
1464
- /* Nested lists */
1465
- .persona-message-bubble ul ul,
1466
- .persona-message-bubble ol ul {
1467
- list-style-type: circle;
1468
- margin: 0.25rem 0;
1469
- }
1470
-
1471
- .persona-message-bubble ul ul ul,
1472
- .persona-message-bubble ol ul ul,
1473
- .persona-message-bubble ul ol ul,
1474
- .persona-message-bubble ol ol ul {
1475
- list-style-type: square;
1476
- }
1477
-
1478
- .persona-message-bubble ul ol,
1479
- .persona-message-bubble ol ol {
1480
- list-style-type: lower-alpha;
1481
- margin: 0.25rem 0;
1482
- }
1483
-
1484
- /* Ensure user message paragraphs and lists have proper styling too */
1485
- .persona-message-user-bubble p {
1486
- margin: 0;
1487
- color: inherit;
1488
- }
1489
-
1490
- .persona-message-user-bubble p + p {
1491
- margin-top: 0.75rem;
1492
- }
1493
-
1494
- .persona-message-user-bubble ul,
1495
- .persona-message-user-bubble ol {
1496
- margin: 0.5rem 0;
1497
- padding-left: 1.5rem;
1498
- }
1499
-
1500
- .persona-message-user-bubble ul {
1501
- list-style-type: disc;
1502
- }
1503
-
1504
- .persona-message-user-bubble ol {
1505
- list-style-type: decimal;
1506
- }
1507
-
1508
- .persona-message-user-bubble li {
1509
- margin: 0.25rem 0;
1510
- padding-left: 0.25rem;
1511
- color: inherit;
1512
- }
1513
-
1514
- .persona-message-assistant-bubble p,
1515
- .persona-message-assistant-bubble li {
1516
- color: inherit;
1517
- }
1518
-
1519
- /* ============================================
1520
- Markdown Header Styles
1521
- ============================================ */
1522
- .persona-message-bubble h1,
1523
- [data-persona-root] .persona-markdown-bubble h1 {
1524
- font-size: var(--persona-md-h1-size);
1525
- font-weight: var(--persona-md-h1-weight);
1526
- margin: var(--persona-md-h1-margin);
1527
- line-height: var(--persona-md-h1-line-height);
1528
- color: inherit;
1529
- }
1530
-
1531
- .persona-message-bubble h2,
1532
- [data-persona-root] .persona-markdown-bubble h2 {
1533
- font-size: var(--persona-md-h2-size);
1534
- font-weight: var(--persona-md-h2-weight);
1535
- margin: var(--persona-md-h2-margin);
1536
- line-height: var(--persona-md-h2-line-height);
1537
- color: inherit;
1538
- }
1539
-
1540
- .persona-message-bubble h3,
1541
- [data-persona-root] .persona-markdown-bubble h3 {
1542
- font-size: var(--persona-md-h3-size);
1543
- font-weight: var(--persona-md-h3-weight);
1544
- margin: var(--persona-md-h3-margin);
1545
- line-height: var(--persona-md-h3-line-height);
1546
- color: inherit;
1547
- }
1548
-
1549
- .persona-message-bubble h4,
1550
- [data-persona-root] .persona-markdown-bubble h4 {
1551
- font-size: var(--persona-md-h4-size);
1552
- font-weight: var(--persona-md-h4-weight);
1553
- margin: var(--persona-md-h4-margin);
1554
- line-height: var(--persona-md-h4-line-height);
1555
- color: inherit;
1556
- }
1557
-
1558
- .persona-message-bubble h5,
1559
- [data-persona-root] .persona-markdown-bubble h5 {
1560
- font-size: var(--persona-md-h5-size);
1561
- font-weight: var(--persona-md-h5-weight);
1562
- margin: var(--persona-md-h5-margin);
1563
- line-height: var(--persona-md-h5-line-height);
1564
- color: inherit;
1565
- }
1566
-
1567
- .persona-message-bubble h6,
1568
- [data-persona-root] .persona-markdown-bubble h6 {
1569
- font-size: var(--persona-md-h6-size);
1570
- font-weight: var(--persona-md-h6-weight);
1571
- margin: var(--persona-md-h6-margin);
1572
- line-height: var(--persona-md-h6-line-height);
1573
- color: inherit;
1574
- }
1575
-
1576
- /* Remove top margin on first heading */
1577
- .persona-message-bubble h1:first-child,
1578
- .persona-message-bubble h2:first-child,
1579
- .persona-message-bubble h3:first-child,
1580
- .persona-message-bubble h4:first-child,
1581
- .persona-message-bubble h5:first-child,
1582
- .persona-message-bubble h6:first-child {
1583
- margin-top: 0;
1584
- }
1585
-
1586
- /* ============================================
1587
- Markdown Table Styles
1588
- ============================================ */
1589
- /* Tables span the full chat column. The assistant bubble is a flex item that
1590
- sizes to its content, so a width:100% table only fills that shrunk box — and
1591
- once the streaming `table-layout: fixed` lock is released the table visibly
1592
- collapses to content width ("renders full-width, then snaps narrow"). When the
1593
- bubble holds a table, let it grow to fill the row so the table keeps the full
1594
- column width. */
1595
- .persona-message-bubble:has(table) {
1596
- width: 100%;
1597
- max-width: 100%;
1598
- flex-grow: 1;
1599
- }
1600
-
1601
- .persona-message-bubble table {
1602
- width: 100%;
1603
- border-collapse: collapse;
1604
- margin: 0.5rem 0;
1605
- font-size: 0.875rem;
1606
- overflow: hidden;
1607
- border-radius: var(--persona-md-table-border-radius);
1608
- border: 1px solid var(--persona-md-table-border-color);
1609
- }
1610
-
1611
- .persona-message-bubble thead {
1612
- background-color: var(--persona-md-table-header-bg);
1613
- }
1614
-
1615
- .persona-message-bubble th {
1616
- font-weight: var(--persona-md-table-header-weight);
1617
- text-align: left;
1618
- padding: var(--persona-md-table-cell-padding);
1619
- border-bottom: 1px solid var(--persona-md-table-border-color);
1620
- }
1621
-
1622
- .persona-message-bubble td {
1623
- padding: var(--persona-md-table-cell-padding);
1624
- border-bottom: 1px solid var(--persona-md-table-border-color);
1625
- text-align: left;
1626
- }
1627
-
1628
- .persona-message-bubble tr:last-child td {
1629
- border-bottom: none;
1630
- }
1631
-
1632
- .persona-message-bubble tbody tr:nth-child(even) {
1633
- background-color: rgba(0, 0, 0, 0.02);
1634
- }
1635
-
1636
- /* While a message is still streaming, lock table column widths so incoming rows
1637
- append without the per-chunk horizontal reflow (Telegram-style space
1638
- reservation). The class is removed on the final render, relaxing the finished
1639
- table to natural content-fit widths. overflow-wrap keeps long cell content
1640
- from spilling past the fixed columns mid-stream. */
1641
- .persona-content-streaming table {
1642
- table-layout: fixed;
1643
- }
1644
-
1645
- .persona-content-streaming th,
1646
- .persona-content-streaming td {
1647
- overflow-wrap: break-word;
1648
- }
1649
-
1650
- /* ============================================
1651
- Markdown Horizontal Rule Styles
1652
- ============================================ */
1653
- .persona-message-bubble hr {
1654
- border: none;
1655
- height: var(--persona-md-hr-height);
1656
- background-color: var(--persona-md-hr-color);
1657
- margin: var(--persona-md-hr-margin);
1658
- }
1659
-
1660
- /* ============================================
1661
- Markdown Blockquote Styles
1662
- ============================================ */
1663
- .persona-message-bubble blockquote {
1664
- border-left: var(--persona-md-blockquote-border-width) solid var(--persona-md-blockquote-border-color);
1665
- padding: var(--persona-md-blockquote-padding);
1666
- margin: var(--persona-md-blockquote-margin);
1667
- background-color: var(--persona-md-blockquote-bg);
1668
- color: var(--persona-md-blockquote-text-color);
1669
- font-style: var(--persona-md-blockquote-font-style);
1670
- }
1671
-
1672
- .persona-message-bubble blockquote p {
1673
- margin: 0;
1674
- }
1675
-
1676
- .persona-message-bubble blockquote p + p {
1677
- margin-top: 0.5rem;
1678
- }
1679
-
1680
- /* Nested blockquotes */
1681
- .persona-message-bubble blockquote blockquote {
1682
- margin-left: 0.5rem;
1683
- }
1684
-
1685
- /* ============================================
1686
- Markdown Inline Code Styles (not in pre)
1687
- ============================================ */
1688
- .persona-message-bubble code:not(pre code) {
1689
- background-color: var(--persona-md-inline-code-bg);
1690
- color: var(--persona-md-inline-code-color, inherit);
1691
- padding: var(--persona-md-inline-code-padding);
1692
- border-radius: var(--persona-md-inline-code-border-radius);
1693
- font-size: var(--persona-md-inline-code-font-size);
1694
- }
1695
-
1696
- /* ============================================
1697
- Markdown Strong/Emphasis Styles
1698
- ============================================ */
1699
- .persona-message-bubble strong,
1700
- .persona-message-bubble b {
1701
- font-weight: var(--persona-md-strong-weight);
1702
- }
1703
-
1704
- .persona-message-bubble em,
1705
- .persona-message-bubble i {
1706
- font-style: var(--persona-md-em-style);
1707
- }
1708
-
1709
- /* ============================================
1710
- User Message Markdown Overrides
1711
- Ensure styles work in user bubbles too
1712
- ============================================ */
1713
- .persona-message-user-bubble h1,
1714
- .persona-message-user-bubble h2,
1715
- .persona-message-user-bubble h3,
1716
- .persona-message-user-bubble h4,
1717
- .persona-message-user-bubble h5,
1718
- .persona-message-user-bubble h6 {
1719
- color: inherit;
1720
- }
1721
-
1722
- .persona-message-user-bubble table {
1723
- border-color: rgba(255, 255, 255, 0.3);
1724
- }
1725
-
1726
- .persona-message-user-bubble th,
1727
- .persona-message-user-bubble td {
1728
- border-color: rgba(255, 255, 255, 0.3);
1729
- }
1730
-
1731
- .persona-message-user-bubble thead {
1732
- background-color: rgba(255, 255, 255, 0.1);
1733
- }
1734
-
1735
- .persona-message-user-bubble tbody tr:nth-child(even) {
1736
- background-color: rgba(255, 255, 255, 0.05);
1737
- }
1738
-
1739
- .persona-message-user-bubble hr {
1740
- background-color: rgba(255, 255, 255, 0.3);
1741
- }
1742
-
1743
- .persona-message-user-bubble blockquote {
1744
- border-left-color: rgba(255, 255, 255, 0.5);
1745
- color: inherit;
1746
- opacity: 0.9;
1747
- }
1748
-
1749
- .persona-message-user-bubble code:not(pre code) {
1750
- background-color: rgba(255, 255, 255, 0.2);
1751
- }
1752
-
1753
- /* ============================================
1754
- Message Action Buttons (Copy, Upvote, Downvote)
1755
- ============================================ */
1756
-
1757
- /* Make message bubble position relative for overlay positioning */
1758
- .persona-message-bubble {
1759
- position: relative;
1760
- /* Break long unbreakable tokens (e.g. URLs, package names) so they wrap
1761
- inside the bubble's max-width instead of overflowing horizontally. */
1762
- overflow-wrap: break-word;
1763
- }
1764
-
1765
- /* Fade-in animation for action buttons */
1766
- @keyframes persona-message-actions-fade-in {
1767
- from {
1768
- opacity: 0;
1769
- }
1770
- to {
1771
- opacity: 1;
1772
- }
1773
- }
1774
-
1775
- /* Base action bar styles */
1776
- .persona-message-actions {
1777
- display: flex;
1778
- align-items: center;
1779
- gap: 0.25rem;
1780
- margin-top: 0.5rem;
1781
- padding-top: 0.5rem;
1782
- border-top: 1px solid var(--persona-divider, #f1f5f9);
1783
- }
1784
-
1785
- /* Fade in animation only for "always" visibility mode (not hover) */
1786
- /* forwards ensures final state is kept, idiomorph preserves element so animation only plays once */
1787
- .persona-message-actions:not(.persona-message-actions-hover) {
1788
- animation: persona-message-actions-fade-in 0.3s ease-out forwards;
1789
- }
1790
-
1791
- /* ask_user_question: collapsed answered state.
1792
- * When the user picks an option, the interactive card is replaced with a
1793
- * plain assistant bubble showing the question text. A short fade + slight
1794
- * upward slide sells the "card resolved into history" feel.
1795
- */
1796
- @keyframes persona-ask-resolved {
1797
- from {
1798
- opacity: 0;
1799
- transform: translateY(-4px);
1800
- }
1801
- to {
1802
- opacity: 1;
1803
- transform: translateY(0);
1804
- }
1805
- }
1806
- [data-ask-answered="true"] {
1807
- animation: persona-ask-resolved 0.22s ease-out;
1808
- }
1809
- @media (prefers-reduced-motion: reduce) {
1810
- [data-ask-answered="true"] {
1811
- animation: none;
1812
- }
1813
- }
1814
-
1815
- /* Action bar alignment */
1816
- .persona-message-actions-left {
1817
- justify-content: flex-start;
1818
- }
1819
-
1820
- .persona-message-actions-center {
1821
- justify-content: center;
1822
- }
1823
-
1824
- .persona-message-actions-right {
1825
- justify-content: flex-end;
1826
- }
1827
-
1828
- /* Always-visible mode: pill and row layouts (when not using hover overlay) */
1829
- .persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-pill {
1830
- width: fit-content;
1831
- margin-top: 0.5rem;
1832
- padding: 0.25rem 0.5rem;
1833
- border-top: none;
1834
- }
1835
-
1836
- /* Pill alignment in always-visible mode (block flow: use margin to position) */
1837
- .persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-pill.persona-message-actions-right {
1838
- margin-left: auto;
1839
- }
1840
-
1841
- .persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-pill.persona-message-actions-center {
1842
- margin-left: auto;
1843
- margin-right: auto;
1844
- }
1845
-
1846
- .persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-row {
1847
- /* Extend to bubble edges (bubble uses persona-px-5 = 1.25rem) */
1848
- margin-left: -1.25rem;
1849
- margin-right: -1.25rem;
1850
- margin-bottom: -0.75rem;
1851
- padding: 0.5rem 1.25rem;
1852
- border-radius: 0 0 var(--persona-radius-lg, 1.5rem) var(--persona-radius-lg);
1853
- background: linear-gradient(
1854
- to top,
1855
- var(--persona-surface, #ffffff) 70%,
1856
- transparent
1857
- );
1858
- border-top: 1px solid var(--persona-divider, #f1f5f9);
1859
- }
1860
-
1861
- /* Hover visibility mode - overlay on desktop */
1862
- @media (hover: hover) {
1863
- .persona-message-actions-hover {
1864
- /* Hidden by default */
1865
- opacity: 0;
1866
- pointer-events: none;
1867
- transition: opacity 0.15s ease-in-out;
1868
- }
1869
-
1870
- /* Pill layout - compact floating pill */
1871
- .persona-message-actions-hover.persona-message-actions-pill {
1872
- position: absolute;
1873
- bottom: 0.5rem;
1874
- margin-top: 0;
1875
- padding: 0.25rem;
1876
- border-top: none;
1877
- width: fit-content;
1878
- }
1879
-
1880
- /* Pill layout - position based on alignment */
1881
- .persona-message-actions-hover.persona-message-actions-pill.persona-message-actions-left {
1882
- left: 0.75rem;
1883
- right: auto;
1884
- }
1885
-
1886
- .persona-message-actions-hover.persona-message-actions-pill.persona-message-actions-center {
1887
- left: 50%;
1888
- right: auto;
1889
- transform: translateX(-50%);
1890
- }
1891
-
1892
- .persona-message-actions-hover.persona-message-actions-pill.persona-message-actions-right {
1893
- right: 0.75rem;
1894
- left: auto;
1895
- }
1896
-
1897
- /* Row layout - full-width bar at bottom */
1898
- .persona-message-actions-hover.persona-message-actions-row {
1899
- position: absolute;
1900
- bottom: 0;
1901
- left: 0;
1902
- right: 0;
1903
- margin-top: 0;
1904
- padding: 0.5rem 0.75rem;
1905
- border-top: none;
1906
- background: linear-gradient(
1907
- to top,
1908
- var(--persona-surface, #ffffff) 70%,
1909
- transparent
1910
- );
1911
- border-radius: 0 0 var(--persona-radius-lg, 1.5rem) var(--persona-radius-lg, 1.5rem);
1912
- }
1913
-
1914
- .persona-message-bubble:hover .persona-message-actions-hover,
1915
- .persona-message-bubble:focus-within .persona-message-actions-hover {
1916
- opacity: 1;
1917
- pointer-events: auto;
1918
- }
1919
- }
1920
-
1921
- /* On touch devices (no hover support), show inline and always visible */
1922
- @media (hover: none) {
1923
- .persona-message-actions-hover {
1924
- /* Keep normal flow positioning on mobile */
1925
- position: static;
1926
- opacity: 1;
1927
- }
1928
- }
1929
-
1930
- /* Action button base styles */
1931
- .persona-message-action-btn {
1932
- display: inline-flex;
1933
- align-items: center;
1934
- justify-content: center;
1935
- width: 28px;
1936
- height: 28px;
1937
- padding: 0;
1938
- border: none;
1939
- border-radius: var(--persona-radius-sm, 0.125rem);
1940
- background-color: transparent;
1941
- color: var(--persona-muted, #6b7280);
1942
- cursor: pointer;
1943
- transition: background-color 0.15s ease, color 0.15s ease, transform 0.1s ease;
1944
- }
1945
-
1946
- .persona-message-action-btn:hover {
1947
- background-color: var(--persona-container, #f8fafc);
1948
- color: var(--persona-primary, #111827);
1949
- }
1950
-
1951
- .persona-message-action-btn:active {
1952
- transform: scale(0.95);
1953
- }
1954
-
1955
- .persona-message-action-btn:focus {
1956
- outline: none;
1957
- box-shadow: 0 0 0 2px var(--persona-accent, #0a0a0a);
1958
- }
1959
-
1960
- .persona-message-action-btn:focus:not(:focus-visible) {
1961
- box-shadow: none;
1962
- }
1963
-
1964
- .persona-message-action-btn:focus-visible {
1965
- box-shadow: 0 0 0 2px var(--persona-accent, #0a0a0a);
1966
- }
1967
-
1968
- /* Active state (voted) */
1969
- .persona-message-action-btn.persona-message-action-active {
1970
- background-color: var(--persona-accent, #0a0a0a);
1971
- color: #ffffff;
1972
- }
1973
-
1974
- .persona-message-action-btn.persona-message-action-active:hover {
1975
- background-color: var(--persona-accent, #0a0a0a);
1976
- color: #ffffff;
1977
- opacity: 0.9;
1978
- }
1979
-
1980
- /* Read-aloud loading state: spin the loader icon while audio is prepared
1981
- (near-instant for browser TTS; visible for a hosted/server engine fetch). */
1982
- .persona-message-action-btn.persona-message-action-loading svg {
1983
- animation: persona-voice-processing-spin 1s linear infinite;
1984
- }
1985
-
1986
- @media (prefers-reduced-motion: reduce) {
1987
- .persona-message-action-btn.persona-message-action-loading svg {
1988
- animation: none;
1989
- }
1990
- }
1991
-
1992
- /* Vote pop animation */
1993
- @keyframes persona-vote-pop {
1994
- 0% { transform: scale(1); }
1995
- 40% { transform: scale(1.25); }
1996
- 100% { transform: scale(1); }
1997
- }
1998
-
1999
- .persona-message-action-btn.persona-message-action-pop {
2000
- animation: persona-vote-pop 0.3s ease;
2001
- }
2002
-
2003
- /* Success state (after copy) */
2004
- .persona-message-action-btn.persona-message-action-success {
2005
- background-color: #10b981;
2006
- color: #ffffff;
2007
- }
2008
-
2009
- .persona-message-action-btn.persona-message-action-success:hover {
2010
- background-color: #10b981;
2011
- color: #ffffff;
2012
- }
2013
-
2014
- /* Icon styling within buttons */
2015
- .persona-message-action-btn svg {
2016
- width: 14px;
2017
- height: 14px;
2018
- flex-shrink: 0;
2019
- }
2020
-
2021
- /* ============================================================================
2022
- * Feedback UI Components (CSAT/NPS)
2023
- * ============================================================================ */
2024
-
2025
- .persona-feedback-container {
2026
- background: var(--persona-surface, #ffffff);
2027
- border: 1px solid var(--persona-border, #e5e7eb);
2028
- border-radius: var(--persona-radius-lg, 0.5rem);
2029
- box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
2030
- padding: 1.25rem;
2031
- max-width: 100%;
2032
- margin: 0.75rem;
2033
- animation: persona-feedback-fade-in 0.3s ease-out;
2034
- }
2035
-
2036
- @keyframes persona-feedback-fade-in {
2037
- from {
2038
- opacity: 0;
2039
- transform: translateY(10px);
2040
- }
2041
- to {
2042
- opacity: 1;
2043
- transform: translateY(0);
2044
- }
2045
- }
2046
-
2047
- .persona-feedback-content {
2048
- display: flex;
2049
- flex-direction: column;
2050
- gap: 1rem;
2051
- }
2052
-
2053
- .persona-feedback-header {
2054
- text-align: center;
2055
- }
2056
-
2057
- .persona-feedback-title {
2058
- margin: 0 0 0.25rem 0;
2059
- font-size: 1rem;
2060
- font-weight: 600;
2061
- color: var(--persona-primary, #111827);
2062
- }
2063
-
2064
- .persona-feedback-subtitle {
2065
- margin: 0;
2066
- font-size: 0.875rem;
2067
- color: var(--persona-muted, #6b7280);
2068
- }
2069
-
2070
- /* CSAT Star Rating */
2071
- .persona-feedback-rating-csat {
2072
- display: flex;
2073
- justify-content: center;
2074
- gap: 0.5rem;
2075
- }
2076
-
2077
- .persona-feedback-star-btn {
2078
- background: transparent;
2079
- border: none;
2080
- cursor: pointer;
2081
- padding: 0.25rem;
2082
- color: var(--persona-border, #d1d5db);
2083
- transition: color 0.2s ease, transform 0.15s ease;
2084
- }
2085
-
2086
- .persona-feedback-star-btn:hover {
2087
- transform: scale(1.15);
2088
- }
2089
-
2090
- .persona-feedback-star-btn.selected {
2091
- color: #fbbf24;
2092
- }
2093
-
2094
- .persona-feedback-star-btn .persona-feedback-star {
2095
- width: 32px;
2096
- height: 32px;
2097
- }
2098
-
2099
- .persona-feedback-star-btn.selected .persona-feedback-star {
2100
- fill: #fbbf24;
2101
- }
2102
-
2103
- /* NPS Number Rating */
2104
- .persona-feedback-rating-nps {
2105
- display: flex;
2106
- flex-direction: column;
2107
- gap: 0.5rem;
2108
- }
2109
-
2110
- .persona-feedback-labels {
2111
- display: flex;
2112
- justify-content: space-between;
2113
- font-size: 0.75rem;
2114
- color: var(--persona-muted, #6b7280);
2115
- }
2116
-
2117
- .persona-feedback-numbers {
2118
- display: flex;
2119
- gap: 0.25rem;
2120
- justify-content: center;
2121
- }
2122
-
2123
- .persona-feedback-number-btn {
2124
- width: 28px;
2125
- height: 28px;
2126
- display: flex;
2127
- align-items: center;
2128
- justify-content: center;
2129
- font-size: 0.75rem;
2130
- font-weight: 500;
2131
- border-radius: var(--persona-radius-sm, 0.125rem);
2132
- border: 1px solid var(--persona-border, #e5e7eb);
2133
- background: var(--persona-surface, #ffffff);
2134
- color: var(--persona-primary, #111827);
2135
- cursor: pointer;
2136
- transition: all 0.2s ease;
2137
- }
2138
-
2139
- .persona-feedback-number-btn:hover {
2140
- border-color: var(--persona-accent, #0a0a0a);
2141
- background: var(--persona-container, #f3f4f6);
2142
- }
2143
-
2144
- .persona-feedback-number-btn.selected {
2145
- color: #ffffff;
2146
- }
2147
-
2148
- /* NPS Color coding */
2149
- .persona-feedback-number-btn.persona-feedback-detractor.selected {
2150
- background: #ef4444;
2151
- border-color: #ef4444;
2152
- }
2153
-
2154
- .persona-feedback-number-btn.persona-feedback-passive.selected {
2155
- background: #f59e0b;
2156
- border-color: #f59e0b;
2157
- }
2158
-
2159
- .persona-feedback-number-btn.persona-feedback-promoter.selected {
2160
- background: #22c55e;
2161
- border-color: #22c55e;
2162
- }
2163
-
2164
- /* Comment textarea */
2165
- .persona-feedback-comment-container {
2166
- width: 100%;
2167
- }
2168
-
2169
- .persona-feedback-comment {
2170
- width: 100%;
2171
- padding: 0.625rem;
2172
- font-size: 0.875rem;
2173
- font-family: inherit;
2174
- border: 1px solid var(--persona-border, #e5e7eb);
2175
- border-radius: var(--persona-radius-sm, 0.125rem);
2176
- background: var(--persona-surface, #ffffff);
2177
- color: var(--persona-primary, #111827);
2178
- resize: vertical;
2179
- box-sizing: border-box;
2180
- }
2181
-
2182
- .persona-feedback-comment:focus {
2183
- outline: none;
2184
- border-color: var(--persona-accent, #0a0a0a);
2185
- box-shadow: 0 0 0 2px rgba(29, 78, 216, 0.15);
2186
- }
2187
-
2188
- .persona-feedback-comment::placeholder {
2189
- color: var(--persona-muted, #9ca3af);
2190
- }
2191
-
2192
- /* Action buttons */
2193
- .persona-feedback-actions {
2194
- display: flex;
2195
- gap: 0.5rem;
2196
- justify-content: flex-end;
2197
- }
2198
-
2199
- .persona-feedback-btn {
2200
- padding: 0.5rem 1rem;
2201
- font-size: 0.875rem;
2202
- font-weight: 500;
2203
- border-radius: var(--persona-radius-sm, 0.125rem);
2204
- cursor: pointer;
2205
- transition: all 0.2s ease;
2206
- }
2207
-
2208
- .persona-feedback-btn-skip {
2209
- background: transparent;
2210
- border: 1px solid var(--persona-border, #e5e7eb);
2211
- color: var(--persona-muted, #6b7280);
2212
- }
2213
-
2214
- .persona-feedback-btn-skip:hover {
2215
- background: var(--persona-container, #f3f4f6);
2216
- color: var(--persona-primary, #111827);
2217
- }
2218
-
2219
- .persona-feedback-btn-submit {
2220
- background: var(--persona-accent, #0a0a0a);
2221
- border: 1px solid var(--persona-accent, #0a0a0a);
2222
- color: #ffffff;
2223
- }
2224
-
2225
- .persona-feedback-btn-submit:hover:not(:disabled) {
2226
- opacity: 0.9;
2227
- }
2228
-
2229
- .persona-feedback-btn-submit:disabled {
2230
- opacity: 0.6;
2231
- cursor: not-allowed;
2232
- }
2233
-
2234
- /* Shake animation for validation */
2235
- @keyframes persona-feedback-shake {
2236
- 0%, 100% { transform: translateX(0); }
2237
- 10%, 30%, 50%, 70%, 90% { transform: translateX(-4px); }
2238
- 20%, 40%, 60%, 80% { transform: translateX(4px); }
2239
- }
2240
-
2241
- .persona-feedback-shake {
2242
- animation: persona-feedback-shake 0.5s ease-in-out;
2243
- }
2244
-
2245
- /* ============================================
2246
- Tool & Reasoning Bubble Theme Styles
2247
- ============================================ */
2248
-
2249
- /* Content areas: themed border and background for tool/reasoning bubbles */
2250
- .persona-tool-bubble .persona-border-t,
2251
- .persona-reasoning-bubble .persona-border-t {
2252
- border-top-color: var(--cw-border, #e5e7eb);
2253
- background-color: var(--cw-container, #f9fafb);
2254
- }
2255
-
2256
- /* Tool bubble code blocks: themed surface and border */
2257
- .persona-tool-bubble pre {
2258
- background-color: var(--cw-surface, #ffffff);
2259
- border-color: var(--cw-border, #f1f5f9);
2260
- }
2261
-
2262
- /* Collapsible header hover (tool + reasoning) */
2263
- .persona-tool-bubble button[data-expand-header],
2264
- .persona-reasoning-bubble button[data-expand-header] {
2265
- transition: background-color 0.15s ease;
2266
- }
2267
- .persona-tool-bubble button[data-expand-header]:hover,
2268
- .persona-reasoning-bubble button[data-expand-header]:hover {
2269
- background-color: var(--cw-container, #f8fafc);
2270
- }
2271
-
2272
- /* Collapsed live preview blocks: match expanded content's 1px border-top with transparent border */
2273
- [data-persona-root] [data-persona-collapsed-preview] {
2274
- border-top: 1px solid transparent;
2275
- }
2276
-
2277
- /* Grouped tool-call transcript chrome */
2278
- [data-persona-root] .persona-tool-group {
2279
- --_rail-x: 0.5rem;
2280
- --_rail-w: 2px;
2281
- --_dot-size: 6px;
2282
- --_branch-len: 0.75rem;
2283
- --_branch-y: 1.5rem;
2284
- --_rail-color: var(--cw-border, #d1d5db);
2285
- gap: 0;
2286
- }
2287
-
2288
- /* ---- Summary row ---- */
2289
- [data-persona-root] .persona-tool-group-summary {
2290
- position: relative;
2291
- min-height: 1.5rem;
2292
- padding-left: calc(var(--_rail-x) + var(--_branch-len) + 0.625rem);
2293
- margin-bottom: 0.625rem;
2294
- display: flex;
2295
- align-items: center;
2296
- }
2297
-
2298
- /* horizontal branch from rail to summary text */
2299
- [data-persona-root] .persona-tool-group-summary::before {
2300
- content: "";
2301
- position: absolute;
2302
- left: var(--_rail-x);
2303
- top: 50%;
2304
- width: var(--_branch-len);
2305
- height: var(--_rail-w);
2306
- background: var(--_rail-color);
2307
- transform: translateY(-50%);
2308
- }
2309
-
2310
- /* dot at the rail end of the summary branch */
2311
- [data-persona-root] .persona-tool-group-summary::after {
2312
- content: "";
2313
- position: absolute;
2314
- left: var(--_rail-x);
2315
- top: 50%;
2316
- width: var(--_dot-size);
2317
- height: var(--_dot-size);
2318
- border-radius: 999px;
2319
- border: var(--_rail-w) solid var(--_rail-color);
2320
- background: var(--cw-surface, #fff);
2321
- transform: translate(-50%, -50%);
2322
- }
2323
-
2324
- /* ---- Stack (children column) ---- */
2325
- [data-persona-root] .persona-tool-group-stack {
2326
- position: relative;
2327
- margin-left: var(--_rail-x);
2328
- padding-left: calc(var(--_branch-len) + 0.125rem);
2329
- gap: 0.625rem;
2330
- }
2331
-
2332
- /* vertical rail */
2333
- [data-persona-root] .persona-tool-group-stack::before {
2334
- content: "";
2335
- position: absolute;
2336
- left: 0;
2337
- top: calc(-0.625rem - (var(--_dot-size) / 2));
2338
- bottom: calc(100% - var(--_branch-y));
2339
- width: var(--_rail-w);
2340
- background: var(--_rail-color);
2341
- transform: translateX(-50%);
2342
- }
2343
-
2344
- /* extend rail between items when there are multiple */
2345
- [data-persona-root] .persona-tool-group-stack::after {
2346
- content: "";
2347
- position: absolute;
2348
- left: 0;
2349
- top: 0;
2350
- bottom: 0;
2351
- width: var(--_rail-w);
2352
- background: var(--_rail-color);
2353
- transform: translateX(-50%);
2354
- z-index: 0;
2355
- pointer-events: none;
2356
- }
2357
-
2358
- /* clip the rail at the last item's branch-y */
2359
- [data-persona-root] .persona-tool-group-item:last-child {
2360
- position: relative;
2361
- }
2362
-
2363
- /* ---- Item branches ---- */
2364
- [data-persona-root] .persona-tool-group-item {
2365
- position: relative;
2366
- z-index: 1;
2367
- }
2368
-
2369
- /* horizontal branch from rail to each child bubble */
2370
- [data-persona-root] .persona-tool-group-item::before {
2371
- content: "";
2372
- position: absolute;
2373
- left: calc(-1 * var(--_branch-len) - 0.125rem);
2374
- top: var(--_branch-y);
2375
- width: calc(var(--_branch-len) + 0.125rem);
2376
- height: var(--_rail-w);
2377
- background: var(--_rail-color);
2378
- transform: translateY(-50%);
2379
- }
2380
-
2381
- /* dot at the junction of the rail and each branch */
2382
- [data-persona-root] .persona-tool-group-item::after {
2383
- content: "";
2384
- position: absolute;
2385
- left: calc(-1 * var(--_branch-len) - 0.125rem);
2386
- top: var(--_branch-y);
2387
- width: var(--_dot-size);
2388
- height: var(--_dot-size);
2389
- border-radius: 999px;
2390
- border: var(--_rail-w) solid var(--_rail-color);
2391
- background: var(--cw-surface, #fff);
2392
- transform: translate(-50%, -50%);
2393
- z-index: 1;
2394
- }
2395
-
2396
- /* ============================================
2397
- Approval Bubble Theme Styles
2398
- ============================================ */
2399
-
2400
- /* Approval bubble defaults (overridden by inline styles when config exists) */
2401
- .persona-approval-bubble {
2402
- background-color: var(--cw-surface, #ffffff);
2403
- border-color: var(--cw-border, #e5e7eb);
2404
- }
2405
-
2406
- /* Approval button hover/active states */
2407
- .persona-approval-bubble [data-approval-action] {
2408
- transition: opacity 0.15s ease, transform 0.1s ease, background-color 0.15s ease;
2409
- }
2410
- .persona-approval-bubble [data-approval-action="approve"]:hover {
2411
- opacity: 0.85;
2412
- }
2413
- .persona-approval-bubble [data-approval-action="approve"]:active {
2414
- transform: scale(0.97);
2415
- }
2416
- .persona-approval-bubble [data-approval-action="deny"]:hover {
2417
- background-color: rgba(220, 38, 38, 0.08);
2418
- }
2419
- .persona-approval-bubble [data-approval-action="deny"]:active {
2420
- transform: scale(0.97);
2421
- }
2422
-
2423
- /* ============================================
2424
- Approval card (default renderer, components/approval-actions.ts)
2425
- Neutral surface card. Every color is a --persona-* token; the legacy
2426
- --persona-approval-* shorthands are honored fallback-first so a consumer who
2427
- themed them still wins, then the new semantic default applies.
2428
- ============================================ */
2429
- .persona-approval-card {
2430
- width: 100%;
2431
- max-width: 100%;
2432
- box-sizing: border-box;
2433
- background: var(--persona-approval-bg, var(--persona-surface, #ffffff));
2434
- border: 0.5px solid var(--persona-approval-border, var(--persona-border, rgba(11, 11, 11, 0.1)));
2435
- border-radius: 0.75rem;
2436
- padding: 0.5rem;
2437
- }
2438
- .persona-approval-card.persona-shadow-sm {
2439
- box-shadow: var(--persona-approval-shadow, 0 1px 2px 0 rgba(11, 11, 11, 0.06), 0 2px 8px 0 rgba(11, 11, 11, 0.04));
2440
- }
2441
-
2442
- .persona-approval-head {
2443
- display: flex;
2444
- align-items: center;
2445
- gap: 0.75rem;
2446
- width: 100%;
2447
- border: none;
2448
- background: transparent;
2449
- padding: 0.4rem 0.6rem;
2450
- cursor: pointer;
2451
- text-align: left;
2452
- font: inherit;
2453
- color: var(--persona-text, #0b0b0b);
2454
- border-radius: 0.5rem;
2455
- transition: background 0.12s ease;
2456
- }
2457
- .persona-approval-head:hover { background: var(--persona-container, rgba(11, 11, 11, 0.04)); }
2458
- .persona-approval-head[data-static="true"] { cursor: default; }
2459
- .persona-approval-head[data-static="true"]:hover { background: transparent; }
2460
-
2461
- .persona-approval-logo {
2462
- flex-shrink: 0;
2463
- width: 24px;
2464
- height: 24px;
2465
- display: grid;
2466
- place-items: center;
2467
- box-sizing: border-box;
2468
- border: 0.5px solid var(--persona-border, rgba(11, 11, 11, 0.12));
2469
- border-radius: 6.5px;
2470
- background: var(--persona-surface, #ffffff);
2471
- box-shadow: 0 1px 2px 0 rgba(11, 11, 11, 0.08);
2472
- color: var(--persona-muted, #6b7280);
2473
- overflow: hidden;
2474
- }
2475
- .persona-approval-logo svg { width: 15px; height: 15px; display: block; }
2476
-
2477
- .persona-approval-title {
2478
- flex: 1;
2479
- min-width: 0;
2480
- font-size: 0.875rem;
2481
- line-height: 1.4;
2482
- color: var(--persona-text, #0b0b0b);
2483
- }
2484
- .persona-approval-title strong { font-weight: 600; }
2485
-
2486
- .persona-approval-toggle {
2487
- display: inline-flex;
2488
- align-items: center;
2489
- margin-left: 0.25rem;
2490
- color: var(--persona-muted, #6b7280);
2491
- vertical-align: middle;
2492
- transition: transform 0.15s ease;
2493
- }
2494
- .persona-approval-toggle svg { width: 0.85rem; height: 0.85rem; display: block; }
2495
- .persona-approval-head[aria-expanded="false"] .persona-approval-toggle { transform: rotate(-90deg); }
2496
-
2497
- .persona-approval-body {
2498
- padding: 0.5rem 0.6rem 0.35rem calc(24px + 0.75rem + 0.6rem);
2499
- }
2500
-
2501
- .persona-approval-details {
2502
- margin: 0 0 0.75rem;
2503
- }
2504
- .persona-approval-details[hidden] { display: none; }
2505
-
2506
- .persona-approval-desc {
2507
- margin: 0 0 0.5rem;
2508
- font-size: 0.8125rem;
2509
- line-height: 1.4;
2510
- color: var(--persona-muted, #6b7280);
2511
- }
2512
-
2513
- .persona-approval-params {
2514
- margin: 0;
2515
- padding: 0.7rem 0.85rem;
2516
- border-radius: 0.625rem;
2517
- background: var(--persona-container, rgba(11, 11, 11, 0.04));
2518
- color: var(--persona-text, #1f2937);
2519
- font-size: 0.75rem;
2520
- line-height: 1rem;
2521
- overflow-x: auto;
2522
- max-height: 9rem;
2523
- }
2524
-
2525
- .persona-approval-reason {
2526
- margin: 0 0 0.6rem;
2527
- font-size: 0.8125rem;
2528
- line-height: 1.4;
2529
- color: var(--persona-muted, #6b7280);
2530
- }
2531
- .persona-approval-reason-label { font-weight: 500; }
2532
-
2533
- .persona-approval-resolved {
2534
- display: flex;
2535
- align-items: center;
2536
- gap: 0.45rem;
2537
- margin: 0.5rem 0;
2538
- padding: 0.3rem 0.15rem;
2539
- font-size: 0.8rem;
2540
- color: var(--persona-muted, #6b7280);
2541
- }
2542
- .persona-approval-resolved svg { width: 0.95rem; height: 0.95rem; display: block; flex-shrink: 0; }
2543
- .persona-approval-resolved-name { font-weight: 600; }
2544
-
2545
- .persona-approval-actions {
2546
- display: flex;
2547
- align-items: center;
2548
- gap: 0.5rem;
2549
- flex-wrap: wrap;
2550
- }
2551
- .persona-approval-split { position: relative; display: inline-flex; }
2552
-
2553
- .persona-approval-primary,
2554
- .persona-approval-caret,
2555
- .persona-approval-deny {
2556
- border: none;
2557
- cursor: pointer;
2558
- font: inherit;
2559
- font-size: 0.875rem;
2560
- font-weight: 500;
2561
- height: 2rem;
2562
- display: inline-flex;
2563
- align-items: center;
2564
- gap: 0.375rem;
2565
- transition: background 0.12s ease, box-shadow 0.12s ease;
2566
- }
2567
- /* Primary anchors to the brand token via the established button-primary pair. */
2568
- .persona-approval-primary {
2569
- background: var(--persona-approval-approve-bg, var(--persona-button-primary-bg, var(--persona-primary, #111827)));
2570
- color: var(--persona-button-primary-fg, var(--persona-text-inverse, #ffffff));
2571
- padding: 0 0.75rem;
2572
- border-radius: 0.5rem 0 0 0.5rem;
2573
- }
2574
- .persona-approval-primary--solo { border-radius: 0.5rem; }
2575
- .persona-approval-caret {
2576
- position: relative;
2577
- background: var(--persona-approval-approve-bg, var(--persona-button-primary-bg, var(--persona-primary, #111827)));
2578
- color: var(--persona-button-primary-fg, var(--persona-text-inverse, #ffffff));
2579
- width: 2rem;
2580
- justify-content: center;
2581
- padding: 0;
2582
- border-radius: 0 0.5rem 0.5rem 0;
2583
- }
2584
- .persona-approval-caret svg { width: 0.95rem; height: 0.95rem; display: block; }
2585
- .persona-approval-caret::before {
2586
- content: "";
2587
- position: absolute;
2588
- left: 0;
2589
- top: 4px;
2590
- bottom: 4px;
2591
- width: 1px;
2592
- background: var(--persona-button-primary-fg, #ffffff);
2593
- opacity: 0.25;
2594
- transition: opacity 0.12s ease;
2595
- }
2596
- .persona-approval-caret:hover::before,
2597
- .persona-approval-primary:hover + .persona-approval-caret::before { opacity: 0; }
2598
- .persona-approval-primary:hover,
2599
- .persona-approval-caret:hover { box-shadow: inset 0 0 0 999px rgba(255, 255, 255, 0.16); }
2600
-
2601
- .persona-approval-deny {
2602
- background: var(--persona-approval-deny-bg, var(--persona-container, rgba(11, 11, 11, 0.04)));
2603
- color: var(--persona-text, #1f2937);
2604
- padding: 0 0.75rem;
2605
- border-radius: 0.5rem;
2606
- box-shadow: inset 0 0 0 0.5px var(--persona-border, rgba(0, 0, 0, 0.1));
2607
- }
2608
- .persona-approval-deny:hover { box-shadow: inset 0 0 0 0.5px var(--persona-border, rgba(0, 0, 0, 0.1)), inset 0 0 0 999px rgba(11, 11, 11, 0.04); }
2609
-
2610
- .persona-approval-menu {
2611
- width: max-content;
2612
- max-width: 18rem;
2613
- box-sizing: border-box;
2614
- background: var(--persona-surface, #ffffff);
2615
- border: 0.5px solid var(--persona-border, rgba(11, 11, 11, 0.1));
2616
- border-radius: 0.625rem;
2617
- box-shadow: 0 8px 24px rgba(11, 11, 11, 0.12), 0 2px 6px rgba(11, 11, 11, 0.08);
2618
- padding: 0.25rem;
2619
- white-space: nowrap;
2620
- }
2621
- .persona-approval-menu-item {
2622
- display: flex;
2623
- align-items: center;
2624
- gap: 0.6rem;
2625
- width: 100%;
2626
- border: none;
2627
- background: transparent;
2628
- cursor: pointer;
2629
- font: inherit;
2630
- font-size: 0.875rem;
2631
- color: var(--persona-text, #1f2937);
2632
- padding: 0.45rem 0.6rem;
2633
- border-radius: 0.4rem;
2634
- text-align: left;
2635
- transition: background 0.12s ease;
2636
- }
2637
- .persona-approval-menu-item:hover { background: var(--persona-container, rgba(11, 11, 11, 0.06)); }
2638
- .persona-approval-kbd {
2639
- font-family: inherit;
2640
- font-size: 0.75rem;
2641
- line-height: 1;
2642
- opacity: 0.7;
2643
- margin-left: 0.25rem;
2644
- }
2645
- .persona-approval-menu-item .persona-approval-kbd { margin-left: auto; }
2646
-
2647
- /* ============================================
2648
- Visibility (Tailwind parity: prefix persona-)
2649
- Shipped widget.css is hand-maintained; these utilities are used in TS but not generated by Tailwind at build time.
2650
- ============================================ */
2651
- [data-persona-root] .persona-hidden {
2652
- display: none !important;
2653
- }
2654
-
2655
- @media (min-width: 768px) {
2656
- [data-persona-root] .md\:persona-hidden {
2657
- display: none !important;
2658
- }
2659
- }
2660
-
2661
- /* ============================================
2662
- Artifact sidebar (split pane / mobile drawer)
2663
- Vars set from TS: --persona-artifact-split-gap, --persona-artifact-pane-width,
2664
- --persona-artifact-pane-max-width, --persona-artifact-pane-min-width
2665
- ============================================ */
2666
- [data-persona-root] .persona-artifact-split-root {
2667
- gap: var(--persona-artifact-split-gap, 0.5rem);
2668
- }
2669
-
2670
- /* Document toolbar preset: optional layout vars: --persona-artifact-doc-toolbar-icon-color, etc. */
2671
- [data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn {
2672
- display: inline-flex;
2673
- align-items: center;
2674
- justify-content: center;
2675
- padding: var(--persona-artifact-toolbar-icon-padding, 0.25rem);
2676
- border-radius: var(--persona-artifact-toolbar-icon-radius, var(--persona-radius-md, 0.375rem));
2677
- border: var(--persona-artifact-toolbar-icon-border, 1px solid var(--persona-border, #e5e7eb));
2678
- background: var(--persona-artifact-toolbar-icon-bg, var(--persona-surface, #ffffff));
2679
- color: var(--persona-artifact-doc-toolbar-icon-color, var(--persona-text, #111827));
2680
- cursor: pointer;
2681
- line-height: 1;
2682
- }
2683
-
2684
- [data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn:hover {
2685
- color: var(--persona-artifact-toolbar-icon-hover-color, inherit);
2686
- background: var(--persona-artifact-toolbar-icon-hover-bg, var(--persona-container, #f3f4f6));
2687
- }
2688
-
2689
- [data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn[aria-pressed="true"] {
2690
- background: var(--persona-artifact-doc-toggle-active-bg, var(--persona-container, #f3f4f6));
2691
- border-color: var(--persona-artifact-doc-toggle-active-border, var(--persona-border, #e5e7eb));
2692
- }
2693
-
2694
- [data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-copy-btn {
2695
- display: inline-flex;
2696
- align-items: center;
2697
- gap: 0.35rem;
2698
- padding: var(--persona-artifact-toolbar-copy-padding, 0.25rem 0.5rem);
2699
- border-radius: var(--persona-artifact-toolbar-copy-radius, var(--persona-radius-md, 0.375rem));
2700
- border: var(--persona-artifact-toolbar-copy-border, 1px solid var(--persona-border, #e5e7eb));
2701
- background: var(--persona-artifact-toolbar-copy-bg, var(--persona-surface, #ffffff));
2702
- color: var(--persona-artifact-toolbar-copy-color, var(--persona-artifact-doc-toolbar-icon-color, var(--persona-text, #111827)));
2703
- cursor: pointer;
2704
- font-size: 0.75rem;
2705
- line-height: 1.25;
2706
- }
2707
-
2708
- [data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-copy-btn:hover {
2709
- background: var(--persona-artifact-toolbar-icon-hover-bg, var(--persona-container, #f3f4f6));
2710
- }
2711
-
2712
- [data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-copy-label {
2713
- font-weight: 500;
2714
- }
2715
-
2716
- /* Artifact tab theming */
2717
- [data-persona-root] .persona-artifact-tab {
2718
- background: var(--persona-artifact-tab-bg, transparent);
2719
- border-radius: var(--persona-artifact-tab-radius, 0.5rem);
2720
- color: var(--persona-artifact-tab-color, inherit);
2721
- }
2722
-
2723
- [data-persona-root] .persona-artifact-tab.persona-bg-persona-container {
2724
- background: var(--persona-artifact-tab-active-bg, var(--persona-container, #f3f4f6));
2725
- border-color: var(--persona-artifact-tab-active-border, var(--persona-border, #e5e7eb));
2726
- }
2727
-
2728
- /* Artifact toolbar background theming */
2729
- [data-persona-root] .persona-artifact-toolbar {
2730
- background: var(--persona-artifact-toolbar-bg, var(--persona-surface, #fff));
2731
- }
2732
-
2733
- /* Toggle group gap */
2734
- [data-persona-root] .persona-artifact-toggle-group {
2735
- gap: var(--persona-artifact-toolbar-toggle-group-gap, 0.25rem);
2736
- }
2737
-
2738
- /* Toggle button border-radius (view/code buttons) */
2739
- [data-persona-root] .persona-artifact-toolbar-document .persona-artifact-view-btn,
2740
- [data-persona-root] .persona-artifact-toolbar-document .persona-artifact-code-btn {
2741
- border-radius: var(--persona-artifact-toolbar-toggle-radius, var(--persona-artifact-toolbar-icon-radius, var(--persona-radius-md, 0.375rem)));
2742
- }
2743
-
2744
- /* Tab hover */
2745
- [data-persona-root] .persona-artifact-tab:hover {
2746
- background: var(--persona-artifact-tab-hover-bg, var(--persona-container, #f3f4f6));
2747
- }
2748
-
2749
- /* Tab list container */
2750
- [data-persona-root] .persona-artifact-list {
2751
- background: var(--persona-artifact-tab-list-bg, transparent);
2752
- border-bottom-color: var(--persona-artifact-tab-list-border-color, var(--persona-border, #e5e7eb));
2753
- padding: var(--persona-artifact-tab-list-padding, 0.5rem);
2754
- }
2755
-
2756
- /* Toolbar border override */
2757
- [data-persona-root] .persona-artifact-toolbar-document {
2758
- border-bottom: var(--persona-artifact-toolbar-border, 1px solid var(--persona-border, #e5e7eb));
2759
- }
2760
-
2761
- /* ── Composable button utilities ── */
2762
-
2763
- /* Icon button: base for all icon-only buttons created by createIconButton() */
2764
- [data-persona-root] .persona-icon-btn {
2765
- display: inline-flex;
2766
- align-items: center;
2767
- justify-content: center;
2768
- padding: var(--persona-icon-btn-padding, 0.25rem);
2769
- border-radius: var(--persona-icon-btn-radius, var(--persona-radius-md, 0.375rem));
2770
- border: var(--persona-icon-btn-border, 1px solid var(--persona-border, #e5e7eb));
2771
- background: var(--persona-icon-btn-bg, var(--persona-surface, #ffffff));
2772
- color: var(--persona-icon-btn-color, var(--persona-text, #111827));
2773
- cursor: pointer;
2774
- line-height: 1;
2775
- transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
2776
- }
2777
-
2778
- [data-persona-root] .persona-icon-btn:hover {
2779
- background: var(--persona-icon-btn-hover-bg, var(--persona-container, #f3f4f6));
2780
- color: var(--persona-icon-btn-hover-color, inherit);
2781
- }
2782
-
2783
- [data-persona-root] .persona-icon-btn:focus-visible {
2784
- outline: 2px solid var(--persona-accent, #171717);
2785
- outline-offset: 2px;
2786
- }
2787
-
2788
- [data-persona-root] .persona-icon-btn[aria-pressed="true"] {
2789
- background: var(--persona-icon-btn-active-bg, var(--persona-container, #f3f4f6));
2790
- border-color: var(--persona-icon-btn-active-border, var(--persona-border, #e5e7eb));
2791
- }
2792
-
2793
- /* Label button: icon + text button created by createLabelButton() */
2794
- [data-persona-root] .persona-label-btn {
2795
- display: inline-flex;
2796
- align-items: center;
2797
- gap: var(--persona-label-btn-gap, 0.35rem);
2798
- padding: var(--persona-label-btn-padding, 0.25rem 0.5rem);
2799
- border-radius: var(--persona-label-btn-radius, var(--persona-radius-md, 0.375rem));
2800
- border: var(--persona-label-btn-border, 1px solid var(--persona-border, #e5e7eb));
2801
- background: var(--persona-label-btn-bg, var(--persona-surface, #ffffff));
2802
- color: var(--persona-label-btn-color, var(--persona-text, #111827));
2803
- cursor: pointer;
2804
- font-size: var(--persona-label-btn-font-size, 0.75rem);
2805
- font-weight: 500;
2806
- line-height: 1.25;
2807
- white-space: nowrap;
2808
- transition: background-color 0.15s ease, color 0.15s ease;
2809
- }
2810
-
2811
- [data-persona-root] .persona-label-btn:hover {
2812
- background: var(--persona-label-btn-hover-bg, var(--persona-container, #f3f4f6));
2813
- }
2814
-
2815
- [data-persona-root] .persona-label-btn:focus-visible {
2816
- outline: 2px solid var(--persona-accent, #171717);
2817
- outline-offset: 2px;
2818
- }
2819
-
2820
- [data-persona-root] .persona-label-btn--sm {
2821
- padding: var(--persona-label-btn-padding, 0.25rem 0.5rem);
2822
- font-size: var(--persona-label-btn-font-size, 0.75rem);
2823
- }
2824
-
2825
- [data-persona-root] .persona-label-btn--md {
2826
- padding: 0.375rem 0.75rem;
2827
- font-size: 0.8125rem;
2828
- }
2829
-
2830
- [data-persona-root] .persona-label-btn--primary {
2831
- background: var(--persona-primary, #171717);
2832
- color: var(--persona-text-inverse, #ffffff);
2833
- border-color: transparent;
2834
- }
2835
-
2836
- [data-persona-root] .persona-label-btn--primary:hover {
2837
- opacity: 0.9;
2838
- }
2839
-
2840
- [data-persona-root] .persona-label-btn--destructive {
2841
- color: var(--persona-label-btn-destructive-color, #ef4444);
2842
- }
2843
-
2844
- [data-persona-root] .persona-label-btn--ghost {
2845
- border: none;
2846
- background: transparent;
2847
- }
2848
-
2849
- [data-persona-root] .persona-label-btn--ghost:hover {
2850
- background: var(--persona-label-btn-hover-bg, var(--persona-container, #f3f4f6));
2851
- }
2852
-
2853
- [data-persona-root] .persona-scroll-to-bottom-indicator {
2854
- display: inline-flex;
2855
- align-items: center;
2856
- justify-content: center;
2857
- gap: var(--persona-scroll-to-bottom-gap, 0.5rem);
2858
- min-height: var(--persona-scroll-to-bottom-size, 40px);
2859
- border-radius: var(--persona-scroll-to-bottom-radius, var(--persona-radius-full, 9999px));
2860
- border: 1px solid var(--persona-scroll-to-bottom-border, var(--persona-primary, #111827));
2861
- background: var(--persona-scroll-to-bottom-bg, var(--persona-button-primary-bg, var(--persona-accent, #0f0f0f)));
2862
- color: var(--persona-scroll-to-bottom-fg, var(--persona-button-primary-fg, var(--persona-text-inverse, #ffffff)));
2863
- box-shadow: var(--persona-scroll-to-bottom-shadow, 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1));
2864
- font-size: var(--persona-scroll-to-bottom-font-size, 0.875rem);
2865
- line-height: 1;
2866
- }
2867
-
2868
- [data-persona-root] .persona-scroll-to-bottom-indicator[data-persona-scroll-to-bottom-has-label="true"] {
2869
- padding: var(--persona-scroll-to-bottom-padding, 0.5rem 0.875rem);
2870
- }
2871
-
2872
- [data-persona-root] .persona-scroll-to-bottom-indicator[data-persona-scroll-to-bottom-has-label="false"] {
2873
- width: var(--persona-scroll-to-bottom-size, 40px);
2874
- height: var(--persona-scroll-to-bottom-size, 40px);
2875
- padding: 0;
2876
- gap: 0;
2877
- }
2878
-
2879
- [data-persona-root] .persona-scroll-to-bottom-indicator svg {
2880
- width: var(--persona-scroll-to-bottom-icon-size, 14px);
2881
- height: var(--persona-scroll-to-bottom-icon-size, 14px);
2882
- }
2883
-
2884
- /* New-messages count badge pinned to the affordance's top-right corner. */
2885
- [data-persona-root] .persona-scroll-to-bottom-indicator [data-persona-scroll-to-bottom-count] {
2886
- position: absolute;
2887
- top: -6px;
2888
- right: -6px;
2889
- box-sizing: border-box;
2890
- min-width: 18px;
2891
- height: 18px;
2892
- padding: 0 5px;
2893
- border-radius: var(--persona-radius-full, 9999px);
2894
- border: 1px solid var(--persona-scroll-to-bottom-border, var(--persona-primary, #111827));
2895
- background: var(--persona-scroll-to-bottom-count-bg, var(--persona-surface, #ffffff));
2896
- color: var(--persona-scroll-to-bottom-count-fg, var(--persona-primary, #111827));
2897
- font-size: 11px;
2898
- font-weight: 600;
2899
- line-height: 16px;
2900
- text-align: center;
2901
- }
2902
-
2903
- [data-persona-root] .persona-scroll-to-bottom-indicator:hover {
2904
- opacity: 0.92;
2905
- }
2906
-
2907
- [data-persona-root] .persona-scroll-to-bottom-indicator:focus-visible {
2908
- outline: 2px solid var(--persona-accent, #171717);
2909
- outline-offset: 2px;
2910
- }
2911
-
2912
- /* Toggle group: mutually exclusive button set created by createToggleGroup() */
2913
- [data-persona-root] .persona-toggle-group {
2914
- display: inline-flex;
2915
- gap: var(--persona-toggle-group-gap, 0);
2916
- }
2917
-
2918
- [data-persona-root] .persona-toggle-group > .persona-icon-btn {
2919
- border-radius: 0;
2920
- }
2921
-
2922
- [data-persona-root] .persona-toggle-group > .persona-icon-btn:first-child {
2923
- border-top-left-radius: var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, 0.375rem)));
2924
- border-bottom-left-radius: var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, 0.375rem)));
2925
- }
2926
-
2927
- [data-persona-root] .persona-toggle-group > .persona-icon-btn:last-child {
2928
- border-top-right-radius: var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, 0.375rem)));
2929
- border-bottom-right-radius: var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, 0.375rem)));
2930
- }
2931
-
2932
- /* Combo button: label + chevron with dropdown */
2933
- [data-persona-root] .persona-combo-btn {
2934
- font-size: var(--persona-combo-btn-font-size, 0.8125rem);
2935
- font-weight: var(--persona-combo-btn-font-weight, 600);
2936
- color: var(--persona-combo-btn-color, var(--persona-text, #111827));
2937
- user-select: none;
2938
- }
2939
-
2940
- [data-persona-root] .persona-combo-btn-label {
2941
- white-space: nowrap;
2942
- overflow: hidden;
2943
- text-overflow: ellipsis;
2944
- }
2945
-
2946
- /* Dropdown menu utility */
2947
- [data-persona-root] .persona-dropdown-menu {
2948
- z-index: 100;
2949
- min-width: 160px;
2950
- background: var(--persona-dropdown-bg, var(--persona-surface, #fff));
2951
- border: var(--persona-dropdown-border, 1px solid var(--persona-border, #e5e7eb));
2952
- border-radius: var(--persona-dropdown-radius, 0.625rem);
2953
- padding: 0.25rem 0;
2954
- box-shadow: var(--persona-dropdown-shadow, 0 4px 16px rgba(0,0,0,0.12));
2955
- }
2956
-
2957
- [data-persona-root] .persona-dropdown-menu button {
2958
- display: flex;
2959
- align-items: center;
2960
- gap: 0.625rem;
2961
- width: 100%;
2962
- padding: 0.5rem 0.875rem;
2963
- border: none;
2964
- background: transparent;
2965
- color: var(--persona-dropdown-item-color, var(--persona-text, #1f2937));
2966
- font-size: 0.8125rem;
2967
- cursor: pointer;
2968
- text-align: left;
2969
- white-space: nowrap;
2970
- }
2971
-
2972
- [data-persona-root] .persona-dropdown-menu button:hover {
2973
- background: var(--persona-dropdown-item-hover-bg, var(--persona-container, #f3f4f6));
2974
- }
2975
-
2976
- [data-persona-root] .persona-dropdown-menu button[data-destructive] {
2977
- color: var(--persona-dropdown-destructive-color, #ef4444);
2978
- }
2979
-
2980
- [data-persona-root] .persona-dropdown-menu hr {
2981
- border: none;
2982
- border-top: 1px solid var(--persona-dropdown-hr, var(--persona-border, #e5e7eb));
2983
- margin: 0.25rem 0;
2984
- }
2985
-
2986
- /* Draggable split handle (desktop split only; hidden in drawer / narrow host / small viewport) */
2987
- [data-persona-root] .persona-artifact-split-handle {
2988
- width: 6px;
2989
- flex-shrink: 0;
2990
- cursor: col-resize;
2991
- touch-action: none;
2992
- align-self: stretch;
2993
- background: transparent;
2994
- border: none;
2995
- padding: 0;
2996
- margin: 0;
2997
- box-sizing: border-box;
2998
- }
2999
-
3000
- [data-persona-root] .persona-artifact-split-handle:hover,
3001
- [data-persona-root] .persona-artifact-split-handle:focus-visible {
3002
- background: color-mix(in srgb, var(--persona-border, #e5e7eb) 55%, transparent);
3003
- outline: none;
3004
- }
3005
-
3006
- [data-persona-root].persona-artifact-narrow-host .persona-artifact-split-handle {
3007
- display: none !important;
3008
- }
3009
-
3010
- @media (max-width: 640px) {
3011
- [data-persona-root] .persona-artifact-split-handle {
3012
- display: none !important;
3013
- }
3014
- }
3015
-
3016
- @media (min-width: 641px) {
3017
- [data-persona-root] .persona-artifact-pane {
3018
- width: var(--persona-artifact-pane-width, 40%);
3019
- max-width: var(--persona-artifact-pane-max-width, 28rem);
3020
- min-width: var(--persona-artifact-pane-min-width, 0);
3021
- flex-shrink: 0;
3022
- box-shadow: var(--persona-artifact-pane-shadow, -2px 0 12px rgba(15, 23, 42, 0.06));
3023
- }
3024
- }
3025
-
3026
- /* paneBorderRadius: works on any paneAppearance; overflow clips content to rounded shape */
3027
- [data-persona-root] .persona-artifact-pane {
3028
- border-radius: var(--persona-artifact-pane-radius, 0);
3029
- overflow: hidden;
3030
- /* Layout paneBackground → theme components.artifact.pane.background → semantic surface */
3031
- background-color: var(
3032
- --persona-artifact-pane-bg,
3033
- var(--persona-components-artifact-pane-background, var(--persona-surface, #ffffff))
3034
- );
3035
- }
3036
-
3037
- /* paneAppearance: 'seamless': flush with chat, no border/shadow/gap */
3038
- /* `position: relative` for resizer overlay; gap 0; positioning is applied in ui.ts */
3039
- [data-persona-root].persona-artifact-appearance-seamless .persona-artifact-split-root {
3040
- position: relative;
3041
- gap: 0 !important;
3042
- }
3043
-
3044
- [data-persona-root].persona-artifact-appearance-seamless .persona-artifact-pane {
3045
- border-left-width: 0 !important;
3046
- border-left-color: transparent !important;
3047
- box-shadow: none !important;
3048
- /* Same token chain; final fallback stays container for flush split chrome */
3049
- background-color: var(
3050
- --persona-artifact-pane-bg,
3051
- var(--persona-components-artifact-pane-background, var(--persona-container, #f8fafc))
3052
- );
3053
- }
3054
-
3055
- /* layout.paneBorder / paneBorderLeft: theme overrides (after appearance defaults) */
3056
- [data-persona-root].persona-artifact-border-full .persona-artifact-pane {
3057
- border: var(--persona-artifact-pane-border) !important;
3058
- }
3059
-
3060
- [data-persona-root].persona-artifact-border-left .persona-artifact-pane {
3061
- border-top: none !important;
3062
- border-right: none !important;
3063
- border-bottom: none !important;
3064
- border-left: var(--persona-artifact-pane-border-left) !important;
3065
- }
3066
-
3067
- [data-persona-root].persona-artifact-appearance-seamless.persona-artifact-border-left .persona-artifact-pane {
3068
- border-left: var(--persona-artifact-pane-border-left) !important;
3069
- }
3070
-
3071
- [data-persona-root].persona-artifact-appearance-seamless.persona-artifact-border-full .persona-artifact-pane {
3072
- border: var(--persona-artifact-pane-border) !important;
3073
- }
3074
-
3075
- /*
3076
- * Unified split chrome: one visual shell (desktop split only; narrowed via :not(.narrow-host) + breakpoint).
3077
- * Main chat card (.persona-widget-container) loses inner-right rounding; artifact gains matching outer-right.
3078
- */
3079
- @media (min-width: 641px) {
3080
- [data-persona-root]:not(.persona-artifact-narrow-host).persona-artifact-unified-split .persona-widget-container {
3081
- border-top-right-radius: 0 !important;
3082
- border-bottom-right-radius: 0 !important;
3083
- }
3084
-
3085
- [data-persona-root]:not(.persona-artifact-narrow-host).persona-artifact-unified-split .persona-artifact-pane {
3086
- border-top-left-radius: 0 !important;
3087
- border-bottom-left-radius: 0 !important;
3088
- border-top-right-radius: var(--persona-artifact-unified-outer-radius, var(--persona-radius-lg, 1rem)) !important;
3089
- border-bottom-right-radius: var(--persona-artifact-unified-outer-radius, var(--persona-radius-lg, 1rem)) !important;
3090
- overflow: hidden;
3091
- }
3092
- }
3093
-
3094
- /* Narrow floating panel: drawer inside panel (class toggled by JS from panel width) */
3095
- [data-persona-root].persona-artifact-narrow-host .persona-artifact-backdrop {
3096
- position: absolute !important;
3097
- inset: 0 !important;
3098
- z-index: 55 !important;
3099
- }
3100
-
3101
- @media (min-width: 641px) {
3102
- [data-persona-root].persona-artifact-narrow-host .persona-artifact-pane {
3103
- position: absolute;
3104
- top: 0;
3105
- right: 0;
3106
- bottom: 0;
3107
- width: min(calc(100% - 1rem), 22rem) !important;
3108
- max-width: 22rem !important;
3109
- z-index: 60;
3110
- transform: translateX(100%);
3111
- transition: transform 0.2s ease;
3112
- box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
3113
- }
3114
- [data-persona-root].persona-artifact-narrow-host .persona-artifact-pane.persona-artifact-drawer-open {
3115
- transform: translateX(0);
3116
- }
3117
- }
3118
-
3119
- @media (max-width: 640px) {
3120
- [data-persona-root] .persona-artifact-pane {
3121
- position: fixed;
3122
- top: 0;
3123
- right: 0;
3124
- bottom: 0;
3125
- width: min(100vw - 1.5rem, 22rem);
3126
- z-index: 60;
3127
- transform: translateX(100%);
3128
- transition: transform 0.2s ease;
3129
- box-shadow: -4px 0 24px rgba(0, 0, 0, 0.12);
3130
- }
3131
- [data-persona-root] .persona-artifact-pane.persona-artifact-drawer-open {
3132
- transform: translateX(0);
3133
- }
3134
- }
3135
-
3136
- /* ============================================================
3137
- Stream animations: reveal effects for assistant message text
3138
- while streaming. Opt-in via `features.streamAnimation.type`.
3139
- Units are staggered via `--char-index` / `--word-index`
3140
- (set inline on each wrapper span). Timing is configured via
3141
- `--persona-stream-step` and `--persona-stream-duration` on
3142
- the `.persona-message-content` container.
3143
- ============================================================ */
3144
-
3145
- /* Per-char/per-word spans need to be inline-block so `transform` works for
3146
- the rise/fade animations. Each span animates from the moment it is first
3147
- added to the DOM: streaming itself provides the visible stagger, so the
3148
- CSS animation has no per-index delay. An index-based delay would compound
3149
- with the stream's arrival cadence and leave later chars permanently hidden. */
3150
- [data-persona-root] .persona-stream-char,
3151
- [data-persona-root] .persona-stream-word {
3152
- display: inline-block;
3153
- will-change: opacity, transform, filter;
3154
- }
3155
-
3156
- /* Group chars belonging to the same word so the browser treats the word as a
3157
- single break unit. Without this, every inline-block char introduces a break
3158
- opportunity and words get split mid-letter during streaming, then snap back
3159
- when the final content replaces the wrapped spans. */
3160
- [data-persona-root] .persona-stream-word-group {
3161
- white-space: nowrap;
3162
- }
3163
-
3164
- /* ---------- typewriter: fade per arriving char + blinking caret ---------- */
3165
- @keyframes persona-stream-typewriter-in {
3166
- from { opacity: 0; }
3167
- to { opacity: 1; }
3168
- }
3169
- [data-persona-root] .persona-stream-typewriter .persona-stream-char {
3170
- animation: persona-stream-typewriter-in var(--persona-stream-step, 120ms) ease-out both;
3171
- }
3172
-
3173
- /* ---------- letter-rise: per-char translateY + fade ---------- */
3174
- @keyframes persona-stream-letter-rise {
3175
- from { opacity: 0; transform: translateY(8px); }
3176
- to { opacity: 1; transform: translateY(0); }
3177
- }
3178
- [data-persona-root] .persona-stream-letter-rise .persona-stream-char {
3179
- animation: persona-stream-letter-rise calc(var(--persona-stream-step, 120ms) * 2)
3180
- ease-out both;
3181
- }
3182
-
3183
- /* ---------- word-fade: per-word blur + translateY fade-in ---------- */
3184
- @keyframes persona-stream-word-fade {
3185
- from { opacity: 0; filter: blur(4px); transform: translateY(3px); }
3186
- to { opacity: 1; filter: blur(0); transform: translateY(0); }
3187
- }
3188
- [data-persona-root] .persona-stream-word-fade .persona-stream-word {
3189
- animation: persona-stream-word-fade calc(var(--persona-stream-step, 120ms) * 3)
3190
- ease-out both;
3191
- }
3192
-
3193
- /* The following animations live in subpath plugin modules: their CSS is
3194
- injected by the plugin when activated, not by the core stylesheet:
3195
- - `wipe` → @runtypelabs/persona/animations/wipe
3196
- - `glyph-cycle` → @runtypelabs/persona/animations/glyph-cycle */
3197
-
3198
- /* ---------- pop-bubble: scale + opacity entrance on the bubble ---------- */
3199
- @keyframes persona-stream-pop-in {
3200
- 0% { transform: scale(0.6); opacity: 0; }
3201
- 100% { transform: scale(1); opacity: 1; }
3202
- }
3203
- [data-persona-root] .persona-stream-pop {
3204
- transform-origin: bottom left;
3205
- animation: persona-stream-pop-in 400ms cubic-bezier(0.2, 0.9, 0.3, 1.4) both;
3206
- }
3207
-
3208
- /* ---------- caret used by typewriter ---------- */
3209
- @keyframes persona-stream-blink {
3210
- 0%, 50% { opacity: 1; }
3211
- 50.01%, 100% { opacity: 0; }
3212
- }
3213
- [data-persona-root] .persona-stream-caret {
3214
- display: inline-block;
3215
- width: 2px;
3216
- height: 1em;
3217
- margin-left: 1px;
3218
- vertical-align: -2px;
3219
- background: currentColor;
3220
- animation: persona-stream-blink 1s steps(1) infinite;
3221
- }
3222
-
3223
- /* ---------- inline timestamp (trails the last line of message text) ---------- */
3224
- [data-persona-root] .persona-timestamp-inline {
3225
- display: inline-block;
3226
- margin-left: 0.5rem;
3227
- white-space: nowrap;
3228
- }
3229
-
3230
- /* ---------- skeleton placeholder (pre-first-token) ---------- */
3231
- @keyframes persona-stream-skeleton-shimmer {
3232
- 0% { background-position: 200% 0; }
3233
- 100% { background-position: -200% 0; }
3234
- }
3235
- [data-persona-root] .persona-stream-skeleton {
3236
- padding: 2px 0;
3237
- /* The assistant bubble sizes to content. Give the skeleton an intrinsic
3238
- width so the bubble expands; the bubble's own `max-width: 85%` clamps
3239
- the upper bound. */
3240
- width: 260px;
3241
- max-width: 100%;
3242
- }
3243
- [data-persona-root] .persona-stream-skeleton-line {
3244
- width: 100%;
3245
- height: 10px;
3246
- border-radius: 3px;
3247
- background: linear-gradient(
3248
- 90deg,
3249
- color-mix(in srgb, currentColor 12%, transparent) 0%,
3250
- color-mix(in srgb, currentColor 22%, transparent) 50%,
3251
- color-mix(in srgb, currentColor 12%, transparent) 100%
3252
- );
3253
- background-size: 200% 100%;
3254
- animation: persona-stream-skeleton-shimmer 1.4s linear infinite;
3255
- }
3256
-
3257
- /* ---------- reduced-motion: disable per-unit and container animations ---------- */
3258
- @media (prefers-reduced-motion: reduce) {
3259
- [data-persona-root] .persona-stream-typewriter .persona-stream-char,
3260
- [data-persona-root] .persona-stream-letter-rise .persona-stream-char,
3261
- [data-persona-root] .persona-stream-word-fade .persona-stream-word,
3262
- [data-persona-root] .persona-stream-pop,
3263
- [data-persona-root] .persona-stream-caret,
3264
- [data-persona-root] .persona-stream-skeleton-line {
3265
- animation: none !important;
3266
- opacity: 1 !important;
3267
- filter: none !important;
3268
- transform: none !important;
3269
- color: inherit !important;
3270
- background: none !important;
3271
- -webkit-background-clip: border-box !important;
3272
- background-clip: border-box !important;
3273
- }
3274
- }
3275
-
3276
- /* ========================================================================
3277
- * ask_user_question: built-in answer-pill sheet
3278
- * Slides in over the composer when the assistant invokes `ask_user_question`.
3279
- * Overridable via `config.features.askUserQuestion.styles`.
3280
- * ======================================================================== */
3281
-
3282
- [data-persona-root] .persona-hidden {
3283
- display: none !important;
3284
- }
3285
-
3286
- /* In-transcript stub: small "Awaiting…" chip. */
3287
- [data-persona-root] .persona-ask-stub {
3288
- padding: 0.35rem 0.7rem;
3289
- border-radius: 999px;
3290
- font-size: 0.8rem;
3291
- color: var(--persona-muted, #6b7280);
3292
- background: var(--persona-container, #f3f4f6);
3293
- border: 1px dashed var(--persona-border, #e5e7eb);
3294
- }
3295
-
3296
- [data-persona-root] .persona-ask-stub-label {
3297
- font-weight: 500;
3298
- }
3299
-
3300
- /* Sheet container: absolute inside composerOverlay. */
3301
- [data-persona-root] .persona-ask-sheet {
3302
- position: absolute;
3303
- left: 0.75rem;
3304
- right: 0.75rem;
3305
- bottom: calc(100% + 0.5rem);
3306
- box-sizing: border-box;
3307
- padding: 0.85rem 1rem;
3308
- background: var(--persona-ask-sheet-bg, var(--persona-surface, #ffffff));
3309
- border: 1px solid var(--persona-ask-sheet-border, var(--persona-border, #e5e7eb));
3310
- border-radius: 1rem;
3311
- box-shadow: var(--persona-ask-sheet-shadow, 0 12px 28px -10px rgba(0, 0, 0, 0.15), 0 4px 10px -6px rgba(0, 0, 0, 0.08));
3312
- transition: transform var(--persona-ask-sheet-duration, 180ms) ease, opacity var(--persona-ask-sheet-duration, 180ms) ease;
3313
- opacity: 1;
3314
- transform: translateY(0);
3315
- }
3316
-
3317
- [data-persona-root] .persona-ask-sheet.persona-ask-sheet-enter {
3318
- opacity: 0;
3319
- transform: translateY(8px);
3320
- }
3321
-
3322
- [data-persona-root] .persona-ask-sheet.persona-ask-sheet-leave {
3323
- opacity: 0;
3324
- transform: translateY(8px);
3325
- pointer-events: none;
3326
- }
3327
-
3328
- /* Header row: question + close button */
3329
- [data-persona-root] .persona-ask-sheet-header {
3330
- margin-bottom: 0.55rem;
3331
- }
3332
-
3333
- [data-persona-root] .persona-ask-sheet-question {
3334
- font-size: 0.92rem;
3335
- font-weight: 500;
3336
- line-height: 1.35;
3337
- color: var(--persona-text, #1f2937);
3338
- min-height: 1.35em;
3339
- }
3340
-
3341
- [data-persona-root] .persona-ask-question-skeleton {
3342
- display: block;
3343
- width: 60%;
3344
- height: 0.85rem;
3345
- border-radius: 0.3rem;
3346
- background: linear-gradient(90deg,
3347
- var(--persona-container, #f3f4f6) 0%,
3348
- var(--persona-border, #e5e7eb) 50%,
3349
- var(--persona-container, #f3f4f6) 100%);
3350
- background-size: 200% 100%;
3351
- animation: persona-ask-skeleton-shimmer 1.2s ease-in-out infinite;
3352
- color: transparent;
3353
- }
3354
-
3355
- [data-persona-root] .persona-ask-sheet-step-inline {
3356
- flex: 0 0 auto;
3357
- font-size: 0.78rem;
3358
- line-height: 1;
3359
- color: var(--persona-text-muted, #6b7280);
3360
- font-variant-numeric: tabular-nums;
3361
- letter-spacing: 0.01em;
3362
- white-space: nowrap;
3363
- }
3364
-
3365
- [data-persona-root] .persona-ask-sheet-step-inline:empty {
3366
- display: none;
3367
- }
3368
-
3369
- /* Option list: stacked one per row by default ("rows" layout). The "pills"
3370
- layout opt-in switches to horizontal wrap with compact pills; see also
3371
- horizontalPillsAskPlugin example for a custom variant. */
3372
- [data-persona-root] .persona-ask-pills {
3373
- display: flex;
3374
- flex-direction: column;
3375
- flex-wrap: nowrap;
3376
- row-gap: 0.4rem;
3377
- column-gap: 0;
3378
- }
3379
-
3380
- [data-persona-root] .persona-ask-pills--rows {
3381
- flex-direction: column;
3382
- flex-wrap: nowrap;
3383
- gap: 0.4rem;
3384
- }
3385
-
3386
- /* Pills layout opt-in: horizontal wrap, auto-width compact pills. */
3387
- [data-persona-root] .persona-ask-sheet--pills .persona-ask-pills:not(.persona-ask-pills--rows) {
3388
- flex-direction: row;
3389
- flex-wrap: wrap;
3390
- gap: 0.4rem;
3391
- }
3392
-
3393
- [data-persona-root] .persona-ask-sheet--pills .persona-ask-pills:not(.persona-ask-pills--rows) .persona-ask-pill {
3394
- width: auto;
3395
- padding: 0.4rem 0.9rem;
3396
- border-radius: var(--persona-ask-pill-radius, 9999px);
3397
- }
3398
-
3399
- [data-persona-root] .persona-ask-pill {
3400
- display: flex;
3401
- align-items: center;
3402
- justify-content: flex-start;
3403
- width: 100%;
3404
- text-align: left;
3405
- padding: 0.65rem 0.9rem;
3406
- border-radius: var(--persona-ask-pill-radius, 0.6rem);
3407
- background: var(--persona-ask-pill-bg, transparent);
3408
- color: var(--persona-ask-pill-fg, var(--persona-text, #1f2937));
3409
- border: 1px solid var(--persona-border, #e5e7eb);
3410
- font-size: 0.9rem;
3411
- font-weight: 500;
3412
- cursor: pointer;
3413
- transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease, transform 0.1s ease;
3414
- }
3415
-
3416
- [data-persona-root] .persona-ask-pill:hover:not(:disabled):not(.persona-ask-pill-skeleton):not(.persona-ask-pill-selected):not([aria-pressed="true"]) {
3417
- border-color: var(--persona-text, #1f2937);
3418
- background: var(--persona-container, #f3f4f6);
3419
- }
3420
-
3421
- [data-persona-root] .persona-ask-pill:active {
3422
- transform: translateY(1px);
3423
- }
3424
-
3425
- [data-persona-root] .persona-ask-pill-selected,
3426
- [data-persona-root] .persona-ask-pill[aria-pressed="true"] {
3427
- background: var(--persona-ask-pill-bg-selected, var(--persona-accent, #0f0f0f));
3428
- color: var(--persona-ask-pill-fg-selected, #fafafa);
3429
- border-color: var(--persona-ask-pill-bg-selected, var(--persona-accent, #0f0f0f));
3430
- }
3431
-
3432
- [data-persona-root] .persona-ask-pill:focus:not(:focus-visible) {
3433
- outline: none;
3434
- }
3435
-
3436
- [data-persona-root] .persona-ask-pill:focus-visible {
3437
- outline: 2px solid var(--persona-accent, #0f0f0f);
3438
- outline-offset: 2px;
3439
- }
3440
-
3441
- [data-persona-root] .persona-ask-pill-custom {
3442
- border-style: dashed;
3443
- }
3444
-
3445
- [data-persona-root] .persona-ask-pill-skeleton {
3446
- min-width: 5rem;
3447
- height: 2rem;
3448
- padding: 0;
3449
- border: 1px solid var(--persona-border, #e5e7eb);
3450
- background: linear-gradient(90deg,
3451
- var(--persona-container, #f3f4f6) 0%,
3452
- var(--persona-border, #e5e7eb) 50%,
3453
- var(--persona-container, #f3f4f6) 100%);
3454
- background-size: 200% 100%;
3455
- animation: persona-ask-skeleton-shimmer 1.2s ease-in-out infinite;
3456
- }
3457
-
3458
- @keyframes persona-ask-skeleton-shimmer {
3459
- 0% { background-position: 100% 50%; }
3460
- 100% { background-position: -100% 50%; }
3461
- }
3462
-
3463
- /* Row layout: full-width stacked rows with always-visible description
3464
- and a right-edge affordance (number badge for single-select, check for
3465
- multi-select). Layered on top of .persona-ask-pill base styles. */
3466
- [data-persona-root] .persona-ask-row {
3467
- align-items: stretch;
3468
- justify-content: space-between;
3469
- gap: 0.75rem;
3470
- padding: 0.7rem 0.9rem;
3471
- }
3472
-
3473
- [data-persona-root] .persona-ask-row-content {
3474
- display: flex;
3475
- flex-direction: column;
3476
- gap: 0.15rem;
3477
- flex: 1 1 auto;
3478
- min-width: 0;
3479
- }
3480
-
3481
- [data-persona-root] .persona-ask-row-label {
3482
- font-size: 0.92rem;
3483
- font-weight: 600;
3484
- line-height: 1.25;
3485
- color: inherit;
3486
- white-space: normal;
3487
- overflow-wrap: anywhere;
3488
- }
3489
-
3490
- [data-persona-root] .persona-ask-row-description {
3491
- font-size: 0.82rem;
3492
- font-weight: 400;
3493
- line-height: 1.35;
3494
- color: var(--persona-text-muted, #6b7280);
3495
- white-space: normal;
3496
- overflow-wrap: anywhere;
3497
- }
3498
-
3499
- [data-persona-root] .persona-ask-pill-selected .persona-ask-row-description,
3500
- [data-persona-root] .persona-ask-pill[aria-pressed="true"] .persona-ask-row-description {
3501
- color: var(--persona-ask-pill-fg-selected, #fafafa);
3502
- opacity: 0.85;
3503
- }
3504
-
3505
- [data-persona-root] .persona-ask-row-affordance {
3506
- display: inline-flex;
3507
- align-items: center;
3508
- justify-content: center;
3509
- flex: 0 0 auto;
3510
- align-self: center;
3511
- }
3512
-
3513
- [data-persona-root] .persona-ask-row-badge {
3514
- display: inline-flex;
3515
- align-items: center;
3516
- justify-content: center;
3517
- width: 1.5rem;
3518
- height: 1.5rem;
3519
- border-radius: 0.4rem;
3520
- border: 1px solid var(--persona-border, #e5e7eb);
3521
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
3522
- font-size: 0.78rem;
3523
- font-weight: 600;
3524
- color: var(--persona-text-muted, #6b7280);
3525
- background: transparent;
3526
- }
3527
-
3528
- [data-persona-root] .persona-ask-pill-selected .persona-ask-row-badge,
3529
- [data-persona-root] .persona-ask-pill[aria-pressed="true"] .persona-ask-row-badge {
3530
- border-color: var(--persona-ask-pill-fg-selected, #fafafa);
3531
- color: var(--persona-ask-pill-fg-selected, #fafafa);
3532
- }
3533
-
3534
- [data-persona-root] .persona-ask-row-check {
3535
- display: inline-flex;
3536
- align-items: center;
3537
- justify-content: center;
3538
- width: 1.4rem;
3539
- height: 1.4rem;
3540
- border-radius: 0.35rem;
3541
- border: 1.5px solid var(--persona-border, #d1d5db);
3542
- background: transparent;
3543
- position: relative;
3544
- }
3545
-
3546
- [data-persona-root] .persona-ask-pill-selected .persona-ask-row-check,
3547
- [data-persona-root] .persona-ask-pill[aria-pressed="true"] .persona-ask-row-check {
3548
- background: var(--persona-ask-pill-fg-selected, #fafafa);
3549
- border-color: var(--persona-ask-pill-fg-selected, #fafafa);
3550
- }
3551
-
3552
- [data-persona-root] .persona-ask-pill-selected .persona-ask-row-check::after,
3553
- [data-persona-root] .persona-ask-pill[aria-pressed="true"] .persona-ask-row-check::after {
3554
- content: "";
3555
- width: 0.45rem;
3556
- height: 0.75rem;
3557
- border-right: 2px solid var(--persona-ask-pill-bg-selected, var(--persona-accent, #0f0f0f));
3558
- border-bottom: 2px solid var(--persona-ask-pill-bg-selected, var(--persona-accent, #0f0f0f));
3559
- transform: rotate(45deg) translate(-1px, -1px);
3560
- }
3561
-
3562
- [data-persona-root] .persona-ask-row.persona-ask-pill-skeleton {
3563
- height: 3rem;
3564
- }
3565
-
3566
- /* Other row (rows mode): composite row that contains the free-text input
3567
- * directly. The input fills the row body; the badge sits on the right. */
3568
- [data-persona-root] .persona-ask-row--other {
3569
- cursor: text;
3570
- }
3571
-
3572
- [data-persona-root] .persona-ask-row-input {
3573
- flex: 1;
3574
- min-width: 0;
3575
- border: none;
3576
- background: transparent;
3577
- padding: 0;
3578
- margin: 0;
3579
- font: inherit;
3580
- font-size: 0.92rem;
3581
- color: inherit;
3582
- outline: none;
3583
- width: 100%;
3584
- }
3585
-
3586
- [data-persona-root] .persona-ask-row-input::placeholder {
3587
- color: var(--persona-text-muted, #6b7280);
3588
- opacity: 1;
3589
- }
3590
-
3591
- /* Free-text expansion row (pills layout only) */
3592
- [data-persona-root] .persona-ask-free-text {
3593
- width: 100%;
3594
- }
3595
-
3596
- [data-persona-root] .persona-ask-free-text--rows {
3597
- margin-top: 0.4rem;
3598
- }
3599
-
3600
- [data-persona-root] .persona-ask-free-text-input {
3601
- padding: 0.5rem 0.8rem;
3602
- border: 1px solid var(--persona-border, #e5e7eb);
3603
- border-radius: 0.55rem;
3604
- font-size: 0.88rem;
3605
- background: var(--persona-ask-input-bg, var(--persona-surface, #ffffff));
3606
- color: var(--persona-text, #1f2937);
3607
- }
3608
-
3609
- [data-persona-root] .persona-ask-free-text-input:focus {
3610
- outline: 2px solid var(--persona-accent, #0f0f0f);
3611
- outline-offset: 1px;
3612
- }
3613
-
3614
- [data-persona-root] .persona-ask-free-text-submit,
3615
- [data-persona-root] .persona-ask-multi-submit {
3616
- padding: 0.5rem 1rem;
3617
- border: none;
3618
- border-radius: 0.55rem;
3619
- background: var(--persona-accent, #0f0f0f);
3620
- color: #fafafa;
3621
- font-size: 0.85rem;
3622
- font-weight: 600;
3623
- cursor: pointer;
3624
- transition: opacity 0.15s ease;
3625
- }
3626
-
3627
- [data-persona-root] .persona-ask-free-text-submit:disabled,
3628
- [data-persona-root] .persona-ask-multi-submit:disabled {
3629
- opacity: 0.4;
3630
- cursor: not-allowed;
3631
- }
3632
-
3633
- /* Nav row: Back / Skip / Next-or-Submit buttons for grouped payloads. */
3634
- [data-persona-root] .persona-ask-nav-back,
3635
- [data-persona-root] .persona-ask-nav-skip {
3636
- padding: 0.45rem 0.85rem;
3637
- border: 1px solid transparent;
3638
- border-radius: 0.55rem;
3639
- background: transparent;
3640
- color: var(--persona-text-muted, #6b7280);
3641
- font-size: 0.85rem;
3642
- font-weight: 500;
3643
- cursor: pointer;
3644
- transition: background 0.15s ease, color 0.15s ease;
3645
- }
3646
-
3647
- [data-persona-root] .persona-ask-nav-back:hover:not(:disabled),
3648
- [data-persona-root] .persona-ask-nav-skip:hover:not(:disabled) {
3649
- background: var(--persona-container, #f3f4f6);
3650
- color: var(--persona-text, #1f2937);
3651
- }
3652
-
3653
- [data-persona-root] .persona-ask-nav-back:disabled {
3654
- opacity: 0.35;
3655
- cursor: not-allowed;
3656
- }
3657
-
3658
- [data-persona-root] .persona-ask-nav-next {
3659
- padding: 0.5rem 1rem;
3660
- border: none;
3661
- border-radius: 0.55rem;
3662
- background: var(--persona-accent, #0f0f0f);
3663
- color: #fafafa;
3664
- font-size: 0.85rem;
3665
- font-weight: 600;
3666
- cursor: pointer;
3667
- transition: opacity 0.15s ease;
3668
- }
3669
-
3670
- [data-persona-root] .persona-ask-nav-next:disabled {
3671
- opacity: 0.4;
3672
- cursor: not-allowed;
3673
- }
3674
-
3675
- @media (prefers-reduced-motion: reduce) {
3676
- [data-persona-root] .persona-ask-sheet,
3677
- [data-persona-root] .persona-ask-pill-skeleton,
3678
- [data-persona-root] .persona-ask-question-skeleton {
3679
- transition: none !important;
3680
- animation: none !important;
3681
- }
3682
- }
3683
-
3684
- /* ===========================================================================
3685
- * Composer-bar mode (`launcher.mountMode: "composer-bar"`)
3686
- *
3687
- * Geometry (position, width, height) is set per-state inline by
3688
- * `applyComposerBarGeometry()` in ui.ts. The pill composer
3689
- * (`pill-composer-builder.ts`) ships with its own clean className
3690
- * (`persona-pill-composer`, no `persona-flex-col` / `persona-rounded-2xl`
3691
- * baggage), so layout CSS does not need to fight utility classes: no
3692
- * !important. The pill is the visible element in both collapsed and
3693
- * expanded states; only the panel above it appears/disappears.
3694
- *
3695
- * Avoid `transform: scale(...)` on the wrapper: it breaks the textarea
3696
- * caret/IME.
3697
- * ======================================================================= */
3698
- .persona-widget-wrapper[data-persona-composer-bar] {
3699
- /* Flex column so the inner panel (which has `flex-1`) fills the wrapper.
3700
- * Without this, the panel would shrink-wrap its children (chat container
3701
- * + pill) and a gap would appear between the pill and the wrapper's
3702
- * `bottom: 16px` edge. */
3703
- display: flex;
3704
- flex-direction: column;
3705
- transition:
3706
- max-width 220ms ease,
3707
- bottom 220ms ease,
3708
- top 220ms ease,
3709
- left 220ms ease,
3710
- right 220ms ease,
3711
- transform 220ms ease,
3712
- border-radius 220ms ease,
3713
- height 220ms ease,
3714
- width 220ms ease;
3715
- }
3716
-
3717
- /* Modal and anchored: the wrapper goes from collapsed (no inline geometry,
3718
- * so `top/left/transform` resolve to their auto/none defaults) to its
3719
- * expanded position. The default `transform 220ms ease` transition would
3720
- * interpolate `none → translate(...)` and visibly slide the wrapper from
3721
- * its static-default origin toward its target: diagonally for modal,
3722
- * horizontally from the right for anchored. Neither mode is morphing
3723
- * something the user can see (the wrapper is invisible when collapsed
3724
- * because the pill lives in pillRoot, not the wrapper), so the slide
3725
- * is pure motion noise. Disable geometry transitions for both; the
3726
- * container's opacity fade-in keyframe is the reveal.
3727
- *
3728
- * Fullscreen intentionally keeps its geometry transition: that's the
3729
- * one mode where the wrapper genuinely morphs (empty → full viewport),
3730
- * and the staggered fade-in cascade below is built to mask the
3731
- * outer-edge/inner-content desync during that morph. */
3732
- .persona-widget-wrapper[data-persona-composer-bar][data-expanded-size="modal"],
3733
- .persona-widget-wrapper[data-persona-composer-bar][data-expanded-size="anchored"] {
3734
- transition: none;
3735
- }
3736
-
3737
- /* --- Pill composer chrome (always visible in composer-bar mode) -------- */
3738
-
3739
- /* Pill is a single-row grid: paperclip · textarea · mic + send. */
3740
- .persona-pill-composer {
3741
- display: grid;
3742
- grid-template-columns: auto 1fr auto;
3743
- align-items: center;
3744
- gap: 8px;
3745
- padding: 6px 14px;
3746
- border-radius: 9999px;
3747
- background: var(--persona-surface, #ffffff);
3748
- border: 1px solid var(--persona-border, #e5e7eb);
3749
- box-shadow:
3750
- 0 6px 24px rgba(15, 23, 42, 0.10),
3751
- 0 1px 2px rgba(15, 23, 42, 0.04);
3752
- }
3753
-
3754
- .persona-pill-composer .persona-composer-textarea {
3755
- /* Single line by default; the autoresize closure expands up to the
3756
- * max-height set inline by pill-composer-builder (100px). Width 100%
3757
- * fills the `1fr` middle grid cell so wrapping only happens once the
3758
- * pill itself can't grow any wider. */
3759
- min-height: 24px;
3760
- width: 100%;
3761
- padding: 4px 0;
3762
- }
3763
-
3764
- /* Responsive default width for the collapsed pill: applied only when
3765
- * `applyComposerBarGeometry()` leaves the wrapper's inline width empty
3766
- * (i.e., the user did NOT set `composerBar.collapsedMaxWidth`). Inline
3767
- * width from a user config still wins via specificity (inline > class). */
3768
- /* Pill responsive widths now live on the viewport-fixed pillRoot below;
3769
- * the wrapper no longer doubles as the pill container. */
3770
-
3771
- /* The action cells host inline-flex buttons; without explicit flex layout
3772
- * on the cell, the buttons sit on the inline baseline and the cell extends
3773
- * below them with descender space, making the buttons look top-aligned. */
3774
- .persona-pill-composer__left,
3775
- .persona-pill-composer__right {
3776
- display: flex;
3777
- align-items: center;
3778
- gap: 4px;
3779
- }
3780
-
3781
- /* Footer wrapping the pill: transparent surface, vertical stack with
3782
- * room above the pill for the previews row. */
3783
- .persona-widget-footer--pill {
3784
- background: transparent;
3785
- border-top: none;
3786
- padding: 0;
3787
- display: flex;
3788
- flex-direction: column;
3789
- gap: 8px;
3790
- }
3791
-
3792
- /* Attachment previews row (above the pill). AttachmentManager toggles
3793
- * display:flex when items are added; default is display:none. */
3794
- .persona-pill-composer__previews {
3795
- padding: 0 8px;
3796
- }
3797
-
3798
- /* --- Container chrome ---------------------------------------------------
3799
- *
3800
- * Container chrome (background, border, border-radius, box-shadow) is
3801
- * applied inline by `applyFullHeightStyles()` in ui.ts so it can flow through
3802
- * the same `theme.components.panel.{shadow,border,borderRadius}` contract
3803
- * used by every other mount mode. Collapsed hides the container entirely
3804
- * (only the pill is visible); expanded re-applies the chrome. The
3805
- * `fullscreen` expanded variant intentionally stays chrome-less. */
3806
-
3807
- /* Composer overlay (interactive sheets like ask_user_question) hidden in
3808
- * collapsed; the pill has no room and the panel above is gone anyway. */
3809
- [data-persona-composer-bar][data-state="collapsed"] .persona-composer-overlay {
3810
- display: none;
3811
- }
3812
-
3813
- /* --- Pill root: viewport-fixed sibling of the wrapper ------------------
3814
- *
3815
- * In composer-bar mode the pill (`footer`) and peek banner live in a
3816
- * viewport-fixed sibling of the wrapper, NOT inside the wrapper. Reason:
3817
- * modal mode applies `transform: translate(-50%, -50%)` to the wrapper,
3818
- * which establishes a containing block for `position: fixed` descendants: * a fixed pill inside a transformed wrapper would be positioned relative
3819
- * to the wrapper, not the viewport.
3820
- *
3821
- * Bottom offset and (optionally) width are written inline by ui.ts based
3822
- * on `launcher.composerBar.{bottomOffset, collapsedMaxWidth}`; otherwise
3823
- * the responsive defaults below apply. The pillRoot mirrors the wrapper's
3824
- * `[data-state]` and `[data-expanded-size]` attributes so peek/pill rules
3825
- * keyed off those attributes still cascade. */
3826
- .persona-widget-pill-root {
3827
- position: fixed;
3828
- bottom: 16px;
3829
- left: 50%;
3830
- transform: translateX(-50%);
3831
- width: 90vw;
3832
- max-width: calc(100vw - 32px);
3833
- display: flex;
3834
- flex-direction: column;
3835
- gap: 8px;
3836
- }
3837
- @media (min-width: 640px) {
3838
- .persona-widget-pill-root {
3839
- width: 70vw;
3840
- }
3841
- }
3842
- @media (min-width: 1024px) {
3843
- .persona-widget-pill-root {
3844
- width: 50vw;
3845
- }
3846
- }
3847
-
3848
- /* Container hidden when the chat is collapsed: only the pill is visible. */
3849
- [data-persona-composer-bar][data-state="collapsed"] .persona-widget-container {
3850
- display: none;
3851
- }
3852
-
3853
- /* --- Peek banner ------------------------------------------------------- */
3854
- /* The peek is the chrome-less row above the pill (composer-bar mode only)
3855
- * that previews the trailing 100 chars of the most recent assistant
3856
- * message. ui.ts toggles `--visible` based on streaming/hover/open state;
3857
- * pointer-events are gated so the faded-out peek never swallows clicks
3858
- * targeted at the pill below. */
3859
- .persona-pill-peek {
3860
- display: flex;
3861
- align-items: center;
3862
- gap: 8px;
3863
- padding: 6px 14px;
3864
- /* Frosted-glass chrome so the text stays readable over arbitrary host
3865
- * backgrounds (busy hero images, dark sections, brand colors). The
3866
- * translucent fill + backdrop blur turns the underlying area into a
3867
- * neutral surface; the hairline border + soft shadow define the edge
3868
- * without competing with the pill below. */
3869
- background: rgba(255, 255, 255, 0.78);
3870
- -webkit-backdrop-filter: blur(10px) saturate(1.5);
3871
- backdrop-filter: blur(10px) saturate(1.5);
3872
- border: 1px solid rgba(0, 0, 0, 0.06);
3873
- border-radius: 9999px;
3874
- box-shadow: 0 2px 8px rgba(15, 23, 42, 0.06);
3875
- color: var(--persona-primary, #111827);
3876
- font: inherit;
3877
- font-size: 13px;
3878
- line-height: 1.4;
3879
- cursor: pointer;
3880
- opacity: 0;
3881
- pointer-events: none;
3882
- transform: translateY(2px);
3883
- transition:
3884
- opacity 150ms ease,
3885
- transform 150ms ease,
3886
- background-color 150ms ease;
3887
- text-align: left;
3888
- /* Full-width row that matches the pill below: text takes the middle
3889
- * (flex: 1 1 auto) and the chevron pins to the right edge. */
3890
- width: 100%;
3891
- align-self: stretch;
3892
- }
3893
-
3894
- /* Browsers without backdrop-filter support (older Firefox, some webviews)
3895
- * fall through to a slightly more opaque solid surface so the underlying
3896
- * page can't bleed through. The non-supports rule above already gives a
3897
- * usable look (78% opacity); this just hardens it for non-blur fallback. */
3898
- @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
3899
- .persona-pill-peek {
3900
- background: rgba(255, 255, 255, 0.95);
3901
- }
3902
- }
3903
-
3904
- .persona-pill-peek--visible {
3905
- opacity: 1;
3906
- pointer-events: auto;
3907
- transform: translateY(0);
3908
- }
3909
-
3910
- .persona-pill-peek:hover {
3911
- background: rgba(255, 255, 255, 0.92);
3912
- }
3913
-
3914
- .persona-pill-peek__icon,
3915
- .persona-pill-peek__caret {
3916
- display: inline-flex;
3917
- flex-shrink: 0;
3918
- color: currentColor;
3919
- }
3920
-
3921
- .persona-pill-peek__text {
3922
- overflow: hidden;
3923
- text-overflow: ellipsis;
3924
- white-space: nowrap;
3925
- flex: 1 1 auto;
3926
- min-width: 0;
3927
- }
3928
-
3929
- /* Per-char/per-word animated spans render as inline-block, which interacts
3930
- * with the peek's nowrap+ellipsis chrome. Setting `vertical-align: baseline`
3931
- * keeps the spans on the same baseline as surrounding text so reveal
3932
- * transforms (translateY, scale) don't bump the line height. */
3933
- [data-persona-root] .persona-pill-peek__text .persona-stream-char,
3934
- [data-persona-root] .persona-pill-peek__text .persona-stream-word {
3935
- vertical-align: baseline;
3936
- }
3937
-
3938
- /* Peek-scaled skeleton: the bubble-sized 260×10 bar would dwarf a 14px-line
3939
- * pill. Inside the peek we shrink to a single, full-flex bar that hints at
3940
- * "more is coming" without dominating the chrome. Used when
3941
- * `streamAnimation.placeholder === "skeleton"` AND content trims to empty
3942
- * (e.g. `buffer: "line"` between line completions). */
3943
- [data-persona-root] .persona-pill-peek__text .persona-pill-peek__skeleton {
3944
- display: inline-flex;
3945
- vertical-align: middle;
3946
- width: 100%;
3947
- max-width: 200px;
3948
- padding: 0;
3949
- }
3950
- [data-persona-root] .persona-pill-peek__text .persona-pill-peek__skeleton .persona-stream-skeleton-line {
3951
- height: 8px;
3952
- }
3953
-
3954
- /* --- Expanded states: geometry safety nets ----------------------------- */
3955
-
3956
- /* `fullscreen`: ui.ts clears all inline geometry so this rule lights up. */
3957
- .persona-widget-wrapper[data-persona-composer-bar][data-state="expanded"][data-expanded-size="fullscreen"] {
3958
- inset: 0;
3959
- top: 0;
3960
- right: 0;
3961
- bottom: 0;
3962
- left: 0;
3963
- transform: none;
3964
- max-width: none;
3965
- width: 100%;
3966
- height: 100%;
3967
- border-radius: 0;
3968
- }
3969
-
3970
- /* Fullscreen "panel behind pill": the chat body fills the full viewport
3971
- * (including the area behind the fixed pill) so messages scroll under the
3972
- * pill. The body itself drops its bottom padding so its background extends
3973
- * to the viewport edge; reachability for the last bubble comes from
3974
- * padding-bottom on the messages wrapper (body's last child): that
3975
- * pushes the final message above the pill area rather than hiding it
3976
- * behind. */
3977
- .persona-widget-wrapper[data-persona-composer-bar][data-expanded-size="fullscreen"] .persona-widget-body {
3978
- padding-bottom: 0;
3979
- }
3980
- .persona-widget-wrapper[data-persona-composer-bar][data-expanded-size="fullscreen"] .persona-widget-body > :last-child {
3981
- padding-bottom: calc(var(--persona-pill-bottom, 16px) + var(--persona-pill-area-height, 80px) + 16px);
3982
- }
3983
-
3984
- /* `modal` and `anchored` get their geometry inline from ui.ts; nothing
3985
- * needed in CSS for those. */
3986
-
3987
- /* --- Expand fade-in cascade -------------------------------------------- */
3988
- /*
3989
- * Two staggered fades that mask the visual desync between the wrapper's
3990
- * fast-traveling outer edges and the inner content (which is constrained
3991
- * by `contentMaxWidth` + `margin: auto` and therefore moves at a fraction
3992
- * of the wrapper's growth rate). Without this, the user perceives an
3993
- * empty "gap" inside the wrapper as it morphs to fullscreen.
3994
- *
3995
- * - Chrome (container background, border, shadow, and the absolute close +
3996
- * clear buttons) fades in across the same 220ms as the geometry transition,
3997
- * so the box appears to materialize as it grows rather than snap into
3998
- * existence at frame 0.
3999
- * - Body content (intro card, messages, composer overlay) fades in AFTER
4000
- * the geometry has settled: `animation-delay: 220ms` plus
4001
- * `animation-fill-mode: both` keeps it at opacity 0 during the morph.
4002
- *
4003
- * Because `[data-state="collapsed"] .persona-widget-container { display:
4004
- * none }`, the container leaves and re-enters the rendering tree on each
4005
- * expand, which retriggers the keyframe animation cleanly without
4006
- * needing a JS class toggle.
4007
- */
4008
- @keyframes persona-composer-bar-fade-in {
4009
- from { opacity: 0; }
4010
- to { opacity: 1; }
4011
- }
4012
-
4013
- .persona-widget-wrapper[data-persona-composer-bar][data-state="expanded"] .persona-widget-container {
4014
- animation: persona-composer-bar-fade-in 220ms ease both;
4015
- }
4016
-
4017
- .persona-widget-wrapper[data-persona-composer-bar][data-state="expanded"] .persona-widget-body {
4018
- animation: persona-composer-bar-fade-in 200ms ease 220ms both;
4019
- }
4020
-
4021
- @media (prefers-reduced-motion: reduce) {
4022
- .persona-widget-wrapper[data-persona-composer-bar] {
4023
- transition: none !important;
4024
- }
4025
- .persona-widget-wrapper[data-persona-composer-bar][data-state="expanded"] .persona-widget-container,
4026
- .persona-widget-wrapper[data-persona-composer-bar][data-state="expanded"] .persona-widget-body {
4027
- animation: none !important;
4028
- }
4029
- }
4030
-
4031
- /* Event stream toolbar: a size container so "Copy All" collapses to icon-only
4032
- * in a narrow panel before the filter dropdown gets clipped. */
4033
- [data-persona-root] .persona-event-toolbar {
4034
- container-type: inline-size;
4035
- }
4036
-
4037
- @container (max-width: 390px) {
4038
- [data-persona-root] .persona-event-copy-all {
4039
- display: none;
4040
- }
4041
- }
1
+ [data-persona-root]{all:initial;font-family:var(--persona-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", sans-serif);font-size:var(--persona-font-size, 1rem);font-weight:var(--persona-font-weight, 400);line-height:var(--persona-line-height, 1.5);--persona-md-code-block-bg: var(--persona-container, #f3f4f6);--persona-md-code-block-border-color: var(--persona-border, #e5e7eb);--persona-md-inline-code-bg: var(--persona-container, #f3f4f6);--persona-md-inline-code-color: var(--persona-text, #111827);--persona-md-table-border-color: var(--persona-border, #e5e7eb);--persona-md-table-header-bg: var(--persona-container, #f8fafc);--persona-md-hr-color: var(--persona-divider, #e5e7eb);--persona-md-blockquote-border-color: var(--persona-accent, #0f0f0f);--persona-md-blockquote-text-color: var(--persona-muted, #6b7280)}[data-persona-root] *{box-sizing:border-box}.persona-flex{display:flex}.persona-h-full{height:100%}.persona-h-1{height:.25rem}.persona-w-full{width:100%}.persona-flex-col{flex-direction:column}.persona-flex-wrap{flex-wrap:wrap}.persona-items-center{align-items:center}.persona-items-end{align-items:flex-end}.persona-items-start{align-items:flex-start}.persona-justify-center{justify-content:center}.persona-justify-between{justify-content:space-between}.persona-justify-end{justify-content:flex-end}.persona-gap-1{gap:.25rem}.persona-gap-2{gap:.5rem}.persona-gap-1\.5{gap:.375rem}.persona-gap-6{gap:1.5rem}[data-persona-root] .persona-widget-container .persona-attachment-drop-overlay{display:none;position:absolute;inset:var(--persona-drop-overlay-inset, 0);z-index:50;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;pointer-events:none;background:var(--persona-drop-overlay-bg, rgba(59, 130, 246, .08));-webkit-backdrop-filter:blur(var(--persona-drop-overlay-blur, 8px));backdrop-filter:blur(var(--persona-drop-overlay-blur, 8px));border:var(--persona-drop-overlay-border, 2px dashed rgba(59, 130, 246, .4));border-radius:var(--persona-drop-overlay-radius, inherit);transition:opacity .15s ease}[data-persona-root] .persona-widget-container .persona-attachment-drop-overlay .persona-drop-overlay-label{font-size:var(--persona-drop-overlay-label-size, .875rem);color:var(--persona-drop-overlay-label-color, rgba(59, 130, 246, .8));font-weight:500;user-select:none}[data-persona-root] .persona-widget-container.persona-attachment-drop-active .persona-attachment-drop-overlay{display:flex}[data-persona-root]{--persona-radius-sm: .125rem;--persona-radius-md: .375rem;--persona-radius-lg: .5rem;--persona-radius-xl: .75rem;--persona-launcher-radius: 9999px;--persona-button-radius: 9999px;--persona-panel-radius: var(--persona-radius-xl);--persona-input-radius: var(--persona-radius-lg);--persona-message-user-radius: var(--persona-radius-lg);--persona-message-assistant-radius: var(--persona-radius-lg);--persona-md-h1-size: 1.5rem;--persona-md-h1-weight: 700;--persona-md-h1-margin: 1rem 0 .5rem;--persona-md-h1-line-height: 1.25;--persona-md-h2-size: 1.25rem;--persona-md-h2-weight: 700;--persona-md-h2-margin: .875rem 0 .5rem;--persona-md-h2-line-height: 1.3;--persona-md-h3-size: 1.125rem;--persona-md-h3-weight: 600;--persona-md-h3-margin: .75rem 0 .375rem;--persona-md-h3-line-height: 1.4;--persona-md-h4-size: 1rem;--persona-md-h4-weight: 600;--persona-md-h4-margin: .625rem 0 .25rem;--persona-md-h4-line-height: 1.5;--persona-md-h5-size: .875rem;--persona-md-h5-weight: 600;--persona-md-h5-margin: .5rem 0 .25rem;--persona-md-h5-line-height: 1.5;--persona-md-h6-size: .75rem;--persona-md-h6-weight: 600;--persona-md-h6-margin: .5rem 0 .25rem;--persona-md-h6-line-height: 1.5;--persona-md-table-border-color: var(--persona-border, #e5e7eb);--persona-md-table-header-bg: var(--persona-container, #f8fafc);--persona-md-table-header-weight: 600;--persona-md-table-cell-padding: .5rem .75rem;--persona-md-table-border-radius: .375rem;--persona-md-hr-color: var(--persona-divider, #e5e7eb);--persona-md-hr-height: 1px;--persona-md-hr-margin: 1rem 0;--persona-md-blockquote-border-color: #171717;--persona-md-blockquote-border-width: 3px;--persona-md-blockquote-padding: .5rem 1rem;--persona-md-blockquote-margin: .5rem 0;--persona-md-blockquote-bg: transparent;--persona-md-blockquote-text-color: #6b7280;--persona-md-blockquote-font-style: italic;--persona-md-code-block-bg: var(--persona-container, #f3f4f6);--persona-md-code-block-border-color: var(--persona-border, #e5e7eb);--persona-md-code-block-text-color: inherit;--persona-md-code-block-padding: .75rem;--persona-md-code-block-border-radius: .375rem;--persona-md-code-block-font-size: .875rem;--persona-md-inline-code-bg: #f3f4f6;--persona-md-inline-code-padding: .125rem .375rem;--persona-md-inline-code-border-radius: .25rem;--persona-md-inline-code-font-size: .875em;--persona-md-strong-weight: 600;--persona-md-em-style: italic}.persona-rounded-xl{border-radius:var(--persona-radius-sm)}.persona-rounded-lg{border-radius:var(--persona-radius-md)}.persona-rounded-2xl{border-radius:var(--persona-radius-lg)}.persona-rounded{border-radius:var(--persona-radius-sm, .125rem)}.persona-rounded-md{border-radius:var(--persona-radius-md, .375rem)}.persona-rounded-b{border-bottom-left-radius:var(--persona-radius-sm, .125rem);border-bottom-right-radius:var(--persona-radius-sm, .125rem)}.persona-rounded-full,.persona-rounded-launcher{border-radius:var(--persona-launcher-radius)}.persona-rounded-button{border-radius:var(--persona-button-radius)}.persona-overflow-auto{overflow:auto}.persona-max-h-\[300px\]{max-height:300px}.persona-bg-persona-surface{background-color:var(--persona-surface, #ffffff)}.persona-bg-persona-container{background-color:var(--persona-container, #f8fafc)}.persona-bg-persona-input-background{background-color:var(--persona-input-background, #ffffff)}.persona-bg-white{background-color:#fff}.persona-bg-transparent{background-color:transparent}.persona-bg-gray-100{background-color:#f3f4f6}.persona-bg-gray-200{background-color:#e5e7eb}.persona-text-persona-primary{color:var(--persona-primary, #171717)}.persona-text-persona-call-to-action{color:var(--persona-call-to-action, var(--persona-text-inverse, #ffffff))}.persona-text-persona-muted{color:var(--persona-muted, #6b7280)}.persona-text-white{color:#fff}.persona-bg-persona-accent{background-color:var(--persona-accent, #0f0f0f)}.persona-bg-persona-primary{background-color:var(--persona-button-primary-bg, var(--persona-primary, #111827))}.persona-italic{font-style:italic}.persona-text-base{font-size:1rem;line-height:1.5rem}.persona-text-sm{font-size:.875rem;line-height:1.25rem}.persona-text-xs{font-size:.75rem;line-height:1rem}.persona-text-xxs{font-size:.5rem;line-height:1rem}.persona-text-lg{font-size:1.125rem;line-height:1.75rem}.persona-text-xl{font-size:1.25rem;line-height:1.75rem}.persona-font-semibold{font-weight:600}.persona-font-medium{font-weight:500}.persona-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.persona-text-\[11px\]{font-size:11px}.persona-text-center{text-align:center}.persona-text-persona-secondary{color:var(--persona-secondary, #4b5563)}.persona-leading-none{line-height:1}.persona-whitespace-nowrap{white-space:nowrap}.persona-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.persona-break-all{word-break:break-all}.persona-break-words{overflow-wrap:break-word;word-break:break-word}.persona-px-4{padding-left:1rem;padding-right:1rem}.persona-px-5{padding-left:1.25rem;padding-right:1.25rem}.persona-px-6{padding-left:1.5rem;padding-right:1.5rem}.persona-py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.persona-py-3{padding-top:.75rem;padding-bottom:.75rem}.persona-py-4{padding-top:1rem;padding-bottom:1rem}.persona-py-5{padding-top:1.25rem;padding-bottom:1.25rem}.persona-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.persona-py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.persona-pr-3{padding-right:.75rem}.persona-pl-3{padding-left:.75rem}.persona-pl-7{padding-left:1.75rem}.persona-pr-7{padding-right:1.75rem}.persona-pl-8{padding-left:2rem}.persona-pb-0{padding-bottom:0}.persona-p-6{padding:1.5rem}.persona-p-0{padding:0}.persona-p-3{padding:.75rem}.persona-px-2{padding-left:.5rem;padding-right:.5rem}.persona-px-2\.5{padding-left:.625rem;padding-right:.625rem}.persona-px-3{padding-left:.75rem;padding-right:.75rem}.persona-py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.persona-py-1{padding-top:.25rem;padding-bottom:.25rem}.persona-py-2{padding-top:.5rem;padding-bottom:.5rem}.persona-ml-auto{margin-left:auto}.persona-m-0{margin:0}.persona-mb-1{margin-bottom:.25rem}.persona-ml-4{margin-left:1rem}.persona-mr-3{margin-right:.75rem}.disabled\:persona-opacity-50:disabled{opacity:.5}.persona-shadow-2xl{box-shadow:0 30px 60px -15px #0f172a59}.persona-shadow-sm{box-shadow:0 5px 15px #0f172a14}.persona-shadow-md{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.persona-shadow-lg{box-shadow:0 20px 40px #0f172a2e}.persona-border{border-width:1px;border-style:solid;border-color:#94a3b847}.persona-border-none{border:none}.persona-border-b{border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#94a3b847}.persona-border-gray-100{border-color:#f1f5f9}.persona-border-persona-secondary{border-color:var(--persona-secondary, #7c3aed)}.persona-border-persona-border{border-color:var(--persona-border, #e5e7eb)}.persona-border-t{border-top-width:1px;border-top-style:solid;border-top-color:#94a3b847}.persona-border-t-persona-border{border-top-width:1px;border-top-style:solid;border-top-color:var(--persona-border, #f1f5f9)}.persona-border-b-persona-border{border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:var(--persona-border, #f1f5f9)}.persona-border-t-persona-divider{border-top-width:1px;border-top-style:solid;border-top-color:var(--persona-divider, #f1f5f9)}.persona-border-b-persona-divider{border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:var(--persona-divider, #f1f5f9)}.persona-border-persona-divider{border-color:var(--persona-divider, #f1f5f9)}.persona-border-persona-message-border{border-color:var(--persona-message-border, #f1f5f9)}.persona-fixed{position:fixed}.persona-bottom-6{bottom:1.5rem}.persona-top-6{top:1.5rem}.persona-right-6{right:1.5rem}.persona-left-6{left:1.5rem}.persona-top-1\/2{top:50%}.persona-left-1\/2{left:50%}.persona-bottom-3{bottom:.75rem}.persona-right-5{right:1.25rem}.persona-h-8{height:2rem}.persona-w-8{width:2rem}.persona-h-10{height:2.5rem}.persona-w-10{width:2.5rem}.persona-h-12{height:3rem}.persona-w-12{width:3rem}.persona-leading-relaxed{line-height:1.75}.persona-max-w-\[85\%\]{max-width:85%}.persona-transition{transition:transform .16s ease,background-color .16s ease,box-shadow .16s ease,opacity .16s ease}.persona-translate-y-\[-2px\]{transform:translateY(-2px)}.persona--translate-x-1\/2{transform:translate(-50%)}.persona--translate-y-1\/2{transform:translateY(-50%)}.persona-opacity-0{opacity:0}.persona-opacity-100{opacity:1}.persona-scale-100{transform:scale(1)}.persona-scale-95{transform:scale(.95)}.persona-bg-\[\#f8fafc\]{background-color:#f8fafc}.persona-flex-shrink-0{flex-shrink:0}.persona-min-w-0{min-width:0}.persona-w-4{width:1rem}.persona-w-\[28px\]{width:28px}.persona-w-\[70px\]{width:70px}.persona-flex-1{flex:1 1 0%}.persona-gap-3{gap:.75rem}.persona-bg{background-color:var(--persona-surface, #ffffff)}.persona-inline-flex{display:inline-flex}.persona-text-left{text-align:left}.persona-mb-3{margin-bottom:.75rem}.persona-mt-2{margin-top:.5rem}.persona-h-12,.persona-w-12,.persona-h-10,.persona-w-10,.persona-h-8,.persona-w-8{flex:none}.persona-text-right{text-align:right}.hover\:persona-bg-gray-200:hover{background-color:#e5e7eb}.hover\:persona-bg-persona-container:hover{background-color:var(--persona-container, #f8fafc)}.hover\:persona-text-persona-primary:hover{color:var(--persona-primary, #111827)}.hover\:persona-translate-y-\[-2px\]:hover{transform:translateY(-2px)}.persona-pointer-events-none{pointer-events:none}.persona-pointer-events-auto{pointer-events:auto}.persona-min-h-\[1\.5rem\]{min-height:1.5rem}.persona-min-h-0{min-height:0}.persona-resize-none{resize:none}.persona-z-10{z-index:10}.persona-z-50{z-index:50}.persona-absolute{position:absolute}.persona-right-4{right:1rem}.persona-top-4{top:1rem}.persona-text-2xl{font-size:1.5rem;line-height:2rem}.persona-grid{display:grid}.persona-place-items-center{place-items:center}.persona-relative{position:relative}.persona-overflow-y-auto{overflow-y:auto}.persona-widget-body{overscroll-behavior:contain}.persona-overflow-hidden{overflow:hidden}.persona-min-h-\[320px\]{min-height:320px}.persona-min-h-\[48px\]{min-height:48px}.persona-min-w-\[320px\]{min-width:320px}.persona-max-w-\[420px\]{max-width:420px}.persona-w-\[360px\]{width:360px}.persona-w-\[400px\]{width:400px}.persona-h-\[640px\]{height:640px}.persona-border-transparent{border-color:transparent}.persona-outline-none:focus{outline:none}.persona-border-none:focus{border:none!important;outline:none!important}.persona-widget-composer textarea:focus{border:none!important;outline:none!important;border-width:0!important;border-style:none!important;border-color:transparent!important;box-shadow:none!important}@media (hover: none) and (pointer: coarse){.persona-composer-textarea{font-size:1rem!important}}.persona-widget-composer:focus-within{outline:none!important}.persona-widget-composer:focus-within textarea{border:none!important;outline:none!important}.persona-whitespace-pre-wrap{white-space:pre-wrap}.persona-space-y-1>*+*{margin-top:.25rem}.persona-space-y-3>*+*{margin-top:.75rem}.persona-space-y-4>*+*{margin-top:1rem}.persona-form-card{background-color:var(--persona-surface, #ffffff);border:1px solid rgba(148,163,184,.28);border-radius:var(--persona-radius-md, .375rem);padding:1.25rem;box-shadow:0 10px 30px #0f172a1f}.persona-widget-container{position:relative;border-radius:var(--persona-panel-radius, var(--persona-radius-xl, .75rem))}.persona-widget-composer{border-radius:var(--persona-input-radius, var(--persona-radius-lg, .5rem));box-shadow:var(--persona-composer-shadow, none)}.persona-form-grid,.persona-form-field{display:flex;flex-direction:column}.persona-cursor-pointer{cursor:pointer}.persona-send-button-wrapper{position:relative;display:inline-flex;align-items:center;justify-content:center}.persona-send-button-tooltip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%);background-color:var(--persona-tooltip-background, #111827);color:var(--persona-tooltip-foreground, #ffffff);padding:6px 12px;border-radius:var(--persona-radius-sm, .125rem);font-size:12px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .2s;z-index:1000}.persona-send-button-tooltip:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:var(--persona-tooltip-background, #111827)}.persona-send-button-wrapper:hover .persona-send-button-tooltip,.persona-send-button-wrapper:focus-within .persona-send-button-tooltip{opacity:1}@media (hover: none),(max-width: 500px){.persona-send-button-wrapper:hover .persona-send-button-tooltip,.persona-send-button-wrapper:focus-within .persona-send-button-tooltip{opacity:0}}.persona-clear-chat-button-wrapper{position:relative;display:inline-flex;align-items:center;justify-content:center}.persona-clear-chat-tooltip{background-color:var(--persona-tooltip-background, #111827);color:var(--persona-tooltip-foreground, #ffffff);padding:6px 12px;border-radius:var(--persona-radius-sm, .125rem);font-size:12px;white-space:nowrap;pointer-events:none;z-index:10000}.persona-clear-chat-tooltip-arrow{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:4px solid transparent;border-top-color:var(--persona-tooltip-background, #111827)}@media (hover: none),(max-width: 500px){.persona-clear-chat-tooltip{display:none!important}}@keyframes persona-typing{0%,to{opacity:.5;transform:translateY(0)}50%{opacity:1;transform:translateY(-2px)}}.persona-animate-typing{animation:persona-typing 1s infinite}.persona-space-x-1>*+*{margin-left:.25rem}.persona-h-5{height:1.25rem}.persona-h-1\.5{height:.375rem}.persona-w-1\.5{width:.375rem}.persona-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}@keyframes persona-voice-recording-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.05)}}.persona-voice-recording{animation:persona-voice-recording-pulse 1.5s ease-in-out infinite}.persona-voice-recording svg{animation:persona-voice-recording-pulse 1.5s ease-in-out infinite}@keyframes persona-voice-processing-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.persona-voice-processing svg{animation:persona-voice-processing-spin 1.2s linear infinite}@keyframes persona-voice-speaking-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.85;transform:scale(1.03)}}.persona-voice-speaking{animation:persona-voice-speaking-pulse 2s ease-in-out infinite}.persona-voice-speaking svg{animation:persona-voice-speaking-pulse 2s ease-in-out infinite}.persona-message-bubble pre{overflow-x:auto;max-width:100%;word-wrap:break-word;word-break:break-word;white-space:pre-wrap;background-color:var(--persona-md-code-block-bg);color:var(--persona-md-code-block-text-color);padding:var(--persona-md-code-block-padding);border-radius:var(--persona-md-code-block-border-radius);margin:.5rem 0;font-size:var(--persona-md-code-block-font-size);line-height:1.5;border:1px solid var(--persona-md-code-block-border-color)}.persona-message-bubble code{word-break:break-word;word-wrap:break-word;white-space:pre-wrap;overflow-wrap:break-word;font-family:ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace;font-size:.875em}.persona-message-bubble pre code{font-size:inherit;background-color:transparent;padding:0;border-radius:0}.persona-message-bubble img{max-width:100%;height:auto;display:block;margin:.5rem 0;border-radius:var(--persona-radius-md, .375rem)}.persona-message-user-bubble{border-radius:var(--persona-message-user-radius, var(--persona-radius-lg, .5rem))}.persona-message-assistant-bubble{border-radius:var(--persona-message-assistant-radius, var(--persona-radius-lg, .5rem));border-color:var(--persona-message-assistant-border, var(--persona-border, #e5e7eb))}[data-persona-root] .persona-message-assistant-bubble.persona-shadow-sm{box-shadow:var(--persona-message-assistant-shadow, 0 1px 2px 0 rgb(0 0 0 / .05))}[data-persona-root] .persona-message-user-bubble.persona-shadow-sm{box-shadow:var(--persona-message-user-shadow, 0 5px 15px rgba(15, 23, 42, .08))}[data-persona-root] .persona-tool-bubble.persona-shadow-sm{box-shadow:var(--persona-tool-bubble-shadow, 0 5px 15px rgba(15, 23, 42, .08))}[data-persona-root] .persona-tool-text-dim{opacity:.5}[data-persona-root] .persona-tool-text-bold{font-weight:600}[data-persona-root] .persona-tool-text-italic{font-style:italic}@keyframes persona-tool-loading-pulse{0%,to{opacity:1}50%{opacity:.4}}[data-persona-root] .persona-tool-loading-pulse{animation:persona-tool-loading-pulse var(--persona-tool-anim-duration, 2s) ease-in-out infinite}@keyframes persona-tool-loading-shimmer{0%,to{opacity:.4}50%{opacity:1}}[data-persona-root] .persona-tool-loading-shimmer .persona-tool-char{display:inline-block;animation:persona-tool-loading-shimmer var(--persona-tool-anim-duration, 2s) ease-in-out infinite;animation-delay:calc(var(--char-index, 0) * 60ms)}@keyframes persona-tool-loading-shimmer-color{0%,to{color:var(--persona-tool-anim-color, currentColor)}50%{color:var(--persona-tool-anim-secondary-color, #3b82f6)}}[data-persona-root] .persona-tool-loading-shimmer-color .persona-tool-char{display:inline-block;animation:persona-tool-loading-shimmer-color var(--persona-tool-anim-duration, 2s) ease-in-out infinite;animation-delay:calc(var(--char-index, 0) * 60ms)}@keyframes persona-tool-loading-rainbow{0%{color:#ef4444}16%{color:#f59e0b}33%{color:#22c55e}50%{color:#06b6d4}66%{color:#3b82f6}83%{color:#8b5cf6}to{color:#ef4444}}[data-persona-root] .persona-tool-loading-rainbow .persona-tool-char{display:inline-block;animation:persona-tool-loading-rainbow var(--persona-tool-anim-duration, 2s) linear infinite;animation-delay:calc(var(--char-index, 0) * 80ms)}@media (prefers-reduced-motion: reduce){[data-persona-root] .persona-tool-loading-pulse,[data-persona-root] .persona-tool-loading-shimmer .persona-tool-char,[data-persona-root] .persona-tool-loading-shimmer-color .persona-tool-char,[data-persona-root] .persona-tool-loading-rainbow .persona-tool-char{animation:none!important}}[data-persona-root] .persona-reasoning-bubble.persona-shadow-sm{box-shadow:var(--persona-reasoning-bubble-shadow, 0 5px 15px rgba(15, 23, 42, .08))}[data-persona-root] .persona-markdown-bubble{color:var(--persona-text, #111827);font-family:var(--persona-md-prose-font-family, inherit)}[data-persona-root] .persona-markdown-bubble p{margin:0 0 1.5em}[data-persona-root] .persona-markdown-bubble p:last-child{margin-bottom:0}[data-persona-root] .persona-markdown-bubble code:not(pre code){background-color:var(--persona-md-inline-code-bg);color:var(--persona-md-inline-code-color, inherit);padding:var(--persona-md-inline-code-padding);border-radius:var(--persona-md-inline-code-border-radius);font-size:var(--persona-md-inline-code-font-size)}[data-persona-root] .persona-markdown-bubble a{color:var(--persona-md-link-color, var(--persona-accent, #0f0f0f));text-decoration:underline}[data-persona-root] .persona-markdown-bubble pre{background-color:var(--persona-md-code-block-bg);border:1px solid var(--persona-md-code-block-border-color);border-radius:var(--persona-radius-md, .375rem);padding:.75rem 1rem;overflow-x:auto;font-size:.8125rem}.persona-code-block-wrapper{position:relative;margin:.5rem 0}.persona-code-block-wrapper pre{margin:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.persona-code-block-header{display:flex;align-items:center;justify-content:space-between;background-color:var(--persona-md-code-block-bg, #f3f4f6);border:1px solid var(--persona-md-code-block-border-color, #e5e7eb);border-bottom:none;border-top-left-radius:var(--persona-md-code-block-border-radius, .375rem);border-top-right-radius:var(--persona-md-code-block-border-radius, .375rem);padding:.25rem .5rem .25rem .75rem;font-size:.75rem;color:var(--persona-text-muted, #6b7280);font-family:ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace}.persona-code-copy-btn{display:inline-flex;align-items:center;gap:.25rem;background:none;border:1px solid transparent;border-radius:.25rem;padding:.25rem .5rem;cursor:pointer;color:var(--persona-text-muted, #6b7280);font-size:.75rem;font-family:inherit;line-height:1;transition:color .15s ease,border-color .15s ease}.persona-code-copy-btn:hover{color:var(--persona-text, #111827);border-color:var(--persona-md-code-block-border-color, #e5e7eb)}.persona-code-copy-btn.persona-code-copied{color:#16a34a}.persona-code-copy-btn.persona-code-copy-generating{cursor:default;opacity:.5}.persona-code-copy-btn.persona-code-copy-generating:hover{color:var(--persona-text-muted, #6b7280);border-color:transparent}.persona-message-bubble a,.persona-message-bubble a:visited,.persona-message-bubble a:hover,.persona-message-bubble a:active{text-decoration:underline}.persona-message-user-bubble a,.persona-message-user-bubble a:visited,.persona-message-user-bubble a:hover,.persona-message-user-bubble a:active{color:inherit;text-decoration:underline}[data-persona-root] .persona-message-assistant-bubble a{color:var(--persona-md-link-color, var(--persona-accent, #0f0f0f))}.persona-message-bubble p{margin:0}.persona-message-bubble p+p{margin-top:.75rem}.persona-message-bubble ul,.persona-message-bubble ol{margin:.5rem 0;padding-left:1.5rem}.persona-message-bubble ul{list-style-type:disc}.persona-message-bubble ol{list-style-type:decimal}.persona-message-bubble li{margin:.25rem 0;padding-left:.25rem}.persona-message-bubble ul ul,.persona-message-bubble ol ul{list-style-type:circle;margin:.25rem 0}.persona-message-bubble ul ul ul,.persona-message-bubble ol ul ul,.persona-message-bubble ul ol ul,.persona-message-bubble ol ol ul{list-style-type:square}.persona-message-bubble ul ol,.persona-message-bubble ol ol{list-style-type:lower-alpha;margin:.25rem 0}.persona-message-user-bubble p{margin:0;color:inherit}.persona-message-user-bubble p+p{margin-top:.75rem}.persona-message-user-bubble ul,.persona-message-user-bubble ol{margin:.5rem 0;padding-left:1.5rem}.persona-message-user-bubble ul{list-style-type:disc}.persona-message-user-bubble ol{list-style-type:decimal}.persona-message-user-bubble li{margin:.25rem 0;padding-left:.25rem;color:inherit}.persona-message-assistant-bubble p,.persona-message-assistant-bubble li{color:inherit}.persona-message-bubble h1,[data-persona-root] .persona-markdown-bubble h1{font-size:var(--persona-md-h1-size);font-weight:var(--persona-md-h1-weight);margin:var(--persona-md-h1-margin);line-height:var(--persona-md-h1-line-height);color:inherit}.persona-message-bubble h2,[data-persona-root] .persona-markdown-bubble h2{font-size:var(--persona-md-h2-size);font-weight:var(--persona-md-h2-weight);margin:var(--persona-md-h2-margin);line-height:var(--persona-md-h2-line-height);color:inherit}.persona-message-bubble h3,[data-persona-root] .persona-markdown-bubble h3{font-size:var(--persona-md-h3-size);font-weight:var(--persona-md-h3-weight);margin:var(--persona-md-h3-margin);line-height:var(--persona-md-h3-line-height);color:inherit}.persona-message-bubble h4,[data-persona-root] .persona-markdown-bubble h4{font-size:var(--persona-md-h4-size);font-weight:var(--persona-md-h4-weight);margin:var(--persona-md-h4-margin);line-height:var(--persona-md-h4-line-height);color:inherit}.persona-message-bubble h5,[data-persona-root] .persona-markdown-bubble h5{font-size:var(--persona-md-h5-size);font-weight:var(--persona-md-h5-weight);margin:var(--persona-md-h5-margin);line-height:var(--persona-md-h5-line-height);color:inherit}.persona-message-bubble h6,[data-persona-root] .persona-markdown-bubble h6{font-size:var(--persona-md-h6-size);font-weight:var(--persona-md-h6-weight);margin:var(--persona-md-h6-margin);line-height:var(--persona-md-h6-line-height);color:inherit}.persona-message-bubble h1:first-child,.persona-message-bubble h2:first-child,.persona-message-bubble h3:first-child,.persona-message-bubble h4:first-child,.persona-message-bubble h5:first-child,.persona-message-bubble h6:first-child{margin-top:0}.persona-message-bubble:has(table){width:100%;max-width:100%;flex-grow:1}.persona-message-bubble table{width:100%;border-collapse:collapse;margin:.5rem 0;font-size:.875rem;overflow:hidden;border-radius:var(--persona-md-table-border-radius);border:1px solid var(--persona-md-table-border-color)}.persona-message-bubble thead{background-color:var(--persona-md-table-header-bg)}.persona-message-bubble th{font-weight:var(--persona-md-table-header-weight);text-align:left;padding:var(--persona-md-table-cell-padding);border-bottom:1px solid var(--persona-md-table-border-color)}.persona-message-bubble td{padding:var(--persona-md-table-cell-padding);border-bottom:1px solid var(--persona-md-table-border-color);text-align:left}.persona-message-bubble tr:last-child td{border-bottom:none}.persona-message-bubble tbody tr:nth-child(2n){background-color:#00000005}.persona-content-streaming table{table-layout:fixed}.persona-content-streaming th,.persona-content-streaming td{overflow-wrap:break-word}.persona-message-bubble hr{border:none;height:var(--persona-md-hr-height);background-color:var(--persona-md-hr-color);margin:var(--persona-md-hr-margin)}.persona-message-bubble blockquote{border-left:var(--persona-md-blockquote-border-width) solid var(--persona-md-blockquote-border-color);padding:var(--persona-md-blockquote-padding);margin:var(--persona-md-blockquote-margin);background-color:var(--persona-md-blockquote-bg);color:var(--persona-md-blockquote-text-color);font-style:var(--persona-md-blockquote-font-style)}.persona-message-bubble blockquote p{margin:0}.persona-message-bubble blockquote p+p{margin-top:.5rem}.persona-message-bubble blockquote blockquote{margin-left:.5rem}.persona-message-bubble code:not(pre code){background-color:var(--persona-md-inline-code-bg);color:var(--persona-md-inline-code-color, inherit);padding:var(--persona-md-inline-code-padding);border-radius:var(--persona-md-inline-code-border-radius);font-size:var(--persona-md-inline-code-font-size)}.persona-message-bubble strong,.persona-message-bubble b{font-weight:var(--persona-md-strong-weight)}.persona-message-bubble em,.persona-message-bubble i{font-style:var(--persona-md-em-style)}.persona-message-user-bubble h1,.persona-message-user-bubble h2,.persona-message-user-bubble h3,.persona-message-user-bubble h4,.persona-message-user-bubble h5,.persona-message-user-bubble h6{color:inherit}.persona-message-user-bubble table,.persona-message-user-bubble th,.persona-message-user-bubble td{border-color:#ffffff4d}.persona-message-user-bubble thead{background-color:#ffffff1a}.persona-message-user-bubble tbody tr:nth-child(2n){background-color:#ffffff0d}.persona-message-user-bubble hr{background-color:#ffffff4d}.persona-message-user-bubble blockquote{border-left-color:#ffffff80;color:inherit;opacity:.9}.persona-message-user-bubble code:not(pre code){background-color:#fff3}.persona-message-bubble{position:relative;overflow-wrap:break-word}@keyframes persona-message-actions-fade-in{0%{opacity:0}to{opacity:1}}.persona-message-actions{display:flex;align-items:center;gap:.25rem;margin-top:.5rem;padding-top:.5rem;border-top:1px solid var(--persona-divider, #f1f5f9)}.persona-message-actions:not(.persona-message-actions-hover){animation:persona-message-actions-fade-in .3s ease-out forwards}@keyframes persona-ask-resolved{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}[data-ask-answered=true]{animation:persona-ask-resolved .22s ease-out}@media (prefers-reduced-motion: reduce){[data-ask-answered=true]{animation:none}}.persona-message-actions-left{justify-content:flex-start}.persona-message-actions-center{justify-content:center}.persona-message-actions-right{justify-content:flex-end}.persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-pill{width:fit-content;margin-top:.5rem;padding:.25rem .5rem;border-top:none}.persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-pill.persona-message-actions-right{margin-left:auto}.persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-pill.persona-message-actions-center{margin-left:auto;margin-right:auto}.persona-message-actions:not(.persona-message-actions-hover).persona-message-actions-row{margin-left:-1.25rem;margin-right:-1.25rem;margin-bottom:-.75rem;padding:.5rem 1.25rem;border-radius:0 0 var(--persona-radius-lg, 1.5rem) var(--persona-radius-lg);background:linear-gradient(to top,var(--persona-surface, #ffffff) 70%,transparent);border-top:1px solid var(--persona-divider, #f1f5f9)}@media (hover: hover){.persona-message-actions-hover{opacity:0;pointer-events:none;transition:opacity .15s ease-in-out}.persona-message-actions-hover.persona-message-actions-pill{position:absolute;bottom:.5rem;margin-top:0;padding:.25rem;border-top:none;width:fit-content}.persona-message-actions-hover.persona-message-actions-pill.persona-message-actions-left{left:.75rem;right:auto}.persona-message-actions-hover.persona-message-actions-pill.persona-message-actions-center{left:50%;right:auto;transform:translate(-50%)}.persona-message-actions-hover.persona-message-actions-pill.persona-message-actions-right{right:.75rem;left:auto}.persona-message-actions-hover.persona-message-actions-row{position:absolute;bottom:0;left:0;right:0;margin-top:0;padding:.5rem .75rem;border-top:none;background:linear-gradient(to top,var(--persona-surface, #ffffff) 70%,transparent);border-radius:0 0 var(--persona-radius-lg, 1.5rem) var(--persona-radius-lg, 1.5rem)}.persona-message-bubble:hover .persona-message-actions-hover,.persona-message-bubble:focus-within .persona-message-actions-hover{opacity:1;pointer-events:auto}}@media (hover: none){.persona-message-actions-hover{position:static;opacity:1}}.persona-message-action-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:none;border-radius:var(--persona-radius-sm, .125rem);background-color:transparent;color:var(--persona-muted, #6b7280);cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .1s ease}.persona-message-action-btn:hover{background-color:var(--persona-container, #f8fafc);color:var(--persona-primary, #111827)}.persona-message-action-btn:active{transform:scale(.95)}.persona-message-action-btn:focus{outline:none;box-shadow:0 0 0 2px var(--persona-accent, #0a0a0a)}.persona-message-action-btn:focus:not(:focus-visible){box-shadow:none}.persona-message-action-btn:focus-visible{box-shadow:0 0 0 2px var(--persona-accent, #0a0a0a)}.persona-message-action-btn.persona-message-action-active{background-color:var(--persona-accent, #0a0a0a);color:#fff}.persona-message-action-btn.persona-message-action-active:hover{background-color:var(--persona-accent, #0a0a0a);color:#fff;opacity:.9}.persona-message-action-btn.persona-message-action-loading svg{animation:persona-voice-processing-spin 1s linear infinite}@media (prefers-reduced-motion: reduce){.persona-message-action-btn.persona-message-action-loading svg{animation:none}}@keyframes persona-vote-pop{0%{transform:scale(1)}40%{transform:scale(1.25)}to{transform:scale(1)}}.persona-message-action-btn.persona-message-action-pop{animation:persona-vote-pop .3s ease}.persona-message-action-btn.persona-message-action-success,.persona-message-action-btn.persona-message-action-success:hover{background-color:#10b981;color:#fff}.persona-message-action-btn svg{width:14px;height:14px;flex-shrink:0}.persona-feedback-container{background:var(--persona-surface, #ffffff);border:1px solid var(--persona-border, #e5e7eb);border-radius:var(--persona-radius-lg, .5rem);box-shadow:0 10px 25px -5px #0000001a,0 8px 10px -6px #0000001a;padding:1.25rem;max-width:100%;margin:.75rem;animation:persona-feedback-fade-in .3s ease-out}@keyframes persona-feedback-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.persona-feedback-content{display:flex;flex-direction:column;gap:1rem}.persona-feedback-header{text-align:center}.persona-feedback-title{margin:0 0 .25rem;font-size:1rem;font-weight:600;color:var(--persona-primary, #111827)}.persona-feedback-subtitle{margin:0;font-size:.875rem;color:var(--persona-muted, #6b7280)}.persona-feedback-rating-csat{display:flex;justify-content:center;gap:.5rem}.persona-feedback-star-btn{background:transparent;border:none;cursor:pointer;padding:.25rem;color:var(--persona-border, #d1d5db);transition:color .2s ease,transform .15s ease}.persona-feedback-star-btn:hover{transform:scale(1.15)}.persona-feedback-star-btn.selected{color:#fbbf24}.persona-feedback-star-btn .persona-feedback-star{width:32px;height:32px}.persona-feedback-star-btn.selected .persona-feedback-star{fill:#fbbf24}.persona-feedback-rating-nps{display:flex;flex-direction:column;gap:.5rem}.persona-feedback-labels{display:flex;justify-content:space-between;font-size:.75rem;color:var(--persona-muted, #6b7280)}.persona-feedback-numbers{display:flex;gap:.25rem;justify-content:center}.persona-feedback-number-btn{width:28px;height:28px;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:500;border-radius:var(--persona-radius-sm, .125rem);border:1px solid var(--persona-border, #e5e7eb);background:var(--persona-surface, #ffffff);color:var(--persona-primary, #111827);cursor:pointer;transition:all .2s ease}.persona-feedback-number-btn:hover{border-color:var(--persona-accent, #0a0a0a);background:var(--persona-container, #f3f4f6)}.persona-feedback-number-btn.selected{color:#fff}.persona-feedback-number-btn.persona-feedback-detractor.selected{background:#ef4444;border-color:#ef4444}.persona-feedback-number-btn.persona-feedback-passive.selected{background:#f59e0b;border-color:#f59e0b}.persona-feedback-number-btn.persona-feedback-promoter.selected{background:#22c55e;border-color:#22c55e}.persona-feedback-comment-container{width:100%}.persona-feedback-comment{width:100%;padding:.625rem;font-size:.875rem;font-family:inherit;border:1px solid var(--persona-border, #e5e7eb);border-radius:var(--persona-radius-sm, .125rem);background:var(--persona-surface, #ffffff);color:var(--persona-primary, #111827);resize:vertical;box-sizing:border-box}.persona-feedback-comment:focus{outline:none;border-color:var(--persona-accent, #0a0a0a);box-shadow:0 0 0 2px #1d4ed826}.persona-feedback-comment::placeholder{color:var(--persona-muted, #9ca3af)}.persona-feedback-actions{display:flex;gap:.5rem;justify-content:flex-end}.persona-feedback-btn{padding:.5rem 1rem;font-size:.875rem;font-weight:500;border-radius:var(--persona-radius-sm, .125rem);cursor:pointer;transition:all .2s ease}.persona-feedback-btn-skip{background:transparent;border:1px solid var(--persona-border, #e5e7eb);color:var(--persona-muted, #6b7280)}.persona-feedback-btn-skip:hover{background:var(--persona-container, #f3f4f6);color:var(--persona-primary, #111827)}.persona-feedback-btn-submit{background:var(--persona-accent, #0a0a0a);border:1px solid var(--persona-accent, #0a0a0a);color:#fff}.persona-feedback-btn-submit:hover:not(:disabled){opacity:.9}.persona-feedback-btn-submit:disabled{opacity:.6;cursor:not-allowed}@keyframes persona-feedback-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-4px)}20%,40%,60%,80%{transform:translate(4px)}}.persona-feedback-shake{animation:persona-feedback-shake .5s ease-in-out}.persona-tool-bubble .persona-border-t,.persona-reasoning-bubble .persona-border-t{border-top-color:var(--cw-border, #e5e7eb);background-color:var(--cw-container, #f9fafb)}.persona-tool-bubble pre{background-color:var(--cw-surface, #ffffff);border-color:var(--cw-border, #f1f5f9)}.persona-tool-bubble button[data-expand-header],.persona-reasoning-bubble button[data-expand-header]{transition:background-color .15s ease}.persona-tool-bubble button[data-expand-header]:hover,.persona-reasoning-bubble button[data-expand-header]:hover{background-color:var(--cw-container, #f8fafc)}[data-persona-root] [data-persona-collapsed-preview]{border-top:1px solid transparent}[data-persona-root] .persona-tool-group{--_rail-x: .5rem;--_rail-w: 2px;--_dot-size: 6px;--_branch-len: .75rem;--_branch-y: 1.5rem;--_rail-color: var(--cw-border, #d1d5db);gap:0}[data-persona-root] .persona-tool-group-summary{position:relative;min-height:1.5rem;padding-left:calc(var(--_rail-x) + var(--_branch-len) + .625rem);margin-bottom:.625rem;display:flex;align-items:center}[data-persona-root] .persona-tool-group-summary:before{content:"";position:absolute;left:var(--_rail-x);top:50%;width:var(--_branch-len);height:var(--_rail-w);background:var(--_rail-color);transform:translateY(-50%)}[data-persona-root] .persona-tool-group-summary:after{content:"";position:absolute;left:var(--_rail-x);top:50%;width:var(--_dot-size);height:var(--_dot-size);border-radius:999px;border:var(--_rail-w) solid var(--_rail-color);background:var(--cw-surface, #fff);transform:translate(-50%,-50%)}[data-persona-root] .persona-tool-group-stack{position:relative;margin-left:var(--_rail-x);padding-left:calc(var(--_branch-len) + .125rem);gap:.625rem}[data-persona-root] .persona-tool-group-stack:before{content:"";position:absolute;left:0;top:calc(-.625rem - (var(--_dot-size) / 2));bottom:calc(100% - var(--_branch-y));width:var(--_rail-w);background:var(--_rail-color);transform:translate(-50%)}[data-persona-root] .persona-tool-group-stack:after{content:"";position:absolute;left:0;top:0;bottom:0;width:var(--_rail-w);background:var(--_rail-color);transform:translate(-50%);z-index:0;pointer-events:none}[data-persona-root] .persona-tool-group-item:last-child{position:relative}[data-persona-root] .persona-tool-group-item{position:relative;z-index:1}[data-persona-root] .persona-tool-group-item:before{content:"";position:absolute;left:calc(-1 * var(--_branch-len) - .125rem);top:var(--_branch-y);width:calc(var(--_branch-len) + .125rem);height:var(--_rail-w);background:var(--_rail-color);transform:translateY(-50%)}[data-persona-root] .persona-tool-group-item:after{content:"";position:absolute;left:calc(-1 * var(--_branch-len) - .125rem);top:var(--_branch-y);width:var(--_dot-size);height:var(--_dot-size);border-radius:999px;border:var(--_rail-w) solid var(--_rail-color);background:var(--cw-surface, #fff);transform:translate(-50%,-50%);z-index:1}.persona-approval-bubble{background-color:var(--cw-surface, #ffffff);border-color:var(--cw-border, #e5e7eb)}.persona-approval-bubble [data-approval-action]{transition:opacity .15s ease,transform .1s ease,background-color .15s ease}.persona-approval-bubble [data-approval-action=approve]:hover{opacity:.85}.persona-approval-bubble [data-approval-action=approve]:active{transform:scale(.97)}.persona-approval-bubble [data-approval-action=deny]:hover{background-color:#dc262614}.persona-approval-bubble [data-approval-action=deny]:active{transform:scale(.97)}.persona-approval-card{width:100%;max-width:100%;box-sizing:border-box;background:var(--persona-approval-bg, var(--persona-surface, #ffffff));border:.5px solid var(--persona-approval-border, var(--persona-border, rgba(11, 11, 11, .1)));border-radius:.75rem;padding:.5rem}.persona-approval-card.persona-shadow-sm{box-shadow:var(--persona-approval-shadow, 0 1px 2px 0 rgba(11, 11, 11, .06), 0 2px 8px 0 rgba(11, 11, 11, .04))}.persona-approval-head{display:flex;align-items:center;gap:.75rem;width:100%;border:none;background:transparent;padding:.4rem .6rem;cursor:pointer;text-align:left;font:inherit;color:var(--persona-text, #0b0b0b);border-radius:.5rem;transition:background .12s ease}.persona-approval-head:hover{background:var(--persona-container, rgba(11, 11, 11, .04))}.persona-approval-head[data-static=true]{cursor:default}.persona-approval-head[data-static=true]:hover{background:transparent}.persona-approval-logo{flex-shrink:0;width:24px;height:24px;display:grid;place-items:center;box-sizing:border-box;border:.5px solid var(--persona-border, rgba(11, 11, 11, .12));border-radius:6.5px;background:var(--persona-surface, #ffffff);box-shadow:0 1px 2px #0b0b0b14;color:var(--persona-muted, #6b7280);overflow:hidden}.persona-approval-logo svg{width:15px;height:15px;display:block}.persona-approval-title{flex:1;min-width:0;font-size:.875rem;line-height:1.4;color:var(--persona-text, #0b0b0b)}.persona-approval-title strong{font-weight:600}.persona-approval-toggle{display:inline-flex;align-items:center;margin-left:.25rem;color:var(--persona-muted, #6b7280);vertical-align:middle;transition:transform .15s ease}.persona-approval-toggle svg{width:.85rem;height:.85rem;display:block}.persona-approval-head[aria-expanded=false] .persona-approval-toggle{transform:rotate(-90deg)}.persona-approval-body{padding:.5rem .6rem .35rem calc(24px + 1.35rem)}.persona-approval-details{margin:0 0 .75rem}.persona-approval-details[hidden]{display:none}.persona-approval-desc{margin:0 0 .5rem;font-size:.8125rem;line-height:1.4;color:var(--persona-muted, #6b7280)}.persona-approval-params{margin:0;padding:.7rem .85rem;border-radius:.625rem;background:var(--persona-container, rgba(11, 11, 11, .04));color:var(--persona-text, #1f2937);font-size:.75rem;line-height:1rem;overflow-x:auto;max-height:9rem}.persona-approval-reason{margin:0 0 .6rem;font-size:.8125rem;line-height:1.4;color:var(--persona-muted, #6b7280)}.persona-approval-reason-label{font-weight:500}.persona-approval-resolved{display:flex;align-items:center;gap:.45rem;margin:.5rem 0;padding:.3rem .15rem;font-size:.8rem;color:var(--persona-muted, #6b7280)}.persona-approval-resolved svg{width:.95rem;height:.95rem;display:block;flex-shrink:0}.persona-approval-resolved-name{font-weight:600}.persona-approval-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.persona-approval-split{position:relative;display:inline-flex}.persona-approval-primary,.persona-approval-caret,.persona-approval-deny{border:none;cursor:pointer;font:inherit;font-size:.875rem;font-weight:500;height:2rem;display:inline-flex;align-items:center;gap:.375rem;transition:background .12s ease,box-shadow .12s ease}.persona-approval-primary{background:var(--persona-approval-approve-bg, var(--persona-button-primary-bg, var(--persona-primary, #111827)));color:var(--persona-button-primary-fg, var(--persona-text-inverse, #ffffff));padding:0 .75rem;border-radius:.5rem 0 0 .5rem}.persona-approval-primary--solo{border-radius:.5rem}.persona-approval-caret{position:relative;background:var(--persona-approval-approve-bg, var(--persona-button-primary-bg, var(--persona-primary, #111827)));color:var(--persona-button-primary-fg, var(--persona-text-inverse, #ffffff));width:2rem;justify-content:center;padding:0;border-radius:0 .5rem .5rem 0}.persona-approval-caret svg{width:.95rem;height:.95rem;display:block}.persona-approval-caret:before{content:"";position:absolute;left:0;top:4px;bottom:4px;width:1px;background:var(--persona-button-primary-fg, #ffffff);opacity:.25;transition:opacity .12s ease}.persona-approval-caret:hover:before,.persona-approval-primary:hover+.persona-approval-caret:before{opacity:0}.persona-approval-primary:hover,.persona-approval-caret:hover{box-shadow:inset 0 0 0 999px #ffffff29}.persona-approval-deny{background:var(--persona-approval-deny-bg, var(--persona-container, rgba(11, 11, 11, .04)));color:var(--persona-text, #1f2937);padding:0 .75rem;border-radius:.5rem;box-shadow:inset 0 0 0 .5px var(--persona-border, rgba(0, 0, 0, .1))}.persona-approval-deny:hover{box-shadow:inset 0 0 0 .5px var(--persona-border, rgba(0, 0, 0, .1)),inset 0 0 0 999px #0b0b0b0a}.persona-approval-menu{width:max-content;max-width:18rem;box-sizing:border-box;background:var(--persona-surface, #ffffff);border:.5px solid var(--persona-border, rgba(11, 11, 11, .1));border-radius:.625rem;box-shadow:0 8px 24px #0b0b0b1f,0 2px 6px #0b0b0b14;padding:.25rem;white-space:nowrap}.persona-approval-menu-item{display:flex;align-items:center;gap:.6rem;width:100%;border:none;background:transparent;cursor:pointer;font:inherit;font-size:.875rem;color:var(--persona-text, #1f2937);padding:.45rem .6rem;border-radius:.4rem;text-align:left;transition:background .12s ease}.persona-approval-menu-item:hover{background:var(--persona-container, rgba(11, 11, 11, .06))}.persona-approval-kbd{font-family:inherit;font-size:.75rem;line-height:1;opacity:.7;margin-left:.25rem}.persona-approval-menu-item .persona-approval-kbd{margin-left:auto}@media (min-width: 768px){[data-persona-root] .md\:persona-hidden{display:none!important}}[data-persona-root] .persona-artifact-split-root{gap:var(--persona-artifact-split-gap, .5rem)}[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn{display:inline-flex;align-items:center;justify-content:center;padding:var(--persona-artifact-toolbar-icon-padding, .25rem);border-radius:var(--persona-artifact-toolbar-icon-radius, var(--persona-radius-md, .375rem));border:var(--persona-artifact-toolbar-icon-border, 1px solid var(--persona-border, #e5e7eb));background:var(--persona-artifact-toolbar-icon-bg, var(--persona-surface, #ffffff));color:var(--persona-artifact-doc-toolbar-icon-color, var(--persona-text, #111827));cursor:pointer;line-height:1}[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn:hover{color:var(--persona-artifact-toolbar-icon-hover-color, inherit);background:var(--persona-artifact-toolbar-icon-hover-bg, var(--persona-container, #f3f4f6))}[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-icon-btn[aria-pressed=true]{background:var(--persona-artifact-doc-toggle-active-bg, var(--persona-container, #f3f4f6));border-color:var(--persona-artifact-doc-toggle-active-border, var(--persona-border, #e5e7eb))}[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-copy-btn{display:inline-flex;align-items:center;gap:.35rem;padding:var(--persona-artifact-toolbar-copy-padding, .25rem .5rem);border-radius:var(--persona-artifact-toolbar-copy-radius, var(--persona-radius-md, .375rem));border:var(--persona-artifact-toolbar-copy-border, 1px solid var(--persona-border, #e5e7eb));background:var(--persona-artifact-toolbar-copy-bg, var(--persona-surface, #ffffff));color:var(--persona-artifact-toolbar-copy-color, var(--persona-artifact-doc-toolbar-icon-color, var(--persona-text, #111827)));cursor:pointer;font-size:.75rem;line-height:1.25}[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-copy-btn:hover{background:var(--persona-artifact-toolbar-icon-hover-bg, var(--persona-container, #f3f4f6))}[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-doc-copy-label{font-weight:500}[data-persona-root] .persona-artifact-tab{background:var(--persona-artifact-tab-bg, transparent);border-radius:var(--persona-artifact-tab-radius, .5rem);color:var(--persona-artifact-tab-color, inherit)}[data-persona-root] .persona-artifact-tab.persona-bg-persona-container{background:var(--persona-artifact-tab-active-bg, var(--persona-container, #f3f4f6));border-color:var(--persona-artifact-tab-active-border, var(--persona-border, #e5e7eb))}[data-persona-root] .persona-artifact-toolbar{background:var(--persona-artifact-toolbar-bg, var(--persona-surface, #fff))}[data-persona-root] .persona-artifact-toggle-group{gap:var(--persona-artifact-toolbar-toggle-group-gap, .25rem)}[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-view-btn,[data-persona-root] .persona-artifact-toolbar-document .persona-artifact-code-btn{border-radius:var(--persona-artifact-toolbar-toggle-radius, var(--persona-artifact-toolbar-icon-radius, var(--persona-radius-md, .375rem)))}[data-persona-root] .persona-artifact-tab:hover{background:var(--persona-artifact-tab-hover-bg, var(--persona-container, #f3f4f6))}[data-persona-root] .persona-artifact-list{background:var(--persona-artifact-tab-list-bg, transparent);border-bottom-color:var(--persona-artifact-tab-list-border-color, var(--persona-border, #e5e7eb));padding:var(--persona-artifact-tab-list-padding, .5rem)}[data-persona-root] .persona-artifact-toolbar-document{border-bottom:var(--persona-artifact-toolbar-border, 1px solid var(--persona-border, #e5e7eb))}[data-persona-root] .persona-icon-btn{display:inline-flex;align-items:center;justify-content:center;padding:var(--persona-icon-btn-padding, .25rem);border-radius:var(--persona-icon-btn-radius, var(--persona-radius-md, .375rem));border:var(--persona-icon-btn-border, 1px solid var(--persona-border, #e5e7eb));background:var(--persona-icon-btn-bg, var(--persona-surface, #ffffff));color:var(--persona-icon-btn-color, var(--persona-text, #111827));cursor:pointer;line-height:1;transition:background-color .15s ease,color .15s ease,border-color .15s ease}[data-persona-root] .persona-icon-btn:hover{background:var(--persona-icon-btn-hover-bg, var(--persona-container, #f3f4f6));color:var(--persona-icon-btn-hover-color, inherit)}[data-persona-root] .persona-icon-btn:focus-visible{outline:2px solid var(--persona-accent, #171717);outline-offset:2px}[data-persona-root] .persona-icon-btn[aria-pressed=true]{background:var(--persona-icon-btn-active-bg, var(--persona-container, #f3f4f6));border-color:var(--persona-icon-btn-active-border, var(--persona-border, #e5e7eb))}[data-persona-root] .persona-label-btn{display:inline-flex;align-items:center;gap:var(--persona-label-btn-gap, .35rem);padding:var(--persona-label-btn-padding, .25rem .5rem);border-radius:var(--persona-label-btn-radius, var(--persona-radius-md, .375rem));border:var(--persona-label-btn-border, 1px solid var(--persona-border, #e5e7eb));background:var(--persona-label-btn-bg, var(--persona-surface, #ffffff));color:var(--persona-label-btn-color, var(--persona-text, #111827));cursor:pointer;font-size:var(--persona-label-btn-font-size, .75rem);font-weight:500;line-height:1.25;white-space:nowrap;transition:background-color .15s ease,color .15s ease}[data-persona-root] .persona-label-btn:hover{background:var(--persona-label-btn-hover-bg, var(--persona-container, #f3f4f6))}[data-persona-root] .persona-label-btn:focus-visible{outline:2px solid var(--persona-accent, #171717);outline-offset:2px}[data-persona-root] .persona-label-btn--sm{padding:var(--persona-label-btn-padding, .25rem .5rem);font-size:var(--persona-label-btn-font-size, .75rem)}[data-persona-root] .persona-label-btn--md{padding:.375rem .75rem;font-size:.8125rem}[data-persona-root] .persona-label-btn--primary{background:var(--persona-primary, #171717);color:var(--persona-text-inverse, #ffffff);border-color:transparent}[data-persona-root] .persona-label-btn--primary:hover{opacity:.9}[data-persona-root] .persona-label-btn--destructive{color:var(--persona-label-btn-destructive-color, #ef4444)}[data-persona-root] .persona-label-btn--ghost{border:none;background:transparent}[data-persona-root] .persona-label-btn--ghost:hover{background:var(--persona-label-btn-hover-bg, var(--persona-container, #f3f4f6))}[data-persona-root] .persona-scroll-to-bottom-indicator{display:inline-flex;align-items:center;justify-content:center;gap:var(--persona-scroll-to-bottom-gap, .5rem);min-height:var(--persona-scroll-to-bottom-size, 40px);border-radius:var(--persona-scroll-to-bottom-radius, var(--persona-radius-full, 9999px));border:1px solid var(--persona-scroll-to-bottom-border, var(--persona-primary, #111827));background:var(--persona-scroll-to-bottom-bg, var(--persona-button-primary-bg, var(--persona-accent, #0f0f0f)));color:var(--persona-scroll-to-bottom-fg, var(--persona-button-primary-fg, var(--persona-text-inverse, #ffffff)));box-shadow:var(--persona-scroll-to-bottom-shadow, 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1));font-size:var(--persona-scroll-to-bottom-font-size, .875rem);line-height:1}[data-persona-root] .persona-scroll-to-bottom-indicator[data-persona-scroll-to-bottom-has-label=true]{padding:var(--persona-scroll-to-bottom-padding, .5rem .875rem)}[data-persona-root] .persona-scroll-to-bottom-indicator[data-persona-scroll-to-bottom-has-label=false]{width:var(--persona-scroll-to-bottom-size, 40px);height:var(--persona-scroll-to-bottom-size, 40px);padding:0;gap:0}[data-persona-root] .persona-scroll-to-bottom-indicator svg{width:var(--persona-scroll-to-bottom-icon-size, 14px);height:var(--persona-scroll-to-bottom-icon-size, 14px)}[data-persona-root] .persona-scroll-to-bottom-indicator [data-persona-scroll-to-bottom-count]{position:absolute;top:-6px;right:-6px;box-sizing:border-box;min-width:18px;height:18px;padding:0 5px;border-radius:var(--persona-radius-full, 9999px);border:1px solid var(--persona-scroll-to-bottom-border, var(--persona-primary, #111827));background:var(--persona-scroll-to-bottom-count-bg, var(--persona-surface, #ffffff));color:var(--persona-scroll-to-bottom-count-fg, var(--persona-primary, #111827));font-size:11px;font-weight:600;line-height:16px;text-align:center}[data-persona-root] .persona-scroll-to-bottom-indicator:hover{opacity:.92}[data-persona-root] .persona-scroll-to-bottom-indicator:focus-visible{outline:2px solid var(--persona-accent, #171717);outline-offset:2px}[data-persona-root] .persona-toggle-group{display:inline-flex;gap:var(--persona-toggle-group-gap, 0)}[data-persona-root] .persona-toggle-group>.persona-icon-btn{border-radius:0}[data-persona-root] .persona-toggle-group>.persona-icon-btn:first-child{border-top-left-radius:var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, .375rem)));border-bottom-left-radius:var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, .375rem)))}[data-persona-root] .persona-toggle-group>.persona-icon-btn:last-child{border-top-right-radius:var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, .375rem)));border-bottom-right-radius:var(--persona-toggle-group-radius, var(--persona-icon-btn-radius, var(--persona-radius-md, .375rem)))}[data-persona-root] .persona-combo-btn{font-size:var(--persona-combo-btn-font-size, .8125rem);font-weight:var(--persona-combo-btn-font-weight, 600);color:var(--persona-combo-btn-color, var(--persona-text, #111827));user-select:none}[data-persona-root] .persona-combo-btn-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[data-persona-root] .persona-dropdown-menu{z-index:100;min-width:160px;background:var(--persona-dropdown-bg, var(--persona-surface, #fff));border:var(--persona-dropdown-border, 1px solid var(--persona-border, #e5e7eb));border-radius:var(--persona-dropdown-radius, .625rem);padding:.25rem 0;box-shadow:var(--persona-dropdown-shadow, 0 4px 16px rgba(0,0,0,.12))}[data-persona-root] .persona-dropdown-menu button{display:flex;align-items:center;gap:.625rem;width:100%;padding:.5rem .875rem;border:none;background:transparent;color:var(--persona-dropdown-item-color, var(--persona-text, #1f2937));font-size:.8125rem;cursor:pointer;text-align:left;white-space:nowrap}[data-persona-root] .persona-dropdown-menu button:hover{background:var(--persona-dropdown-item-hover-bg, var(--persona-container, #f3f4f6))}[data-persona-root] .persona-dropdown-menu button[data-destructive]{color:var(--persona-dropdown-destructive-color, #ef4444)}[data-persona-root] .persona-dropdown-menu hr{border:none;border-top:1px solid var(--persona-dropdown-hr, var(--persona-border, #e5e7eb));margin:.25rem 0}[data-persona-root] .persona-artifact-split-handle{width:6px;flex-shrink:0;cursor:col-resize;touch-action:none;align-self:stretch;background:transparent;border:none;padding:0;margin:0;box-sizing:border-box}[data-persona-root] .persona-artifact-split-handle:hover,[data-persona-root] .persona-artifact-split-handle:focus-visible{background:color-mix(in srgb,var(--persona-border, #e5e7eb) 55%,transparent);outline:none}[data-persona-root].persona-artifact-narrow-host .persona-artifact-split-handle{display:none!important}@media (max-width: 640px){[data-persona-root] .persona-artifact-split-handle{display:none!important}}@media (min-width: 641px){[data-persona-root] .persona-artifact-pane{width:var(--persona-artifact-pane-width, 40%);max-width:var(--persona-artifact-pane-max-width, 28rem);min-width:var(--persona-artifact-pane-min-width, 0);flex-shrink:0;box-shadow:var(--persona-artifact-pane-shadow, -2px 0 12px rgba(15, 23, 42, .06))}}[data-persona-root] .persona-artifact-pane{border-radius:var(--persona-artifact-pane-radius, 0);overflow:hidden;background-color:var( --persona-artifact-pane-bg, var(--persona-components-artifact-pane-background, var(--persona-surface, #ffffff)) )}[data-persona-root].persona-artifact-appearance-seamless .persona-artifact-split-root{position:relative;gap:0!important}[data-persona-root].persona-artifact-appearance-seamless .persona-artifact-pane{border-left-width:0!important;border-left-color:transparent!important;box-shadow:none!important;background-color:var( --persona-artifact-pane-bg, var(--persona-components-artifact-pane-background, var(--persona-container, #f8fafc)) )}[data-persona-root].persona-artifact-border-full .persona-artifact-pane{border:var(--persona-artifact-pane-border)!important}[data-persona-root].persona-artifact-border-left .persona-artifact-pane{border-top:none!important;border-right:none!important;border-bottom:none!important;border-left:var(--persona-artifact-pane-border-left)!important}[data-persona-root].persona-artifact-appearance-seamless.persona-artifact-border-left .persona-artifact-pane{border-left:var(--persona-artifact-pane-border-left)!important}[data-persona-root].persona-artifact-appearance-seamless.persona-artifact-border-full .persona-artifact-pane{border:var(--persona-artifact-pane-border)!important}@media (min-width: 641px){[data-persona-root]:not(.persona-artifact-narrow-host).persona-artifact-unified-split .persona-widget-container{border-top-right-radius:0!important;border-bottom-right-radius:0!important}[data-persona-root]:not(.persona-artifact-narrow-host).persona-artifact-unified-split .persona-artifact-pane{border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-top-right-radius:var(--persona-artifact-unified-outer-radius, var(--persona-radius-lg, 1rem))!important;border-bottom-right-radius:var(--persona-artifact-unified-outer-radius, var(--persona-radius-lg, 1rem))!important;overflow:hidden}}[data-persona-root].persona-artifact-narrow-host .persona-artifact-backdrop{position:absolute!important;inset:0!important;z-index:55!important}@media (min-width: 641px){[data-persona-root].persona-artifact-narrow-host .persona-artifact-pane{position:absolute;top:0;right:0;bottom:0;width:min(calc(100% - 1rem),22rem)!important;max-width:22rem!important;z-index:60;transform:translate(100%);transition:transform .2s ease;box-shadow:-4px 0 24px #0000001f}[data-persona-root].persona-artifact-narrow-host .persona-artifact-pane.persona-artifact-drawer-open{transform:translate(0)}}@media (max-width: 640px){[data-persona-root] .persona-artifact-pane{position:fixed;top:0;right:0;bottom:0;width:min(100vw - 1.5rem,22rem);z-index:60;transform:translate(100%);transition:transform .2s ease;box-shadow:-4px 0 24px #0000001f}[data-persona-root] .persona-artifact-pane.persona-artifact-drawer-open{transform:translate(0)}}[data-persona-root] .persona-stream-char,[data-persona-root] .persona-stream-word{display:inline-block;will-change:opacity,transform,filter}[data-persona-root] .persona-stream-word-group{white-space:nowrap}@keyframes persona-stream-typewriter-in{0%{opacity:0}to{opacity:1}}[data-persona-root] .persona-stream-typewriter .persona-stream-char{animation:persona-stream-typewriter-in var(--persona-stream-step, .12s) ease-out both}@keyframes persona-stream-letter-rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}[data-persona-root] .persona-stream-letter-rise .persona-stream-char{animation:persona-stream-letter-rise calc(var(--persona-stream-step, .12s) * 2) ease-out both}@keyframes persona-stream-word-fade{0%{opacity:0;filter:blur(4px);transform:translateY(3px)}to{opacity:1;filter:blur(0);transform:translateY(0)}}[data-persona-root] .persona-stream-word-fade .persona-stream-word{animation:persona-stream-word-fade calc(var(--persona-stream-step, .12s) * 3) ease-out both}@keyframes persona-stream-pop-in{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}[data-persona-root] .persona-stream-pop{transform-origin:bottom left;animation:persona-stream-pop-in .4s cubic-bezier(.2,.9,.3,1.4) both}@keyframes persona-stream-blink{0%,50%{opacity:1}50.01%,to{opacity:0}}[data-persona-root] .persona-stream-caret{display:inline-block;width:2px;height:1em;margin-left:1px;vertical-align:-2px;background:currentColor;animation:persona-stream-blink 1s steps(1) infinite}[data-persona-root] .persona-timestamp-inline{display:inline-block;margin-left:.5rem;white-space:nowrap}@keyframes persona-stream-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}[data-persona-root] .persona-stream-skeleton{padding:2px 0;width:260px;max-width:100%}[data-persona-root] .persona-stream-skeleton-line{width:100%;height:10px;border-radius:3px;background:linear-gradient(90deg,color-mix(in srgb,currentColor 12%,transparent),color-mix(in srgb,currentColor 22%,transparent),color-mix(in srgb,currentColor 12%,transparent));background-size:200% 100%;animation:persona-stream-skeleton-shimmer 1.4s linear infinite}@media (prefers-reduced-motion: reduce){[data-persona-root] .persona-stream-typewriter .persona-stream-char,[data-persona-root] .persona-stream-letter-rise .persona-stream-char,[data-persona-root] .persona-stream-word-fade .persona-stream-word,[data-persona-root] .persona-stream-pop,[data-persona-root] .persona-stream-caret,[data-persona-root] .persona-stream-skeleton-line{animation:none!important;opacity:1!important;filter:none!important;transform:none!important;color:inherit!important;background:none!important;-webkit-background-clip:border-box!important;background-clip:border-box!important}}[data-persona-root] .persona-hidden{display:none!important}[data-persona-root] .persona-ask-stub{padding:.35rem .7rem;border-radius:999px;font-size:.8rem;color:var(--persona-muted, #6b7280);background:var(--persona-container, #f3f4f6);border:1px dashed var(--persona-border, #e5e7eb)}[data-persona-root] .persona-ask-stub-label{font-weight:500}[data-persona-root] .persona-ask-sheet{position:absolute;left:.75rem;right:.75rem;bottom:calc(100% + .5rem);box-sizing:border-box;padding:.85rem 1rem;background:var(--persona-ask-sheet-bg, var(--persona-surface, #ffffff));border:1px solid var(--persona-ask-sheet-border, var(--persona-border, #e5e7eb));border-radius:1rem;box-shadow:var(--persona-ask-sheet-shadow, 0 12px 28px -10px rgba(0, 0, 0, .15), 0 4px 10px -6px rgba(0, 0, 0, .08));transition:transform var(--persona-ask-sheet-duration, .18s) ease,opacity var(--persona-ask-sheet-duration, .18s) ease;opacity:1;transform:translateY(0)}[data-persona-root] .persona-ask-sheet.persona-ask-sheet-enter{opacity:0;transform:translateY(8px)}[data-persona-root] .persona-ask-sheet.persona-ask-sheet-leave{opacity:0;transform:translateY(8px);pointer-events:none}[data-persona-root] .persona-ask-sheet-header{margin-bottom:.55rem}[data-persona-root] .persona-ask-sheet-question{font-size:.92rem;font-weight:500;line-height:1.35;color:var(--persona-text, #1f2937);min-height:1.35em}[data-persona-root] .persona-ask-question-skeleton{display:block;width:60%;height:.85rem;border-radius:.3rem;background:linear-gradient(90deg,var(--persona-container, #f3f4f6) 0%,var(--persona-border, #e5e7eb) 50%,var(--persona-container, #f3f4f6) 100%);background-size:200% 100%;animation:persona-ask-skeleton-shimmer 1.2s ease-in-out infinite;color:transparent}[data-persona-root] .persona-ask-sheet-step-inline{flex:0 0 auto;font-size:.78rem;line-height:1;color:var(--persona-text-muted, #6b7280);font-variant-numeric:tabular-nums;letter-spacing:.01em;white-space:nowrap}[data-persona-root] .persona-ask-sheet-step-inline:empty{display:none}[data-persona-root] .persona-ask-pills{display:flex;flex-direction:column;flex-wrap:nowrap;row-gap:.4rem;column-gap:0}[data-persona-root] .persona-ask-pills--rows{flex-direction:column;flex-wrap:nowrap;gap:.4rem}[data-persona-root] .persona-ask-sheet--pills .persona-ask-pills:not(.persona-ask-pills--rows){flex-direction:row;flex-wrap:wrap;gap:.4rem}[data-persona-root] .persona-ask-sheet--pills .persona-ask-pills:not(.persona-ask-pills--rows) .persona-ask-pill{width:auto;padding:.4rem .9rem;border-radius:var(--persona-ask-pill-radius, 9999px)}[data-persona-root] .persona-ask-pill{display:flex;align-items:center;justify-content:flex-start;width:100%;text-align:left;padding:.65rem .9rem;border-radius:var(--persona-ask-pill-radius, .6rem);background:var(--persona-ask-pill-bg, transparent);color:var(--persona-ask-pill-fg, var(--persona-text, #1f2937));border:1px solid var(--persona-border, #e5e7eb);font-size:.9rem;font-weight:500;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .1s ease}[data-persona-root] .persona-ask-pill:hover:not(:disabled):not(.persona-ask-pill-skeleton):not(.persona-ask-pill-selected):not([aria-pressed=true]){border-color:var(--persona-text, #1f2937);background:var(--persona-container, #f3f4f6)}[data-persona-root] .persona-ask-pill:active{transform:translateY(1px)}[data-persona-root] .persona-ask-pill-selected,[data-persona-root] .persona-ask-pill[aria-pressed=true]{background:var(--persona-ask-pill-bg-selected, var(--persona-accent, #0f0f0f));color:var(--persona-ask-pill-fg-selected, #fafafa);border-color:var(--persona-ask-pill-bg-selected, var(--persona-accent, #0f0f0f))}[data-persona-root] .persona-ask-pill:focus:not(:focus-visible){outline:none}[data-persona-root] .persona-ask-pill:focus-visible{outline:2px solid var(--persona-accent, #0f0f0f);outline-offset:2px}[data-persona-root] .persona-ask-pill-custom{border-style:dashed}[data-persona-root] .persona-ask-pill-skeleton{min-width:5rem;height:2rem;padding:0;border:1px solid var(--persona-border, #e5e7eb);background:linear-gradient(90deg,var(--persona-container, #f3f4f6) 0%,var(--persona-border, #e5e7eb) 50%,var(--persona-container, #f3f4f6) 100%);background-size:200% 100%;animation:persona-ask-skeleton-shimmer 1.2s ease-in-out infinite}@keyframes persona-ask-skeleton-shimmer{0%{background-position:100% 50%}to{background-position:-100% 50%}}[data-persona-root] .persona-ask-row{align-items:stretch;justify-content:space-between;gap:.75rem;padding:.7rem .9rem}[data-persona-root] .persona-ask-row-content{display:flex;flex-direction:column;gap:.15rem;flex:1 1 auto;min-width:0}[data-persona-root] .persona-ask-row-label{font-size:.92rem;font-weight:600;line-height:1.25;color:inherit;white-space:normal;overflow-wrap:anywhere}[data-persona-root] .persona-ask-row-description{font-size:.82rem;font-weight:400;line-height:1.35;color:var(--persona-text-muted, #6b7280);white-space:normal;overflow-wrap:anywhere}[data-persona-root] .persona-ask-pill-selected .persona-ask-row-description,[data-persona-root] .persona-ask-pill[aria-pressed=true] .persona-ask-row-description{color:var(--persona-ask-pill-fg-selected, #fafafa);opacity:.85}[data-persona-root] .persona-ask-row-affordance{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;align-self:center}[data-persona-root] .persona-ask-row-badge{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:.4rem;border:1px solid var(--persona-border, #e5e7eb);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;font-weight:600;color:var(--persona-text-muted, #6b7280);background:transparent}[data-persona-root] .persona-ask-pill-selected .persona-ask-row-badge,[data-persona-root] .persona-ask-pill[aria-pressed=true] .persona-ask-row-badge{border-color:var(--persona-ask-pill-fg-selected, #fafafa);color:var(--persona-ask-pill-fg-selected, #fafafa)}[data-persona-root] .persona-ask-row-check{display:inline-flex;align-items:center;justify-content:center;width:1.4rem;height:1.4rem;border-radius:.35rem;border:1.5px solid var(--persona-border, #d1d5db);background:transparent;position:relative}[data-persona-root] .persona-ask-pill-selected .persona-ask-row-check,[data-persona-root] .persona-ask-pill[aria-pressed=true] .persona-ask-row-check{background:var(--persona-ask-pill-fg-selected, #fafafa);border-color:var(--persona-ask-pill-fg-selected, #fafafa)}[data-persona-root] .persona-ask-pill-selected .persona-ask-row-check:after,[data-persona-root] .persona-ask-pill[aria-pressed=true] .persona-ask-row-check:after{content:"";width:.45rem;height:.75rem;border-right:2px solid var(--persona-ask-pill-bg-selected, var(--persona-accent, #0f0f0f));border-bottom:2px solid var(--persona-ask-pill-bg-selected, var(--persona-accent, #0f0f0f));transform:rotate(45deg) translate(-1px,-1px)}[data-persona-root] .persona-ask-row.persona-ask-pill-skeleton{height:3rem}[data-persona-root] .persona-ask-row--other{cursor:text}[data-persona-root] .persona-ask-row-input{flex:1;min-width:0;border:none;background:transparent;padding:0;margin:0;font:inherit;font-size:.92rem;color:inherit;outline:none;width:100%}[data-persona-root] .persona-ask-row-input::placeholder{color:var(--persona-text-muted, #6b7280);opacity:1}[data-persona-root] .persona-ask-free-text{width:100%}[data-persona-root] .persona-ask-free-text--rows{margin-top:.4rem}[data-persona-root] .persona-ask-free-text-input{padding:.5rem .8rem;border:1px solid var(--persona-border, #e5e7eb);border-radius:.55rem;font-size:.88rem;background:var(--persona-ask-input-bg, var(--persona-surface, #ffffff));color:var(--persona-text, #1f2937)}[data-persona-root] .persona-ask-free-text-input:focus{outline:2px solid var(--persona-accent, #0f0f0f);outline-offset:1px}[data-persona-root] .persona-ask-free-text-submit,[data-persona-root] .persona-ask-multi-submit{padding:.5rem 1rem;border:none;border-radius:.55rem;background:var(--persona-accent, #0f0f0f);color:#fafafa;font-size:.85rem;font-weight:600;cursor:pointer;transition:opacity .15s ease}[data-persona-root] .persona-ask-free-text-submit:disabled,[data-persona-root] .persona-ask-multi-submit:disabled{opacity:.4;cursor:not-allowed}[data-persona-root] .persona-ask-nav-back,[data-persona-root] .persona-ask-nav-skip{padding:.45rem .85rem;border:1px solid transparent;border-radius:.55rem;background:transparent;color:var(--persona-text-muted, #6b7280);font-size:.85rem;font-weight:500;cursor:pointer;transition:background .15s ease,color .15s ease}[data-persona-root] .persona-ask-nav-back:hover:not(:disabled),[data-persona-root] .persona-ask-nav-skip:hover:not(:disabled){background:var(--persona-container, #f3f4f6);color:var(--persona-text, #1f2937)}[data-persona-root] .persona-ask-nav-back:disabled{opacity:.35;cursor:not-allowed}[data-persona-root] .persona-ask-nav-next{padding:.5rem 1rem;border:none;border-radius:.55rem;background:var(--persona-accent, #0f0f0f);color:#fafafa;font-size:.85rem;font-weight:600;cursor:pointer;transition:opacity .15s ease}[data-persona-root] .persona-ask-nav-next:disabled{opacity:.4;cursor:not-allowed}@media (prefers-reduced-motion: reduce){[data-persona-root] .persona-ask-sheet,[data-persona-root] .persona-ask-pill-skeleton,[data-persona-root] .persona-ask-question-skeleton{transition:none!important;animation:none!important}}.persona-widget-wrapper[data-persona-composer-bar]{display:flex;flex-direction:column;transition:max-width .22s ease,bottom .22s ease,top .22s ease,left .22s ease,right .22s ease,transform .22s ease,border-radius .22s ease,height .22s ease,width .22s ease}.persona-widget-wrapper[data-persona-composer-bar][data-expanded-size=modal],.persona-widget-wrapper[data-persona-composer-bar][data-expanded-size=anchored]{transition:none}.persona-pill-composer{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;padding:6px 14px;border-radius:9999px;background:var(--persona-surface, #ffffff);border:1px solid var(--persona-border, #e5e7eb);box-shadow:0 6px 24px #0f172a1a,0 1px 2px #0f172a0a}.persona-pill-composer .persona-composer-textarea{min-height:24px;width:100%;padding:4px 0}.persona-pill-composer__left,.persona-pill-composer__right{display:flex;align-items:center;gap:4px}.persona-widget-footer--pill{background:transparent;border-top:none;padding:0;display:flex;flex-direction:column;gap:8px}.persona-pill-composer__previews{padding:0 8px}[data-persona-composer-bar][data-state=collapsed] .persona-composer-overlay{display:none}.persona-widget-pill-root{position:fixed;bottom:16px;left:50%;transform:translate(-50%);width:90vw;max-width:calc(100vw - 32px);display:flex;flex-direction:column;gap:8px}@media (min-width: 640px){.persona-widget-pill-root{width:70vw}}@media (min-width: 1024px){.persona-widget-pill-root{width:50vw}}[data-persona-composer-bar][data-state=collapsed] .persona-widget-container{display:none}.persona-pill-peek{display:flex;align-items:center;gap:8px;padding:6px 14px;background:#ffffffc7;-webkit-backdrop-filter:blur(10px) saturate(1.5);backdrop-filter:blur(10px) saturate(1.5);border:1px solid rgba(0,0,0,.06);border-radius:9999px;box-shadow:0 2px 8px #0f172a0f;color:var(--persona-primary, #111827);font:inherit;font-size:13px;line-height:1.4;cursor:pointer;opacity:0;pointer-events:none;transform:translateY(2px);transition:opacity .15s ease,transform .15s ease,background-color .15s ease;text-align:left;width:100%;align-self:stretch}@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){.persona-pill-peek{background:#fffffff2}}.persona-pill-peek--visible{opacity:1;pointer-events:auto;transform:translateY(0)}.persona-pill-peek:hover{background:#ffffffeb}.persona-pill-peek__icon,.persona-pill-peek__caret{display:inline-flex;flex-shrink:0;color:currentColor}.persona-pill-peek__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto;min-width:0}[data-persona-root] .persona-pill-peek__text .persona-stream-char,[data-persona-root] .persona-pill-peek__text .persona-stream-word{vertical-align:baseline}[data-persona-root] .persona-pill-peek__text .persona-pill-peek__skeleton{display:inline-flex;vertical-align:middle;width:100%;max-width:200px;padding:0}[data-persona-root] .persona-pill-peek__text .persona-pill-peek__skeleton .persona-stream-skeleton-line{height:8px}.persona-widget-wrapper[data-persona-composer-bar][data-state=expanded][data-expanded-size=fullscreen]{inset:0;transform:none;max-width:none;width:100%;height:100%;border-radius:0}.persona-widget-wrapper[data-persona-composer-bar][data-expanded-size=fullscreen] .persona-widget-body{padding-bottom:0}.persona-widget-wrapper[data-persona-composer-bar][data-expanded-size=fullscreen] .persona-widget-body>:last-child{padding-bottom:calc(var(--persona-pill-bottom, 16px) + var(--persona-pill-area-height, 80px) + 16px)}@keyframes persona-composer-bar-fade-in{0%{opacity:0}to{opacity:1}}.persona-widget-wrapper[data-persona-composer-bar][data-state=expanded] .persona-widget-container{animation:persona-composer-bar-fade-in .22s ease both}.persona-widget-wrapper[data-persona-composer-bar][data-state=expanded] .persona-widget-body{animation:persona-composer-bar-fade-in .2s ease .22s both}@media (prefers-reduced-motion: reduce){.persona-widget-wrapper[data-persona-composer-bar]{transition:none!important}.persona-widget-wrapper[data-persona-composer-bar][data-state=expanded] .persona-widget-container,.persona-widget-wrapper[data-persona-composer-bar][data-state=expanded] .persona-widget-body{animation:none!important}}[data-persona-root] .persona-event-toolbar{container-type:inline-size}@container (max-width: 390px){[data-persona-root] .persona-event-copy-all{display:none}}