@jkwd/inbase 0.1.21 → 0.1.23

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 (58) hide show
  1. package/README.md +13 -7
  2. package/apps/explorer/package.json +1 -0
  3. package/apps/explorer/scripts/explain-store.d.ts +135 -0
  4. package/apps/explorer/scripts/explain-store.mjs +666 -0
  5. package/apps/explorer/scripts/patch-lib.mjs +4 -0
  6. package/apps/explorer/scripts/scan-target.mjs +22 -5
  7. package/apps/explorer/scripts/session-store.d.ts +86 -11
  8. package/apps/explorer/scripts/session-store.mjs +371 -58
  9. package/apps/explorer/scripts/target-config.d.ts +38 -3
  10. package/apps/explorer/scripts/target-config.mjs +147 -3
  11. package/apps/explorer/src/App.tsx +1073 -158
  12. package/apps/explorer/src/agentIntent.ts +61 -7
  13. package/apps/explorer/src/codebase.ts +1 -1
  14. package/apps/explorer/src/devTargets.ts +66 -0
  15. package/apps/explorer/src/explain.ts +312 -0
  16. package/apps/explorer/src/index.css +874 -222
  17. package/apps/explorer/src/layout.ts +55 -0
  18. package/apps/explorer/src/scene/DistantFileBlocks.tsx +4 -2
  19. package/apps/explorer/src/scene/FileBlock.tsx +95 -72
  20. package/apps/explorer/src/scene/FolderArea.tsx +55 -32
  21. package/apps/explorer/src/scene/MapView.tsx +506 -33
  22. package/apps/explorer/src/scene/RelationLines.tsx +7 -0
  23. package/apps/explorer/src/scene/World.tsx +146 -32
  24. package/apps/explorer/src/speech.ts +228 -0
  25. package/apps/explorer/src/theme.ts +29 -0
  26. package/apps/explorer/src/types.ts +98 -8
  27. package/apps/explorer/src/ui/CanvasErrorBoundary.tsx +1 -1
  28. package/apps/explorer/src/ui/ExplainAskCard.tsx +142 -0
  29. package/apps/explorer/src/ui/ExplainHud.tsx +524 -0
  30. package/apps/explorer/src/ui/ExplainInfoPanel.tsx +135 -0
  31. package/apps/explorer/src/ui/ExplainPointer.tsx +73 -0
  32. package/apps/explorer/src/ui/EyeIcon.tsx +38 -1
  33. package/apps/explorer/src/ui/HUD.tsx +1067 -795
  34. package/apps/explorer/src/ui/NameInput.tsx +114 -5
  35. package/apps/explorer/src/userContext.ts +0 -11
  36. package/apps/explorer/src/userCreated.ts +54 -1
  37. package/apps/explorer/vite.config.ts +173 -26
  38. package/bin/inbase.mjs +11 -2
  39. package/bin/project.mjs +6 -4
  40. package/bin/session.mjs +287 -38
  41. package/package.json +4 -1
  42. package/skill/commands/amber.md +23 -0
  43. package/skill/commands/blue.md +13 -0
  44. package/skill/commands/coral.md +23 -0
  45. package/skill/commands/explain.md +77 -0
  46. package/skill/commands/green.md +23 -0
  47. package/skill/commands/inbase.md +7 -5
  48. package/skill/commands/lime.md +23 -0
  49. package/skill/commands/orange.md +23 -0
  50. package/skill/commands/purple.md +23 -0
  51. package/skill/commands/red.md +23 -0
  52. package/skill/commands/skipinbase.md +1 -1
  53. package/skill/commands/violet.md +23 -0
  54. package/skill/commands/yellow.md +23 -0
  55. package/skill/inbase/SKILL.md +124 -76
  56. package/apps/explorer/src/scene/BlockPlacer.tsx +0 -78
  57. package/apps/explorer/src/scene/IslandPlacer.tsx +0 -31
  58. package/apps/explorer/src/scene/SelectionThumbnail.tsx +0 -1069
@@ -4,6 +4,7 @@
4
4
  --vc-editor: #1e2127;
5
5
  --vc-surface: #272c36;
6
6
  --vc-border: #272c36;
7
+ --explain-sidebar-width: min(380px, 42vw);
7
8
  }
8
9
 
9
10
  html,
@@ -25,6 +26,10 @@ body,
25
26
  background: #000;
26
27
  }
27
28
 
29
+ .stage-explain {
30
+ left: var(--explain-sidebar-width);
31
+ }
32
+
28
33
  * {
29
34
  box-sizing: border-box;
30
35
  }
@@ -166,6 +171,43 @@ button {
166
171
  flex-wrap: wrap;
167
172
  }
168
173
 
174
+ .hud-top-end {
175
+ display: flex;
176
+ align-items: center;
177
+ gap: 12px;
178
+ flex-wrap: wrap;
179
+ justify-content: flex-end;
180
+ margin-left: auto;
181
+ pointer-events: auto;
182
+ }
183
+
184
+ .hud-target-select {
185
+ display: flex;
186
+ align-items: center;
187
+ gap: 8px;
188
+ color: #b7c0ce;
189
+ font-size: 12px;
190
+ }
191
+
192
+ .hud-target-select-control {
193
+ min-width: 10.5rem;
194
+ padding-right: 28px;
195
+ appearance: none;
196
+ color-scheme: dark;
197
+ background-image: linear-gradient(45deg, transparent 50%, #b7c0ce 50%),
198
+ linear-gradient(135deg, #b7c0ce 50%, transparent 50%);
199
+ background-position:
200
+ calc(100% - 16px) calc(50% - 2px),
201
+ calc(100% - 11px) calc(50% - 2px);
202
+ background-size: 5px 5px;
203
+ background-repeat: no-repeat;
204
+ }
205
+
206
+ .hud-target-select-control:disabled {
207
+ opacity: 0.55;
208
+ cursor: default;
209
+ }
210
+
169
211
  .hud-mode {
170
212
  display: flex;
171
213
  gap: 8px;
@@ -198,6 +240,48 @@ button {
198
240
  gap: 8px;
199
241
  flex: none;
200
242
  flex-wrap: wrap;
243
+ align-items: center;
244
+ }
245
+
246
+ .hud-bottom-actions:empty {
247
+ display: none;
248
+ }
249
+
250
+ .hud-blueprint-select {
251
+ display: flex;
252
+ align-items: center;
253
+ gap: 4px;
254
+ margin-right: 4px;
255
+ }
256
+
257
+ .hud-blueprint-option {
258
+ display: inline-flex;
259
+ align-items: center;
260
+ gap: 6px;
261
+ padding: 6px 8px;
262
+ }
263
+
264
+ .hud-blueprint-option-swatch {
265
+ padding: 6px;
266
+ }
267
+
268
+ .hud-blueprint-option.hud-button[data-active='true'] {
269
+ border-color: var(--session-color, #5d9ec4);
270
+ }
271
+
272
+ .hud-blueprint-swatch {
273
+ width: 12px;
274
+ height: 12px;
275
+ }
276
+
277
+ .hud-blueprint-select-label {
278
+ font-size: 11px;
279
+ letter-spacing: 0.02em;
280
+ color: #9aa3b2;
281
+ }
282
+
283
+ .hud-blueprint-option[data-active='true'] .hud-blueprint-select-label {
284
+ color: #e7ebf2;
201
285
  }
202
286
 
203
287
  .hud-chip,
@@ -224,7 +308,10 @@ button {
224
308
  position: absolute;
225
309
  top: 0;
226
310
  left: 0;
227
- display: grid;
311
+ display: flex;
312
+ align-items: center;
313
+ justify-content: center;
314
+ gap: 6px;
228
315
  min-width: max-content;
229
316
  padding: 4px 7px;
230
317
  color: #f1f5fa;
@@ -245,9 +332,13 @@ button {
245
332
  }
246
333
 
247
334
  .map-folder-label-added {
248
- color: #d7f3ff;
249
- border-color: #7ec8e8;
250
- background: rgba(18, 48, 62, 0.92);
335
+ color: var(--blueprint-label, #d7f3ff);
336
+ border-color: var(--blueprint-color, #7ec8e8);
337
+ background: color-mix(
338
+ in srgb,
339
+ var(--blueprint-color, #7ec8e8) 20%,
340
+ rgba(18, 20, 26, 0.92)
341
+ );
251
342
  }
252
343
 
253
344
  .map-folder-label-add {
@@ -274,6 +365,80 @@ button {
274
365
  background: rgba(25, 28, 34, 0.94);
275
366
  }
276
367
 
368
+ .map-folder-label-pointed {
369
+ border-color: var(--session-color, #9ad8ff);
370
+ color: #d7eef8;
371
+ }
372
+
373
+ .map-folder-label-pointed.map-folder-label-selected {
374
+ border-color: #c026ff;
375
+ }
376
+
377
+ .map-folder-eye {
378
+ display: grid;
379
+ place-items: center;
380
+ flex: none;
381
+ line-height: 0;
382
+ }
383
+
384
+ .map-folder-eye svg {
385
+ display: block;
386
+ }
387
+
388
+ .map-file-label-layer {
389
+ position: absolute;
390
+ inset: 0;
391
+ overflow: hidden;
392
+ pointer-events: none;
393
+ z-index: 70;
394
+ }
395
+
396
+ .map-file-label {
397
+ position: absolute;
398
+ top: 0;
399
+ left: 0;
400
+ max-width: 220px;
401
+ padding: 1px 5px;
402
+ color: #e8edf4;
403
+ background: rgba(12, 14, 18, 0.78);
404
+ border-radius: 2px;
405
+ text-align: left;
406
+ white-space: nowrap;
407
+ overflow: hidden;
408
+ text-overflow: ellipsis;
409
+ visibility: hidden;
410
+ will-change: transform;
411
+ }
412
+
413
+ .map-file-name {
414
+ font-size: 10px;
415
+ font-weight: 600;
416
+ line-height: 1.25;
417
+ letter-spacing: 0.01em;
418
+ }
419
+
420
+ .map-file-label-selected {
421
+ color: #f3e8ff;
422
+ background: rgba(25, 28, 34, 0.9);
423
+ box-shadow: inset 0 0 0 1px #c026ff;
424
+ }
425
+
426
+ .map-file-label-pointed,
427
+ .map-file-label-focused {
428
+ color: #d7eef8;
429
+ box-shadow: inset 0 0 0 1px var(--session-color, #9ad8ff);
430
+ }
431
+
432
+ .map-file-label-pointed.map-file-label-selected,
433
+ .map-file-label-focused.map-file-label-selected {
434
+ box-shadow: inset 0 0 0 1px #c026ff;
435
+ }
436
+
437
+ .map-folder-label-dimmed,
438
+ .map-file-label-dimmed {
439
+ opacity: 0.5;
440
+ }
441
+
277
442
  .map-change-mark {
278
443
  pointer-events: none;
279
444
  user-select: none;
@@ -509,6 +674,49 @@ button {
509
674
  transform: translateY(0);
510
675
  }
511
676
 
677
+ .hud-icon-button[aria-expanded='true'] .hud-tooltip {
678
+ opacity: 0;
679
+ }
680
+
681
+ .hud-actions-menu {
682
+ position: relative;
683
+ flex: none;
684
+ }
685
+
686
+ .hud-actions-menu-list {
687
+ position: fixed;
688
+ z-index: 100;
689
+ display: flex;
690
+ min-width: 168px;
691
+ flex-direction: column;
692
+ gap: 2px;
693
+ padding: 4px;
694
+ color: #e7ebf2;
695
+ background: rgba(25, 28, 34, 0.96);
696
+ border: 1px solid var(--vc-border);
697
+ pointer-events: auto;
698
+ }
699
+
700
+ .hud-actions-menu-list button {
701
+ cursor: pointer;
702
+ padding: 8px 10px;
703
+ color: inherit;
704
+ text-align: left;
705
+ background: transparent;
706
+ border: 0;
707
+ }
708
+
709
+ .hud-actions-menu-list button:hover,
710
+ .hud-actions-menu-list button:focus-visible {
711
+ background: var(--vc-surface);
712
+ outline: none;
713
+ }
714
+
715
+ .hud-actions-menu-list button:disabled {
716
+ opacity: 0.55;
717
+ cursor: default;
718
+ }
719
+
512
720
  .hud-panel {
513
721
  position: absolute;
514
722
  top: 68px;
@@ -587,33 +795,33 @@ button {
587
795
  display: inline-flex;
588
796
  align-items: center;
589
797
  justify-content: center;
590
- gap: 7px;
591
798
  flex: 1 1 0;
592
- min-width: 0;
593
- overflow: hidden;
594
- white-space: nowrap;
595
- font-size: 13px;
799
+ min-width: 36px;
800
+ height: 34px;
801
+ padding: 6px 8px;
596
802
  }
597
803
 
598
- .hud-session-tab-label {
599
- min-width: 0;
600
- overflow: hidden;
601
- text-overflow: ellipsis;
804
+ .hud-session-swatch {
805
+ width: 14px;
806
+ height: 14px;
807
+ flex: none;
808
+ border-radius: 3px;
809
+ background: var(--session-color, #6b7280);
810
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.35);
602
811
  }
603
812
 
604
- .hud-session-tab[data-attached='true'] {
605
- border-color: #6ee7b7;
606
- color: #b6f3d6;
813
+ .hud-session-tab.hud-button[data-active='true'] {
814
+ border-color: var(--session-color, #5d9ec4);
607
815
  }
608
816
 
609
- .hud-session-tab[data-attached='true'] .hud-attach-dot {
610
- background: #6ee7b7;
611
- box-shadow: 0 0 8px #6ee7b7;
817
+ .hud-session-tab[data-attached='true'] {
818
+ border-color: var(--session-color, #6ee7b7);
612
819
  }
613
820
 
614
- .hud-session-tab[data-attached='false'] .hud-attach-dot {
615
- background: #6b7280;
616
- box-shadow: none;
821
+ .hud-session-tab[data-attached='true'] .hud-session-swatch {
822
+ box-shadow:
823
+ 0 0 8px var(--session-color, #6ee7b7),
824
+ inset 0 0 0 1px rgba(0, 0, 0, 0.25);
617
825
  }
618
826
 
619
827
  .hud-left-stack .hud-panel-planned {
@@ -656,57 +864,6 @@ button {
656
864
  overscroll-behavior: contain;
657
865
  }
658
866
 
659
- .hud-right-stack .hud-thumbnail {
660
- position: relative;
661
- right: auto;
662
- bottom: auto;
663
- left: auto;
664
- z-index: auto;
665
- width: 100%;
666
- margin-top: auto;
667
- flex: none;
668
- }
669
-
670
- .hud-thumbnail {
671
- position: fixed;
672
- display: flex;
673
- flex-direction: column;
674
- right: 20px;
675
- bottom: 72px;
676
- left: auto;
677
- z-index: 30;
678
- width: min(320px, calc(100% - 40px));
679
- pointer-events: auto;
680
- overflow: hidden;
681
- background: rgba(25, 28, 34, 0.96);
682
- border: 1px solid #5d9ec4;
683
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
684
- }
685
-
686
- .hud-right-stack .hud-thumbnail[data-maximized='true'],
687
- .hud-thumbnail[data-maximized='true'] {
688
- position: fixed;
689
- top: 68px;
690
- right: 20px;
691
- bottom: 72px;
692
- left: 20px;
693
- z-index: 40;
694
- width: auto;
695
- max-width: none;
696
- margin-top: 0;
697
- }
698
-
699
- .hud-thumbnail-bar {
700
- display: flex;
701
- align-items: center;
702
- justify-content: space-between;
703
- gap: 8px;
704
- padding: 4px 6px 4px 12px;
705
- color: #e7ebf2;
706
- font-size: 12px;
707
- letter-spacing: 0.02em;
708
- }
709
-
710
867
  .hud-panel-chrome {
711
868
  display: flex;
712
869
  align-items: center;
@@ -727,6 +884,47 @@ button {
727
884
  min-width: 0;
728
885
  }
729
886
 
887
+ .hud-explain-button {
888
+ display: grid;
889
+ place-items: center;
890
+ width: 22px;
891
+ height: 22px;
892
+ padding: 0;
893
+ flex: none;
894
+ color: #6d7582;
895
+ background: transparent;
896
+ border: 1px solid transparent;
897
+ font-size: 12px;
898
+ font-weight: 500;
899
+ line-height: 1;
900
+ cursor: pointer;
901
+ }
902
+
903
+ .hud-explain-button:hover,
904
+ .hud-explain-button:focus-visible {
905
+ color: #b7c0ce;
906
+ border-color: #3a4250;
907
+ }
908
+
909
+ .hud-explain-inline {
910
+ width: 20px;
911
+ height: 20px;
912
+ font-size: 11px;
913
+ }
914
+
915
+ .hud-file-actions {
916
+ display: flex;
917
+ align-items: center;
918
+ gap: 6px;
919
+ margin: 10px 0 0;
920
+ }
921
+
922
+ .hud-file-actions .hud-inspect {
923
+ margin: 0;
924
+ width: auto;
925
+ flex: 1 1 auto;
926
+ }
927
+
730
928
  .hud-attach-badge {
731
929
  display: inline-flex;
732
930
  align-items: center;
@@ -789,6 +987,9 @@ button {
789
987
  }
790
988
 
791
989
  .hud-panel-chrome-title {
990
+ display: flex;
991
+ align-items: center;
992
+ gap: 8px;
792
993
  min-width: 0;
793
994
  flex: 1 1 auto;
794
995
  overflow: hidden;
@@ -797,10 +998,15 @@ button {
797
998
  font-weight: 600;
798
999
  letter-spacing: 0.08em;
799
1000
  text-transform: uppercase;
800
- text-overflow: ellipsis;
801
1001
  white-space: nowrap;
802
1002
  }
803
1003
 
1004
+ .hud-panel-chrome-title-text {
1005
+ min-width: 0;
1006
+ overflow: hidden;
1007
+ text-overflow: ellipsis;
1008
+ }
1009
+
804
1010
  .hud-panel-planned .hud-panel-chrome-title {
805
1011
  color: #e7ebf2;
806
1012
  font-size: 14px;
@@ -836,6 +1042,11 @@ button {
836
1042
  line-height: 1.4;
837
1043
  }
838
1044
 
1045
+ .hud-mode-hint p {
1046
+ margin: 0;
1047
+ color: inherit;
1048
+ }
1049
+
839
1050
  .hud-switch {
840
1051
  position: relative;
841
1052
  flex: none;
@@ -872,12 +1083,40 @@ button {
872
1083
  }
873
1084
 
874
1085
  .hud-panel-info .hud-panel-chrome-title {
1086
+ overflow: visible;
875
1087
  color: #e7ebf2;
876
1088
  font-size: 16px;
877
1089
  letter-spacing: 0.02em;
878
1090
  text-transform: none;
879
1091
  }
880
1092
 
1093
+ .hud-info-name {
1094
+ flex: 1 1 auto;
1095
+ width: 100%;
1096
+ min-width: 0;
1097
+ margin: 0;
1098
+ padding: 0 0 1px;
1099
+ border: none;
1100
+ border-bottom: 1px solid transparent;
1101
+ border-radius: 0;
1102
+ background: transparent;
1103
+ color: inherit;
1104
+ font: inherit;
1105
+ letter-spacing: inherit;
1106
+ text-overflow: ellipsis;
1107
+ outline: none;
1108
+ cursor: text;
1109
+ }
1110
+
1111
+ .hud-info-name:hover {
1112
+ border-bottom-color: rgba(255, 255, 255, 0.22);
1113
+ }
1114
+
1115
+ .hud-info-name:focus {
1116
+ border-bottom-color: #9ad8ff;
1117
+ text-overflow: clip;
1118
+ }
1119
+
881
1120
  .hud-panel-controls {
882
1121
  display: flex;
883
1122
  flex: none;
@@ -892,94 +1131,26 @@ button {
892
1131
  line-height: 1;
893
1132
  }
894
1133
 
895
- .hud-thumbnail-hide {
896
- width: 28px;
897
- height: 28px;
898
- font-size: 16px;
899
- line-height: 1;
900
- }
901
-
902
- .hud-thumbnail-stage {
903
- position: relative;
904
- width: 100%;
905
- height: 220px;
906
- min-height: 0;
907
- flex: none;
908
- background: #000;
909
- touch-action: none;
910
- user-select: none;
911
- cursor: grab;
912
- }
913
-
914
- .hud-thumbnail[data-maximized='true'] .hud-thumbnail-stage {
915
- height: auto;
916
- flex: 1 1 auto;
917
- }
918
-
919
- .hud-thumbnail-stage[data-panning='true'],
920
- .hud-thumbnail-stage[data-orbiting='true'] {
921
- cursor: grabbing;
922
- }
923
-
924
- .hud-thumbnail-stage canvas {
925
- display: block;
926
- }
927
-
928
- .hud-thumbnail-hint {
929
- position: absolute;
930
- left: 8px;
931
- bottom: 6px;
932
- z-index: 2;
933
- pointer-events: none;
934
- color: rgba(231, 235, 242, 0.55);
935
- font-size: 9px;
936
- letter-spacing: 0.02em;
937
- }
938
-
939
- .hud-thumbnail-nav {
940
- position: absolute;
941
- right: 6px;
942
- bottom: 6px;
943
- z-index: 2;
944
- display: flex;
945
- gap: 4px;
946
- }
947
-
948
- .hud-thumbnail-nav .hud-button {
1134
+ .blueprint-eye {
1135
+ display: grid;
1136
+ place-items: center;
949
1137
  width: 24px;
950
1138
  height: 24px;
951
- padding: 0;
952
- color: #e7ebf2;
953
- font-size: 14px;
954
- line-height: 1;
955
- background: rgba(18, 20, 24, 0.88);
956
- }
957
-
958
- .thumbnail-block-label,
959
- .thumbnail-folder-label {
960
- pointer-events: none;
961
- user-select: none;
962
- overflow: hidden;
963
- max-width: 72px;
964
- color: #ffffff;
965
- font-weight: 600;
966
- letter-spacing: 0.01em;
967
- line-height: 1.15;
968
- text-overflow: ellipsis;
969
- white-space: nowrap;
970
- text-shadow:
971
- 0 0 3px #000,
972
- 0 1px 2px #000,
973
- 0 0 8px rgba(0, 0, 0, 0.85);
1139
+ color: #f4f7fb;
1140
+ background: #000;
1141
+ border: 0;
1142
+ border-radius: 50%;
1143
+ line-height: 0;
974
1144
  }
975
1145
 
976
- .thumbnail-block-label {
977
- font-size: 9px;
1146
+ .blueprint-eye-row {
1147
+ display: flex;
1148
+ align-items: center;
1149
+ gap: 2px;
978
1150
  }
979
1151
 
980
- .thumbnail-folder-label {
981
- font-size: 10px;
982
- max-width: 96px;
1152
+ .blueprint-eye svg {
1153
+ display: block;
983
1154
  }
984
1155
 
985
1156
  .hud-panel-planned {
@@ -1015,6 +1186,33 @@ button {
1015
1186
  line-height: 1.4;
1016
1187
  }
1017
1188
 
1189
+ .hud-panel-planned .hud-step-label {
1190
+ margin: 0;
1191
+ color: #e7ebf2;
1192
+ font-weight: 600;
1193
+ }
1194
+
1195
+ .hud-panel-planned .hud-place-hint {
1196
+ margin: 0 0 8px;
1197
+ color: #8b95a5;
1198
+ font-size: 11px;
1199
+ line-height: 1.4;
1200
+ }
1201
+
1202
+ .hud-session-actions {
1203
+ display: grid;
1204
+ gap: 8px;
1205
+ margin-top: 16px;
1206
+ }
1207
+
1208
+ .hud-session-actions .hud-decide {
1209
+ margin-top: 0;
1210
+ }
1211
+
1212
+ .hud-session-actions .hud-place-hint {
1213
+ margin: 0;
1214
+ }
1215
+
1018
1216
  .hud-steps {
1019
1217
  margin: 10px 0 0;
1020
1218
  padding: 0;
@@ -1076,6 +1274,13 @@ button {
1076
1274
  text-decoration: none;
1077
1275
  }
1078
1276
 
1277
+ .hud-step-actions {
1278
+ display: flex;
1279
+ flex-wrap: wrap;
1280
+ flex: 1 1 100%;
1281
+ gap: 6px;
1282
+ }
1283
+
1079
1284
  .hud-panel-planned .hud-section-title {
1080
1285
  margin-top: 0;
1081
1286
  color: #9ad8ff;
@@ -1138,75 +1343,11 @@ button {
1138
1343
  line-height: 1.45;
1139
1344
  }
1140
1345
 
1141
- .hud-setup-section .hud-instruction {
1142
- margin-top: 0;
1143
- }
1144
-
1145
- .hud-context {
1146
- display: grid;
1147
- gap: 8px;
1346
+ .hud-setup-section p + p,
1347
+ .hud-mode-hint p + p {
1148
1348
  margin-top: 8px;
1149
1349
  }
1150
1350
 
1151
- .hud-context-drop {
1152
- width: 100%;
1153
- min-height: 52px;
1154
- padding: 10px 8px;
1155
- color: #8b95a5;
1156
- background: var(--vc-surface);
1157
- border: 1px dashed #3a4250;
1158
- cursor: pointer;
1159
- font: 12px/1.4 Inter, ui-sans-serif, system-ui, sans-serif;
1160
- text-align: center;
1161
- }
1162
-
1163
- .hud-context-drop:hover,
1164
- .hud-context-drop:focus-visible,
1165
- .hud-context-drop[data-over='true'] {
1166
- color: #e7ebf2;
1167
- border-color: #d6b56a;
1168
- outline: none;
1169
- }
1170
-
1171
- .hud-context-drop[data-busy='true'],
1172
- .hud-context-drop:disabled {
1173
- cursor: wait;
1174
- opacity: 0.7;
1175
- }
1176
-
1177
- .hud-context-list {
1178
- display: grid;
1179
- gap: 4px;
1180
- margin: 0;
1181
- padding: 0;
1182
- list-style: none;
1183
- }
1184
-
1185
- .hud-context-list li {
1186
- display: grid;
1187
- grid-template-columns: minmax(0, 1fr) auto auto;
1188
- align-items: center;
1189
- gap: 6px;
1190
- color: #e7ebf2;
1191
- font-size: 11px;
1192
- }
1193
-
1194
- .hud-context-name {
1195
- overflow: hidden;
1196
- text-overflow: ellipsis;
1197
- white-space: nowrap;
1198
- }
1199
-
1200
- .hud-context-size {
1201
- color: #8b95a5;
1202
- }
1203
-
1204
- .hud-context-error {
1205
- margin: 0;
1206
- color: #ff8a9b;
1207
- font-size: 11px;
1208
- }
1209
-
1210
1351
  .hud-instruction textarea {
1211
1352
  width: 100%;
1212
1353
  resize: vertical;
@@ -1232,6 +1373,10 @@ button {
1232
1373
  font-size: 12px;
1233
1374
  }
1234
1375
 
1376
+ .hud-place-hint + .hud-live {
1377
+ margin-top: 0;
1378
+ }
1379
+
1235
1380
  .hud-live {
1236
1381
  display: flex;
1237
1382
  align-items: center;
@@ -1416,6 +1561,90 @@ button {
1416
1561
  width: 100%;
1417
1562
  }
1418
1563
 
1564
+ .hud-point-menu {
1565
+ position: relative;
1566
+ margin: 10px 0 0;
1567
+ width: 100%;
1568
+ }
1569
+
1570
+ .hud-point-menu > .hud-inspect {
1571
+ margin: 0;
1572
+ }
1573
+
1574
+ .hud-point-menu-compact {
1575
+ margin: 0;
1576
+ width: auto;
1577
+ }
1578
+
1579
+ .hud-point-dropdown {
1580
+ position: fixed;
1581
+ z-index: 120;
1582
+ display: flex;
1583
+ flex-direction: column;
1584
+ gap: 2px;
1585
+ padding: 4px;
1586
+ overflow-x: hidden;
1587
+ overflow-y: auto;
1588
+ color: #e7ebf2;
1589
+ background: var(--vc-chrome);
1590
+ border: 1px solid var(--vc-border);
1591
+ visibility: hidden;
1592
+ pointer-events: auto;
1593
+ }
1594
+
1595
+ .hud-point-dropdown button {
1596
+ display: flex;
1597
+ align-items: center;
1598
+ gap: 8px;
1599
+ width: 100%;
1600
+ padding: 8px 10px;
1601
+ color: inherit;
1602
+ text-align: left;
1603
+ background: transparent;
1604
+ border: 1px solid transparent;
1605
+ cursor: pointer;
1606
+ }
1607
+
1608
+ .hud-point-dropdown button:hover,
1609
+ .hud-point-dropdown button:focus-visible {
1610
+ background: var(--vc-surface);
1611
+ outline: none;
1612
+ }
1613
+
1614
+ .hud-point-dropdown-cancel {
1615
+ color: #9aa3b2;
1616
+ margin-bottom: 2px;
1617
+ box-shadow: 0 1px 0 var(--vc-border);
1618
+ }
1619
+
1620
+ .hud-point-dropdown button[data-pointed='true'] {
1621
+ border-color: var(--session-color, #5d9ec4);
1622
+ }
1623
+
1624
+ .hud-point-dropdown svg {
1625
+ display: block;
1626
+ flex: none;
1627
+ color: var(--session-color, #e7ebf2);
1628
+ }
1629
+
1630
+ .hud-point {
1631
+ display: inline-flex;
1632
+ align-items: center;
1633
+ justify-content: center;
1634
+ gap: 8px;
1635
+ }
1636
+
1637
+ .hud-point svg {
1638
+ display: block;
1639
+ flex: none;
1640
+ color: var(--session-color, currentColor);
1641
+ }
1642
+
1643
+ .hud-button[data-pointed='true'] {
1644
+ border-color: var(--session-color, #5d9ec4);
1645
+ color: var(--session-color, #d7eef8);
1646
+ }
1647
+
1419
1648
  .hud-panel ul {
1420
1649
  margin: 8px 0 0;
1421
1650
  padding-left: 18px;
@@ -1471,6 +1700,35 @@ button {
1471
1700
  flex: none;
1472
1701
  }
1473
1702
 
1703
+ .hud-item-point {
1704
+ display: inline-flex;
1705
+ align-items: center;
1706
+ justify-content: center;
1707
+ flex: none;
1708
+ padding: 2px;
1709
+ color: #b7c0ce;
1710
+ background: transparent;
1711
+ border: 1px solid transparent;
1712
+ cursor: pointer;
1713
+ line-height: 0;
1714
+ }
1715
+
1716
+ .hud-item-point:hover,
1717
+ .hud-item-point:focus-visible {
1718
+ border-color: #9ad8ff;
1719
+ color: #d7eef8;
1720
+ }
1721
+
1722
+ .hud-item-point[data-pointed='true'] {
1723
+ border-color: var(--session-color, #5d9ec4);
1724
+ color: var(--session-color, #d7eef8);
1725
+ }
1726
+
1727
+ .hud-item-point svg {
1728
+ display: block;
1729
+ color: var(--session-color, currentColor);
1730
+ }
1731
+
1474
1732
  .hud-item-note {
1475
1733
  flex: none;
1476
1734
  padding: 2px 6px;
@@ -1562,6 +1820,7 @@ button {
1562
1820
 
1563
1821
  .hud-add-row {
1564
1822
  display: flex;
1823
+ flex-wrap: wrap;
1565
1824
  gap: 6px;
1566
1825
  margin-top: 8px;
1567
1826
  }
@@ -1584,6 +1843,13 @@ button {
1584
1843
  .hud-add-row .hud-button {
1585
1844
  flex: none;
1586
1845
  padding: 5px 8px;
1846
+ white-space: nowrap;
1847
+ }
1848
+
1849
+ .hud-pick-hint {
1850
+ margin: 6px 0 0;
1851
+ color: #9ad8ff;
1852
+ font-size: 12px;
1587
1853
  }
1588
1854
 
1589
1855
  .hud-section-title {
@@ -1647,3 +1913,389 @@ button {
1647
1913
  .block-name-input:focus {
1648
1914
  border-color: #d7eef8;
1649
1915
  }
1916
+
1917
+ .hud.explain-hud {
1918
+ right: auto;
1919
+ display: flex;
1920
+ flex-direction: column;
1921
+ gap: 16px;
1922
+ width: var(--explain-sidebar-width);
1923
+ padding: 16px 16px 14px;
1924
+ background: var(--vc-chrome);
1925
+ border-right: 1px solid var(--vc-border);
1926
+ pointer-events: auto;
1927
+ overflow: visible;
1928
+ }
1929
+
1930
+ .explain-header {
1931
+ display: flex;
1932
+ align-items: flex-start;
1933
+ gap: 12px;
1934
+ flex: none;
1935
+ }
1936
+
1937
+ .explain-exit {
1938
+ display: grid;
1939
+ place-items: center;
1940
+ width: 36px;
1941
+ height: 36px;
1942
+ padding: 0;
1943
+ flex: none;
1944
+ }
1945
+
1946
+ .explain-question {
1947
+ flex: 1;
1948
+ margin: 0;
1949
+ min-width: 0;
1950
+ color: #9aa3b2;
1951
+ font-size: 12px;
1952
+ line-height: 1.4;
1953
+ }
1954
+
1955
+ .explain-body {
1956
+ margin: 0;
1957
+ color: #d5dbe6;
1958
+ font-size: 14px;
1959
+ line-height: 1.55;
1960
+ white-space: pre-wrap;
1961
+ }
1962
+
1963
+ .explain-footer {
1964
+ display: flex;
1965
+ flex-direction: column;
1966
+ gap: 10px;
1967
+ flex: none;
1968
+ }
1969
+
1970
+ .explain-tell-controls {
1971
+ display: flex;
1972
+ gap: 8px;
1973
+ }
1974
+
1975
+ .explain-tell,
1976
+ .explain-tell-again,
1977
+ .explain-auto-step {
1978
+ flex: 1;
1979
+ }
1980
+
1981
+ .explain-voice-status {
1982
+ margin: 0;
1983
+ color: #9aa3b2;
1984
+ font-size: 12px;
1985
+ line-height: 1.4;
1986
+ text-align: center;
1987
+ }
1988
+
1989
+ .explain-auto-wait {
1990
+ display: flex;
1991
+ flex-direction: column;
1992
+ gap: 6px;
1993
+ }
1994
+
1995
+ .explain-auto-wait-track {
1996
+ overflow: hidden;
1997
+ height: 4px;
1998
+ background: rgba(154, 216, 255, 0.16);
1999
+ border: 1px solid rgba(154, 216, 255, 0.28);
2000
+ }
2001
+
2002
+ .explain-auto-wait-fill {
2003
+ height: 100%;
2004
+ width: 100%;
2005
+ transform-origin: left center;
2006
+ background: #9ad8ff;
2007
+ animation-name: explain-auto-wait-shrink;
2008
+ animation-timing-function: linear;
2009
+ animation-fill-mode: forwards;
2010
+ }
2011
+
2012
+ .explain-auto-wait-label {
2013
+ margin: 0;
2014
+ color: #9ad8ff;
2015
+ font-size: 12px;
2016
+ line-height: 1.3;
2017
+ text-align: center;
2018
+ font-variant-numeric: tabular-nums;
2019
+ }
2020
+
2021
+ @keyframes explain-auto-wait-shrink {
2022
+ from {
2023
+ transform: scaleX(1);
2024
+ }
2025
+ to {
2026
+ transform: scaleX(0);
2027
+ }
2028
+ }
2029
+
2030
+ .explain-nav-controls {
2031
+ display: flex;
2032
+ align-items: center;
2033
+ justify-content: center;
2034
+ gap: 12px;
2035
+ flex: none;
2036
+ }
2037
+
2038
+ .explain-nav-position {
2039
+ min-width: 6.5em;
2040
+ color: #b7c0ce;
2041
+ font-size: 13px;
2042
+ text-align: center;
2043
+ }
2044
+
2045
+ .explain-steps {
2046
+ display: flex;
2047
+ flex: 1 1 auto;
2048
+ flex-direction: column;
2049
+ gap: 8px;
2050
+ min-height: 0;
2051
+ margin: 0;
2052
+ padding: 0;
2053
+ overflow: auto;
2054
+ list-style: none;
2055
+ }
2056
+
2057
+ .explain-steps li {
2058
+ position: relative;
2059
+ display: flex;
2060
+ flex-direction: column;
2061
+ gap: 8px;
2062
+ padding-left: calc(var(--explain-depth, 0) * 14px);
2063
+ }
2064
+
2065
+ .explain-steps li[data-past='true'] .explain-step {
2066
+ opacity: 0.62;
2067
+ }
2068
+
2069
+ .explain-steps li[data-active='true'] {
2070
+ padding-bottom: 8px;
2071
+ background: rgba(25, 28, 34, 0.96);
2072
+ border: 1px solid #9ad8ff;
2073
+ }
2074
+
2075
+ .explain-step {
2076
+ display: flex;
2077
+ align-items: center;
2078
+ gap: 8px;
2079
+ width: 100%;
2080
+ text-align: left;
2081
+ }
2082
+
2083
+ .explain-steps li[data-active='true'] .explain-step {
2084
+ border-color: transparent;
2085
+ background: transparent;
2086
+ color: #e7ebf2;
2087
+ }
2088
+
2089
+ .explain-steps li[data-active='true'] .explain-body {
2090
+ padding: 0 12px 4px 36px;
2091
+ }
2092
+
2093
+ .explain-step[data-active='true'] {
2094
+ border-color: #9ad8ff;
2095
+ color: #e7ebf2;
2096
+ }
2097
+
2098
+ .explain-step-index {
2099
+ color: #9ad8ff;
2100
+ font-variant-numeric: tabular-nums;
2101
+ }
2102
+
2103
+ .explain-step-title {
2104
+ min-width: 0;
2105
+ }
2106
+
2107
+ .explain-asked,
2108
+ .explain-preparing,
2109
+ .explain-preparing-step {
2110
+ margin: 0;
2111
+ color: #9ad8ff;
2112
+ font-size: 12px;
2113
+ line-height: 1.4;
2114
+ }
2115
+
2116
+ .explain-preparing {
2117
+ padding: 8px 10px;
2118
+ background: rgba(154, 216, 255, 0.08);
2119
+ border: 1px solid rgba(154, 216, 255, 0.28);
2120
+ }
2121
+
2122
+ .explain-asked {
2123
+ padding: 0 12px 0 36px;
2124
+ color: #b7c0ce;
2125
+ }
2126
+
2127
+ .explain-preparing-step {
2128
+ padding: 0 12px 4px 36px;
2129
+ }
2130
+
2131
+ .explain-ask {
2132
+ align-self: flex-start;
2133
+ margin: 0 12px 4px 36px;
2134
+ }
2135
+
2136
+ .explain-ask-form {
2137
+ display: grid;
2138
+ gap: 8px;
2139
+ margin: 0 12px 4px 36px;
2140
+ }
2141
+
2142
+ .explain-ask-label {
2143
+ display: grid;
2144
+ gap: 6px;
2145
+ color: #b7c0ce;
2146
+ font-size: 11px;
2147
+ }
2148
+
2149
+ .explain-ask-label textarea {
2150
+ width: 100%;
2151
+ resize: vertical;
2152
+ color: #e7ebf2;
2153
+ background: var(--vc-surface);
2154
+ border: 1px solid #3a4250;
2155
+ padding: 8px;
2156
+ font: 12px/1.4 ui-monospace, SFMono-Regular, Menlo, monospace;
2157
+ }
2158
+
2159
+ .explain-ask-label textarea:focus {
2160
+ border-color: #9ad8ff;
2161
+ outline: none;
2162
+ }
2163
+
2164
+ .explain-ask-actions {
2165
+ display: flex;
2166
+ gap: 8px;
2167
+ }
2168
+
2169
+ .explain-pointer-origin {
2170
+ position: absolute;
2171
+ top: 50%;
2172
+ right: -7px;
2173
+ z-index: 2;
2174
+ width: 14px;
2175
+ height: 14px;
2176
+ transform: translateY(-50%);
2177
+ border: 2px solid #9ad8ff;
2178
+ border-radius: 50%;
2179
+ background: var(--vc-chrome);
2180
+ box-shadow: 0 0 10px rgba(154, 216, 255, 0.55);
2181
+ pointer-events: none;
2182
+ }
2183
+
2184
+ .explain-info-stack {
2185
+ left: auto;
2186
+ right: 0;
2187
+ width: min(320px, 38vw);
2188
+ pointer-events: none;
2189
+ }
2190
+
2191
+ .explain-info-stack .explain-info-panel {
2192
+ position: relative;
2193
+ top: 16px;
2194
+ right: 16px;
2195
+ pointer-events: auto;
2196
+ max-height: calc(100dvh - 32px);
2197
+ }
2198
+
2199
+ .explain-info-panel li[data-explain-highlight='true'] {
2200
+ padding: 3px 8px;
2201
+ margin-left: -8px;
2202
+ color: #e7ebf2;
2203
+ background: rgba(154, 216, 255, 0.14);
2204
+ border: 1px solid rgba(154, 216, 255, 0.45);
2205
+ }
2206
+
2207
+ .explain-info-panel li[data-explain-target='true'] {
2208
+ border-color: #9ad8ff;
2209
+ background: rgba(154, 216, 255, 0.22);
2210
+ box-shadow: 0 0 0 1px rgba(154, 216, 255, 0.35);
2211
+ }
2212
+
2213
+ .explain-info-panel li[data-explain-dim='true'] {
2214
+ opacity: 0.42;
2215
+ }
2216
+
2217
+ .explain-info-panel .hud-panel-chrome-title[data-explain-target='true'],
2218
+ .explain-info-panel .hud-panel-chrome-title[data-explain-highlight='true'] {
2219
+ color: #9ad8ff;
2220
+ }
2221
+
2222
+ .explain-pointer {
2223
+ position: fixed;
2224
+ inset: 0;
2225
+ z-index: 16;
2226
+ pointer-events: none;
2227
+ overflow: visible;
2228
+ }
2229
+
2230
+ .explain-pointer-glow {
2231
+ stroke: rgba(154, 216, 255, 0.28);
2232
+ stroke-width: 8;
2233
+ stroke-linecap: round;
2234
+ }
2235
+
2236
+ .explain-pointer-line {
2237
+ stroke: #9ad8ff;
2238
+ stroke-width: 2.4;
2239
+ stroke-linecap: round;
2240
+ }
2241
+
2242
+ .explain-pointer-head {
2243
+ fill: #9ad8ff;
2244
+ }
2245
+
2246
+ .explain-ask-overlay {
2247
+ z-index: 24;
2248
+ }
2249
+
2250
+ .explain-ask-card {
2251
+ width: min(560px, 100%);
2252
+ max-height: min(72dvh, 100%);
2253
+ display: flex;
2254
+ flex-direction: column;
2255
+ gap: 16px;
2256
+ padding: 20px 20px 16px;
2257
+ background: var(--vc-editor);
2258
+ border: 1px solid var(--vc-border);
2259
+ }
2260
+
2261
+ .explain-ask-card-header {
2262
+ display: flex;
2263
+ align-items: flex-start;
2264
+ justify-content: space-between;
2265
+ gap: 16px;
2266
+ flex: none;
2267
+ }
2268
+
2269
+ .explain-ask-card-heading {
2270
+ min-width: 0;
2271
+ }
2272
+
2273
+ .explain-ask-card-heading h1 {
2274
+ margin: 0;
2275
+ font-size: 18px;
2276
+ font-weight: 600;
2277
+ }
2278
+
2279
+ .explain-ask-card-subtitle {
2280
+ margin: 6px 0 0;
2281
+ color: #8b95a5;
2282
+ font-size: 12px;
2283
+ line-height: 1.4;
2284
+ word-break: break-word;
2285
+ }
2286
+
2287
+ .explain-ask-card-body {
2288
+ min-height: 0;
2289
+ overflow: auto;
2290
+ }
2291
+
2292
+ .explain-ask-card-footer {
2293
+ display: flex;
2294
+ flex-direction: column;
2295
+ gap: 10px;
2296
+ flex: none;
2297
+ }
2298
+
2299
+ .explain-ask-card-footer .explain-tell {
2300
+ width: 100%;
2301
+ }