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,249 @@
1
+ /* ─── Info Window (dedicated popup) ─── */
2
+
3
+ .info-window {
4
+ display: flex;
5
+ flex-direction: column;
6
+ height: calc(100vh - var(--titlebar-h));
7
+ overflow: hidden;
8
+ background: var(--bg-0);
9
+ }
10
+
11
+ .info-tabs {
12
+ display: flex;
13
+ gap: 0;
14
+ border-bottom: 1px solid var(--border);
15
+ background: var(--bg-1);
16
+ padding: 0 12px;
17
+ flex-shrink: 0;
18
+ }
19
+
20
+ .info-tab {
21
+ padding: 8px 16px;
22
+ font-size: 12px;
23
+ font-weight: 500;
24
+ color: var(--text-muted);
25
+ background: none;
26
+ border: none;
27
+ border-bottom: 2px solid transparent;
28
+ cursor: pointer;
29
+ transition: color 0.15s, border-color 0.15s;
30
+ }
31
+ .info-tab:hover { color: var(--text); }
32
+ .info-tab.active {
33
+ color: var(--accent);
34
+ border-bottom-color: var(--accent);
35
+ }
36
+
37
+ .info-content {
38
+ flex: 1;
39
+ overflow-y: auto;
40
+ padding: 16px;
41
+ }
42
+
43
+ /* Overview cards */
44
+ .info-card-grid {
45
+ display: grid;
46
+ grid-template-columns: 1fr 1fr;
47
+ gap: 10px;
48
+ margin-bottom: 10px;
49
+ }
50
+
51
+ .info-card {
52
+ background: var(--bg-2);
53
+ border: 1px solid var(--border);
54
+ border-radius: var(--radius-md);
55
+ padding: 10px 12px;
56
+ }
57
+ .info-card.full {
58
+ margin-bottom: 10px;
59
+ }
60
+
61
+ .info-card-label {
62
+ font-size: 10px;
63
+ font-weight: 600;
64
+ text-transform: uppercase;
65
+ letter-spacing: 0.5px;
66
+ color: var(--text-muted);
67
+ margin-bottom: 4px;
68
+ }
69
+
70
+ .info-card-value {
71
+ font-size: 13px;
72
+ font-weight: 500;
73
+ color: var(--text);
74
+ word-break: break-all;
75
+ }
76
+ .info-card-value.mono {
77
+ font-family: var(--font-mono);
78
+ font-size: 11px;
79
+ }
80
+
81
+ .info-summary {
82
+ text-align: center;
83
+ padding: 12px 0;
84
+ font-size: 12px;
85
+ color: var(--text-secondary);
86
+ border-top: 1px solid var(--border);
87
+ margin-top: 6px;
88
+ }
89
+
90
+ /* Tools tab */
91
+ .info-search {
92
+ width: 100%;
93
+ padding: 6px 10px;
94
+ margin-bottom: 12px;
95
+ background: var(--bg-2);
96
+ border: 1px solid var(--border);
97
+ border-radius: var(--radius-md);
98
+ color: var(--text);
99
+ font-size: 12px;
100
+ outline: none;
101
+ }
102
+ .info-search:focus {
103
+ border-color: var(--accent);
104
+ }
105
+
106
+ .info-category {
107
+ font-size: 10px;
108
+ font-weight: 700;
109
+ text-transform: uppercase;
110
+ letter-spacing: 0.5px;
111
+ color: var(--text-muted);
112
+ padding: 8px 0 4px;
113
+ }
114
+
115
+ .info-tool-row {
116
+ border-bottom: 1px solid var(--border);
117
+ }
118
+ .info-tool-row.expanded {
119
+ background: var(--bg-1);
120
+ border-radius: var(--radius-md);
121
+ margin-bottom: 4px;
122
+ }
123
+
124
+ .info-tool-header {
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 6px;
128
+ width: 100%;
129
+ padding: 6px 4px;
130
+ background: none;
131
+ border: none;
132
+ color: var(--text);
133
+ font-size: 12px;
134
+ cursor: pointer;
135
+ text-align: left;
136
+ }
137
+ .info-tool-header:hover { color: var(--accent); }
138
+
139
+ .info-tool-arrow {
140
+ font-size: 8px;
141
+ width: 12px;
142
+ color: var(--text-muted);
143
+ }
144
+
145
+ .info-tool-name {
146
+ font-family: var(--font-mono);
147
+ font-weight: 500;
148
+ }
149
+
150
+ .info-tool-detail {
151
+ padding: 4px 22px 10px;
152
+ }
153
+
154
+ .info-tool-desc {
155
+ font-size: 11px;
156
+ color: var(--text-secondary);
157
+ line-height: 1.5;
158
+ margin: 0 0 8px;
159
+ }
160
+
161
+ .info-param-table {
162
+ width: 100%;
163
+ border-collapse: collapse;
164
+ font-size: 11px;
165
+ }
166
+ .info-param-table th {
167
+ text-align: left;
168
+ font-weight: 600;
169
+ color: var(--text-muted);
170
+ padding: 3px 8px 3px 0;
171
+ border-bottom: 1px solid var(--border);
172
+ }
173
+ .info-param-table td {
174
+ padding: 3px 8px 3px 0;
175
+ color: var(--text-secondary);
176
+ border-bottom: 1px solid var(--border);
177
+ }
178
+ .info-param-table td.mono {
179
+ font-family: var(--font-mono);
180
+ color: var(--accent);
181
+ white-space: nowrap;
182
+ }
183
+
184
+ /* MCP tab */
185
+ .info-server-card {
186
+ display: flex;
187
+ justify-content: space-between;
188
+ align-items: center;
189
+ padding: 10px 12px;
190
+ margin-bottom: 8px;
191
+ background: var(--bg-2);
192
+ border: 1px solid var(--border);
193
+ border-radius: var(--radius-md);
194
+ }
195
+
196
+ .info-server-name {
197
+ font-size: 13px;
198
+ font-weight: 500;
199
+ color: var(--text);
200
+ }
201
+
202
+ .info-server-status {
203
+ display: flex;
204
+ align-items: center;
205
+ gap: 6px;
206
+ font-size: 11px;
207
+ color: var(--text-secondary);
208
+ }
209
+
210
+ .info-status-dot {
211
+ width: 8px;
212
+ height: 8px;
213
+ border-radius: 50%;
214
+ background: var(--text-muted);
215
+ }
216
+ .info-status-dot.status-connected { background: var(--success); }
217
+ .info-status-dot.status-error { background: var(--error); }
218
+ .info-status-dot.status-disconnected { background: var(--text-muted); }
219
+
220
+ /* Commands tab */
221
+ .info-chip-section {
222
+ margin-bottom: 12px;
223
+ }
224
+
225
+ .info-chip-list {
226
+ display: flex;
227
+ flex-wrap: wrap;
228
+ gap: 6px;
229
+ padding: 4px 0;
230
+ }
231
+
232
+ .info-chip {
233
+ font-size: 11px;
234
+ font-family: var(--font-mono);
235
+ padding: 3px 8px;
236
+ background: var(--bg-3);
237
+ border: 1px solid var(--border);
238
+ border-radius: var(--radius-sm);
239
+ color: var(--text-secondary);
240
+ }
241
+
242
+ /* Shared info states */
243
+ .info-empty, .info-loading, .info-error {
244
+ text-align: center;
245
+ padding: 32px 16px;
246
+ font-size: 13px;
247
+ color: var(--text-muted);
248
+ }
249
+ .info-error { color: var(--error); }
@@ -0,0 +1,189 @@
1
+ /* ═══ Input bar ═════════════════════════════════════════════════ */
2
+
3
+ #input-bar {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: 0;
7
+ padding: 0 24px 16px;
8
+ background: var(--bg-0);
9
+ border-top: 1px solid var(--border-subtle);
10
+ flex-shrink: 0;
11
+ position: relative;
12
+ width: 100%;
13
+ }
14
+
15
+ /* ─── Slash command autocomplete ─── */
16
+
17
+ .input-row-wrap {
18
+ position: relative;
19
+ }
20
+
21
+ .input-row {
22
+ display: flex;
23
+ gap: 10px;
24
+ padding-top: 12px;
25
+ }
26
+
27
+ .slash-autocomplete {
28
+ position: absolute;
29
+ bottom: 100%;
30
+ left: 0;
31
+ right: 0;
32
+ margin-bottom: 4px;
33
+ background: var(--bg-3);
34
+ border: 1px solid var(--border-strong);
35
+ border-radius: var(--radius-lg);
36
+ max-height: 240px;
37
+ overflow-y: auto;
38
+ z-index: 50;
39
+ padding: 4px;
40
+ animation: dropdown-in 0.12s ease-out;
41
+ box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.3);
42
+ }
43
+
44
+ .slash-autocomplete-item {
45
+ display: flex;
46
+ align-items: center;
47
+ width: 100%;
48
+ padding: 6px 12px;
49
+ border: none;
50
+ background: transparent;
51
+ color: var(--text-secondary);
52
+ font-size: 13px;
53
+ font-family: var(--font-mono);
54
+ cursor: pointer;
55
+ border-radius: var(--radius);
56
+ transition: background 0.1s;
57
+ text-align: left;
58
+ }
59
+
60
+ .slash-autocomplete-item:hover {
61
+ background: var(--hover-bg);
62
+ color: var(--text);
63
+ }
64
+
65
+ .slash-autocomplete-item.active {
66
+ background: var(--accent-bg);
67
+ color: var(--text);
68
+ }
69
+
70
+ .slash-autocomplete-cmd {
71
+ font-weight: 500;
72
+ }
73
+
74
+ #input {
75
+ flex: 1;
76
+ padding: 10px 16px;
77
+ border-radius: var(--radius-lg);
78
+ border: 1px solid var(--border-strong);
79
+ background: var(--bg-2);
80
+ color: var(--text);
81
+ font-family: inherit;
82
+ font-size: 15px;
83
+ resize: none;
84
+ outline: none;
85
+ transition: border-color 0.15s, box-shadow 0.15s;
86
+ line-height: 1.46667;
87
+ }
88
+
89
+ #input:focus {
90
+ border-color: var(--accent);
91
+ box-shadow: 0 0 0 1px var(--accent);
92
+ }
93
+
94
+ #input:disabled { opacity: 0.4; }
95
+ #input::placeholder { color: var(--text-muted); }
96
+
97
+ #send {
98
+ padding: 10px 20px;
99
+ border-radius: var(--radius-lg);
100
+ border: none;
101
+ background: var(--accent);
102
+ color: #fff;
103
+ font-weight: 700;
104
+ font-family: inherit;
105
+ font-size: 14px;
106
+ cursor: pointer;
107
+ transition: background 0.15s, opacity 0.15s;
108
+ }
109
+
110
+ #send:hover { background: var(--accent-dim); }
111
+ #send:disabled { opacity: 0.3; cursor: not-allowed; }
112
+
113
+ /* Stop button (shown beside Send while session is busy) */
114
+ #stop-btn {
115
+ padding: 10px 16px;
116
+ border-radius: var(--radius-lg);
117
+ border: none;
118
+ background: var(--error);
119
+ color: #fff;
120
+ font-weight: 700;
121
+ font-family: inherit;
122
+ font-size: 14px;
123
+ cursor: pointer;
124
+ transition: background 0.15s;
125
+ }
126
+ #stop-btn:hover { background: #c4184e; }
127
+
128
+ .escape-hint,
129
+ .queue-hint {
130
+ font-size: 11px;
131
+ color: var(--text-muted);
132
+ text-align: center;
133
+ padding: 2px 0;
134
+ animation: hintFadeIn 0.1s ease-out;
135
+ }
136
+ .escape-hint { color: var(--warning, #e8a838); }
137
+ @keyframes hintFadeIn { from { opacity: 0; } to { opacity: 1; } }
138
+
139
+ /* ═══ Image preview bar (input area thumbnails) ═══════════════ */
140
+
141
+ .image-preview-bar {
142
+ display: flex;
143
+ gap: 8px;
144
+ padding: 10px 0 0;
145
+ overflow-x: auto;
146
+ flex-shrink: 0;
147
+ }
148
+
149
+ .image-preview-bar::-webkit-scrollbar { height: 4px; }
150
+
151
+ .image-preview-thumb {
152
+ position: relative;
153
+ width: 64px;
154
+ height: 64px;
155
+ border-radius: var(--radius);
156
+ overflow: hidden;
157
+ border: 1px solid var(--border-strong);
158
+ flex-shrink: 0;
159
+ }
160
+
161
+ .image-preview-thumb img {
162
+ width: 100%;
163
+ height: 100%;
164
+ object-fit: cover;
165
+ }
166
+
167
+ .image-preview-remove {
168
+ position: absolute;
169
+ top: 2px;
170
+ right: 2px;
171
+ width: 18px;
172
+ height: 18px;
173
+ border-radius: 50%;
174
+ border: none;
175
+ background: rgba(0, 0, 0, 0.7);
176
+ color: #fff;
177
+ font-size: 13px;
178
+ line-height: 1;
179
+ cursor: pointer;
180
+ display: flex;
181
+ align-items: center;
182
+ justify-content: center;
183
+ opacity: 0;
184
+ transition: opacity 0.15s;
185
+ }
186
+
187
+ .image-preview-thumb:hover .image-preview-remove {
188
+ opacity: 1;
189
+ }
@@ -0,0 +1,225 @@
1
+ /* ═══ Modal ════════════════════════════════════════════════════ */
2
+
3
+ .modal-overlay {
4
+ position: fixed;
5
+ inset: 0;
6
+ background: rgba(0, 0, 0, 0.6);
7
+ display: flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ z-index: 100;
11
+ }
12
+
13
+ .modal {
14
+ background: var(--bg-3);
15
+ border: 1px solid var(--border-strong);
16
+ border-radius: var(--radius-lg);
17
+ width: 480px;
18
+ max-width: 90vw;
19
+ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6);
20
+ position: relative;
21
+ overflow: hidden;
22
+ }
23
+
24
+ .modal.settings-modal { overflow: visible; }
25
+
26
+ .modal-close {
27
+ position: absolute;
28
+ top: 12px;
29
+ right: 14px;
30
+ background: none;
31
+ border: none;
32
+ color: var(--text-muted);
33
+ font-size: 20px;
34
+ cursor: pointer;
35
+ padding: 2px 6px;
36
+ line-height: 1;
37
+ z-index: 1;
38
+ border-radius: var(--radius);
39
+ transition: background 0.15s, color 0.15s;
40
+ }
41
+
42
+ .modal-close:hover { color: var(--text); background: rgba(255,255,255,0.06); }
43
+
44
+ .modal-body {
45
+ padding: 18px;
46
+ }
47
+
48
+ /* ─── Settings hero / branding ─── */
49
+
50
+ .settings-hero {
51
+ display: flex;
52
+ flex-direction: column;
53
+ align-items: center;
54
+ padding: 36px 24px 24px;
55
+ background: linear-gradient(180deg, rgba(0, 168, 232, 0.08) 0%, transparent 100%);
56
+ border-bottom: 1px solid var(--border-subtle);
57
+ }
58
+
59
+ .settings-logo {
60
+ width: 80px;
61
+ height: 80px;
62
+ border-radius: 20px;
63
+ box-shadow: 0 8px 32px rgba(0, 168, 232, 0.25);
64
+ margin-bottom: 16px;
65
+ }
66
+
67
+ .settings-brand {
68
+ font-size: 22px;
69
+ font-weight: 700;
70
+ letter-spacing: -0.3px;
71
+ color: var(--text);
72
+ }
73
+
74
+ .settings-tagline {
75
+ font-size: 13px;
76
+ color: var(--text-muted);
77
+ margin-top: 4px;
78
+ }
79
+
80
+ .settings-section {
81
+ margin-bottom: 8px;
82
+ }
83
+
84
+ .settings-section-title {
85
+ font-size: 11px;
86
+ font-weight: 600;
87
+ text-transform: uppercase;
88
+ letter-spacing: 0.8px;
89
+ color: var(--text-muted);
90
+ margin-bottom: 12px;
91
+ }
92
+
93
+ .settings-version {
94
+ font-size: 12px;
95
+ color: var(--text-muted);
96
+ margin-right: auto;
97
+ }
98
+
99
+ .setting-label {
100
+ display: flex;
101
+ flex-direction: column;
102
+ gap: 6px;
103
+ font-size: 13px;
104
+ color: var(--text-secondary);
105
+ font-weight: 500;
106
+ }
107
+
108
+ .setting-input {
109
+ padding: 8px 12px;
110
+ border-radius: var(--radius);
111
+ border: 1px solid var(--border);
112
+ background: var(--bg-1);
113
+ color: var(--text);
114
+ font-family: var(--font-mono);
115
+ font-size: 13px;
116
+ outline: none;
117
+ }
118
+
119
+ .setting-input:focus { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
120
+
121
+ .setting-hint {
122
+ font-size: 12px;
123
+ color: var(--text-muted);
124
+ font-weight: 400;
125
+ }
126
+
127
+ .setting-status {
128
+ margin-top: 12px;
129
+ font-size: 13px;
130
+ color: var(--success);
131
+ }
132
+
133
+ .setting-toggle-row {
134
+ display: flex;
135
+ align-items: center;
136
+ justify-content: space-between;
137
+ gap: 12px;
138
+ }
139
+
140
+ .setting-toggle-row > span {
141
+ display: flex;
142
+ flex-direction: column;
143
+ gap: 2px;
144
+ }
145
+
146
+ .setting-toggle-switch {
147
+ position: relative;
148
+ width: 40px;
149
+ height: 22px;
150
+ border-radius: 11px;
151
+ border: none;
152
+ background: var(--border-strong);
153
+ cursor: pointer;
154
+ flex-shrink: 0;
155
+ padding: 0;
156
+ transition: background 0.15s;
157
+ }
158
+
159
+ .setting-toggle-switch.active {
160
+ background: var(--accent);
161
+ }
162
+
163
+ .setting-toggle-knob {
164
+ position: absolute;
165
+ top: 3px;
166
+ left: 3px;
167
+ width: 16px;
168
+ height: 16px;
169
+ border-radius: 50%;
170
+ background: #fff;
171
+ transition: transform 0.15s;
172
+ }
173
+
174
+ .setting-toggle-switch.active .setting-toggle-knob {
175
+ transform: translateX(18px);
176
+ }
177
+
178
+ .modal-footer {
179
+ padding: 12px 18px;
180
+ border-top: 1px solid var(--border-subtle);
181
+ display: flex;
182
+ justify-content: flex-end;
183
+ }
184
+
185
+ .modal-btn {
186
+ padding: 7px 18px;
187
+ border-radius: var(--radius);
188
+ border: none;
189
+ background: var(--accent);
190
+ color: #fff;
191
+ font-weight: 600;
192
+ font-family: inherit;
193
+ font-size: 13px;
194
+ cursor: pointer;
195
+ }
196
+
197
+ .modal-btn:hover { background: var(--accent-dim); }
198
+
199
+ /* ─── Settings browse row ─── */
200
+
201
+ .settings-browse-row {
202
+ display: flex;
203
+ gap: 6px;
204
+ align-items: center;
205
+ }
206
+
207
+ .settings-browse-row .setting-input {
208
+ flex: 1;
209
+ min-width: 0;
210
+ }
211
+
212
+ .browse-btn {
213
+ padding: 6px 12px;
214
+ border-radius: var(--radius);
215
+ border: 1px solid var(--border);
216
+ background: var(--bg-2);
217
+ color: var(--text-primary);
218
+ font-size: 13px;
219
+ font-family: inherit;
220
+ cursor: pointer;
221
+ white-space: nowrap;
222
+ transition: background 0.15s;
223
+ }
224
+
225
+ .browse-btn:hover { background: var(--bg-3, var(--bg-1)); }