@rdmind/webui 0.2.4-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3592 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ *, ::before, ::after {
8
+ --tw-border-spacing-x: 0;
9
+ --tw-border-spacing-y: 0;
10
+ --tw-translate-x: 0;
11
+ --tw-translate-y: 0;
12
+ --tw-rotate: 0;
13
+ --tw-skew-x: 0;
14
+ --tw-skew-y: 0;
15
+ --tw-scale-x: 1;
16
+ --tw-scale-y: 1;
17
+ --tw-pan-x: ;
18
+ --tw-pan-y: ;
19
+ --tw-pinch-zoom: ;
20
+ --tw-scroll-snap-strictness: proximity;
21
+ --tw-gradient-from-position: ;
22
+ --tw-gradient-via-position: ;
23
+ --tw-gradient-to-position: ;
24
+ --tw-ordinal: ;
25
+ --tw-slashed-zero: ;
26
+ --tw-numeric-figure: ;
27
+ --tw-numeric-spacing: ;
28
+ --tw-numeric-fraction: ;
29
+ --tw-ring-inset: ;
30
+ --tw-ring-offset-width: 0px;
31
+ --tw-ring-offset-color: #fff;
32
+ --tw-ring-color: rgb(59 130 246 / 0.5);
33
+ --tw-ring-offset-shadow: 0 0 #0000;
34
+ --tw-ring-shadow: 0 0 #0000;
35
+ --tw-shadow: 0 0 #0000;
36
+ --tw-shadow-colored: 0 0 #0000;
37
+ --tw-blur: ;
38
+ --tw-brightness: ;
39
+ --tw-contrast: ;
40
+ --tw-grayscale: ;
41
+ --tw-hue-rotate: ;
42
+ --tw-invert: ;
43
+ --tw-saturate: ;
44
+ --tw-sepia: ;
45
+ --tw-drop-shadow: ;
46
+ --tw-backdrop-blur: ;
47
+ --tw-backdrop-brightness: ;
48
+ --tw-backdrop-contrast: ;
49
+ --tw-backdrop-grayscale: ;
50
+ --tw-backdrop-hue-rotate: ;
51
+ --tw-backdrop-invert: ;
52
+ --tw-backdrop-opacity: ;
53
+ --tw-backdrop-saturate: ;
54
+ --tw-backdrop-sepia: ;
55
+ --tw-contain-size: ;
56
+ --tw-contain-layout: ;
57
+ --tw-contain-paint: ;
58
+ --tw-contain-style: ;
59
+ }
60
+
61
+ ::backdrop {
62
+ --tw-border-spacing-x: 0;
63
+ --tw-border-spacing-y: 0;
64
+ --tw-translate-x: 0;
65
+ --tw-translate-y: 0;
66
+ --tw-rotate: 0;
67
+ --tw-skew-x: 0;
68
+ --tw-skew-y: 0;
69
+ --tw-scale-x: 1;
70
+ --tw-scale-y: 1;
71
+ --tw-pan-x: ;
72
+ --tw-pan-y: ;
73
+ --tw-pinch-zoom: ;
74
+ --tw-scroll-snap-strictness: proximity;
75
+ --tw-gradient-from-position: ;
76
+ --tw-gradient-via-position: ;
77
+ --tw-gradient-to-position: ;
78
+ --tw-ordinal: ;
79
+ --tw-slashed-zero: ;
80
+ --tw-numeric-figure: ;
81
+ --tw-numeric-spacing: ;
82
+ --tw-numeric-fraction: ;
83
+ --tw-ring-inset: ;
84
+ --tw-ring-offset-width: 0px;
85
+ --tw-ring-offset-color: #fff;
86
+ --tw-ring-color: rgb(59 130 246 / 0.5);
87
+ --tw-ring-offset-shadow: 0 0 #0000;
88
+ --tw-ring-shadow: 0 0 #0000;
89
+ --tw-shadow: 0 0 #0000;
90
+ --tw-shadow-colored: 0 0 #0000;
91
+ --tw-blur: ;
92
+ --tw-brightness: ;
93
+ --tw-contrast: ;
94
+ --tw-grayscale: ;
95
+ --tw-hue-rotate: ;
96
+ --tw-invert: ;
97
+ --tw-saturate: ;
98
+ --tw-sepia: ;
99
+ --tw-drop-shadow: ;
100
+ --tw-backdrop-blur: ;
101
+ --tw-backdrop-brightness: ;
102
+ --tw-backdrop-contrast: ;
103
+ --tw-backdrop-grayscale: ;
104
+ --tw-backdrop-hue-rotate: ;
105
+ --tw-backdrop-invert: ;
106
+ --tw-backdrop-opacity: ;
107
+ --tw-backdrop-saturate: ;
108
+ --tw-backdrop-sepia: ;
109
+ --tw-contain-size: ;
110
+ --tw-contain-layout: ;
111
+ --tw-contain-paint: ;
112
+ --tw-contain-style: ;
113
+ }
114
+
115
+ /*! tailwindcss v3.4.18 | MIT License | https://tailwindcss.com
116
+ */
117
+
118
+ /*
119
+ 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
120
+ 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
121
+ */
122
+
123
+ *,
124
+ ::before,
125
+ ::after {
126
+ box-sizing: border-box; /* 1 */
127
+ border-width: 0; /* 2 */
128
+ border-style: solid; /* 2 */
129
+ border-color: #e5e7eb; /* 2 */
130
+ }
131
+
132
+ ::before,
133
+ ::after {
134
+ --tw-content: '';
135
+ }
136
+
137
+ /*
138
+ 1. Use a consistent sensible line-height in all browsers.
139
+ 2. Prevent adjustments of font size after orientation changes in iOS.
140
+ 3. Use a more readable tab size.
141
+ 4. Use the user's configured `sans` font-family by default.
142
+ 5. Use the user's configured `sans` font-feature-settings by default.
143
+ 6. Use the user's configured `sans` font-variation-settings by default.
144
+ 7. Disable tap highlights on iOS
145
+ */
146
+
147
+ html,
148
+ :host {
149
+ line-height: 1.5; /* 1 */
150
+ -webkit-text-size-adjust: 100%; /* 2 */
151
+ -moz-tab-size: 4; /* 3 */
152
+ -o-tab-size: 4;
153
+ tab-size: 4; /* 3 */
154
+ font-family: var(--app-font-sans, system-ui, sans-serif); /* 4 */
155
+ font-feature-settings: normal; /* 5 */
156
+ font-variation-settings: normal; /* 6 */
157
+ -webkit-tap-highlight-color: transparent; /* 7 */
158
+ }
159
+
160
+ /*
161
+ 1. Remove the margin in all browsers.
162
+ 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
163
+ */
164
+
165
+ body {
166
+ margin: 0; /* 1 */
167
+ line-height: inherit; /* 2 */
168
+ }
169
+
170
+ /*
171
+ 1. Add the correct height in Firefox.
172
+ 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
173
+ 3. Ensure horizontal rules are visible by default.
174
+ */
175
+
176
+ hr {
177
+ height: 0; /* 1 */
178
+ color: inherit; /* 2 */
179
+ border-top-width: 1px; /* 3 */
180
+ }
181
+
182
+ /*
183
+ Add the correct text decoration in Chrome, Edge, and Safari.
184
+ */
185
+
186
+ abbr:where([title]) {
187
+ -webkit-text-decoration: underline dotted;
188
+ text-decoration: underline dotted;
189
+ }
190
+
191
+ /*
192
+ Remove the default font size and weight for headings.
193
+ */
194
+
195
+ h1,
196
+ h2,
197
+ h3,
198
+ h4,
199
+ h5,
200
+ h6 {
201
+ font-size: inherit;
202
+ font-weight: inherit;
203
+ }
204
+
205
+ /*
206
+ Reset links to optimize for opt-in styling instead of opt-out.
207
+ */
208
+
209
+ a {
210
+ color: inherit;
211
+ text-decoration: inherit;
212
+ }
213
+
214
+ /*
215
+ Add the correct font weight in Edge and Safari.
216
+ */
217
+
218
+ b,
219
+ strong {
220
+ font-weight: bolder;
221
+ }
222
+
223
+ /*
224
+ 1. Use the user's configured `mono` font-family by default.
225
+ 2. Use the user's configured `mono` font-feature-settings by default.
226
+ 3. Use the user's configured `mono` font-variation-settings by default.
227
+ 4. Correct the odd `em` font sizing in all browsers.
228
+ */
229
+
230
+ code,
231
+ kbd,
232
+ samp,
233
+ pre {
234
+ font-family: var(--app-font-mono, ui-monospace, monospace); /* 1 */
235
+ font-feature-settings: normal; /* 2 */
236
+ font-variation-settings: normal; /* 3 */
237
+ font-size: 1em; /* 4 */
238
+ }
239
+
240
+ /*
241
+ Add the correct font size in all browsers.
242
+ */
243
+
244
+ small {
245
+ font-size: 80%;
246
+ }
247
+
248
+ /*
249
+ Prevent `sub` and `sup` elements from affecting the line height in all browsers.
250
+ */
251
+
252
+ sub,
253
+ sup {
254
+ font-size: 75%;
255
+ line-height: 0;
256
+ position: relative;
257
+ vertical-align: baseline;
258
+ }
259
+
260
+ sub {
261
+ bottom: -0.25em;
262
+ }
263
+
264
+ sup {
265
+ top: -0.5em;
266
+ }
267
+
268
+ /*
269
+ 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
270
+ 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
271
+ 3. Remove gaps between table borders by default.
272
+ */
273
+
274
+ table {
275
+ text-indent: 0; /* 1 */
276
+ border-color: inherit; /* 2 */
277
+ border-collapse: collapse; /* 3 */
278
+ }
279
+
280
+ /*
281
+ 1. Change the font styles in all browsers.
282
+ 2. Remove the margin in Firefox and Safari.
283
+ 3. Remove default padding in all browsers.
284
+ */
285
+
286
+ button,
287
+ input,
288
+ optgroup,
289
+ select,
290
+ textarea {
291
+ font-family: inherit; /* 1 */
292
+ font-feature-settings: inherit; /* 1 */
293
+ font-variation-settings: inherit; /* 1 */
294
+ font-size: 100%; /* 1 */
295
+ font-weight: inherit; /* 1 */
296
+ line-height: inherit; /* 1 */
297
+ letter-spacing: inherit; /* 1 */
298
+ color: inherit; /* 1 */
299
+ margin: 0; /* 2 */
300
+ padding: 0; /* 3 */
301
+ }
302
+
303
+ /*
304
+ Remove the inheritance of text transform in Edge and Firefox.
305
+ */
306
+
307
+ button,
308
+ select {
309
+ text-transform: none;
310
+ }
311
+
312
+ /*
313
+ 1. Correct the inability to style clickable types in iOS and Safari.
314
+ 2. Remove default button styles.
315
+ */
316
+
317
+ button,
318
+ input:where([type='button']),
319
+ input:where([type='reset']),
320
+ input:where([type='submit']) {
321
+ -webkit-appearance: button; /* 1 */
322
+ background-color: transparent; /* 2 */
323
+ background-image: none; /* 2 */
324
+ }
325
+
326
+ /*
327
+ Use the modern Firefox focus style for all focusable elements.
328
+ */
329
+
330
+ :-moz-focusring {
331
+ outline: auto;
332
+ }
333
+
334
+ /*
335
+ Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
336
+ */
337
+
338
+ :-moz-ui-invalid {
339
+ box-shadow: none;
340
+ }
341
+
342
+ /*
343
+ Add the correct vertical alignment in Chrome and Firefox.
344
+ */
345
+
346
+ progress {
347
+ vertical-align: baseline;
348
+ }
349
+
350
+ /*
351
+ Correct the cursor style of increment and decrement buttons in Safari.
352
+ */
353
+
354
+ ::-webkit-inner-spin-button,
355
+ ::-webkit-outer-spin-button {
356
+ height: auto;
357
+ }
358
+
359
+ /*
360
+ 1. Correct the odd appearance in Chrome and Safari.
361
+ 2. Correct the outline style in Safari.
362
+ */
363
+
364
+ [type='search'] {
365
+ -webkit-appearance: textfield; /* 1 */
366
+ outline-offset: -2px; /* 2 */
367
+ }
368
+
369
+ /*
370
+ Remove the inner padding in Chrome and Safari on macOS.
371
+ */
372
+
373
+ ::-webkit-search-decoration {
374
+ -webkit-appearance: none;
375
+ }
376
+
377
+ /*
378
+ 1. Correct the inability to style clickable types in iOS and Safari.
379
+ 2. Change font properties to `inherit` in Safari.
380
+ */
381
+
382
+ ::-webkit-file-upload-button {
383
+ -webkit-appearance: button; /* 1 */
384
+ font: inherit; /* 2 */
385
+ }
386
+
387
+ /*
388
+ Add the correct display in Chrome and Safari.
389
+ */
390
+
391
+ summary {
392
+ display: list-item;
393
+ }
394
+
395
+ /*
396
+ Removes the default spacing and border for appropriate elements.
397
+ */
398
+
399
+ blockquote,
400
+ dl,
401
+ dd,
402
+ h1,
403
+ h2,
404
+ h3,
405
+ h4,
406
+ h5,
407
+ h6,
408
+ hr,
409
+ figure,
410
+ p,
411
+ pre {
412
+ margin: 0;
413
+ }
414
+
415
+ fieldset {
416
+ margin: 0;
417
+ padding: 0;
418
+ }
419
+
420
+ legend {
421
+ padding: 0;
422
+ }
423
+
424
+ ol,
425
+ ul,
426
+ menu {
427
+ list-style: none;
428
+ margin: 0;
429
+ padding: 0;
430
+ }
431
+
432
+ /*
433
+ Reset default styling for dialogs.
434
+ */
435
+
436
+ dialog {
437
+ padding: 0;
438
+ }
439
+
440
+ /*
441
+ Prevent resizing textareas horizontally by default.
442
+ */
443
+
444
+ textarea {
445
+ resize: vertical;
446
+ }
447
+
448
+ /*
449
+ 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
450
+ 2. Set the default placeholder color to the user's configured gray 400 color.
451
+ */
452
+
453
+ input::-moz-placeholder, textarea::-moz-placeholder {
454
+ opacity: 1; /* 1 */
455
+ color: #9ca3af; /* 2 */
456
+ }
457
+
458
+ input::placeholder,
459
+ textarea::placeholder {
460
+ opacity: 1; /* 1 */
461
+ color: #9ca3af; /* 2 */
462
+ }
463
+
464
+ /*
465
+ Set the default cursor for buttons.
466
+ */
467
+
468
+ button,
469
+ [role="button"] {
470
+ cursor: pointer;
471
+ }
472
+
473
+ /*
474
+ Make sure disabled buttons don't get the pointer cursor.
475
+ */
476
+
477
+ :disabled {
478
+ cursor: default;
479
+ }
480
+
481
+ /*
482
+ 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
483
+ 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
484
+ This can trigger a poorly considered lint error in some tools but is included by design.
485
+ */
486
+
487
+ img,
488
+ svg,
489
+ video,
490
+ canvas,
491
+ audio,
492
+ iframe,
493
+ embed,
494
+ object {
495
+ display: block; /* 1 */
496
+ vertical-align: middle; /* 2 */
497
+ }
498
+
499
+ /*
500
+ Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
501
+ */
502
+
503
+ img,
504
+ video {
505
+ max-width: 100%;
506
+ height: auto;
507
+ }
508
+
509
+ /* Make elements with the HTML hidden attribute stay hidden by default */
510
+
511
+ [hidden]:where(:not([hidden="until-found"])) {
512
+ display: none;
513
+ }
514
+ .container {
515
+ width: 100%;
516
+ }
517
+ @media (min-width: 640px) {
518
+
519
+ .container {
520
+ max-width: 640px;
521
+ }
522
+ }
523
+ @media (min-width: 768px) {
524
+
525
+ .container {
526
+ max-width: 768px;
527
+ }
528
+ }
529
+ @media (min-width: 1024px) {
530
+
531
+ .container {
532
+ max-width: 1024px;
533
+ }
534
+ }
535
+ @media (min-width: 1280px) {
536
+
537
+ .container {
538
+ max-width: 1280px;
539
+ }
540
+ }
541
+ @media (min-width: 1536px) {
542
+
543
+ .container {
544
+ max-width: 1536px;
545
+ }
546
+ }
547
+ .pointer-events-none {
548
+ pointer-events: none;
549
+ }
550
+ .\!visible {
551
+ visibility: visible !important;
552
+ }
553
+ .visible {
554
+ visibility: visible;
555
+ }
556
+ .invisible {
557
+ visibility: hidden;
558
+ }
559
+ .static {
560
+ position: static;
561
+ }
562
+ .fixed {
563
+ position: fixed;
564
+ }
565
+ .absolute {
566
+ position: absolute;
567
+ }
568
+ .relative {
569
+ position: relative;
570
+ }
571
+ .inset-0 {
572
+ inset: 0px;
573
+ }
574
+ .inset-x-0 {
575
+ left: 0px;
576
+ right: 0px;
577
+ }
578
+ .-top-7 {
579
+ top: -1.75rem;
580
+ }
581
+ .bottom-0 {
582
+ bottom: 0px;
583
+ }
584
+ .bottom-full {
585
+ bottom: 100%;
586
+ }
587
+ .left-0 {
588
+ left: 0px;
589
+ }
590
+ .left-1\/2 {
591
+ left: 50%;
592
+ }
593
+ .left-3 {
594
+ left: 0.75rem;
595
+ }
596
+ .left-\[3px\] {
597
+ left: 3px;
598
+ }
599
+ .left-full {
600
+ left: 100%;
601
+ }
602
+ .right-0 {
603
+ right: 0px;
604
+ }
605
+ .right-3 {
606
+ right: 0.75rem;
607
+ }
608
+ .right-full {
609
+ right: 100%;
610
+ }
611
+ .top-0 {
612
+ top: 0px;
613
+ }
614
+ .top-1\/2 {
615
+ top: 50%;
616
+ }
617
+ .top-\[-0\.1em\] {
618
+ top: -0.1em;
619
+ }
620
+ .top-\[10px\] {
621
+ top: 10px;
622
+ }
623
+ .top-\[3px\] {
624
+ top: 3px;
625
+ }
626
+ .top-full {
627
+ top: 100%;
628
+ }
629
+ .z-50 {
630
+ z-index: 50;
631
+ }
632
+ .z-\[1000\] {
633
+ z-index: 1000;
634
+ }
635
+ .z-\[1\] {
636
+ z-index: 1;
637
+ }
638
+ .z-\[999\] {
639
+ z-index: 999;
640
+ }
641
+ .col-start-3 {
642
+ grid-column-start: 3;
643
+ }
644
+ .m-0 {
645
+ margin: 0px;
646
+ }
647
+ .m-\[2px\] {
648
+ margin: 2px;
649
+ }
650
+ .mx-1 {
651
+ margin-left: 0.25rem;
652
+ margin-right: 0.25rem;
653
+ }
654
+ .mx-auto {
655
+ margin-left: auto;
656
+ margin-right: auto;
657
+ }
658
+ .my-1 {
659
+ margin-top: 0.25rem;
660
+ margin-bottom: 0.25rem;
661
+ }
662
+ .my-2 {
663
+ margin-top: 0.5rem;
664
+ margin-bottom: 0.5rem;
665
+ }
666
+ .mb-0\.5 {
667
+ margin-bottom: 0.125rem;
668
+ }
669
+ .mb-1 {
670
+ margin-bottom: 0.25rem;
671
+ }
672
+ .mb-2 {
673
+ margin-bottom: 0.5rem;
674
+ }
675
+ .mb-4 {
676
+ margin-bottom: 1rem;
677
+ }
678
+ .mb-\[2px\] {
679
+ margin-bottom: 2px;
680
+ }
681
+ .ml-3 {
682
+ margin-left: 0.75rem;
683
+ }
684
+ .ml-4 {
685
+ margin-left: 1rem;
686
+ }
687
+ .ml-auto {
688
+ margin-left: auto;
689
+ }
690
+ .mr-1\.5 {
691
+ margin-right: 0.375rem;
692
+ }
693
+ .mt-1 {
694
+ margin-top: 0.25rem;
695
+ }
696
+ .mt-\[2px\] {
697
+ margin-top: 2px;
698
+ }
699
+ .box-border {
700
+ box-sizing: border-box;
701
+ }
702
+ .block {
703
+ display: block;
704
+ }
705
+ .inline-block {
706
+ display: inline-block;
707
+ }
708
+ .inline {
709
+ display: inline;
710
+ }
711
+ .flex {
712
+ display: flex;
713
+ }
714
+ .inline-flex {
715
+ display: inline-flex;
716
+ }
717
+ .grid {
718
+ display: grid;
719
+ }
720
+ .hidden {
721
+ display: none;
722
+ }
723
+ .h-1 {
724
+ height: 0.25rem;
725
+ }
726
+ .h-1\.5 {
727
+ height: 0.375rem;
728
+ }
729
+ .h-2 {
730
+ height: 0.5rem;
731
+ }
732
+ .h-4 {
733
+ height: 1rem;
734
+ }
735
+ .h-5 {
736
+ height: 1.25rem;
737
+ }
738
+ .h-\[60px\] {
739
+ height: 60px;
740
+ }
741
+ .h-\[80px\] {
742
+ height: 80px;
743
+ }
744
+ .h-full {
745
+ height: 100%;
746
+ }
747
+ .max-h-\[100px\] {
748
+ max-height: 100px;
749
+ }
750
+ .max-h-\[300px\] {
751
+ max-height: 300px;
752
+ }
753
+ .max-h-\[50vh\] {
754
+ max-height: 50vh;
755
+ }
756
+ .max-h-\[min\(500px\2c 50vh\)\] {
757
+ max-height: min(500px,50vh);
758
+ }
759
+ .min-h-0 {
760
+ min-height: 0px;
761
+ }
762
+ .w-1\.5 {
763
+ width: 0.375rem;
764
+ }
765
+ .w-2 {
766
+ width: 0.5rem;
767
+ }
768
+ .w-2\.5 {
769
+ width: 0.625rem;
770
+ }
771
+ .w-4 {
772
+ width: 1rem;
773
+ }
774
+ .w-\[60px\] {
775
+ width: 60px;
776
+ }
777
+ .w-\[80px\] {
778
+ width: 80px;
779
+ }
780
+ .w-\[min\(400px\2c calc\(100vw-32px\)\)\] {
781
+ width: min(400px,calc(100vw - 32px));
782
+ }
783
+ .w-full {
784
+ width: 100%;
785
+ }
786
+ .min-w-0 {
787
+ min-width: 0px;
788
+ }
789
+ .min-w-\[10px\] {
790
+ min-width: 10px;
791
+ }
792
+ .max-w-\[300px\] {
793
+ max-width: 300px;
794
+ }
795
+ .max-w-\[400px\] {
796
+ max-width: 400px;
797
+ }
798
+ .max-w-\[50\%\] {
799
+ max-width: 50%;
800
+ }
801
+ .max-w-full {
802
+ max-width: 100%;
803
+ }
804
+ .max-w-md {
805
+ max-width: 28rem;
806
+ }
807
+ .max-w-sm {
808
+ max-width: 24rem;
809
+ }
810
+ .max-w-xs {
811
+ max-width: 20rem;
812
+ }
813
+ .flex-1 {
814
+ flex: 1 1 0%;
815
+ }
816
+ .flex-shrink-0 {
817
+ flex-shrink: 0;
818
+ }
819
+ .shrink-0 {
820
+ flex-shrink: 0;
821
+ }
822
+ .-translate-x-1\/2 {
823
+ --tw-translate-x: -50%;
824
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
825
+ }
826
+ .-translate-x-full {
827
+ --tw-translate-x: -100%;
828
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
829
+ }
830
+ .-translate-y-1 {
831
+ --tw-translate-y: -0.25rem;
832
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
833
+ }
834
+ .-translate-y-1\/2 {
835
+ --tw-translate-y: -50%;
836
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
837
+ }
838
+ .translate-x-0 {
839
+ --tw-translate-x: 0px;
840
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
841
+ }
842
+ .translate-x-1\/2 {
843
+ --tw-translate-x: 50%;
844
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
845
+ }
846
+ .translate-y-1 {
847
+ --tw-translate-y: 0.25rem;
848
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
849
+ }
850
+ .translate-y-1\/2 {
851
+ --tw-translate-y: 50%;
852
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
853
+ }
854
+ .translate-y-\[-50\%\] {
855
+ --tw-translate-y: -50%;
856
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
857
+ }
858
+ .-rotate-45 {
859
+ --tw-rotate: -45deg;
860
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
861
+ }
862
+ .transform {
863
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
864
+ }
865
+ .animate-\[fadeIn_0\.2s_ease-in\] {
866
+ animation: fadeIn 0.2s ease-in;
867
+ }
868
+ @keyframes completion-menu-enter {
869
+
870
+ 0% {
871
+ opacity: 0;
872
+ transform: translateY(4px);
873
+ }
874
+
875
+ 100% {
876
+ opacity: 1;
877
+ transform: translateY(0);
878
+ }
879
+ }
880
+ .animate-completion-menu-enter {
881
+ animation: completion-menu-enter 150ms ease-out both;
882
+ }
883
+ @keyframes slide-up {
884
+
885
+ 0% {
886
+ transform: translateY(100%);
887
+ opacity: 0;
888
+ }
889
+
890
+ 100% {
891
+ transform: translateY(0);
892
+ opacity: 1;
893
+ }
894
+ }
895
+ .animate-slide-up {
896
+ animation: slide-up 200ms ease-out both;
897
+ }
898
+ @keyframes spin {
899
+
900
+ to {
901
+ transform: rotate(360deg);
902
+ }
903
+ }
904
+ .animate-spin {
905
+ animation: spin 1s linear infinite;
906
+ }
907
+ .cursor-default {
908
+ cursor: default;
909
+ }
910
+ .cursor-not-allowed {
911
+ cursor: not-allowed;
912
+ }
913
+ .cursor-pointer {
914
+ cursor: pointer;
915
+ }
916
+ .select-none {
917
+ -webkit-user-select: none;
918
+ -moz-user-select: none;
919
+ user-select: none;
920
+ }
921
+ .select-text {
922
+ -webkit-user-select: text;
923
+ -moz-user-select: text;
924
+ user-select: text;
925
+ }
926
+ .resize {
927
+ resize: both;
928
+ }
929
+ .list-none {
930
+ list-style-type: none;
931
+ }
932
+ .appearance-none {
933
+ -webkit-appearance: none;
934
+ -moz-appearance: none;
935
+ appearance: none;
936
+ }
937
+ .grid-cols-\[80px_1fr\] {
938
+ grid-template-columns: 80px 1fr;
939
+ }
940
+ .grid-cols-\[auto_1fr\] {
941
+ grid-template-columns: auto 1fr;
942
+ }
943
+ .grid-cols-\[max-content_1fr\] {
944
+ grid-template-columns: max-content 1fr;
945
+ }
946
+ .flex-row {
947
+ flex-direction: row;
948
+ }
949
+ .flex-col {
950
+ flex-direction: column;
951
+ }
952
+ .items-start {
953
+ align-items: flex-start;
954
+ }
955
+ .items-center {
956
+ align-items: center;
957
+ }
958
+ .items-baseline {
959
+ align-items: baseline;
960
+ }
961
+ .justify-start {
962
+ justify-content: flex-start;
963
+ }
964
+ .justify-end {
965
+ justify-content: flex-end;
966
+ }
967
+ .justify-center {
968
+ justify-content: center;
969
+ }
970
+ .justify-between {
971
+ justify-content: space-between;
972
+ }
973
+ .gap-0 {
974
+ gap: 0px;
975
+ }
976
+ .gap-1 {
977
+ gap: 0.25rem;
978
+ }
979
+ .gap-1\.5 {
980
+ gap: 0.375rem;
981
+ }
982
+ .gap-2 {
983
+ gap: 0.5rem;
984
+ }
985
+ .gap-3 {
986
+ gap: 0.75rem;
987
+ }
988
+ .gap-6 {
989
+ gap: 1.5rem;
990
+ }
991
+ .gap-8 {
992
+ gap: 2rem;
993
+ }
994
+ .gap-\[2px\] {
995
+ gap: 2px;
996
+ }
997
+ .gap-\[3px\] {
998
+ gap: 3px;
999
+ }
1000
+ .gap-\[var\(--app-list-gap\)\] {
1001
+ gap: var(--app-list-gap);
1002
+ }
1003
+ .overflow-hidden {
1004
+ overflow: hidden;
1005
+ }
1006
+ .overflow-x-auto {
1007
+ overflow-x: auto;
1008
+ }
1009
+ .overflow-y-auto {
1010
+ overflow-y: auto;
1011
+ }
1012
+ .overflow-y-hidden {
1013
+ overflow-y: hidden;
1014
+ }
1015
+ .truncate {
1016
+ overflow: hidden;
1017
+ text-overflow: ellipsis;
1018
+ white-space: nowrap;
1019
+ }
1020
+ .text-ellipsis {
1021
+ text-overflow: ellipsis;
1022
+ }
1023
+ .whitespace-normal {
1024
+ white-space: normal;
1025
+ }
1026
+ .whitespace-nowrap {
1027
+ white-space: nowrap;
1028
+ }
1029
+ .whitespace-pre-wrap {
1030
+ white-space: pre-wrap;
1031
+ }
1032
+ .break-words {
1033
+ overflow-wrap: break-word;
1034
+ }
1035
+ .break-all {
1036
+ word-break: break-all;
1037
+ }
1038
+ .rounded {
1039
+ border-radius: 0.25rem;
1040
+ }
1041
+ .rounded-\[2px\] {
1042
+ border-radius: 2px;
1043
+ }
1044
+ .rounded-\[4px\] {
1045
+ border-radius: 4px;
1046
+ }
1047
+ .rounded-\[5px\] {
1048
+ border-radius: 5px;
1049
+ }
1050
+ .rounded-\[var\(--app-list-border-radius\)\] {
1051
+ border-radius: var(--app-list-border-radius);
1052
+ }
1053
+ .rounded-\[var\(--corner-radius-small\)\] {
1054
+ border-radius: var(--corner-radius-small);
1055
+ }
1056
+ .rounded-full {
1057
+ border-radius: 9999px;
1058
+ }
1059
+ .rounded-lg {
1060
+ border-radius: 0.5rem;
1061
+ }
1062
+ .rounded-md {
1063
+ border-radius: 0.375rem;
1064
+ }
1065
+ .rounded-sm {
1066
+ border-radius: 0.125rem;
1067
+ }
1068
+ .border {
1069
+ border-width: 1px;
1070
+ }
1071
+ .border-0 {
1072
+ border-width: 0px;
1073
+ }
1074
+ .border-\[0\.5px\] {
1075
+ border-width: 0.5px;
1076
+ }
1077
+ .border-b {
1078
+ border-bottom-width: 1px;
1079
+ }
1080
+ .border-b-2 {
1081
+ border-bottom-width: 2px;
1082
+ }
1083
+ .border-l {
1084
+ border-left-width: 1px;
1085
+ }
1086
+ .border-l-2 {
1087
+ border-left-width: 2px;
1088
+ }
1089
+ .border-t {
1090
+ border-top-width: 1px;
1091
+ }
1092
+ .border-none {
1093
+ border-style: none;
1094
+ }
1095
+ .border-\[\#74c991\] {
1096
+ --tw-border-opacity: 1;
1097
+ border-color: rgb(116 201 145 / var(--tw-border-opacity, 1));
1098
+ }
1099
+ .border-\[var\(--app-input-border\)\] {
1100
+ border-color: var(--app-input-border);
1101
+ }
1102
+ .border-\[var\(--app-input-border\2c \#374151\)\] {
1103
+ border-color: var(--app-input-border,#374151);
1104
+ }
1105
+ .border-\[var\(--app-primary-border-color\)\] {
1106
+ border-color: var(--app-primary-border-color);
1107
+ }
1108
+ .border-gray-300 {
1109
+ --tw-border-opacity: 1;
1110
+ border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));
1111
+ }
1112
+ .border-red-500 {
1113
+ --tw-border-opacity: 1;
1114
+ border-color: rgb(239 68 68 / var(--tw-border-opacity, 1));
1115
+ }
1116
+ .bg-\[\#2196f3\] {
1117
+ --tw-bg-opacity: 1;
1118
+ background-color: rgb(33 150 243 / var(--tw-bg-opacity, 1));
1119
+ }
1120
+ .bg-\[\#4caf50\] {
1121
+ --tw-bg-opacity: 1;
1122
+ background-color: rgb(76 175 80 / var(--tw-bg-opacity, 1));
1123
+ }
1124
+ .bg-\[\#f44336\] {
1125
+ --tw-bg-opacity: 1;
1126
+ background-color: rgb(244 67 54 / var(--tw-bg-opacity, 1));
1127
+ }
1128
+ .bg-\[\#ffc107\] {
1129
+ --tw-bg-opacity: 1;
1130
+ background-color: rgb(255 193 7 / var(--tw-bg-opacity, 1));
1131
+ }
1132
+ .bg-\[var\(--app-background\)\] {
1133
+ background-color: var(--app-background);
1134
+ }
1135
+ .bg-\[var\(--app-header-background\)\] {
1136
+ background-color: var(--app-header-background);
1137
+ }
1138
+ .bg-\[var\(--app-input-background\)\] {
1139
+ background-color: var(--app-input-background);
1140
+ }
1141
+ .bg-\[var\(--app-list-active-background\)\] {
1142
+ background-color: var(--app-list-active-background);
1143
+ }
1144
+ .bg-\[var\(--app-menu-background\)\] {
1145
+ background-color: var(--app-menu-background);
1146
+ }
1147
+ .bg-\[var\(--app-primary\2c var\(--app-button-background\)\)\] {
1148
+ background-color: var(--app-primary,var(--app-button-background));
1149
+ }
1150
+ .bg-\[var\(--app-primary-background\)\] {
1151
+ background-color: var(--app-primary-background);
1152
+ }
1153
+ .bg-\[var\(--app-primary-background\2c \#1f2937\)\] {
1154
+ background-color: var(--app-primary-background,#1f2937);
1155
+ }
1156
+ .bg-\[var\(--app-tool-background\)\] {
1157
+ background-color: var(--app-tool-background);
1158
+ }
1159
+ .bg-blue-500 {
1160
+ --tw-bg-opacity: 1;
1161
+ background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));
1162
+ }
1163
+ .bg-blue-600 {
1164
+ --tw-bg-opacity: 1;
1165
+ background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));
1166
+ }
1167
+ .bg-gray-100 {
1168
+ --tw-bg-opacity: 1;
1169
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
1170
+ }
1171
+ .bg-gray-200 {
1172
+ --tw-bg-opacity: 1;
1173
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));
1174
+ }
1175
+ .bg-gray-500 {
1176
+ --tw-bg-opacity: 1;
1177
+ background-color: rgb(107 114 128 / var(--tw-bg-opacity, 1));
1178
+ }
1179
+ .bg-red-600 {
1180
+ --tw-bg-opacity: 1;
1181
+ background-color: rgb(220 38 38 / var(--tw-bg-opacity, 1));
1182
+ }
1183
+ .bg-transparent {
1184
+ background-color: transparent;
1185
+ }
1186
+ .bg-white {
1187
+ --tw-bg-opacity: 1;
1188
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
1189
+ }
1190
+ .bg-gradient-to-b {
1191
+ background-image: linear-gradient(to bottom, var(--tw-gradient-stops));
1192
+ }
1193
+ .from-transparent {
1194
+ --tw-gradient-from: transparent var(--tw-gradient-from-position);
1195
+ --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);
1196
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
1197
+ }
1198
+ .to-\[var\(--app-primary-background\)\] {
1199
+ --tw-gradient-to: var(--app-primary-background) var(--tw-gradient-to-position);
1200
+ }
1201
+ .object-contain {
1202
+ -o-object-fit: contain;
1203
+ object-fit: contain;
1204
+ }
1205
+ .p-0 {
1206
+ padding: 0px;
1207
+ }
1208
+ .p-1 {
1209
+ padding: 0.25rem;
1210
+ }
1211
+ .p-2 {
1212
+ padding: 0.5rem;
1213
+ }
1214
+ .p-3 {
1215
+ padding: 0.75rem;
1216
+ }
1217
+ .p-4 {
1218
+ padding: 1rem;
1219
+ }
1220
+ .p-5 {
1221
+ padding: 1.25rem;
1222
+ }
1223
+ .p-\[var\(--app-list-item-padding\)\] {
1224
+ padding: var(--app-list-item-padding);
1225
+ }
1226
+ .p-\[var\(--app-list-padding\)\] {
1227
+ padding: var(--app-list-padding);
1228
+ }
1229
+ .px-2 {
1230
+ padding-left: 0.5rem;
1231
+ padding-right: 0.5rem;
1232
+ }
1233
+ .px-2\.5 {
1234
+ padding-left: 0.625rem;
1235
+ padding-right: 0.625rem;
1236
+ }
1237
+ .px-3 {
1238
+ padding-left: 0.75rem;
1239
+ padding-right: 0.75rem;
1240
+ }
1241
+ .px-4 {
1242
+ padding-left: 1rem;
1243
+ padding-right: 1rem;
1244
+ }
1245
+ .px-6 {
1246
+ padding-left: 1.5rem;
1247
+ padding-right: 1.5rem;
1248
+ }
1249
+ .py-0 {
1250
+ padding-top: 0px;
1251
+ padding-bottom: 0px;
1252
+ }
1253
+ .py-0\.5 {
1254
+ padding-top: 0.125rem;
1255
+ padding-bottom: 0.125rem;
1256
+ }
1257
+ .py-1 {
1258
+ padding-top: 0.25rem;
1259
+ padding-bottom: 0.25rem;
1260
+ }
1261
+ .py-1\.5 {
1262
+ padding-top: 0.375rem;
1263
+ padding-bottom: 0.375rem;
1264
+ }
1265
+ .py-2 {
1266
+ padding-top: 0.5rem;
1267
+ padding-bottom: 0.5rem;
1268
+ }
1269
+ .py-3 {
1270
+ padding-top: 0.75rem;
1271
+ padding-bottom: 0.75rem;
1272
+ }
1273
+ .pb-1 {
1274
+ padding-bottom: 0.25rem;
1275
+ }
1276
+ .pb-2 {
1277
+ padding-bottom: 0.5rem;
1278
+ }
1279
+ .pb-4 {
1280
+ padding-bottom: 1rem;
1281
+ }
1282
+ .pl-1 {
1283
+ padding-left: 0.25rem;
1284
+ }
1285
+ .pl-10 {
1286
+ padding-left: 2.5rem;
1287
+ }
1288
+ .pl-\[30px\] {
1289
+ padding-left: 30px;
1290
+ }
1291
+ .pr-10 {
1292
+ padding-right: 2.5rem;
1293
+ }
1294
+ .pr-2 {
1295
+ padding-right: 0.5rem;
1296
+ }
1297
+ .pt-1 {
1298
+ padding-top: 0.25rem;
1299
+ }
1300
+ .pt-\[2px\] {
1301
+ padding-top: 2px;
1302
+ }
1303
+ .text-left {
1304
+ text-align: left;
1305
+ }
1306
+ .text-center {
1307
+ text-align: center;
1308
+ }
1309
+ .align-middle {
1310
+ vertical-align: middle;
1311
+ }
1312
+ .font-mono {
1313
+ font-family: var(--app-font-mono, ui-monospace, monospace);
1314
+ }
1315
+ .text-2xl {
1316
+ font-size: 1.5rem;
1317
+ line-height: 2rem;
1318
+ }
1319
+ .text-\[0\.75em\] {
1320
+ font-size: 0.75em;
1321
+ }
1322
+ .text-\[0\.85em\] {
1323
+ font-size: 0.85em;
1324
+ }
1325
+ .text-\[0\.8em\] {
1326
+ font-size: 0.8em;
1327
+ }
1328
+ .text-\[0\.9em\] {
1329
+ font-size: 0.9em;
1330
+ }
1331
+ .text-\[1\.1em\] {
1332
+ font-size: 1.1em;
1333
+ }
1334
+ .text-\[11px\] {
1335
+ font-size: 11px;
1336
+ }
1337
+ .text-\[13px\] {
1338
+ font-size: 13px;
1339
+ }
1340
+ .text-\[14px\] {
1341
+ font-size: 14px;
1342
+ }
1343
+ .text-\[15px\] {
1344
+ font-size: 15px;
1345
+ }
1346
+ .text-\[16px\] {
1347
+ font-size: 16px;
1348
+ }
1349
+ .text-\[1em\] {
1350
+ font-size: 1em;
1351
+ }
1352
+ .text-\[8px\] {
1353
+ font-size: 8px;
1354
+ }
1355
+ .text-lg {
1356
+ font-size: 1.125rem;
1357
+ line-height: 1.75rem;
1358
+ }
1359
+ .text-sm {
1360
+ font-size: 0.875rem;
1361
+ line-height: 1.25rem;
1362
+ }
1363
+ .text-xs {
1364
+ font-size: 0.75rem;
1365
+ line-height: 1rem;
1366
+ }
1367
+ .font-\[600\] {
1368
+ font-weight: 600;
1369
+ }
1370
+ .font-\[var\(--vscode-chat-font-family\)\] {
1371
+ font-weight: var(--vscode-chat-font-family);
1372
+ }
1373
+ .font-bold {
1374
+ font-weight: 700;
1375
+ }
1376
+ .font-medium {
1377
+ font-weight: 500;
1378
+ }
1379
+ .font-normal {
1380
+ font-weight: 400;
1381
+ }
1382
+ .font-semibold {
1383
+ font-weight: 600;
1384
+ }
1385
+ .uppercase {
1386
+ text-transform: uppercase;
1387
+ }
1388
+ .italic {
1389
+ font-style: italic;
1390
+ }
1391
+ .leading-\[1\.5\] {
1392
+ line-height: 1.5;
1393
+ }
1394
+ .leading-none {
1395
+ line-height: 1;
1396
+ }
1397
+ .leading-normal {
1398
+ line-height: 1.5;
1399
+ }
1400
+ .leading-relaxed {
1401
+ line-height: 1.625;
1402
+ }
1403
+ .tracking-wider {
1404
+ letter-spacing: 0.05em;
1405
+ }
1406
+ .text-\[\#c74e39\] {
1407
+ --tw-text-opacity: 1;
1408
+ color: rgb(199 78 57 / var(--tw-text-opacity, 1));
1409
+ }
1410
+ .text-\[\#e1c08d\] {
1411
+ --tw-text-opacity: 1;
1412
+ color: rgb(225 192 141 / var(--tw-text-opacity, 1));
1413
+ }
1414
+ .text-\[var\(--app-button-foreground\2c \#ffffff\)\] {
1415
+ color: var(--app-button-foreground,#ffffff);
1416
+ }
1417
+ .text-\[var\(--app-list-active-foreground\)\] {
1418
+ color: var(--app-list-active-foreground);
1419
+ }
1420
+ .text-\[var\(--app-menu-foreground\)\] {
1421
+ color: var(--app-menu-foreground);
1422
+ }
1423
+ .text-\[var\(--app-monospace-font-size\)\] {
1424
+ color: var(--app-monospace-font-size);
1425
+ }
1426
+ .text-\[var\(--app-primary-foreground\)\] {
1427
+ color: var(--app-primary-foreground);
1428
+ }
1429
+ .text-\[var\(--app-primary-foreground\2c \#f9fafb\)\] {
1430
+ color: var(--app-primary-foreground,#f9fafb);
1431
+ }
1432
+ .text-\[var\(--app-secondary-foreground\)\] {
1433
+ color: var(--app-secondary-foreground);
1434
+ }
1435
+ .text-\[var\(--vscode-chat-font-size\2c 13px\)\] {
1436
+ color: var(--vscode-chat-font-size,13px);
1437
+ }
1438
+ .text-\[var\(--vscode-symbolIcon-fileForeground\2c \#cccccc\)\] {
1439
+ color: var(--vscode-symbolIcon-fileForeground,#cccccc);
1440
+ }
1441
+ .text-app-primary-foreground {
1442
+ color: var(--app-primary-foreground, #ffffff);
1443
+ }
1444
+ .text-gray-500 {
1445
+ --tw-text-opacity: 1;
1446
+ color: rgb(107 114 128 / var(--tw-text-opacity, 1));
1447
+ }
1448
+ .text-gray-700 {
1449
+ --tw-text-opacity: 1;
1450
+ color: rgb(55 65 81 / var(--tw-text-opacity, 1));
1451
+ }
1452
+ .text-gray-800 {
1453
+ --tw-text-opacity: 1;
1454
+ color: rgb(31 41 55 / var(--tw-text-opacity, 1));
1455
+ }
1456
+ .text-red-600 {
1457
+ --tw-text-opacity: 1;
1458
+ color: rgb(220 38 38 / var(--tw-text-opacity, 1));
1459
+ }
1460
+ .text-white {
1461
+ --tw-text-opacity: 1;
1462
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
1463
+ }
1464
+ .line-through {
1465
+ text-decoration-line: line-through;
1466
+ }
1467
+ .no-underline {
1468
+ text-decoration-line: none;
1469
+ }
1470
+ .opacity-0 {
1471
+ opacity: 0;
1472
+ }
1473
+ .opacity-25 {
1474
+ opacity: 0.25;
1475
+ }
1476
+ .opacity-50 {
1477
+ opacity: 0.5;
1478
+ }
1479
+ .opacity-60 {
1480
+ opacity: 0.6;
1481
+ }
1482
+ .opacity-70 {
1483
+ opacity: 0.7;
1484
+ }
1485
+ .opacity-75 {
1486
+ opacity: 0.75;
1487
+ }
1488
+ .opacity-85 {
1489
+ opacity: 0.85;
1490
+ }
1491
+ .opacity-90 {
1492
+ opacity: 0.9;
1493
+ }
1494
+ .shadow-\[0_4px_16px_rgba\(0\2c 0\2c 0\2c 0\.1\)\] {
1495
+ --tw-shadow: 0 4px 16px rgba(0,0,0,0.1);
1496
+ --tw-shadow-colored: 0 4px 16px var(--tw-shadow-color);
1497
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1498
+ }
1499
+ .shadow-\[inset_0_0_0_1px_var\(--app-transparent-inner-border\)\] {
1500
+ --tw-shadow: inset 0 0 0 1px var(--app-transparent-inner-border);
1501
+ --tw-shadow-colored: inset 0 0 0 1px var(--tw-shadow-color);
1502
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1503
+ }
1504
+ .shadow-lg {
1505
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1506
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
1507
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1508
+ }
1509
+ .shadow-sm {
1510
+ --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
1511
+ --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
1512
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
1513
+ }
1514
+ .outline-none {
1515
+ outline: 2px solid transparent;
1516
+ outline-offset: 2px;
1517
+ }
1518
+ .outline {
1519
+ outline-style: solid;
1520
+ }
1521
+ .ring {
1522
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1523
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1524
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1525
+ }
1526
+ .filter {
1527
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
1528
+ }
1529
+ .transition {
1530
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
1531
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1532
+ transition-duration: 150ms;
1533
+ }
1534
+ .transition-colors {
1535
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
1536
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1537
+ transition-duration: 150ms;
1538
+ }
1539
+ .transition-opacity {
1540
+ transition-property: opacity;
1541
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1542
+ transition-duration: 150ms;
1543
+ }
1544
+ .transition-transform {
1545
+ transition-property: transform;
1546
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1547
+ transition-duration: 150ms;
1548
+ }
1549
+ .duration-100 {
1550
+ transition-duration: 100ms;
1551
+ }
1552
+ .duration-150 {
1553
+ transition-duration: 150ms;
1554
+ }
1555
+ .duration-200 {
1556
+ transition-duration: 200ms;
1557
+ }
1558
+ .ease-in-out {
1559
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1560
+ }
1561
+ .ease-out {
1562
+ transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
1563
+ }
1564
+ .\[mask-image\:linear-gradient\(to_bottom\2c var\(--app-primary-background\)_80px\2c transparent_\$\{COLLAPSED_HEIGHT\}px\)\] {
1565
+ -webkit-mask-image: linear-gradient(to bottom,var(--app-primary-background) 80px,transparent ${COLLAPSED HEIGHT}px);
1566
+ mask-image: linear-gradient(to bottom,var(--app-primary-background) 80px,transparent ${COLLAPSED HEIGHT}px);
1567
+ }
1568
+
1569
+ /**
1570
+ * Default CSS variables for @rdmind/webui
1571
+ * These provide fallback values when running outside of VSCode.
1572
+ * In VSCode, these will be overridden by VSCode's design tokens.
1573
+ */
1574
+ :root {
1575
+ /* ===========================
1576
+ Primary Colors
1577
+ =========================== */
1578
+ --app-primary: #3b82f6;
1579
+ --app-primary-hover: #2563eb;
1580
+ --app-primary-foreground: #e4e4e7;
1581
+ --app-secondary-foreground: #a1a1aa;
1582
+
1583
+ /* ===========================
1584
+ Background Colors
1585
+ =========================== */
1586
+ --app-background: #1e1e1e;
1587
+ --app-primary-background: #1e1e1e;
1588
+ --app-background-secondary: #252526;
1589
+ --app-secondary-background: #252526;
1590
+ --app-background-tertiary: #2d2d2d;
1591
+
1592
+ /* ===========================
1593
+ Foreground/Text Colors
1594
+ =========================== */
1595
+ --app-foreground: #e4e4e7;
1596
+ --app-foreground-secondary: #a1a1aa;
1597
+ --app-foreground-muted: #71717a;
1598
+
1599
+ /* ===========================
1600
+ Border Colors
1601
+ =========================== */
1602
+ --app-border: #3f3f46;
1603
+ --app-border-focus: #3b82f6;
1604
+ --app-primary-border-color: #3f3f46;
1605
+
1606
+ /* ===========================
1607
+ Status Colors
1608
+ =========================== */
1609
+ --app-success: #10b981;
1610
+ --app-warning: #f59e0b;
1611
+ --app-error: #ef4444;
1612
+ --app-info: #3b82f6;
1613
+
1614
+ /* ===========================
1615
+ Typography
1616
+ =========================== */
1617
+ --app-font-sans: system-ui, -apple-system, sans-serif;
1618
+ --app-font-mono: var(
1619
+ --app-monospace-font-family,
1620
+ ui-monospace,
1621
+ 'SF Mono',
1622
+ monospace
1623
+ );
1624
+ --app-monospace-font-size: 13px;
1625
+ --font-size-xs: 11px;
1626
+
1627
+ /* ===========================
1628
+ Link Styles
1629
+ =========================== */
1630
+ --app-link-foreground: #007acc;
1631
+ --app-link-active-foreground: #005a9e;
1632
+
1633
+ /* ===========================
1634
+ Brand Colors
1635
+ =========================== */
1636
+ --app-qwen-ivory: #f5f5dc;
1637
+
1638
+ /* ===========================
1639
+ Border Radius
1640
+ =========================== */
1641
+ --app-radius-sm: 0.25rem;
1642
+ --app-radius-md: 0.375rem;
1643
+ --app-radius-lg: 0.5rem;
1644
+ --qwen-corner-radius-small: 6px;
1645
+ --qwen-corner-radius-medium: 8px;
1646
+ --corner-radius-small: var(--app-radius-sm, 4px);
1647
+ --corner-radius-medium: var(--app-radius-md, 6px);
1648
+ --border-radius-medium: var(--corner-radius-medium, 6px);
1649
+
1650
+ /* ===========================
1651
+ Spacing
1652
+ =========================== */
1653
+ --app-spacing-xs: 0.25rem;
1654
+ --app-spacing-sm: 0.5rem;
1655
+ --app-spacing-md: 1rem;
1656
+ --app-spacing-medium: 8px;
1657
+ --app-spacing-lg: 1.5rem;
1658
+ --app-spacing-xl: 2rem;
1659
+ --spacing-medium: var(--app-spacing-medium, 8px);
1660
+ --spacing-large: 12px;
1661
+
1662
+ /* ===========================
1663
+ Input Styles
1664
+ =========================== */
1665
+ --app-input-background: #3c3c3c;
1666
+ --app-input-secondary-background: #2d2d2d;
1667
+ --app-input-border: #3f3f46;
1668
+ --app-input-foreground: #e4e4e7;
1669
+ --app-input-placeholder-foreground: #71717a;
1670
+
1671
+ /* ===========================
1672
+ Button Styles
1673
+ =========================== */
1674
+ --app-ghost-button-hover-background: rgba(90, 93, 94, 0.31);
1675
+ --app-button-background: #3c3c3c;
1676
+ --app-button-foreground: #ffffff;
1677
+ --app-button-hover-background: var(--app-primary-hover);
1678
+ --app-transparent-inner-border: rgba(255, 255, 255, 0.1);
1679
+
1680
+ /* ===========================
1681
+ Header Styles
1682
+ =========================== */
1683
+ --app-header-background: #252526;
1684
+
1685
+ /* ===========================
1686
+ List Styles
1687
+ =========================== */
1688
+ --app-list-padding: 0px;
1689
+ --app-list-item-padding: 4px 8px;
1690
+ --app-list-border-color: transparent;
1691
+ --app-list-border-radius: 4px;
1692
+ --app-list-hover-background: rgba(90, 93, 94, 0.31);
1693
+ --app-list-active-background: #094771;
1694
+ --app-list-active-foreground: #ffffff;
1695
+ --app-list-gap: 2px;
1696
+
1697
+ /* ===========================
1698
+ Menu Styles
1699
+ =========================== */
1700
+ --app-menu-background: #252526;
1701
+ --app-menu-border: #454545;
1702
+ --app-menu-foreground: #cccccc;
1703
+ --app-menu-selection-background: #094771;
1704
+ --app-menu-selection-foreground: #ffffff;
1705
+
1706
+ /* ===========================
1707
+ Tool Call Styles
1708
+ =========================== */
1709
+ --app-tool-background: #1e1e1e;
1710
+ --app-code-background: #2d2d2d;
1711
+
1712
+ /* ===========================
1713
+ Warning/Error Styles
1714
+ =========================== */
1715
+ --app-warning-background: rgba(255, 204, 0, 0.1);
1716
+ --app-warning-border: #ffcc00;
1717
+ --app-warning-foreground: #ffcc00;
1718
+
1719
+ /* ===========================
1720
+ VSCode Compatibility
1721
+ =========================== */
1722
+ --vscode-chat-font-size: 13px;
1723
+ --vscode-chat-font-family: var(--app-font-sans);
1724
+ --vscode-focusBorder: var(--app-border-focus);
1725
+ --vscode-symbolIcon-fileForeground: var(--app-secondary-foreground);
1726
+ }
1727
+
1728
+ /* Light theme override (can be toggled via class or media query) */
1729
+ @media (prefers-color-scheme: light) {
1730
+ :root.auto-theme {
1731
+ --app-primary-foreground: #1f2937;
1732
+ --app-secondary-foreground: #6b7280;
1733
+ --app-background: #ffffff;
1734
+ --app-primary-background: #ffffff;
1735
+ --app-background-secondary: #f3f4f6;
1736
+ --app-background-tertiary: #e5e7eb;
1737
+ --app-foreground: #1f2937;
1738
+ --app-foreground-secondary: #6b7280;
1739
+ --app-foreground-muted: #9ca3af;
1740
+ --app-border: #e5e7eb;
1741
+ --app-primary-border-color: #e5e7eb;
1742
+ --app-input-background: #ffffff;
1743
+ --app-input-border: #d1d5db;
1744
+ --app-input-placeholder-foreground: #9ca3af;
1745
+ --app-ghost-button-hover-background: rgba(0, 0, 0, 0.05);
1746
+ --app-header-background: #f9fafb;
1747
+ --app-list-hover-background: rgba(0, 0, 0, 0.05);
1748
+ --app-list-active-background: #3b82f6;
1749
+ --app-menu-background: #ffffff;
1750
+ --app-menu-border: #e5e7eb;
1751
+ --app-menu-foreground: #1f2937;
1752
+ --app-tool-background: #ffffff;
1753
+ --app-code-background: #f3f4f6;
1754
+ }
1755
+ }
1756
+ .placeholder\:text-\[var\(--app-input-placeholder-foreground\)\]::-moz-placeholder {
1757
+ color: var(--app-input-placeholder-foreground);
1758
+ }
1759
+ .placeholder\:text-\[var\(--app-input-placeholder-foreground\)\]::placeholder {
1760
+ color: var(--app-input-placeholder-foreground);
1761
+ }
1762
+ .placeholder\:opacity-60::-moz-placeholder {
1763
+ opacity: 0.6;
1764
+ }
1765
+ .placeholder\:opacity-60::placeholder {
1766
+ opacity: 0.6;
1767
+ }
1768
+ .hover\:relative:hover {
1769
+ position: relative;
1770
+ }
1771
+ .hover\:border-0:hover {
1772
+ border-width: 0px;
1773
+ }
1774
+ .hover\:bg-\[var\(--app-button-background\)\]:hover {
1775
+ background-color: var(--app-button-background);
1776
+ }
1777
+ .hover\:bg-\[var\(--app-code-background\)\]:hover {
1778
+ background-color: var(--app-code-background);
1779
+ }
1780
+ .hover\:bg-\[var\(--app-ghost-button-hover-background\)\]:hover {
1781
+ background-color: var(--app-ghost-button-hover-background);
1782
+ }
1783
+ .hover\:bg-\[var\(--app-input-background\)\]:hover {
1784
+ background-color: var(--app-input-background);
1785
+ }
1786
+ .hover\:bg-\[var\(--app-input-border\)\]:hover {
1787
+ background-color: var(--app-input-border);
1788
+ }
1789
+ .hover\:bg-\[var\(--app-list-hover-background\)\]:hover {
1790
+ background-color: var(--app-list-hover-background);
1791
+ }
1792
+ .hover\:bg-\[var\(--app-primary-hover\2c var\(--app-button-hover-background\)\)\]:hover {
1793
+ background-color: var(--app-primary-hover,var(--app-button-hover-background));
1794
+ }
1795
+ .hover\:bg-black\/5:hover {
1796
+ background-color: rgb(0 0 0 / 0.05);
1797
+ }
1798
+ .hover\:bg-blue-700:hover {
1799
+ --tw-bg-opacity: 1;
1800
+ background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));
1801
+ }
1802
+ .hover\:bg-gray-100:hover {
1803
+ --tw-bg-opacity: 1;
1804
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
1805
+ }
1806
+ .hover\:bg-gray-300:hover {
1807
+ --tw-bg-opacity: 1;
1808
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));
1809
+ }
1810
+ .hover\:bg-gray-50:hover {
1811
+ --tw-bg-opacity: 1;
1812
+ background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
1813
+ }
1814
+ .hover\:bg-red-700:hover {
1815
+ --tw-bg-opacity: 1;
1816
+ background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1));
1817
+ }
1818
+ .hover\:font-bold:hover {
1819
+ font-weight: 700;
1820
+ }
1821
+ .hover\:text-\[var\(--app-button-foreground\)\]:hover {
1822
+ color: var(--app-button-foreground);
1823
+ }
1824
+ .hover\:text-\[var\(--app-primary-foreground\)\]:hover {
1825
+ color: var(--app-primary-foreground);
1826
+ }
1827
+ .hover\:underline:hover {
1828
+ text-decoration-line: underline;
1829
+ }
1830
+ .hover\:\!opacity-100:hover {
1831
+ opacity: 1 !important;
1832
+ }
1833
+ .hover\:opacity-100:hover {
1834
+ opacity: 1;
1835
+ }
1836
+ .focus\:rounded-\[2px\]:focus {
1837
+ border-radius: 2px;
1838
+ }
1839
+ .focus\:border-blue-500:focus {
1840
+ --tw-border-opacity: 1;
1841
+ border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));
1842
+ }
1843
+ .focus\:border-red-500:focus {
1844
+ --tw-border-opacity: 1;
1845
+ border-color: rgb(239 68 68 / var(--tw-border-opacity, 1));
1846
+ }
1847
+ .focus\:bg-\[var\(--app-ghost-button-hover-background\)\]:focus {
1848
+ background-color: var(--app-ghost-button-hover-background);
1849
+ }
1850
+ .focus\:outline-none:focus {
1851
+ outline: 2px solid transparent;
1852
+ outline-offset: 2px;
1853
+ }
1854
+ .focus\:outline:focus {
1855
+ outline-style: solid;
1856
+ }
1857
+ .focus\:outline-1:focus {
1858
+ outline-width: 1px;
1859
+ }
1860
+ .focus\:outline-offset-2:focus {
1861
+ outline-offset: 2px;
1862
+ }
1863
+ .focus\:outline-\[var\(--vscode-focusBorder\)\]:focus {
1864
+ outline-color: var(--vscode-focusBorder);
1865
+ }
1866
+ .focus\:ring-2:focus {
1867
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
1868
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
1869
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
1870
+ }
1871
+ .focus\:ring-blue-500:focus {
1872
+ --tw-ring-opacity: 1;
1873
+ --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));
1874
+ }
1875
+ .focus\:ring-gray-400:focus {
1876
+ --tw-ring-opacity: 1;
1877
+ --tw-ring-color: rgb(156 163 175 / var(--tw-ring-opacity, 1));
1878
+ }
1879
+ .focus\:ring-gray-500:focus {
1880
+ --tw-ring-opacity: 1;
1881
+ --tw-ring-color: rgb(107 114 128 / var(--tw-ring-opacity, 1));
1882
+ }
1883
+ .focus\:ring-red-500:focus {
1884
+ --tw-ring-opacity: 1;
1885
+ --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1));
1886
+ }
1887
+ .focus\:ring-offset-2:focus {
1888
+ --tw-ring-offset-width: 2px;
1889
+ }
1890
+ .active\:scale-95:active {
1891
+ --tw-scale-x: .95;
1892
+ --tw-scale-y: .95;
1893
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1894
+ }
1895
+ .active\:opacity-80:active {
1896
+ opacity: 0.8;
1897
+ }
1898
+ .group:hover .group-hover\:opacity-100 {
1899
+ opacity: 1;
1900
+ }
1901
+ .group:hover .group-hover\:opacity-70 {
1902
+ opacity: 0.7;
1903
+ }
1904
+ @media (min-width: 640px) {
1905
+
1906
+ .sm\:inline {
1907
+ display: inline;
1908
+ }
1909
+ }
1910
+ @media (min-width: 768px) {
1911
+
1912
+ .md\:max-w-md {
1913
+ max-width: 28rem;
1914
+ }
1915
+
1916
+ .md\:p-10 {
1917
+ padding: 2.5rem;
1918
+ }
1919
+ }
1920
+ @media (min-width: 1024px) {
1921
+
1922
+ .lg\:max-w-lg {
1923
+ max-width: 32rem;
1924
+ }
1925
+ }
1926
+ @media (prefers-color-scheme: dark) {
1927
+
1928
+ .dark\:opacity-60 {
1929
+ opacity: 0.6;
1930
+ }
1931
+ }
1932
+ .\[\&\:not\(\:first-child\)\]\:mt-2:not(:first-child) {
1933
+ margin-top: 0.5rem;
1934
+ }
1935
+ .\[\&\>svg\]\:h-5>svg {
1936
+ height: 1.25rem;
1937
+ }
1938
+ .\[\&\>svg\]\:w-5>svg {
1939
+ width: 1.25rem;
1940
+ }
1941
+ /**
1942
+ * @license
1943
+ * Copyright 2025 Qwen Team
1944
+ * SPDX-License-Identifier: Apache-2.0
1945
+ *
1946
+ * Shared timeline styles - base classes only
1947
+ * Individual component styles are in their respective CSS files:
1948
+ * - LayoutComponents.css (tool calls)
1949
+ * - AssistantMessage.css (assistant messages)
1950
+ *
1951
+ * Timeline connectors are inferred from DOM order; data-first/data-last can override
1952
+ */
1953
+
1954
+ /* Base message item styles */
1955
+ .message-item {
1956
+ padding: 8px 0;
1957
+ width: 100%;
1958
+ align-items: flex-start;
1959
+ padding-left: 30px;
1960
+ -webkit-user-select: text;
1961
+ -moz-user-select: text;
1962
+ user-select: text;
1963
+ position: relative;
1964
+ }
1965
+
1966
+ /* User message container spacing */
1967
+ .user-message-container {
1968
+ margin-top: 16px;
1969
+ }
1970
+
1971
+ .user-message-container:first-child {
1972
+ margin-top: 0;
1973
+ }
1974
+
1975
+ /*
1976
+ * Timeline fallback for environments without data-first/data-last.
1977
+ * Uses sibling selectors and :has() to detect AI sequence boundaries.
1978
+ */
1979
+ .qwen-message.message-item:not(.user-message-container):first-child::after,
1980
+ .user-message-container
1981
+ + .qwen-message.message-item:not(.user-message-container)::after,
1982
+ .chat-messages
1983
+ > :not(.qwen-message.message-item)
1984
+ + .qwen-message.message-item:not(.user-message-container)::after,
1985
+ .chat-viewer-messages
1986
+ > :not(.qwen-message.message-item)
1987
+ + .qwen-message.message-item:not(.user-message-container)::after {
1988
+ top: var(--timeline-center-offset, 13px);
1989
+ }
1990
+
1991
+ .qwen-message.message-item:not(.user-message-container):has(+ .user-message-container)::after,
1992
+ .qwen-message.message-item:not(.user-message-container):has(
1993
+ + :not(.qwen-message.message-item)
1994
+ )::after,
1995
+ .qwen-message.message-item:not(.user-message-container):last-child::after {
1996
+ bottom: calc(100% - var(--timeline-center-offset, 13px));
1997
+ }
1998
+
1999
+ .qwen-message.message-item[data-first='true']::after {
2000
+ top: var(--timeline-center-offset, 13px);
2001
+ }
2002
+
2003
+ .qwen-message.message-item[data-last='true']::after {
2004
+ bottom: calc(100% - var(--timeline-center-offset, 13px));
2005
+ }
2006
+
2007
+ .qwen-message.message-item[data-first='true'][data-last='true']::after {
2008
+ display: none;
2009
+ }
2010
+ /**
2011
+ * @license
2012
+ * Copyright 2025 Qwen Team
2013
+ * SPDX-License-Identifier: Apache-2.0
2014
+ *
2015
+ * Common component styles for webui
2016
+ * These styles are shared across all platforms (vscode, web, etc.)
2017
+ */
2018
+
2019
+ /* ===========================
2020
+ Global Reset
2021
+ =========================== */
2022
+ .webui-root * {
2023
+ margin: 0;
2024
+ padding: 0;
2025
+ box-sizing: border-box;
2026
+ }
2027
+
2028
+ /* ===========================
2029
+ Animations
2030
+ =========================== */
2031
+ @keyframes fadeIn {
2032
+ from {
2033
+ opacity: 0;
2034
+ transform: translateY(10px);
2035
+ }
2036
+ to {
2037
+ opacity: 1;
2038
+ transform: translateY(0);
2039
+ }
2040
+ }
2041
+
2042
+ @keyframes pulse {
2043
+ 0%,
2044
+ 100% {
2045
+ opacity: 1;
2046
+ }
2047
+ 50% {
2048
+ opacity: 0.3;
2049
+ }
2050
+ }
2051
+
2052
+ @keyframes typingPulse {
2053
+ 0%,
2054
+ 60%,
2055
+ 100% {
2056
+ transform: scale(0.7);
2057
+ opacity: 0.6;
2058
+ }
2059
+ 30% {
2060
+ transform: scale(1);
2061
+ opacity: 1;
2062
+ }
2063
+ }
2064
+
2065
+ /* ===========================
2066
+ Chat Container Styles
2067
+ =========================== */
2068
+ .chat-container {
2069
+ display: flex;
2070
+ flex-direction: column;
2071
+ height: 100%;
2072
+ width: 100%;
2073
+ background-color: var(--app-primary-background);
2074
+ color: var(--app-primary-foreground);
2075
+ font-family: var(--vscode-chat-font-family, var(--app-font-sans));
2076
+ font-size: var(--vscode-chat-font-size, 13px);
2077
+ }
2078
+
2079
+ .chat-messages {
2080
+ flex: 1;
2081
+ overflow-y: auto;
2082
+ overflow-x: hidden;
2083
+ padding: 20px;
2084
+ display: flex;
2085
+ flex-direction: column;
2086
+ position: relative;
2087
+ min-width: 0;
2088
+ scroll-behavior: smooth;
2089
+ }
2090
+
2091
+ /* Disable overflow anchoring on individual items for manual scroll control */
2092
+ .chat-messages > * {
2093
+ overflow-anchor: none;
2094
+ }
2095
+
2096
+ /* ===========================
2097
+ Input Form Styles
2098
+ =========================== */
2099
+ .input-form {
2100
+ display: flex;
2101
+ background-color: var(--app-primary-background);
2102
+ border-top: 1px solid var(--app-primary-border-color);
2103
+ }
2104
+
2105
+ .input-field {
2106
+ flex: 1;
2107
+ padding: 10px 12px;
2108
+ background-color: var(--app-input-background);
2109
+ color: var(--app-input-foreground);
2110
+ border: 1px solid var(--app-input-border);
2111
+ border-radius: var(--app-radius-sm, 4px);
2112
+ font-size: var(--vscode-chat-font-size, 13px);
2113
+ font-family: var(--vscode-chat-font-family, var(--app-font-sans));
2114
+ outline: none;
2115
+ line-height: 1.5;
2116
+ }
2117
+
2118
+ .input-field:focus {
2119
+ border-color: var(--app-primary, #3b82f6);
2120
+ }
2121
+
2122
+ .input-field:disabled {
2123
+ opacity: 0.5;
2124
+ cursor: not-allowed;
2125
+ }
2126
+
2127
+ .input-field::-moz-placeholder {
2128
+ color: var(--app-input-placeholder-foreground);
2129
+ }
2130
+
2131
+ .input-field::placeholder {
2132
+ color: var(--app-input-placeholder-foreground);
2133
+ }
2134
+
2135
+ .send-button {
2136
+ padding: 10px 20px;
2137
+ background-color: var(--app-primary, #3b82f6);
2138
+ color: var(--app-button-foreground, white);
2139
+ border: none;
2140
+ border-radius: var(--app-radius-sm, 4px);
2141
+ font-size: var(--vscode-chat-font-size, 13px);
2142
+ font-weight: 500;
2143
+ cursor: pointer;
2144
+ transition: filter 0.15s ease;
2145
+ display: flex;
2146
+ align-items: center;
2147
+ justify-content: center;
2148
+ }
2149
+
2150
+ .send-button:hover:not(:disabled) {
2151
+ filter: brightness(1.1);
2152
+ }
2153
+
2154
+ .send-button:active:not(:disabled) {
2155
+ filter: brightness(0.9);
2156
+ }
2157
+
2158
+ .send-button:disabled {
2159
+ opacity: 0.5;
2160
+ cursor: not-allowed;
2161
+ }
2162
+
2163
+ /* ===========================
2164
+ Code Block Styles
2165
+ =========================== */
2166
+ .code-block {
2167
+ font-family: var(--app-font-mono);
2168
+ font-size: var(--app-monospace-font-size, 13px);
2169
+ background: var(--app-primary-background);
2170
+ border: 1px solid var(--app-input-border);
2171
+ border-radius: var(--app-radius-sm, 4px);
2172
+ padding: var(--app-spacing-medium, 8px);
2173
+ overflow-x: auto;
2174
+ margin: 4px 0 0 0;
2175
+ white-space: pre-wrap;
2176
+ word-break: break-word;
2177
+ max-height: 300px;
2178
+ overflow-y: auto;
2179
+ }
2180
+
2181
+ /* ===========================
2182
+ Diff Display Styles
2183
+ =========================== */
2184
+ .diff-display-container {
2185
+ margin: 8px 0;
2186
+ border: 1px solid var(--app-input-border);
2187
+ border-radius: var(--app-radius-md, 6px);
2188
+ overflow: hidden;
2189
+ }
2190
+
2191
+ .diff-header {
2192
+ display: flex;
2193
+ align-items: center;
2194
+ justify-content: space-between;
2195
+ padding: 8px 12px;
2196
+ background: var(--app-input-secondary-background, var(--app-background-secondary));
2197
+ border-bottom: 1px solid var(--app-input-border);
2198
+ }
2199
+
2200
+ .diff-file-path {
2201
+ font-family: var(--app-font-mono);
2202
+ font-size: 13px;
2203
+ color: var(--app-primary-foreground);
2204
+ }
2205
+
2206
+ .open-diff-button {
2207
+ display: flex;
2208
+ align-items: center;
2209
+ gap: 6px;
2210
+ padding: 4px 8px;
2211
+ background: transparent;
2212
+ border: 1px solid var(--app-input-border);
2213
+ border-radius: var(--app-radius-sm, 4px);
2214
+ color: var(--app-primary-foreground);
2215
+ cursor: pointer;
2216
+ font-size: 12px;
2217
+ transition: background-color 0.15s;
2218
+ }
2219
+
2220
+ .open-diff-button:hover {
2221
+ background: var(--app-ghost-button-hover-background);
2222
+ }
2223
+
2224
+ .open-diff-button svg {
2225
+ width: 16px;
2226
+ height: 16px;
2227
+ }
2228
+
2229
+ .diff-section {
2230
+ margin: 0;
2231
+ }
2232
+
2233
+ .diff-label {
2234
+ padding: 8px 12px;
2235
+ background: var(--app-primary-background);
2236
+ border-bottom: 1px solid var(--app-input-border);
2237
+ font-size: 11px;
2238
+ font-weight: 600;
2239
+ color: var(--app-secondary-foreground);
2240
+ text-transform: uppercase;
2241
+ }
2242
+
2243
+ .diff-section .code-block {
2244
+ border: none;
2245
+ border-radius: 0;
2246
+ margin: 0;
2247
+ max-height: none;
2248
+ overflow-y: visible;
2249
+ }
2250
+
2251
+ .diff-section .code-content {
2252
+ display: block;
2253
+ }
2254
+
2255
+ /* ===========================
2256
+ Tool Call Card Styles
2257
+ =========================== */
2258
+ .toolcall-card {
2259
+ padding-left: 30px;
2260
+ }
2261
+
2262
+ /* ===========================
2263
+ Button Styles
2264
+ =========================== */
2265
+ .btn-ghost {
2266
+ background: transparent;
2267
+ border: 1px solid transparent;
2268
+ border-radius: 4px;
2269
+ cursor: pointer;
2270
+ outline: none;
2271
+ transition: background-color 0.2s;
2272
+ color: var(--app-primary-foreground);
2273
+ font-size: var(--vscode-chat-font-size, 13px);
2274
+ }
2275
+
2276
+ .btn-ghost:hover,
2277
+ .btn-ghost:focus {
2278
+ background: var(--app-ghost-button-hover-background);
2279
+ }
2280
+
2281
+ /* Icon-only button, compact square */
2282
+ .btn-icon-compact {
2283
+ display: inline-flex;
2284
+ align-items: center;
2285
+ justify-content: center;
2286
+ width: 26px;
2287
+ height: 26px;
2288
+ padding: 0;
2289
+ border-radius: var(--app-radius-sm, 4px);
2290
+ background: transparent;
2291
+ border: 1px solid transparent;
2292
+ cursor: pointer;
2293
+ flex-shrink: 0;
2294
+ transition: all 0.15s;
2295
+ color: var(--app-secondary-foreground);
2296
+ }
2297
+
2298
+ .btn-icon-compact:hover {
2299
+ background-color: var(--app-ghost-button-hover-background);
2300
+ }
2301
+
2302
+ .btn-icon-compact svg {
2303
+ width: 16px;
2304
+ height: 16px;
2305
+ }
2306
+
2307
+ /* Active/primary state for icon button */
2308
+ .btn-icon-compact--active {
2309
+ background-color: var(--app-primary, #3b82f6);
2310
+ color: white;
2311
+ }
2312
+
2313
+ /* Text button (icon + label) */
2314
+ .btn-text-compact {
2315
+ display: inline-flex;
2316
+ align-items: center;
2317
+ gap: 4px;
2318
+ padding: 2px 4px;
2319
+ border-radius: 2px;
2320
+ cursor: pointer;
2321
+ background: transparent;
2322
+ border: 0;
2323
+ min-width: 0;
2324
+ flex-shrink: 1;
2325
+ font-size: 0.85em;
2326
+ transition: background-color 0.15s;
2327
+ color: var(--app-secondary-foreground);
2328
+ }
2329
+
2330
+ .btn-text-compact:hover {
2331
+ background-color: var(--app-ghost-button-hover-background);
2332
+ }
2333
+
2334
+ .btn-text-compact > svg {
2335
+ height: 1em;
2336
+ width: 1em;
2337
+ flex-shrink: 0;
2338
+ }
2339
+
2340
+ .btn-text-compact > span {
2341
+ display: inline-block;
2342
+ min-width: 0;
2343
+ max-width: 200px;
2344
+ overflow: hidden;
2345
+ white-space: nowrap;
2346
+ text-overflow: ellipsis;
2347
+ vertical-align: middle;
2348
+ }
2349
+
2350
+ /* ===========================
2351
+ Context Indicator Styles
2352
+ =========================== */
2353
+ .context-indicator {
2354
+ display: inline-flex;
2355
+ align-items: center;
2356
+ gap: 4px;
2357
+ padding: 2px 4px;
2358
+ border-radius: var(--app-radius-sm, 4px);
2359
+ font-size: 0.8em;
2360
+ -webkit-user-select: none;
2361
+ -moz-user-select: none;
2362
+ user-select: none;
2363
+ color: var(--app-secondary-foreground);
2364
+ }
2365
+
2366
+ .context-indicator svg {
2367
+ width: 20px;
2368
+ height: 20px;
2369
+ }
2370
+
2371
+ .context-indicator__track,
2372
+ .context-indicator__progress {
2373
+ fill: none;
2374
+ stroke-width: 2.5;
2375
+ }
2376
+
2377
+ .context-indicator__track {
2378
+ stroke: var(--app-secondary-foreground);
2379
+ opacity: 0.35;
2380
+ }
2381
+
2382
+ .context-indicator__progress {
2383
+ stroke: var(--app-secondary-foreground);
2384
+ stroke-linecap: round;
2385
+ }
2386
+
2387
+ /* ===========================
2388
+ Composer Styles (Input Form)
2389
+ =========================== */
2390
+ .composer-root {
2391
+ position: absolute;
2392
+ bottom: 16px;
2393
+ left: 16px;
2394
+ right: 16px;
2395
+ display: flex;
2396
+ flex-direction: column;
2397
+ z-index: 20;
2398
+ }
2399
+
2400
+ .composer-form {
2401
+ position: relative;
2402
+ display: flex;
2403
+ flex-direction: column;
2404
+ max-width: 680px;
2405
+ margin: 0 auto;
2406
+ border-radius: var(--app-radius-lg, 8px);
2407
+ border: 1px solid var(--app-input-border);
2408
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
2409
+ transition: border-color 0.2s;
2410
+ z-index: 1;
2411
+ background: var(--app-input-secondary-background, var(--app-background-secondary));
2412
+ color: var(--app-input-foreground);
2413
+ }
2414
+
2415
+ .composer-form:focus-within {
2416
+ border-color: var(--app-primary, #3b82f6);
2417
+ box-shadow: 0 1px 2px rgba(59, 130, 246, 0.2);
2418
+ }
2419
+
2420
+ .composer-input {
2421
+ flex: 1;
2422
+ align-self: stretch;
2423
+ padding: 10px 14px;
2424
+ outline: none;
2425
+ overflow-y: auto;
2426
+ position: relative;
2427
+ -webkit-user-select: text;
2428
+ -moz-user-select: text;
2429
+ user-select: text;
2430
+ min-height: 1.5em;
2431
+ max-height: 200px;
2432
+ background: transparent;
2433
+ border: 0;
2434
+ border-radius: 0;
2435
+ overflow-x: hidden;
2436
+ word-break: break-word;
2437
+ white-space: pre-wrap;
2438
+ font-family: inherit;
2439
+ font-size: var(--vscode-chat-font-size, 13px);
2440
+ color: var(--app-input-foreground);
2441
+ }
2442
+
2443
+ .composer-input:empty::before,
2444
+ .composer-input[data-empty="true"]::before {
2445
+ content: attr(data-placeholder);
2446
+ color: var(--app-input-placeholder-foreground);
2447
+ pointer-events: none;
2448
+ position: absolute;
2449
+ white-space: nowrap;
2450
+ overflow: hidden;
2451
+ text-overflow: ellipsis;
2452
+ max-width: calc(100% - 28px);
2453
+ }
2454
+
2455
+ .composer-input:focus {
2456
+ outline: none;
2457
+ }
2458
+
2459
+ .composer-input:disabled,
2460
+ .composer-input[contenteditable="false"] {
2461
+ color: #999;
2462
+ cursor: not-allowed;
2463
+ }
2464
+
2465
+ .composer-actions {
2466
+ display: flex;
2467
+ align-items: center;
2468
+ gap: 4px;
2469
+ min-width: 0;
2470
+ z-index: 1;
2471
+ padding: 5px;
2472
+ color: var(--app-secondary-foreground);
2473
+ border-top: 0.5px solid var(--app-input-border);
2474
+ }
2475
+
2476
+ .composer-overlay {
2477
+ position: absolute;
2478
+ inset: 0;
2479
+ border-radius: var(--app-radius-lg, 8px);
2480
+ z-index: 0;
2481
+ background: var(--app-input-background);
2482
+ }
2483
+
2484
+ /* Send button in composer */
2485
+ .btn-send-compact {
2486
+ display: inline-flex;
2487
+ align-items: center;
2488
+ justify-content: center;
2489
+ width: 26px;
2490
+ height: 26px;
2491
+ margin-left: auto;
2492
+ border-radius: var(--app-radius-sm, 4px);
2493
+ background-color: var(--app-primary, #3b82f6);
2494
+ color: white;
2495
+ border: none;
2496
+ cursor: pointer;
2497
+ }
2498
+
2499
+ .btn-send-compact:hover:not(:disabled) {
2500
+ filter: brightness(1.1);
2501
+ }
2502
+
2503
+ .btn-send-compact:disabled {
2504
+ opacity: 0.4;
2505
+ cursor: not-allowed;
2506
+ }
2507
+
2508
+ /* ===========================
2509
+ File Link Styles
2510
+ =========================== */
2511
+ .toolcall-content-wrapper .file-link-path {
2512
+ font-size: 0.85em;
2513
+ padding-top: 1px;
2514
+ word-break: break-all;
2515
+ min-width: 0;
2516
+ font-family: var(--app-font-mono);
2517
+ overflow-wrap: anywhere;
2518
+ }
2519
+
2520
+ /* ===========================
2521
+ Icon SVG Styles
2522
+ =========================== */
2523
+ .icon-svg {
2524
+ display: block;
2525
+ }
2526
+
2527
+ /* ===========================
2528
+ Utility: Line Clamp
2529
+ =========================== */
2530
+ .line-clamp-3 {
2531
+ display: -webkit-box;
2532
+ -webkit-box-orient: vertical;
2533
+ -webkit-line-clamp: 3;
2534
+ overflow: hidden;
2535
+ }
2536
+ /**
2537
+ * @license
2538
+ * Copyright 2025 Qwen Team
2539
+ * SPDX-License-Identifier: Apache-2.0
2540
+ *
2541
+ * Styles for MarkdownRenderer component
2542
+ */
2543
+
2544
+ .markdown-content {
2545
+ /* Base styles for markdown content */
2546
+ line-height: 1.6;
2547
+ color: var(--app-primary-foreground);
2548
+ }
2549
+
2550
+ .markdown-content h1,
2551
+ .markdown-content h2,
2552
+ .markdown-content h3,
2553
+ .markdown-content h4,
2554
+ .markdown-content h5,
2555
+ .markdown-content h6 {
2556
+ margin-top: 1.5em;
2557
+ margin-bottom: 0.5em;
2558
+ font-weight: 600;
2559
+ }
2560
+
2561
+ .markdown-content h1 {
2562
+ font-size: 1.75em;
2563
+ border-bottom: 1px solid var(--app-primary-border-color);
2564
+ padding-bottom: 0.3em;
2565
+ }
2566
+
2567
+ .markdown-content h2 {
2568
+ font-size: 1.5em;
2569
+ border-bottom: 1px solid var(--app-primary-border-color);
2570
+ padding-bottom: 0.3em;
2571
+ }
2572
+
2573
+ .markdown-content h3 {
2574
+ font-size: 1.25em;
2575
+ }
2576
+
2577
+ .markdown-content h4 {
2578
+ font-size: 1.1em;
2579
+ }
2580
+
2581
+ .markdown-content h5,
2582
+ .markdown-content h6 {
2583
+ font-size: 1em;
2584
+ }
2585
+
2586
+ .markdown-content p {
2587
+ margin-top: 0;
2588
+ }
2589
+
2590
+ .markdown-content ul,
2591
+ .markdown-content ol {
2592
+ margin-top: 1em;
2593
+ margin-bottom: 1em;
2594
+ padding-left: 2em;
2595
+ }
2596
+
2597
+ /* Ensure list markers are visible even with global CSS resets */
2598
+ .markdown-content ul {
2599
+ list-style-type: disc;
2600
+ list-style-position: outside;
2601
+ }
2602
+
2603
+ .markdown-content ol {
2604
+ list-style-type: decimal;
2605
+ list-style-position: outside;
2606
+ }
2607
+
2608
+ /* Nested list styles */
2609
+ .markdown-content ul ul {
2610
+ list-style-type: circle;
2611
+ }
2612
+
2613
+ .markdown-content ul ul ul {
2614
+ list-style-type: square;
2615
+ }
2616
+
2617
+ .markdown-content ol ol {
2618
+ list-style-type: lower-alpha;
2619
+ }
2620
+
2621
+ .markdown-content ol ol ol {
2622
+ list-style-type: lower-roman;
2623
+ }
2624
+
2625
+ /* Style the marker explicitly so themes don't hide it */
2626
+ .markdown-content li::marker {
2627
+ color: var(--app-secondary-foreground);
2628
+ }
2629
+
2630
+ .markdown-content li {
2631
+ margin-bottom: 0.25em;
2632
+ }
2633
+
2634
+ .markdown-content li > p {
2635
+ margin-top: 0.5em;
2636
+ margin-bottom: 0.5em;
2637
+ }
2638
+
2639
+ .markdown-content blockquote {
2640
+ margin: 0 0 1em;
2641
+ padding: 0 1em;
2642
+ border-left: 0.25em solid var(--app-primary-border-color);
2643
+ color: var(--app-secondary-foreground);
2644
+ }
2645
+
2646
+ .markdown-content a {
2647
+ color: var(--app-link-foreground, #007acc);
2648
+ text-decoration: none;
2649
+ }
2650
+
2651
+ .markdown-content a:hover {
2652
+ color: var(--app-link-active-foreground, #005a9e);
2653
+ text-decoration: underline;
2654
+ }
2655
+
2656
+ .markdown-content code {
2657
+ font-family: var(
2658
+ --app-monospace-font-family,
2659
+ 'SF Mono',
2660
+ Monaco,
2661
+ 'Cascadia Code',
2662
+ 'Roboto Mono',
2663
+ Consolas,
2664
+ 'Courier New',
2665
+ monospace
2666
+ );
2667
+ font-size: 0.9em;
2668
+ background-color: var(--app-code-background, rgba(0, 0, 0, 0.05));
2669
+ border: 1px solid var(--app-primary-border-color);
2670
+ border-radius: var(--corner-radius-small, 4px);
2671
+ padding: 0.2em 0.4em;
2672
+ white-space: pre-wrap; /* Support automatic line wrapping */
2673
+ word-break: break-word; /* Break words when necessary */
2674
+ }
2675
+
2676
+ .markdown-content pre {
2677
+ margin: 1em 0;
2678
+ padding: 1em;
2679
+ overflow-x: auto;
2680
+ background-color: var(--app-code-background, rgba(0, 0, 0, 0.05));
2681
+ border: 1px solid var(--app-primary-border-color);
2682
+ border-radius: var(--corner-radius-small, 4px);
2683
+ font-family: var(
2684
+ --app-monospace-font-family,
2685
+ 'SF Mono',
2686
+ Monaco,
2687
+ 'Cascadia Code',
2688
+ 'Roboto Mono',
2689
+ Consolas,
2690
+ 'Courier New',
2691
+ monospace
2692
+ );
2693
+ font-size: 0.9em;
2694
+ line-height: 1.5;
2695
+ }
2696
+
2697
+ .markdown-content pre code {
2698
+ background: none;
2699
+ border: none;
2700
+ padding: 0;
2701
+ white-space: pre-wrap; /* Support automatic line wrapping */
2702
+ word-break: break-word; /* Break words when necessary */
2703
+ }
2704
+
2705
+ .markdown-content .file-path-link {
2706
+ background: transparent;
2707
+ border: none;
2708
+ padding: 0;
2709
+ font-family: var(
2710
+ --app-monospace-font-family,
2711
+ 'SF Mono',
2712
+ Monaco,
2713
+ 'Cascadia Code',
2714
+ 'Roboto Mono',
2715
+ Consolas,
2716
+ 'Courier New',
2717
+ monospace
2718
+ );
2719
+ font-size: 0.95em;
2720
+ color: var(--app-link-foreground, #007acc);
2721
+ text-decoration: underline;
2722
+ cursor: pointer;
2723
+ transition: color 0.1s ease;
2724
+ }
2725
+
2726
+ .markdown-content .file-path-link:hover {
2727
+ color: var(--app-link-active-foreground, #005a9e);
2728
+ }
2729
+
2730
+ .markdown-content hr {
2731
+ border: none;
2732
+ border-top: 1px solid var(--app-primary-border-color);
2733
+ margin: 1.5em 0;
2734
+ }
2735
+
2736
+ .markdown-content img {
2737
+ max-width: 100%;
2738
+ height: auto;
2739
+ }
2740
+
2741
+ .markdown-content table {
2742
+ width: 100%;
2743
+ border-collapse: collapse;
2744
+ margin: 1em 0;
2745
+ }
2746
+
2747
+ .markdown-content th,
2748
+ .markdown-content td {
2749
+ padding: 0.5em 1em;
2750
+ border: 1px solid var(--app-primary-border-color);
2751
+ text-align: left;
2752
+ }
2753
+
2754
+ .markdown-content th {
2755
+ background-color: var(--app-secondary-background);
2756
+ font-weight: 600;
2757
+ }
2758
+ /**
2759
+ * @license
2760
+ * Copyright 2025 Qwen Team
2761
+ * SPDX-License-Identifier: Apache-2.0
2762
+ *
2763
+ * ThinkingMessage.css - Thinking message styles with timeline support
2764
+ */
2765
+
2766
+ /* ThinkingMessage container with timeline support */
2767
+ .thinking-message {
2768
+ position: relative;
2769
+ --timeline-center-offset: 15px;
2770
+ padding-left: 30px;
2771
+ padding-top: 8px;
2772
+ padding-bottom: 8px;
2773
+ -webkit-user-select: text;
2774
+ -moz-user-select: text;
2775
+ user-select: text;
2776
+ align-items: flex-start;
2777
+ border-radius: 6px;
2778
+ animation: fadeIn 0.2s ease-in;
2779
+ }
2780
+
2781
+ /* Timeline connector line - full height */
2782
+ .thinking-message::after {
2783
+ content: '';
2784
+ position: absolute;
2785
+ left: 12px;
2786
+ top: 0;
2787
+ bottom: 0;
2788
+ width: 1px;
2789
+ background-color: var(--app-primary-border-color, rgba(255, 255, 255, 0.15));
2790
+ }
2791
+
2792
+ /* First item in sequence: connector starts from bullet center */
2793
+ .thinking-message:first-child::after {
2794
+ top: var(--timeline-center-offset, 15px);
2795
+ }
2796
+
2797
+ /* Last item in sequence: connector ends at bullet center */
2798
+ .thinking-message:last-child::after {
2799
+ bottom: calc(100% - var(--timeline-center-offset, 15px));
2800
+ }
2801
+
2802
+ /* Single item (both first and last): no connector */
2803
+ .thinking-message:first-child:last-child::after {
2804
+ display: none;
2805
+ }
2806
+
2807
+ /*
2808
+ * Status bullet points - using Unicode bullet character
2809
+ * Positioned to align with other message items
2810
+ */
2811
+ .thinking-message.thinking-status-default::before,
2812
+ .thinking-message.thinking-status-loading::before {
2813
+ content: '\25cf';
2814
+ position: absolute;
2815
+ left: 8px;
2816
+ top: 8px;
2817
+ font-size: 10px;
2818
+ line-height: 1.5;
2819
+ z-index: 1;
2820
+ }
2821
+
2822
+ /* Default status - gray bullet */
2823
+ .thinking-message.thinking-status-default::before {
2824
+ color: var(--app-secondary-foreground);
2825
+ opacity: 0.6;
2826
+ }
2827
+
2828
+ /* Loading status - pulsing animation */
2829
+ .thinking-message.thinking-status-loading::before {
2830
+ color: var(--app-secondary-foreground);
2831
+ animation: thinkingPulse 1s linear infinite;
2832
+ }
2833
+
2834
+ /* Pulse animation for loading state */
2835
+ @keyframes thinkingPulse {
2836
+ 0%,
2837
+ 100% {
2838
+ opacity: 1;
2839
+ }
2840
+ 50% {
2841
+ opacity: 0.4;
2842
+ }
2843
+ }
2844
+
2845
+ /* Content wrapper */
2846
+ .thinking-content-wrapper {
2847
+ flex: 1;
2848
+ display: flex;
2849
+ flex-direction: column;
2850
+ gap: 8px;
2851
+ min-width: 0;
2852
+ max-width: 100%;
2853
+ }
2854
+
2855
+ /* Toggle button styles */
2856
+ .thinking-toggle-btn {
2857
+ display: inline-flex;
2858
+ align-items: center;
2859
+ gap: 4px;
2860
+ background: transparent;
2861
+ border: none;
2862
+ cursor: pointer;
2863
+ padding: 0;
2864
+ text-align: left;
2865
+ color: var(--app-secondary-foreground);
2866
+ line-height: 1;
2867
+ height: 15px;
2868
+ }
2869
+
2870
+ .thinking-toggle-btn:hover {
2871
+ opacity: 0.8;
2872
+ }
2873
+
2874
+ /* Thinking label text */
2875
+ .thinking-label {
2876
+ font-size: 14px;
2877
+ font-style: italic;
2878
+ color: var(--app-secondary-foreground);
2879
+ opacity: 0.8;
2880
+ line-height: 1;
2881
+ }
2882
+
2883
+ /* Chevron icon */
2884
+ .thinking-chevron {
2885
+ color: var(--app-tertiary-foreground, #666);
2886
+ opacity: 0.7;
2887
+ }
2888
+
2889
+ /* Expanded content area */
2890
+ .thinking-content {
2891
+ font-size: 13px;
2892
+ line-height: 1.5;
2893
+ color: var(--app-secondary-foreground);
2894
+ opacity: 0.8;
2895
+ white-space: pre-wrap;
2896
+ word-break: break-word;
2897
+ padding-left: 8px;
2898
+ margin-top: 4px;
2899
+ }
2900
+
2901
+ /* Fade in animation */
2902
+ @keyframes fadeIn {
2903
+ from {
2904
+ opacity: 0;
2905
+ }
2906
+ to {
2907
+ opacity: 1;
2908
+ }
2909
+ }
2910
+ /**
2911
+ * @license
2912
+ * Copyright 2025 Qwen Team
2913
+ * SPDX-License-Identifier: Apache-2.0
2914
+ *
2915
+ * AssistantMessage Component Styles
2916
+ * Pseudo-elements (::before) for bullet points and (::after) for timeline connectors
2917
+ */
2918
+
2919
+ /* Base assistant message styles */
2920
+ .assistant-message-container {
2921
+ position: relative;
2922
+ --timeline-center-offset: 13px;
2923
+ padding-left: 30px;
2924
+ padding-top: 8px;
2925
+ padding-bottom: 8px;
2926
+ border-radius: 6px;
2927
+ }
2928
+
2929
+ /*
2930
+ * Timeline positioning calculation (same as ToolCallContainer):
2931
+ * - Container padding-top: 8px
2932
+ * - Bullet font-size: 10px, line-height ~10px
2933
+ * - Bullet vertical center: 8px + 5px = 13px from top
2934
+ * - Line left: 12px (centered under bullet at left: 8px + ~4px offset)
2935
+ */
2936
+
2937
+ /* Bullet point indicator - all states use same position */
2938
+ .assistant-message-container.assistant-message-default::before,
2939
+ .assistant-message-container.assistant-message-success::before,
2940
+ .assistant-message-container.assistant-message-error::before,
2941
+ .assistant-message-container.assistant-message-warning::before,
2942
+ .assistant-message-container.assistant-message-loading::before {
2943
+ content: '\25cf';
2944
+ position: absolute;
2945
+ left: 8px;
2946
+ top: 8px;
2947
+ font-size: 10px;
2948
+ line-height: 20px;
2949
+ z-index: 1;
2950
+ }
2951
+
2952
+ /* Status colors */
2953
+ .assistant-message-container.assistant-message-default::before {
2954
+ color: var(--app-secondary-foreground);
2955
+ }
2956
+
2957
+ .assistant-message-container.assistant-message-success::before {
2958
+ color: #74c991;
2959
+ }
2960
+
2961
+ .assistant-message-container.assistant-message-error::before {
2962
+ color: #c74e39;
2963
+ }
2964
+
2965
+ .assistant-message-container.assistant-message-warning::before {
2966
+ color: #e1c08d;
2967
+ }
2968
+
2969
+ .assistant-message-container.assistant-message-loading::before {
2970
+ color: var(--app-secondary-foreground);
2971
+ animation: assistantPulse 1s linear infinite;
2972
+ }
2973
+
2974
+ @keyframes assistantPulse {
2975
+ 0%, 100% { opacity: 1; }
2976
+ 50% { opacity: 0.5; }
2977
+ }
2978
+
2979
+ /* Timeline connector line - full height by default */
2980
+ .assistant-message-container::after {
2981
+ content: '';
2982
+ position: absolute;
2983
+ left: 12px;
2984
+ top: 0;
2985
+ bottom: 0;
2986
+ width: 1px;
2987
+ background-color: var(--app-primary-border-color, rgba(255, 255, 255, 0.15));
2988
+ }
2989
+
2990
+ /* First item in sequence: connector starts from bullet center */
2991
+ .assistant-message-container:first-child::after {
2992
+ top: var(--timeline-center-offset, 13px);
2993
+ }
2994
+
2995
+ /* Last item in sequence: connector ends at bullet center */
2996
+ .assistant-message-container:last-child::after {
2997
+ bottom: calc(100% - var(--timeline-center-offset, 13px));
2998
+ }
2999
+
3000
+ /* Single item (both first and last): no connector */
3001
+ .assistant-message-container:first-child:last-child::after {
3002
+ display: none;
3003
+ }
3004
+
3005
+ /* Loading state doesn't show timeline */
3006
+ .assistant-message-container.assistant-message-loading::after {
3007
+ display: none;
3008
+ }
3009
+ /**
3010
+ * @license
3011
+ * Copyright 2025 Qwen Team
3012
+ * SPDX-License-Identifier: Apache-2.0
3013
+ *
3014
+ * LayoutComponents.css - Tool call layout styles with timeline support
3015
+ */
3016
+
3017
+ /* ToolCallContainer with timeline support */
3018
+ .toolcall-container {
3019
+ position: relative;
3020
+ --timeline-center-offset: 15px;
3021
+ padding-left: 30px;
3022
+ padding-top: 8px;
3023
+ padding-bottom: 8px;
3024
+ -webkit-user-select: text;
3025
+ -moz-user-select: text;
3026
+ user-select: text;
3027
+ align-items: flex-start;
3028
+ border-radius: 6px;
3029
+ }
3030
+
3031
+ /*
3032
+ * Timeline positioning calculation:
3033
+ * - Container padding-top: 8px
3034
+ * - Bullet font-size: 10px, line-height: 20px (to match content height)
3035
+ * - Bullet vertical center: 8px (container padding) + 2px (padding-top) + 5px (half of 10px bullet) = 15px from top
3036
+ * - Line left: 12px (centered under bullet at left: 8px + ~4px offset)
3037
+ */
3038
+
3039
+ /* Default timeline connector line - full height */
3040
+ .toolcall-container::after {
3041
+ content: '';
3042
+ position: absolute;
3043
+ left: 12px;
3044
+ top: 0;
3045
+ bottom: 0;
3046
+ width: 1px;
3047
+ background-color: var(--app-primary-border-color, rgba(255, 255, 255, 0.15));
3048
+ }
3049
+
3050
+ /* First item in sequence: connector starts from bullet center */
3051
+ .toolcall-container:first-child::after {
3052
+ top: var(--timeline-center-offset, 15px);
3053
+ }
3054
+
3055
+ /* Last item in sequence: connector ends at bullet center */
3056
+ .toolcall-container:last-child::after {
3057
+ bottom: calc(100% - var(--timeline-center-offset, 15px));
3058
+ }
3059
+
3060
+ /* Single item (both first and last): no connector */
3061
+ .toolcall-container:first-child:last-child::after {
3062
+ display: none;
3063
+ }
3064
+
3065
+ /*
3066
+ * Status bullet points - all use consistent positioning
3067
+ * Following the same calculation as AssistantMessage for consistency
3068
+ */
3069
+ .toolcall-container.toolcall-status-default::before,
3070
+ .toolcall-container.toolcall-status-success::before,
3071
+ .toolcall-container.toolcall-status-error::before,
3072
+ .toolcall-container.toolcall-status-warning::before,
3073
+ .toolcall-container.toolcall-status-loading::before {
3074
+ content: '\25cf';
3075
+ position: absolute;
3076
+ left: 8px;
3077
+ top: 8px;
3078
+ font-size: 10px;
3079
+ line-height: 1.5;
3080
+ z-index: 1;
3081
+ }
3082
+
3083
+ /* Status colors */
3084
+ .toolcall-container.toolcall-status-default::before {
3085
+ color: var(--app-secondary-foreground);
3086
+ }
3087
+
3088
+ .toolcall-container.toolcall-status-success::before {
3089
+ color: #74c991;
3090
+ }
3091
+
3092
+ .toolcall-container.toolcall-status-error::before {
3093
+ color: #c74e39;
3094
+ }
3095
+
3096
+ .toolcall-container.toolcall-status-warning::before {
3097
+ color: #e1c08d;
3098
+ }
3099
+
3100
+ .toolcall-container.toolcall-status-loading::before {
3101
+ color: var(--app-secondary-foreground);
3102
+ animation: toolcallPulse 1s linear infinite;
3103
+ }
3104
+
3105
+ /* Loading animation */
3106
+ @keyframes toolcallPulse {
3107
+ 0%,
3108
+ 100% {
3109
+ opacity: 1;
3110
+ }
3111
+ 50% {
3112
+ opacity: 0.5;
3113
+ }
3114
+ }
3115
+
3116
+ /* Content wrapper */
3117
+ .toolcall-content-wrapper {
3118
+ flex: 1;
3119
+ display: flex;
3120
+ flex-direction: column;
3121
+ gap: 6px;
3122
+ min-width: 0;
3123
+ max-width: 100%;
3124
+ }
3125
+
3126
+ /* Legacy card styles */
3127
+ .toolcall-card {
3128
+ grid-template-columns: auto 1fr;
3129
+ gap: var(--spacing-medium);
3130
+ background: var(--app-input-background);
3131
+ border: 1px solid var(--app-input-border);
3132
+ border-radius: var(--border-radius-medium);
3133
+ padding: var(--spacing-large);
3134
+ margin: var(--spacing-medium) 0;
3135
+ align-items: start;
3136
+ animation: fadeIn 0.2s ease-in;
3137
+ }
3138
+
3139
+ /* Legacy row styles */
3140
+ .toolcall-row {
3141
+ grid-template-columns: 80px 1fr;
3142
+ gap: var(--spacing-medium);
3143
+ min-width: 0;
3144
+ }
3145
+
3146
+ .toolcall-row-label {
3147
+ font-size: var(--font-size-xs);
3148
+ color: var(--app-secondary-foreground);
3149
+ font-weight: 500;
3150
+ padding-top: 2px;
3151
+ }
3152
+
3153
+ .toolcall-row-content {
3154
+ color: var(--app-primary-foreground);
3155
+ min-width: 0;
3156
+ word-break: break-word;
3157
+ }
3158
+
3159
+ /* Locations list */
3160
+ .toolcall-locations-list {
3161
+ display: flex;
3162
+ flex-direction: column;
3163
+ gap: 4px;
3164
+ max-width: 100%;
3165
+ }
3166
+
3167
+ /* ToolCall header with loading indicator */
3168
+ .toolcall-header {
3169
+ position: relative;
3170
+ }
3171
+
3172
+ .toolcall-header::before {
3173
+ content: '\25cf';
3174
+ position: absolute;
3175
+ left: -22px;
3176
+ top: 50%;
3177
+ transform: translateY(-50%);
3178
+ font-size: 10px;
3179
+ line-height: 1;
3180
+ z-index: 1;
3181
+ color: #e1c08d;
3182
+ animation: toolcallHeaderPulse 1.5s ease-in-out infinite;
3183
+ }
3184
+
3185
+ /* Loading animation for toolcall header */
3186
+ @keyframes toolcallHeaderPulse {
3187
+ 0%,
3188
+ 100% {
3189
+ opacity: 1;
3190
+ }
3191
+ 50% {
3192
+ opacity: 0.5;
3193
+ }
3194
+ }
3195
+
3196
+ /* In-progress toolcall specific styles */
3197
+ .in-progress-toolcall .toolcall-content-wrapper {
3198
+ display: flex;
3199
+ flex-direction: column;
3200
+ gap: 1;
3201
+ min-width: 0;
3202
+ max-width: 100%;
3203
+ }
3204
+
3205
+ .in-progress-toolcall .toolcall-header {
3206
+ display: flex;
3207
+ align-items: center;
3208
+ gap: 2;
3209
+ position: relative;
3210
+ min-width: 0;
3211
+ }
3212
+
3213
+ .in-progress-toolcall .toolcall-content-text {
3214
+ word-break: break-word;
3215
+ white-space: pre-wrap;
3216
+ width: 100%;
3217
+ }
3218
+ /**
3219
+ * @license
3220
+ * Copyright 2025 Qwen Team
3221
+ * SPDX-License-Identifier: Apache-2.0
3222
+ *
3223
+ * Shell tool call styles - shared styles for bash/execute variants
3224
+ */
3225
+
3226
+ /**
3227
+ * Bash variant styles (class prefix: bash-*)
3228
+ */
3229
+ .bash-toolcall-card {
3230
+ border: 0.5px solid var(--app-input-border);
3231
+ border-radius: 5px;
3232
+ background: var(--app-tool-background);
3233
+ margin: 8px 0;
3234
+ max-width: 100%;
3235
+ font-size: 1em;
3236
+ align-items: start;
3237
+ }
3238
+
3239
+ .bash-toolcall-content {
3240
+ display: flex;
3241
+ flex-direction: column;
3242
+ gap: 3px;
3243
+ padding: 4px;
3244
+ }
3245
+
3246
+ .bash-toolcall-row {
3247
+ display: grid;
3248
+ grid-template-columns: max-content 1fr;
3249
+ border-top: 0.5px solid var(--app-input-border);
3250
+ padding: 4px;
3251
+ }
3252
+
3253
+ .bash-toolcall-row:first-child {
3254
+ border-top: none;
3255
+ }
3256
+
3257
+ .bash-toolcall-label {
3258
+ grid-column: 1;
3259
+ color: var(--app-secondary-foreground);
3260
+ text-align: left;
3261
+ opacity: 50%;
3262
+ padding: 4px 8px 4px 4px;
3263
+ font-family: var(--app-font-mono);
3264
+ font-size: 0.85em;
3265
+ }
3266
+
3267
+ .bash-toolcall-row-content {
3268
+ grid-column: 2;
3269
+ white-space: pre-wrap;
3270
+ word-break: break-word;
3271
+ margin: 0;
3272
+ padding: 4px;
3273
+ }
3274
+
3275
+ .bash-toolcall-row-content:not(.bash-toolcall-full) {
3276
+ max-height: 60px;
3277
+ -webkit-mask-image: linear-gradient(
3278
+ to bottom,
3279
+ var(--app-primary-background) 40px,
3280
+ transparent 60px
3281
+ );
3282
+ mask-image: linear-gradient(
3283
+ to bottom,
3284
+ var(--app-primary-background) 40px,
3285
+ transparent 60px
3286
+ );
3287
+ overflow: hidden;
3288
+ }
3289
+
3290
+ .bash-toolcall-pre {
3291
+ margin-block: 0;
3292
+ overflow: hidden;
3293
+ font-family: var(--app-font-mono);
3294
+ font-size: 0.85em;
3295
+ }
3296
+
3297
+ .bash-toolcall-code {
3298
+ margin: 0;
3299
+ padding: 0;
3300
+ font-family: var(--app-font-mono);
3301
+ font-size: 0.85em;
3302
+ }
3303
+
3304
+ .bash-toolcall-output-subtle {
3305
+ background-color: var(--app-code-background);
3306
+ white-space: pre;
3307
+ overflow-x: auto;
3308
+ max-width: 100%;
3309
+ min-width: 0;
3310
+ width: 100%;
3311
+ box-sizing: border-box;
3312
+ }
3313
+
3314
+ .bash-toolcall-error-content {
3315
+ color: #c74e39;
3316
+ }
3317
+
3318
+ .bash-toolcall-row-with-copy {
3319
+ position: relative;
3320
+ grid-template-columns: max-content 1fr max-content;
3321
+ }
3322
+
3323
+ /**
3324
+ * Execute variant styles (class prefix: execute-*)
3325
+ */
3326
+ .execute-toolcall-card {
3327
+ border: 0.5px solid var(--app-input-border);
3328
+ border-radius: 5px;
3329
+ background: var(--app-tool-background);
3330
+ margin: 8px 0;
3331
+ max-width: 100%;
3332
+ font-size: 1em;
3333
+ align-items: start;
3334
+ }
3335
+
3336
+ .execute-toolcall-content {
3337
+ display: flex;
3338
+ flex-direction: column;
3339
+ gap: 3px;
3340
+ padding: 4px;
3341
+ }
3342
+
3343
+ .execute-toolcall-row {
3344
+ display: grid;
3345
+ grid-template-columns: max-content 1fr;
3346
+ border-top: 0.5px solid var(--app-input-border);
3347
+ padding: 4px;
3348
+ }
3349
+
3350
+ .execute-toolcall-row:first-child {
3351
+ border-top: none;
3352
+ }
3353
+
3354
+ .execute-toolcall-label {
3355
+ grid-column: 1;
3356
+ color: var(--app-secondary-foreground);
3357
+ text-align: left;
3358
+ opacity: 50%;
3359
+ padding: 4px 8px 4px 4px;
3360
+ font-family: var(--app-font-mono);
3361
+ font-size: 0.85em;
3362
+ }
3363
+
3364
+ .execute-toolcall-row-content {
3365
+ grid-column: 2;
3366
+ white-space: pre-wrap;
3367
+ word-break: break-word;
3368
+ margin: 0;
3369
+ padding: 4px;
3370
+ }
3371
+
3372
+ .execute-toolcall-row-content:not(.execute-toolcall-full) {
3373
+ max-height: 60px;
3374
+ -webkit-mask-image: linear-gradient(
3375
+ to bottom,
3376
+ var(--app-primary-background) 40px,
3377
+ transparent 60px
3378
+ );
3379
+ mask-image: linear-gradient(
3380
+ to bottom,
3381
+ var(--app-primary-background) 40px,
3382
+ transparent 60px
3383
+ );
3384
+ overflow: hidden;
3385
+ }
3386
+
3387
+ .execute-toolcall-pre {
3388
+ margin-block: 0;
3389
+ overflow: hidden;
3390
+ font-family: var(--app-font-mono);
3391
+ font-size: 0.85em;
3392
+ }
3393
+
3394
+ .execute-toolcall-code {
3395
+ margin: 0;
3396
+ padding: 0;
3397
+ font-family: var(--app-font-mono);
3398
+ font-size: 0.85em;
3399
+ }
3400
+
3401
+ .execute-toolcall-output-subtle {
3402
+ white-space: pre;
3403
+ overflow-x: auto;
3404
+ max-width: 100%;
3405
+ min-width: 0;
3406
+ width: 100%;
3407
+ box-sizing: border-box;
3408
+ }
3409
+
3410
+ .execute-toolcall-error-content {
3411
+ color: #c74e39;
3412
+ }
3413
+
3414
+ .execute-toolcall-row-with-copy {
3415
+ position: relative;
3416
+ grid-template-columns: max-content 1fr max-content;
3417
+ }
3418
+ /**
3419
+ * @license
3420
+ * Copyright 2025 Qwen Team
3421
+ * SPDX-License-Identifier: Apache-2.0
3422
+ *
3423
+ * ChatViewer component styles - matching vscode-ide-companion visual appearance
3424
+ * Note: Timeline styles are inherited from shared styles/timeline.css
3425
+ */
3426
+
3427
+ /* ===========================
3428
+ Main Chat Viewer Container
3429
+ =========================== */
3430
+ .chat-viewer-container {
3431
+ display: flex;
3432
+ flex-direction: column;
3433
+ width: 100%;
3434
+ height: 100%;
3435
+ background-color: var(--app-background, var(--app-primary-background, #1e1e1e));
3436
+ color: var(--app-primary-foreground, #cccccc);
3437
+ font-family: var(--vscode-chat-font-family, var(--vscode-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif));
3438
+ font-size: var(--vscode-chat-font-size, 13px);
3439
+ overflow: hidden;
3440
+ }
3441
+
3442
+ /* ===========================
3443
+ Messages Container (scrollable)
3444
+ =========================== */
3445
+ .chat-viewer-messages {
3446
+ flex: 1;
3447
+ overflow-y: auto;
3448
+ overflow-x: hidden;
3449
+ padding: 20px;
3450
+ display: flex;
3451
+ flex-direction: column;
3452
+ position: relative;
3453
+ min-width: 0;
3454
+ /* Enable smooth scrolling for auto-scroll */
3455
+ scroll-behavior: smooth;
3456
+ }
3457
+
3458
+ /* Dark theme scrollbar styling */
3459
+ .chat-viewer-messages::-webkit-scrollbar {
3460
+ width: 8px;
3461
+ }
3462
+
3463
+ .chat-viewer-messages::-webkit-scrollbar-track {
3464
+ background: transparent;
3465
+ }
3466
+
3467
+ .chat-viewer-messages::-webkit-scrollbar-thumb {
3468
+ background: rgba(255, 255, 255, 0.2);
3469
+ border-radius: 4px;
3470
+ }
3471
+
3472
+ .chat-viewer-messages::-webkit-scrollbar-thumb:hover {
3473
+ background: rgba(255, 255, 255, 0.3);
3474
+ }
3475
+
3476
+ /* Light theme scrollbar styling */
3477
+ @media (prefers-color-scheme: light) {
3478
+ .chat-viewer-container.auto-theme .chat-viewer-messages::-webkit-scrollbar-thumb {
3479
+ background: rgba(0, 0, 0, 0.2);
3480
+ }
3481
+
3482
+ .chat-viewer-container.auto-theme .chat-viewer-messages::-webkit-scrollbar-thumb:hover {
3483
+ background: rgba(0, 0, 0, 0.3);
3484
+ }
3485
+ }
3486
+
3487
+ /* Force light theme scrollbar */
3488
+ .chat-viewer-container.light-theme .chat-viewer-messages::-webkit-scrollbar-thumb {
3489
+ background: rgba(0, 0, 0, 0.2);
3490
+ }
3491
+
3492
+ .chat-viewer-container.light-theme .chat-viewer-messages::-webkit-scrollbar-thumb:hover {
3493
+ background: rgba(0, 0, 0, 0.3);
3494
+ }
3495
+
3496
+ /* Message item base styles */
3497
+ .chat-viewer-messages > * {
3498
+ display: flex;
3499
+ gap: 0;
3500
+ align-items: flex-start;
3501
+ text-align: left;
3502
+ padding-top: 8px;
3503
+ padding-bottom: 8px;
3504
+ flex-direction: column;
3505
+ position: relative;
3506
+ animation: chatViewerFadeIn 0.2s ease-in;
3507
+ }
3508
+
3509
+ .chat-viewer-messages > .chat-viewer-scroll-anchor {
3510
+ padding: 0;
3511
+ display: block;
3512
+ }
3513
+
3514
+ /* Disable overflow anchoring on individual items for manual scroll control */
3515
+ .chat-viewer-messages > * {
3516
+ overflow-anchor: none;
3517
+ }
3518
+
3519
+ /* User message container spacing */
3520
+ .chat-viewer-messages .user-message-container:first-child {
3521
+ margin-top: 0;
3522
+ }
3523
+
3524
+ /* ===========================
3525
+ Animations
3526
+ =========================== */
3527
+ @keyframes chatViewerFadeIn {
3528
+ from {
3529
+ opacity: 0;
3530
+ transform: translateY(10px);
3531
+ }
3532
+ to {
3533
+ opacity: 1;
3534
+ transform: translateY(0);
3535
+ }
3536
+ }
3537
+
3538
+ /* ===========================
3539
+ Empty State
3540
+ =========================== */
3541
+ .chat-viewer-empty {
3542
+ display: flex;
3543
+ flex-direction: column;
3544
+ align-items: center;
3545
+ justify-content: center;
3546
+ height: 100%;
3547
+ min-height: 200px;
3548
+ color: var(--app-secondary-foreground, rgba(255, 255, 255, 0.6));
3549
+ font-size: 14px;
3550
+ text-align: center;
3551
+ padding: 20px;
3552
+ }
3553
+
3554
+ .chat-viewer-empty-icon {
3555
+ font-size: 48px;
3556
+ margin-bottom: 16px;
3557
+ opacity: 0.5;
3558
+ }
3559
+
3560
+ .chat-viewer-empty-text {
3561
+ max-width: 300px;
3562
+ line-height: 1.5;
3563
+ }
3564
+
3565
+ /* ===========================
3566
+ Scroll Anchor (for auto-scroll)
3567
+ =========================== */
3568
+ .chat-viewer-scroll-anchor {
3569
+ height: 1px;
3570
+ overflow-anchor: auto;
3571
+ }
3572
+
3573
+ /* ===========================
3574
+ ChatViewer-specific Styles
3575
+ =========================== */
3576
+
3577
+ /* Better spacing between message groups */
3578
+ .chat-viewer-messages .user-message-container {
3579
+ margin-top: 16px;
3580
+ }
3581
+
3582
+ /* Ensure proper stacking context */
3583
+ .chat-viewer-messages > * {
3584
+ isolation: isolate;
3585
+ }
3586
+
3587
+ /* Responsive adjustments for ChatViewer */
3588
+ @media (max-width: 600px) {
3589
+ .chat-viewer-messages {
3590
+ padding: 12px;
3591
+ }
3592
+ }