@jkwd/inbase 0.1.20 → 0.1.22

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 (59) 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-ignore.mjs +9 -0
  7. package/apps/explorer/scripts/scan-target.mjs +22 -5
  8. package/apps/explorer/scripts/session-store.d.ts +86 -11
  9. package/apps/explorer/scripts/session-store.mjs +371 -58
  10. package/apps/explorer/scripts/target-config.d.ts +38 -3
  11. package/apps/explorer/scripts/target-config.mjs +147 -3
  12. package/apps/explorer/src/App.tsx +1080 -158
  13. package/apps/explorer/src/agentIntent.ts +61 -7
  14. package/apps/explorer/src/codebase.ts +1 -1
  15. package/apps/explorer/src/devTargets.ts +66 -0
  16. package/apps/explorer/src/explain.ts +312 -0
  17. package/apps/explorer/src/index.css +884 -223
  18. package/apps/explorer/src/layout.ts +55 -0
  19. package/apps/explorer/src/scene/DistantFileBlocks.tsx +4 -2
  20. package/apps/explorer/src/scene/FileBlock.tsx +95 -72
  21. package/apps/explorer/src/scene/FolderArea.tsx +55 -32
  22. package/apps/explorer/src/scene/MapView.tsx +506 -33
  23. package/apps/explorer/src/scene/RelationLines.tsx +7 -0
  24. package/apps/explorer/src/scene/World.tsx +146 -32
  25. package/apps/explorer/src/speech.ts +228 -0
  26. package/apps/explorer/src/theme.ts +29 -0
  27. package/apps/explorer/src/types.ts +98 -8
  28. package/apps/explorer/src/ui/CanvasErrorBoundary.tsx +3 -1
  29. package/apps/explorer/src/ui/ExplainAskCard.tsx +142 -0
  30. package/apps/explorer/src/ui/ExplainHud.tsx +524 -0
  31. package/apps/explorer/src/ui/ExplainInfoPanel.tsx +135 -0
  32. package/apps/explorer/src/ui/ExplainPointer.tsx +73 -0
  33. package/apps/explorer/src/ui/EyeIcon.tsx +38 -1
  34. package/apps/explorer/src/ui/HUD.tsx +1067 -792
  35. package/apps/explorer/src/ui/NameInput.tsx +114 -5
  36. package/apps/explorer/src/userContext.ts +0 -11
  37. package/apps/explorer/src/userCreated.ts +54 -1
  38. package/apps/explorer/vite.config.ts +173 -26
  39. package/bin/inbase.mjs +11 -2
  40. package/bin/project.mjs +1 -1
  41. package/bin/session.mjs +287 -38
  42. package/package.json +4 -1
  43. package/skill/commands/amber.md +23 -0
  44. package/skill/commands/blue.md +13 -0
  45. package/skill/commands/coral.md +23 -0
  46. package/skill/commands/explain.md +77 -0
  47. package/skill/commands/green.md +23 -0
  48. package/skill/commands/inbase.md +7 -5
  49. package/skill/commands/lime.md +23 -0
  50. package/skill/commands/orange.md +23 -0
  51. package/skill/commands/purple.md +23 -0
  52. package/skill/commands/red.md +23 -0
  53. package/skill/commands/skipinbase.md +1 -1
  54. package/skill/commands/violet.md +23 -0
  55. package/skill/commands/yellow.md +23 -0
  56. package/skill/inbase/SKILL.md +124 -76
  57. package/apps/explorer/src/scene/BlockPlacer.tsx +0 -78
  58. package/apps/explorer/src/scene/IslandPlacer.tsx +0 -31
  59. package/apps/explorer/src/scene/SelectionThumbnail.tsx +0 -1050
@@ -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
  }
@@ -64,6 +69,15 @@ button {
64
69
  font-size: 15px;
65
70
  }
66
71
 
72
+ .canvas-error {
73
+ position: absolute;
74
+ inset: 0;
75
+ z-index: 2;
76
+ display: grid;
77
+ place-items: center;
78
+ background: var(--vc-chrome);
79
+ }
80
+
67
81
  .canvas-error .hud-button {
68
82
  margin-top: 12px;
69
83
  }
@@ -157,6 +171,43 @@ button {
157
171
  flex-wrap: wrap;
158
172
  }
159
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
+
160
211
  .hud-mode {
161
212
  display: flex;
162
213
  gap: 8px;
@@ -189,6 +240,48 @@ button {
189
240
  gap: 8px;
190
241
  flex: none;
191
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;
192
285
  }
193
286
 
194
287
  .hud-chip,
@@ -215,7 +308,10 @@ button {
215
308
  position: absolute;
216
309
  top: 0;
217
310
  left: 0;
218
- display: grid;
311
+ display: flex;
312
+ align-items: center;
313
+ justify-content: center;
314
+ gap: 6px;
219
315
  min-width: max-content;
220
316
  padding: 4px 7px;
221
317
  color: #f1f5fa;
@@ -236,9 +332,13 @@ button {
236
332
  }
237
333
 
238
334
  .map-folder-label-added {
239
- color: #d7f3ff;
240
- border-color: #7ec8e8;
241
- 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
+ );
242
342
  }
243
343
 
244
344
  .map-folder-label-add {
@@ -265,6 +365,80 @@ button {
265
365
  background: rgba(25, 28, 34, 0.94);
266
366
  }
267
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
+
268
442
  .map-change-mark {
269
443
  pointer-events: none;
270
444
  user-select: none;
@@ -500,6 +674,49 @@ button {
500
674
  transform: translateY(0);
501
675
  }
502
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
+
503
720
  .hud-panel {
504
721
  position: absolute;
505
722
  top: 68px;
@@ -578,33 +795,33 @@ button {
578
795
  display: inline-flex;
579
796
  align-items: center;
580
797
  justify-content: center;
581
- gap: 7px;
582
798
  flex: 1 1 0;
583
- min-width: 0;
584
- overflow: hidden;
585
- white-space: nowrap;
586
- font-size: 13px;
799
+ min-width: 36px;
800
+ height: 34px;
801
+ padding: 6px 8px;
587
802
  }
588
803
 
589
- .hud-session-tab-label {
590
- min-width: 0;
591
- overflow: hidden;
592
- 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);
593
811
  }
594
812
 
595
- .hud-session-tab[data-attached='true'] {
596
- border-color: #6ee7b7;
597
- color: #b6f3d6;
813
+ .hud-session-tab.hud-button[data-active='true'] {
814
+ border-color: var(--session-color, #5d9ec4);
598
815
  }
599
816
 
600
- .hud-session-tab[data-attached='true'] .hud-attach-dot {
601
- background: #6ee7b7;
602
- box-shadow: 0 0 8px #6ee7b7;
817
+ .hud-session-tab[data-attached='true'] {
818
+ border-color: var(--session-color, #6ee7b7);
603
819
  }
604
820
 
605
- .hud-session-tab[data-attached='false'] .hud-attach-dot {
606
- background: #6b7280;
607
- 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);
608
825
  }
609
826
 
610
827
  .hud-left-stack .hud-panel-planned {
@@ -647,57 +864,6 @@ button {
647
864
  overscroll-behavior: contain;
648
865
  }
649
866
 
650
- .hud-right-stack .hud-thumbnail {
651
- position: relative;
652
- right: auto;
653
- bottom: auto;
654
- left: auto;
655
- z-index: auto;
656
- width: 100%;
657
- margin-top: auto;
658
- flex: none;
659
- }
660
-
661
- .hud-thumbnail {
662
- position: fixed;
663
- display: flex;
664
- flex-direction: column;
665
- right: 20px;
666
- bottom: 72px;
667
- left: auto;
668
- z-index: 30;
669
- width: min(320px, calc(100% - 40px));
670
- pointer-events: auto;
671
- overflow: hidden;
672
- background: rgba(25, 28, 34, 0.96);
673
- border: 1px solid #5d9ec4;
674
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
675
- }
676
-
677
- .hud-right-stack .hud-thumbnail[data-maximized='true'],
678
- .hud-thumbnail[data-maximized='true'] {
679
- position: fixed;
680
- top: 68px;
681
- right: 20px;
682
- bottom: 72px;
683
- left: 20px;
684
- z-index: 40;
685
- width: auto;
686
- max-width: none;
687
- margin-top: 0;
688
- }
689
-
690
- .hud-thumbnail-bar {
691
- display: flex;
692
- align-items: center;
693
- justify-content: space-between;
694
- gap: 8px;
695
- padding: 4px 6px 4px 12px;
696
- color: #e7ebf2;
697
- font-size: 12px;
698
- letter-spacing: 0.02em;
699
- }
700
-
701
867
  .hud-panel-chrome {
702
868
  display: flex;
703
869
  align-items: center;
@@ -718,6 +884,47 @@ button {
718
884
  min-width: 0;
719
885
  }
720
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
+
721
928
  .hud-attach-badge {
722
929
  display: inline-flex;
723
930
  align-items: center;
@@ -780,6 +987,9 @@ button {
780
987
  }
781
988
 
782
989
  .hud-panel-chrome-title {
990
+ display: flex;
991
+ align-items: center;
992
+ gap: 8px;
783
993
  min-width: 0;
784
994
  flex: 1 1 auto;
785
995
  overflow: hidden;
@@ -788,10 +998,15 @@ button {
788
998
  font-weight: 600;
789
999
  letter-spacing: 0.08em;
790
1000
  text-transform: uppercase;
791
- text-overflow: ellipsis;
792
1001
  white-space: nowrap;
793
1002
  }
794
1003
 
1004
+ .hud-panel-chrome-title-text {
1005
+ min-width: 0;
1006
+ overflow: hidden;
1007
+ text-overflow: ellipsis;
1008
+ }
1009
+
795
1010
  .hud-panel-planned .hud-panel-chrome-title {
796
1011
  color: #e7ebf2;
797
1012
  font-size: 14px;
@@ -827,6 +1042,11 @@ button {
827
1042
  line-height: 1.4;
828
1043
  }
829
1044
 
1045
+ .hud-mode-hint p {
1046
+ margin: 0;
1047
+ color: inherit;
1048
+ }
1049
+
830
1050
  .hud-switch {
831
1051
  position: relative;
832
1052
  flex: none;
@@ -863,114 +1083,74 @@ button {
863
1083
  }
864
1084
 
865
1085
  .hud-panel-info .hud-panel-chrome-title {
1086
+ overflow: visible;
866
1087
  color: #e7ebf2;
867
1088
  font-size: 16px;
868
1089
  letter-spacing: 0.02em;
869
1090
  text-transform: none;
870
1091
  }
871
1092
 
872
- .hud-panel-controls {
873
- display: flex;
874
- flex: none;
875
- gap: 4px;
876
- }
877
-
878
- .hud-panel-control {
879
- width: 28px;
880
- height: 28px;
881
- padding: 0;
882
- font-size: 16px;
883
- line-height: 1;
884
- }
885
-
886
- .hud-thumbnail-hide {
887
- width: 28px;
888
- height: 28px;
889
- font-size: 16px;
890
- line-height: 1;
891
- }
892
-
893
- .hud-thumbnail-stage {
894
- position: relative;
895
- width: 100%;
896
- height: 220px;
897
- min-height: 0;
898
- flex: none;
899
- background: #000;
900
- touch-action: none;
901
- user-select: none;
902
- cursor: grab;
903
- }
904
-
905
- .hud-thumbnail[data-maximized='true'] .hud-thumbnail-stage {
906
- height: auto;
1093
+ .hud-info-name {
907
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;
908
1109
  }
909
1110
 
910
- .hud-thumbnail-stage[data-panning='true'],
911
- .hud-thumbnail-stage[data-orbiting='true'] {
912
- cursor: grabbing;
913
- }
914
-
915
- .hud-thumbnail-stage canvas {
916
- display: block;
1111
+ .hud-info-name:hover {
1112
+ border-bottom-color: rgba(255, 255, 255, 0.22);
917
1113
  }
918
1114
 
919
- .hud-thumbnail-hint {
920
- position: absolute;
921
- left: 8px;
922
- bottom: 6px;
923
- z-index: 2;
924
- pointer-events: none;
925
- color: rgba(231, 235, 242, 0.55);
926
- font-size: 9px;
927
- letter-spacing: 0.02em;
1115
+ .hud-info-name:focus {
1116
+ border-bottom-color: #9ad8ff;
1117
+ text-overflow: clip;
928
1118
  }
929
1119
 
930
- .hud-thumbnail-nav {
931
- position: absolute;
932
- right: 6px;
933
- bottom: 6px;
934
- z-index: 2;
1120
+ .hud-panel-controls {
935
1121
  display: flex;
1122
+ flex: none;
936
1123
  gap: 4px;
937
1124
  }
938
1125
 
939
- .hud-thumbnail-nav .hud-button {
940
- width: 24px;
941
- height: 24px;
1126
+ .hud-panel-control {
1127
+ width: 28px;
1128
+ height: 28px;
942
1129
  padding: 0;
943
- color: #e7ebf2;
944
- font-size: 14px;
1130
+ font-size: 16px;
945
1131
  line-height: 1;
946
- background: rgba(18, 20, 24, 0.88);
947
1132
  }
948
1133
 
949
- .thumbnail-block-label,
950
- .thumbnail-folder-label {
951
- pointer-events: none;
952
- user-select: none;
953
- overflow: hidden;
954
- max-width: 72px;
955
- color: #ffffff;
956
- font-weight: 600;
957
- letter-spacing: 0.01em;
958
- line-height: 1.15;
959
- text-overflow: ellipsis;
960
- white-space: nowrap;
961
- text-shadow:
962
- 0 0 3px #000,
963
- 0 1px 2px #000,
964
- 0 0 8px rgba(0, 0, 0, 0.85);
1134
+ .blueprint-eye {
1135
+ display: grid;
1136
+ place-items: center;
1137
+ width: 24px;
1138
+ height: 24px;
1139
+ color: #f4f7fb;
1140
+ background: #000;
1141
+ border: 0;
1142
+ border-radius: 50%;
1143
+ line-height: 0;
965
1144
  }
966
1145
 
967
- .thumbnail-block-label {
968
- font-size: 9px;
1146
+ .blueprint-eye-row {
1147
+ display: flex;
1148
+ align-items: center;
1149
+ gap: 2px;
969
1150
  }
970
1151
 
971
- .thumbnail-folder-label {
972
- font-size: 10px;
973
- max-width: 96px;
1152
+ .blueprint-eye svg {
1153
+ display: block;
974
1154
  }
975
1155
 
976
1156
  .hud-panel-planned {
@@ -1006,6 +1186,33 @@ button {
1006
1186
  line-height: 1.4;
1007
1187
  }
1008
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
+
1009
1216
  .hud-steps {
1010
1217
  margin: 10px 0 0;
1011
1218
  padding: 0;
@@ -1067,6 +1274,13 @@ button {
1067
1274
  text-decoration: none;
1068
1275
  }
1069
1276
 
1277
+ .hud-step-actions {
1278
+ display: flex;
1279
+ flex-wrap: wrap;
1280
+ flex: 1 1 100%;
1281
+ gap: 6px;
1282
+ }
1283
+
1070
1284
  .hud-panel-planned .hud-section-title {
1071
1285
  margin-top: 0;
1072
1286
  color: #9ad8ff;
@@ -1129,75 +1343,11 @@ button {
1129
1343
  line-height: 1.45;
1130
1344
  }
1131
1345
 
1132
- .hud-setup-section .hud-instruction {
1133
- margin-top: 0;
1134
- }
1135
-
1136
- .hud-context {
1137
- display: grid;
1138
- gap: 8px;
1346
+ .hud-setup-section p + p,
1347
+ .hud-mode-hint p + p {
1139
1348
  margin-top: 8px;
1140
1349
  }
1141
1350
 
1142
- .hud-context-drop {
1143
- width: 100%;
1144
- min-height: 52px;
1145
- padding: 10px 8px;
1146
- color: #8b95a5;
1147
- background: var(--vc-surface);
1148
- border: 1px dashed #3a4250;
1149
- cursor: pointer;
1150
- font: 12px/1.4 Inter, ui-sans-serif, system-ui, sans-serif;
1151
- text-align: center;
1152
- }
1153
-
1154
- .hud-context-drop:hover,
1155
- .hud-context-drop:focus-visible,
1156
- .hud-context-drop[data-over='true'] {
1157
- color: #e7ebf2;
1158
- border-color: #d6b56a;
1159
- outline: none;
1160
- }
1161
-
1162
- .hud-context-drop[data-busy='true'],
1163
- .hud-context-drop:disabled {
1164
- cursor: wait;
1165
- opacity: 0.7;
1166
- }
1167
-
1168
- .hud-context-list {
1169
- display: grid;
1170
- gap: 4px;
1171
- margin: 0;
1172
- padding: 0;
1173
- list-style: none;
1174
- }
1175
-
1176
- .hud-context-list li {
1177
- display: grid;
1178
- grid-template-columns: minmax(0, 1fr) auto auto;
1179
- align-items: center;
1180
- gap: 6px;
1181
- color: #e7ebf2;
1182
- font-size: 11px;
1183
- }
1184
-
1185
- .hud-context-name {
1186
- overflow: hidden;
1187
- text-overflow: ellipsis;
1188
- white-space: nowrap;
1189
- }
1190
-
1191
- .hud-context-size {
1192
- color: #8b95a5;
1193
- }
1194
-
1195
- .hud-context-error {
1196
- margin: 0;
1197
- color: #ff8a9b;
1198
- font-size: 11px;
1199
- }
1200
-
1201
1351
  .hud-instruction textarea {
1202
1352
  width: 100%;
1203
1353
  resize: vertical;
@@ -1223,6 +1373,10 @@ button {
1223
1373
  font-size: 12px;
1224
1374
  }
1225
1375
 
1376
+ .hud-place-hint + .hud-live {
1377
+ margin-top: 0;
1378
+ }
1379
+
1226
1380
  .hud-live {
1227
1381
  display: flex;
1228
1382
  align-items: center;
@@ -1407,6 +1561,90 @@ button {
1407
1561
  width: 100%;
1408
1562
  }
1409
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
+
1410
1648
  .hud-panel ul {
1411
1649
  margin: 8px 0 0;
1412
1650
  padding-left: 18px;
@@ -1462,6 +1700,35 @@ button {
1462
1700
  flex: none;
1463
1701
  }
1464
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
+
1465
1732
  .hud-item-note {
1466
1733
  flex: none;
1467
1734
  padding: 2px 6px;
@@ -1553,6 +1820,7 @@ button {
1553
1820
 
1554
1821
  .hud-add-row {
1555
1822
  display: flex;
1823
+ flex-wrap: wrap;
1556
1824
  gap: 6px;
1557
1825
  margin-top: 8px;
1558
1826
  }
@@ -1575,6 +1843,13 @@ button {
1575
1843
  .hud-add-row .hud-button {
1576
1844
  flex: none;
1577
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;
1578
1853
  }
1579
1854
 
1580
1855
  .hud-section-title {
@@ -1638,3 +1913,389 @@ button {
1638
1913
  .block-name-input:focus {
1639
1914
  border-color: #d7eef8;
1640
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
+ }