@firstpick/pi-package-webui 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/public/styles.css CHANGED
@@ -44,12 +44,16 @@
44
44
  --glow-teal: rgba(148, 226, 213, 0.26);
45
45
  --panel-gradient: linear-gradient(145deg, rgba(49, 50, 68, 0.78), rgba(24, 24, 37, 0.86) 52%, rgba(17, 17, 27, 0.9));
46
46
  --neon-gradient: linear-gradient(120deg, var(--ctp-pink), var(--ctp-mauve) 32%, var(--ctp-blue) 66%, var(--ctp-teal));
47
+ --visual-viewport-height: 100dvh;
48
+ --visual-viewport-offset-top: 0px;
49
+ --keyboard-inset-bottom: 0px;
47
50
 
48
51
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
49
52
  }
50
53
 
51
54
  * { box-sizing: border-box; }
52
55
  html, body { height: 100%; min-height: 100%; }
56
+ html { overflow-x: hidden; }
53
57
  body {
54
58
  margin: 0;
55
59
  min-height: 0;
@@ -91,9 +95,10 @@ button, select, textarea, input {
91
95
  font: inherit;
92
96
  outline: none;
93
97
  }
94
- button, select, input { min-height: 2.35rem; }
98
+ button, select, input { min-height: 44px; }
95
99
  button {
96
100
  position: relative;
101
+ min-width: 44px;
97
102
  padding: 0.56rem 0.86rem;
98
103
  cursor: pointer;
99
104
  color: var(--ctp-text);
@@ -184,6 +189,12 @@ textarea {
184
189
  box-shadow: inset 0 0 0 1px rgba(245, 194, 231, 0.04), inset 0 0 2rem rgba(17, 17, 27, 0.42);
185
190
  }
186
191
  textarea::placeholder { color: rgba(186, 194, 222, 0.62); }
192
+ #promptInput {
193
+ min-height: calc(1.5em + 1.8rem);
194
+ max-height: min(38vh, 18rem);
195
+ resize: none;
196
+ overflow-y: hidden;
197
+ }
187
198
 
188
199
  .topbar {
189
200
  position: sticky;
@@ -238,7 +249,7 @@ textarea::placeholder { color: rgba(186, 194, 222, 0.62); }
238
249
  padding: 1rem;
239
250
  width: 100%;
240
251
  height: 100vh;
241
- height: 100dvh;
252
+ height: var(--visual-viewport-height, 100dvh);
242
253
  min-height: 0;
243
254
  overflow: hidden;
244
255
  transition: grid-template-columns 180ms ease;
@@ -249,6 +260,9 @@ body.side-panel-collapsed .layout {
249
260
  body.side-panel-collapsed .side-panel {
250
261
  display: none;
251
262
  }
263
+ .side-panel-backdrop {
264
+ display: none;
265
+ }
252
266
  .side-panel-expand-button {
253
267
  position: fixed;
254
268
  top: 1rem;
@@ -287,6 +301,9 @@ body.side-panel-collapsed .side-panel {
287
301
  body.side-panel-collapsed .side-panel-expand-button {
288
302
  display: grid;
289
303
  }
304
+ body.side-panel-collapsed .terminal-tabs-shell {
305
+ padding-right: 4.35rem;
306
+ }
290
307
  .side-panel-button-icon {
291
308
  position: relative;
292
309
  z-index: 1;
@@ -456,10 +473,207 @@ body.side-panel-collapsed .side-panel-expand-button {
456
473
  width: 100%;
457
474
  min-width: 0;
458
475
  }
476
+ .network-status {
477
+ display: grid;
478
+ gap: 0.42rem;
479
+ min-width: 0;
480
+ min-height: 5.6rem;
481
+ padding: 0.68rem 0.72rem;
482
+ overflow-wrap: anywhere;
483
+ color: rgba(205, 214, 244, 0.88);
484
+ white-space: normal;
485
+ border: 1px solid rgba(180, 190, 254, 0.16);
486
+ border-radius: 0.72rem;
487
+ background: rgba(17, 17, 27, 0.62);
488
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
489
+ font-size: 0.78rem;
490
+ font-weight: 800;
491
+ line-height: 1.35;
492
+ }
493
+ .network-status.open {
494
+ color: var(--ctp-yellow);
495
+ border-color: rgba(249, 226, 175, 0.34);
496
+ box-shadow: 0 0 0.9rem rgba(249, 226, 175, 0.10);
497
+ }
498
+ .network-status.opening {
499
+ color: var(--ctp-teal);
500
+ border-color: rgba(148, 226, 213, 0.34);
501
+ }
502
+ .network-status.closed {
503
+ color: rgba(186, 194, 222, 0.72);
504
+ }
505
+ .network-status-heading {
506
+ color: var(--ctp-text);
507
+ font-size: 0.82rem;
508
+ letter-spacing: 0.02em;
509
+ }
510
+ .network-status-detail,
511
+ .network-status-empty {
512
+ color: rgba(186, 194, 222, 0.68);
513
+ font-family: inherit;
514
+ font-size: 0.72rem;
515
+ font-weight: 700;
516
+ }
517
+ .network-url-list {
518
+ display: grid;
519
+ gap: 0.28rem;
520
+ min-width: 0;
521
+ }
522
+ .network-status-url-row {
523
+ display: grid;
524
+ grid-template-columns: 3.15rem minmax(0, 1fr);
525
+ gap: 0.38rem;
526
+ align-items: start;
527
+ min-width: 0;
528
+ }
529
+ .network-status-url-label {
530
+ color: rgba(186, 194, 222, 0.70);
531
+ font-size: 0.68rem;
532
+ font-weight: 900;
533
+ letter-spacing: 0.08em;
534
+ text-transform: uppercase;
535
+ }
536
+ .network-status-url {
537
+ min-width: 0;
538
+ color: inherit;
539
+ text-decoration: none;
540
+ overflow-wrap: anywhere;
541
+ }
542
+ .network-status-url:hover,
543
+ .network-status-url:focus-visible {
544
+ color: var(--ctp-teal);
545
+ text-decoration: underline;
546
+ }
547
+ #openNetworkButton {
548
+ color: var(--ctp-yellow);
549
+ border-color: rgba(249, 226, 175, 0.32);
550
+ }
551
+ #openNetworkButton:not(:disabled):hover {
552
+ color: #11111b;
553
+ border-color: transparent;
554
+ background: linear-gradient(120deg, var(--ctp-yellow), var(--ctp-peach), var(--ctp-red));
555
+ }
459
556
  .side-panel-controls .danger {
460
557
  margin-top: 0.15rem;
461
558
  }
462
559
 
560
+ .terminal-tabs-shell {
561
+ flex: 0 0 auto;
562
+ display: flex;
563
+ align-items: center;
564
+ gap: 0.55rem;
565
+ min-width: 0;
566
+ padding: 0.62rem 0.78rem;
567
+ border-bottom: 1px solid rgba(180, 190, 254, 0.16);
568
+ background:
569
+ linear-gradient(90deg, rgba(17, 17, 27, 0.96), rgba(30, 30, 46, 0.82), rgba(24, 24, 37, 0.92)),
570
+ radial-gradient(circle at 0% 0%, rgba(245, 194, 231, 0.12), transparent 18rem);
571
+ box-shadow: inset 0 -1px 0 rgba(255,255,255,0.035), 0 0.45rem 1rem rgba(17, 17, 27, 0.20);
572
+ }
573
+ .terminal-tabs-toggle-button { display: none; }
574
+ .terminal-tabs {
575
+ display: flex;
576
+ align-items: center;
577
+ gap: 0.45rem;
578
+ min-width: 0;
579
+ flex: 1 1 auto;
580
+ overflow-x: auto;
581
+ scrollbar-width: thin;
582
+ }
583
+ .terminal-tab {
584
+ display: inline-flex;
585
+ align-items: stretch;
586
+ min-width: 9rem;
587
+ max-width: 16rem;
588
+ border: 1px solid rgba(180, 190, 254, 0.16);
589
+ border-radius: 0.82rem;
590
+ overflow: hidden;
591
+ background: rgba(17, 17, 27, 0.54);
592
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.035);
593
+ }
594
+ .terminal-tab.active {
595
+ border-color: rgba(148, 226, 213, 0.54);
596
+ background:
597
+ linear-gradient(120deg, rgba(148, 226, 213, 0.17), rgba(203, 166, 247, 0.12)),
598
+ rgba(17, 17, 27, 0.60);
599
+ box-shadow: 0 0 1rem rgba(148, 226, 213, 0.18), inset 0 1px 0 rgba(255,255,255,0.05);
600
+ }
601
+ .terminal-tab.stopped {
602
+ opacity: 0.72;
603
+ border-color: rgba(243, 139, 168, 0.28);
604
+ }
605
+ .terminal-tab-button,
606
+ .terminal-tab-close,
607
+ .terminal-new-tab-button {
608
+ min-height: 2.35rem;
609
+ border: 0;
610
+ border-radius: 0;
611
+ background: transparent;
612
+ box-shadow: none;
613
+ }
614
+ .terminal-tab-button {
615
+ display: grid;
616
+ grid-template-columns: minmax(0, 1fr);
617
+ gap: 0.1rem;
618
+ min-width: 0;
619
+ flex: 1 1 auto;
620
+ padding: 0.38rem 0.66rem;
621
+ text-align: left;
622
+ }
623
+ .terminal-tab-button:hover,
624
+ .terminal-tab-close:hover,
625
+ .terminal-new-tab-button:hover {
626
+ transform: none;
627
+ }
628
+ .terminal-tab-title,
629
+ .terminal-tab-meta {
630
+ min-width: 0;
631
+ overflow: hidden;
632
+ text-overflow: ellipsis;
633
+ white-space: nowrap;
634
+ }
635
+ .terminal-tab-title {
636
+ color: var(--ctp-text);
637
+ font-size: 0.84rem;
638
+ font-weight: 900;
639
+ letter-spacing: 0.03em;
640
+ }
641
+ .terminal-tab-meta {
642
+ color: rgba(186, 194, 222, 0.62);
643
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
644
+ font-size: 0.68rem;
645
+ }
646
+ .terminal-tab.active .terminal-tab-title {
647
+ color: var(--ctp-teal);
648
+ text-shadow: 0 0 0.8rem var(--glow-teal);
649
+ }
650
+ .terminal-tab-close {
651
+ flex: 0 0 2.1rem;
652
+ color: rgba(186, 194, 222, 0.72);
653
+ border-left: 1px solid rgba(180, 190, 254, 0.10);
654
+ font-size: 1.2rem;
655
+ line-height: 1;
656
+ }
657
+ .terminal-tab-close:hover {
658
+ color: #11111b;
659
+ background: linear-gradient(120deg, var(--ctp-red), var(--ctp-peach));
660
+ }
661
+ .terminal-new-tab-button {
662
+ flex: 0 0 auto;
663
+ padding: 0.45rem 0.72rem;
664
+ color: var(--ctp-pink);
665
+ border: 1px solid rgba(245, 194, 231, 0.30);
666
+ border-radius: 0.78rem;
667
+ background:
668
+ linear-gradient(120deg, rgba(245, 194, 231, 0.12), rgba(137, 180, 250, 0.08)),
669
+ rgba(17, 17, 27, 0.58);
670
+ }
671
+ .terminal-new-tab-button:hover {
672
+ color: #11111b;
673
+ border-color: transparent;
674
+ background: linear-gradient(120deg, var(--ctp-pink), var(--ctp-mauve), var(--ctp-blue));
675
+ }
676
+
463
677
  .widget-area {
464
678
  flex: 0 0 auto;
465
679
  border-bottom: 1px solid rgba(180, 190, 254, 0.16);
@@ -511,6 +725,7 @@ body.side-panel-collapsed .side-panel-expand-button {
511
725
  gap: 0.5rem;
512
726
  color: rgba(186, 194, 222, 0.76);
513
727
  }
728
+ .footer-details-toggle { display: none; }
514
729
  .footer-metric,
515
730
  .footer-meta {
516
731
  min-width: 0;
@@ -568,10 +783,110 @@ body.side-panel-collapsed .side-panel-expand-button {
568
783
  padding: 0.28rem 0.52rem;
569
784
  border-radius: 0.7rem;
570
785
  }
786
+ button.footer-meta {
787
+ appearance: none;
788
+ color: inherit;
789
+ font: inherit;
790
+ text-align: left;
791
+ cursor: pointer;
792
+ }
793
+ .footer-meta-action {
794
+ transition: border-color 140ms ease, box-shadow 140ms ease, transform 140ms ease;
795
+ }
796
+ .footer-meta-action:hover,
797
+ .footer-meta-action:focus-visible {
798
+ border-color: rgba(166, 227, 161, 0.46);
799
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.055), 0 0 1rem rgba(166, 227, 161, 0.16);
800
+ outline: none;
801
+ }
802
+ .footer-workspace.footer-meta-action .footer-meta-value {
803
+ color: var(--ctp-green);
804
+ }
805
+ .footer-context { display: none; }
806
+ .footer-context .footer-meta-value {
807
+ color: var(--ctp-teal);
808
+ text-shadow: 0 0 0.6rem rgba(148, 226, 213, 0.22);
809
+ }
571
810
  .footer-model .footer-meta-value {
572
811
  color: var(--ctp-teal);
573
812
  text-shadow: 0 0 0.6rem rgba(148, 226, 213, 0.22);
574
813
  }
814
+ .footer-model.footer-meta-action {
815
+ border-color: rgba(148, 226, 213, 0.24);
816
+ }
817
+ .footer-model-picker {
818
+ position: absolute;
819
+ right: 0.95rem;
820
+ bottom: calc(100% + 0.5rem);
821
+ z-index: 40;
822
+ display: grid;
823
+ gap: 0.42rem;
824
+ width: min(34rem, calc(100vw - 2rem));
825
+ max-height: min(50dvh, 28rem);
826
+ overflow: auto;
827
+ padding: 0.72rem;
828
+ border: 1px solid rgba(148, 226, 213, 0.30);
829
+ border-radius: 0.95rem;
830
+ background:
831
+ radial-gradient(circle at 8% 0%, rgba(148, 226, 213, 0.13), transparent 12rem),
832
+ linear-gradient(145deg, rgba(17, 17, 27, 0.98), rgba(30, 30, 46, 0.96));
833
+ box-shadow: 0 1.2rem 2.8rem rgba(17, 17, 27, 0.68), 0 0 1.4rem rgba(148, 226, 213, 0.14), inset 0 1px 0 rgba(255,255,255,0.055);
834
+ }
835
+ .footer-model-picker-title {
836
+ color: var(--ctp-teal);
837
+ font-size: 0.72rem;
838
+ font-weight: 950;
839
+ letter-spacing: 0.14em;
840
+ text-transform: uppercase;
841
+ }
842
+ .footer-model-picker-source,
843
+ .footer-model-picker-empty {
844
+ line-height: 1.4;
845
+ overflow-wrap: anywhere;
846
+ }
847
+ .footer-model-picker-source {
848
+ color: rgba(186, 194, 222, 0.68);
849
+ font-size: 0.74rem;
850
+ }
851
+ .footer-model-picker-empty {
852
+ display: grid;
853
+ gap: 0.32rem;
854
+ padding: 0.58rem 0.62rem;
855
+ border: 1px solid rgba(249, 226, 175, 0.18);
856
+ border-radius: 0.72rem;
857
+ background: rgba(17, 17, 27, 0.48);
858
+ }
859
+ .footer-model-picker-empty strong {
860
+ color: var(--ctp-yellow);
861
+ }
862
+ .footer-model-option {
863
+ display: grid;
864
+ grid-template-columns: minmax(0, 1fr);
865
+ gap: 0.12rem;
866
+ width: 100%;
867
+ min-height: 44px;
868
+ padding: 0.5rem 0.64rem;
869
+ text-align: left;
870
+ }
871
+ .footer-model-option.active {
872
+ border-color: rgba(166, 227, 161, 0.46);
873
+ box-shadow: inset 3px 0 0 var(--ctp-green), 0 0 1rem rgba(166, 227, 161, 0.14);
874
+ }
875
+ .footer-model-option-main,
876
+ .footer-model-option-name {
877
+ min-width: 0;
878
+ overflow: hidden;
879
+ text-overflow: ellipsis;
880
+ white-space: nowrap;
881
+ }
882
+ .footer-model-option-main {
883
+ color: var(--ctp-text);
884
+ font-weight: 850;
885
+ }
886
+ .footer-model-option-name {
887
+ color: rgba(186, 194, 222, 0.68);
888
+ font-size: 0.72rem;
889
+ }
575
890
  .footer-branch .footer-meta-value {
576
891
  color: var(--ctp-pink);
577
892
  text-shadow: 0 0 0.55rem rgba(245, 194, 231, 0.18);
@@ -705,6 +1020,107 @@ body.side-panel-collapsed .side-panel-expand-button {
705
1020
  white-space: pre-wrap;
706
1021
  box-shadow: inset 0 0 1.4rem rgba(148, 226, 213, 0.06), 0 0 1rem rgba(148, 226, 213, 0.08);
707
1022
  }
1023
+ .todo-widget {
1024
+ display: grid;
1025
+ gap: 0.52rem;
1026
+ padding: 0.68rem 0.76rem;
1027
+ white-space: normal;
1028
+ border-color: rgba(137, 180, 250, 0.32);
1029
+ background:
1030
+ radial-gradient(circle at 4% 0%, rgba(137, 180, 250, 0.18), transparent 12rem),
1031
+ linear-gradient(145deg, rgba(17, 17, 27, 0.88), rgba(30, 30, 46, 0.74));
1032
+ }
1033
+ .todo-widget-header {
1034
+ display: flex;
1035
+ align-items: center;
1036
+ gap: 0.48rem;
1037
+ min-width: 0;
1038
+ }
1039
+ .todo-widget-title {
1040
+ color: var(--ctp-blue);
1041
+ font-weight: 950;
1042
+ letter-spacing: 0.08em;
1043
+ text-transform: uppercase;
1044
+ }
1045
+ .todo-widget-count,
1046
+ .todo-widget-meta {
1047
+ display: inline-flex;
1048
+ align-items: center;
1049
+ min-height: 1.35rem;
1050
+ padding: 0.12rem 0.42rem;
1051
+ border: 1px solid rgba(137, 180, 250, 0.24);
1052
+ border-radius: 999px;
1053
+ background: rgba(17, 17, 27, 0.48);
1054
+ font-size: 0.72rem;
1055
+ font-weight: 850;
1056
+ }
1057
+ .todo-widget-count { color: var(--ctp-green); }
1058
+ .todo-widget-meta { color: var(--ctp-yellow); }
1059
+ .todo-widget-progress {
1060
+ height: 0.38rem;
1061
+ overflow: hidden;
1062
+ border-radius: 999px;
1063
+ background: rgba(49, 50, 68, 0.78);
1064
+ box-shadow: inset 0 0 0 1px rgba(180, 190, 254, 0.10);
1065
+ }
1066
+ .todo-widget-progress-fill {
1067
+ display: block;
1068
+ height: 100%;
1069
+ border-radius: inherit;
1070
+ background: linear-gradient(90deg, var(--ctp-blue), var(--ctp-teal), var(--ctp-green));
1071
+ box-shadow: 0 0 0.85rem rgba(148, 226, 213, 0.42);
1072
+ }
1073
+ .todo-widget-list {
1074
+ display: grid;
1075
+ gap: 0.34rem;
1076
+ margin: 0;
1077
+ padding: 0;
1078
+ list-style: none;
1079
+ }
1080
+ .todo-widget-item {
1081
+ display: grid;
1082
+ grid-template-columns: 1.35rem minmax(0, 1fr);
1083
+ align-items: start;
1084
+ gap: 0.48rem;
1085
+ min-width: 0;
1086
+ color: rgba(205, 214, 244, 0.92);
1087
+ }
1088
+ .todo-widget-marker {
1089
+ display: inline-grid;
1090
+ place-items: center;
1091
+ width: 1.12rem;
1092
+ height: 1.12rem;
1093
+ margin-top: 0.06rem;
1094
+ border: 1px solid rgba(180, 190, 254, 0.32);
1095
+ border-radius: 0.34rem;
1096
+ color: #11111b;
1097
+ font-size: 0.74rem;
1098
+ font-weight: 950;
1099
+ line-height: 1;
1100
+ background: rgba(49, 50, 68, 0.88);
1101
+ }
1102
+ .todo-widget-item.done .todo-widget-marker {
1103
+ border-color: transparent;
1104
+ background: linear-gradient(135deg, var(--ctp-green), var(--ctp-teal));
1105
+ }
1106
+ .todo-widget-item.partial .todo-widget-marker {
1107
+ border-color: transparent;
1108
+ background: linear-gradient(135deg, var(--ctp-yellow), var(--ctp-peach));
1109
+ }
1110
+ .todo-widget-item.done .todo-widget-text {
1111
+ color: rgba(166, 227, 161, 0.72);
1112
+ text-decoration: line-through;
1113
+ }
1114
+ .todo-widget-item.partial .todo-widget-text { color: var(--ctp-yellow); }
1115
+ .todo-widget-text {
1116
+ min-width: 0;
1117
+ overflow-wrap: anywhere;
1118
+ line-height: 1.35;
1119
+ }
1120
+ .todo-widget-footer {
1121
+ color: rgba(186, 194, 222, 0.64);
1122
+ font-size: 0.72rem;
1123
+ }
708
1124
  .chat {
709
1125
  flex: 1 1 auto;
710
1126
  min-height: 0;
@@ -712,6 +1128,17 @@ body.side-panel-collapsed .side-panel-expand-button {
712
1128
  padding: 1rem;
713
1129
  scroll-behavior: smooth;
714
1130
  }
1131
+ .jump-to-latest-button[hidden] { display: none; }
1132
+ .jump-to-latest-button {
1133
+ align-self: center;
1134
+ z-index: 3;
1135
+ margin: 0.45rem 0;
1136
+ color: #11111b;
1137
+ font-weight: 900;
1138
+ background: linear-gradient(120deg, var(--ctp-teal), var(--ctp-blue), var(--ctp-mauve));
1139
+ border-color: transparent;
1140
+ box-shadow: 0 0 1.2rem var(--glow-teal), 0 0.7rem 1.6rem rgba(0, 0, 0, 0.28);
1141
+ }
715
1142
  .message {
716
1143
  position: relative;
717
1144
  margin: 0 0 0.9rem;
@@ -739,6 +1166,22 @@ body.side-panel-collapsed .side-panel-expand-button {
739
1166
  border-color: rgba(148, 226, 213, 0.30);
740
1167
  background: linear-gradient(145deg, rgba(148, 226, 213, 0.12), rgba(49, 50, 68, 0.58));
741
1168
  }
1169
+ .message.extension,
1170
+ .message.native,
1171
+ .message.notice {
1172
+ border-color: rgba(203, 166, 247, 0.30);
1173
+ background: linear-gradient(145deg, rgba(203, 166, 247, 0.12), rgba(49, 50, 68, 0.58));
1174
+ }
1175
+ .message.extension .message-role,
1176
+ .message.native .message-role,
1177
+ .message.notice .message-role {
1178
+ color: var(--ctp-mauve);
1179
+ text-shadow: 0 0 0.8rem rgba(203, 166, 247, 0.22);
1180
+ }
1181
+ .message.warn {
1182
+ border-color: rgba(249, 226, 175, 0.46);
1183
+ }
1184
+ .message.warn .message-role { color: var(--ctp-yellow); }
742
1185
  .message.toolResult, .message.bashExecution {
743
1186
  border-color: rgba(249, 226, 175, 0.30);
744
1187
  background: linear-gradient(145deg, rgba(249, 226, 175, 0.11), rgba(49, 50, 68, 0.58));
@@ -936,6 +1379,8 @@ summary { cursor: pointer; color: var(--warning); }
936
1379
  margin-top: 0.7rem;
937
1380
  flex-wrap: wrap;
938
1381
  }
1382
+ .composer-actions-button { display: none; }
1383
+ .composer-actions-panel { display: contents; }
939
1384
  .composer-row label {
940
1385
  display: flex;
941
1386
  align-items: center;
@@ -976,15 +1421,15 @@ summary { cursor: pointer; color: var(--warning); }
976
1421
  .composer-git-button:hover {
977
1422
  background: linear-gradient(120deg, var(--ctp-green), var(--ctp-teal), var(--ctp-blue));
978
1423
  }
979
- .composer-git-button[data-tooltip]::before,
980
- .composer-git-button[data-tooltip]::after {
1424
+ .composer-row button[data-tooltip]::before,
1425
+ .composer-row button[data-tooltip]::after {
981
1426
  position: absolute;
982
1427
  right: 0;
983
1428
  pointer-events: none;
984
1429
  opacity: 0;
985
1430
  transition: opacity 140ms ease, transform 140ms ease;
986
1431
  }
987
- .composer-git-button[data-tooltip]::before {
1432
+ .composer-row button[data-tooltip]::before {
988
1433
  content: "";
989
1434
  bottom: calc(100% + 0.42rem);
990
1435
  width: 0.72rem;
@@ -995,7 +1440,7 @@ summary { cursor: pointer; color: var(--warning); }
995
1440
  transform: translate(-1.2rem, 0.24rem) rotate(45deg);
996
1441
  z-index: 29;
997
1442
  }
998
- .composer-git-button[data-tooltip]::after {
1443
+ .composer-row button[data-tooltip]::after {
999
1444
  content: attr(data-tooltip);
1000
1445
  bottom: calc(100% + 0.72rem);
1001
1446
  z-index: 30;
@@ -1018,15 +1463,18 @@ summary { cursor: pointer; color: var(--warning); }
1018
1463
  letter-spacing: 0;
1019
1464
  transform: translateY(0.24rem);
1020
1465
  }
1021
- .composer-git-button[data-tooltip]:hover::before,
1022
- .composer-git-button[data-tooltip]:hover::after,
1023
- .composer-git-button[data-tooltip]:focus-visible::before,
1024
- .composer-git-button[data-tooltip]:focus-visible::after {
1466
+ .composer-row button[data-tooltip]:hover::before,
1467
+ .composer-row button[data-tooltip]:hover::after,
1468
+ .composer-row button[data-tooltip]:focus-visible::before,
1469
+ .composer-row button[data-tooltip]:focus-visible::after,
1470
+ .composer-row button[data-tooltip].tooltip-open::before,
1471
+ .composer-row button[data-tooltip].tooltip-open::after {
1025
1472
  opacity: 1;
1026
1473
  transform: translateY(0);
1027
1474
  }
1028
- .composer-git-button[data-tooltip]:hover::before,
1029
- .composer-git-button[data-tooltip]:focus-visible::before {
1475
+ .composer-row button[data-tooltip]:hover::before,
1476
+ .composer-row button[data-tooltip]:focus-visible::before,
1477
+ .composer-row button[data-tooltip].tooltip-open::before {
1030
1478
  transform: translate(-1.2rem, 0) rotate(45deg);
1031
1479
  }
1032
1480
 
@@ -1092,6 +1540,145 @@ summary { cursor: pointer; color: var(--warning); }
1092
1540
  .dialog-input { width: 100%; padding: 0.7rem; }
1093
1541
  .dialog-editor { width: 100%; min-height: 12rem; padding: 0.7rem; }
1094
1542
 
1543
+ .path-picker-dialog {
1544
+ width: min(48rem, calc(100vw - 2rem));
1545
+ }
1546
+ .path-picker-current-row {
1547
+ display: grid;
1548
+ grid-template-columns: minmax(0, 1fr) auto;
1549
+ gap: 0.55rem;
1550
+ align-items: stretch;
1551
+ }
1552
+ .path-picker-current {
1553
+ min-width: 0;
1554
+ margin: 0;
1555
+ padding: 0.72rem 0.82rem;
1556
+ overflow-wrap: anywhere;
1557
+ border: 1px solid rgba(166, 227, 161, 0.24);
1558
+ border-radius: 0.82rem;
1559
+ background: rgba(17, 17, 27, 0.64);
1560
+ color: var(--ctp-green);
1561
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
1562
+ font-weight: 850;
1563
+ }
1564
+ .path-picker-add-fast-pick {
1565
+ align-self: stretch;
1566
+ padding: 0.52rem 0.72rem;
1567
+ color: var(--ctp-yellow);
1568
+ border-color: rgba(249, 226, 175, 0.32);
1569
+ }
1570
+ .path-picker-add-fast-pick:disabled {
1571
+ cursor: default;
1572
+ opacity: 0.62;
1573
+ }
1574
+ .path-picker-fast-picks {
1575
+ display: grid;
1576
+ grid-template-columns: repeat(auto-fit, minmax(8.5rem, 1fr));
1577
+ gap: 0.42rem;
1578
+ margin: 0.72rem 0 0;
1579
+ padding: 0.5rem;
1580
+ border: 1px solid rgba(249, 226, 175, 0.14);
1581
+ border-radius: 0.82rem;
1582
+ background: rgba(17, 17, 27, 0.34);
1583
+ }
1584
+ .path-picker-fast-pick {
1585
+ display: grid;
1586
+ grid-template-columns: minmax(0, 1fr) 1.45rem;
1587
+ overflow: hidden;
1588
+ min-width: 0;
1589
+ width: 100%;
1590
+ border: 1px solid rgba(249, 226, 175, 0.22);
1591
+ border-radius: 0.72rem;
1592
+ background: rgba(49, 50, 68, 0.36);
1593
+ }
1594
+ .path-picker-fast-pick-button,
1595
+ .path-picker-fast-pick-remove {
1596
+ min-height: 2rem;
1597
+ border: 0;
1598
+ border-radius: 0;
1599
+ background: transparent;
1600
+ box-shadow: none;
1601
+ }
1602
+ .path-picker-fast-pick-button {
1603
+ min-width: 0;
1604
+ padding: 0.42rem 0.58rem;
1605
+ overflow: hidden;
1606
+ color: var(--ctp-yellow);
1607
+ text-align: left;
1608
+ text-overflow: ellipsis;
1609
+ white-space: nowrap;
1610
+ }
1611
+ .path-picker-fast-pick-remove {
1612
+ min-width: 1.45rem;
1613
+ width: 1.45rem;
1614
+ padding: 0;
1615
+ color: rgba(186, 194, 222, 0.72);
1616
+ border-left: 1px solid rgba(249, 226, 175, 0.14);
1617
+ font-size: 0.78rem;
1618
+ }
1619
+ .path-picker-fast-pick-button:hover,
1620
+ .path-picker-fast-pick-button:focus-visible {
1621
+ color: #11111b;
1622
+ background: linear-gradient(120deg, var(--ctp-yellow), var(--ctp-peach));
1623
+ }
1624
+ .path-picker-fast-pick-remove:hover,
1625
+ .path-picker-fast-pick-remove:focus-visible {
1626
+ color: #11111b;
1627
+ background: linear-gradient(120deg, var(--ctp-red), var(--ctp-peach));
1628
+ }
1629
+ .path-picker-fast-picks-empty {
1630
+ grid-column: 1 / -1;
1631
+ padding: 0.15rem 0.25rem;
1632
+ }
1633
+ .path-picker-roots {
1634
+ display: flex;
1635
+ flex-wrap: wrap;
1636
+ gap: 0.45rem;
1637
+ margin: 0.72rem 0;
1638
+ }
1639
+ .path-picker-root-button {
1640
+ padding: 0.42rem 0.66rem;
1641
+ color: var(--ctp-teal);
1642
+ border-color: rgba(148, 226, 213, 0.30);
1643
+ }
1644
+ .path-picker-list {
1645
+ display: grid;
1646
+ gap: 0.4rem;
1647
+ max-height: min(24rem, 46vh);
1648
+ overflow: auto;
1649
+ padding: 0.4rem;
1650
+ border: 1px solid rgba(180, 190, 254, 0.16);
1651
+ border-radius: 0.82rem;
1652
+ background: rgba(17, 17, 27, 0.48);
1653
+ }
1654
+ .path-picker-directory {
1655
+ justify-content: flex-start;
1656
+ width: 100%;
1657
+ padding: 0.58rem 0.72rem;
1658
+ color: rgba(205, 214, 244, 0.94);
1659
+ text-align: left;
1660
+ border-color: rgba(180, 190, 254, 0.14);
1661
+ background: rgba(49, 50, 68, 0.36);
1662
+ }
1663
+ .path-picker-directory:hover,
1664
+ .path-picker-directory:focus-visible,
1665
+ .path-picker-root-button:hover,
1666
+ .path-picker-root-button:focus-visible {
1667
+ color: #11111b;
1668
+ border-color: transparent;
1669
+ background: linear-gradient(120deg, var(--ctp-green), var(--ctp-teal), var(--ctp-blue));
1670
+ }
1671
+ .path-picker-directory.hidden-directory {
1672
+ color: rgba(186, 194, 222, 0.68);
1673
+ }
1674
+ .path-picker-empty,
1675
+ .path-picker-error {
1676
+ padding: 0.62rem 0.72rem;
1677
+ }
1678
+ .path-picker-error {
1679
+ color: var(--danger);
1680
+ }
1681
+
1095
1682
  ::-webkit-scrollbar { width: 0.75rem; height: 0.75rem; }
1096
1683
  ::-webkit-scrollbar-track { background: rgba(17, 17, 27, 0.55); }
1097
1684
  ::-webkit-scrollbar-thumb {
@@ -1101,6 +1688,21 @@ summary { cursor: pointer; color: var(--warning); }
1101
1688
  }
1102
1689
  ::selection { color: #11111b; background: var(--ctp-pink); }
1103
1690
 
1691
+ @media (prefers-reduced-motion: reduce) {
1692
+ *, *::before, *::after {
1693
+ scroll-behavior: auto !important;
1694
+ transition-duration: 1ms !important;
1695
+ animation-duration: 1ms !important;
1696
+ animation-iteration-count: 1 !important;
1697
+ }
1698
+ }
1699
+
1700
+ @media (hover: none) and (pointer: coarse) {
1701
+ button:hover {
1702
+ transform: none;
1703
+ }
1704
+ }
1705
+
1104
1706
  @media (max-width: 1050px) {
1105
1707
  body { overflow: auto; }
1106
1708
  .layout,
@@ -1112,11 +1714,404 @@ summary { cursor: pointer; color: var(--warning); }
1112
1714
  .footer-model { grid-column: 1 / -1; }
1113
1715
  }
1114
1716
 
1115
- @media (max-width: 720px) {
1116
- .layout { padding: 0.65rem; }
1117
- .statusbar { padding: 0.68rem; }
1118
- .footer-line-main,
1119
- .footer-line-meta { grid-template-columns: 1fr; }
1120
- .footer-metric { width: 100%; }
1121
- .command-suggest-item { grid-template-columns: 1fr; gap: 0.25rem; }
1717
+ @media (max-width: 720px), (max-device-width: 720px), (pointer: coarse) and (hover: none) {
1718
+ body { overflow: hidden; }
1719
+ .layout,
1720
+ body.side-panel-collapsed .layout {
1721
+ gap: 0;
1722
+ height: 100vh;
1723
+ height: var(--visual-viewport-height, 100dvh);
1724
+ min-height: 0;
1725
+ padding: 0;
1726
+ overflow: hidden;
1727
+ }
1728
+ .chat-panel,
1729
+ body.side-panel-collapsed .chat-panel {
1730
+ height: 100vh;
1731
+ height: var(--visual-viewport-height, 100dvh);
1732
+ min-height: 0;
1733
+ border-radius: 0;
1734
+ }
1735
+ .terminal-tabs-shell {
1736
+ position: relative;
1737
+ align-items: center;
1738
+ flex-direction: row;
1739
+ gap: 0.28rem;
1740
+ min-height: calc(28px + env(safe-area-inset-top));
1741
+ padding: calc(0.12rem + env(safe-area-inset-top)) 0.42rem 0.12rem;
1742
+ overflow: visible;
1743
+ }
1744
+ body.side-panel-collapsed .terminal-tabs-shell { padding-right: 2.75rem; }
1745
+ .terminal-tabs-toggle-button {
1746
+ display: block;
1747
+ width: min(14rem, calc(100vw - 4rem));
1748
+ min-height: 28px;
1749
+ padding: 0.16rem 0.58rem;
1750
+ overflow: hidden;
1751
+ color: var(--ctp-teal);
1752
+ text-align: left;
1753
+ text-overflow: ellipsis;
1754
+ white-space: nowrap;
1755
+ border-radius: 0.58rem;
1756
+ border-color: rgba(148, 226, 213, 0.34);
1757
+ font-size: 0.74rem;
1758
+ line-height: 1.1;
1759
+ background:
1760
+ linear-gradient(120deg, rgba(148, 226, 213, 0.12), rgba(203, 166, 247, 0.10)),
1761
+ linear-gradient(180deg, rgba(49, 50, 68, 0.88), rgba(17, 17, 27, 0.88));
1762
+ }
1763
+ .side-panel-toggle-button,
1764
+ .side-panel-expand-button {
1765
+ width: 36px;
1766
+ min-width: 36px;
1767
+ height: 32px;
1768
+ min-height: 32px;
1769
+ border-radius: 0.58rem;
1770
+ }
1771
+ .side-panel-expand-button {
1772
+ top: calc(0.12rem + env(safe-area-inset-top));
1773
+ right: 0.42rem;
1774
+ }
1775
+ .terminal-tabs {
1776
+ position: absolute;
1777
+ left: 0.55rem;
1778
+ right: 0.55rem;
1779
+ top: calc(100% + 0.35rem);
1780
+ z-index: 16;
1781
+ display: none;
1782
+ flex-wrap: wrap;
1783
+ gap: 0.34rem;
1784
+ max-height: min(42dvh, 20rem);
1785
+ overflow: auto;
1786
+ padding: 0.55rem;
1787
+ border: 1px solid rgba(148, 226, 213, 0.26);
1788
+ border-radius: 0.95rem;
1789
+ background:
1790
+ radial-gradient(circle at 8% 0%, rgba(148, 226, 213, 0.12), transparent 12rem),
1791
+ linear-gradient(145deg, rgba(17, 17, 27, 0.98), rgba(30, 30, 46, 0.96));
1792
+ box-shadow: 0 1.2rem 2.8rem rgba(17, 17, 27, 0.68), 0 0 1.4rem rgba(148, 226, 213, 0.14), inset 0 1px 0 rgba(255,255,255,0.055);
1793
+ }
1794
+ body.mobile-tabs-expanded .terminal-tabs { display: flex; }
1795
+ .terminal-tab { min-width: min(11rem, 100%); max-width: 100%; flex: 1 1 9rem; }
1796
+ .terminal-tab-button,
1797
+ .terminal-tab-close,
1798
+ .terminal-new-tab-button { min-height: 44px; }
1799
+ .terminal-tab-button { padding: 0.32rem 0.52rem; }
1800
+ .terminal-tab-title { font-size: 0.78rem; }
1801
+ .terminal-tab-meta { display: none; }
1802
+ .terminal-tab-close {
1803
+ flex-basis: 44px;
1804
+ min-width: 44px;
1805
+ font-size: 1rem;
1806
+ }
1807
+ .terminal-new-tab-button {
1808
+ width: auto;
1809
+ padding: 0.36rem 0.58rem;
1810
+ white-space: nowrap;
1811
+ }
1812
+ .widget-area {
1813
+ display: block;
1814
+ max-height: 34dvh;
1815
+ overflow: auto;
1816
+ padding: 0.36rem 0.55rem;
1817
+ }
1818
+ .widget-area .widget:not(.todo-widget) { display: none; }
1819
+ .todo-widget {
1820
+ gap: 0.38rem;
1821
+ margin: 0.2rem 0;
1822
+ padding: 0.52rem 0.58rem;
1823
+ border-radius: 0.72rem;
1824
+ }
1825
+ .todo-widget-header { gap: 0.34rem; }
1826
+ .todo-widget-title { font-size: 0.7rem; }
1827
+ .todo-widget-count,
1828
+ .todo-widget-meta { font-size: 0.66rem; }
1829
+ .todo-widget-list { gap: 0.26rem; }
1830
+ .todo-widget-item {
1831
+ grid-template-columns: 1.12rem minmax(0, 1fr);
1832
+ gap: 0.36rem;
1833
+ font-size: 0.78rem;
1834
+ }
1835
+ .todo-widget-marker {
1836
+ width: 0.96rem;
1837
+ height: 0.96rem;
1838
+ font-size: 0.66rem;
1839
+ }
1840
+ .chat {
1841
+ padding: 0.62rem 0.58rem;
1842
+ scroll-padding-bottom: calc(12rem + var(--keyboard-inset-bottom, 0px));
1843
+ }
1844
+ .jump-to-latest-button {
1845
+ min-height: 44px;
1846
+ margin: 0.35rem auto;
1847
+ padding: 0.55rem 0.92rem;
1848
+ font-size: 0.86rem;
1849
+ }
1850
+ .message {
1851
+ margin-bottom: 0.62rem;
1852
+ padding: 0.68rem 0.7rem;
1853
+ border-radius: 0.82rem;
1854
+ }
1855
+ .message-header {
1856
+ gap: 0.5rem;
1857
+ margin-bottom: 0.38rem;
1858
+ font-size: 0.72rem;
1859
+ }
1860
+ .message-role { letter-spacing: 0.08em; }
1861
+ .code-block {
1862
+ padding: 0.58rem;
1863
+ font-size: 0.78rem;
1864
+ }
1865
+ details { padding: 0.5rem; }
1866
+ .statusbar {
1867
+ max-height: none;
1868
+ overflow: visible;
1869
+ padding: 0.42rem 0.55rem;
1870
+ font-size: 0.68rem;
1871
+ }
1872
+ body.footer-details-expanded .statusbar {
1873
+ max-height: min(42dvh, 20rem);
1874
+ overflow: auto;
1875
+ overscroll-behavior: contain;
1876
+ }
1877
+ body.footer-model-picker-open .statusbar {
1878
+ z-index: 12;
1879
+ overflow: visible;
1880
+ }
1881
+ body.footer-model-picker-open .footer-line { z-index: 1; }
1882
+ .footer-model-picker {
1883
+ position: fixed;
1884
+ left: max(0.55rem, env(safe-area-inset-left));
1885
+ right: max(0.55rem, env(safe-area-inset-right));
1886
+ bottom: var(--footer-model-picker-bottom, calc(8.5rem + env(safe-area-inset-bottom)));
1887
+ width: auto;
1888
+ max-height: min(52dvh, 24rem);
1889
+ z-index: 60;
1890
+ }
1891
+ .footer-line-main {
1892
+ display: none;
1893
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1894
+ gap: 0.35rem;
1895
+ margin-bottom: 0.35rem;
1896
+ }
1897
+ body.footer-details-expanded .footer-line-main { display: grid; }
1898
+ body.footer-details-expanded .footer-line-main .footer-metric { display: inline-grid; }
1899
+ .footer-line-meta {
1900
+ display: grid;
1901
+ grid-template-columns: minmax(0, 1.2fr) minmax(0, 0.8fr) auto;
1902
+ gap: 0.35rem;
1903
+ align-items: stretch;
1904
+ }
1905
+ .footer-line-meta .footer-meta { display: none; }
1906
+ .footer-workspace,
1907
+ .footer-context { display: grid !important; }
1908
+ .footer-workspace { order: 1; }
1909
+ .footer-context { order: 2; }
1910
+ .footer-details-toggle { order: 3; }
1911
+ .footer-branch { order: 4; }
1912
+ .footer-changes { order: 5; }
1913
+ .footer-runtime { order: 6; }
1914
+ .footer-model { order: 7; }
1915
+ body.footer-details-expanded .footer-line-meta {
1916
+ grid-template-columns: 1fr;
1917
+ }
1918
+ body.footer-details-expanded .footer-line-meta .footer-meta { display: grid; }
1919
+ .footer-metric { width: 100%; padding: 0.35rem 0.45rem; }
1920
+ .footer-details-toggle {
1921
+ display: block;
1922
+ min-height: 44px;
1923
+ padding: 0.35rem 0.62rem;
1924
+ color: var(--ctp-yellow);
1925
+ border-color: rgba(249, 226, 175, 0.34);
1926
+ font-size: 0.72rem;
1927
+ font-weight: 900;
1928
+ }
1929
+ .composer {
1930
+ position: sticky;
1931
+ bottom: 0;
1932
+ padding: 0.55rem 0.55rem calc(0.55rem + env(safe-area-inset-bottom));
1933
+ background: linear-gradient(180deg, rgba(17, 17, 27, 0.92), rgba(17, 17, 27, 0.98));
1934
+ box-shadow: 0 -0.85rem 1.8rem rgba(17, 17, 27, 0.56), inset 0 1px 0 rgba(255,255,255,0.04);
1935
+ }
1936
+ #promptInput {
1937
+ min-height: calc(1.45em + 1.5rem);
1938
+ max-height: min(28dvh, 12rem);
1939
+ padding: 0.75rem;
1940
+ resize: none;
1941
+ font-size: 1rem;
1942
+ line-height: 1.45;
1943
+ }
1944
+ .composer-row {
1945
+ display: grid;
1946
+ grid-template-columns: repeat(6, minmax(0, 1fr));
1947
+ gap: 0.42rem;
1948
+ align-items: stretch;
1949
+ margin-top: 0.55rem;
1950
+ }
1951
+ .composer-actions-button {
1952
+ display: block;
1953
+ grid-column: span 2;
1954
+ color: var(--ctp-yellow);
1955
+ border-color: rgba(249, 226, 175, 0.34);
1956
+ background:
1957
+ linear-gradient(120deg, rgba(249, 226, 175, 0.12), rgba(203, 166, 247, 0.10)),
1958
+ linear-gradient(180deg, rgba(49, 50, 68, 0.88), rgba(17, 17, 27, 0.88));
1959
+ }
1960
+ body.mobile-keyboard-open .terminal-tabs-shell,
1961
+ body.mobile-keyboard-open .widget-area,
1962
+ body.mobile-keyboard-open .statusbar,
1963
+ body.mobile-keyboard-open .side-panel-expand-button {
1964
+ display: none;
1965
+ }
1966
+ body.mobile-keyboard-open .chat {
1967
+ padding-top: 0.42rem;
1968
+ scroll-padding-bottom: calc(7.5rem + var(--keyboard-inset-bottom, 0px));
1969
+ }
1970
+ body.mobile-keyboard-open .composer {
1971
+ padding: 0.42rem 0.5rem calc(0.42rem + env(safe-area-inset-bottom));
1972
+ }
1973
+ body.mobile-keyboard-open #promptInput {
1974
+ min-height: calc(1.45em + 1.5rem);
1975
+ max-height: min(24dvh, 9rem);
1976
+ }
1977
+ body.mobile-keyboard-open .composer-row {
1978
+ grid-template-columns: 1fr;
1979
+ margin-top: 0.35rem;
1980
+ }
1981
+ body.mobile-keyboard-open .composer-actions-button,
1982
+ body.mobile-keyboard-open #steerButton,
1983
+ body.mobile-keyboard-open #followUpButton,
1984
+ body.mobile-keyboard-open .composer-actions-panel {
1985
+ display: none !important;
1986
+ }
1987
+ body.mobile-keyboard-open .composer-row button.primary {
1988
+ grid-column: 1 / -1;
1989
+ min-height: 44px;
1990
+ }
1991
+ .composer-actions-panel {
1992
+ position: absolute;
1993
+ left: 0.55rem;
1994
+ right: 0.55rem;
1995
+ bottom: calc(100% + 0.42rem);
1996
+ z-index: 8;
1997
+ display: none;
1998
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1999
+ gap: 0.45rem;
2000
+ max-height: min(42dvh, 22rem);
2001
+ overflow: auto;
2002
+ padding: 0.68rem;
2003
+ border: 1px solid rgba(249, 226, 175, 0.24);
2004
+ border-radius: 0.95rem;
2005
+ background:
2006
+ radial-gradient(circle at 8% 0%, rgba(249, 226, 175, 0.12), transparent 12rem),
2007
+ linear-gradient(145deg, rgba(17, 17, 27, 0.98), rgba(30, 30, 46, 0.96));
2008
+ box-shadow: 0 1.2rem 2.8rem rgba(17, 17, 27, 0.68), 0 0 1.4rem rgba(249, 226, 175, 0.14), inset 0 1px 0 rgba(255,255,255,0.055);
2009
+ }
2010
+ body.composer-actions-open .composer-actions-panel { display: grid; }
2011
+ .composer-actions-panel label {
2012
+ grid-column: 1 / -1;
2013
+ justify-content: space-between;
2014
+ gap: 0.55rem;
2015
+ min-height: 44px;
2016
+ font-size: 0.68rem;
2017
+ letter-spacing: 0.05em;
2018
+ }
2019
+ .composer-actions-panel label select { flex: 1 1 auto; min-width: 0; }
2020
+ .spacer { display: none; }
2021
+ .composer-row button {
2022
+ width: 100%;
2023
+ min-height: 44px;
2024
+ margin-right: 0;
2025
+ padding: 0.48rem 0.5rem;
2026
+ font-size: 0.82rem;
2027
+ }
2028
+ .composer-row button.primary {
2029
+ grid-column: 1 / -1;
2030
+ min-height: 48px;
2031
+ font-size: 0.92rem;
2032
+ }
2033
+ body:not(.pi-run-active):not(.mobile-keyboard-open) .composer-row button.primary { grid-column: span 4; }
2034
+ .composer-row > #followUpButton,
2035
+ .composer-row > #steerButton,
2036
+ .composer-actions-button { grid-column: span 2; }
2037
+ .composer-actions-panel > #followUpButton,
2038
+ .composer-actions-panel > #steerButton,
2039
+ #newSessionButton,
2040
+ #compactButton,
2041
+ #gitWorkflowButton { grid-column: span 1; }
2042
+ .command-suggest {
2043
+ max-height: 35dvh;
2044
+ font-size: 0.86rem;
2045
+ }
2046
+ .command-suggest-item {
2047
+ grid-template-columns: 1fr;
2048
+ gap: 0.25rem;
2049
+ padding: 0.6rem 0.68rem;
2050
+ }
2051
+ .side-panel-backdrop {
2052
+ position: fixed;
2053
+ inset: 0;
2054
+ z-index: 18;
2055
+ display: block;
2056
+ width: 100%;
2057
+ min-height: 100%;
2058
+ padding: 0;
2059
+ border: 0;
2060
+ border-radius: 0;
2061
+ background: rgba(17, 17, 27, 0.62);
2062
+ box-shadow: none;
2063
+ backdrop-filter: blur(4px);
2064
+ }
2065
+ .side-panel-backdrop[hidden],
2066
+ body.side-panel-collapsed .side-panel-backdrop { display: none; }
2067
+ .side-panel-backdrop:hover,
2068
+ .side-panel-backdrop:active {
2069
+ transform: none;
2070
+ border-color: transparent;
2071
+ box-shadow: none;
2072
+ }
2073
+ .side-panel {
2074
+ position: fixed;
2075
+ z-index: 19;
2076
+ top: calc(0.5rem + env(safe-area-inset-top));
2077
+ right: 0.5rem;
2078
+ bottom: calc(0.5rem + env(safe-area-inset-bottom));
2079
+ left: 0.5rem;
2080
+ display: grid;
2081
+ max-height: none;
2082
+ border-radius: 0.95rem;
2083
+ }
2084
+ .side-panel-body { overscroll-behavior: contain; }
2085
+ .extension-dialog {
2086
+ position: fixed;
2087
+ inset: auto 0 0 0;
2088
+ width: 100vw;
2089
+ max-width: none;
2090
+ max-height: calc(var(--visual-viewport-height, 100dvh) - 1rem - env(safe-area-inset-top));
2091
+ margin: 0;
2092
+ overflow: auto;
2093
+ border-radius: 1rem 1rem 0 0;
2094
+ }
2095
+ .extension-dialog menu {
2096
+ position: sticky;
2097
+ bottom: 0;
2098
+ flex-wrap: wrap;
2099
+ padding-bottom: env(safe-area-inset-bottom);
2100
+ background: linear-gradient(180deg, transparent, rgba(17, 17, 27, 0.96) 35%);
2101
+ }
2102
+ .extension-dialog menu button { flex: 1 1 9rem; }
2103
+ .composer-row button[data-tooltip]:not(.tooltip-open)::before,
2104
+ .composer-row button[data-tooltip]:not(.tooltip-open)::after { display: none; }
2105
+ .composer-row button[data-tooltip].tooltip-open::before,
2106
+ .composer-row button[data-tooltip].tooltip-open::after { display: block; }
2107
+ .git-workflow-actions button,
2108
+ #gitWorkflowCancelButton { min-height: 44px; }
2109
+ .path-picker-current-row { grid-template-columns: 1fr; }
2110
+ .path-picker-add-fast-pick { width: 100%; }
2111
+ .path-picker-fast-pick { grid-template-columns: minmax(0, 1fr) 44px; }
2112
+ .path-picker-fast-pick-remove {
2113
+ width: 44px;
2114
+ min-width: 44px;
2115
+ }
2116
+ .path-picker-list { max-height: min(18rem, 42dvh); }
1122
2117
  }