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,539 @@
1
+ /* ═══ Home View ═══════════════════════════════════════════════ */
2
+
3
+ #home-view {
4
+ flex: 1;
5
+ display: flex;
6
+ justify-content: center;
7
+ overflow-y: auto;
8
+ background: var(--bg-0);
9
+ padding: 0;
10
+ }
11
+
12
+ .home-content {
13
+ width: 100%;
14
+ max-width: 720px;
15
+ display: flex;
16
+ flex-direction: column;
17
+ min-height: 0;
18
+ padding: 16px 20px 20px;
19
+ }
20
+
21
+ /* ─── Toolbar (search + new + settings) ─── */
22
+
23
+ .home-toolbar {
24
+ display: flex;
25
+ gap: 8px;
26
+ align-items: center;
27
+ flex-shrink: 0;
28
+ margin-bottom: 16px;
29
+ }
30
+
31
+ .home-search-wrap {
32
+ flex: 1;
33
+ position: relative;
34
+ display: flex;
35
+ align-items: center;
36
+ }
37
+
38
+ .home-search-icon {
39
+ position: absolute;
40
+ left: 10px;
41
+ color: var(--text-muted);
42
+ pointer-events: none;
43
+ }
44
+
45
+ .home-search-input {
46
+ width: 100%;
47
+ padding: 9px 12px 9px 32px;
48
+ border: 1px solid var(--border);
49
+ border-radius: var(--radius-lg);
50
+ background: var(--bg-2);
51
+ color: var(--text);
52
+ font-size: 13px;
53
+ font-family: inherit;
54
+ outline: none;
55
+ transition: border-color 0.15s, box-shadow 0.15s;
56
+ }
57
+
58
+ .home-search-input:focus {
59
+ border-color: var(--accent);
60
+ box-shadow: 0 0 0 1px var(--accent);
61
+ }
62
+
63
+ .home-search-clear {
64
+ position: absolute;
65
+ right: 8px;
66
+ top: 50%;
67
+ transform: translateY(-50%);
68
+ background: none;
69
+ border: none;
70
+ color: var(--text-muted);
71
+ cursor: pointer;
72
+ font-size: 16px;
73
+ padding: 0 4px;
74
+ }
75
+
76
+ .home-new-split {
77
+ flex-shrink: 0;
78
+ display: flex;
79
+ align-items: stretch;
80
+ border-radius: var(--radius-lg);
81
+ overflow: hidden;
82
+ }
83
+
84
+ .home-new-btn {
85
+ display: flex;
86
+ align-items: center;
87
+ gap: 6px;
88
+ padding: 9px 16px;
89
+ border: none;
90
+ background: var(--accent);
91
+ color: #fff;
92
+ font-size: 13px;
93
+ font-weight: 600;
94
+ font-family: inherit;
95
+ cursor: pointer;
96
+ border-radius: var(--radius-lg) 0 0 var(--radius-lg);
97
+ transition: filter 0.15s, transform 0.1s;
98
+ }
99
+
100
+ .home-new-btn:hover { filter: brightness(1.1); }
101
+ .home-new-btn:active { transform: scale(0.97); }
102
+
103
+ .home-new-arrow {
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: center;
107
+ padding: 0 8px;
108
+ border: none;
109
+ border-left: 1px solid rgba(255, 255, 255, 0.2);
110
+ background: var(--accent);
111
+ color: #fff;
112
+ cursor: pointer;
113
+ border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
114
+ transition: filter 0.15s;
115
+ }
116
+
117
+ .home-new-arrow:hover { filter: brightness(1.2); }
118
+ .home-new-arrow:active { filter: brightness(0.95); }
119
+
120
+ .home-settings-btn {
121
+ flex-shrink: 0;
122
+ display: flex;
123
+ align-items: center;
124
+ justify-content: center;
125
+ width: 36px;
126
+ height: 36px;
127
+ border-radius: var(--radius-lg);
128
+ border: 1px solid var(--border);
129
+ background: var(--bg-2);
130
+ color: var(--text-muted);
131
+ cursor: pointer;
132
+ transition: color 0.15s, border-color 0.15s;
133
+ }
134
+
135
+ .home-settings-btn:hover { color: var(--text); border-color: var(--border-strong); }
136
+
137
+ /* ─── Session grid ─── */
138
+
139
+ .home-grid {
140
+ flex: 1;
141
+ overflow-y: auto;
142
+ display: flex;
143
+ flex-direction: column;
144
+ gap: 4px;
145
+ }
146
+
147
+ .home-section {
148
+ display: flex;
149
+ flex-direction: column;
150
+ gap: 4px;
151
+ }
152
+
153
+ .home-section-label {
154
+ font-size: 10px;
155
+ font-weight: 700;
156
+ text-transform: uppercase;
157
+ letter-spacing: 0.06em;
158
+ color: var(--text-muted);
159
+ padding: 12px 12px 4px;
160
+ }
161
+
162
+ .home-empty {
163
+ padding: 60px 20px;
164
+ text-align: center;
165
+ color: var(--text-muted);
166
+ font-size: 14px;
167
+ }
168
+
169
+ /* ─── Session card (inline) ────────────────────────────────────── */
170
+
171
+ .hcard {
172
+ display: flex;
173
+ flex-direction: column;
174
+ gap: 0;
175
+ padding: 12px 14px;
176
+ border: 1px solid var(--border);
177
+ border-radius: var(--radius-lg);
178
+ background: var(--bg-2);
179
+ cursor: pointer;
180
+ transition: background 0.12s, border-color 0.12s, transform 0.1s;
181
+ }
182
+
183
+ .hcard:hover {
184
+ background: var(--bg-3);
185
+ border-color: var(--border-strong);
186
+ }
187
+
188
+ .hcard:active { transform: scale(0.995); }
189
+
190
+ .hcard-dead { opacity: 0.75; }
191
+ .hcard-dead:hover { opacity: 1; }
192
+
193
+ .hcard-busy { border-left: 3px solid var(--warning); }
194
+
195
+ .hcard-popout { opacity: 0.6; }
196
+ .hcard-popout:hover { opacity: 0.85; }
197
+
198
+ .hcard-top {
199
+ display: flex;
200
+ align-items: flex-start;
201
+ gap: 10px;
202
+ }
203
+
204
+ .hcard-status {
205
+ padding-top: 5px;
206
+ flex-shrink: 0;
207
+ }
208
+
209
+ .hcard-dot {
210
+ display: block;
211
+ width: 8px;
212
+ height: 8px;
213
+ border-radius: 50%;
214
+ }
215
+ .hcard-dot.state-idle { background: var(--success); }
216
+ .hcard-dot.state-busy { background: var(--warning); animation: pulse 1.5s ease-in-out infinite; }
217
+ .hcard-dot.state-dead { background: var(--text-muted); opacity: 0.4; }
218
+
219
+ .hcard-info {
220
+ flex: 1;
221
+ min-width: 0;
222
+ }
223
+
224
+ .hcard-name-row {
225
+ display: flex;
226
+ align-items: center;
227
+ gap: 8px;
228
+ }
229
+
230
+ .hcard-name {
231
+ font-size: 14px;
232
+ font-weight: 600;
233
+ color: var(--text);
234
+ overflow: hidden;
235
+ text-overflow: ellipsis;
236
+ white-space: nowrap;
237
+ cursor: default;
238
+ }
239
+
240
+ .hcard-name-input {
241
+ font-size: 14px;
242
+ font-weight: 600;
243
+ color: var(--text);
244
+ background: var(--bg-2);
245
+ border: 1px solid var(--accent);
246
+ border-radius: 4px;
247
+ padding: 1px 4px;
248
+ outline: none;
249
+ width: 100%;
250
+ font-family: inherit;
251
+ }
252
+
253
+ .hcard-btn-rename {
254
+ display: flex;
255
+ align-items: center;
256
+ justify-content: center;
257
+ padding: 2px 4px !important;
258
+ }
259
+
260
+ .hcard-badge {
261
+ font-size: 10px;
262
+ padding: 1px 6px;
263
+ border-radius: 3px;
264
+ background: var(--accent-bg);
265
+ color: var(--accent);
266
+ font-weight: 600;
267
+ flex-shrink: 0;
268
+ }
269
+
270
+ .hcard-cwd {
271
+ font-size: 11px;
272
+ color: var(--text-muted);
273
+ font-family: var(--font-mono);
274
+ overflow: hidden;
275
+ text-overflow: ellipsis;
276
+ white-space: nowrap;
277
+ margin-top: 2px;
278
+ }
279
+
280
+ .hcard-meta {
281
+ flex-shrink: 0;
282
+ display: flex;
283
+ flex-direction: column;
284
+ align-items: flex-end;
285
+ gap: 2px;
286
+ }
287
+
288
+ .hcard-time {
289
+ font-size: 11px;
290
+ color: var(--text-muted);
291
+ }
292
+
293
+ .hcard-model {
294
+ font-size: 9px;
295
+ font-family: var(--font-mono);
296
+ color: var(--text-muted);
297
+ padding: 1px 5px;
298
+ background: var(--bg-4);
299
+ border-radius: 3px;
300
+ }
301
+
302
+ /* ─── Card actions (shown on hover) ─── */
303
+
304
+ .hcard-actions {
305
+ display: flex;
306
+ align-items: center;
307
+ gap: 6px;
308
+ margin-top: 0;
309
+ max-height: 0;
310
+ overflow: hidden;
311
+ opacity: 0;
312
+ transition: max-height 0.2s ease, opacity 0.15s, margin-top 0.2s;
313
+ }
314
+
315
+ .hcard:hover .hcard-actions {
316
+ max-height: 40px;
317
+ opacity: 1;
318
+ margin-top: 10px;
319
+ }
320
+
321
+ .hcard-star {
322
+ background: none;
323
+ border: none;
324
+ font-size: 15px;
325
+ cursor: pointer;
326
+ color: var(--text-muted);
327
+ opacity: 0.3;
328
+ padding: 2px 4px;
329
+ flex-shrink: 0;
330
+ transition: color 0.15s, transform 0.15s, opacity 0.15s;
331
+ }
332
+ .hcard-star:hover { color: var(--text); opacity: 1; transform: scale(1.2); }
333
+ .hcard-star.starred { color: var(--warning); opacity: 1; }
334
+
335
+ .hcard-btn {
336
+ padding: 4px 12px;
337
+ border: 1px solid var(--border);
338
+ border-radius: var(--radius);
339
+ background: var(--bg-2);
340
+ color: var(--text-secondary);
341
+ font-size: 11px;
342
+ font-weight: 600;
343
+ font-family: inherit;
344
+ cursor: pointer;
345
+ transition: background 0.12s, border-color 0.12s;
346
+ }
347
+
348
+ .hcard-btn:hover { background: var(--bg-4); border-color: var(--text-muted); }
349
+
350
+ .hcard-btn-primary {
351
+ background: var(--accent);
352
+ color: #fff;
353
+ border-color: var(--accent);
354
+ }
355
+ .hcard-btn-primary:hover { filter: brightness(1.1); }
356
+
357
+ .hcard-btn-muted { color: var(--text-muted); }
358
+
359
+ .hcard-btn-danger {
360
+ color: var(--error);
361
+ border-color: transparent;
362
+ background: transparent;
363
+ margin-left: auto;
364
+ }
365
+ .hcard-btn-danger:hover {
366
+ background: color-mix(in srgb, var(--error) 12%, transparent);
367
+ border-color: var(--error);
368
+ }
369
+
370
+ .hcard-btn-confirm-delete {
371
+ color: #fff;
372
+ background: var(--error);
373
+ border-color: var(--error);
374
+ margin-left: auto;
375
+ animation: confirm-pulse 0.3s ease;
376
+ }
377
+ .hcard-btn-confirm-delete:hover {
378
+ filter: brightness(1.15);
379
+ }
380
+
381
+ @keyframes confirm-pulse {
382
+ 0% { transform: scale(1); }
383
+ 50% { transform: scale(1.08); }
384
+ 100% { transform: scale(1); }
385
+ }
386
+
387
+ /* ─── Session action buttons (shared) ─── */
388
+
389
+ .session-action-btns {
390
+ display: flex;
391
+ align-items: center;
392
+ gap: 6px;
393
+ }
394
+
395
+ .sa-btn {
396
+ display: inline-flex;
397
+ align-items: center;
398
+ gap: 5px;
399
+ padding: 5px 12px;
400
+ border: 1px solid var(--border);
401
+ border-radius: var(--radius);
402
+ background: var(--bg-2);
403
+ color: var(--text-secondary);
404
+ font-size: 12px;
405
+ font-weight: 500;
406
+ cursor: pointer;
407
+ transition: background 0.15s, border-color 0.15s, color 0.15s;
408
+ white-space: nowrap;
409
+ }
410
+ .sa-btn svg { flex-shrink: 0; }
411
+ .sa-btn:hover {
412
+ background: var(--hover-bg);
413
+ border-color: var(--border-strong);
414
+ color: var(--text);
415
+ }
416
+ .sa-btn-primary {
417
+ background: var(--accent);
418
+ border-color: var(--accent);
419
+ color: #fff;
420
+ }
421
+ .sa-btn-primary:hover {
422
+ background: color-mix(in srgb, var(--accent) 85%, #fff);
423
+ border-color: color-mix(in srgb, var(--accent) 85%, #fff);
424
+ color: #fff;
425
+ }
426
+
427
+ /* ─── View toggle (list/tree) ─── */
428
+
429
+ .home-view-toggle {
430
+ flex-shrink: 0;
431
+ display: flex;
432
+ align-items: center;
433
+ justify-content: center;
434
+ width: 36px;
435
+ height: 36px;
436
+ border-radius: var(--radius-lg);
437
+ border: 1px solid var(--border);
438
+ background: var(--bg-2);
439
+ color: var(--text-muted);
440
+ cursor: pointer;
441
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
442
+ }
443
+
444
+ .home-view-toggle:hover { color: var(--text); border-color: var(--border-strong); }
445
+ .home-view-toggle.active { color: var(--accent); border-color: var(--accent); background: var(--accent-bg); }
446
+
447
+ /* ─── Directory tree view ─── */
448
+
449
+ .htree-prefix {
450
+ font-size: 10px;
451
+ font-family: var(--font-mono);
452
+ color: var(--text-muted);
453
+ padding: 4px 14px;
454
+ opacity: 0.6;
455
+ }
456
+
457
+ .htree-node {
458
+ display: flex;
459
+ flex-direction: column;
460
+ }
461
+
462
+ .htree-header {
463
+ display: flex;
464
+ align-items: center;
465
+ gap: 6px;
466
+ width: 100%;
467
+ padding: 8px 14px;
468
+ border: none;
469
+ background: transparent;
470
+ color: var(--text-secondary);
471
+ cursor: pointer;
472
+ font-size: 13px;
473
+ font-weight: 600;
474
+ font-family: inherit;
475
+ text-align: left;
476
+ transition: color 0.15s, background 0.12s;
477
+ border-radius: var(--radius);
478
+ }
479
+
480
+ .htree-header:hover {
481
+ color: var(--text);
482
+ background: var(--hover-bg);
483
+ }
484
+
485
+ .htree-toggle {
486
+ font-size: 10px;
487
+ width: 14px;
488
+ text-align: center;
489
+ color: var(--text-muted);
490
+ flex-shrink: 0;
491
+ }
492
+
493
+ .htree-folder-icon {
494
+ color: var(--accent);
495
+ flex-shrink: 0;
496
+ }
497
+
498
+ .htree-name {
499
+ flex: 1;
500
+ overflow: hidden;
501
+ text-overflow: ellipsis;
502
+ white-space: nowrap;
503
+ font-family: var(--font-mono);
504
+ font-size: 13px;
505
+ font-weight: 500;
506
+ }
507
+
508
+ .htree-count {
509
+ font-size: 10px;
510
+ color: var(--text-muted);
511
+ opacity: 0.6;
512
+ flex-shrink: 0;
513
+ }
514
+
515
+ .htree-children {
516
+ padding-left: 18px;
517
+ border-left: 1px solid var(--border-subtle);
518
+ margin-left: 20px;
519
+ }
520
+
521
+ /* ─── Search result snippets ─── */
522
+
523
+ .search-snippet {
524
+ width: 100%;
525
+ font-size: 11px;
526
+ color: var(--text-muted);
527
+ overflow: hidden;
528
+ text-overflow: ellipsis;
529
+ white-space: nowrap;
530
+ margin-top: 2px;
531
+ line-height: 1.4;
532
+ }
533
+
534
+ .search-snippet mark {
535
+ background: rgba(29, 155, 209, 0.25);
536
+ color: var(--text);
537
+ border-radius: 2px;
538
+ padding: 0 1px;
539
+ }
@@ -0,0 +1,53 @@
1
+ /* ═══ Icon Rail ═══════════════════════════════════════════════ */
2
+
3
+ #icon-rail {
4
+ display: flex;
5
+ flex-direction: column;
6
+ align-items: center;
7
+ width: 56px;
8
+ flex-shrink: 0;
9
+ background: var(--bg-sidebar);
10
+ border-right: 1px solid var(--border);
11
+ padding: 8px 0;
12
+ gap: 2px;
13
+ }
14
+
15
+ .icon-rail-btn {
16
+ display: flex;
17
+ flex-direction: column;
18
+ align-items: center;
19
+ justify-content: center;
20
+ gap: 2px;
21
+ width: 48px;
22
+ padding: 6px 0 4px;
23
+ border: none;
24
+ border-radius: var(--radius);
25
+ background: transparent;
26
+ color: var(--text-muted);
27
+ cursor: pointer;
28
+ transition: background 0.12s, color 0.12s;
29
+ }
30
+
31
+ .icon-rail-btn:hover {
32
+ background: var(--hover-bg);
33
+ color: var(--text);
34
+ }
35
+
36
+ .icon-rail-btn.active {
37
+ color: var(--text);
38
+ }
39
+
40
+ .icon-rail-label {
41
+ font-size: 9px;
42
+ font-weight: 500;
43
+ letter-spacing: 0.01em;
44
+ line-height: 1;
45
+ white-space: nowrap;
46
+ }
47
+
48
+ .icon-rail-separator {
49
+ width: 24px;
50
+ height: 1px;
51
+ background: var(--border-subtle);
52
+ margin: 4px 0;
53
+ }