@tanstack/ai-devtools-core 0.3.37 → 0.4.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 (52) hide show
  1. package/dist/Shell/DKCFIT6H.js +12142 -0
  2. package/dist/Shell/SLOX2TPU.js +12119 -0
  3. package/dist/Shell/Z6HLJOVZ.js +10170 -0
  4. package/dist/dev.js +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/production/Shell/DKCFIT6H.js +12142 -0
  7. package/dist/production/Shell/SLOX2TPU.js +12119 -0
  8. package/dist/production/Shell/Z6HLJOVZ.js +10170 -0
  9. package/dist/production/dev.js +1 -1
  10. package/dist/production/index.js +1 -1
  11. package/dist/production/server.js +1 -1
  12. package/dist/server.js +1 -1
  13. package/package.json +4 -4
  14. package/src/components/Shell.tsx +74 -30
  15. package/src/components/conversation/IterationCard.tsx +261 -12
  16. package/src/components/conversation/IterationTimeline.tsx +66 -16
  17. package/src/components/conversation/index.ts +0 -9
  18. package/src/components/hooks/FixtureNamePopover.tsx +69 -0
  19. package/src/components/hooks/GenerationPanel.tsx +847 -0
  20. package/src/components/hooks/HookDashboard.tsx +292 -0
  21. package/src/components/hooks/HookDetails.tsx +1757 -0
  22. package/src/components/hooks/ToolFixtureForm.tsx +347 -0
  23. package/src/components/hooks/hook-dashboard-model.ts +134 -0
  24. package/src/components/hooks/index.ts +4 -0
  25. package/src/components/hooks/preview-messages.ts +117 -0
  26. package/src/components/hooks/preview-model.ts +195 -0
  27. package/src/components/utils/format.ts +0 -58
  28. package/src/store/ai-context.tsx +1165 -159
  29. package/src/store/ai-store.ts +0 -1
  30. package/src/store/hook-registry.ts +815 -0
  31. package/src/store/message-event-utils.ts +60 -0
  32. package/src/styles/use-styles.ts +1558 -99
  33. package/dist/Shell/MRWZEHAJ.js +0 -6225
  34. package/dist/Shell/RRRNZJ5E.js +0 -7560
  35. package/dist/production/Shell/MRWZEHAJ.js +0 -6225
  36. package/dist/production/Shell/RRRNZJ5E.js +0 -7560
  37. package/src/components/ConversationDetails.tsx +0 -216
  38. package/src/components/ConversationsList.tsx +0 -21
  39. package/src/components/conversation/ActivityEventsTab.tsx +0 -57
  40. package/src/components/conversation/ChunkBadges.tsx +0 -51
  41. package/src/components/conversation/ChunkItem.tsx +0 -273
  42. package/src/components/conversation/ChunksCollapsible.tsx +0 -56
  43. package/src/components/conversation/ChunksTab.tsx +0 -87
  44. package/src/components/conversation/ConversationHeader.tsx +0 -106
  45. package/src/components/conversation/ConversationTabs.tsx +0 -205
  46. package/src/components/conversation/MessageCard.tsx +0 -174
  47. package/src/components/conversation/MessageGroup.tsx +0 -101
  48. package/src/components/conversation/MessagesTab.tsx +0 -30
  49. package/src/components/conversation/SummariesTab.tsx +0 -91
  50. package/src/components/conversation/ToolCallDisplay.tsx +0 -99
  51. package/src/components/list/ConversationRow.tsx +0 -85
  52. package/src/components/list/index.ts +0 -1
@@ -10,10 +10,20 @@ const stylesFactory = (theme: 'light' | 'dark') => {
10
10
  const t = (light: string, dark: string) => (theme === 'light' ? light : dark)
11
11
 
12
12
  return {
13
+ shellRoot: css`
14
+ box-sizing: border-box;
15
+ display: flex;
16
+ flex-direction: column;
17
+ height: calc(var(--tsd-main-panel-height, 100%) - 1px);
18
+ max-height: calc(var(--tsd-main-panel-height, 100%) - 1px);
19
+ min-height: 0;
20
+ overflow: hidden;
21
+ `,
13
22
  mainContainer: css`
14
23
  display: flex;
15
24
  flex: 1;
16
- min-height: 80%;
25
+ height: auto;
26
+ min-height: 0;
17
27
  overflow: hidden;
18
28
  padding: ${size[2]};
19
29
  `,
@@ -62,6 +72,7 @@ const stylesFactory = (theme: 'light' | 'dark') => {
62
72
  border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
63
73
  display: flex;
64
74
  flex-direction: column;
75
+ height: 100%;
65
76
  overflow: hidden;
66
77
  min-height: 0;
67
78
  flex-shrink: 0;
@@ -72,6 +83,7 @@ const stylesFactory = (theme: 'light' | 'dark') => {
72
83
  border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
73
84
  display: flex;
74
85
  flex-direction: column;
86
+ height: 100%;
75
87
  overflow: hidden;
76
88
  min-height: 0;
77
89
  flex: 1;
@@ -378,138 +390,1513 @@ const stylesFactory = (theme: 'light' | 'dark') => {
378
390
  display: inline-flex;
379
391
  align-items: center;
380
392
  gap: ${size[1]};
381
- padding: ${size[1]} ${size[2]};
382
- border-radius: ${border.radius.md};
393
+ padding: ${size[1]} ${size[2]};
394
+ border-radius: ${border.radius.md};
395
+ border: 1px solid ${t(colors.gray[300], colors.darkGray[500])};
396
+ background: ${t(colors.gray[200], colors.darkGray[600])};
397
+ color: ${t(colors.gray[900], colors.gray[100])};
398
+ font-size: ${fontSize.xs};
399
+ cursor: pointer;
400
+ user-select: none;
401
+ transition:
402
+ background 0.15s,
403
+ border-color 0.15s;
404
+ &:hover {
405
+ background: ${t(colors.gray[300], colors.darkGray[500])};
406
+ border-color: ${t(colors.gray[400], colors.darkGray[400])};
407
+ }
408
+ `,
409
+ filterButtonActive: css`
410
+ background: ${colors.pink[400]};
411
+ color: ${colors.white};
412
+ border-color: ${colors.pink[400]};
413
+ &:hover {
414
+ background: ${colors.pink[500]};
415
+ border-color: ${colors.pink[500]};
416
+ }
417
+ `,
418
+ actionsRow: css`
419
+ display: flex;
420
+ gap: ${size[1.5]};
421
+ `,
422
+ clearAllButton: css`
423
+ flex: 1;
424
+ font-size: ${fontSize.xs};
425
+ `,
426
+ },
427
+ // ConversationsList component styles
428
+ conversationsList: {
429
+ rowMain: css`
430
+ display: flex;
431
+ flex-direction: column;
432
+ gap: 4px;
433
+ flex: 1;
434
+ min-width: 0;
435
+ `,
436
+ rowTop: css`
437
+ display: flex;
438
+ align-items: center;
439
+ justify-content: space-between;
440
+ gap: ${size[2]};
441
+ `,
442
+ rowRight: css`
443
+ display: flex;
444
+ align-items: center;
445
+ gap: ${size[1]};
446
+ flex-shrink: 0;
447
+ `,
448
+ rowContent: css`
449
+ display: flex;
450
+ align-items: center;
451
+ gap: ${size[2]};
452
+ flex: 1;
453
+ `,
454
+ rowInfo: css`
455
+ display: flex;
456
+ align-items: center;
457
+ gap: ${size[1]};
458
+ min-width: 0;
459
+ flex: 1;
460
+ `,
461
+ typeDot: css`
462
+ width: 8px;
463
+ height: 8px;
464
+ border-radius: 50%;
465
+ `,
466
+ label: css`
467
+ font-weight: ${font.weight.semibold};
468
+ `,
469
+ toolCallsBadge: css`
470
+ display: flex;
471
+ align-items: center;
472
+ gap: 3px;
473
+ padding: 2px 6px;
474
+ border-radius: ${border.radius.sm};
475
+ background: oklch(0.35 0.1 280);
476
+ color: oklch(0.8 0.12 280);
477
+ font-size: ${fontSize.xs};
478
+ font-weight: ${font.weight.semibold};
479
+ `,
480
+ statusDot: css`
481
+ width: 6px;
482
+ height: 6px;
483
+ border-radius: 50%;
484
+ margin-left: auto;
485
+ `,
486
+ stats: css`
487
+ display: flex;
488
+ align-items: center;
489
+ gap: ${size[2]};
490
+ font-size: 10px;
491
+ opacity: 0.7;
492
+ flex-wrap: wrap;
493
+ `,
494
+ statItem: css`
495
+ display: flex;
496
+ align-items: center;
497
+ gap: 2px;
498
+ white-space: nowrap;
499
+ `,
500
+ tokensBadge: css`
501
+ display: flex;
502
+ align-items: center;
503
+ gap: 2px;
504
+ padding: 1px 5px;
505
+ border-radius: ${border.radius.sm};
506
+ background: oklch(0.35 0.08 220);
507
+ color: oklch(0.75 0.12 220);
508
+ font-size: 10px;
509
+ font-weight: ${font.weight.semibold};
510
+ white-space: nowrap;
511
+ `,
512
+ loadingIndicator: css`
513
+ font-size: 12px;
514
+ color: oklch(0.7 0.17 142);
515
+ animation: spin 1s linear infinite;
516
+ @keyframes spin {
517
+ from {
518
+ transform: rotate(0deg);
519
+ }
520
+ to {
521
+ transform: rotate(360deg);
522
+ }
523
+ }
524
+ `,
525
+ },
526
+ hookDashboard: {
527
+ container: css`
528
+ display: flex;
529
+ flex: 1;
530
+ min-height: 0;
531
+ flex-direction: column;
532
+ `,
533
+ summary: css`
534
+ display: grid;
535
+ grid-template-columns: repeat(3, minmax(0, 1fr));
536
+ gap: ${size[2]};
537
+ padding: ${size[3]};
538
+ border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
539
+ background: ${t(colors.gray[50], colors.darkGray[800])};
540
+ `,
541
+ summaryItem: css`
542
+ display: flex;
543
+ min-width: 0;
544
+ flex-direction: column;
545
+ gap: 1px;
546
+ `,
547
+ summaryValue: css`
548
+ color: ${t(colors.gray[900], colors.gray[50])};
549
+ font-family: ${fontFamily.mono};
550
+ font-size: ${fontSize.md};
551
+ font-weight: ${font.weight.bold};
552
+ line-height: 1;
553
+ `,
554
+ summaryLabel: css`
555
+ color: ${t(colors.gray[500], colors.gray[400])};
556
+ font-size: 10px;
557
+ font-weight: ${font.weight.semibold};
558
+ letter-spacing: 0;
559
+ text-transform: uppercase;
560
+ `,
561
+ clearButton: css`
562
+ align-self: center;
563
+ border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};
564
+ border-radius: ${border.radius.sm};
565
+ background: ${t(colors.white, colors.darkGray[700])};
566
+ color: ${t(colors.gray[700], colors.gray[200])};
567
+ cursor: pointer;
568
+ grid-column: 1 / -1;
569
+ font-size: ${fontSize.xs};
570
+ padding: ${size[1]} ${size[2]};
571
+ width: 100%;
572
+ &:hover:not(:disabled) {
573
+ border-color: ${t(colors.red[300], colors.red[600])};
574
+ color: ${t(colors.red[700], colors.red[300])};
575
+ }
576
+ &:disabled {
577
+ cursor: not-allowed;
578
+ opacity: 0.45;
579
+ }
580
+ `,
581
+ empty: css`
582
+ color: ${t(colors.gray[500], colors.gray[500])};
583
+ font-size: ${fontSize.sm};
584
+ padding: ${size[4]};
585
+ text-align: center;
586
+ `,
587
+ list: css`
588
+ display: flex;
589
+ flex: 1;
590
+ min-height: 0;
591
+ flex-direction: column;
592
+ gap: ${size[2]};
593
+ overflow-y: auto;
594
+ padding: ${size[2]};
595
+ `,
596
+ categorySection: css`
597
+ display: flex;
598
+ flex-direction: column;
599
+ gap: ${size[1.5]};
600
+ `,
601
+ categoryHeader: css`
602
+ align-items: center;
603
+ color: ${t(colors.gray[600], colors.gray[400])};
604
+ display: flex;
605
+ font-size: 10px;
606
+ font-weight: ${font.weight.semibold};
607
+ justify-content: space-between;
608
+ padding: ${size[1]} ${size[1]};
609
+ text-transform: uppercase;
610
+ `,
611
+ categoryLabel: css`
612
+ overflow: hidden;
613
+ text-overflow: ellipsis;
614
+ white-space: nowrap;
615
+ `,
616
+ categoryCount: css`
617
+ border-radius: ${border.radius.sm};
618
+ background: ${t(colors.gray[200], colors.darkGray[700])};
619
+ color: ${t(colors.gray[600], colors.gray[300])};
620
+ font-family: ${fontFamily.mono};
621
+ font-size: 10px;
622
+ padding: 1px ${size[1.5]};
623
+ `,
624
+ categoryRows: css`
625
+ display: flex;
626
+ flex-direction: column;
627
+ gap: ${size[2]};
628
+ `,
629
+ row: css`
630
+ display: flex;
631
+ width: 100%;
632
+ min-width: 0;
633
+ cursor: pointer;
634
+ flex-direction: column;
635
+ gap: ${size[2]};
636
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
637
+ border-radius: ${border.radius.md};
638
+ background: ${t(colors.white, colors.darkGray[700])};
639
+ color: inherit;
640
+ padding: ${size[3]};
641
+ text-align: left;
642
+ transition:
643
+ background 0.15s ease,
644
+ border-color 0.15s ease,
645
+ box-shadow 0.15s ease;
646
+ &:hover {
647
+ border-color: ${t(colors.blue[300], colors.blue[700])};
648
+ background: ${t(colors.blue[50], colors.blue[900] + '20')};
649
+ }
650
+ `,
651
+ rowLive: css`
652
+ border-color: ${t(colors.green[300], colors.green[700])};
653
+ box-shadow: inset 3px 0 0 ${t(colors.green[500], colors.green[400])};
654
+ `,
655
+ rowUpdating: css`
656
+ border-color: ${t(colors.blue[400], colors.blue[500])};
657
+ background: ${t(colors.blue[50], colors.blue[900] + '30')};
658
+ box-shadow: inset 3px 0 0 ${t(colors.blue[500], colors.blue[400])};
659
+ `,
660
+ rowSelected: css`
661
+ border-color: ${t(colors.blue[500], colors.blue[500])};
662
+ background: ${t(colors.blue[50], colors.blue[900] + '35')};
663
+ box-shadow: none;
664
+ `,
665
+ rowMain: css`
666
+ display: flex;
667
+ min-width: 0;
668
+ flex-direction: column;
669
+ gap: 3px;
670
+ `,
671
+ rowTitleLine: css`
672
+ align-items: center;
673
+ display: flex;
674
+ gap: ${size[1]};
675
+ min-width: 0;
676
+ `,
677
+ rowTitle: css`
678
+ color: ${t(colors.gray[900], colors.gray[100])};
679
+ font-size: ${fontSize.sm};
680
+ font-weight: ${font.weight.semibold};
681
+ min-width: 0;
682
+ overflow: hidden;
683
+ text-overflow: ellipsis;
684
+ white-space: nowrap;
685
+ `,
686
+ rowId: css`
687
+ color: ${t(colors.gray[500], colors.gray[400])};
688
+ font-family: ${fontFamily.mono};
689
+ font-size: 10px;
690
+ overflow: hidden;
691
+ text-overflow: ellipsis;
692
+ white-space: nowrap;
693
+ `,
694
+ rowMeta: css`
695
+ display: flex;
696
+ flex-wrap: wrap;
697
+ gap: ${size[1]};
698
+ `,
699
+ lifecycleBadge: css`
700
+ border-radius: ${border.radius.sm};
701
+ background: ${t(colors.green[50], colors.green[900] + '30')};
702
+ color: ${t(colors.green[700], colors.green[300])};
703
+ font-family: ${fontFamily.mono};
704
+ font-size: 10px;
705
+ font-weight: ${font.weight.semibold};
706
+ padding: 1px ${size[1.5]};
707
+ `,
708
+ lifecycleStreaming: css`
709
+ background: ${t(colors.blue[50], colors.blue[900] + '35')};
710
+ color: ${t(colors.blue[700], colors.blue[300])};
711
+ `,
712
+ lifecycleErrored: css`
713
+ background: ${t(colors.red[50], colors.red[900] + '35')};
714
+ color: ${t(colors.red[700], colors.red[300])};
715
+ `,
716
+ kindBadge: css`
717
+ border-radius: ${border.radius.sm};
718
+ background: ${t(colors.purple[50], colors.purple[900] + '30')};
719
+ color: ${t(colors.purple[700], colors.purple[300])};
720
+ font-family: ${fontFamily.mono};
721
+ font-size: 10px;
722
+ padding: 1px ${size[1.5]};
723
+ `,
724
+ countBadge: css`
725
+ border-radius: ${border.radius.sm};
726
+ background: ${t(colors.gray[100], colors.darkGray[600])};
727
+ color: ${t(colors.gray[600], colors.gray[300])};
728
+ font-family: ${fontFamily.mono};
729
+ font-size: 10px;
730
+ padding: 1px ${size[1.5]};
731
+ `,
732
+ liveIndicator: css`
733
+ width: 7px;
734
+ height: 7px;
735
+ border-radius: 999px;
736
+ background: ${t(colors.green[500], colors.green[400])};
737
+ box-shadow: 0 0 0 0 ${t(colors.green[400], colors.green[500])};
738
+ flex-shrink: 0;
739
+ animation: hookLivePulse 1.2s ease-out infinite;
740
+ @keyframes hookLivePulse {
741
+ 0% {
742
+ box-shadow: 0 0 0 0 ${t(colors.green[400], colors.green[500])};
743
+ }
744
+ 70% {
745
+ box-shadow: 0 0 0 6px transparent;
746
+ }
747
+ 100% {
748
+ box-shadow: 0 0 0 0 transparent;
749
+ }
750
+ }
751
+ `,
752
+ updateBadge: css`
753
+ border-radius: 999px;
754
+ background: ${t(colors.blue[600], colors.blue[500])};
755
+ color: ${colors.white};
756
+ flex-shrink: 0;
757
+ font-family: ${fontFamily.mono};
758
+ font-size: 10px;
759
+ font-weight: ${font.weight.semibold};
760
+ padding: 1px ${size[1.5]};
761
+ white-space: nowrap;
762
+ `,
763
+ },
764
+ hookDetails: {
765
+ empty: css`
766
+ align-items: center;
767
+ color: ${t(colors.gray[500], colors.gray[500])};
768
+ display: flex;
769
+ flex: 1;
770
+ font-size: ${fontSize.sm};
771
+ justify-content: center;
772
+ padding: ${size[4]};
773
+ text-align: center;
774
+ `,
775
+ overview: css`
776
+ display: flex;
777
+ flex: 1;
778
+ min-height: 0;
779
+ flex-direction: column;
780
+ gap: ${size[4]};
781
+ overflow-y: auto;
782
+ padding: ${size[4]};
783
+ `,
784
+ overviewHeader: css`
785
+ display: flex;
786
+ align-items: flex-start;
787
+ justify-content: space-between;
788
+ gap: ${size[3]};
789
+ `,
790
+ overviewTitle: css`
791
+ color: ${t(colors.gray[900], colors.gray[100])};
792
+ font-size: ${fontSize.lg};
793
+ font-weight: ${font.weight.bold};
794
+ `,
795
+ overviewSubtitle: css`
796
+ color: ${t(colors.gray[500], colors.gray[400])};
797
+ font-size: ${fontSize.sm};
798
+ margin-top: ${size[1]};
799
+ `,
800
+ overviewMetricGrid: css`
801
+ display: grid;
802
+ grid-template-columns: repeat(4, minmax(0, 1fr));
803
+ gap: ${size[3]};
804
+ @media (max-width: 900px) {
805
+ grid-template-columns: repeat(2, minmax(0, 1fr));
806
+ }
807
+ `,
808
+ overviewMetricCard: css`
809
+ display: flex;
810
+ min-width: 0;
811
+ flex-direction: column;
812
+ gap: ${size[1]};
813
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
814
+ border-radius: ${border.radius.md};
815
+ background: ${t(colors.white, colors.darkGray[800])};
816
+ padding: ${size[3]};
817
+ `,
818
+ overviewGroups: css`
819
+ display: grid;
820
+ grid-template-columns: repeat(2, minmax(0, 1fr));
821
+ gap: ${size[3]};
822
+ @media (max-width: 960px) {
823
+ grid-template-columns: 1fr;
824
+ }
825
+ `,
826
+ overviewGroupCard: css`
827
+ display: flex;
828
+ min-width: 0;
829
+ flex-direction: column;
830
+ gap: ${size[2]};
831
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
832
+ border-radius: ${border.radius.md};
833
+ background: ${t(colors.white, colors.darkGray[800])};
834
+ padding: ${size[3]};
835
+ `,
836
+ overviewGroupHeader: css`
837
+ display: flex;
838
+ align-items: center;
839
+ justify-content: space-between;
840
+ color: ${t(colors.gray[700], colors.gray[200])};
841
+ font-size: ${fontSize.sm};
842
+ font-weight: ${font.weight.semibold};
843
+ `,
844
+ overviewHookButton: css`
845
+ display: flex;
846
+ width: 100%;
847
+ min-width: 0;
848
+ align-items: center;
849
+ justify-content: space-between;
850
+ gap: ${size[3]};
851
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
852
+ border-radius: ${border.radius.sm};
853
+ background: ${t(colors.gray[50], colors.darkGray[700])};
854
+ color: inherit;
855
+ cursor: pointer;
856
+ padding: ${size[2]} ${size[3]};
857
+ text-align: left;
858
+ transition:
859
+ background 0.15s ease,
860
+ border-color 0.15s ease;
861
+ &:hover {
862
+ border-color: ${t(colors.blue[300], colors.blue[700])};
863
+ background: ${t(colors.blue[50], colors.blue[900] + '20')};
864
+ }
865
+ `,
866
+ overviewHookMain: css`
867
+ display: flex;
868
+ min-width: 0;
869
+ flex-direction: column;
870
+ gap: 2px;
871
+ `,
872
+ overviewHookTitle: css`
873
+ color: ${t(colors.gray[900], colors.gray[100])};
874
+ font-size: ${fontSize.sm};
875
+ font-weight: ${font.weight.semibold};
876
+ overflow: hidden;
877
+ text-overflow: ellipsis;
878
+ white-space: nowrap;
879
+ `,
880
+ overviewHookId: css`
881
+ color: ${t(colors.gray[500], colors.gray[400])};
882
+ font-family: ${fontFamily.mono};
883
+ font-size: 10px;
884
+ overflow: hidden;
885
+ text-overflow: ellipsis;
886
+ white-space: nowrap;
887
+ `,
888
+ overviewHookMeta: css`
889
+ display: flex;
890
+ flex-shrink: 0;
891
+ flex-wrap: wrap;
892
+ justify-content: flex-end;
893
+ gap: ${size[1]};
894
+ `,
895
+ container: css`
896
+ display: flex;
897
+ flex: 1;
898
+ min-height: 0;
899
+ flex-direction: column;
900
+ `,
901
+ header: css`
902
+ display: flex;
903
+ align-items: center;
904
+ flex-shrink: 0;
905
+ gap: ${size[3]};
906
+ justify-content: space-between;
907
+ padding: ${size[3]} ${size[4]};
908
+ border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
909
+ background: ${t(colors.gray[50], colors.darkGray[800])};
910
+ `,
911
+ headerMain: css`
912
+ display: flex;
913
+ min-width: 0;
914
+ flex-direction: column;
915
+ gap: ${size[1]};
916
+ `,
917
+ titleRow: css`
918
+ align-items: center;
919
+ display: flex;
920
+ flex-wrap: wrap;
921
+ gap: ${size[2]};
922
+ min-width: 0;
923
+ `,
924
+ title: css`
925
+ color: ${t(colors.gray[900], colors.gray[100])};
926
+ font-size: ${fontSize.md};
927
+ font-weight: ${font.weight.bold};
928
+ `,
929
+ lifecycle: css`
930
+ border-radius: ${border.radius.sm};
931
+ background: ${t(colors.green[50], colors.green[900] + '30')};
932
+ color: ${t(colors.green[700], colors.green[300])};
933
+ font-family: ${fontFamily.mono};
934
+ font-size: 10px;
935
+ font-weight: ${font.weight.semibold};
936
+ padding: 1px ${size[1.5]};
937
+ `,
938
+ kind: css`
939
+ border-radius: ${border.radius.sm};
940
+ background: ${t(colors.blue[50], colors.blue[900] + '30')};
941
+ color: ${t(colors.blue[700], colors.blue[300])};
942
+ font-family: ${fontFamily.mono};
943
+ font-size: 10px;
944
+ padding: 1px ${size[1.5]};
945
+ `,
946
+ identity: css`
947
+ color: ${t(colors.gray[500], colors.gray[400])};
948
+ display: flex;
949
+ flex-wrap: wrap;
950
+ gap: ${size[2]};
951
+ font-family: ${fontFamily.mono};
952
+ font-size: ${fontSize.xs};
953
+ `,
954
+ metrics: css`
955
+ display: grid;
956
+ align-items: stretch;
957
+ flex-shrink: 0;
958
+ grid-template-columns: repeat(4, minmax(58px, auto));
959
+ gap: ${size[2]};
960
+ `,
961
+ metric: css`
962
+ display: flex;
963
+ min-height: 38px;
964
+ flex-direction: column;
965
+ justify-content: center;
966
+ border-left: 1px solid ${t(colors.gray[200], colors.darkGray[600])};
967
+ padding-left: ${size[2]};
968
+ `,
969
+ metricValue: css`
970
+ color: ${t(colors.gray[900], colors.gray[50])};
971
+ display: block;
972
+ font-family: ${fontFamily.mono};
973
+ font-size: ${fontSize.md};
974
+ font-weight: ${font.weight.bold};
975
+ line-height: 1;
976
+ `,
977
+ metricLabel: css`
978
+ color: ${t(colors.gray[500], colors.gray[400])};
979
+ display: block;
980
+ font-size: 10px;
981
+ font-weight: ${font.weight.semibold};
982
+ letter-spacing: 0.03em;
983
+ margin-top: 2px;
984
+ text-transform: uppercase;
985
+ `,
986
+ tabs: css`
987
+ display: flex;
988
+ flex-shrink: 0;
989
+ gap: ${size[1]};
990
+ overflow-x: auto;
991
+ padding: ${size[3]} ${size[4]};
992
+ border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
993
+ `,
994
+ tab: css`
995
+ border: 1px solid transparent;
996
+ border-radius: ${border.radius.sm};
997
+ background: transparent;
998
+ color: ${t(colors.gray[600], colors.gray[400])};
999
+ cursor: pointer;
1000
+ font-size: ${fontSize.xs};
1001
+ font-weight: ${font.weight.semibold};
1002
+ padding: ${size[1]} ${size[2]};
1003
+ white-space: nowrap;
1004
+ &:hover {
1005
+ background: ${t(colors.gray[200], colors.darkGray[700])};
1006
+ color: ${t(colors.gray[900], colors.gray[100])};
1007
+ }
1008
+ `,
1009
+ tabActive: css`
1010
+ background: ${t(colors.blue[50], colors.blue[900] + '35')};
1011
+ border-color: ${t(colors.blue[300], colors.blue[700])};
1012
+ color: ${t(colors.blue[700], colors.blue[300])};
1013
+ `,
1014
+ body: css`
1015
+ display: grid;
1016
+ flex: 1;
1017
+ grid-template-columns: minmax(0, 1fr) minmax(280px, 360px);
1018
+ height: 100%;
1019
+ min-height: 0;
1020
+ overflow: hidden;
1021
+ @media (max-width: 900px) {
1022
+ grid-template-columns: 1fr;
1023
+ }
1024
+ `,
1025
+ bodySinglePane: css`
1026
+ grid-template-columns: minmax(0, 1fr);
1027
+ `,
1028
+ primary: css`
1029
+ height: 100%;
1030
+ min-height: 0;
1031
+ overflow: auto;
1032
+ padding: ${size[3]};
1033
+ `,
1034
+ previewPane: css`
1035
+ border-left: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1036
+ background: ${t(colors.white, colors.darkGray[900])};
1037
+ display: flex;
1038
+ height: 100%;
1039
+ max-height: 100%;
1040
+ min-height: 0;
1041
+ flex-direction: column;
1042
+ overflow: hidden;
1043
+ @media (max-width: 900px) {
1044
+ border-left: 0;
1045
+ border-top: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1046
+ max-height: 360px;
1047
+ }
1048
+ `,
1049
+ previewHeader: css`
1050
+ border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1051
+ color: ${t(colors.gray[700], colors.gray[300])};
1052
+ flex-shrink: 0;
1053
+ font-size: ${fontSize.xs};
1054
+ font-weight: ${font.weight.bold};
1055
+ letter-spacing: 0.04em;
1056
+ padding: ${size[2]} ${size[3]};
1057
+ text-transform: uppercase;
1058
+ `,
1059
+ stack: css`
1060
+ display: flex;
1061
+ flex-direction: column;
1062
+ gap: ${size[3]};
1063
+ `,
1064
+ section: css`
1065
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1066
+ border-radius: ${border.radius.md};
1067
+ background: ${t(colors.white, colors.darkGray[700])};
1068
+ overflow: hidden;
1069
+ `,
1070
+ sectionTitle: css`
1071
+ color: ${t(colors.gray[700], colors.gray[300])};
1072
+ font-size: ${fontSize.xs};
1073
+ font-weight: ${font.weight.bold};
1074
+ letter-spacing: 0.04em;
1075
+ padding: ${size[2]} ${size[3]};
1076
+ text-transform: uppercase;
1077
+ `,
1078
+ conversationFallback: css`
1079
+ display: flex;
1080
+ flex-direction: column;
1081
+ gap: ${size[3]};
1082
+ `,
1083
+ generationRuns: css`
1084
+ display: flex;
1085
+ flex-direction: column;
1086
+ gap: ${size[2]};
1087
+ `,
1088
+ generationMetaGrid: css`
1089
+ display: grid;
1090
+ gap: ${size[2]};
1091
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
1092
+ padding: 0 ${size[3]} ${size[3]};
1093
+ `,
1094
+ generationMetaItem: css`
1095
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1096
+ border-radius: ${border.radius.sm};
1097
+ background: ${t(colors.gray[50], colors.darkGray[800])};
1098
+ display: flex;
1099
+ min-width: 0;
1100
+ flex-direction: column;
1101
+ gap: 2px;
1102
+ padding: ${size[2]};
1103
+ `,
1104
+ generationMetaLabel: css`
1105
+ color: ${t(colors.gray[500], colors.gray[400])};
1106
+ font-size: 10px;
1107
+ font-weight: ${font.weight.bold};
1108
+ letter-spacing: 0;
1109
+ text-transform: uppercase;
1110
+ `,
1111
+ generationMetaValue: css`
1112
+ color: ${t(colors.gray[900], colors.gray[100])};
1113
+ font-family: ${fontFamily.mono};
1114
+ font-size: ${fontSize.xs};
1115
+ line-height: 1.35;
1116
+ overflow-wrap: anywhere;
1117
+ `,
1118
+ progressBlock: css`
1119
+ display: flex;
1120
+ flex-direction: column;
1121
+ gap: ${size[1]};
1122
+ padding: 0 ${size[3]} ${size[3]};
1123
+ `,
1124
+ progressText: css`
1125
+ color: ${t(colors.gray[600], colors.gray[300])};
1126
+ display: flex;
1127
+ font-family: ${fontFamily.mono};
1128
+ font-size: ${fontSize.xs};
1129
+ justify-content: space-between;
1130
+ gap: ${size[2]};
1131
+ `,
1132
+ progressTrack: css`
1133
+ background: ${t(colors.gray[200], colors.darkGray[700])};
1134
+ border-radius: ${border.radius.sm};
1135
+ height: 8px;
1136
+ overflow: hidden;
1137
+ `,
1138
+ progressFill: css`
1139
+ background: ${t(colors.blue[500], colors.blue[400])};
1140
+ height: 100%;
1141
+ transition: width 0.18s ease;
1142
+ `,
1143
+ generationPreview: css`
1144
+ display: flex;
1145
+ min-height: 0;
1146
+ flex-direction: column;
1147
+ gap: ${size[3]};
1148
+ padding: ${size[3]};
1149
+ `,
1150
+ generationPreviewCompact: css`
1151
+ flex: 1;
1152
+ overflow: auto;
1153
+ `,
1154
+ generationText: css`
1155
+ color: ${t(colors.gray[900], colors.gray[100])};
1156
+ font-size: ${fontSize.sm};
1157
+ line-height: 1.55;
1158
+ white-space: pre-wrap;
1159
+ word-break: break-word;
1160
+ `,
1161
+ mediaGrid: css`
1162
+ display: grid;
1163
+ gap: ${size[2]};
1164
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
1165
+ `,
1166
+ audioList: css`
1167
+ display: flex;
1168
+ flex-direction: column;
1169
+ gap: ${size[2]};
1170
+ `,
1171
+ mediaFrame: css`
1172
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1173
+ border-radius: ${border.radius.md};
1174
+ background: ${t(colors.gray[50], colors.darkGray[800])};
1175
+ display: flex;
1176
+ min-width: 0;
1177
+ flex-direction: column;
1178
+ gap: ${size[2]};
1179
+ overflow: hidden;
1180
+ padding: ${size[2]};
1181
+ audio,
1182
+ video {
1183
+ width: 100%;
1184
+ }
1185
+ `,
1186
+ imagePreview: css`
1187
+ aspect-ratio: 1 / 1;
1188
+ background: ${t(colors.white, colors.darkGray[900])};
1189
+ border-radius: ${border.radius.sm};
1190
+ max-height: 360px;
1191
+ object-fit: contain;
1192
+ width: 100%;
1193
+ `,
1194
+ videoPreview: css`
1195
+ display: flex;
1196
+ min-width: 0;
1197
+ flex-direction: column;
1198
+ gap: ${size[3]};
1199
+ video {
1200
+ background: ${t(colors.black, colors.black)};
1201
+ border-radius: ${border.radius.sm};
1202
+ max-height: 360px;
1203
+ }
1204
+ `,
1205
+ mediaMeta: css`
1206
+ display: flex;
1207
+ flex-wrap: wrap;
1208
+ gap: ${size[1]};
1209
+ span {
1210
+ border-radius: ${border.radius.sm};
1211
+ background: ${t(colors.gray[100], colors.darkGray[700])};
1212
+ color: ${t(colors.gray[600], colors.gray[300])};
1213
+ font-family: ${fontFamily.mono};
1214
+ font-size: 10px;
1215
+ padding: 1px ${size[1.5]};
1216
+ }
1217
+ `,
1218
+ messageTimeline: css`
1219
+ display: flex;
1220
+ min-height: 0;
1221
+ flex-direction: column;
1222
+ gap: ${size[2]};
1223
+ `,
1224
+ timelineMessage: css`
1225
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1226
+ border-radius: ${border.radius.md};
1227
+ background: ${t(colors.white, colors.darkGray[700])};
1228
+ display: flex;
1229
+ flex-direction: column;
1230
+ gap: ${size[1.5]};
1231
+ padding: ${size[3]};
1232
+ transition:
1233
+ border-color 0.15s ease,
1234
+ background 0.15s ease;
1235
+ &:hover {
1236
+ border-color: ${t(colors.blue[300], colors.blue[700])};
1237
+ background: ${t(colors.blue[50], colors.blue[900] + '20')};
1238
+ }
1239
+ `,
1240
+ timelineMessageHighlighted: css`
1241
+ border-color: ${t(colors.blue[500], colors.blue[500])};
1242
+ background: ${t(colors.blue[50], colors.blue[900] + '30')};
1243
+ `,
1244
+ jsonPanel: css`
1245
+ background: ${t(colors.gray[50], colors.darkGray[900])};
1246
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1247
+ border-radius: ${border.radius.md};
1248
+ overflow: auto;
1249
+ padding: ${size[2]};
1250
+ `,
1251
+ jsonPanelCompact: css`
1252
+ max-height: 180px;
1253
+ `,
1254
+ runCard: css`
1255
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1256
+ border-radius: ${border.radius.md};
1257
+ background: ${t(colors.white, colors.darkGray[700])};
1258
+ overflow: hidden;
1259
+ transition:
1260
+ border-color 0.15s ease,
1261
+ background 0.15s ease,
1262
+ box-shadow 0.15s ease;
1263
+ &:hover {
1264
+ border-color: ${t(colors.blue[300], colors.blue[700])};
1265
+ background: ${t(colors.blue[50], colors.blue[900] + '18')};
1266
+ }
1267
+ `,
1268
+ runCardHighlighted: css`
1269
+ border-color: ${t(colors.blue[500], colors.blue[500])};
1270
+ background: ${t(colors.blue[50], colors.blue[900] + '30')};
1271
+ box-shadow: inset 0 0 0 1px ${t(colors.blue[300], colors.blue[700])};
1272
+ `,
1273
+ runHeader: css`
1274
+ align-items: flex-start;
1275
+ display: flex;
1276
+ gap: ${size[2]};
1277
+ justify-content: space-between;
1278
+ padding: ${size[2.5]} ${size[3]};
1279
+ border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1280
+ `,
1281
+ runHeading: css`
1282
+ min-width: 0;
1283
+ `,
1284
+ runTitle: css`
1285
+ color: ${t(colors.gray[900], colors.gray[100])};
1286
+ font-size: ${fontSize.sm};
1287
+ font-weight: ${font.weight.semibold};
1288
+ word-break: break-all;
1289
+ `,
1290
+ runMeta: css`
1291
+ color: ${t(colors.gray[500], colors.gray[400])};
1292
+ font-family: ${fontFamily.mono};
1293
+ font-size: 10px;
1294
+ margin-top: ${size[1]};
1295
+ `,
1296
+ runStatusGroup: css`
1297
+ align-items: flex-end;
1298
+ display: flex;
1299
+ flex-direction: column;
1300
+ gap: ${size[1]};
1301
+ `,
1302
+ runStatus: css`
1303
+ border-radius: ${border.radius.sm};
1304
+ background: ${t(colors.blue[50], colors.blue[900] + '30')};
1305
+ color: ${t(colors.blue[700], colors.blue[300])};
1306
+ flex-shrink: 0;
1307
+ font-family: ${fontFamily.mono};
1308
+ font-size: 10px;
1309
+ padding: 1px ${size[1.5]};
1310
+ `,
1311
+ runStatusMuted: css`
1312
+ border-radius: ${border.radius.sm};
1313
+ background: ${t(colors.gray[100], colors.darkGray[800])};
1314
+ color: ${t(colors.gray[600], colors.gray[300])};
1315
+ flex-shrink: 0;
1316
+ font-family: ${fontFamily.mono};
1317
+ font-size: 10px;
1318
+ padding: 1px ${size[1.5]};
1319
+ `,
1320
+ runCardBody: css`
1321
+ display: flex;
1322
+ flex-direction: column;
1323
+ gap: ${size[2.5]};
1324
+ padding: ${size[3]};
1325
+ `,
1326
+ runSummaryGrid: css`
1327
+ display: grid;
1328
+ gap: ${size[2]};
1329
+ grid-template-columns: repeat(auto-fit, minmax(96px, 1fr));
1330
+ `,
1331
+ runDetailsGrid: css`
1332
+ display: grid;
1333
+ gap: ${size[2]};
1334
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
1335
+ `,
1336
+ runField: css`
1337
+ display: flex;
1338
+ min-width: 0;
1339
+ flex-direction: column;
1340
+ gap: ${size[1]};
1341
+ `,
1342
+ generationOutputGrid: css`
1343
+ display: grid;
1344
+ gap: ${size[2]};
1345
+ grid-template-columns: repeat(auto-fill, minmax(116px, 1fr));
1346
+ overflow-y: auto;
1347
+ padding: ${size[3]};
1348
+ `,
1349
+ outputTile: css`
1350
+ appearance: none;
1351
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1352
+ border-radius: ${border.radius.md};
1353
+ background: ${t(colors.gray[50], colors.darkGray[800])};
1354
+ color: inherit;
1355
+ cursor: pointer;
1356
+ display: flex;
1357
+ min-width: 0;
1358
+ flex-direction: column;
1359
+ overflow: hidden;
1360
+ padding: 0;
1361
+ text-align: left;
1362
+ transition:
1363
+ border-color 0.15s ease,
1364
+ background 0.15s ease,
1365
+ transform 0.15s ease;
1366
+ &:hover {
1367
+ border-color: ${t(colors.blue[300], colors.blue[700])};
1368
+ background: ${t(colors.blue[50], colors.blue[900] + '20')};
1369
+ transform: translateY(-1px);
1370
+ }
1371
+ `,
1372
+ outputTileHighlighted: css`
1373
+ border-color: ${t(colors.blue[500], colors.blue[500])};
1374
+ background: ${t(colors.blue[50], colors.blue[900] + '30')};
1375
+ box-shadow: inset 0 0 0 1px ${t(colors.blue[300], colors.blue[700])};
1376
+ transform: translateY(-1px);
1377
+ `,
1378
+ outputTileBody: css`
1379
+ align-items: center;
1380
+ aspect-ratio: 1 / 1;
1381
+ background: ${t(colors.white, colors.darkGray[900])};
1382
+ display: flex;
1383
+ justify-content: center;
1384
+ min-height: 0;
1385
+ overflow: hidden;
1386
+ padding: ${size[1]};
1387
+ audio,
1388
+ video {
1389
+ max-height: 100%;
1390
+ width: 100%;
1391
+ }
1392
+ video {
1393
+ background: ${colors.black};
1394
+ }
1395
+ `,
1396
+ outputTileImage: css`
1397
+ height: 100%;
1398
+ object-fit: contain;
1399
+ width: 100%;
1400
+ `,
1401
+ outputTileText: css`
1402
+ color: ${t(colors.gray[800], colors.gray[100])};
1403
+ display: -webkit-box;
1404
+ font-size: ${fontSize.xs};
1405
+ line-height: 1.4;
1406
+ overflow: hidden;
1407
+ padding: ${size[2]};
1408
+ -webkit-box-orient: vertical;
1409
+ -webkit-line-clamp: 6;
1410
+ word-break: break-word;
1411
+ `,
1412
+ outputTileFooter: css`
1413
+ border-top: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1414
+ display: flex;
1415
+ flex-direction: column;
1416
+ gap: 2px;
1417
+ padding: ${size[1.5]} ${size[2]};
1418
+ span:first-child {
1419
+ color: ${t(colors.gray[500], colors.gray[400])};
1420
+ font-family: ${fontFamily.mono};
1421
+ font-size: 10px;
1422
+ }
1423
+ span:last-child {
1424
+ color: ${t(colors.gray[800], colors.gray[100])};
1425
+ font-size: ${fontSize.xs};
1426
+ overflow: hidden;
1427
+ text-overflow: ellipsis;
1428
+ white-space: nowrap;
1429
+ }
1430
+ `,
1431
+ outputModalBackdrop: css`
1432
+ --tsrd-font-size: 12px;
1433
+ align-items: center;
1434
+ background: rgb(0 0 0 / 0.82);
1435
+ display: flex;
1436
+ inset: 0;
1437
+ justify-content: center;
1438
+ padding: ${size[6]};
1439
+ position: fixed;
1440
+ z-index: 2147483647;
1441
+ `,
1442
+ outputModalDialog: css`
1443
+ background: ${t(colors.white, colors.darkGray[900])};
1444
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1445
+ border-radius: ${border.radius.md};
1446
+ box-shadow: 0 24px 80px rgb(0 0 0 / 0.45);
1447
+ display: flex;
1448
+ max-height: min(900px, 92vh);
1449
+ max-width: min(1120px, 92vw);
1450
+ min-width: min(720px, 92vw);
1451
+ overflow: hidden;
1452
+ flex-direction: column;
1453
+ `,
1454
+ outputModalHeader: css`
1455
+ align-items: center;
1456
+ border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1457
+ display: flex;
1458
+ justify-content: space-between;
1459
+ gap: ${size[4]};
1460
+ padding: ${size[4]} ${size[5]};
1461
+ `,
1462
+ outputModalTitle: css`
1463
+ color: ${t(colors.gray[900], colors.gray[100])};
1464
+ font-size: ${fontSize.md};
1465
+ font-weight: ${font.weight.semibold};
1466
+ `,
1467
+ outputModalClose: css`
1468
+ align-items: center;
1469
+ background: ${t(colors.gray[100], colors.darkGray[800])};
1470
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1471
+ border-radius: ${border.radius.sm};
1472
+ color: ${t(colors.gray[700], colors.gray[200])};
1473
+ cursor: pointer;
1474
+ display: flex;
1475
+ font-size: ${fontSize.lg};
1476
+ height: 32px;
1477
+ justify-content: center;
1478
+ line-height: 1;
1479
+ width: 32px;
1480
+ &:hover {
1481
+ background: ${t(colors.gray[200], colors.darkGray[700])};
1482
+ }
1483
+ `,
1484
+ outputModalBody: css`
1485
+ align-items: center;
1486
+ display: flex;
1487
+ justify-content: center;
1488
+ min-height: 0;
1489
+ overflow: auto;
1490
+ padding: ${size[4]};
1491
+ img,
1492
+ video {
1493
+ max-height: 76vh;
1494
+ max-width: 100%;
1495
+ }
1496
+ audio {
1497
+ width: min(720px, 84vw);
1498
+ }
1499
+ `,
1500
+ outputModalMedia: css`
1501
+ object-fit: contain;
1502
+ `,
1503
+ outputModalText: css`
1504
+ color: ${t(colors.gray[900], colors.gray[100])};
1505
+ font-size: ${fontSize.sm};
1506
+ line-height: 1.6;
1507
+ max-width: 760px;
1508
+ white-space: pre-wrap;
1509
+ word-break: break-word;
1510
+ `,
1511
+ errorText: css`
1512
+ color: ${t(colors.red[700], colors.red[300])};
1513
+ font-family: ${fontFamily.mono};
1514
+ font-size: ${fontSize.xs};
1515
+ padding: ${size[2]} ${size[3]};
1516
+ white-space: pre-wrap;
1517
+ `,
1518
+ emptySmall: css`
1519
+ color: ${t(colors.gray[500], colors.gray[500])};
1520
+ font-size: ${fontSize.xs};
1521
+ padding: ${size[3]};
1522
+ text-align: center;
1523
+ `,
1524
+ eventList: css`
1525
+ display: flex;
1526
+ flex-direction: column;
1527
+ gap: 1px;
1528
+ `,
1529
+ eventRow: css`
1530
+ align-items: center;
1531
+ background: ${t(colors.gray[50], colors.darkGray[800])};
1532
+ display: flex;
1533
+ gap: ${size[2]};
1534
+ min-width: 0;
1535
+ padding: ${size[2]} ${size[3]};
1536
+ &:hover {
1537
+ background: ${t(colors.blue[50], colors.blue[900] + '25')};
1538
+ }
1539
+ `,
1540
+ eventTime: css`
1541
+ color: ${t(colors.gray[500], colors.gray[400])};
1542
+ flex-shrink: 0;
1543
+ font-family: ${fontFamily.mono};
1544
+ font-size: 10px;
1545
+ `,
1546
+ eventName: css`
1547
+ color: ${t(colors.gray[800], colors.gray[200])};
1548
+ flex: 1;
1549
+ font-family: ${fontFamily.mono};
1550
+ font-size: ${fontSize.xs};
1551
+ min-width: 0;
1552
+ overflow: hidden;
1553
+ text-overflow: ellipsis;
1554
+ white-space: nowrap;
1555
+ `,
1556
+ eventBadge: css`
1557
+ border-radius: ${border.radius.sm};
1558
+ background: ${t(colors.gray[100], colors.darkGray[600])};
1559
+ color: ${t(colors.gray[600], colors.gray[300])};
1560
+ flex-shrink: 0;
1561
+ font-family: ${fontFamily.mono};
1562
+ font-size: 10px;
1563
+ padding: 1px ${size[1.5]};
1564
+ `,
1565
+ messages: css`
1566
+ display: flex;
1567
+ flex: 1;
1568
+ flex-direction: column;
1569
+ gap: ${size[2]};
1570
+ min-height: 0;
1571
+ overflow-y: auto;
1572
+ padding: ${size[3]};
1573
+ `,
1574
+ message: css`
1575
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1576
+ border-radius: ${border.radius.md};
1577
+ background: ${t(colors.gray[50], colors.darkGray[800])};
1578
+ display: flex;
1579
+ flex-direction: column;
1580
+ gap: ${size[1]};
1581
+ padding: ${size[2]};
1582
+ transition:
1583
+ border-color 0.15s ease,
1584
+ background 0.15s ease;
1585
+ `,
1586
+ messageHighlighted: css`
1587
+ border-color: ${t(colors.blue[500], colors.blue[500])};
1588
+ background: ${t(colors.blue[50], colors.blue[900] + '30')};
1589
+ box-shadow: inset 0 0 0 1px ${t(colors.blue[300], colors.blue[700])};
1590
+ `,
1591
+ messageRole: css`
1592
+ color: ${t(colors.gray[500], colors.gray[400])};
1593
+ font-size: 10px;
1594
+ font-weight: ${font.weight.bold};
1595
+ letter-spacing: 0.04em;
1596
+ text-transform: uppercase;
1597
+ `,
1598
+ messageContent: css`
1599
+ color: ${t(colors.gray[800], colors.gray[100])};
1600
+ font-size: ${fontSize.sm};
1601
+ line-height: 1.45;
1602
+ white-space: pre-wrap;
1603
+ word-break: break-word;
1604
+ `,
1605
+ previewPart: css`
1606
+ border-left: 2px solid ${t(colors.gray[300], colors.darkGray[500])};
1607
+ border-radius: ${border.radius.sm};
1608
+ display: flex;
1609
+ flex-direction: column;
1610
+ gap: 2px;
1611
+ margin-top: ${size[1]};
1612
+ padding: ${size[1]} ${size[2]};
1613
+ transition:
1614
+ border-color 0.15s ease,
1615
+ background 0.15s ease;
1616
+ `,
1617
+ previewPartThinking: css`
1618
+ border-left-color: ${t(colors.pink[400], colors.pink[500])};
1619
+ `,
1620
+ previewPartToolCall: css`
1621
+ border-left-color: ${t(colors.yellow[500], colors.yellow[500])};
1622
+ `,
1623
+ previewPartToolResult: css`
1624
+ border-left-color: ${t(colors.cyan[500], colors.cyan[500])};
1625
+ `,
1626
+ previewPartStructuredOutput: css`
1627
+ border-left-color: ${t(colors.green[500], colors.green[500])};
1628
+ `,
1629
+ previewPartMedia: css`
1630
+ border-left-color: ${t(colors.purple[500], colors.purple[500])};
1631
+ `,
1632
+ previewPartHighlighted: css`
1633
+ background: ${t(colors.blue[50], colors.blue[900] + '30')};
1634
+ border-left-color: ${t(colors.blue[500], colors.blue[400])};
1635
+ box-shadow: inset 0 0 0 1px ${t(colors.blue[300], colors.blue[700])};
1636
+ `,
1637
+ previewPartLabel: css`
1638
+ color: ${t(colors.gray[500], colors.gray[400])};
1639
+ font-size: 10px;
1640
+ font-weight: ${font.weight.bold};
1641
+ `,
1642
+ previewPartActions: css`
1643
+ display: flex;
1644
+ gap: ${size[1]};
1645
+ margin: 1px 0 ${size[1]};
1646
+ `,
1647
+ previewPartActionButton: css`
383
1648
  border: 1px solid ${t(colors.gray[300], colors.darkGray[500])};
384
- background: ${t(colors.gray[200], colors.darkGray[600])};
385
- color: ${t(colors.gray[900], colors.gray[100])};
386
- font-size: ${fontSize.xs};
1649
+ border-radius: ${border.radius.sm};
1650
+ background: ${t(colors.white, colors.darkGray[700])};
1651
+ color: ${t(colors.gray[700], colors.gray[200])};
387
1652
  cursor: pointer;
388
- user-select: none;
389
- transition:
390
- background 0.15s,
391
- border-color 0.15s;
1653
+ font-size: 10px;
1654
+ font-weight: ${font.weight.semibold};
1655
+ line-height: 1;
1656
+ padding: ${size[1]} ${size[1.5]};
392
1657
  &:hover {
393
- background: ${t(colors.gray[300], colors.darkGray[500])};
394
- border-color: ${t(colors.gray[400], colors.darkGray[400])};
1658
+ border-color: ${t(colors.blue[400], colors.blue[500])};
1659
+ color: ${t(colors.blue[600], colors.blue[300])};
395
1660
  }
396
1661
  `,
397
- filterButtonActive: css`
398
- background: ${colors.pink[400]};
399
- color: ${colors.white};
400
- border-color: ${colors.pink[400]};
401
- &:hover {
402
- background: ${colors.pink[500]};
403
- border-color: ${colors.pink[500]};
404
- }
1662
+ previewPartContent: css`
1663
+ color: ${t(colors.gray[700], colors.gray[200])};
1664
+ font-family: ${fontFamily.mono};
1665
+ font-size: 10px;
1666
+ line-height: 1.45;
1667
+ white-space: pre-wrap;
1668
+ word-break: break-word;
405
1669
  `,
406
- actionsRow: css`
1670
+ previewJsonItems: css`
407
1671
  display: flex;
1672
+ flex-direction: column;
408
1673
  gap: ${size[1.5]};
409
1674
  `,
410
- clearAllButton: css`
411
- flex: 1;
412
- font-size: ${fontSize.xs};
1675
+ previewJsonItemsCompare: css`
1676
+ display: grid;
1677
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1678
+ align-items: start;
1679
+ @media (max-width: 760px) {
1680
+ grid-template-columns: 1fr;
1681
+ }
413
1682
  `,
414
- },
415
- // ConversationsList component styles
416
- conversationsList: {
417
- rowMain: css`
1683
+ previewJsonItem: css`
418
1684
  display: flex;
419
1685
  flex-direction: column;
420
- gap: 4px;
421
- flex: 1;
422
- min-width: 0;
1686
+ gap: 3px;
423
1687
  `,
424
- rowTop: css`
1688
+ previewJsonItemLabel: css`
1689
+ color: ${t(colors.gray[500], colors.gray[400])};
1690
+ font-family: ${fontFamily.mono};
1691
+ font-size: 10px;
1692
+ font-weight: ${font.weight.semibold};
1693
+ `,
1694
+ previewJsonPanel: css`
1695
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[600])};
1696
+ border-radius: ${border.radius.sm};
1697
+ background: ${t(colors.white, colors.darkGray[900])};
1698
+ min-height: 260px;
1699
+ max-height: 420px;
1700
+ overflow: auto;
1701
+ padding: ${size[2]} ${size[2]} ${size[2]} ${size[5]};
1702
+ `,
1703
+ toolsGrid: css`
1704
+ display: grid;
1705
+ gap: ${size[3]};
1706
+ grid-template-columns: minmax(180px, 240px) minmax(0, 1fr);
1707
+ @media (max-width: 760px) {
1708
+ grid-template-columns: 1fr;
1709
+ }
1710
+ `,
1711
+ toolsList: css`
425
1712
  display: flex;
1713
+ flex-direction: column;
1714
+ gap: ${size[1]};
1715
+ `,
1716
+ toolRow: css`
426
1717
  align-items: center;
427
- justify-content: space-between;
1718
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1719
+ border-radius: ${border.radius.md};
1720
+ background: ${t(colors.white, colors.darkGray[700])};
1721
+ color: inherit;
1722
+ cursor: pointer;
1723
+ display: flex;
428
1724
  gap: ${size[2]};
1725
+ justify-content: space-between;
1726
+ padding: ${size[2]};
1727
+ text-align: left;
1728
+ &:hover {
1729
+ border-color: ${t(colors.yellow[300], colors.yellow[700])};
1730
+ background: ${t(colors.yellow[50], colors.yellow[900] + '20')};
1731
+ }
429
1732
  `,
430
- rowRight: css`
431
- display: flex;
432
- align-items: center;
433
- gap: ${size[1]};
434
- flex-shrink: 0;
1733
+ toolRowSelected: css`
1734
+ border-color: ${t(colors.yellow[500], colors.yellow[500])};
1735
+ background: ${t(colors.yellow[50], colors.yellow[900] + '30')};
435
1736
  `,
436
- rowContent: css`
1737
+ toolName: css`
1738
+ color: ${t(colors.gray[900], colors.gray[100])};
1739
+ font-family: ${fontFamily.mono};
1740
+ font-size: ${fontSize.xs};
1741
+ font-weight: ${font.weight.semibold};
1742
+ `,
1743
+ toolDetail: css`
437
1744
  display: flex;
1745
+ flex-direction: column;
1746
+ gap: ${size[3]};
1747
+ min-width: 0;
1748
+ `,
1749
+ fixtureRow: css`
438
1750
  align-items: center;
1751
+ border: 0;
1752
+ background: ${t(colors.gray[50], colors.darkGray[800])};
1753
+ color: ${t(colors.gray[700], colors.gray[200])};
1754
+ display: flex;
1755
+ font-family: ${fontFamily.mono};
1756
+ font-size: ${fontSize.xs};
439
1757
  gap: ${size[2]};
440
- flex: 1;
1758
+ justify-content: space-between;
1759
+ padding: ${size[2]} ${size[3]};
1760
+ text-align: left;
1761
+ &:hover {
1762
+ background: ${t(colors.blue[50], colors.blue[900] + '25')};
1763
+ }
441
1764
  `,
442
- rowInfo: css`
1765
+ fixtureInfo: css`
443
1766
  display: flex;
444
- align-items: center;
445
- gap: ${size[1]};
1767
+ flex-direction: column;
1768
+ gap: 2px;
446
1769
  min-width: 0;
447
- flex: 1;
448
- `,
449
- typeDot: css`
450
- width: 8px;
451
- height: 8px;
452
- border-radius: 50%;
453
1770
  `,
454
- label: css`
1771
+ fixtureName: css`
1772
+ color: ${t(colors.gray[900], colors.gray[100])};
455
1773
  font-weight: ${font.weight.semibold};
1774
+ overflow: hidden;
1775
+ text-overflow: ellipsis;
1776
+ white-space: nowrap;
456
1777
  `,
457
- toolCallsBadge: css`
1778
+ fixtureMeta: css`
1779
+ color: ${t(colors.gray[500], colors.gray[400])};
1780
+ overflow: hidden;
1781
+ text-overflow: ellipsis;
1782
+ white-space: nowrap;
1783
+ `,
1784
+ fixtureRowActions: css`
458
1785
  display: flex;
459
- align-items: center;
460
- gap: 3px;
461
- padding: 2px 6px;
1786
+ flex-shrink: 0;
1787
+ gap: ${size[1]};
1788
+ `,
1789
+ fixtureRowButton: css`
1790
+ border: 1px solid ${t(colors.blue[300], colors.blue[700])};
462
1791
  border-radius: ${border.radius.sm};
463
- background: oklch(0.35 0.1 280);
464
- color: oklch(0.8 0.12 280);
1792
+ background: ${t(colors.white, colors.darkGray[700])};
1793
+ color: ${t(colors.blue[700], colors.blue[300])};
1794
+ cursor: pointer;
465
1795
  font-size: ${fontSize.xs};
466
1796
  font-weight: ${font.weight.semibold};
1797
+ padding: 2px ${size[2]};
1798
+ &:hover {
1799
+ background: ${t(colors.blue[50], colors.blue[900] + '25')};
1800
+ }
467
1801
  `,
468
- statusDot: css`
469
- width: 6px;
470
- height: 6px;
471
- border-radius: 50%;
472
- margin-left: auto;
1802
+ fixtureDangerButton: css`
1803
+ border-color: ${t(colors.red[300], colors.red[800])};
1804
+ color: ${t(colors.red[700], colors.red[300])};
1805
+ &:hover {
1806
+ background: ${t(colors.red[50], colors.red[900] + '25')};
1807
+ }
473
1808
  `,
474
- stats: css`
1809
+ fixtureForm: css`
1810
+ border: 1px solid ${t(colors.gray[200], colors.darkGray[700])};
1811
+ border-radius: ${border.radius.md};
1812
+ background: ${t(colors.white, colors.darkGray[700])};
475
1813
  display: flex;
476
- align-items: center;
1814
+ flex-direction: column;
477
1815
  gap: ${size[2]};
478
- font-size: 10px;
479
- opacity: 0.7;
480
- flex-wrap: wrap;
1816
+ padding-bottom: ${size[3]};
481
1817
  `,
482
- statItem: css`
1818
+ fixturePopover: css`
1819
+ border: 1px solid ${t(colors.blue[300], colors.blue[700])};
1820
+ border-radius: ${border.radius.md};
1821
+ background: ${t(colors.blue[50], colors.darkGray[800])};
1822
+ box-shadow: 0 12px 30px rgb(0 0 0 / 0.16);
483
1823
  display: flex;
484
- align-items: center;
485
- gap: 2px;
486
- white-space: nowrap;
1824
+ flex-direction: column;
1825
+ gap: ${size[2]};
1826
+ margin: 0 ${size[3]} ${size[3]};
1827
+ padding: ${size[3]} 0;
487
1828
  `,
488
- tokensBadge: css`
1829
+ fixtureField: css`
489
1830
  display: flex;
490
- align-items: center;
491
- gap: 2px;
492
- padding: 1px 5px;
1831
+ flex-direction: column;
1832
+ gap: ${size[1]};
1833
+ padding: 0 ${size[3]};
1834
+ `,
1835
+ fixtureLabel: css`
1836
+ color: ${t(colors.gray[700], colors.gray[300])};
1837
+ font-size: ${fontSize.xs};
1838
+ font-weight: ${font.weight.semibold};
1839
+ `,
1840
+ requiredMark: css`
1841
+ color: ${t(colors.red[600], colors.red[400])};
1842
+ margin-left: 2px;
1843
+ `,
1844
+ fixtureInput: css`
1845
+ border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};
493
1846
  border-radius: ${border.radius.sm};
494
- background: oklch(0.35 0.08 220);
495
- color: oklch(0.75 0.12 220);
496
- font-size: 10px;
1847
+ background: ${t(colors.white, colors.darkGray[900])};
1848
+ color: ${t(colors.gray[900], colors.gray[100])};
1849
+ font-size: ${fontSize.sm};
1850
+ min-height: 28px;
1851
+ padding: ${size[1]} ${size[2]};
1852
+ `,
1853
+ fixtureTextarea: css`
1854
+ border: 1px solid ${t(colors.gray[300], colors.darkGray[600])};
1855
+ border-radius: ${border.radius.sm};
1856
+ background: ${t(colors.white, colors.darkGray[900])};
1857
+ color: ${t(colors.gray[900], colors.gray[100])};
1858
+ font-family: ${fontFamily.mono};
1859
+ font-size: ${fontSize.xs};
1860
+ min-height: 72px;
1861
+ padding: ${size[2]};
1862
+ resize: vertical;
1863
+ `,
1864
+ fixtureActions: css`
1865
+ display: flex;
1866
+ gap: ${size[2]};
1867
+ padding: 0 ${size[3]};
1868
+ `,
1869
+ fixtureButton: css`
1870
+ border: 1px solid ${t(colors.blue[500], colors.blue[600])};
1871
+ border-radius: ${border.radius.sm};
1872
+ background: ${t(colors.blue[600], colors.blue[600])};
1873
+ color: ${colors.white};
1874
+ cursor: pointer;
1875
+ font-size: ${fontSize.xs};
497
1876
  font-weight: ${font.weight.semibold};
498
- white-space: nowrap;
1877
+ padding: ${size[1]} ${size[2]};
1878
+ &:hover {
1879
+ background: ${t(colors.blue[700], colors.blue[500])};
1880
+ }
499
1881
  `,
500
- loadingIndicator: css`
501
- font-size: 12px;
502
- color: oklch(0.7 0.17 142);
503
- animation: spin 1s linear infinite;
504
- @keyframes spin {
505
- from {
506
- transform: rotate(0deg);
507
- }
508
- to {
509
- transform: rotate(360deg);
510
- }
1882
+ fixtureButtonSecondary: css`
1883
+ background: transparent;
1884
+ color: ${t(colors.blue[700], colors.blue[300])};
1885
+ &:hover {
1886
+ background: ${t(colors.blue[50], colors.blue[900] + '25')};
511
1887
  }
512
1888
  `,
1889
+ fixtureError: css`
1890
+ color: ${t(colors.red[700], colors.red[300])};
1891
+ font-size: ${fontSize.xs};
1892
+ padding: 0 ${size[3]};
1893
+ `,
1894
+ fixtureHelp: css`
1895
+ color: ${t(colors.gray[500], colors.gray[400])};
1896
+ font-size: ${fontSize.xs};
1897
+ line-height: 1.4;
1898
+ padding: 0 ${size[3]};
1899
+ `,
513
1900
  },
514
1901
  // ConversationDetails component styles
515
1902
  conversationDetails: {
@@ -1065,6 +2452,23 @@ const stylesFactory = (theme: 'light' | 'dark') => {
1065
2452
  border-top: 1px solid oklch(0.28 0.03 260);
1066
2453
  padding-top: ${size[2]};
1067
2454
  `,
2455
+ structuredOutputComparison: css`
2456
+ display: grid;
2457
+ grid-template-columns: repeat(2, minmax(320px, 1fr));
2458
+ gap: ${size[3]};
2459
+ align-items: start;
2460
+ & > * {
2461
+ min-height: 280px;
2462
+ border: 1px solid oklch(0.28 0.03 260);
2463
+ border-radius: 6px;
2464
+ background: oklch(0.18 0.02 260);
2465
+ padding: ${size[3]};
2466
+ overflow: auto;
2467
+ }
2468
+ @media (max-width: 760px) {
2469
+ grid-template-columns: 1fr;
2470
+ }
2471
+ `,
1068
2472
  toolSectionLabel: css`
1069
2473
  font-size: 10px;
1070
2474
  font-weight: ${font.weight.semibold};
@@ -1079,8 +2483,7 @@ const stylesFactory = (theme: 'light' | 'dark') => {
1079
2483
  color: oklch(0.8 0.05 260);
1080
2484
  background: oklch(0.18 0.02 260);
1081
2485
  border-radius: 4px;
1082
- padding: ${size[4]};
1083
- padding-left: ${size[8]};
2486
+ padding: ${size[3]};
1084
2487
  `,
1085
2488
  chunksDetails: css`
1086
2489
  margin-top: ${size[3]};
@@ -1153,6 +2556,10 @@ const stylesFactory = (theme: 'light' | 'dark') => {
1153
2556
  background: oklch(0.3 0.15 50);
1154
2557
  color: oklch(0.75 0.2 50);
1155
2558
  `,
2559
+ chunkBadgeStructured: css`
2560
+ background: oklch(0.3 0.12 155);
2561
+ color: oklch(0.78 0.16 155);
2562
+ `,
1156
2563
  chunkBadgeCount: css`
1157
2564
  background: oklch(0.3 0.08 260);
1158
2565
  color: oklch(0.75 0.1 260);
@@ -1607,13 +3014,16 @@ const stylesFactory = (theme: 'light' | 'dark') => {
1607
3014
  flex-direction: column;
1608
3015
  gap: 0;
1609
3016
  `,
1610
- // --- User message group card ---
1611
3017
  card: css`
1612
3018
  position: relative;
1613
3019
  border-radius: ${border.radius.md};
1614
3020
  background: ${t(colors.gray[50], colors.darkGray[700])};
1615
3021
  border: 1px solid ${t(colors.gray[200], colors.darkGray[500])};
1616
3022
  overflow: hidden;
3023
+ transition:
3024
+ background 0.15s ease,
3025
+ border-color 0.15s ease,
3026
+ box-shadow 0.15s ease;
1617
3027
  `,
1618
3028
  cardCompleted: css`
1619
3029
  border-color: ${t(colors.green[200], colors.green[900] + '60')};
@@ -1624,6 +3034,15 @@ const stylesFactory = (theme: 'light' | 'dark') => {
1624
3034
  cardActive: css`
1625
3035
  border-color: ${t(colors.blue[300], colors.blue[700])};
1626
3036
  `,
3037
+ cardHighlighted: css`
3038
+ border-color: ${t(colors.blue[500], colors.blue[500])};
3039
+ background: ${t(colors.blue[50], colors.blue[900] + '30')};
3040
+ box-shadow: inset 0 0 0 1px ${t(colors.blue[300], colors.blue[700])};
3041
+ `,
3042
+ timelineHighlighted: css`
3043
+ background: ${t(colors.blue[50], colors.blue[900] + '30')};
3044
+ box-shadow: inset 0 0 0 1px ${t(colors.blue[300], colors.blue[700])};
3045
+ `,
1627
3046
  cardHeader: css`
1628
3047
  display: flex;
1629
3048
  align-items: flex-start;
@@ -1877,7 +3296,6 @@ const stylesFactory = (theme: 'light' | 'dark') => {
1877
3296
  margin-top: 1px;
1878
3297
  `,
1879
3298
 
1880
- // --- Iteration card (inside user group) ---
1881
3299
  iterCard: css`
1882
3300
  position: relative;
1883
3301
  background: ${t(colors.gray[50], colors.darkGray[700])};
@@ -1885,6 +3303,9 @@ const stylesFactory = (theme: 'light' | 'dark') => {
1885
3303
  overflow: hidden;
1886
3304
  animation: iterStaggerIn 0.3s ease-out both;
1887
3305
  width: 100%;
3306
+ transition:
3307
+ background 0.15s ease,
3308
+ box-shadow 0.15s ease;
1888
3309
 
1889
3310
  @keyframes iterStaggerIn {
1890
3311
  from {
@@ -1897,6 +3318,12 @@ const stylesFactory = (theme: 'light' | 'dark') => {
1897
3318
  }
1898
3319
  }
1899
3320
  `,
3321
+ iterCardHighlighted: css`
3322
+ background: ${t(colors.blue[50], colors.blue[900] + '30')};
3323
+ box-shadow:
3324
+ inset 3px 0 0 ${t(colors.blue[500], colors.blue[500])},
3325
+ inset 0 0 0 1px ${t(colors.blue[300], colors.blue[700])};
3326
+ `,
1900
3327
  iterCardHeader: css`
1901
3328
  display: flex;
1902
3329
  align-items: center;
@@ -1935,7 +3362,6 @@ const stylesFactory = (theme: 'light' | 'dark') => {
1935
3362
  color: ${t(colors.gray[700], colors.gray[300])};
1936
3363
  `,
1937
3364
 
1938
- // --- Config row ---
1939
3365
  configRow: css`
1940
3366
  display: flex;
1941
3367
  align-items: center;
@@ -2013,7 +3439,6 @@ const stylesFactory = (theme: 'light' | 'dark') => {
2013
3439
  max-height: 120px;
2014
3440
  overflow-y: auto;
2015
3441
  `,
2016
- // --- Step row ---
2017
3442
  step: css`
2018
3443
  display: flex;
2019
3444
  align-items: center;
@@ -2097,11 +3522,36 @@ const stylesFactory = (theme: 'light' | 'dark') => {
2097
3522
  `,
2098
3523
  stepJsonPanel: css`
2099
3524
  margin: ${size[1.5]} ${size[3]};
2100
- padding: ${size[1.5]} ${size[2]} ${size[1.5]} ${size[5]};
3525
+ min-height: 280px;
3526
+ max-height: 520px;
3527
+ overflow: auto;
3528
+ padding: ${size[2]} ${size[2]} ${size[2]} ${size[5]};
2101
3529
  border-radius: ${border.radius.sm};
2102
3530
  border: 1px solid ${t(colors.gray[200], colors.darkGray[500])};
2103
3531
  background: ${t(colors.gray[50], colors.darkGray[800])};
2104
3532
  `,
3533
+ stepJsonItem: css`
3534
+ display: flex;
3535
+ flex-direction: column;
3536
+ gap: ${size[1]};
3537
+ `,
3538
+ stepJsonItemsCompare: css`
3539
+ display: grid;
3540
+ grid-template-columns: repeat(2, minmax(320px, 1fr));
3541
+ gap: ${size[3]};
3542
+ align-items: start;
3543
+ padding-right: ${size[3]};
3544
+ @media (max-width: 760px) {
3545
+ grid-template-columns: 1fr;
3546
+ }
3547
+ `,
3548
+ stepJsonItemLabel: css`
3549
+ margin: ${size[2]} ${size[3]} 0;
3550
+ color: ${t(colors.gray[500], colors.gray[400])};
3551
+ font-family: ${fontFamily.mono};
3552
+ font-size: 10px;
3553
+ font-weight: ${font.weight.semibold};
3554
+ `,
2105
3555
  stepDetail: css`
2106
3556
  padding: ${size[2]};
2107
3557
  margin: 0 ${size[3]} ${size[1.5]};
@@ -2147,7 +3597,6 @@ const stylesFactory = (theme: 'light' | 'dark') => {
2147
3597
  padding: ${size[1]} ${size[3]} ${size[2]};
2148
3598
  `,
2149
3599
 
2150
- // --- Middleware badge styles ---
2151
3600
  mwBadge: css`
2152
3601
  display: inline-flex;
2153
3602
  align-items: center;
@@ -2179,6 +3628,18 @@ const stylesFactory = (theme: 'light' | 'dark') => {
2179
3628
  background: ${t(colors.cyan[900] + '15', colors.cyan[900] + '30')};
2180
3629
  color: ${t(colors.cyan[700], colors.cyan[300])};
2181
3630
  `,
3631
+ mwBadgeApproval: css`
3632
+ background: ${t(colors.yellow[50], colors.yellow[900] + '30')};
3633
+ color: ${t(colors.yellow[800], colors.yellow[300])};
3634
+ `,
3635
+ mwBadgeApproved: css`
3636
+ background: ${t(colors.green[50], colors.green[900] + '30')};
3637
+ color: ${t(colors.green[700], colors.green[300])};
3638
+ `,
3639
+ mwBadgeDenied: css`
3640
+ background: ${t(colors.red[50], colors.red[900] + '30')};
3641
+ color: ${t(colors.red[700], colors.red[300])};
3642
+ `,
2182
3643
  mwHook: css`
2183
3644
  font-size: 10px;
2184
3645
  font-family: ${fontFamily.mono};
@@ -2200,7 +3661,6 @@ const stylesFactory = (theme: 'light' | 'dark') => {
2200
3661
  padding: ${size[1]} ${size[3]} ${size[2]};
2201
3662
  `,
2202
3663
 
2203
- // --- JSON Viewer ---
2204
3664
  jsonViewer: css`
2205
3665
  border: 1px solid ${t(colors.gray[200], colors.darkGray[500])};
2206
3666
  border-radius: ${border.radius.sm};
@@ -2260,7 +3720,6 @@ const stylesFactory = (theme: 'light' | 'dark') => {
2260
3720
  padding: ${size[1]} ${size[3]} ${size[2]};
2261
3721
  `,
2262
3722
 
2263
- // --- Standalone middleware display (MiddlewareEventsSection) ---
2264
3723
  middlewareContainer: css`
2265
3724
  display: flex;
2266
3725
  flex-wrap: wrap;