@ibgib/space-gib 0.0.33 → 0.0.35

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 (118) hide show
  1. package/dist/client/bootstrap.mjs +24 -51
  2. package/dist/client/chunk-FIAGRVBY.mjs +10933 -0
  3. package/dist/client/chunk-XLQ3UCQY.mjs +53 -0
  4. package/dist/client/css/activity-bar.css +435 -0
  5. package/dist/client/css/base.css +167 -0
  6. package/dist/client/css/components.css +218 -0
  7. package/dist/client/css/cosmic.css +557 -0
  8. package/dist/client/css/dev-tools.css +163 -0
  9. package/dist/client/css/landing.css +184 -0
  10. package/dist/client/css/layout.css +1017 -0
  11. package/dist/client/css/onboarding.css +181 -0
  12. package/dist/client/css/repos.css +740 -0
  13. package/dist/client/css/variables.css +64 -0
  14. package/dist/client/index.html +208 -31
  15. package/dist/client/index.mjs +22 -45
  16. package/dist/client/privacy.html +22 -22
  17. package/dist/client/script.mjs +1 -1
  18. package/dist/client/style.css +11 -1056
  19. package/dist/respec-gib.node.mjs +5 -0
  20. package/dist/server/server.mjs +6880 -3110
  21. package/package.json +6 -6
  22. package/src/client/AUTO-GENERATED-version.mts +1 -1
  23. package/src/client/cosmos/seed-cosmos-workspace.mts +83 -0
  24. package/src/client/css/activity-bar.css +435 -0
  25. package/src/client/css/base.css +167 -0
  26. package/src/client/css/components.css +218 -0
  27. package/src/client/css/cosmic.css +557 -0
  28. package/src/client/css/dev-tools.css +163 -0
  29. package/src/client/css/landing.css +184 -0
  30. package/src/client/css/layout.css +1017 -0
  31. package/src/client/css/onboarding.css +181 -0
  32. package/src/client/css/repos.css +740 -0
  33. package/src/client/css/variables.css +64 -0
  34. package/src/client/dev-tools/vcs-workspace.mts +7 -7
  35. package/src/client/index.html +208 -31
  36. package/src/client/privacy.html +22 -22
  37. package/src/client/style.css +11 -1056
  38. package/src/client/ui/component/changes/changes.css +413 -0
  39. package/src/client/ui/component/changes/changes.html +37 -0
  40. package/src/client/ui/component/changes/changes.mts +766 -0
  41. package/src/client/ui/component/changes/index.mts +9 -0
  42. package/src/client/ui/component/chat-view/IMPLEMENTATION.md +48 -0
  43. package/src/client/ui/component/chat-view/chat-view.css +381 -0
  44. package/src/client/ui/component/chat-view/chat-view.html +52 -0
  45. package/src/client/ui/component/chat-view/chat-view.mts +264 -0
  46. package/src/client/ui/component/chat-view/index.mts +9 -0
  47. package/src/client/ui/component/clone/IMPLEMENTATION.md +68 -0
  48. package/src/client/ui/component/clone/clone-constants.mts +16 -0
  49. package/src/client/ui/component/clone/clone-types.mts +60 -0
  50. package/src/client/ui/component/clone/clone.css +383 -0
  51. package/src/client/ui/component/clone/clone.html +89 -0
  52. package/src/client/ui/component/clone/clone.mts +648 -0
  53. package/src/client/ui/component/clone/index.mts +11 -0
  54. package/src/client/ui/component/code-editor/IMPLEMENTATION.md +89 -0
  55. package/src/client/ui/component/code-editor/code-editor.css +357 -0
  56. package/src/client/ui/component/code-editor/code-editor.html +67 -0
  57. package/src/client/ui/component/code-editor/code-editor.mts +643 -0
  58. package/src/client/ui/component/code-editor/index.mts +9 -0
  59. package/src/client/ui/component/cosmos-navigator/IMPLEMENTATION.md +31 -0
  60. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.css +864 -0
  61. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.html +92 -0
  62. package/src/client/ui/component/cosmos-navigator/cosmos-navigator.mts +1317 -0
  63. package/src/client/ui/component/cosmos-navigator/index.mts +18 -0
  64. package/src/client/ui/component/file-explorer/IMPLEMENTATION.md +42 -0
  65. package/src/client/ui/component/file-explorer/file-explorer.css +720 -0
  66. package/src/client/ui/component/file-explorer/file-explorer.html +55 -0
  67. package/src/client/ui/component/file-explorer/file-explorer.mts +1412 -0
  68. package/src/client/ui/component/file-explorer/index.mts +9 -0
  69. package/src/client/ui/component/nested-chat/IMPLEMENTATION.md +18 -0
  70. package/src/client/ui/component/nested-chat/chat/IMPLEMENTATION.md +14 -0
  71. package/src/client/ui/component/nested-chat/chat/chat-constants.mts +14 -0
  72. package/src/client/ui/component/nested-chat/chat/chat-helpers.mts +66 -0
  73. package/src/client/ui/component/nested-chat/chat/chat.css +654 -0
  74. package/src/client/ui/component/nested-chat/chat/chat.html +90 -0
  75. package/src/client/ui/component/nested-chat/chat/chat.mts +561 -0
  76. package/src/client/ui/component/nested-chat/chat/index.mts +7 -0
  77. package/src/client/ui/component/nested-chat/index.mts +14 -0
  78. package/src/client/ui/component/nested-chat/nested-chat-constants.mts +12 -0
  79. package/src/client/ui/component/nested-chat/nested-chat-types.mts +53 -0
  80. package/src/client/ui/component/nested-chat/nested-chat.css +142 -0
  81. package/src/client/ui/component/nested-chat/nested-chat.html +11 -0
  82. package/src/client/ui/component/nested-chat/nested-chat.mts +395 -0
  83. package/src/client/ui/component/notes-explorer/index.mts +9 -0
  84. package/src/client/ui/component/notes-explorer/notes-explorer.css +313 -0
  85. package/src/client/ui/component/notes-explorer/notes-explorer.html +136 -0
  86. package/src/client/ui/component/notes-explorer/notes-explorer.mts +240 -0
  87. package/src/client/ui/component/notes-inspector/index.mts +9 -0
  88. package/src/client/ui/component/notes-inspector/notes-inspector.css +244 -0
  89. package/src/client/ui/component/notes-inspector/notes-inspector.html +97 -0
  90. package/src/client/ui/component/notes-inspector/notes-inspector.mts +152 -0
  91. package/src/client/ui/component/pitch/IMPLEMENTATION.md +48 -0
  92. package/src/client/ui/component/pitch/index.mts +9 -0
  93. package/src/client/ui/component/pitch/pitch.css +295 -0
  94. package/src/client/ui/component/pitch/pitch.html +97 -0
  95. package/src/client/ui/component/pitch/pitch.mts +135 -0
  96. package/src/client/ui/component/timeline/IMPLEMENTATION.md +33 -0
  97. package/src/client/ui/component/timeline/index.mts +9 -0
  98. package/src/client/ui/component/timeline/timeline.css +279 -0
  99. package/src/client/ui/component/timeline/timeline.html +23 -0
  100. package/src/client/ui/component/timeline/timeline.mts +261 -0
  101. package/src/client/ui/component/timeline-item-details/IMPLEMENTATION.md +28 -0
  102. package/src/client/ui/component/timeline-item-details/index.mts +9 -0
  103. package/src/client/ui/component/timeline-item-details/timeline-item-details.css +286 -0
  104. package/src/client/ui/component/timeline-item-details/timeline-item-details.html +64 -0
  105. package/src/client/ui/component/timeline-item-details/timeline-item-details.mts +194 -0
  106. package/src/client/ui/router/index.mts +3 -0
  107. package/src/client/ui/router/space-gib-router-helpers.mts +72 -0
  108. package/src/client/ui/router/space-gib-router-helpers.respec.mts +529 -0
  109. package/src/client/ui/router/space-gib-router-service.mts +63 -0
  110. package/src/client/ui/router/space-gib-router-types.mts +49 -0
  111. package/src/client/ui/shell/cosmic-big-bang.mts +853 -0
  112. package/src/client/ui/shell/space-gib-shell-constants.mts +7 -0
  113. package/src/client/ui/shell/space-gib-shell-service.mts +2297 -32
  114. package/src/server/server.mts +20 -1
  115. package/tsconfig.test.json +5 -1
  116. package/dist/client/chunk-CRJV762I.mjs +0 -3102
  117. package/dist/client/chunk-LXRCF5OS.mjs +0 -25
  118. package/dist/client/chunk-UBDQUZZV.mjs +0 -1
@@ -0,0 +1,720 @@
1
+ :host {
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ height: 100%;
6
+ min-height: 0;
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ :host([collapsed]) {
11
+ height: auto !important;
12
+ flex: 0 0 auto !important;
13
+ }
14
+
15
+ :host([collapsed]) .file-explorer-root {
16
+ height: auto !important;
17
+ flex: 0 0 auto !important;
18
+ }
19
+
20
+ :host([collapsed]) .single-branch-view,
21
+ :host([collapsed]) .composite-tree-container {
22
+ height: auto !important;
23
+ flex: 0 0 auto !important;
24
+ min-height: 0 !important;
25
+ padding-bottom: 0 !important;
26
+ overflow: visible !important;
27
+ }
28
+
29
+ .file-explorer-root {
30
+ display: flex;
31
+ flex-direction: column;
32
+ width: 100%;
33
+ height: 100%;
34
+ min-height: 0;
35
+ overflow: hidden;
36
+ user-select: none;
37
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
38
+ box-sizing: border-box;
39
+ position: relative;
40
+ }
41
+
42
+ /* Single Branch View Container */
43
+ .single-branch-view {
44
+ display: flex;
45
+ flex-direction: column;
46
+ width: 100%;
47
+ flex: 1 1 0px;
48
+ min-height: 32px;
49
+ overflow: hidden;
50
+ }
51
+
52
+ /* Branch Worktree Accordion Header */
53
+ .branch-header {
54
+ display: flex;
55
+ align-items: center;
56
+ gap: 0.35rem;
57
+ padding: 0.28rem 0.5rem;
58
+ background: rgba(255, 255, 255, 0.04);
59
+ border: 1px solid rgba(255, 255, 255, 0.08);
60
+ border-left: 3px solid var(--branch-accent-color, rgba(255, 255, 255, 0.08));
61
+ border-radius: 6px;
62
+ font-size: 0.82rem;
63
+ font-weight: 600;
64
+ color: #cbd5e1;
65
+ cursor: pointer;
66
+ transition: all 0.15s ease;
67
+ outline: none;
68
+ box-sizing: border-box;
69
+ flex: 0 0 auto !important;
70
+ flex-shrink: 0 !important;
71
+ }
72
+
73
+ .branch-header:hover {
74
+ background: var(--branch-accent-translucent, rgba(255, 255, 255, 0.07));
75
+ border-color: var(--branch-accent-color, rgba(124, 92, 252, 0.3));
76
+ color: #f1f5f9;
77
+ }
78
+
79
+ .branch-header:focus-visible {
80
+ border-color: var(--branch-accent-color, #a78bfa);
81
+ }
82
+
83
+ .branch-toggle-btn {
84
+ background: transparent;
85
+ border: none;
86
+ color: inherit;
87
+ font-size: 0.65rem;
88
+ padding: 0;
89
+ margin: 0;
90
+ cursor: pointer;
91
+ display: flex;
92
+ align-items: center;
93
+ justify-content: center;
94
+ width: 14px;
95
+ height: 14px;
96
+ line-height: 1;
97
+ }
98
+
99
+ .chevron-icon {
100
+ display: inline-block;
101
+ transition: transform 0.15s ease;
102
+ }
103
+
104
+ .branch-header.collapsed .chevron-icon {
105
+ transform: rotate(-90deg);
106
+ }
107
+
108
+ .branch-selector-container {
109
+ position: relative;
110
+ display: flex;
111
+ align-items: center;
112
+ flex: 1;
113
+ min-width: 0;
114
+ }
115
+
116
+ .branch-select-btn {
117
+ display: flex;
118
+ align-items: center;
119
+ gap: 0.35rem;
120
+ background: transparent;
121
+ border: 1px solid transparent;
122
+ border-radius: 4px;
123
+ padding: 2px 6px;
124
+ cursor: pointer;
125
+ color: inherit;
126
+ font-family: inherit;
127
+ min-width: 0;
128
+ max-width: 100%;
129
+ transition: all 0.15s ease;
130
+ }
131
+
132
+ .branch-select-btn:hover {
133
+ background: rgba(255, 255, 255, 0.08);
134
+ border-color: rgba(255, 255, 255, 0.15);
135
+ }
136
+
137
+ .branch-icon {
138
+ font-size: 0.9rem;
139
+ line-height: 1;
140
+ color: var(--branch-accent-color, #a78bfa);
141
+ }
142
+
143
+ .branch-title {
144
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace;
145
+ font-size: 0.82rem;
146
+ color: var(--branch-accent-color, #a78bfa);
147
+ font-weight: 600;
148
+ overflow: hidden;
149
+ text-overflow: ellipsis;
150
+ white-space: nowrap;
151
+ }
152
+
153
+ .branch-caret {
154
+ font-size: 0.65rem;
155
+ opacity: 0.7;
156
+ transition: transform 0.15s ease;
157
+ }
158
+
159
+ .branch-dropdown-menu {
160
+ position: absolute;
161
+ top: calc(100% + 4px);
162
+ left: 0;
163
+ min-width: 180px;
164
+ max-width: 260px;
165
+ max-height: 220px;
166
+ overflow-y: auto;
167
+ background: #11111b;
168
+ border: 1px solid rgba(255, 255, 255, 0.14);
169
+ border-radius: 6px;
170
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.55);
171
+ padding: 4px;
172
+ z-index: 1000;
173
+ display: flex;
174
+ flex-direction: column;
175
+ gap: 2px;
176
+ }
177
+
178
+ .branch-dropdown-item {
179
+ display: flex;
180
+ align-items: center;
181
+ gap: 0.45rem;
182
+ padding: 0.35rem 0.5rem;
183
+ border-radius: 4px;
184
+ font-size: 0.78rem;
185
+ font-family: ui-monospace, SFMono-Regular, monospace;
186
+ color: #cbd5e1;
187
+ cursor: pointer;
188
+ transition: all 0.12s ease;
189
+ }
190
+
191
+ .branch-dropdown-item:hover {
192
+ background: rgba(255, 255, 255, 0.08);
193
+ color: #ffffff;
194
+ }
195
+
196
+ .branch-dropdown-item.active {
197
+ background: var(--branch-accent-translucent, rgba(167, 139, 250, 0.15));
198
+ color: var(--branch-accent-color, #a78bfa);
199
+ font-weight: 600;
200
+ }
201
+
202
+ .branch-color-dot {
203
+ width: 8px;
204
+ height: 8px;
205
+ border-radius: 50%;
206
+ flex-shrink: 0;
207
+ }
208
+
209
+ .branch-dropdown-check {
210
+ margin-left: auto;
211
+ font-size: 0.75rem;
212
+ opacity: 0.9;
213
+ }
214
+
215
+ .worktree-badge {
216
+ font-size: 0.58rem;
217
+ text-transform: uppercase;
218
+ letter-spacing: 0.04em;
219
+ background: rgba(124, 92, 252, 0.18);
220
+ color: #c084fc;
221
+ padding: 1px 5px;
222
+ border-radius: 4px;
223
+ border: 1px solid rgba(192, 132, 252, 0.3);
224
+ font-weight: 600;
225
+ }
226
+
227
+ .branch-actions {
228
+ display: flex;
229
+ align-items: center;
230
+ gap: 2px;
231
+ margin-left: auto;
232
+ }
233
+
234
+ .branch-menu-btn {
235
+ font-size: 1.15rem;
236
+ font-weight: 700;
237
+ padding: 2px 7px;
238
+ min-width: 24px;
239
+ min-height: 22px;
240
+ display: inline-flex;
241
+ align-items: center;
242
+ justify-content: center;
243
+ line-height: 1;
244
+ color: #94a3b8;
245
+ border-radius: 4px;
246
+ cursor: pointer;
247
+ opacity: 0.8;
248
+ transition: all 0.12s ease;
249
+ }
250
+
251
+ .branch-header:hover .branch-menu-btn,
252
+ .composite-branch-header:hover .branch-menu-btn,
253
+ .branch-menu-btn:hover,
254
+ .branch-menu-btn.active {
255
+ opacity: 1;
256
+ color: #ffffff;
257
+ background: rgba(255, 255, 255, 0.12);
258
+ }
259
+
260
+ .action-btn {
261
+ background: transparent;
262
+ border: none;
263
+ color: #94a3b8;
264
+ font-size: 0.72rem;
265
+ padding: 2px 4px;
266
+ border-radius: 3px;
267
+ cursor: pointer;
268
+ line-height: 1;
269
+ transition: all 0.12s ease;
270
+ }
271
+
272
+ .action-btn:hover {
273
+ background: rgba(255, 255, 255, 0.1);
274
+ color: #fff;
275
+ }
276
+
277
+ /* File Tree Container */
278
+ .file-tree-container {
279
+ display: flex;
280
+ flex-direction: column;
281
+ gap: 2px;
282
+ padding: 0.35rem 0.2rem;
283
+ flex: 1 1 0px;
284
+ min-height: 0;
285
+ overflow-y: auto;
286
+ overflow-x: hidden;
287
+ transition: opacity 0.2s ease;
288
+ }
289
+
290
+ .file-tree-container.collapsed {
291
+ display: none !important;
292
+ }
293
+
294
+ /* Tree Item (Folder / File) */
295
+ .tree-item {
296
+ display: flex;
297
+ align-items: center;
298
+ gap: 0.35rem;
299
+ padding: 0.32rem 0.5rem;
300
+ border-radius: 4px;
301
+ font-size: 0.82rem;
302
+ color: #94a3b8;
303
+ cursor: pointer;
304
+ transition: all 0.12s ease;
305
+ border: 1px solid transparent;
306
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace;
307
+ outline: none;
308
+ box-sizing: border-box;
309
+ }
310
+
311
+ .tree-item:hover {
312
+ background: rgba(255, 255, 255, 0.05);
313
+ color: #f1f5f9;
314
+ }
315
+
316
+ .tree-item:focus-visible {
317
+ border-color: rgba(124, 92, 252, 0.4);
318
+ }
319
+
320
+ .tree-item.selected {
321
+ background: rgba(120, 248, 126, 0.1);
322
+ border-color: rgba(120, 248, 126, 0.25);
323
+ color: #78f87e;
324
+ font-weight: 500;
325
+ }
326
+
327
+ .tree-item.hidden {
328
+ display: none !important;
329
+ }
330
+
331
+ .tree-chevron {
332
+ font-size: 0.6rem;
333
+ width: 12px;
334
+ display: inline-flex;
335
+ align-items: center;
336
+ justify-content: center;
337
+ opacity: 0.7;
338
+ flex-shrink: 0;
339
+ }
340
+
341
+ .tree-indent {
342
+ display: inline-block;
343
+ width: 0.75rem;
344
+ flex-shrink: 0;
345
+ }
346
+
347
+ .tree-indent-2 {
348
+ width: 1.5rem;
349
+ }
350
+
351
+ .tree-icon {
352
+ font-size: 0.9rem;
353
+ line-height: 1;
354
+ flex-shrink: 0;
355
+ }
356
+
357
+ .tree-label {
358
+ flex: 1;
359
+ overflow: hidden;
360
+ text-overflow: ellipsis;
361
+ white-space: nowrap;
362
+ }
363
+
364
+ /* ── VCS Status Styling (driven by web-gib shared CSS variables) ── */
365
+ .tree-label.vcs-untracked, .tree-item.vcs-untracked .tree-label {
366
+ color: var(--vcs-clr-untracked, #73c991) !important;
367
+ }
368
+
369
+ .tree-label.vcs-modified, .tree-item.vcs-modified .tree-label {
370
+ color: var(--vcs-clr-modified, #e2c08d) !important;
371
+ }
372
+
373
+ .tree-label.vcs-added, .tree-item.vcs-added .tree-label {
374
+ color: var(--vcs-clr-added, #78f87e) !important;
375
+ }
376
+
377
+ .tree-label.vcs-deleted, .tree-item.vcs-deleted .tree-label {
378
+ color: var(--vcs-clr-deleted, #ff5b5b) !important;
379
+ text-decoration: line-through;
380
+ }
381
+
382
+ .vcs-status-badge {
383
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace;
384
+ font-size: var(--vcs-badge-font-size, 0.65rem);
385
+ font-weight: var(--vcs-badge-font-weight, 700);
386
+ padding: 1px 4px;
387
+ border-radius: var(--vcs-badge-radius, 3px);
388
+ line-height: 1;
389
+ display: inline-flex;
390
+ align-items: center;
391
+ justify-content: center;
392
+ margin-left: auto;
393
+ margin-right: 2px;
394
+ flex-shrink: 0;
395
+ text-transform: uppercase;
396
+ }
397
+
398
+ .vcs-status-badge.untracked, .vcs-status-badge.u {
399
+ color: var(--vcs-clr-untracked, #73c991);
400
+ background: var(--vcs-clr-untracked-bg, rgba(115, 201, 145, 0.12));
401
+ border: 1px solid var(--vcs-clr-untracked-border, rgba(115, 201, 145, 0.3));
402
+ }
403
+
404
+ .vcs-status-badge.modified, .vcs-status-badge.m {
405
+ color: var(--vcs-clr-modified, #e2c08d);
406
+ background: var(--vcs-clr-modified-bg, rgba(226, 192, 141, 0.12));
407
+ border: 1px solid var(--vcs-clr-modified-border, rgba(226, 192, 141, 0.3));
408
+ }
409
+
410
+ .vcs-status-badge.added, .vcs-status-badge.a {
411
+ color: var(--vcs-clr-added, #78f87e);
412
+ background: var(--vcs-clr-added-bg, rgba(120, 248, 126, 0.12));
413
+ border: 1px solid var(--vcs-clr-added-border, rgba(120, 248, 126, 0.3));
414
+ }
415
+
416
+ .file-comment-badge {
417
+ margin-left: auto;
418
+ font-size: 0.75rem;
419
+ color: #fbbf24;
420
+ line-height: 1;
421
+ }
422
+
423
+ .file-action-btn {
424
+ opacity: 0;
425
+ background: transparent;
426
+ border: none;
427
+ color: #94a3b8;
428
+ padding: 1px 4px;
429
+ border-radius: 3px;
430
+ cursor: pointer;
431
+ font-size: 0.8rem;
432
+ line-height: 1;
433
+ transition: all 0.15s ease;
434
+ margin-left: 4px;
435
+ }
436
+
437
+ .tree-item:hover .file-action-btn {
438
+ opacity: 0.8;
439
+ }
440
+
441
+ .file-action-btn:hover {
442
+ opacity: 1 !important;
443
+ background: rgba(99, 102, 241, 0.25);
444
+ color: #c7d2fe;
445
+ }
446
+
447
+ .file-branch-btn:hover {
448
+ background: rgba(16, 185, 129, 0.25) !important;
449
+ color: #6ee7b7 !important;
450
+ }
451
+
452
+ #btn-branch-branch {
453
+ color: #6ee7b7;
454
+ }
455
+
456
+ #btn-branch-branch:hover {
457
+ background: rgba(16, 185, 129, 0.2);
458
+ color: #a7f3d0;
459
+ }
460
+
461
+ .empty-tree-msg {
462
+ padding: 1.5rem 1rem;
463
+ text-align: center;
464
+ color: #94a3b8;
465
+ font-size: 0.8rem;
466
+ line-height: 1.5;
467
+ border: 1px dashed rgba(255, 255, 255, 0.1);
468
+ border-radius: 6px;
469
+ margin: 0.5rem 0.25rem;
470
+ }
471
+
472
+ .empty-tree-msg .highlight {
473
+ color: #38bdf8;
474
+ font-weight: 600;
475
+ }
476
+
477
+ /* ── View Mode Toolbar ── */
478
+ .explorer-mode-toolbar {
479
+ display: flex;
480
+ align-items: center;
481
+ justify-content: space-between;
482
+ padding: 0.35rem 0.5rem;
483
+ margin-bottom: 0.4rem;
484
+ background: rgba(255, 255, 255, 0.02);
485
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
486
+ flex: 0 0 auto !important;
487
+ flex-shrink: 0 !important;
488
+ }
489
+
490
+ .mode-toggle-group {
491
+ display: flex;
492
+ align-items: center;
493
+ background: rgba(0, 0, 0, 0.3);
494
+ border: 1px solid rgba(255, 255, 255, 0.08);
495
+ border-radius: 5px;
496
+ padding: 2px;
497
+ gap: 2px;
498
+ }
499
+
500
+ .mode-toggle-btn {
501
+ display: inline-flex;
502
+ align-items: center;
503
+ gap: 0.3rem;
504
+ background: transparent;
505
+ border: none;
506
+ border-radius: 3px;
507
+ color: #94a3b8;
508
+ font-size: 0.72rem;
509
+ font-weight: 500;
510
+ padding: 2px 7px;
511
+ cursor: pointer;
512
+ transition: all 0.15s ease;
513
+ user-select: none;
514
+ }
515
+
516
+ .mode-toggle-btn:hover {
517
+ color: #f1f5f9;
518
+ background: rgba(255, 255, 255, 0.06);
519
+ }
520
+
521
+ .mode-toggle-btn.active {
522
+ background: var(--branch-accent-translucent, rgba(124, 92, 252, 0.25));
523
+ color: #ffffff;
524
+ font-weight: 600;
525
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
526
+ }
527
+
528
+ .explorer-global-actions {
529
+ display: flex;
530
+ align-items: center;
531
+ gap: 4px;
532
+ }
533
+
534
+ /* ── Branch Dirty Badges ── */
535
+ .branch-dirty-badge {
536
+ display: inline-flex;
537
+ align-items: center;
538
+ justify-content: center;
539
+ font-size: 0.65rem;
540
+ font-family: ui-monospace, SFMono-Regular, monospace;
541
+ font-weight: 700;
542
+ padding: 1px 5px;
543
+ border-radius: 10px;
544
+ background: var(--branch-accent-translucent, rgba(234, 179, 8, 0.18));
545
+ color: var(--branch-accent-color, #fbbf24);
546
+ border: 1px solid var(--branch-accent-color, rgba(234, 179, 8, 0.4));
547
+ margin-left: auto;
548
+ margin-right: 0.25rem;
549
+ line-height: 1.2;
550
+ }
551
+
552
+ /* ── Composite Branch Tree Styles ── */
553
+ .composite-tree-container {
554
+ display: flex;
555
+ flex-direction: column;
556
+ width: 100%;
557
+ gap: 4px;
558
+ padding-bottom: 0.25rem;
559
+ flex: 1 1 0px;
560
+ min-height: 0;
561
+ overflow-y: auto;
562
+ }
563
+
564
+ .composite-branch-node {
565
+ display: flex;
566
+ flex-direction: column;
567
+ width: 100%;
568
+ position: relative;
569
+ box-sizing: border-box;
570
+ }
571
+
572
+ .composite-branch-header {
573
+ display: flex;
574
+ align-items: center;
575
+ gap: 0.35rem;
576
+ padding: 0.28rem 0.5rem;
577
+ border-radius: 6px;
578
+ background: rgba(255, 255, 255, 0.04);
579
+ border: 1px solid rgba(255, 255, 255, 0.08);
580
+ border-left: 3px solid var(--node-accent-color, #818cf8);
581
+ font-size: 0.82rem;
582
+ font-weight: 600;
583
+ color: #cbd5e1;
584
+ cursor: pointer;
585
+ transition: all 0.15s ease;
586
+ user-select: none;
587
+ box-sizing: border-box;
588
+ flex: 0 0 auto !important;
589
+ flex-shrink: 0 !important;
590
+ }
591
+
592
+ .composite-branch-header:hover {
593
+ background: var(--node-accent-translucent, rgba(255, 255, 255, 0.07));
594
+ border-color: var(--node-accent-color, rgba(124, 92, 252, 0.3));
595
+ color: #f1f5f9;
596
+ }
597
+
598
+ .composite-branch-header.active {
599
+ background: var(--node-accent-translucent, rgba(129, 140, 248, 0.15));
600
+ border-color: var(--node-accent-color, rgba(129, 140, 248, 0.4));
601
+ }
602
+
603
+ .composite-branch-header.collapsed .chevron-icon {
604
+ transform: rotate(-90deg);
605
+ }
606
+
607
+ .composite-branch-icon,
608
+ .composite-branch-header .branch-icon {
609
+ font-size: 0.85rem;
610
+ color: var(--node-accent-color, var(--branch-accent-color, #818cf8));
611
+ }
612
+
613
+ .composite-branch-title,
614
+ .composite-branch-header .branch-title {
615
+ color: var(--node-accent-color, var(--branch-accent-color, #e2e8f0));
616
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace;
617
+ font-size: 0.82rem;
618
+ font-weight: 600;
619
+ overflow: hidden;
620
+ text-overflow: ellipsis;
621
+ white-space: nowrap;
622
+ }
623
+
624
+ .composite-scoped-badge {
625
+ font-size: 0.6rem;
626
+ font-weight: 500;
627
+ background: rgba(99, 102, 241, 0.2);
628
+ color: #a5b4fc;
629
+ border: 1px solid rgba(99, 102, 241, 0.4);
630
+ border-radius: 3px;
631
+ padding: 1px 4px;
632
+ }
633
+
634
+ .composite-branch-body {
635
+ display: flex;
636
+ flex-direction: column;
637
+ width: 100%;
638
+ }
639
+
640
+ .composite-branch-files {
641
+ display: flex;
642
+ flex-direction: column;
643
+ margin-left: 1rem;
644
+ padding-left: 0.35rem;
645
+ border-left: 1px dashed rgba(255, 255, 255, 0.12);
646
+ }
647
+
648
+ .composite-branch-children {
649
+ display: flex;
650
+ flex-direction: column;
651
+ margin-left: 0.85rem;
652
+ gap: 3px;
653
+ margin-top: 3px;
654
+ }
655
+
656
+ /* ── DRY Command Menu Popup ── */
657
+ .command-menu-popup {
658
+ position: absolute;
659
+ min-width: 175px;
660
+ max-width: 250px;
661
+ background: #11111b;
662
+ border: 1px solid rgba(255, 255, 255, 0.14);
663
+ border-radius: 6px;
664
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.65);
665
+ padding: 4px;
666
+ z-index: 1200;
667
+ display: flex;
668
+ flex-direction: column;
669
+ gap: 2px;
670
+ animation: menuFadeIn 0.1s ease-out;
671
+ }
672
+
673
+ @keyframes menuFadeIn {
674
+ from { opacity: 0; transform: translateY(-3px); }
675
+ to { opacity: 1; transform: translateY(0); }
676
+ }
677
+
678
+ .command-menu-item {
679
+ display: flex;
680
+ align-items: center;
681
+ gap: 0.5rem;
682
+ padding: 0.38rem 0.55rem;
683
+ border-radius: 4px;
684
+ font-size: 0.78rem;
685
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace;
686
+ color: #cbd5e1;
687
+ cursor: pointer;
688
+ transition: all 0.12s ease;
689
+ user-select: none;
690
+ }
691
+
692
+ .command-menu-item:hover {
693
+ background: rgba(255, 255, 255, 0.09);
694
+ color: #ffffff;
695
+ }
696
+
697
+ .command-menu-item.danger:hover {
698
+ background: rgba(239, 68, 68, 0.15);
699
+ color: #ef4444;
700
+ }
701
+
702
+ .command-menu-item .cmd-icon {
703
+ font-size: 0.85rem;
704
+ line-height: 1;
705
+ width: 18px;
706
+ display: flex;
707
+ align-items: center;
708
+ justify-content: center;
709
+ flex-shrink: 0;
710
+ }
711
+
712
+ .command-menu-item .cmd-label {
713
+ flex: 1;
714
+ overflow: hidden;
715
+ text-overflow: ellipsis;
716
+ white-space: nowrap;
717
+ }
718
+
719
+
720
+