buddy-builder 1.4.1

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.
@@ -0,0 +1,678 @@
1
+ /* ═══ Sidebar ═════════════════════════════════════════════════ */
2
+
3
+ #sidebar {
4
+ background: var(--bg-sidebar);
5
+ flex-shrink: 0;
6
+ display: flex;
7
+ flex-direction: column;
8
+ border-right: 1px solid var(--border);
9
+ position: relative;
10
+ }
11
+
12
+ /* ─── Sidebar header (label + new button) ─── */
13
+
14
+ #sidebar-header {
15
+ display: flex;
16
+ align-items: center;
17
+ justify-content: space-between;
18
+ padding: 8px 10px 4px 14px;
19
+ flex-shrink: 0;
20
+ }
21
+
22
+ .sidebar-header-label {
23
+ font-size: 13px;
24
+ font-weight: 700;
25
+ color: var(--text-secondary);
26
+ letter-spacing: -0.01em;
27
+ }
28
+
29
+ .sidebar-header-actions {
30
+ display: flex;
31
+ gap: 4px;
32
+ align-items: center;
33
+ }
34
+
35
+ .sidebar-new-btn,
36
+ .sidebar-browse-btn {
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ width: 28px;
41
+ height: 28px;
42
+ border: none;
43
+ border-radius: var(--radius);
44
+ cursor: pointer;
45
+ transition: filter 0.12s, transform 0.1s;
46
+ }
47
+
48
+ .sidebar-new-btn {
49
+ background: var(--accent);
50
+ color: #fff;
51
+ }
52
+
53
+ .sidebar-browse-btn {
54
+ background: var(--bg-hover);
55
+ color: var(--text-secondary);
56
+ }
57
+
58
+ .sidebar-new-btn:hover,
59
+ .sidebar-browse-btn:hover {
60
+ filter: brightness(1.15);
61
+ }
62
+
63
+ .sidebar-browse-btn:hover {
64
+ color: var(--text-primary);
65
+ }
66
+
67
+ .sidebar-new-btn:active,
68
+ .sidebar-browse-btn:active {
69
+ transform: scale(0.93);
70
+ }
71
+
72
+ /* ─── Sidebar search ─── */
73
+
74
+ #sidebar-search {
75
+ position: relative;
76
+ padding: 8px 10px 4px;
77
+ flex-shrink: 0;
78
+ }
79
+
80
+ .sidebar-search-input {
81
+ width: 100%;
82
+ padding: 6px 28px 6px 10px;
83
+ border-radius: var(--radius);
84
+ border: 1px solid var(--border);
85
+ background: var(--bg-2);
86
+ color: var(--text);
87
+ font-family: inherit;
88
+ font-size: 12px;
89
+ outline: none;
90
+ transition: border-color 0.15s;
91
+ }
92
+
93
+ .sidebar-search-input:focus {
94
+ border-color: var(--accent);
95
+ }
96
+
97
+ .sidebar-search-input::placeholder {
98
+ color: var(--text-muted);
99
+ }
100
+
101
+ .sidebar-search-clear {
102
+ position: absolute;
103
+ right: 14px;
104
+ top: 50%;
105
+ transform: translateY(-50%);
106
+ background: none;
107
+ border: none;
108
+ color: var(--text-muted);
109
+ cursor: pointer;
110
+ font-size: 14px;
111
+ line-height: 1;
112
+ padding: 2px 4px;
113
+ }
114
+
115
+ .sidebar-search-clear:hover {
116
+ color: var(--text);
117
+ }
118
+
119
+ /* ─── Two-panel layout (Live + History) ─── */
120
+
121
+ #sidebar-panels {
122
+ flex: 1;
123
+ display: flex;
124
+ flex-direction: column;
125
+ min-height: 0;
126
+ overflow: hidden;
127
+ }
128
+
129
+ .sidebar-panel {
130
+ display: flex;
131
+ flex-direction: column;
132
+ min-height: 0;
133
+ overflow: hidden;
134
+ }
135
+
136
+ .panel-label {
137
+ display: flex;
138
+ align-items: center;
139
+ justify-content: space-between;
140
+ padding: 5px 12px 3px;
141
+ font-size: 10px;
142
+ font-weight: 700;
143
+ text-transform: uppercase;
144
+ letter-spacing: 0.06em;
145
+ color: var(--text-muted);
146
+ flex-shrink: 0;
147
+ border-bottom: 1px solid var(--border-subtle);
148
+ }
149
+
150
+ .panel-view-toggle {
151
+ display: flex;
152
+ align-items: center;
153
+ justify-content: center;
154
+ width: 20px;
155
+ height: 20px;
156
+ border: none;
157
+ background: transparent;
158
+ color: var(--text-muted);
159
+ cursor: pointer;
160
+ border-radius: var(--radius-sm);
161
+ transition: background 0.1s, color 0.1s;
162
+ }
163
+
164
+ .panel-view-toggle:hover {
165
+ background: var(--hover-bg);
166
+ color: var(--text);
167
+ }
168
+
169
+ .panel-scroll {
170
+ flex: 1;
171
+ overflow-y: auto;
172
+ padding: 4px 0;
173
+ }
174
+
175
+ .panel-scroll::-webkit-scrollbar { width: 4px; }
176
+
177
+ .panel-empty {
178
+ padding: 12px 14px;
179
+ font-size: 12px;
180
+ color: var(--text-muted);
181
+ font-style: italic;
182
+ text-align: center;
183
+ }
184
+
185
+ /* ─── Drag bar between panels ─── */
186
+
187
+ .sidebar-drag {
188
+ height: 5px;
189
+ flex-shrink: 0;
190
+ cursor: row-resize;
191
+ background: var(--border-subtle);
192
+ position: relative;
193
+ transition: background 0.15s;
194
+ }
195
+
196
+ .sidebar-drag::after {
197
+ content: "";
198
+ position: absolute;
199
+ left: 50%;
200
+ top: 50%;
201
+ transform: translate(-50%, -50%);
202
+ width: 24px;
203
+ height: 2px;
204
+ border-radius: 1px;
205
+ background: var(--text-muted);
206
+ opacity: 0.3;
207
+ transition: opacity 0.15s;
208
+ }
209
+
210
+ .sidebar-drag:hover {
211
+ background: var(--border);
212
+ }
213
+
214
+ .sidebar-drag:hover::after {
215
+ opacity: 0.6;
216
+ }
217
+
218
+ /* ─── Sidebar horizontal resize handle ─── */
219
+
220
+ .sidebar-resize-handle {
221
+ position: absolute;
222
+ top: 0;
223
+ right: -3px;
224
+ width: 6px;
225
+ height: 100%;
226
+ cursor: col-resize;
227
+ z-index: 10;
228
+ }
229
+ .sidebar-resize-handle:hover {
230
+ background: var(--accent);
231
+ opacity: 0.3;
232
+ }
233
+
234
+ /* ─── Session items ─── */
235
+
236
+ .session-time {
237
+ margin-left: auto;
238
+ font-size: 10px;
239
+ color: var(--text-muted);
240
+ opacity: 0.6;
241
+ white-space: nowrap;
242
+ flex-shrink: 0;
243
+ }
244
+
245
+ .session-item {
246
+ display: flex;
247
+ align-items: center;
248
+ gap: 10px;
249
+ width: 100%;
250
+ padding: 8px 14px;
251
+ border: none;
252
+ background: transparent;
253
+ color: var(--text-muted);
254
+ cursor: pointer;
255
+ font-size: 13px;
256
+ font-family: inherit;
257
+ text-align: left;
258
+ transition: background 0.12s, color 0.12s;
259
+ }
260
+
261
+ .session-item:hover {
262
+ background: var(--hover-bg);
263
+ color: var(--text-secondary);
264
+ }
265
+
266
+ .session-item.active {
267
+ background: var(--active-bg);
268
+ color: #fff;
269
+ }
270
+
271
+ .session-dot {
272
+ width: 8px;
273
+ height: 8px;
274
+ border-radius: 50%;
275
+ flex-shrink: 0;
276
+ }
277
+
278
+ .session-dot.state-idle { background: var(--success); }
279
+ .session-dot.state-busy { background: var(--warning); animation: pulse 1.5s ease-in-out infinite; }
280
+ .session-dot.state-dead { background: var(--text-muted); opacity: 0.5; }
281
+
282
+ .session-label {
283
+ flex: 1;
284
+ overflow: hidden;
285
+ text-overflow: ellipsis;
286
+ white-space: nowrap;
287
+ }
288
+
289
+ /* ─── Favorite star ─── */
290
+
291
+ .session-fav {
292
+ font-size: 12px;
293
+ color: var(--text-muted);
294
+ flex-shrink: 0;
295
+ cursor: pointer;
296
+ opacity: 0;
297
+ transition: opacity 0.12s, color 0.12s, transform 0.1s;
298
+ }
299
+
300
+ .session-item:hover .session-fav {
301
+ opacity: 0.5;
302
+ }
303
+
304
+ .session-fav:hover {
305
+ opacity: 1 !important;
306
+ transform: scale(1.2);
307
+ }
308
+
309
+ .session-fav.starred {
310
+ color: #f5c518;
311
+ opacity: 1;
312
+ }
313
+
314
+ /* ─── Pinned sessions ─── */
315
+
316
+ .session-pinned {
317
+ background: rgba(245, 197, 24, 0.04);
318
+ }
319
+
320
+ .pinned-divider {
321
+ height: 1px;
322
+ margin: 4px 12px;
323
+ background: var(--border-subtle);
324
+ }
325
+
326
+ .session-close {
327
+ opacity: 0;
328
+ font-size: 15px;
329
+ line-height: 1;
330
+ padding: 0 3px;
331
+ border-radius: 3px;
332
+ color: var(--text-muted);
333
+ transition: opacity 0.15s, background 0.1s;
334
+ }
335
+
336
+ .session-item:hover .session-close { opacity: 0.5; }
337
+ .session-close:hover { opacity: 1 !important; background: var(--bg-4); color: var(--error); }
338
+
339
+ .session-kill {
340
+ opacity: 0;
341
+ font-size: 10px;
342
+ line-height: 1;
343
+ padding: 2px 4px;
344
+ border-radius: 3px;
345
+ color: var(--error);
346
+ transition: opacity 0.15s, background 0.1s;
347
+ }
348
+
349
+ .session-item:hover .session-kill { opacity: 0.6; }
350
+ .session-kill:hover { opacity: 1 !important; background: rgba(224, 30, 90, 0.15); }
351
+
352
+ .session-item.session-dead .session-label {
353
+ font-style: italic;
354
+ opacity: 0.6;
355
+ }
356
+
357
+ .session-item.popped-out {
358
+ opacity: 0.55;
359
+ }
360
+ .session-item.popped-out:hover {
361
+ opacity: 0.75;
362
+ }
363
+ .popout-indicator {
364
+ font-size: 11px;
365
+ color: var(--accent);
366
+ margin-left: -4px;
367
+ flex-shrink: 0;
368
+ }
369
+
370
+ /* ─── Directory tree (sidebar) ─── */
371
+
372
+ .dir-tree-prefix {
373
+ padding: 4px 12px;
374
+ font-size: 10px;
375
+ color: var(--text-muted);
376
+ font-family: var(--font-mono, monospace);
377
+ overflow: hidden;
378
+ text-overflow: ellipsis;
379
+ white-space: nowrap;
380
+ opacity: 0.5;
381
+ border-bottom: 1px solid var(--border-subtle, rgba(255,255,255,0.06));
382
+ }
383
+
384
+ .dir-tree-header {
385
+ display: flex;
386
+ align-items: center;
387
+ gap: 5px;
388
+ width: 100%;
389
+ padding: 4px 12px;
390
+ border: none;
391
+ background: transparent;
392
+ color: var(--text-muted);
393
+ cursor: pointer;
394
+ font-size: 12px;
395
+ font-weight: 500;
396
+ font-family: inherit;
397
+ text-align: left;
398
+ transition: color 0.15s, background 0.12s;
399
+ }
400
+
401
+ .dir-tree-header:hover {
402
+ color: var(--text-secondary);
403
+ background: var(--hover-bg, rgba(255,255,255,0.04));
404
+ }
405
+
406
+ .dir-tree-toggle {
407
+ display: inline-flex;
408
+ align-items: center;
409
+ justify-content: center;
410
+ width: 14px;
411
+ font-size: 13px;
412
+ font-weight: 600;
413
+ flex-shrink: 0;
414
+ color: var(--text-muted);
415
+ opacity: 0.7;
416
+ }
417
+
418
+ .dir-tree-toggle-spacer {
419
+ display: inline-block;
420
+ width: 14px;
421
+ flex-shrink: 0;
422
+ }
423
+
424
+ .dir-tree-name {
425
+ flex: 1;
426
+ overflow: hidden;
427
+ text-overflow: ellipsis;
428
+ white-space: nowrap;
429
+ font-family: var(--font-mono, monospace);
430
+ font-size: 12px;
431
+ }
432
+
433
+ .dir-tree-count {
434
+ font-size: 10px;
435
+ color: var(--text-muted);
436
+ opacity: 0.5;
437
+ min-width: 16px;
438
+ text-align: right;
439
+ }
440
+
441
+ .dir-tree-new {
442
+ display: none;
443
+ align-items: center;
444
+ justify-content: center;
445
+ width: 18px;
446
+ height: 18px;
447
+ border-radius: 4px;
448
+ font-size: 14px;
449
+ font-weight: 600;
450
+ color: var(--text-muted);
451
+ flex-shrink: 0;
452
+ transition: color 0.12s, background 0.12s;
453
+ }
454
+
455
+ .dir-tree-header:hover .dir-tree-new {
456
+ display: inline-flex;
457
+ }
458
+
459
+ .dir-tree-header:hover .dir-tree-count {
460
+ display: none;
461
+ }
462
+
463
+ .dir-tree-new:hover {
464
+ color: var(--text);
465
+ background: rgba(255,255,255,0.1);
466
+ }
467
+
468
+ /* Inline edit input for session name */
469
+ .session-label-input {
470
+ flex: 1;
471
+ min-width: 0;
472
+ padding: 1px 4px;
473
+ border: 1px solid var(--accent);
474
+ border-radius: 3px;
475
+ background: var(--bg-2);
476
+ color: var(--text);
477
+ font-family: inherit;
478
+ font-size: 13px;
479
+ outline: none;
480
+ box-shadow: 0 0 0 1px var(--accent);
481
+ }
482
+
483
+ /* ─── Sidebar actions (bottom bar) ─── */
484
+
485
+ #sidebar-actions {
486
+ display: flex;
487
+ gap: 6px;
488
+ padding: 10px 12px;
489
+ border-top: 1px solid var(--border-subtle);
490
+ }
491
+
492
+ .split-button {
493
+ position: relative;
494
+ display: flex;
495
+ border-radius: var(--radius);
496
+ overflow: visible;
497
+ }
498
+
499
+ .split-main {
500
+ padding: 5px 10px;
501
+ border-radius: var(--radius) 0 0 var(--radius);
502
+ background: var(--accent);
503
+ border: none;
504
+ color: #fff;
505
+ cursor: pointer;
506
+ font-size: 13px;
507
+ font-weight: 600;
508
+ font-family: inherit;
509
+ transition: opacity 0.15s;
510
+ white-space: nowrap;
511
+ }
512
+
513
+ .split-main:hover { opacity: 0.85; }
514
+
515
+ .split-arrow {
516
+ padding: 5px 6px;
517
+ border-radius: 0 var(--radius) var(--radius) 0;
518
+ background: var(--accent);
519
+ border: none;
520
+ border-left: 1px solid rgba(255,255,255,0.25);
521
+ color: #fff;
522
+ cursor: pointer;
523
+ font-size: 11px;
524
+ font-family: inherit;
525
+ transition: opacity 0.15s;
526
+ }
527
+
528
+ .split-arrow:hover { opacity: 0.85; }
529
+
530
+ .split-dropdown {
531
+ position: absolute;
532
+ bottom: calc(100% + 4px);
533
+ right: 0;
534
+ background: var(--bg-1);
535
+ border: 1px solid var(--border);
536
+ border-radius: var(--radius);
537
+ box-shadow: 0 4px 12px rgba(0,0,0,0.3);
538
+ z-index: 100;
539
+ min-width: 150px;
540
+ }
541
+
542
+ .split-dropdown button {
543
+ display: block;
544
+ width: 100%;
545
+ padding: 8px 12px;
546
+ background: none;
547
+ border: none;
548
+ color: var(--text-primary);
549
+ font-size: 13px;
550
+ font-family: inherit;
551
+ cursor: pointer;
552
+ text-align: left;
553
+ white-space: nowrap;
554
+ }
555
+
556
+ .split-dropdown button:hover {
557
+ background: var(--bg-2);
558
+ }
559
+
560
+ #settings-btn {
561
+ display: flex;
562
+ align-items: center;
563
+ gap: 6px;
564
+ width: 100%;
565
+ padding: 10px 14px;
566
+ border: none;
567
+ background: transparent;
568
+ color: var(--text-muted);
569
+ cursor: pointer;
570
+ font-size: 13px;
571
+ font-family: inherit;
572
+ border-top: 1px solid var(--border-subtle);
573
+ transition: color 0.15s, background 0.15s;
574
+ }
575
+
576
+ #settings-btn:hover { color: var(--text); background: var(--hover-bg); }
577
+
578
+ /* ─── Naming modal ─── */
579
+
580
+ .naming-modal-overlay {
581
+ position: fixed;
582
+ inset: 0;
583
+ background: rgba(0,0,0,0.5);
584
+ display: flex;
585
+ align-items: center;
586
+ justify-content: center;
587
+ z-index: 1000;
588
+ }
589
+
590
+ .naming-modal {
591
+ background: var(--bg-1);
592
+ border: 1px solid var(--border);
593
+ border-radius: 10px;
594
+ padding: 20px 24px;
595
+ width: 380px;
596
+ max-width: 90vw;
597
+ box-shadow: 0 8px 32px rgba(0,0,0,0.4);
598
+ }
599
+
600
+ .naming-modal-title {
601
+ font-size: 15px;
602
+ font-weight: 600;
603
+ color: var(--text-primary);
604
+ margin-bottom: 12px;
605
+ }
606
+
607
+ .naming-modal-input {
608
+ width: 100%;
609
+ padding: 8px 10px;
610
+ border-radius: var(--radius);
611
+ border: 1px solid var(--border);
612
+ background: var(--bg-0);
613
+ color: var(--text-primary);
614
+ font-size: 14px;
615
+ font-family: inherit;
616
+ outline: none;
617
+ box-sizing: border-box;
618
+ }
619
+
620
+ .naming-modal-input:focus {
621
+ border-color: var(--accent);
622
+ }
623
+
624
+ .naming-modal-preview {
625
+ margin-top: 8px;
626
+ display: flex;
627
+ flex-direction: column;
628
+ gap: 2px;
629
+ }
630
+
631
+ .naming-folder-name {
632
+ font-size: 13px;
633
+ font-weight: 600;
634
+ color: var(--accent);
635
+ font-family: var(--font-mono, monospace);
636
+ }
637
+
638
+ .naming-full-path {
639
+ font-size: 11px;
640
+ color: var(--text-muted);
641
+ white-space: nowrap;
642
+ overflow: hidden;
643
+ text-overflow: ellipsis;
644
+ }
645
+
646
+ .naming-modal-actions {
647
+ display: flex;
648
+ justify-content: flex-end;
649
+ gap: 8px;
650
+ margin-top: 16px;
651
+ }
652
+
653
+ .naming-btn {
654
+ padding: 6px 16px;
655
+ border-radius: var(--radius);
656
+ border: 1px solid var(--border);
657
+ font-size: 13px;
658
+ font-family: inherit;
659
+ cursor: pointer;
660
+ transition: background 0.15s, opacity 0.15s;
661
+ }
662
+
663
+ .naming-btn-cancel {
664
+ background: transparent;
665
+ color: var(--text-secondary);
666
+ }
667
+
668
+ .naming-btn-cancel:hover { background: var(--bg-2); }
669
+
670
+ .naming-btn-ok {
671
+ background: var(--accent);
672
+ border-color: var(--accent);
673
+ color: #fff;
674
+ font-weight: 600;
675
+ }
676
+
677
+ .naming-btn-ok:hover { opacity: 0.85; }
678
+ .naming-btn-ok:disabled { opacity: 0.4; cursor: default; }