@springbrand/message-panel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/demo/camel-chat-showcase.tsx +1265 -0
  2. package/demo/fixtures.ts +292 -0
  3. package/demo/index.ts +4 -0
  4. package/demo/message-panel-chat-showcase.tsx +250 -0
  5. package/demo/message-panel-gallery.tsx +389 -0
  6. package/package.json +44 -0
  7. package/src/adapters/ai-sdk.ts +32 -0
  8. package/src/camel/camel-chat-messages.tsx +1420 -0
  9. package/src/camel/camel-model-select.tsx +88 -0
  10. package/src/camel/camel-plan-bar.tsx +115 -0
  11. package/src/camel/camel-prompt-input.tsx +540 -0
  12. package/src/camel/camel-tool-presentation.tsx +1270 -0
  13. package/src/camel/camel-turn.ts +315 -0
  14. package/src/camel/index.ts +7 -0
  15. package/src/camel/turn-summary-bar.tsx +81 -0
  16. package/src/chat-summary-panel.tsx +229 -0
  17. package/src/composer/chat-composer.tsx +216 -0
  18. package/src/composer/composer-attachments.tsx +138 -0
  19. package/src/composer/composer-trigger-popover.tsx +236 -0
  20. package/src/composer/composer.tsx +425 -0
  21. package/src/composer/drop-controller.ts +80 -0
  22. package/src/composer/index.ts +6 -0
  23. package/src/composer/types.ts +79 -0
  24. package/src/contracts.ts +139 -0
  25. package/src/conversation.tsx +76 -0
  26. package/src/index.ts +12 -0
  27. package/src/internal/cn.ts +3 -0
  28. package/src/message-panel.tsx +368 -0
  29. package/src/message.tsx +254 -0
  30. package/src/parts/index.tsx +1149 -0
  31. package/src/parts/kind.ts +67 -0
  32. package/src/parts/plan.ts +63 -0
  33. package/src/parts/primitives.tsx +439 -0
  34. package/src/registry.ts +44 -0
  35. package/src/status.tsx +132 -0
  36. package/src/styles/camel-chat.css +36 -0
  37. package/src/styles/index.css +2186 -0
  38. package/src/styles/tokens.css +31 -0
@@ -0,0 +1,2186 @@
1
+ @import "./tokens.css";
2
+ @import "./camel-chat.css";
3
+
4
+ @keyframes sb-message-dot {
5
+ 0%,
6
+ 60%,
7
+ 100% {
8
+ opacity: 0.35;
9
+ transform: translateY(0);
10
+ }
11
+ 30% {
12
+ opacity: 1;
13
+ transform: translateY(-3px);
14
+ }
15
+ }
16
+
17
+ @keyframes sb-message-spin {
18
+ to {
19
+ transform: rotate(360deg);
20
+ }
21
+ }
22
+
23
+ @keyframes sb-message-bar {
24
+ 0% {
25
+ left: -35%;
26
+ width: 35%;
27
+ }
28
+ 60% {
29
+ left: 42%;
30
+ width: 58%;
31
+ }
32
+ 100% {
33
+ left: 100%;
34
+ width: 20%;
35
+ }
36
+ }
37
+
38
+ @keyframes sb-message-bar-done {
39
+ 0% {
40
+ left: 0;
41
+ width: 60%;
42
+ opacity: 1;
43
+ }
44
+ 70% {
45
+ left: 0;
46
+ width: 100%;
47
+ opacity: 1;
48
+ }
49
+ 100% {
50
+ left: 0;
51
+ width: 100%;
52
+ opacity: 0;
53
+ }
54
+ }
55
+
56
+ @keyframes sb-message-shimmer {
57
+ 0% {
58
+ background-position: 200% 0;
59
+ }
60
+ 100% {
61
+ background-position: -200% 0;
62
+ }
63
+ }
64
+
65
+ .sb-message-panel {
66
+ position: relative;
67
+ display: flex;
68
+ min-height: 0;
69
+ flex: 1 1 auto;
70
+ flex-direction: column;
71
+ overflow: hidden;
72
+ color: var(--mp-foreground);
73
+ background: var(--mp-background);
74
+ font-family: var(--mp-font-sans);
75
+ font-size: 14px;
76
+ }
77
+
78
+ .sb-top-loading {
79
+ position: absolute;
80
+ z-index: 20;
81
+ top: 0;
82
+ right: 0;
83
+ left: 0;
84
+ height: 2px;
85
+ overflow: hidden;
86
+ pointer-events: none;
87
+ }
88
+
89
+ .sb-top-loading > span {
90
+ position: absolute;
91
+ inset-block: 0;
92
+ border-radius: 999px;
93
+ background: var(--mp-primary);
94
+ }
95
+
96
+ .sb-top-loading > span[data-phase="loading"] {
97
+ animation: sb-message-bar 1.2s infinite ease-in-out;
98
+ }
99
+
100
+ .sb-top-loading > span[data-phase="done"] {
101
+ animation: sb-message-bar-done 0.4s forwards ease-out;
102
+ }
103
+
104
+ .sb-panel-status {
105
+ display: flex;
106
+ align-items: center;
107
+ justify-content: center;
108
+ gap: 7px;
109
+ min-height: 28px;
110
+ padding: 5px 12px;
111
+ border-bottom: 1px solid var(--mp-border);
112
+ color: var(--mp-muted-foreground);
113
+ background: color-mix(in srgb, var(--mp-card) 88%, transparent);
114
+ font-size: 12px;
115
+ }
116
+
117
+ .sb-panel-status > span:first-child {
118
+ width: 7px;
119
+ height: 7px;
120
+ border-radius: 50%;
121
+ background: var(--mp-primary);
122
+ animation: sb-message-dot 1.2s infinite ease-in-out;
123
+ }
124
+
125
+ .sb-panel-status[data-kind="error"] {
126
+ color: var(--mp-destructive);
127
+ }
128
+
129
+ .sb-panel-status[data-kind="error"] > span:first-child {
130
+ background: var(--mp-destructive);
131
+ animation: none;
132
+ }
133
+
134
+ .sb-conversation {
135
+ position: relative;
136
+ display: flex;
137
+ min-height: 0;
138
+ flex: 1 1 auto;
139
+ overflow: hidden;
140
+ }
141
+
142
+ .sb-conversation__content {
143
+ display: flex;
144
+ width: min(100%, 800px);
145
+ margin-inline: auto;
146
+ flex-direction: column;
147
+ gap: 12px;
148
+ padding: 20px 32px 40px;
149
+ }
150
+
151
+ .sb-conversation__empty {
152
+ display: flex;
153
+ min-height: 280px;
154
+ flex: 1;
155
+ align-items: center;
156
+ justify-content: center;
157
+ flex-direction: column;
158
+ gap: 9px;
159
+ padding: 36px;
160
+ color: var(--mp-muted-foreground);
161
+ text-align: center;
162
+ }
163
+
164
+ .sb-conversation__empty strong {
165
+ color: var(--mp-foreground);
166
+ font-size: 14px;
167
+ }
168
+
169
+ .sb-conversation__empty p {
170
+ max-width: 430px;
171
+ margin: 0;
172
+ line-height: 1.55;
173
+ }
174
+
175
+ .sb-conversation__scroll {
176
+ position: absolute;
177
+ right: 50%;
178
+ bottom: 14px;
179
+ display: grid;
180
+ width: 34px;
181
+ height: 34px;
182
+ translate: 50% 0;
183
+ place-items: center;
184
+ border: 1px solid var(--mp-border);
185
+ border-radius: 50%;
186
+ color: var(--mp-foreground);
187
+ background: var(--mp-card);
188
+ box-shadow: 0 7px 24px rgb(0 0 0 / 18%);
189
+ }
190
+
191
+ .sb-hydrating-overlay {
192
+ position: absolute;
193
+ z-index: 15;
194
+ inset: 0;
195
+ display: grid;
196
+ place-items: center;
197
+ background: color-mix(in srgb, var(--mp-background) 86%, transparent);
198
+ backdrop-filter: blur(2px);
199
+ }
200
+
201
+ .sb-message {
202
+ display: flex;
203
+ width: min(95%, 720px);
204
+ flex-direction: column;
205
+ gap: 8px;
206
+ }
207
+
208
+ .sb-message--user {
209
+ margin-block-start: 16px;
210
+ margin-inline-start: auto;
211
+ align-items: flex-end;
212
+ }
213
+
214
+ .sb-message--assistant {
215
+ align-items: flex-start;
216
+ }
217
+
218
+ .sb-message__content {
219
+ display: flex;
220
+ min-width: 0;
221
+ max-width: 100%;
222
+ flex-direction: column;
223
+ gap: 10px;
224
+ overflow: hidden;
225
+ color: var(--mp-foreground);
226
+ }
227
+
228
+ .sb-message--user .sb-message__content {
229
+ width: fit-content;
230
+ margin-inline-start: auto;
231
+ padding: 9px 14px;
232
+ border-radius: calc(var(--mp-radius) + 2px);
233
+ background: color-mix(in srgb, var(--mp-muted) 84%, var(--mp-card));
234
+ white-space: pre-wrap;
235
+ }
236
+
237
+ .sb-assistant-header {
238
+ display: flex;
239
+ align-items: center;
240
+ gap: 8px;
241
+ color: var(--mp-muted-foreground);
242
+ font-size: 12px;
243
+ font-weight: 600;
244
+ }
245
+
246
+ .sb-brand-mark {
247
+ position: relative;
248
+ display: inline-flex;
249
+ width: 24px;
250
+ height: 24px;
251
+ align-items: center;
252
+ justify-content: center;
253
+ gap: 2px;
254
+ border: 1px solid color-mix(in srgb, var(--mp-primary) 32%, var(--mp-border));
255
+ border-radius: 8px;
256
+ background: color-mix(in srgb, var(--mp-primary) 10%, var(--mp-card));
257
+ }
258
+
259
+ .sb-brand-mark > span {
260
+ display: block;
261
+ width: 3px;
262
+ border-radius: 999px;
263
+ background: var(--mp-primary);
264
+ }
265
+
266
+ .sb-brand-mark > span:nth-child(1) {
267
+ height: 7px;
268
+ }
269
+
270
+ .sb-brand-mark > span:nth-child(2) {
271
+ height: 12px;
272
+ }
273
+
274
+ .sb-brand-mark > span:nth-child(3) {
275
+ height: 5px;
276
+ }
277
+
278
+ .sb-brand-mark--large {
279
+ width: 54px;
280
+ height: 54px;
281
+ border-radius: 16px;
282
+ }
283
+
284
+ .sb-brand-mark--large > span {
285
+ width: 4px;
286
+ }
287
+
288
+ .sb-brand-mark--large > span:nth-child(1) {
289
+ height: 14px;
290
+ }
291
+
292
+ .sb-brand-mark--large > span:nth-child(2) {
293
+ height: 24px;
294
+ }
295
+
296
+ .sb-brand-mark--large > span:nth-child(3) {
297
+ height: 10px;
298
+ }
299
+
300
+ .sb-message__actions {
301
+ display: flex;
302
+ align-items: center;
303
+ gap: 2px;
304
+ opacity: 0;
305
+ transition: opacity 150ms ease;
306
+ }
307
+
308
+ .sb-message:hover .sb-message__actions,
309
+ .sb-message__actions:focus-within {
310
+ opacity: 1;
311
+ }
312
+
313
+ .sb-message__action,
314
+ .sb-link-button {
315
+ display: inline-flex;
316
+ min-width: 30px;
317
+ min-height: 30px;
318
+ align-items: center;
319
+ justify-content: center;
320
+ gap: 6px;
321
+ padding: 6px;
322
+ border: 0;
323
+ border-radius: 8px;
324
+ color: var(--mp-muted-foreground);
325
+ background: transparent;
326
+ }
327
+
328
+ .sb-message__action:hover,
329
+ .sb-link-button:hover {
330
+ color: var(--mp-foreground);
331
+ background: var(--mp-muted);
332
+ }
333
+
334
+ .sb-notice-line {
335
+ width: fit-content;
336
+ max-width: 100%;
337
+ padding: 8px 12px;
338
+ border-radius: 7px;
339
+ color: var(--mp-muted-foreground);
340
+ background: var(--mp-muted);
341
+ font-size: 12px;
342
+ white-space: pre-wrap;
343
+ }
344
+
345
+ .sb-message-response {
346
+ width: 100%;
347
+ color: var(--mp-foreground);
348
+ font-family: var(--mp-font-sans);
349
+ font-size: 14px;
350
+ line-height: 1.7;
351
+ overflow-wrap: anywhere;
352
+ }
353
+
354
+ .sb-thinking {
355
+ display: flex;
356
+ align-items: center;
357
+ gap: 8px;
358
+ min-height: 28px;
359
+ color: var(--mp-muted-foreground);
360
+ font-size: 12px;
361
+ }
362
+
363
+ .sb-reasoning {
364
+ width: 100%;
365
+ margin-block: 2px;
366
+ }
367
+
368
+ .sb-reasoning__trigger {
369
+ display: flex;
370
+ align-items: center;
371
+ gap: 7px;
372
+ padding: 4px 0;
373
+ border: 0;
374
+ color: var(--mp-muted-foreground);
375
+ background: transparent;
376
+ font: inherit;
377
+ font-size: 13px;
378
+ }
379
+
380
+ .sb-reasoning__trigger svg:last-child {
381
+ transition: rotate 180ms ease;
382
+ }
383
+
384
+ .sb-reasoning__trigger[aria-expanded="true"] svg:last-child {
385
+ rotate: 180deg;
386
+ }
387
+
388
+ .sb-reasoning__content {
389
+ margin: 6px 0 3px 7px;
390
+ padding-inline-start: 12px;
391
+ border-inline-start: 1px solid var(--mp-border);
392
+ color: var(--mp-muted-foreground);
393
+ }
394
+
395
+ .sb-reasoning__content .sb-message-response {
396
+ color: var(--mp-muted-foreground);
397
+ font-size: 13px;
398
+ }
399
+
400
+ .sb-plan,
401
+ .sb-parallel,
402
+ .sb-confirmation,
403
+ .sb-chart,
404
+ .sb-agent-card,
405
+ .sb-dashboard,
406
+ .sb-schedule,
407
+ .sb-error-part {
408
+ width: 100%;
409
+ border: 1px solid var(--mp-border);
410
+ border-radius: calc(var(--mp-radius) + 2px);
411
+ background: var(--mp-card);
412
+ }
413
+
414
+ .sb-parallel > summary {
415
+ display: flex;
416
+ min-height: 42px;
417
+ align-items: center;
418
+ justify-content: space-between;
419
+ gap: 12px;
420
+ padding: 9px 12px;
421
+ list-style: none;
422
+ user-select: none;
423
+ }
424
+
425
+ .sb-parallel > summary::-webkit-details-marker {
426
+ display: none;
427
+ }
428
+
429
+ [data-tone="success"] {
430
+ color: var(--mp-success);
431
+ }
432
+
433
+ .sb-terminal {
434
+ max-height: 260px;
435
+ margin: 0;
436
+ padding: 10px;
437
+ overflow: auto;
438
+ border-radius: 8px;
439
+ color: var(--mp-foreground);
440
+ background: var(--mp-muted);
441
+ font-family: var(--mp-font-mono);
442
+ font-size: 11px;
443
+ line-height: 1.55;
444
+ white-space: pre-wrap;
445
+ }
446
+
447
+ .sb-terminal[data-error="true"] {
448
+ color: var(--mp-destructive);
449
+ background: color-mix(in srgb, var(--mp-destructive) 9%, var(--mp-card));
450
+ }
451
+
452
+ .sb-tool-results {
453
+ display: grid;
454
+ gap: 7px;
455
+ margin: 0;
456
+ padding: 0;
457
+ list-style: none;
458
+ }
459
+
460
+ .sb-tool-results li {
461
+ display: flex;
462
+ min-width: 0;
463
+ align-items: center;
464
+ gap: 7px;
465
+ color: var(--mp-muted-foreground);
466
+ }
467
+
468
+ .sb-tool-results li span {
469
+ min-width: 0;
470
+ flex: 1;
471
+ overflow: hidden;
472
+ color: var(--mp-foreground);
473
+ text-overflow: ellipsis;
474
+ white-space: nowrap;
475
+ }
476
+
477
+ .sb-error-part {
478
+ display: flex;
479
+ gap: 10px;
480
+ padding: 12px;
481
+ border-color: color-mix(in srgb, var(--mp-destructive) 35%, var(--mp-border));
482
+ color: var(--mp-destructive);
483
+ background: color-mix(in srgb, var(--mp-destructive) 8%, var(--mp-card));
484
+ }
485
+
486
+ .sb-error-part p {
487
+ margin: 4px 0 0;
488
+ color: color-mix(in srgb, var(--mp-destructive) 80%, var(--mp-foreground));
489
+ }
490
+
491
+ .sb-image-part {
492
+ display: grid;
493
+ gap: 6px;
494
+ width: min(100%, 560px);
495
+ margin: 0;
496
+ }
497
+
498
+ .sb-image-part button {
499
+ position: relative;
500
+ display: block;
501
+ padding: 0;
502
+ overflow: hidden;
503
+ border: 1px solid var(--mp-border);
504
+ border-radius: calc(var(--mp-radius) + 6px);
505
+ background: var(--mp-muted);
506
+ }
507
+
508
+ .sb-image-part img {
509
+ display: block;
510
+ width: 100%;
511
+ height: auto;
512
+ }
513
+
514
+ .sb-image-part button > svg {
515
+ position: absolute;
516
+ right: 10px;
517
+ top: 10px;
518
+ padding: 6px;
519
+ box-sizing: content-box;
520
+ border-radius: 8px;
521
+ color: white;
522
+ background: rgb(0 0 0 / 45%);
523
+ }
524
+
525
+ .sb-image-part figcaption {
526
+ color: var(--mp-muted-foreground);
527
+ font-size: 12px;
528
+ }
529
+
530
+ .sb-chart {
531
+ padding: 14px;
532
+ }
533
+
534
+ .sb-chart > header,
535
+ .sb-agent-card > div:first-of-type {
536
+ display: flex;
537
+ align-items: center;
538
+ justify-content: space-between;
539
+ gap: 10px;
540
+ }
541
+
542
+ .sb-chart > header > span {
543
+ display: flex;
544
+ align-items: center;
545
+ gap: 8px;
546
+ }
547
+
548
+ .sb-chart button,
549
+ .sb-agent-card button,
550
+ .sb-file-part button,
551
+ .sb-file-part a {
552
+ display: grid;
553
+ width: 30px;
554
+ height: 30px;
555
+ place-items: center;
556
+ border: 0;
557
+ border-radius: 8px;
558
+ color: var(--mp-muted-foreground);
559
+ background: transparent;
560
+ }
561
+
562
+ .sb-chart button:hover,
563
+ .sb-agent-card button:hover,
564
+ .sb-file-part button:hover,
565
+ .sb-file-part a:hover {
566
+ color: var(--mp-foreground);
567
+ background: var(--mp-muted);
568
+ }
569
+
570
+ .sb-chart__plot {
571
+ display: flex;
572
+ height: 180px;
573
+ align-items: stretch;
574
+ gap: 8px;
575
+ margin-top: 14px;
576
+ }
577
+
578
+ .sb-chart__bar-group {
579
+ display: grid;
580
+ min-width: 0;
581
+ flex: 1;
582
+ grid-template-rows: 20px 1fr 34px;
583
+ align-items: end;
584
+ text-align: center;
585
+ }
586
+
587
+ .sb-chart__bar-group > span {
588
+ color: var(--mp-muted-foreground);
589
+ font-size: 10px;
590
+ }
591
+
592
+ .sb-chart__bar-group > i {
593
+ display: block;
594
+ width: min(100%, 42px);
595
+ height: var(--sb-bar-height);
596
+ min-height: 3px;
597
+ margin-inline: auto;
598
+ border-radius: 7px 7px 2px 2px;
599
+ background: linear-gradient(var(--mp-primary), color-mix(in srgb, var(--mp-primary) 60%, transparent));
600
+ }
601
+
602
+ .sb-chart__bar-group > small {
603
+ align-self: start;
604
+ padding-top: 5px;
605
+ overflow: hidden;
606
+ color: var(--mp-muted-foreground);
607
+ font-size: 10px;
608
+ text-overflow: ellipsis;
609
+ }
610
+
611
+ .sb-agent-card {
612
+ padding: 14px;
613
+ }
614
+
615
+ .sb-agent-card > small {
616
+ color: var(--mp-muted-foreground);
617
+ }
618
+
619
+ .sb-agent-card > div {
620
+ display: flex;
621
+ align-items: center;
622
+ gap: 10px;
623
+ margin-top: 10px;
624
+ }
625
+
626
+ .sb-agent-card__icon {
627
+ display: grid;
628
+ width: 42px;
629
+ height: 42px;
630
+ flex: 0 0 auto;
631
+ place-items: center;
632
+ border-radius: 13px;
633
+ color: var(--mp-primary);
634
+ background: color-mix(in srgb, var(--mp-primary) 12%, var(--mp-muted));
635
+ }
636
+
637
+ .sb-agent-card > div > div {
638
+ min-width: 0;
639
+ flex: 1;
640
+ }
641
+
642
+ .sb-agent-card p {
643
+ margin: 4px 0 0;
644
+ color: var(--mp-muted-foreground);
645
+ line-height: 1.5;
646
+ }
647
+
648
+ .sb-parallel > summary > strong {
649
+ min-width: 0;
650
+ flex: 1;
651
+ font-size: 13px;
652
+ }
653
+
654
+ .sb-parallel > summary span {
655
+ color: var(--mp-muted-foreground);
656
+ font-size: 11px;
657
+ }
658
+
659
+ .sb-schedule {
660
+ display: flex;
661
+ align-items: center;
662
+ gap: 11px;
663
+ padding: 13px;
664
+ }
665
+
666
+ .sb-schedule > svg {
667
+ color: var(--mp-primary);
668
+ }
669
+
670
+ .sb-schedule > div {
671
+ min-width: 0;
672
+ flex: 1;
673
+ }
674
+
675
+ .sb-schedule p,
676
+ .sb-schedule small {
677
+ display: block;
678
+ margin: 3px 0 0;
679
+ color: var(--mp-muted-foreground);
680
+ }
681
+
682
+ .sb-button {
683
+ display: inline-flex;
684
+ min-height: 32px;
685
+ align-items: center;
686
+ justify-content: center;
687
+ gap: 6px;
688
+ padding: 6px 12px;
689
+ border: 1px solid transparent;
690
+ border-radius: 8px;
691
+ color: var(--mp-primary-foreground);
692
+ background: var(--mp-primary);
693
+ font: inherit;
694
+ font-size: 12px;
695
+ font-weight: 600;
696
+ }
697
+
698
+ .sb-button--secondary {
699
+ border-color: var(--mp-border);
700
+ color: var(--mp-foreground);
701
+ background: var(--mp-card);
702
+ }
703
+
704
+ .sb-button:disabled {
705
+ opacity: 0.45;
706
+ }
707
+
708
+ .sb-parallel > div {
709
+ display: grid;
710
+ gap: 1px;
711
+ padding: 0 12px 10px;
712
+ }
713
+
714
+ .sb-running-row,
715
+ .sb-collapsed-row {
716
+ display: flex;
717
+ min-height: 34px;
718
+ align-items: center;
719
+ gap: 8px;
720
+ padding: 5px 2px;
721
+ color: var(--mp-muted-foreground);
722
+ }
723
+
724
+ .sb-running-row > span,
725
+ .sb-collapsed-row > span {
726
+ min-width: 0;
727
+ flex: 1;
728
+ color: var(--mp-foreground);
729
+ }
730
+
731
+ .sb-collapsed-row > small {
732
+ font-size: 10px;
733
+ }
734
+
735
+ .sb-subagents {
736
+ display: inline-flex;
737
+ flex-wrap: wrap;
738
+ align-items: center;
739
+ gap: 6px;
740
+ width: auto;
741
+ max-width: 100%;
742
+ vertical-align: middle;
743
+ }
744
+
745
+ .sb-subagents + .sb-subagents {
746
+ margin-block-start: 0;
747
+ margin-inline-start: 6px;
748
+ }
749
+
750
+ .sb-subagents[data-part-type="subagents"]:has(+ .sb-subagents) {
751
+ margin-block-end: 0;
752
+ }
753
+
754
+ .sb-subagents article {
755
+ display: inline-flex;
756
+ min-width: 0;
757
+ max-width: 100%;
758
+ align-items: center;
759
+ gap: 6px;
760
+ padding: 4px 8px;
761
+ border: 1px solid var(--mp-border, var(--border, rgb(0 0 0 / 10%)));
762
+ border-radius: 999px;
763
+ color: var(--mp-muted-foreground, var(--muted-foreground, #737373));
764
+ background: color-mix(
765
+ in srgb,
766
+ var(--mp-muted, var(--muted, #f1f1f1)) 72%,
767
+ transparent
768
+ );
769
+ box-shadow: inset 0 1px rgb(255 255 255 / 3%);
770
+ }
771
+
772
+ .sb-subagents article > span {
773
+ display: inline-flex;
774
+ width: 14px;
775
+ height: 14px;
776
+ flex: 0 0 auto;
777
+ align-items: center;
778
+ justify-content: center;
779
+ }
780
+
781
+ .sb-subagents article > div {
782
+ display: inline-flex;
783
+ min-width: 0;
784
+ max-width: 100%;
785
+ flex: 1 1 auto;
786
+ align-items: center;
787
+ gap: 6px;
788
+ }
789
+
790
+ .sb-subagents strong {
791
+ max-width: 100%;
792
+ flex-shrink: 0;
793
+ overflow: hidden;
794
+ color: var(--mp-foreground, var(--foreground, #111));
795
+ font-size: 13px;
796
+ font-weight: 450;
797
+ text-overflow: ellipsis;
798
+ white-space: nowrap;
799
+ }
800
+
801
+ .sb-subagents p {
802
+ min-width: 0;
803
+ max-inline-size: 10em;
804
+ flex: 1 1 auto;
805
+ margin: 0;
806
+ overflow: hidden;
807
+ color: var(--mp-muted-foreground, var(--muted-foreground, #737373));
808
+ font-size: 13px;
809
+ line-height: 1.25;
810
+ text-overflow: ellipsis;
811
+ white-space: nowrap;
812
+ }
813
+
814
+ .sb-subagents small {
815
+ display: inline-flex;
816
+ align-items: center;
817
+ gap: 4px;
818
+ margin: 0;
819
+ color: var(--mp-muted-foreground, var(--muted-foreground, #737373));
820
+ font-size: 12px;
821
+ line-height: 1;
822
+ white-space: nowrap;
823
+ }
824
+
825
+ .sb-subagents article[data-state="failed"] {
826
+ border-color: color-mix(
827
+ in srgb,
828
+ var(--mp-destructive, var(--destructive, #d34d4d)) 30%,
829
+ var(--mp-border, var(--border, rgb(0 0 0 / 10%)))
830
+ );
831
+ }
832
+
833
+ .sb-confirmation {
834
+ padding: 13px;
835
+ }
836
+
837
+ .sb-confirmation__title {
838
+ display: flex;
839
+ align-items: center;
840
+ gap: 8px;
841
+ font-weight: 600;
842
+ }
843
+
844
+ .sb-confirmation > p {
845
+ margin: 7px 0 0;
846
+ color: var(--mp-muted-foreground);
847
+ line-height: 1.5;
848
+ }
849
+
850
+ .sb-confirmation__actions {
851
+ display: flex;
852
+ justify-content: flex-end;
853
+ gap: 8px;
854
+ margin-top: 12px;
855
+ }
856
+
857
+ .sb-file-part {
858
+ display: flex;
859
+ width: min(100%, 430px);
860
+ align-items: center;
861
+ gap: 10px;
862
+ padding: 10px 12px;
863
+ border: 1px solid var(--mp-border);
864
+ border-radius: calc(var(--mp-radius) + 1px);
865
+ background: var(--mp-card);
866
+ }
867
+
868
+ .sb-file-part > span {
869
+ display: grid;
870
+ width: 36px;
871
+ height: 36px;
872
+ flex: 0 0 auto;
873
+ place-items: center;
874
+ border-radius: 9px;
875
+ color: var(--mp-primary);
876
+ background: var(--mp-muted);
877
+ }
878
+
879
+ .sb-file-part > div:nth-child(2) {
880
+ display: grid;
881
+ min-width: 0;
882
+ flex: 1;
883
+ gap: 3px;
884
+ }
885
+
886
+ .sb-file-part strong,
887
+ .sb-file-part small {
888
+ overflow: hidden;
889
+ text-overflow: ellipsis;
890
+ white-space: nowrap;
891
+ }
892
+
893
+ .sb-file-part small {
894
+ color: var(--mp-muted-foreground);
895
+ }
896
+
897
+ .sb-file-part > div:last-child {
898
+ display: flex;
899
+ gap: 2px;
900
+ }
901
+
902
+ .sb-dashboard {
903
+ display: grid;
904
+ gap: 12px;
905
+ padding: 15px;
906
+ }
907
+
908
+ .sb-dashboard h3 {
909
+ margin: 0;
910
+ font-size: 14px;
911
+ }
912
+
913
+ .sb-dashboard__tiles,
914
+ .sb-dashboard__cards {
915
+ display: grid;
916
+ grid-template-columns: repeat(3, minmax(0, 1fr));
917
+ gap: 8px;
918
+ }
919
+
920
+ .sb-dashboard__tiles article,
921
+ .sb-dashboard__cards article {
922
+ display: grid;
923
+ gap: 4px;
924
+ padding: 10px;
925
+ border-radius: 9px;
926
+ background: var(--mp-muted);
927
+ }
928
+
929
+ .sb-dashboard__tiles strong {
930
+ color: var(--mp-primary);
931
+ font-size: 18px;
932
+ }
933
+
934
+ .sb-dashboard__tiles small,
935
+ .sb-dashboard__cards p {
936
+ margin: 0;
937
+ color: var(--mp-muted-foreground);
938
+ font-size: 11px;
939
+ line-height: 1.45;
940
+ }
941
+
942
+ .sb-dashboard__badges {
943
+ display: flex;
944
+ flex-wrap: wrap;
945
+ gap: 6px;
946
+ }
947
+
948
+ .sb-dashboard__badges span {
949
+ padding: 4px 8px;
950
+ border: 1px solid var(--mp-border);
951
+ border-radius: 999px;
952
+ color: var(--mp-muted-foreground);
953
+ font-size: 10px;
954
+ }
955
+
956
+ .sb-dashboard aside {
957
+ padding: 10px;
958
+ border: 1px solid color-mix(in srgb, var(--mp-success) 30%, var(--mp-border));
959
+ border-radius: 9px;
960
+ background: color-mix(in srgb, var(--mp-success) 7%, var(--mp-card));
961
+ }
962
+
963
+ .sb-dashboard aside p {
964
+ margin: 3px 0 0;
965
+ color: var(--mp-muted-foreground);
966
+ font-size: 12px;
967
+ }
968
+
969
+ .sb-table-scroll {
970
+ overflow-x: auto;
971
+ }
972
+
973
+ .sb-dashboard table {
974
+ width: 100%;
975
+ border-collapse: collapse;
976
+ font-size: 11px;
977
+ }
978
+
979
+ .sb-dashboard :is(th, td) {
980
+ padding: 7px 8px;
981
+ border-bottom: 1px solid var(--mp-border);
982
+ text-align: start;
983
+ }
984
+
985
+ .sb-dashboard th {
986
+ color: var(--mp-muted-foreground);
987
+ font-weight: 600;
988
+ }
989
+
990
+ .sb-ask-user {
991
+ display: grid;
992
+ gap: 16px;
993
+ width: 100%;
994
+ }
995
+
996
+ .sb-ask-user fieldset {
997
+ display: grid;
998
+ gap: 8px;
999
+ margin: 0;
1000
+ padding: 0;
1001
+ border: 0;
1002
+ }
1003
+
1004
+ .sb-ask-user legend {
1005
+ margin-bottom: 7px;
1006
+ color: var(--mp-foreground);
1007
+ font-weight: 500;
1008
+ }
1009
+
1010
+ .sb-ask-user fieldset > div {
1011
+ display: flex;
1012
+ flex-wrap: wrap;
1013
+ gap: 7px;
1014
+ }
1015
+
1016
+ .sb-ask-user fieldset button {
1017
+ display: inline-flex;
1018
+ min-height: 34px;
1019
+ align-items: center;
1020
+ gap: 6px;
1021
+ padding: 6px 11px;
1022
+ border: 1px solid var(--mp-border);
1023
+ border-radius: 8px;
1024
+ color: var(--mp-foreground);
1025
+ background: color-mix(in srgb, var(--mp-muted) 55%, transparent);
1026
+ font: inherit;
1027
+ font-size: 12px;
1028
+ }
1029
+
1030
+ .sb-ask-user fieldset button[aria-pressed="true"] {
1031
+ border-color: var(--mp-border-strong);
1032
+ background: var(--mp-muted);
1033
+ box-shadow: inset 0 0 0 1px var(--mp-border-strong);
1034
+ }
1035
+
1036
+ .sb-ask-user fieldset button > span {
1037
+ display: grid;
1038
+ width: 14px;
1039
+ height: 14px;
1040
+ place-items: center;
1041
+ border: 1px solid var(--mp-border-strong);
1042
+ border-radius: 4px;
1043
+ }
1044
+
1045
+ .sb-ask-user textarea {
1046
+ min-height: 82px;
1047
+ resize: vertical;
1048
+ padding: 10px;
1049
+ border: 1px solid var(--mp-border);
1050
+ border-radius: 9px;
1051
+ outline: none;
1052
+ color: var(--mp-foreground);
1053
+ background: var(--mp-card);
1054
+ font: inherit;
1055
+ }
1056
+
1057
+ .sb-suggestions {
1058
+ display: grid;
1059
+ width: 100%;
1060
+ }
1061
+
1062
+ .sb-suggestions button {
1063
+ display: flex;
1064
+ min-height: 36px;
1065
+ align-items: center;
1066
+ gap: 8px;
1067
+ padding: 7px 2px;
1068
+ border: 0;
1069
+ border-bottom: 1px solid var(--mp-border);
1070
+ color: var(--mp-muted-foreground);
1071
+ background: transparent;
1072
+ font: inherit;
1073
+ font-size: 13px;
1074
+ text-align: start;
1075
+ }
1076
+
1077
+ .sb-suggestions button:last-child {
1078
+ border-bottom: 0;
1079
+ }
1080
+
1081
+ .sb-suggestions button:hover {
1082
+ color: var(--mp-foreground);
1083
+ }
1084
+
1085
+ .sb-suggestions button svg {
1086
+ rotate: 180deg;
1087
+ }
1088
+
1089
+ .sb-unknown-part {
1090
+ display: flex;
1091
+ width: fit-content;
1092
+ max-width: 100%;
1093
+ align-items: center;
1094
+ gap: 7px;
1095
+ padding: 7px 9px;
1096
+ border: 1px dashed var(--mp-border-strong);
1097
+ border-radius: 7px;
1098
+ color: var(--mp-muted-foreground);
1099
+ background: var(--mp-muted);
1100
+ font-size: 11px;
1101
+ }
1102
+
1103
+ .sb-part-loading {
1104
+ display: grid;
1105
+ gap: 7px;
1106
+ }
1107
+
1108
+ .sb-part-loading > span {
1109
+ height: 11px;
1110
+ border-radius: 5px;
1111
+ background: linear-gradient(
1112
+ 100deg,
1113
+ var(--mp-muted) 20%,
1114
+ color-mix(in srgb, var(--mp-foreground) 10%, var(--mp-muted)) 50%,
1115
+ var(--mp-muted) 80%
1116
+ );
1117
+ background-size: 200% 100%;
1118
+ animation: sb-message-shimmer 1.4s infinite linear;
1119
+ }
1120
+
1121
+ .sb-part-loading > span:nth-child(1) {
1122
+ width: 90%;
1123
+ }
1124
+
1125
+ .sb-part-loading > span:nth-child(2) {
1126
+ width: 72%;
1127
+ }
1128
+
1129
+ .sb-part-loading > span:nth-child(3) {
1130
+ width: 56%;
1131
+ }
1132
+
1133
+ .sb-spin {
1134
+ animation: sb-message-spin 1s infinite linear;
1135
+ }
1136
+
1137
+ .sb-sources {
1138
+ color: var(--mp-primary);
1139
+ font-size: 12px;
1140
+ }
1141
+
1142
+ .sb-sources__trigger {
1143
+ display: flex;
1144
+ align-items: center;
1145
+ gap: 7px;
1146
+ list-style: none;
1147
+ }
1148
+
1149
+ .sb-sources__content {
1150
+ display: grid;
1151
+ gap: 7px;
1152
+ margin-top: 8px;
1153
+ }
1154
+
1155
+ .sb-sources__content a {
1156
+ display: flex;
1157
+ align-items: center;
1158
+ gap: 7px;
1159
+ color: var(--mp-primary);
1160
+ text-decoration: none;
1161
+ }
1162
+
1163
+ .sb-plan {
1164
+ padding: 0;
1165
+ overflow: hidden;
1166
+ border-color: var(--mp-border);
1167
+ border-radius: 16px;
1168
+ background: var(--mp-card);
1169
+ }
1170
+
1171
+ .sb-plan__header {
1172
+ display: flex;
1173
+ align-items: center;
1174
+ justify-content: space-between;
1175
+ gap: 10px;
1176
+ padding: 14px 20px;
1177
+ border-bottom: 1px solid var(--mp-border);
1178
+ }
1179
+
1180
+ .sb-plan__title,
1181
+ .sb-plan__description {
1182
+ margin: 0;
1183
+ }
1184
+
1185
+ .sb-plan__heading,
1186
+ .sb-plan__badge,
1187
+ .sb-plan__steps li,
1188
+ .sb-plan__skeleton > span,
1189
+ .sb-ask-user__submitted {
1190
+ display: flex;
1191
+ align-items: center;
1192
+ }
1193
+
1194
+ .sb-plan__heading {
1195
+ min-width: 0;
1196
+ gap: 8px;
1197
+ }
1198
+
1199
+ .sb-plan__heading > svg {
1200
+ flex: 0 0 auto;
1201
+ color: var(--mp-foreground);
1202
+ }
1203
+
1204
+ .sb-plan__title {
1205
+ color: var(--mp-foreground);
1206
+ font-size: 14px;
1207
+ font-weight: 500;
1208
+ }
1209
+
1210
+ .sb-plan__badge {
1211
+ flex: 0 0 auto;
1212
+ gap: 4px;
1213
+ padding: 4px 10px;
1214
+ border-radius: 999px;
1215
+ color: var(--mp-muted-foreground);
1216
+ background: var(--mp-muted);
1217
+ font-size: 12px;
1218
+ font-variant-numeric: tabular-nums;
1219
+ }
1220
+
1221
+ .sb-plan__badge[data-state="done"] {
1222
+ color: var(--mp-success);
1223
+ background: color-mix(in srgb, var(--mp-success) 10%, transparent);
1224
+ }
1225
+
1226
+ .sb-plan__content {
1227
+ padding: 16px;
1228
+ }
1229
+
1230
+ .sb-plan__steps {
1231
+ display: grid;
1232
+ gap: 10px;
1233
+ margin: 0;
1234
+ padding: 0;
1235
+ list-style: none;
1236
+ }
1237
+
1238
+ .sb-plan__steps li {
1239
+ align-items: flex-start;
1240
+ gap: 10px;
1241
+ color: var(--mp-muted-foreground);
1242
+ line-height: 1.5;
1243
+ }
1244
+
1245
+ .sb-plan__steps li > svg {
1246
+ flex: 0 0 auto;
1247
+ margin-top: 2px;
1248
+ }
1249
+
1250
+ .sb-plan__steps li[data-status="in_progress"] {
1251
+ color: var(--mp-foreground);
1252
+ font-weight: 500;
1253
+ }
1254
+
1255
+ .sb-plan__steps li[data-status="done"] > span {
1256
+ text-decoration: line-through;
1257
+ text-decoration-color: color-mix(
1258
+ in srgb,
1259
+ var(--mp-muted-foreground) 40%,
1260
+ transparent
1261
+ );
1262
+ }
1263
+
1264
+ .sb-plan__skeleton {
1265
+ display: grid;
1266
+ gap: 10px;
1267
+ }
1268
+
1269
+ .sb-plan__skeleton > span {
1270
+ gap: 10px;
1271
+ }
1272
+
1273
+ .sb-plan__skeleton i,
1274
+ .sb-plan__skeleton b {
1275
+ display: block;
1276
+ background: var(--mp-muted);
1277
+ animation: sb-message-shimmer 1.5s infinite linear;
1278
+ }
1279
+
1280
+ .sb-plan__skeleton i {
1281
+ width: 16px;
1282
+ height: 16px;
1283
+ flex: 0 0 auto;
1284
+ border-radius: 50%;
1285
+ }
1286
+
1287
+ .sb-plan__skeleton b {
1288
+ height: 12px;
1289
+ border-radius: 5px;
1290
+ }
1291
+
1292
+ .sb-plan__empty {
1293
+ margin: 0;
1294
+ color: var(--mp-muted-foreground);
1295
+ font-size: 13px;
1296
+ }
1297
+
1298
+ .sb-tool-stack {
1299
+ display: grid;
1300
+ width: 100%;
1301
+ gap: 8px;
1302
+ }
1303
+
1304
+ .sb-ask-user__submitted {
1305
+ gap: 6px;
1306
+ color: var(--mp-muted-foreground);
1307
+ font-size: 14px;
1308
+ }
1309
+
1310
+ .sb-ask-user__submitted small {
1311
+ min-width: 0;
1312
+ overflow: hidden;
1313
+ color: var(--mp-foreground);
1314
+ text-overflow: ellipsis;
1315
+ white-space: nowrap;
1316
+ }
1317
+
1318
+ .sb-ask-user[data-state="submitted"] fieldset button:not(
1319
+ [aria-pressed="true"]
1320
+ ) {
1321
+ opacity: 0.4;
1322
+ }
1323
+
1324
+ .sb-sr-only {
1325
+ position: absolute !important;
1326
+ width: 1px !important;
1327
+ height: 1px !important;
1328
+ padding: 0 !important;
1329
+ margin: -1px !important;
1330
+ overflow: hidden !important;
1331
+ clip: rect(0, 0, 0, 0) !important;
1332
+ white-space: nowrap !important;
1333
+ border: 0 !important;
1334
+ }
1335
+
1336
+ .sb-chat-composer {
1337
+ position: relative;
1338
+ z-index: 5;
1339
+ flex: 0 0 auto;
1340
+ color: var(--mp-foreground);
1341
+ font-family: var(--mp-font-sans);
1342
+ }
1343
+
1344
+ .sb-chat-composer[data-variant="docked"] {
1345
+ padding: 8px 24px 20px;
1346
+ background: linear-gradient(
1347
+ to top,
1348
+ var(--mp-background) 72%,
1349
+ transparent
1350
+ );
1351
+ }
1352
+
1353
+ .sb-chat-composer__inner {
1354
+ position: relative;
1355
+ width: min(100%, 780px);
1356
+ margin-inline: auto;
1357
+ }
1358
+
1359
+ .sb-chat-composer[data-variant="standalone"] .sb-chat-composer__inner {
1360
+ width: 100%;
1361
+ }
1362
+
1363
+ .sb-chat-composer__action {
1364
+ display: inline-flex;
1365
+ min-height: 32px;
1366
+ align-items: center;
1367
+ gap: 6px;
1368
+ padding: 5px 10px;
1369
+ border: 0;
1370
+ border-radius: 999px;
1371
+ color: var(--mp-muted-foreground);
1372
+ background: transparent;
1373
+ font: inherit;
1374
+ font-size: 13px;
1375
+ }
1376
+
1377
+ .sb-chat-composer__action:hover {
1378
+ color: var(--mp-foreground);
1379
+ background: var(--mp-muted);
1380
+ }
1381
+
1382
+ .sb-chat-composer__action:disabled {
1383
+ opacity: 0.45;
1384
+ }
1385
+
1386
+ .sb-command-menu {
1387
+ position: absolute;
1388
+ z-index: 30;
1389
+ right: 0;
1390
+ bottom: calc(100% + 8px);
1391
+ left: 0;
1392
+ overflow: hidden;
1393
+ border: 1px solid var(--mp-border);
1394
+ border-radius: 12px;
1395
+ color: var(--mp-foreground);
1396
+ background: var(--mp-card);
1397
+ box-shadow: 0 16px 40px rgb(0 0 0 / 20%);
1398
+ }
1399
+
1400
+ .sb-command-menu__label {
1401
+ padding: 10px 12px 7px;
1402
+ color: var(--mp-muted-foreground);
1403
+ font-size: 11px;
1404
+ }
1405
+
1406
+ .sb-command-menu__list {
1407
+ display: grid;
1408
+ gap: 2px;
1409
+ padding: 0 6px 6px;
1410
+ }
1411
+
1412
+ .sb-command-menu__list button {
1413
+ display: grid;
1414
+ grid-template-columns: minmax(90px, auto) 1fr;
1415
+ gap: 12px;
1416
+ align-items: center;
1417
+ width: 100%;
1418
+ padding: 9px 10px;
1419
+ border: 0;
1420
+ border-radius: 8px;
1421
+ color: inherit;
1422
+ background: transparent;
1423
+ text-align: start;
1424
+ }
1425
+
1426
+ .sb-command-menu__list button[aria-selected="true"],
1427
+ .sb-command-menu__list button:hover {
1428
+ background: var(--mp-muted);
1429
+ }
1430
+
1431
+ .sb-command-menu__list code {
1432
+ color: var(--mp-foreground);
1433
+ font-family: var(--mp-font-mono);
1434
+ font-size: 12px;
1435
+ }
1436
+
1437
+ .sb-command-menu__list span {
1438
+ min-width: 0;
1439
+ overflow: hidden;
1440
+ color: var(--mp-muted-foreground);
1441
+ font-size: 12px;
1442
+ text-overflow: ellipsis;
1443
+ white-space: nowrap;
1444
+ }
1445
+
1446
+ .sb-composer {
1447
+ position: relative;
1448
+ display: flex;
1449
+ min-width: 0;
1450
+ flex-direction: column;
1451
+ gap: 4px;
1452
+ border: 1px solid var(--mp-border);
1453
+ border-radius: calc(var(--mp-radius) + 12px);
1454
+ color: var(--mp-foreground);
1455
+ background: var(--mp-card);
1456
+ box-shadow: 0 10px 28px rgb(0 0 0 / 16%);
1457
+ font-family: var(--mp-font-sans);
1458
+ }
1459
+
1460
+ .sb-composer:focus-within {
1461
+ border-color: var(--mp-border-strong);
1462
+ box-shadow:
1463
+ 0 10px 28px rgb(0 0 0 / 16%),
1464
+ 0 0 0 2px color-mix(in srgb, var(--mp-primary) 16%, transparent);
1465
+ }
1466
+
1467
+ .sb-composer__header {
1468
+ min-width: 0;
1469
+ padding: 9px 12px 0;
1470
+ }
1471
+
1472
+ .sb-attachments {
1473
+ display: flex;
1474
+ gap: 8px;
1475
+ overflow-x: auto;
1476
+ padding-bottom: 3px;
1477
+ }
1478
+
1479
+ .sb-attachment {
1480
+ display: flex;
1481
+ width: 250px;
1482
+ min-width: 250px;
1483
+ align-items: center;
1484
+ gap: 8px;
1485
+ padding: 7px;
1486
+ border: 1px solid var(--mp-border);
1487
+ border-radius: 10px;
1488
+ background: var(--mp-muted);
1489
+ }
1490
+
1491
+ .sb-attachment[draggable="true"] {
1492
+ cursor: grab;
1493
+ }
1494
+
1495
+ .sb-attachment[draggable="true"]:active {
1496
+ cursor: grabbing;
1497
+ }
1498
+
1499
+ .sb-attachment[data-status="error"] {
1500
+ border-color: color-mix(in srgb, var(--mp-destructive) 45%, var(--mp-border));
1501
+ background: color-mix(in srgb, var(--mp-destructive) 8%, var(--mp-card));
1502
+ }
1503
+
1504
+ .sb-attachment__preview {
1505
+ display: grid;
1506
+ width: 32px;
1507
+ height: 32px;
1508
+ flex: 0 0 auto;
1509
+ place-items: center;
1510
+ overflow: hidden;
1511
+ border-radius: 7px;
1512
+ color: var(--mp-primary);
1513
+ background: var(--mp-card);
1514
+ }
1515
+
1516
+ .sb-attachment__preview img {
1517
+ width: 100%;
1518
+ height: 100%;
1519
+ object-fit: cover;
1520
+ }
1521
+
1522
+ .sb-attachment__text {
1523
+ display: grid;
1524
+ min-width: 0;
1525
+ flex: 1;
1526
+ gap: 2px;
1527
+ }
1528
+
1529
+ .sb-attachment__text :is(strong, small) {
1530
+ overflow: hidden;
1531
+ text-overflow: ellipsis;
1532
+ white-space: nowrap;
1533
+ }
1534
+
1535
+ .sb-attachment__text strong {
1536
+ font-size: 12px;
1537
+ font-weight: 500;
1538
+ }
1539
+
1540
+ .sb-attachment__text small {
1541
+ color: var(--mp-muted-foreground);
1542
+ font-size: 10px;
1543
+ }
1544
+
1545
+ .sb-attachment[data-status="error"] small {
1546
+ color: var(--mp-destructive);
1547
+ }
1548
+
1549
+ .sb-attachment__actions {
1550
+ display: flex;
1551
+ flex: 0 0 auto;
1552
+ }
1553
+
1554
+ .sb-attachment__button {
1555
+ display: grid;
1556
+ width: 24px;
1557
+ height: 24px;
1558
+ place-items: center;
1559
+ padding: 0;
1560
+ border: 0;
1561
+ border-radius: 7px;
1562
+ color: var(--mp-muted-foreground);
1563
+ background: transparent;
1564
+ }
1565
+
1566
+ .sb-attachment__button:hover {
1567
+ color: var(--mp-foreground);
1568
+ background: var(--mp-card);
1569
+ }
1570
+
1571
+ .sb-composer__body textarea {
1572
+ display: block;
1573
+ width: 100%;
1574
+ max-height: 190px;
1575
+ min-height: 42px;
1576
+ box-sizing: border-box;
1577
+ resize: none;
1578
+ padding: 10px 14px 4px;
1579
+ border: 0;
1580
+ outline: 0;
1581
+ color: var(--mp-foreground);
1582
+ background: transparent;
1583
+ field-sizing: content;
1584
+ font: inherit;
1585
+ font-size: 14px;
1586
+ line-height: 1.55;
1587
+ }
1588
+
1589
+ .sb-composer__body textarea::placeholder {
1590
+ color: var(--mp-muted-foreground);
1591
+ }
1592
+
1593
+ .sb-composer__footer {
1594
+ display: flex;
1595
+ align-items: center;
1596
+ gap: 8px;
1597
+ padding: 4px 9px 9px;
1598
+ }
1599
+
1600
+ .sb-composer__tools {
1601
+ display: flex;
1602
+ min-width: 0;
1603
+ flex: 1;
1604
+ align-items: center;
1605
+ gap: 5px;
1606
+ }
1607
+
1608
+ .sb-composer__tool,
1609
+ .sb-composer__submit {
1610
+ display: grid;
1611
+ width: 32px;
1612
+ height: 32px;
1613
+ place-items: center;
1614
+ padding: 0;
1615
+ border: 0;
1616
+ border-radius: 50%;
1617
+ }
1618
+
1619
+ .sb-composer__tool {
1620
+ color: var(--mp-muted-foreground);
1621
+ background: transparent;
1622
+ }
1623
+
1624
+ .sb-composer__tool:hover {
1625
+ color: var(--mp-foreground);
1626
+ background: var(--mp-muted);
1627
+ }
1628
+
1629
+ .sb-composer__submit {
1630
+ color: var(--mp-primary-foreground);
1631
+ background: var(--mp-primary);
1632
+ }
1633
+
1634
+ .sb-composer__submit:disabled {
1635
+ color: var(--mp-muted-foreground);
1636
+ background: var(--mp-muted);
1637
+ }
1638
+
1639
+ .sb-composer__drop {
1640
+ position: absolute;
1641
+ z-index: 10;
1642
+ inset: 0;
1643
+ display: grid;
1644
+ place-items: center;
1645
+ align-content: center;
1646
+ gap: 7px;
1647
+ border: 2px dashed color-mix(in srgb, var(--mp-primary) 55%, transparent);
1648
+ border-radius: inherit;
1649
+ color: var(--mp-primary);
1650
+ background: color-mix(in srgb, var(--mp-background) 82%, transparent);
1651
+ backdrop-filter: blur(5px);
1652
+ pointer-events: none;
1653
+ }
1654
+
1655
+ @media (max-width: 640px) {
1656
+ .sb-chat-composer[data-variant="docked"] {
1657
+ padding: 6px 14px 14px;
1658
+ }
1659
+
1660
+ .sb-conversation__content {
1661
+ padding: 16px 14px 34px;
1662
+ }
1663
+
1664
+ .sb-message {
1665
+ width: 100%;
1666
+ }
1667
+
1668
+ .sb-message--user {
1669
+ width: 92%;
1670
+ }
1671
+
1672
+ .sb-dashboard__tiles,
1673
+ .sb-dashboard__cards {
1674
+ grid-template-columns: 1fr;
1675
+ }
1676
+
1677
+ .sb-chart__plot {
1678
+ gap: 4px;
1679
+ }
1680
+ }
1681
+
1682
+ @media (prefers-reduced-motion: reduce) {
1683
+ .sb-message-panel *,
1684
+ .sb-composer * {
1685
+ scroll-behavior: auto !important;
1686
+ animation-duration: 1ms !important;
1687
+ animation-iteration-count: 1 !important;
1688
+ transition-duration: 1ms !important;
1689
+ }
1690
+ }
1691
+
1692
+ /* research-creao visual contract */
1693
+ .sb-message-panel {
1694
+ background: var(--background);
1695
+ font-size: 14px;
1696
+ }
1697
+
1698
+ .sb-conversation__content {
1699
+ width: min(100%, 780px);
1700
+ gap: 24px;
1701
+ padding: 24px 24px 96px;
1702
+ }
1703
+
1704
+ .sb-message {
1705
+ width: 100%;
1706
+ max-width: 100%;
1707
+ gap: 6px;
1708
+ }
1709
+
1710
+ .sb-message--user {
1711
+ width: fit-content;
1712
+ max-width: 70%;
1713
+ margin-top: 4px;
1714
+ margin-left: auto;
1715
+ }
1716
+
1717
+ .sb-message--user .sb-message__content {
1718
+ padding: 10px 16px;
1719
+ border-radius: 14px;
1720
+ background: var(--secondary);
1721
+ font-size: 14px;
1722
+ }
1723
+
1724
+ .sb-message--assistant {
1725
+ align-items: stretch;
1726
+ }
1727
+
1728
+ .sb-message__content {
1729
+ gap: 8px;
1730
+ overflow: visible;
1731
+ }
1732
+
1733
+ .sb-assistant-header {
1734
+ display: none;
1735
+ }
1736
+
1737
+ .sb-brand-mark {
1738
+ display: grid;
1739
+ width: 28px;
1740
+ height: 28px;
1741
+ place-items: center;
1742
+ border: 0;
1743
+ border-radius: 999px;
1744
+ color: color-mix(in srgb, var(--foreground) 80%, transparent);
1745
+ background: var(--secondary);
1746
+ }
1747
+
1748
+ .sb-brand-mark--large {
1749
+ width: 48px;
1750
+ height: 48px;
1751
+ }
1752
+
1753
+ .sb-brand-mark--large svg {
1754
+ scale: 1.35;
1755
+ }
1756
+
1757
+ .sb-brand-mark__loop {
1758
+ stroke-dasharray: 22 34;
1759
+ animation: sb-loop 1.5s linear infinite;
1760
+ }
1761
+
1762
+ @keyframes sb-loop {
1763
+ to { stroke-dashoffset: -56; }
1764
+ }
1765
+
1766
+ .sb-message__actions {
1767
+ gap: 2px;
1768
+ margin-top: 8px;
1769
+ opacity: 1;
1770
+ }
1771
+
1772
+ .sb-message__action,
1773
+ .sb-link-button {
1774
+ width: 32px;
1775
+ height: 32px;
1776
+ color: var(--muted-foreground);
1777
+ }
1778
+
1779
+ .sb-message__action:hover,
1780
+ .sb-link-button:hover {
1781
+ color: var(--foreground);
1782
+ background: var(--accent);
1783
+ }
1784
+
1785
+ .sb-message-response {
1786
+ color: var(--foreground);
1787
+ font-size: 14px;
1788
+ line-height: 1.7;
1789
+ }
1790
+
1791
+ .sb-sources,
1792
+ .sb-sources__content a {
1793
+ color: var(--link);
1794
+ }
1795
+
1796
+ .sb-thinking {
1797
+ min-height: 32px;
1798
+ gap: 12px;
1799
+ padding: 4px 0;
1800
+ color: color-mix(in srgb, var(--foreground) 90%, transparent);
1801
+ font-size: 14px;
1802
+ }
1803
+
1804
+ .sb-thinking canvas {
1805
+ flex: none;
1806
+ }
1807
+
1808
+ .sb-reasoning {
1809
+ margin: 0;
1810
+ }
1811
+
1812
+ .sb-reasoning__trigger {
1813
+ gap: 8px;
1814
+ padding: 5px 0;
1815
+ color: var(--muted-foreground);
1816
+ font-size: 14px;
1817
+ }
1818
+
1819
+ .sb-reasoning__content {
1820
+ margin: 4px 0 2px 23px;
1821
+ padding-left: 12px;
1822
+ border-left: 1px solid var(--border);
1823
+ font-style: italic;
1824
+ }
1825
+
1826
+ .sb-tool-line {
1827
+ width: 100%;
1828
+ color: var(--muted-foreground);
1829
+ font-size: 14px;
1830
+ }
1831
+
1832
+ .sb-tool-line__trigger {
1833
+ display: flex;
1834
+ width: 100%;
1835
+ align-items: center;
1836
+ gap: 8px;
1837
+ padding: 5px 0;
1838
+ border: 0;
1839
+ color: var(--muted-foreground);
1840
+ background: transparent;
1841
+ font: inherit;
1842
+ list-style: none;
1843
+ text-align: left;
1844
+ transition: color 150ms ease;
1845
+ }
1846
+
1847
+ .sb-tool-line__trigger::-webkit-details-marker {
1848
+ display: none;
1849
+ }
1850
+
1851
+ .sb-tool-line__trigger:hover {
1852
+ color: var(--foreground);
1853
+ }
1854
+
1855
+ .sb-tool-line__trigger > span {
1856
+ flex: 0 0 auto;
1857
+ }
1858
+
1859
+ .sb-tool-line__trigger small {
1860
+ min-width: 0;
1861
+ overflow: hidden;
1862
+ color: var(--muted-foreground);
1863
+ font-size: 13px;
1864
+ text-overflow: ellipsis;
1865
+ white-space: nowrap;
1866
+ }
1867
+
1868
+ .sb-tool-line__status {
1869
+ display: inline-flex;
1870
+ min-width: 0;
1871
+ align-items: center;
1872
+ gap: 5px;
1873
+ color: var(--muted-foreground);
1874
+ font-size: 12px;
1875
+ }
1876
+
1877
+ .sb-tool-line__status[data-tone="error"],
1878
+ .sb-tool-line__status[data-tone="warning"] {
1879
+ color: #e0a24a;
1880
+ }
1881
+
1882
+ .sb-tool-line__chevron {
1883
+ flex: 0 0 auto;
1884
+ opacity: 0.7;
1885
+ transition: rotate 180ms ease;
1886
+ }
1887
+
1888
+ .sb-tool-line__chevron.is-open {
1889
+ rotate: 90deg;
1890
+ }
1891
+
1892
+ .sb-tool-line[open] > .sb-tool-line__trigger .sb-tool-line__chevron {
1893
+ rotate: 90deg;
1894
+ }
1895
+
1896
+ .sb-tool-line__details {
1897
+ display: grid;
1898
+ gap: 8px;
1899
+ margin: 4px 0 5px 23px;
1900
+ padding-left: 12px;
1901
+ border-left: 1px solid var(--border);
1902
+ }
1903
+
1904
+ .sb-tool-line__details > pre,
1905
+ .sb-terminal {
1906
+ max-height: 280px;
1907
+ margin: 0;
1908
+ padding: 12px;
1909
+ overflow: auto;
1910
+ border: 1px solid var(--border);
1911
+ border-radius: 8px;
1912
+ color: var(--muted-foreground);
1913
+ background: var(--terminal);
1914
+ font-family: var(--mp-font-mono);
1915
+ font-size: 13px;
1916
+ line-height: 1.55;
1917
+ white-space: pre-wrap;
1918
+ }
1919
+
1920
+ .sb-terminal code {
1921
+ display: block;
1922
+ margin-bottom: 8px;
1923
+ color: var(--foreground);
1924
+ }
1925
+
1926
+ .sb-terminal pre {
1927
+ margin: 0;
1928
+ white-space: pre-wrap;
1929
+ }
1930
+
1931
+ .sb-tool-results {
1932
+ gap: 4px;
1933
+ }
1934
+
1935
+ .sb-tool-results li {
1936
+ gap: 8px;
1937
+ padding: 2px 0;
1938
+ font-size: 13px;
1939
+ }
1940
+
1941
+ .sb-tool-results li > i {
1942
+ width: 10px;
1943
+ height: 10px;
1944
+ flex: 0 0 auto;
1945
+ border-radius: 999px;
1946
+ background: #cf8772;
1947
+ }
1948
+
1949
+ .sb-tool-results li > i[data-index="1"] {
1950
+ background: #4866b8;
1951
+ }
1952
+
1953
+ .sb-tool-failed {
1954
+ display: flex;
1955
+ width: 100%;
1956
+ align-items: center;
1957
+ gap: 8px;
1958
+ padding: 5px 0;
1959
+ color: #e0a24a;
1960
+ font-size: 14px;
1961
+ }
1962
+
1963
+ .sb-tool-failed small {
1964
+ min-width: 0;
1965
+ overflow: hidden;
1966
+ color: var(--muted-foreground);
1967
+ font-size: 13px;
1968
+ text-overflow: ellipsis;
1969
+ white-space: nowrap;
1970
+ }
1971
+
1972
+ .sb-error-part {
1973
+ padding: 18px;
1974
+ border-color: color-mix(in srgb, var(--oxblood) 45%, var(--border));
1975
+ border-radius: 14px;
1976
+ color: var(--oxblood);
1977
+ background: color-mix(in srgb, var(--oxblood) 10%, var(--card));
1978
+ font-family: var(--mp-font-mono);
1979
+ }
1980
+
1981
+ .sb-error-part p {
1982
+ color: color-mix(in srgb, var(--oxblood) 75%, var(--foreground));
1983
+ font-size: 13px;
1984
+ }
1985
+
1986
+ .sb-image-part button {
1987
+ border-radius: 16px;
1988
+ }
1989
+
1990
+ .sb-chart,
1991
+ .sb-agent-card,
1992
+ .sb-dashboard,
1993
+ .sb-confirmation,
1994
+ .sb-schedule,
1995
+ .sb-parallel {
1996
+ border-color: var(--border);
1997
+ border-radius: 16px;
1998
+ background: var(--card);
1999
+ }
2000
+
2001
+ .sb-chart,
2002
+ .sb-agent-card,
2003
+ .sb-dashboard {
2004
+ padding: 20px;
2005
+ }
2006
+
2007
+ .sb-chart__bar-group > i {
2008
+ background: linear-gradient(
2009
+ var(--oxblood),
2010
+ color-mix(in srgb, var(--oxblood) 55%, transparent)
2011
+ );
2012
+ }
2013
+
2014
+ .sb-agent-card__icon {
2015
+ color: var(--primary);
2016
+ background: var(--secondary);
2017
+ }
2018
+
2019
+ .sb-parallel > summary {
2020
+ min-height: 48px;
2021
+ padding: 12px 16px;
2022
+ }
2023
+
2024
+ .sb-parallel > div {
2025
+ padding: 0 16px 14px;
2026
+ }
2027
+
2028
+ .sb-schedule {
2029
+ padding: 16px;
2030
+ }
2031
+
2032
+ .sb-confirmation {
2033
+ padding: 20px;
2034
+ }
2035
+
2036
+ .sb-confirmation__actions {
2037
+ justify-content: flex-start;
2038
+ margin-top: 16px;
2039
+ }
2040
+
2041
+ .sb-button {
2042
+ min-height: 36px;
2043
+ padding: 8px 16px;
2044
+ border-radius: 8px;
2045
+ font-size: 14px;
2046
+ font-weight: 400;
2047
+ }
2048
+
2049
+ .sb-button--secondary {
2050
+ color: var(--foreground);
2051
+ background: transparent;
2052
+ }
2053
+
2054
+ .sb-file-part {
2055
+ width: min(100%, 420px);
2056
+ gap: 12px;
2057
+ padding: 12px 16px;
2058
+ border-radius: 12px;
2059
+ }
2060
+
2061
+ .sb-file-part > span {
2062
+ width: 40px;
2063
+ height: 40px;
2064
+ color: #8fb3e0;
2065
+ }
2066
+
2067
+ .sb-dashboard__tiles,
2068
+ .sb-dashboard__cards {
2069
+ gap: 12px;
2070
+ }
2071
+
2072
+ .sb-dashboard__tiles article,
2073
+ .sb-dashboard__cards article {
2074
+ padding: 12px;
2075
+ border-radius: 12px;
2076
+ }
2077
+
2078
+ .sb-dashboard__tiles strong {
2079
+ color: var(--oxblood);
2080
+ }
2081
+
2082
+ .sb-ask-user {
2083
+ gap: 24px;
2084
+ margin-top: 8px;
2085
+ }
2086
+
2087
+ .sb-ask-user legend {
2088
+ font-size: 14px;
2089
+ line-height: 1.6;
2090
+ }
2091
+
2092
+ .sb-ask-user fieldset button {
2093
+ min-height: 38px;
2094
+ padding: 8px 16px;
2095
+ border-radius: 8px;
2096
+ background: color-mix(in srgb, var(--secondary) 40%, transparent);
2097
+ font-size: 14px;
2098
+ }
2099
+
2100
+ .sb-ask-user textarea {
2101
+ min-height: 96px;
2102
+ padding: 12px 16px;
2103
+ border-radius: 12px;
2104
+ background: color-mix(in srgb, var(--secondary) 40%, transparent);
2105
+ font-size: 14px;
2106
+ }
2107
+
2108
+ .sb-suggestions {
2109
+ gap: 8px;
2110
+ margin-top: 12px;
2111
+ }
2112
+
2113
+ .sb-suggestions button {
2114
+ min-height: 28px;
2115
+ padding: 2px 0;
2116
+ border: 0;
2117
+ font-size: 14px;
2118
+ }
2119
+
2120
+ .sb-notice-line {
2121
+ padding: 5px 0;
2122
+ border-radius: 0;
2123
+ background: transparent;
2124
+ font-size: 13px;
2125
+ }
2126
+
2127
+ .sb-composer {
2128
+ min-height: 120px;
2129
+ gap: 0;
2130
+ border-radius: 16px;
2131
+ background: #1c1c1a;
2132
+ box-shadow: none;
2133
+ }
2134
+
2135
+ .sb-composer:focus-within {
2136
+ border-color: var(--border-strong);
2137
+ box-shadow: none;
2138
+ }
2139
+
2140
+ .sb-composer__header {
2141
+ padding: 10px 14px 0;
2142
+ }
2143
+
2144
+ .sb-composer__body textarea {
2145
+ min-height: 62px;
2146
+ padding: 16px 20px 6px;
2147
+ font-size: 14px;
2148
+ }
2149
+
2150
+ .sb-composer__footer {
2151
+ padding: 5px 12px 12px;
2152
+ }
2153
+
2154
+ .sb-composer__tool {
2155
+ border: 1px solid var(--border);
2156
+ }
2157
+
2158
+ .sb-composer__submit {
2159
+ width: 36px;
2160
+ height: 36px;
2161
+ }
2162
+
2163
+ .sb-attachment {
2164
+ background: var(--secondary);
2165
+ }
2166
+
2167
+ .sb-composer__drop {
2168
+ color: var(--primary);
2169
+ background: color-mix(in srgb, var(--background) 88%, transparent);
2170
+ }
2171
+
2172
+ @media (max-width: 640px) {
2173
+ .sb-conversation__content {
2174
+ gap: 20px;
2175
+ padding: 20px 16px 86px;
2176
+ }
2177
+
2178
+ .sb-message--user {
2179
+ width: fit-content;
2180
+ max-width: 88%;
2181
+ }
2182
+
2183
+ .sb-composer {
2184
+ min-height: 108px;
2185
+ }
2186
+ }