返回 DeepSeek-Reasonix
RemoteConnectWizard.css
根目录 / desktop / frontend / src / components / RemoteConnectWizard.css
1 /* ── Remote connect wizard (add-project → remote connection) ──
2 Three-step dialog: non-interactive stepper rail on the left (number →
3 green check once passed, current step highlighted), action pane right. */
4 .remote-wizard {
5 width: min(725px, calc(100vw - 48px));
6 height: min(560px, calc(100vh - 48px));
7 max-width: none;
8 display: flex;
9 flex-direction: column;
10 box-sizing: border-box;
11 }
12 .remote-wizard__frame {
13 display: flex;
14 flex: 1;
15 min-height: 0;
16 gap: 18px;
17 }
18 .remote-wizard__rail {
19 display: flex;
20 flex: 0 0 100px;
21 flex-direction: column;
22 gap: 14px;
23 padding: 12px 8px;
24 border-right: 1px solid var(--border-soft);
25 }
26 .remote-wizard__rail-item {
27 display: flex;
28 align-items: center;
29 gap: 8px;
30 color: var(--fg-faint);
31 font-size: var(--text-sm);
32 }
33 .remote-wizard__rail-index {
34 display: inline-flex;
35 align-items: center;
36 justify-content: center;
37 width: 20px;
38 height: 20px;
39 flex: 0 0 20px;
40 border: 1px solid var(--border);
41 border-radius: 50%;
42 font-size: var(--text-xs);
43 }
44 .remote-wizard__rail-item--current {
45 color: var(--fg);
46 font-weight: 600;
47 }
48 .remote-wizard__rail-item--current .remote-wizard__rail-index {
49 border-color: var(--accent);
50 color: var(--accent);
51 }
52 .remote-wizard__rail-item--done {
53 color: var(--fg-dim);
54 }
55 .remote-wizard__rail-item--done .remote-wizard__rail-index {
56 border-color: transparent;
57 background: var(--shell-accent, #22c55e);
58 color: #fff;
59 }
60 .remote-wizard__body {
61 display: flex;
62 flex: 1;
63 min-width: 0;
64 min-height: 0;
65 flex-direction: column;
66 gap: 10px;
67 padding: 4px 2px;
68 }
69 .remote-wizard__field {
70 display: flex;
71 flex-direction: column;
72 gap: 4px;
73 color: var(--fg-dim);
74 font-size: var(--text-xs);
75 }
76 .remote-wizard__field-row {
77 display: grid;
78 grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
79 align-items: end;
80 gap: 10px;
81 }
82 .remote-wizard__field-row > * {
83 min-width: 0;
84 }
85 .remote-wizard__seg {
86 display: inline-flex;
87 width: 100%;
88 height: 30px;
89 max-width: 100%;
90 box-sizing: border-box;
91 min-width: 0;
92 padding: 2px;
93 }
94 .remote-wizard__seg .provider-add-segmented__item {
95 flex: 1 1 0;
96 min-width: 0;
97 min-height: 0;
98 height: 100%;
99 padding: 0 10px;
100 font-size: var(--text-xs);
101 white-space: nowrap;
102 }
103 .remote-wizard__suggest {
104 position: relative;
105 }
106 .remote-wizard__host-box {
107 position: relative;
108 display: flex;
109 align-items: center;
110 min-width: 0;
111 }
112 /* Outranks the .remote-wizard__form input padding shorthand; the input
113 reserves room for the absolute toggle arrow on its right edge. */
114 .remote-wizard__suggest .remote-wizard__host-box input {
115 flex: 1;
116 min-width: 0;
117 padding-right: 32px;
118 }
119 .remote-wizard__suggest-toggle {
120 position: absolute;
121 top: 0;
122 bottom: 0;
123 right: 4px;
124 margin-block: auto;
125 display: inline-flex;
126 align-items: center;
127 justify-content: center;
128 width: 24px;
129 height: 24px;
130 padding: 0;
131 border: 0;
132 border-radius: 5px;
133 background: transparent;
134 color: var(--fg-faint);
135 transition: transform 0.15s ease;
136 cursor: pointer;
137 }
138 .remote-wizard__suggest-toggle:hover:not(:disabled) {
139 color: var(--fg-dim);
140 }
141 .remote-wizard__suggest-toggle:disabled {
142 opacity: 0.55;
143 cursor: default;
144 }
145 .remote-wizard__suggest-toggle--open {
146 transform: rotate(180deg);
147 }
148 .remote-wizard__suggest-head {
149 padding: 6px 10px 4px;
150 color: var(--fg-dim);
151 font-size: var(--text-xs);
152 }
153 .remote-wizard__suggest-list {
154 position: absolute;
155 top: 100%;
156 left: 0;
157 right: 0;
158 z-index: var(--z-local-raised);
159 display: flex;
160 flex-direction: column;
161 max-height: 180px;
162 overflow-y: auto;
163 border: 1px solid var(--border);
164 border-radius: 8px;
165 background: var(--bg-elev);
166 box-shadow: var(--shadow-1);
167 }
168 .remote-wizard__suggest-list button {
169 display: flex;
170 align-items: center;
171 gap: 10px;
172 padding: 7px 10px;
173 border: 0;
174 background: transparent;
175 color: var(--fg);
176 font: inherit;
177 font-size: var(--text-sm);
178 text-align: left;
179 cursor: pointer;
180 }
181 .remote-wizard__suggest-list button:hover {
182 background: var(--sidebar-hover);
183 }
184 .remote-wizard__suggest-label {
185 font-weight: 600;
186 }
187 .remote-wizard__suggest-detail {
188 min-width: 0;
189 overflow: hidden;
190 text-overflow: ellipsis;
191 white-space: nowrap;
192 color: var(--fg-dim);
193 font-size: var(--text-xs);
194 }
195 .remote-wizard__connecting {
196 display: flex;
197 flex: 1;
198 min-width: 0;
199 min-height: 0;
200 width: 100%;
201 flex-direction: column;
202 align-items: stretch;
203 justify-content: flex-start;
204 gap: 10px;
205 }
206 .remote-wizard__connecting-title {
207 font-size: var(--text-sm);
208 color: var(--fg);
209 }
210 .remote-wizard__connecting-hint {
211 color: var(--fg-dim);
212 font-size: var(--text-xs);
213 }
214 .remote-wizard__connecting-actions {
215 display: flex;
216 gap: 8px;
217 }
218
219 .remote-wizard__empty {
220 padding: 4px 8px;
221 color: var(--fg-dim);
222 font-size: var(--text-xs);
223 }
224 .remote-wizard__footer {
225 display: flex;
226 flex: 0 0 auto;
227 align-items: center;
228 gap: 12px;
229 margin-top: 8px;
230 padding-left: 118px;
231 }
232 .remote-wizard__error {
233 flex: 1;
234 min-width: 0;
235 min-height: 1.45em;
236 color: var(--err);
237 font-size: var(--font-caption);
238 display: flex;
239 align-items: center;
240 gap: 6px;
241 }
242 .remote-wizard__error-mark {
243 flex: 0 0 auto;
244 line-height: 1;
245 }
246 .remote-wizard__actions {
247 flex: 0 0 auto;
248 margin-left: auto;
249 }
250
251
252
253 /* Step 1 mirrors the Settings → Remote SSH host form: stacked labels,
254 soft input fields, same radii and padding tokens. */
255 .remote-wizard__form {
256 display: flex;
257 flex-direction: column;
258 gap: 10px;
259 max-width: 560px;
260 }
261 .remote-wizard__form input,
262 .remote-wizard__form select {
263 background: var(--bg-soft);
264 border: 1px solid var(--border);
265 border-radius: var(--radius);
266 color: var(--fg);
267 padding: 6px 8px;
268 font: inherit;
269 }
270 .remote-wizard__form input:focus-visible,
271 .remote-wizard__form select:focus-visible {
272 outline: 2px solid color-mix(in srgb, var(--accent) 55%, transparent);
273 outline-offset: -1px;
274 }
275 .remote-wizard__form input:disabled {
276 opacity: 0.55;
277 }
278 .remote-wizard__identity-row {
279 display: flex;
280 align-items: center;
281 gap: 6px;
282 min-width: 0;
283 }
284 .remote-wizard__identity-row > input[type="text"],
285 .remote-wizard__identity-row > input:not([type]) {
286 flex: 1;
287 min-width: 0;
288 }
289 .remote-wizard__pick-btn {
290 display: inline-flex;
291 align-items: center;
292 justify-content: center;
293 flex: 0 0 30px;
294 width: 30px;
295 height: 30px;
296 padding: 0;
297 border: 1px solid var(--border);
298 border-radius: var(--radius);
299 background: var(--bg-soft);
300 color: var(--fg-dim);
301 cursor: pointer;
302 }
303 .remote-wizard__pick-btn:hover:not(:disabled) {
304 color: var(--fg);
305 border-color: var(--border);
306 background: var(--bg-elev);
307 }
308 .remote-wizard__pick-btn:disabled {
309 opacity: 0.55;
310 cursor: default;
311 }
312 /* Step 3: intro title + ready hint, path bar (input + Go + hidden toggle),
313 and a scrollable directory tree. */
314 .remote-wizard__workspace-head {
315 display: flex;
316 flex-direction: column;
317 gap: 6px;
318 }
319 .remote-wizard__workspace-title {
320 color: var(--fg);
321 font-size: var(--text-sm);
322 font-weight: 560;
323 }
324 .remote-wizard__workspace-ready {
325 display: inline-flex;
326 align-items: center;
327 gap: 7px;
328 color: var(--fg-dim);
329 font-size: var(--text-xs);
330 }
331 .remote-wizard__ready-dot {
332 width: 7px;
333 height: 7px;
334 border-radius: 50%;
335 background: var(--shell-accent, #22c55e);
336 }
337 .remote-wizard__browse {
338 margin-top: 2px;
339 color: var(--fg);
340 font-size: var(--text-sm);
341 font-weight: 600;
342 }
343 .remote-wizard__path-bar {
344 display: flex;
345 align-items: center;
346 gap: 8px;
347 }
348 .remote-wizard__path-input {
349 flex: 1;
350 min-width: 0;
351 background: var(--bg-soft);
352 border: 1px solid var(--border);
353 border-radius: var(--radius);
354 color: var(--fg);
355 padding: 6px 8px;
356 font: inherit;
357 }
358 .remote-wizard__tree {
359 display: flex;
360 flex: 1;
361 min-height: 0;
362 flex-direction: column;
363 gap: 2px;
364 overflow-y: auto;
365 padding: 6px;
366 border: 1px solid var(--border-soft);
367 border-radius: 8px;
368 }
369 .remote-wizard__dir {
370 display: flex;
371 align-items: center;
372 gap: 6px;
373 padding: 4px 8px;
374 border: 0;
375 border-radius: 6px;
376 background: transparent;
377 color: var(--fg);
378 font: inherit;
379 font-size: var(--text-sm);
380 text-align: left;
381 cursor: pointer;
382 }
383 .remote-wizard__dir:hover,
384 .remote-wizard__dir--selected {
385 background: var(--sidebar-hover);
386 }
387 .remote-wizard__dir-icon {
388 flex: 0 0 auto;
389 color: var(--fg-faint);
390 }
391 .remote-wizard__dir-name {
392 min-width: 0;
393 overflow: hidden;
394 text-overflow: ellipsis;
395 white-space: nowrap;
396 }
397
398 .remote-wizard__file {
399 display: flex;
400 align-items: center;
401 gap: 6px;
402 width: 100%;
403 padding: 4px 8px;
404 border: 0;
405 border-radius: 6px;
406 background: transparent;
407 color: var(--fg-dim);
408 font: inherit;
409 font-size: var(--text-sm);
410 text-align: left;
411 cursor: pointer;
412 }
413 .remote-wizard__file:hover,
414 .remote-wizard__file--selected {
415 background: var(--sidebar-hover);
416 color: var(--fg);
417 }
418 .remote-wizard__file-size {
419 margin-left: auto;
420 flex: 0 0 auto;
421 color: var(--fg-faint);
422 font-size: var(--text-xs);
423 font-variant-numeric: tabular-nums;
424 }
425
426 /* Step 2: live connection log (ZCode-style timestamped deployment feed). */
427 .remote-wizard__log {
428 display: flex;
429 flex: 1 1 auto;
430 width: 100%;
431 min-height: 0;
432 flex-direction: column;
433 gap: 3px;
434 overflow-y: auto;
435 padding: 8px 10px;
436 border: 1px solid var(--border-soft);
437 border-radius: 8px;
438 background: var(--bg-soft);
439 font-family: var(--font-mono, monospace);
440 font-size: var(--text-xs);
441 }
442 .remote-wizard__log-line {
443 display: flex;
444 align-items: baseline;
445 gap: 8px;
446 }
447 .remote-wizard__log-time {
448 flex: 0 0 auto;
449 color: var(--fg-faint);
450 font-variant-numeric: tabular-nums;
451 }
452 .remote-wizard__log-level {
453 flex: 0 0 auto;
454 padding: 0 5px;
455 border-radius: 4px;
456 font-size: 10px;
457 font-weight: 600;
458 letter-spacing: 0.4px;
459 }
460 .remote-wizard__log-level--info {
461 color: var(--accent);
462 background: color-mix(in srgb, var(--accent) 12%, transparent);
463 }
464 .remote-wizard__log-level--warn {
465 color: var(--warn, #d90);
466 background: color-mix(in srgb, var(--warn, #d90) 14%, transparent);
467 }
468 .remote-wizard__log-text {
469 min-width: 0;
470 color: var(--fg-dim);
471 overflow-wrap: anywhere;
472 }
473
473 lines CSS