返回 DeepSeek-Reasonix
ComposerWorkspaceContextBar.css
根目录 / desktop / frontend / src / components / ComposerWorkspaceContextBar.css
1 .composer-workspace-frame--context {
2 --z-creation-composer-border: -1;
3 position: relative;
4 border: 1.3px solid color-mix(in srgb, var(--fg-faint) 14%, transparent);
5 border-radius: 16px;
6 background: color-mix(in srgb, var(--bg-elev) 6%, transparent);
7 isolation: isolate;
8 box-shadow:
9 0 0 0 1px color-mix(in srgb, var(--fg-faint) 7%, transparent),
10 0 10px 26px color-mix(in srgb, #000 16%, transparent);
11 transition: border-color 0.8s var(--ease-out), box-shadow 0.95s var(--ease-out);
12 }
13
14 .composer-workspace-frame--context::before {
15 content: "";
16 position: absolute;
17 inset: -1px;
18 z-index: var(--z-creation-composer-border);
19 padding: 1.3px;
20 border-radius: inherit;
21 pointer-events: none;
22 opacity: 0.34;
23 background:
24 linear-gradient(90deg, color-mix(in srgb, var(--accent) 38%, #fff 4%), color-mix(in srgb, var(--accent) 9%, transparent) 18%, transparent 42%, transparent 58%, color-mix(in srgb, var(--accent) 9%, transparent) 82%, color-mix(in srgb, var(--accent) 38%, #fff 4%)) top / 100% 100% no-repeat,
25 linear-gradient(90deg, color-mix(in srgb, var(--accent) 32%, #fff 4%), color-mix(in srgb, var(--accent) 8%, transparent) 22%, transparent 44%, transparent 56%, color-mix(in srgb, var(--accent) 8%, transparent) 78%, color-mix(in srgb, var(--accent) 32%, #fff 4%)) bottom / 100% 100% no-repeat;
26 -webkit-mask:
27 linear-gradient(#000 0 0) content-box,
28 linear-gradient(#000 0 0);
29 -webkit-mask-composite: xor;
30 mask-composite: exclude;
31 transition: opacity 1.15s var(--ease-out);
32 }
33
34 .composer-workspace-frame--context::after {
35 --creation-hover-angle: 0deg;
36 content: "";
37 position: absolute;
38 inset: -1px;
39 z-index: var(--z-creation-composer-border);
40 padding: 1.3px;
41 border-radius: inherit;
42 pointer-events: none;
43 opacity: 0;
44 background: conic-gradient(
45 from var(--creation-hover-angle),
46 transparent 0deg,
47 transparent 54deg,
48 color-mix(in srgb, var(--accent) 10%, transparent) 72deg,
49 color-mix(in srgb, var(--accent) 52%, #fff 6%) 90deg,
50 color-mix(in srgb, var(--accent) 10%, transparent) 110deg,
51 transparent 132deg,
52 transparent 360deg
53 );
54 -webkit-mask:
55 linear-gradient(#000 0 0) content-box,
56 linear-gradient(#000 0 0);
57 -webkit-mask-composite: xor;
58 mask-composite: exclude;
59 filter: drop-shadow(0 0 8px color-mix(in srgb, var(--accent) 22%, transparent));
60 }
61
62 .composer-workspace-frame--context:hover,
63 .composer-workspace-frame--context:focus-within {
64 border-color: color-mix(in srgb, var(--fg-faint) 16%, transparent);
65 box-shadow:
66 0 0 0 1px color-mix(in srgb, var(--fg-faint) 8%, transparent),
67 0 12px 30px color-mix(in srgb, #000 18%, transparent);
68 }
69
70 .composer-workspace-frame--context:hover::after,
71 .composer-workspace-frame--context:focus-within::after {
72 animation: creation-composer-border-arrive 1.9s cubic-bezier(0.22, 0.8, 0.18, 1) both;
73 }
74
75 .composer-workspace-frame--context:has(.composer-card--running)::before {
76 opacity: 0;
77 }
78
79 .composer-workspace-frame--context:has(.composer-card--running)::after {
80 animation: none;
81 opacity: 0;
82 }
83
84 .composer-workspace-frame--context .composer-workspace-bar {
85 margin-bottom: 0;
86 border: 0;
87 border-bottom: 1px solid var(--border-soft);
88 border-radius: 15px 15px 0 0;
89 }
90
91 .composer-workspace-frame--context .composer-card,
92 .composer-workspace-frame--context .composer-card:focus-within,
93 :root[data-theme-style] .composer-workspace-frame--context .composer-card,
94 :root[data-theme-style] .composer-workspace-frame--context .composer-card:focus-within {
95 border: 0;
96 border-radius: 0 0 15px 15px;
97 box-shadow: none;
98 }
99
100 .composer-workspace-frame--context .composer-card::before,
101 .composer-workspace-frame--context .composer-card::after,
102 :root[data-theme-style] .composer-workspace-frame--context .composer-card::before,
103 :root[data-theme-style] .composer-workspace-frame--context .composer-card::after {
104 display: none;
105 }
106
107 .composer-workspace-bar {
108 position: relative;
109 z-index: var(--z-local-raised);
110 display: flex;
111 align-items: center;
112 gap: 8px;
113 min-height: 42px;
114 padding: 5px 10px;
115 margin-bottom: -1px;
116 border: 1px solid var(--border-soft);
117 border-bottom: 0;
118 border-radius: 14px 14px 0 0;
119 background: color-mix(in srgb, var(--bg-soft) 88%, var(--bg-elev));
120 color: var(--fg-dim);
121 }
122 .composer-workspace-bar__project-wrap,
123 .composer-workspace-bar__branch-wrap {
124 position: relative;
125 min-width: 0;
126 display: flex;
127 align-items: center;
128 }
129 .composer-workspace-bar__project-wrap {
130 max-width: min(54%, 360px);
131 }
132 .composer-workspace-bar__branch-wrap {
133 max-width: min(42%, 330px);
134 }
135 .composer-workspace-bar__clear,
136 .composer-workspace-bar__choice {
137 --reasonix-draggable: no-drag;
138 appearance: none;
139 border: 0;
140 color: inherit;
141 font: inherit;
142 cursor: pointer;
143 }
144 .composer-workspace-bar__clear {
145 display: grid;
146 place-items: center;
147 width: 28px;
148 height: 28px;
149 flex: 0 0 auto;
150 margin-right: 1px;
151 padding: 0;
152 border-radius: 8px;
153 background: transparent;
154 color: var(--fg-faint);
155 }
156 .composer-workspace-bar__choice {
157 display: flex;
158 align-items: center;
159 gap: 7px;
160 min-width: 0;
161 height: 30px;
162 padding: 0 9px;
163 border-radius: 10px;
164 background: transparent;
165 font-size: var(--font-control);
166 font-weight: 560;
167 text-align: left;
168 }
169 .composer-workspace-bar__choice > span {
170 min-width: 0;
171 overflow: hidden;
172 text-overflow: ellipsis;
173 white-space: nowrap;
174 }
175 .composer-workspace-bar__choice > svg {
176 flex: 0 0 auto;
177 }
178 .composer-workspace-bar__choice > svg:last-child {
179 color: var(--fg-faint);
180 }
181 .composer-workspace-bar__choice:hover,
182 .composer-workspace-bar__choice--open,
183 .composer-workspace-bar__clear:hover {
184 background: color-mix(in srgb, var(--fg) 7%, transparent);
185 color: var(--fg);
186 }
187 .composer-workspace-bar__choice:focus-visible,
188 .composer-workspace-bar__clear:focus-visible,
189 .composer-workspace-menu button:focus-visible,
190 .composer-git-graph button:focus-visible {
191 outline: 2px solid color-mix(in srgb, var(--accent) 64%, transparent);
192 outline-offset: 1px;
193 }
194 .composer-workspace-menu {
195 position: absolute;
196 bottom: calc(100% + 8px);
197 left: 0;
198 z-index: var(--z-popover);
199 width: min(340px, calc(100vw - 32px));
200 max-height: min(430px, calc(100vh - 96px));
201 overflow: hidden;
202 padding: 0;
203 border: 1px solid var(--border);
204 border-radius: 14px;
205 background: var(--bg-elev);
206 box-shadow: 0 18px 50px color-mix(in srgb, #000 28%, transparent), var(--shadow-1);
207 color: var(--fg);
208 }
209 .composer-workspace-menu--branches {
210 width: min(360px, calc(100vw - 32px));
211 }
212 .composer-workspace-menu__search {
213 display: flex;
214 align-items: center;
215 gap: 9px;
216 height: 48px;
217 padding: 0 14px;
218 border-bottom: 1px solid var(--border-soft);
219 color: var(--fg-faint);
220 }
221 .composer-workspace-menu__search:focus-within {
222 color: var(--fg-dim);
223 }
224 .composer-workspace-menu__search input {
225 flex: 1 1 auto;
226 min-width: 0;
227 height: 100%;
228 padding: 0;
229 border: 0;
230 outline: 0;
231 background: transparent;
232 color: var(--fg);
233 font: inherit;
234 font-size: var(--font-control);
235 }
236 .composer-workspace-menu__search input::placeholder {
237 color: var(--fg-faint);
238 }
239 .composer-workspace-menu__section {
240 padding: 12px 14px 7px;
241 color: var(--fg-faint);
242 font-size: var(--font-control-small);
243 font-weight: 650;
244 }
245 .composer-workspace-menu__list {
246 max-height: 236px;
247 overflow-y: auto;
248 padding: 7px;
249 }
250 .composer-workspace-menu__list--branches {
251 padding-top: 0;
252 }
253 .composer-workspace-menu__item,
254 .composer-workspace-menu__actions > button {
255 display: flex;
256 align-items: center;
257 gap: 10px;
258 width: 100%;
259 min-height: 38px;
260 padding: 7px 10px;
261 border: 0;
262 border-radius: 9px;
263 background: transparent;
264 color: var(--fg);
265 cursor: pointer;
266 font: inherit;
267 font-size: var(--font-control);
268 text-align: left;
269 }
270 .composer-workspace-menu__item > span,
271 .composer-workspace-menu__actions > button > span {
272 flex: 1 1 auto;
273 min-width: 0;
274 overflow: hidden;
275 text-overflow: ellipsis;
276 white-space: nowrap;
277 }
278 .composer-workspace-menu__item > svg,
279 .composer-workspace-menu__actions > button > svg {
280 flex: 0 0 auto;
281 color: var(--fg-faint);
282 }
283 .composer-workspace-menu__item:hover:not(:disabled),
284 .composer-workspace-menu__actions > button:hover:not(:disabled),
285 .composer-workspace-menu__item--active {
286 background: color-mix(in srgb, var(--fg) 7%, transparent);
287 }
288 .composer-workspace-menu__item--active {
289 font-weight: 620;
290 }
291 .composer-workspace-menu__item--active > svg:last-child {
292 color: var(--fg-dim);
293 }
294 .composer-workspace-menu__item:disabled,
295 .composer-workspace-menu__actions > button:disabled {
296 cursor: default;
297 opacity: 0.55;
298 }
299 .composer-workspace-menu__actions {
300 padding: 7px;
301 border-top: 1px solid var(--border-soft);
302 }
303 .composer-workspace-menu__note {
304 padding: 10px 12px;
305 color: var(--fg-faint);
306 font-size: var(--font-control-small);
307 }
308 .composer-workspace-menu__note--error {
309 color: var(--danger);
310 overflow-wrap: anywhere;
311 }
312 .composer-workspace-menu__spinner {
313 width: 13px;
314 height: 13px;
315 flex: 0 0 auto;
316 border: 1.5px solid var(--border);
317 border-top-color: var(--fg-dim);
318 border-radius: 50%;
319 animation: spin 0.8s linear infinite;
320 }
321 .composer-git-graph-backdrop {
322 z-index: var(--z-overlay-backdrop);
323 background: color-mix(in srgb, #000 64%, transparent);
324 }
325 .composer-git-graph {
326 display: flex;
327 flex-direction: column;
328 width: min(980px, calc(100vw - 48px));
329 max-height: min(720px, calc(100vh - 48px));
330 overflow: hidden;
331 border: 1px solid var(--border);
332 border-radius: 14px;
333 background: var(--bg-elev);
334 box-shadow: 0 22px 70px color-mix(in srgb, #000 50%, transparent);
335 color: var(--fg);
336 }
337 .composer-git-graph__header {
338 display: flex;
339 align-items: center;
340 justify-content: space-between;
341 gap: 16px;
342 min-height: 54px;
343 padding: 10px 14px;
344 border-bottom: 1px solid var(--border-soft);
345 }
346 .composer-git-graph__header h2 {
347 display: flex;
348 align-items: center;
349 gap: 8px;
350 margin: 0;
351 font-size: var(--font-control);
352 font-weight: 680;
353 }
354 .composer-git-graph__header > div:first-child {
355 min-width: 0;
356 }
357 .composer-git-graph__header > div:first-child > span {
358 display: block;
359 max-width: 520px;
360 margin-top: 2px;
361 overflow: hidden;
362 color: var(--fg-faint);
363 font-size: var(--font-control-small);
364 text-overflow: ellipsis;
365 white-space: nowrap;
366 }
367 .composer-git-graph__actions {
368 display: flex;
369 gap: 4px;
370 }
371 .composer-git-graph__actions button {
372 display: grid;
373 place-items: center;
374 width: 30px;
375 height: 30px;
376 padding: 0;
377 border: 0;
378 border-radius: 8px;
379 background: transparent;
380 color: var(--fg-faint);
381 cursor: pointer;
382 }
383 .composer-git-graph__actions button:hover:not(:disabled) {
384 background: var(--bg-soft);
385 color: var(--fg);
386 }
387 .composer-git-graph__columns,
388 .composer-git-graph__row {
389 display: grid;
390 grid-template-columns: 78px minmax(220px, 1fr) 116px 130px 76px;
391 align-items: center;
392 }
393 .composer-git-graph__columns {
394 min-height: 36px;
395 padding: 0 14px;
396 border-bottom: 1px solid var(--border-soft);
397 color: var(--fg-faint);
398 font-size: var(--font-control-small);
399 font-weight: 620;
400 }
401 .composer-git-graph__body {
402 min-height: 180px;
403 overflow: auto;
404 }
405 .composer-git-graph__row {
406 min-height: 42px;
407 padding: 0 14px;
408 border-bottom: 1px solid color-mix(in srgb, var(--border-soft) 58%, transparent);
409 color: var(--fg-dim);
410 font-size: var(--font-control-small);
411 }
412 .composer-git-graph__row:hover {
413 background: color-mix(in srgb, var(--fg) 5%, transparent);
414 }
415 .composer-git-graph__row > span,
416 .composer-git-graph__row > code {
417 min-width: 0;
418 overflow: hidden;
419 text-overflow: ellipsis;
420 white-space: nowrap;
421 }
422 .composer-git-graph__message {
423 color: var(--fg);
424 font-size: var(--font-control);
425 }
426 .composer-git-graph__row code {
427 color: var(--fg-faint);
428 font-family: var(--mono);
429 }
430 .composer-git-graph__lane {
431 position: relative;
432 align-self: stretch;
433 }
434 .composer-git-graph__lane i {
435 position: absolute;
436 top: 14px;
437 left: 14px;
438 z-index: var(--z-local-raised);
439 width: 10px;
440 height: 10px;
441 border: 2px solid var(--accent);
442 border-radius: 50%;
443 background: var(--bg-elev);
444 }
445 .composer-git-graph__lane b {
446 position: absolute;
447 top: 22px;
448 bottom: -20px;
449 left: 18px;
450 width: 2px;
451 background: color-mix(in srgb, var(--accent) 68%, transparent);
452 }
453 .composer-git-graph__note {
454 padding: 24px;
455 color: var(--fg-faint);
456 text-align: center;
457 }
458 .composer-git-graph__note--error {
459 color: var(--danger);
460 }
461 .composer-git-graph__spin {
462 animation: spin 0.8s linear infinite;
463 }
464 @media (max-width: 720px) {
465 .composer-workspace-bar {
466 gap: 4px;
467 padding-inline: 6px;
468 }
469 .composer-workspace-bar__project-wrap,
470 .composer-workspace-bar__branch-wrap {
471 max-width: calc(50% - 2px);
472 }
473 .composer-workspace-bar__clear {
474 display: none;
475 }
476 .composer-workspace-bar__choice {
477 padding-inline: 7px;
478 }
479 .composer-git-graph__columns,
480 .composer-git-graph__row {
481 grid-template-columns: 52px minmax(190px, 1fr) 94px 72px;
482 }
483 .composer-git-graph__columns > span:nth-child(4),
484 .composer-git-graph__row > span:nth-child(4) {
485 display: none;
486 }
487 }
488
488 lines CSS