@grifhinz/logics-manager 2.8.0 → 2.9.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.
@@ -283,7 +283,9 @@
283
283
  z-index: 60;
284
284
  display: grid;
285
285
  gap: 12px;
286
- min-width: 220px;
286
+ width: max-content;
287
+ min-width: 260px;
288
+ max-width: min(360px, calc(100vw - 24px));
287
289
  padding: 10px;
288
290
  border: 1px solid var(--vscode-panel-border, #333333);
289
291
  border-radius: 6px;
@@ -733,101 +735,681 @@
733
735
  padding: 12px;
734
736
  }
735
737
 
736
- .viewer-ci__heading {
737
- display: flex;
738
- align-items: center;
739
- justify-content: space-between;
740
- gap: 10px;
741
- margin-bottom: 10px;
738
+ .viewer-ci__heading {
739
+ display: flex;
740
+ align-items: center;
741
+ justify-content: space-between;
742
+ gap: 10px;
743
+ margin-bottom: 10px;
744
+ }
745
+
746
+ .viewer-ci__heading--actions {
747
+ align-items: flex-start;
748
+ }
749
+
750
+ .viewer-ci__heading--actions > div {
751
+ display: grid;
752
+ gap: 4px;
753
+ }
754
+
755
+ .viewer-ci__heading h2 {
756
+ margin: 0;
757
+ font-size: 13px;
758
+ }
759
+
760
+ .viewer-ci__heading span {
761
+ color: var(--vscode-descriptionForeground, #aaaaaa);
762
+ font-size: 12px;
763
+ }
764
+
765
+ .viewer-ci__badge {
766
+ display: inline-flex;
767
+ align-items: center;
768
+ justify-content: center;
769
+ min-height: 20px;
770
+ border: 1px solid color-mix(in srgb, currentColor 28%, transparent);
771
+ border-radius: 999px;
772
+ padding: 2px 8px;
773
+ font-size: 11px;
774
+ font-weight: 700;
775
+ }
776
+
777
+ .viewer-ci__list,
778
+ .viewer-ci__jobs {
779
+ display: grid;
780
+ gap: 6px;
781
+ margin: 0;
782
+ padding: 0;
783
+ list-style: none;
784
+ }
785
+
786
+ .viewer-ci__row,
787
+ .viewer-ci__job,
788
+ .viewer-ci__empty {
789
+ min-width: 0;
790
+ border: 1px solid color-mix(in srgb, var(--vscode-panel-border, #333333) 74%, transparent);
791
+ border-radius: 6px;
792
+ padding: 8px 9px;
793
+ background: var(--vscode-sideBar-background, #252526);
794
+ font-size: 12px;
795
+ }
796
+
797
+ .viewer-ci__row,
798
+ .viewer-ci__job,
799
+ .viewer-ci__job a {
800
+ display: flex;
801
+ justify-content: space-between;
802
+ gap: 12px;
803
+ }
804
+
805
+ .viewer-ci__job a {
806
+ width: 100%;
807
+ color: inherit;
808
+ text-decoration: none;
809
+ }
810
+
811
+ .viewer-ci__row span,
812
+ .viewer-ci__job span {
813
+ color: var(--vscode-descriptionForeground, #aaaaaa);
814
+ }
815
+
816
+ .viewer-ci__row strong,
817
+ .viewer-ci__job strong {
818
+ min-width: 0;
819
+ text-align: right;
820
+ overflow-wrap: anywhere;
821
+ }
822
+
823
+ .viewer-ci__link {
824
+ display: inline-flex;
825
+ margin-top: 10px;
826
+ color: var(--vscode-textLink-foreground, #4ea1ff);
827
+ font-size: 12px;
828
+ }
829
+
830
+ .viewer-ci__state,
831
+ .viewer-ci__empty {
832
+ color: var(--vscode-descriptionForeground, #9da5b4);
833
+ }
834
+
835
+ .viewer-workspace {
836
+ display: grid;
837
+ grid-template-columns: minmax(180px, 260px) minmax(0, 1fr);
838
+ gap: 12px;
839
+ align-items: start;
840
+ }
841
+
842
+ .viewer-workspace__tree,
843
+ .viewer-workspace__preview {
844
+ min-width: 0;
845
+ border: 1px solid var(--vscode-panel-border, #333333);
846
+ border-radius: 6px;
847
+ background: var(--vscode-editorWidget-background, #202020);
848
+ }
849
+
850
+ .viewer-workspace__preview {
851
+ display: grid;
852
+ align-content: start;
853
+ gap: 10px;
854
+ padding: 12px;
855
+ }
856
+
857
+ .viewer-workspace__tree-header {
858
+ padding: 6px 8px;
859
+ border-bottom: 1px solid var(--vscode-panel-border, #333333);
860
+ background: var(--vscode-editorWidget-background, #202020);
861
+ color: var(--vscode-descriptionForeground, #aaaaaa);
862
+ font-size: 11px;
863
+ overflow-wrap: anywhere;
864
+ }
865
+
866
+ .viewer-workspace__breadcrumb {
867
+ display: flex;
868
+ flex-wrap: wrap;
869
+ align-items: center;
870
+ gap: 2px;
871
+ min-width: 0;
872
+ }
873
+
874
+ .viewer-workspace__crumb {
875
+ border: 0;
876
+ background: transparent;
877
+ color: var(--vscode-descriptionForeground, #aaaaaa);
878
+ font: inherit;
879
+ font-size: 11px;
880
+ padding: 2px 4px;
881
+ border-radius: 3px;
882
+ cursor: pointer;
883
+ max-width: 14ch;
884
+ overflow: hidden;
885
+ text-overflow: ellipsis;
886
+ white-space: nowrap;
887
+ }
888
+
889
+ .viewer-workspace__crumb:hover {
890
+ color: var(--vscode-foreground, #d4d4d4);
891
+ background: var(--vscode-list-hoverBackground, rgb(255 255 255 / 6%));
892
+ }
893
+
894
+ .viewer-workspace__crumb:focus-visible {
895
+ outline: 1px solid var(--vscode-focusBorder, #007fd4);
896
+ outline-offset: 0;
897
+ }
898
+
899
+ .viewer-workspace__crumb.is-current {
900
+ color: var(--vscode-foreground, #d4d4d4);
901
+ font-weight: 600;
902
+ cursor: default;
903
+ }
904
+
905
+ .viewer-workspace__crumb-sep {
906
+ color: var(--vscode-descriptionForeground, #888888);
907
+ font-size: 11px;
908
+ user-select: none;
909
+ }
910
+
911
+ .viewer-workspace__tree-list {
912
+ display: grid;
913
+ gap: 1px;
914
+ padding: 4px;
915
+ }
916
+
917
+ .viewer-workspace__item {
918
+ width: 100%;
919
+ min-width: 0;
920
+ display: grid;
921
+ grid-template-columns: 16px minmax(0, 1fr);
922
+ gap: 6px;
923
+ align-items: center;
924
+ border: 0;
925
+ border-radius: 4px;
926
+ padding: 4px 6px;
927
+ background: transparent;
928
+ color: var(--vscode-foreground, #d4d4d4);
929
+ font: inherit;
930
+ font-size: 12px;
931
+ line-height: 1.4;
932
+ text-align: left;
933
+ cursor: pointer;
934
+ }
935
+
936
+ .viewer-workspace__item:hover {
937
+ background: var(--vscode-list-hoverBackground, rgb(255 255 255 / 6%));
938
+ }
939
+
940
+ .viewer-workspace__item:focus-visible {
941
+ outline: 1px solid var(--vscode-focusBorder, #007fd4);
942
+ outline-offset: -1px;
943
+ background: var(--vscode-list-focusBackground, rgb(255 255 255 / 4%));
944
+ }
945
+
946
+ .viewer-workspace__item.is-selected {
947
+ background: var(--vscode-list-activeSelectionBackground, #094771);
948
+ color: var(--vscode-list-activeSelectionForeground, #ffffff);
949
+ }
950
+
951
+ .viewer-workspace__item.is-selected .viewer-workspace__item-icon {
952
+ color: inherit;
953
+ }
954
+
955
+ .viewer-workspace__item.is-muted {
956
+ color: var(--vscode-descriptionForeground, #888888);
957
+ cursor: default;
958
+ }
959
+
960
+ .viewer-workspace__item--up {
961
+ color: var(--vscode-descriptionForeground, #aaaaaa);
962
+ font-style: italic;
963
+ }
964
+
965
+ .viewer-workspace__item-icon {
966
+ color: var(--vscode-symbolIcon-folderForeground, #c5c5c5);
967
+ display: inline-flex;
968
+ align-items: center;
969
+ justify-content: center;
970
+ width: 16px;
971
+ height: 16px;
972
+ }
973
+
974
+ .viewer-workspace__item--file .viewer-workspace__item-icon {
975
+ color: var(--vscode-symbolIcon-fileForeground, #9cdcfe);
976
+ }
977
+
978
+ .viewer-workspace__item.is-muted .viewer-workspace__item-icon {
979
+ color: var(--vscode-descriptionForeground, #666666);
980
+ }
981
+
982
+ .viewer-workspace__item-icon svg {
983
+ width: 14px;
984
+ height: 14px;
985
+ }
986
+
987
+ .viewer-workspace__placeholder {
988
+ display: flex;
989
+ align-items: center;
990
+ gap: 8px;
991
+ padding: 10px 12px;
992
+ color: var(--vscode-descriptionForeground, #aaaaaa);
993
+ font-size: 12px;
994
+ border: 1px dashed var(--vscode-panel-border, #333333);
995
+ border-radius: 4px;
996
+ margin: 6px;
997
+ }
998
+
999
+ .viewer-workspace__placeholder--warn {
1000
+ border-color: var(--vscode-editorWarning-foreground, #cca700);
1001
+ color: var(--vscode-editorWarning-foreground, #cca700);
1002
+ }
1003
+
1004
+ .viewer-workspace__placeholder--unavailable {
1005
+ border-color: var(--vscode-editorError-foreground, #f48771);
1006
+ color: var(--vscode-editorError-foreground, #f48771);
1007
+ }
1008
+
1009
+ .viewer-workspace__placeholder-icon {
1010
+ display: inline-flex;
1011
+ width: 16px;
1012
+ height: 16px;
1013
+ align-items: center;
1014
+ justify-content: center;
1015
+ font-weight: 700;
1016
+ border-radius: 50%;
1017
+ background: rgb(255 255 255 / 6%);
1018
+ font-size: 11px;
1019
+ }
1020
+
1021
+ .viewer-workspace__item-name {
1022
+ min-width: 0;
1023
+ overflow: hidden;
1024
+ text-overflow: ellipsis;
1025
+ white-space: nowrap;
1026
+ }
1027
+
1028
+ .viewer-workspace__preview-header {
1029
+ display: flex;
1030
+ justify-content: space-between;
1031
+ gap: 12px;
1032
+ min-width: 0;
1033
+ }
1034
+
1035
+ .viewer-workspace__preview-header > div {
1036
+ min-width: 0;
1037
+ display: grid;
1038
+ gap: 3px;
1039
+ }
1040
+
1041
+ .viewer-workspace__preview-header strong,
1042
+ .viewer-workspace__preview-header span {
1043
+ min-width: 0;
1044
+ overflow-wrap: anywhere;
1045
+ }
1046
+
1047
+ .viewer-workspace__preview-header span,
1048
+ .viewer-workspace__preview-header em,
1049
+ .viewer-workspace__empty {
1050
+ color: var(--vscode-descriptionForeground, #aaaaaa);
1051
+ font-size: 12px;
1052
+ }
1053
+
1054
+ .viewer-workspace__code {
1055
+ margin: 0;
1056
+ padding: 12px;
1057
+ border: 1px solid var(--vscode-panel-border, #333333);
1058
+ border-radius: 6px;
1059
+ background: var(--vscode-textCodeBlock-background, #111111);
1060
+ color: var(--vscode-textPreformat-foreground, #d7ba7d);
1061
+ font-size: 12px;
1062
+ line-height: 1.45;
1063
+ white-space: pre-wrap;
1064
+ overflow-wrap: anywhere;
1065
+ }
1066
+
1067
+ .viewer-workshop {
1068
+ display: grid;
1069
+ gap: 10px;
1070
+ }
1071
+
1072
+ .viewer-workshop__panel {
1073
+ border: 1px solid var(--vscode-panel-border, #333333);
1074
+ border-radius: 6px;
1075
+ background: var(--vscode-editorWidget-background, #202020);
1076
+ padding: 8px;
1077
+ }
1078
+
1079
+ .viewer-workshop__panel--terminals {
1080
+ display: flex;
1081
+ align-items: center;
1082
+ justify-content: center;
1083
+ padding: 16px;
1084
+ }
1085
+
1086
+ .viewer-workshop__panel--terminals .viewer-workspace__placeholder {
1087
+ margin: 0;
1088
+ max-width: 480px;
1089
+ }
1090
+
1091
+ .viewer-workshop__panel--terminals-active {
1092
+ display: grid;
1093
+ grid-template-columns: minmax(180px, 220px) minmax(0, 1fr);
1094
+ gap: 8px;
1095
+ padding: 0;
1096
+ background: var(--vscode-editorWidget-background, #202020);
1097
+ }
1098
+
1099
+ .viewer-workshop__terminal-list {
1100
+ border-right: 1px solid var(--vscode-panel-border, #333333);
1101
+ padding: 6px;
1102
+ display: flex;
1103
+ flex-direction: column;
1104
+ gap: 6px;
1105
+ min-height: 360px;
1106
+ }
1107
+
1108
+ .viewer-workshop__terminal-list-header {
1109
+ display: flex;
1110
+ align-items: center;
1111
+ justify-content: space-between;
1112
+ gap: 4px;
1113
+ font-size: 11px;
1114
+ font-weight: 700;
1115
+ color: var(--vscode-descriptionForeground, #aaaaaa);
1116
+ text-transform: uppercase;
1117
+ }
1118
+
1119
+ .viewer-workshop__terminal-new {
1120
+ font-size: 11px;
1121
+ padding: 2px 8px;
1122
+ }
1123
+
1124
+ .viewer-workshop__terminal-actions {
1125
+ display: flex;
1126
+ gap: 4px;
1127
+ }
1128
+
1129
+ .viewer-workshop__terminal-rows {
1130
+ display: flex;
1131
+ flex-direction: column;
1132
+ gap: 2px;
1133
+ }
1134
+
1135
+ .viewer-workshop__terminal-row {
1136
+ display: grid;
1137
+ grid-template-columns: minmax(0, 1fr) auto auto;
1138
+ gap: 6px;
1139
+ align-items: center;
1140
+ border: 0;
1141
+ background: transparent;
1142
+ color: var(--vscode-foreground, #d4d4d4);
1143
+ font: inherit;
1144
+ font-size: 12px;
1145
+ text-align: left;
1146
+ padding: 4px 6px;
1147
+ border-radius: 4px;
1148
+ cursor: pointer;
1149
+ }
1150
+
1151
+ .viewer-workshop__terminal-row:hover {
1152
+ background: var(--vscode-list-hoverBackground, rgb(255 255 255 / 6%));
1153
+ }
1154
+
1155
+ .viewer-workshop__terminal-row.is-active {
1156
+ background: var(--vscode-list-activeSelectionBackground, #094771);
1157
+ color: var(--vscode-list-activeSelectionForeground, #ffffff);
1158
+ }
1159
+
1160
+ .viewer-workshop__terminal-row-label {
1161
+ overflow: hidden;
1162
+ text-overflow: ellipsis;
1163
+ white-space: nowrap;
1164
+ }
1165
+
1166
+ .viewer-workshop__terminal-row-close {
1167
+ display: inline-flex;
1168
+ width: 18px;
1169
+ height: 18px;
1170
+ align-items: center;
1171
+ justify-content: center;
1172
+ border-radius: 3px;
1173
+ color: inherit;
1174
+ font-size: 14px;
1175
+ line-height: 1;
1176
+ }
1177
+
1178
+ .viewer-workshop__terminal-row-close:hover {
1179
+ background: var(--vscode-list-errorBackground, rgb(244 135 113 / 25%));
1180
+ }
1181
+
1182
+ .viewer-workshop__terminal-row-close.is-closing {
1183
+ opacity: 0.85;
1184
+ pointer-events: none;
1185
+ cursor: progress;
1186
+ }
1187
+
1188
+ .viewer-workshop__terminal-row.is-closing {
1189
+ opacity: 0.6;
1190
+ pointer-events: none;
1191
+ cursor: progress;
1192
+ }
1193
+
1194
+ .viewer-workshop__spinner {
1195
+ display: inline-block;
1196
+ width: 12px;
1197
+ height: 12px;
1198
+ border: 1.5px solid currentColor;
1199
+ border-right-color: transparent;
1200
+ border-radius: 50%;
1201
+ animation: viewer-workshop-spin 0.7s linear infinite;
1202
+ }
1203
+
1204
+ @keyframes viewer-workshop-spin {
1205
+ to { transform: rotate(360deg); }
1206
+ }
1207
+
1208
+ .viewer-workshop__terminal-stage {
1209
+ padding: 6px;
1210
+ min-width: 0;
1211
+ }
1212
+
1213
+ .viewer-workshop__terminal-host {
1214
+ width: 100%;
1215
+ height: 480px;
1216
+ background: #0a0a0a;
1217
+ border-radius: 4px;
1218
+ padding: 6px;
1219
+ }
1220
+
1221
+ .viewer-workshop__terminal-host .xterm {
1222
+ height: 100%;
1223
+ }
1224
+
1225
+ .viewer-workshop__group {
1226
+ margin-bottom: 12px;
1227
+ }
1228
+
1229
+ .viewer-workshop__group-title {
1230
+ font-size: 11px;
1231
+ text-transform: uppercase;
1232
+ letter-spacing: 0.04em;
1233
+ color: var(--vscode-descriptionForeground, #aaaaaa);
1234
+ margin: 0 0 4px;
1235
+ }
1236
+
1237
+ .viewer-workshop__commands {
1238
+ list-style: none;
1239
+ padding: 0;
1240
+ margin: 0;
1241
+ display: grid;
1242
+ gap: 6px;
1243
+ }
1244
+
1245
+ .viewer-workshop__command {
1246
+ border: 1px solid var(--vscode-panel-border, #333333);
1247
+ border-radius: 4px;
1248
+ background: var(--vscode-textCodeBlock-background, #161616);
1249
+ padding: 6px 8px;
1250
+ }
1251
+
1252
+ .viewer-workshop__command-header {
1253
+ display: flex;
1254
+ align-items: center;
1255
+ justify-content: space-between;
1256
+ gap: 8px;
1257
+ }
1258
+
1259
+ .viewer-workshop__command-name {
1260
+ display: flex;
1261
+ flex-direction: column;
1262
+ min-width: 0;
1263
+ }
1264
+
1265
+ .viewer-workshop__command-name strong {
1266
+ font-size: 12px;
1267
+ }
1268
+
1269
+ .viewer-workshop__command-source {
1270
+ font-size: 10px;
1271
+ color: var(--vscode-descriptionForeground, #888888);
1272
+ }
1273
+
1274
+ .viewer-workshop__command-actions {
1275
+ display: flex;
1276
+ align-items: center;
1277
+ gap: 6px;
1278
+ }
1279
+
1280
+ .viewer-workshop__command-meta {
1281
+ margin: 4px 0;
1282
+ font-size: 11px;
1283
+ color: var(--vscode-descriptionForeground, #aaaaaa);
1284
+ overflow-wrap: anywhere;
1285
+ }
1286
+
1287
+ .viewer-workshop__command-meta code {
1288
+ font-family: var(--vscode-editor-font-family, monospace);
1289
+ }
1290
+
1291
+ .viewer-workshop__state {
1292
+ font-size: 10px;
1293
+ text-transform: uppercase;
1294
+ letter-spacing: 0.04em;
1295
+ padding: 2px 6px;
1296
+ border-radius: 10px;
1297
+ background: rgb(255 255 255 / 6%);
1298
+ color: var(--vscode-descriptionForeground, #aaaaaa);
1299
+ }
1300
+
1301
+ .viewer-workshop__state--running,
1302
+ .viewer-workshop__state--starting {
1303
+ background: var(--vscode-debugIcon-startForeground, #387a14);
1304
+ color: #ffffff;
742
1305
  }
743
1306
 
744
- .viewer-ci__heading--actions {
745
- align-items: flex-start;
1307
+ .viewer-workshop__state--failed,
1308
+ .viewer-workshop__state--error {
1309
+ background: var(--vscode-editorError-foreground, #f48771);
1310
+ color: #1e1e1e;
746
1311
  }
747
1312
 
748
- .viewer-ci__heading--actions > div {
749
- display: grid;
750
- gap: 4px;
1313
+ .viewer-workshop__state--finished {
1314
+ background: var(--vscode-charts-green, #4caf50);
1315
+ color: #1e1e1e;
751
1316
  }
752
1317
 
753
- .viewer-ci__heading h2 {
754
- margin: 0;
755
- font-size: 13px;
1318
+ .viewer-workshop__state--stopped {
1319
+ background: var(--vscode-charts-orange, #cca700);
1320
+ color: #1e1e1e;
756
1321
  }
757
1322
 
758
- .viewer-ci__heading span {
1323
+ .viewer-workshop__exit {
1324
+ font-size: 10px;
1325
+ font-family: var(--vscode-editor-font-family, monospace);
759
1326
  color: var(--vscode-descriptionForeground, #aaaaaa);
760
- font-size: 12px;
761
1327
  }
762
1328
 
763
- .viewer-ci__badge {
764
- display: inline-flex;
765
- align-items: center;
766
- justify-content: center;
767
- min-height: 20px;
768
- border: 1px solid color-mix(in srgb, currentColor 28%, transparent);
769
- border-radius: 999px;
770
- padding: 2px 8px;
771
- font-size: 11px;
772
- font-weight: 700;
1329
+ .viewer-workshop__exit--fail {
1330
+ color: var(--vscode-editorError-foreground, #f48771);
773
1331
  }
774
1332
 
775
- .viewer-ci__list,
776
- .viewer-ci__jobs {
777
- display: grid;
778
- gap: 6px;
779
- margin: 0;
780
- padding: 0;
781
- list-style: none;
1333
+ .viewer-workshop__log {
1334
+ margin: 6px 0 0;
1335
+ padding: 6px 8px;
1336
+ max-height: 200px;
1337
+ overflow: auto;
1338
+ font-size: 11px;
1339
+ line-height: 1.4;
1340
+ background: var(--vscode-terminal-background, #0a0a0a);
1341
+ color: var(--vscode-terminal-foreground, #d4d4d4);
1342
+ border-radius: 3px;
1343
+ white-space: pre-wrap;
1344
+ overflow-wrap: anywhere;
782
1345
  }
783
1346
 
784
- .viewer-ci__row,
785
- .viewer-ci__job,
786
- .viewer-ci__empty {
787
- min-width: 0;
788
- border: 1px solid color-mix(in srgb, var(--vscode-panel-border, #333333) 74%, transparent);
789
- border-radius: 6px;
790
- padding: 8px 9px;
791
- background: var(--vscode-sideBar-background, #252526);
792
- font-size: 12px;
1347
+ .viewer-workshop__log:empty {
1348
+ display: none;
793
1349
  }
794
1350
 
795
- .viewer-ci__row,
796
- .viewer-ci__job,
797
- .viewer-ci__job a {
1351
+ .viewer-lan-banner {
798
1352
  display: flex;
799
- justify-content: space-between;
800
- gap: 12px;
1353
+ align-items: center;
1354
+ gap: 10px;
1355
+ padding: 8px 14px;
1356
+ background: var(--vscode-statusBarItem-warningBackground, #b08600);
1357
+ color: var(--vscode-statusBarItem-warningForeground, #1e1e1e);
1358
+ font-size: 12px;
1359
+ font-weight: 600;
1360
+ border-bottom: 1px solid rgb(0 0 0 / 30%);
801
1361
  }
802
1362
 
803
- .viewer-ci__job a {
804
- width: 100%;
805
- color: inherit;
806
- text-decoration: none;
1363
+ .viewer-lan-banner[hidden] {
1364
+ display: none !important;
807
1365
  }
808
1366
 
809
- .viewer-ci__row span,
810
- .viewer-ci__job span {
811
- color: var(--vscode-descriptionForeground, #aaaaaa);
1367
+ .viewer-lan-banner__icon {
1368
+ display: inline-flex;
1369
+ width: 18px;
1370
+ height: 18px;
1371
+ align-items: center;
1372
+ justify-content: center;
1373
+ border-radius: 50%;
1374
+ background: rgb(0 0 0 / 30%);
1375
+ color: #ffd33d;
1376
+ font-weight: 700;
812
1377
  }
813
1378
 
814
- .viewer-ci__row strong,
815
- .viewer-ci__job strong {
1379
+ .viewer-lan-banner__copy {
1380
+ flex: 0 1 auto;
816
1381
  min-width: 0;
817
- text-align: right;
818
- overflow-wrap: anywhere;
819
1382
  }
820
1383
 
821
- .viewer-ci__link {
822
- display: inline-flex;
823
- margin-top: 10px;
824
- color: var(--vscode-textLink-foreground, #4ea1ff);
825
- font-size: 12px;
1384
+ .viewer-lan-banner__copy-short {
1385
+ display: none;
826
1386
  }
827
1387
 
828
- .viewer-ci__state,
829
- .viewer-ci__empty {
830
- color: var(--vscode-descriptionForeground, #9da5b4);
1388
+ .viewer-lan-banner__url {
1389
+ font-family: var(--vscode-editor-font-family, monospace);
1390
+ font-weight: 500;
1391
+ font-size: 11px;
1392
+ background: rgb(0 0 0 / 25%);
1393
+ color: #ffffff;
1394
+ padding: 2px 8px;
1395
+ border-radius: 3px;
1396
+ overflow: hidden;
1397
+ text-overflow: ellipsis;
1398
+ white-space: nowrap;
1399
+ max-width: 40%;
1400
+ }
1401
+
1402
+ .viewer-lan-banner__copy-button {
1403
+ margin-left: auto;
1404
+ }
1405
+
1406
+ .viewer-workspace__image {
1407
+ max-width: 100%;
1408
+ max-height: min(70vh, 760px);
1409
+ object-fit: contain;
1410
+ border: 1px solid var(--vscode-panel-border, #333333);
1411
+ border-radius: 6px;
1412
+ background: var(--vscode-textCodeBlock-background, #111111);
831
1413
  }
832
1414
 
833
1415
  .viewer-cdx__stack {
@@ -1095,6 +1677,117 @@
1095
1677
  margin-top: 8px;
1096
1678
  }
1097
1679
 
1680
+ .viewer-cdx__controls {
1681
+ display: flex;
1682
+ justify-content: flex-start;
1683
+ gap: 6px;
1684
+ margin: 8px 0 12px;
1685
+ }
1686
+
1687
+ .viewer-cdx__menu {
1688
+ position: relative;
1689
+ }
1690
+
1691
+ .viewer-cdx__menu > summary {
1692
+ list-style: none;
1693
+ }
1694
+
1695
+ .viewer-cdx__menu > summary::-webkit-details-marker {
1696
+ display: none;
1697
+ }
1698
+
1699
+ .viewer-cdx__icon-button {
1700
+ min-width: 30px;
1701
+ height: 30px;
1702
+ display: inline-flex;
1703
+ align-items: center;
1704
+ justify-content: center;
1705
+ gap: 4px;
1706
+ border: 1px solid var(--vscode-panel-border, #333333);
1707
+ border-radius: 6px;
1708
+ box-sizing: border-box;
1709
+ background: var(--vscode-button-secondaryBackground, transparent);
1710
+ color: var(--vscode-button-secondaryForeground, var(--vscode-foreground, #d4d4d4));
1711
+ cursor: pointer;
1712
+ padding: 0 8px;
1713
+ white-space: nowrap;
1714
+ }
1715
+
1716
+ .viewer-cdx__icon-button:hover {
1717
+ border-color: color-mix(in srgb, var(--vscode-textLink-foreground, #4ea1ff) 45%, var(--vscode-panel-border, #333333));
1718
+ color: var(--vscode-textLink-foreground, #4ea1ff);
1719
+ }
1720
+
1721
+ .viewer-cdx__icon-button svg {
1722
+ width: 16px;
1723
+ height: 16px;
1724
+ display: block;
1725
+ }
1726
+
1727
+ .viewer-cdx__icon-count {
1728
+ display: inline-block;
1729
+ min-width: 18px;
1730
+ font-size: 10px;
1731
+ font-weight: 700;
1732
+ text-align: center;
1733
+ }
1734
+
1735
+ .viewer-cdx__menu-panel {
1736
+ position: absolute;
1737
+ z-index: 25;
1738
+ top: calc(100% + 6px);
1739
+ left: 0;
1740
+ min-width: 170px;
1741
+ max-height: min(340px, calc(100vh - 150px));
1742
+ overflow: auto;
1743
+ display: grid;
1744
+ gap: 2px;
1745
+ padding: 6px;
1746
+ border: 1px solid var(--vscode-panel-border, #333333);
1747
+ border-radius: 6px;
1748
+ background: var(--vscode-dropdown-background, var(--vscode-editorWidget-background, #202020));
1749
+ box-shadow: 0 12px 28px rgb(0 0 0 / 28%);
1750
+ }
1751
+
1752
+ .viewer-cdx__menu-check {
1753
+ display: flex;
1754
+ align-items: center;
1755
+ gap: 7px;
1756
+ min-width: 0;
1757
+ padding: 5px 6px;
1758
+ border-radius: 4px;
1759
+ color: var(--vscode-foreground, #d4d4d4);
1760
+ font-size: 12px;
1761
+ cursor: pointer;
1762
+ }
1763
+
1764
+ .viewer-cdx__menu-check:hover,
1765
+ .viewer-cdx__menu-action:hover {
1766
+ background: var(--vscode-list-hoverBackground, rgb(255 255 255 / 8%));
1767
+ }
1768
+
1769
+ .viewer-cdx__menu-check input {
1770
+ flex: 0 0 auto;
1771
+ }
1772
+
1773
+ .viewer-cdx__menu-check span {
1774
+ overflow: hidden;
1775
+ text-overflow: ellipsis;
1776
+ white-space: nowrap;
1777
+ }
1778
+
1779
+ .viewer-cdx__menu-action {
1780
+ border: 0;
1781
+ border-radius: 4px;
1782
+ padding: 6px;
1783
+ background: transparent;
1784
+ color: var(--vscode-textLink-foreground, #4ea1ff);
1785
+ font: inherit;
1786
+ font-size: 12px;
1787
+ text-align: left;
1788
+ cursor: pointer;
1789
+ }
1790
+
1098
1791
  .viewer-cdx__table-wrap {
1099
1792
  min-width: 0;
1100
1793
  overflow-x: auto;
@@ -1309,6 +2002,10 @@
1309
2002
  .viewer-cdx__workspace {
1310
2003
  grid-template-columns: 1fr;
1311
2004
  }
2005
+
2006
+ .viewer-workspace {
2007
+ grid-template-columns: 1fr;
2008
+ }
1312
2009
  }
1313
2010
 
1314
2011
  .viewer-git__section h2 {
@@ -1949,9 +2646,10 @@
1949
2646
  }
1950
2647
 
1951
2648
  .viewer-refresh-menu__panel {
1952
- left: 0;
1953
- right: auto;
1954
- min-width: min(260px, 100%);
2649
+ right: 0;
2650
+ left: auto;
2651
+ min-width: 260px;
2652
+ max-width: calc(100vw - 16px);
1955
2653
  }
1956
2654
 
1957
2655
  .viewer-document {
@@ -1981,3 +2679,173 @@
1981
2679
  grid-template-columns: 1fr;
1982
2680
  }
1983
2681
  }
2682
+
2683
+ /* ---------------------------------------------------------------------------
2684
+ * Responsive viewer conventions (req_246 / task_221).
2685
+ *
2686
+ * Desktop: default rules above.
2687
+ * Tablet (=600): collapse multi-column grids and soften min-width floors so
2688
+ * any iPad-portrait or split-screen layout still works.
2689
+ * Phone (=420): shrink chrome (topbar, toolbar, banner, filter panel) and
2690
+ * let monospace blocks (diffs, code preview) wrap without
2691
+ * triggering a viewport-level horizontal scroll.
2692
+ *
2693
+ * Items 2-4 add their rules in clearly-labelled @media blocks below; new
2694
+ * responsive tweaks should land in the matching block instead of creating
2695
+ * one-off breakpoints (the historical 560/700/860/980 queries above stay so
2696
+ * existing layouts do not regress).
2697
+ * --------------------------------------------------------------------------- */
2698
+
2699
+ /* req_246 item_426 — Git screen fixes at small breakpoints. */
2700
+ @media (max-width: 600px) {
2701
+ .viewer-git__workspace,
2702
+ .viewer-git__workspace.has-diff-detail {
2703
+ grid-template-columns: 1fr;
2704
+ }
2705
+ }
2706
+
2707
+ /* req_246 item_428 — Phone (=420px) chrome adjustments. Compress the
2708
+ * topbar (wrap actions to a second row, shrink padding), let the filter
2709
+ * panel stack, give the floating document inset more screen, tighten the
2710
+ * update + LAN banners, and shrink the buttons enough to fit a 360px
2711
+ * viewport without breaking primary affordances.
2712
+ */
2713
+ @media (max-width: 420px) {
2714
+ .viewer-topbar {
2715
+ flex-wrap: wrap;
2716
+ gap: 8px;
2717
+ padding: 8px 10px;
2718
+ }
2719
+
2720
+ .viewer-topbar__actions {
2721
+ flex-wrap: wrap;
2722
+ gap: 4px;
2723
+ width: 100%;
2724
+ justify-content: flex-start;
2725
+ }
2726
+
2727
+ .viewer-topbar__actions button {
2728
+ padding: 4px 8px;
2729
+ font-size: 11px;
2730
+ }
2731
+
2732
+ .viewer-topbar__identity {
2733
+ flex-wrap: wrap;
2734
+ }
2735
+
2736
+ .viewer-topbar__meta {
2737
+ width: 100%;
2738
+ font-size: 11px;
2739
+ }
2740
+
2741
+ .viewer-filter-panel {
2742
+ gap: 8px;
2743
+ }
2744
+
2745
+ .viewer-document {
2746
+ inset: 56px 6px 6px;
2747
+ border-radius: 6px;
2748
+ }
2749
+
2750
+ .viewer-update {
2751
+ flex-wrap: wrap;
2752
+ padding: 6px 10px;
2753
+ font-size: 11px;
2754
+ }
2755
+ }
2756
+
2757
+ /* LAN banner: compact form on every non-desktop viewport. The full message
2758
+ * + URL chip + Copy button row needs at least a desktop-width line to read
2759
+ * cleanly; below that we drop the URL chip (the Copy button covers it) and
2760
+ * switch to a short message variant. */
2761
+ @media (max-width: 720px) {
2762
+ .viewer-lan-banner {
2763
+ flex-wrap: wrap;
2764
+ align-items: center;
2765
+ gap: 6px;
2766
+ padding: 4px 8px;
2767
+ font-size: 10px;
2768
+ font-weight: 600;
2769
+ line-height: 1.25;
2770
+ }
2771
+
2772
+ .viewer-lan-banner__icon {
2773
+ width: 14px;
2774
+ height: 14px;
2775
+ font-size: 10px;
2776
+ }
2777
+
2778
+ .viewer-lan-banner__copy {
2779
+ flex: 1 1 0;
2780
+ min-width: 0;
2781
+ }
2782
+
2783
+ .viewer-lan-banner__url {
2784
+ display: none !important;
2785
+ }
2786
+
2787
+ .viewer-lan-banner__copy-long {
2788
+ display: none;
2789
+ }
2790
+
2791
+ .viewer-lan-banner__copy-short {
2792
+ display: inline;
2793
+ }
2794
+
2795
+ .viewer-lan-banner__copy-button {
2796
+ margin-left: auto;
2797
+ padding: 2px 8px;
2798
+ font-size: 10px;
2799
+ line-height: 1.2;
2800
+ }
2801
+ }
2802
+
2803
+ /* req_246 item_427 — Tablet (=600px) grid collapses for board, CDX, CI,
2804
+ * Workspace, and insights screens. Also soften the hard min-width floors so
2805
+ * an iPad-portrait or split-screen layout no longer triggers a horizontal
2806
+ * scroll on the body.
2807
+ */
2808
+ @media (max-width: 600px) {
2809
+ .viewer-filter-panel {
2810
+ grid-template-columns: 1fr;
2811
+ }
2812
+
2813
+ .viewer-cdx__workspace,
2814
+ .viewer-cdx__workspace--missions,
2815
+ .viewer-ci__workspace,
2816
+ .viewer-workspace {
2817
+ grid-template-columns: 1fr;
2818
+ }
2819
+
2820
+ .viewer-git__summary,
2821
+ .viewer-cdx__summary,
2822
+ .viewer-ci__summary,
2823
+ .viewer-insights__summary,
2824
+ .viewer-health__summary {
2825
+ grid-template-columns: 1fr;
2826
+ }
2827
+ }
2828
+
2829
+
2830
+ @media (max-width: 420px) {
2831
+ .viewer-git__files li {
2832
+ flex-wrap: wrap;
2833
+ row-gap: 4px;
2834
+ }
2835
+
2836
+ .viewer-git-badges,
2837
+ .viewer-git-badge {
2838
+ flex-wrap: wrap;
2839
+ }
2840
+
2841
+ .viewer-git__diff pre {
2842
+ white-space: pre-wrap;
2843
+ overflow-wrap: anywhere;
2844
+ font-size: 11px;
2845
+ }
2846
+
2847
+ .viewer-git__diff-meta {
2848
+ flex-wrap: wrap;
2849
+ gap: 4px;
2850
+ }
2851
+ }