xgen-dex-ide 1.60.0

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.
Files changed (91) hide show
  1. package/README.md +42 -0
  2. package/dist/components/ActivityBar.d.ts +21 -0
  3. package/dist/components/ActivityBar.d.ts.map +1 -0
  4. package/dist/components/ActivityBar.js +14 -0
  5. package/dist/components/ActivityBar.js.map +1 -0
  6. package/dist/components/EditorArea.d.ts +5 -0
  7. package/dist/components/EditorArea.d.ts.map +1 -0
  8. package/dist/components/EditorArea.js +468 -0
  9. package/dist/components/EditorArea.js.map +1 -0
  10. package/dist/components/Explorer.d.ts +2 -0
  11. package/dist/components/Explorer.d.ts.map +1 -0
  12. package/dist/components/Explorer.js +349 -0
  13. package/dist/components/Explorer.js.map +1 -0
  14. package/dist/components/IdeView.d.ts +24 -0
  15. package/dist/components/IdeView.d.ts.map +1 -0
  16. package/dist/components/IdeView.js +359 -0
  17. package/dist/components/IdeView.js.map +1 -0
  18. package/dist/components/QuickOpen.d.ts +2 -0
  19. package/dist/components/QuickOpen.d.ts.map +1 -0
  20. package/dist/components/QuickOpen.js +204 -0
  21. package/dist/components/QuickOpen.js.map +1 -0
  22. package/dist/components/ScmView.d.ts +6 -0
  23. package/dist/components/ScmView.d.ts.map +1 -0
  24. package/dist/components/ScmView.js +283 -0
  25. package/dist/components/ScmView.js.map +1 -0
  26. package/dist/components/SearchView.d.ts +2 -0
  27. package/dist/components/SearchView.d.ts.map +1 -0
  28. package/dist/components/SearchView.js +97 -0
  29. package/dist/components/SearchView.js.map +1 -0
  30. package/dist/components/StatusBar.d.ts +2 -0
  31. package/dist/components/StatusBar.d.ts.map +1 -0
  32. package/dist/components/StatusBar.js +71 -0
  33. package/dist/components/StatusBar.js.map +1 -0
  34. package/dist/components/TerminalPanel.d.ts +6 -0
  35. package/dist/components/TerminalPanel.d.ts.map +1 -0
  36. package/dist/components/TerminalPanel.js +101 -0
  37. package/dist/components/TerminalPanel.js.map +1 -0
  38. package/dist/components/hooks.d.ts +25 -0
  39. package/dist/components/hooks.d.ts.map +1 -0
  40. package/dist/components/hooks.js +99 -0
  41. package/dist/components/hooks.js.map +1 -0
  42. package/dist/components/icons.d.ts +23 -0
  43. package/dist/components/icons.d.ts.map +1 -0
  44. package/dist/components/icons.js +123 -0
  45. package/dist/components/icons.js.map +1 -0
  46. package/dist/components/primitives.d.ts +57 -0
  47. package/dist/components/primitives.d.ts.map +1 -0
  48. package/dist/components/primitives.js +263 -0
  49. package/dist/components/primitives.js.map +1 -0
  50. package/dist/fuzzy.d.ts +17 -0
  51. package/dist/fuzzy.d.ts.map +1 -0
  52. package/dist/fuzzy.js +62 -0
  53. package/dist/fuzzy.js.map +1 -0
  54. package/dist/git-model.d.ts +104 -0
  55. package/dist/git-model.d.ts.map +1 -0
  56. package/dist/git-model.js +126 -0
  57. package/dist/git-model.js.map +1 -0
  58. package/dist/ide.css +2203 -0
  59. package/dist/index.d.ts +22 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +19 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/keys.d.ts +33 -0
  64. package/dist/keys.d.ts.map +1 -0
  65. package/dist/keys.js +98 -0
  66. package/dist/keys.js.map +1 -0
  67. package/dist/paths.d.ts +14 -0
  68. package/dist/paths.d.ts.map +1 -0
  69. package/dist/paths.js +66 -0
  70. package/dist/paths.js.map +1 -0
  71. package/dist/store.d.ts +406 -0
  72. package/dist/store.d.ts.map +1 -0
  73. package/dist/store.js +1464 -0
  74. package/dist/store.js.map +1 -0
  75. package/dist/terminal.d.ts +60 -0
  76. package/dist/terminal.d.ts.map +1 -0
  77. package/dist/terminal.js +293 -0
  78. package/dist/terminal.js.map +1 -0
  79. package/dist/text.d.ts +26 -0
  80. package/dist/text.d.ts.map +1 -0
  81. package/dist/text.js +76 -0
  82. package/dist/text.js.map +1 -0
  83. package/dist/tree.d.ts +31 -0
  84. package/dist/tree.d.ts.map +1 -0
  85. package/dist/tree.js +105 -0
  86. package/dist/tree.js.map +1 -0
  87. package/dist/types.d.ts +216 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +14 -0
  90. package/dist/types.js.map +1 -0
  91. package/package.json +42 -0
package/dist/ide.css ADDED
@@ -0,0 +1,2203 @@
1
+ /*
2
+ * IDE 보기 — 모든 규칙은 .xide-root 아래로 가둔다(호스트 화면을 건드리지 않는다).
3
+ * 색은 --xide-* 변수로만 쓴다. 호스트는 이 변수만 덮어 자기 색에 맞출 수 있다.
4
+ * 클래스 이름: 블록·요소는 xide-, 상태는 xide--(active·danger·dot …). 호스트 화면의 전역 규칙
5
+ * (.danger·.primary·.dot 같은 이름)이 IDE 안으로 새어 들지 않게 상태도 이름공간에 넣는다.
6
+ * 배포물(xgen-dex-ide)은 빌드가 아래 @import 를 펼쳐 한 파일로 낸다.
7
+ */
8
+ /* @xterm/xterm/css/xterm.css */
9
+ /**
10
+ * Copyright (c) 2014 The xterm.js authors. All rights reserved.
11
+ * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
12
+ * https://github.com/chjj/term.js
13
+ * @license MIT
14
+ *
15
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
16
+ * of this software and associated documentation files (the "Software"), to deal
17
+ * in the Software without restriction, including without limitation the rights
18
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19
+ * copies of the Software, and to permit persons to whom the Software is
20
+ * furnished to do so, subject to the following conditions:
21
+ *
22
+ * The above copyright notice and this permission notice shall be included in
23
+ * all copies or substantial portions of the Software.
24
+ *
25
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
29
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
30
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
31
+ * THE SOFTWARE.
32
+ *
33
+ * Originally forked from (with the author's permission):
34
+ * Fabrice Bellard's javascript vt100 for jslinux:
35
+ * http://bellard.org/jslinux/
36
+ * Copyright (c) 2011 Fabrice Bellard
37
+ * The original design remains. The terminal itself
38
+ * has been extended to include xterm CSI codes, among
39
+ * other features.
40
+ */
41
+
42
+ /**
43
+ * Default styles for xterm.js
44
+ */
45
+
46
+ .xterm {
47
+ cursor: text;
48
+ position: relative;
49
+ user-select: none;
50
+ -ms-user-select: none;
51
+ -webkit-user-select: none;
52
+ }
53
+
54
+ .xterm.focus,
55
+ .xterm:focus {
56
+ outline: none;
57
+ }
58
+
59
+ .xterm .xterm-helpers {
60
+ position: absolute;
61
+ top: 0;
62
+ /**
63
+ * The z-index of the helpers must be higher than the canvases in order for
64
+ * IMEs to appear on top.
65
+ */
66
+ z-index: 5;
67
+ }
68
+
69
+ .xterm .xterm-helper-textarea {
70
+ padding: 0;
71
+ border: 0;
72
+ margin: 0;
73
+ /* Move textarea out of the screen to the far left, so that the cursor is not visible */
74
+ position: absolute;
75
+ opacity: 0;
76
+ left: -9999em;
77
+ top: 0;
78
+ width: 0;
79
+ height: 0;
80
+ z-index: -5;
81
+ /** Prevent wrapping so the IME appears against the textarea at the correct position */
82
+ white-space: nowrap;
83
+ overflow: hidden;
84
+ resize: none;
85
+ }
86
+
87
+ .xterm .composition-view {
88
+ /* TODO: Composition position got messed up somewhere */
89
+ background: #000;
90
+ color: #FFF;
91
+ display: none;
92
+ position: absolute;
93
+ white-space: nowrap;
94
+ z-index: 1;
95
+ }
96
+
97
+ .xterm .composition-view.active {
98
+ display: block;
99
+ }
100
+
101
+ .xterm .xterm-viewport {
102
+ /* On OS X this is required in order for the scroll bar to appear fully opaque */
103
+ background-color: #000;
104
+ overflow-y: scroll;
105
+ cursor: default;
106
+ position: absolute;
107
+ right: 0;
108
+ left: 0;
109
+ top: 0;
110
+ bottom: 0;
111
+ }
112
+
113
+ .xterm .xterm-screen {
114
+ position: relative;
115
+ }
116
+
117
+ .xterm .xterm-screen canvas {
118
+ position: absolute;
119
+ left: 0;
120
+ top: 0;
121
+ }
122
+
123
+ .xterm-char-measure-element {
124
+ display: inline-block;
125
+ visibility: hidden;
126
+ position: absolute;
127
+ top: 0;
128
+ left: -9999em;
129
+ line-height: normal;
130
+ }
131
+
132
+ .xterm.enable-mouse-events {
133
+ /* When mouse events are enabled (eg. tmux), revert to the standard pointer cursor */
134
+ cursor: default;
135
+ }
136
+
137
+ .xterm.xterm-cursor-pointer,
138
+ .xterm .xterm-cursor-pointer {
139
+ cursor: pointer;
140
+ }
141
+
142
+ .xterm.column-select.focus {
143
+ /* Column selection mode */
144
+ cursor: crosshair;
145
+ }
146
+
147
+ .xterm .xterm-accessibility:not(.debug),
148
+ .xterm .xterm-message {
149
+ position: absolute;
150
+ left: 0;
151
+ top: 0;
152
+ bottom: 0;
153
+ right: 0;
154
+ z-index: 10;
155
+ color: transparent;
156
+ pointer-events: none;
157
+ }
158
+
159
+ .xterm .xterm-accessibility-tree:not(.debug) *::selection {
160
+ color: transparent;
161
+ }
162
+
163
+ .xterm .xterm-accessibility-tree {
164
+ font-family: monospace;
165
+ user-select: text;
166
+ white-space: pre;
167
+ }
168
+
169
+ .xterm .xterm-accessibility-tree > div {
170
+ transform-origin: left;
171
+ width: fit-content;
172
+ }
173
+
174
+ .xterm .live-region {
175
+ position: absolute;
176
+ left: -9999px;
177
+ width: 1px;
178
+ height: 1px;
179
+ overflow: hidden;
180
+ }
181
+
182
+ .xterm-dim {
183
+ /* Dim should not apply to background, so the opacity of the foreground color is applied
184
+ * explicitly in the generated class and reset to 1 here */
185
+ opacity: 1 !important;
186
+ }
187
+
188
+ .xterm-underline-1 { text-decoration: underline; }
189
+ .xterm-underline-2 { text-decoration: double underline; }
190
+ .xterm-underline-3 { text-decoration: wavy underline; }
191
+ .xterm-underline-4 { text-decoration: dotted underline; }
192
+ .xterm-underline-5 { text-decoration: dashed underline; }
193
+
194
+ .xterm-overline {
195
+ text-decoration: overline;
196
+ }
197
+
198
+ .xterm-overline.xterm-underline-1 { text-decoration: overline underline; }
199
+ .xterm-overline.xterm-underline-2 { text-decoration: overline double underline; }
200
+ .xterm-overline.xterm-underline-3 { text-decoration: overline wavy underline; }
201
+ .xterm-overline.xterm-underline-4 { text-decoration: overline dotted underline; }
202
+ .xterm-overline.xterm-underline-5 { text-decoration: overline dashed underline; }
203
+
204
+ .xterm-strikethrough {
205
+ text-decoration: line-through;
206
+ }
207
+
208
+ .xterm-screen .xterm-decoration-container .xterm-decoration {
209
+ z-index: 6;
210
+ position: absolute;
211
+ }
212
+
213
+ .xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer {
214
+ z-index: 7;
215
+ }
216
+
217
+ .xterm-decoration-overview-ruler {
218
+ z-index: 8;
219
+ position: absolute;
220
+ top: 0;
221
+ right: 0;
222
+ pointer-events: none;
223
+ }
224
+
225
+ .xterm-decoration-top {
226
+ z-index: 2;
227
+ position: relative;
228
+ }
229
+
230
+
231
+
232
+ /* Derived from vs/base/browser/ui/scrollbar/media/scrollbar.css */
233
+
234
+ /* xterm.js customization: Override xterm's cursor style */
235
+ .xterm .xterm-scrollable-element > .scrollbar {
236
+ cursor: default;
237
+ }
238
+
239
+ /* Arrows */
240
+ .xterm .xterm-scrollable-element > .scrollbar > .scra {
241
+ cursor: pointer;
242
+ font-size: 11px !important;
243
+ }
244
+
245
+ .xterm .xterm-scrollable-element > .visible {
246
+ opacity: 1;
247
+
248
+ /* Background rule added for IE9 - to allow clicks on dom node */
249
+ background:rgba(0,0,0,0);
250
+
251
+ transition: opacity 100ms linear;
252
+ /* In front of peek view */
253
+ z-index: 11;
254
+ }
255
+ .xterm .xterm-scrollable-element > .invisible {
256
+ opacity: 0;
257
+ pointer-events: none;
258
+ }
259
+ .xterm .xterm-scrollable-element > .invisible.fade {
260
+ transition: opacity 800ms linear;
261
+ }
262
+
263
+ /* Scrollable Content Inset Shadow */
264
+ .xterm .xterm-scrollable-element > .shadow {
265
+ position: absolute;
266
+ display: none;
267
+ }
268
+ .xterm .xterm-scrollable-element > .shadow.top {
269
+ display: block;
270
+ top: 0;
271
+ left: 3px;
272
+ height: 3px;
273
+ width: 100%;
274
+ box-shadow: var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset;
275
+ }
276
+ .xterm .xterm-scrollable-element > .shadow.left {
277
+ display: block;
278
+ top: 3px;
279
+ left: 0;
280
+ height: 100%;
281
+ width: 3px;
282
+ box-shadow: var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset;
283
+ }
284
+ .xterm .xterm-scrollable-element > .shadow.top-left-corner {
285
+ display: block;
286
+ top: 0;
287
+ left: 0;
288
+ height: 3px;
289
+ width: 3px;
290
+ }
291
+ .xterm .xterm-scrollable-element > .shadow.top.left {
292
+ box-shadow: var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset;
293
+ }
294
+
295
+ .xide-root {
296
+ --xide-bg: #1e1e1e;
297
+ --xide-bg-side: #252526;
298
+ --xide-bg-activity: #333333;
299
+ --xide-bg-tabs: #252526;
300
+ --xide-bg-tab: #2d2d2d;
301
+ --xide-bg-tab-active: #1e1e1e;
302
+ --xide-bg-input: #3c3c3c;
303
+ --xide-bg-hover: #2a2d2e;
304
+ --xide-bg-selected: #37373d;
305
+ --xide-bg-focus: #04395e;
306
+ --xide-bg-menu: #252526;
307
+ --xide-bg-status: #007acc;
308
+ --xide-bg-status-readonly: #6c6c6c;
309
+ --xide-bg-panel: #1e1e1e;
310
+ --xide-bg-banner: #4d3a0f;
311
+ --xide-fg: #cccccc;
312
+ --xide-fg-strong: #e7e7e7;
313
+ --xide-fg-dim: #8b8b8b;
314
+ --xide-fg-status: #ffffff;
315
+ --xide-fg-activity: #858585;
316
+ --xide-fg-activity-active: #ffffff;
317
+ --xide-border: #3c3c3c;
318
+ --xide-border-soft: #2b2b2b;
319
+ --xide-accent: #007acc;
320
+ --xide-accent-fg: #ffffff;
321
+ --xide-focus: #007fd4;
322
+ --xide-danger: #f14c4c;
323
+ --xide-warning: #cca700;
324
+ --xide-success: #89d185;
325
+ --xide-git-modified: #e2c08d;
326
+ --xide-git-added: #81b88b;
327
+ --xide-git-untracked: #73c991;
328
+ --xide-git-deleted: #c74e39;
329
+ --xide-git-conflict: #e4676b;
330
+ --xide-git-renamed: #73c991;
331
+ --xide-hit: rgba(234, 92, 0, 0.33);
332
+ --xide-ins: rgba(156, 204, 44, 0.3);
333
+ --xide-del: rgba(255, 0, 0, 0.3);
334
+ --xide-shadow: rgba(0, 0, 0, 0.36);
335
+ --xide-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Pretendard', 'Noto Sans KR', 'Malgun Gothic', sans-serif;
336
+ --xide-mono: 'JetBrains Mono', 'D2Coding', 'Fira Code', Menlo, Consolas, 'Liberation Mono', monospace;
337
+
338
+ position: relative;
339
+ display: flex;
340
+ flex-direction: column;
341
+ width: 100%;
342
+ height: 100%;
343
+ min-height: 0;
344
+ overflow: hidden;
345
+ background: var(--xide-bg);
346
+ color: var(--xide-fg);
347
+ font-family: var(--xide-font);
348
+ font-size: 13px;
349
+ line-height: 1.4;
350
+ -webkit-font-smoothing: antialiased;
351
+ }
352
+
353
+ .xide-root.xide-theme-light {
354
+ --xide-bg: #ffffff;
355
+ --xide-bg-side: #f3f3f3;
356
+ --xide-bg-activity: #2c2c2c;
357
+ --xide-bg-tabs: #f3f3f3;
358
+ --xide-bg-tab: #ececec;
359
+ --xide-bg-tab-active: #ffffff;
360
+ --xide-bg-input: #ffffff;
361
+ --xide-bg-hover: #e8e8e8;
362
+ --xide-bg-selected: #e4e6f1;
363
+ --xide-bg-focus: #d6ebff;
364
+ --xide-bg-menu: #ffffff;
365
+ --xide-bg-panel: #ffffff;
366
+ --xide-bg-banner: #fff4d6;
367
+ --xide-fg: #333333;
368
+ --xide-fg-strong: #1f1f1f;
369
+ --xide-fg-dim: #717171;
370
+ --xide-fg-activity: #8e8e8e;
371
+ --xide-border: #d4d4d4;
372
+ --xide-border-soft: #e5e5e5;
373
+ --xide-git-modified: #895503;
374
+ --xide-git-added: #587c0c;
375
+ --xide-git-untracked: #007100;
376
+ --xide-git-deleted: #ad0707;
377
+ --xide-git-conflict: #ad0707;
378
+ --xide-git-renamed: #007100;
379
+ --xide-hit: rgba(234, 92, 0, 0.25);
380
+ --xide-shadow: rgba(0, 0, 0, 0.16);
381
+ }
382
+
383
+ .xide-root *,
384
+ .xide-root *::before,
385
+ .xide-root *::after {
386
+ box-sizing: border-box;
387
+ }
388
+
389
+ .xide-root button {
390
+ font: inherit;
391
+ color: inherit;
392
+ }
393
+
394
+ .xide-root:focus {
395
+ outline: none;
396
+ }
397
+
398
+ .xide-root :focus-visible {
399
+ outline: 1px solid var(--xide-focus);
400
+ outline-offset: -1px;
401
+ }
402
+
403
+ /* Monaco 단독판 CSS 는 선택자 목록 실수로 `.monaco-editor` 자체에 1px 윤곽선을 건다. diff 편집기의
404
+ 가운데 여백(gutter)이 그 클래스를 달고 있어 파란 테두리 칸으로 보인다 — 그 윤곽선만 걷는다. */
405
+ .xide-root .monaco-diff-editor .gutter.monaco-editor {
406
+ outline: none;
407
+ }
408
+
409
+ .xide-icon {
410
+ flex: none;
411
+ display: inline-block;
412
+ vertical-align: middle;
413
+ }
414
+
415
+ .xide-icon.xide--spin {
416
+ animation: xide-spin 1s linear infinite;
417
+ }
418
+
419
+ @keyframes xide-spin {
420
+ to {
421
+ transform: rotate(360deg);
422
+ }
423
+ }
424
+
425
+ @media (prefers-reduced-motion: reduce) {
426
+ .xide-icon.xide--spin,
427
+ .xide-spinner,
428
+ .xide-progress span {
429
+ animation: none !important;
430
+ }
431
+ }
432
+
433
+ /* ── 틀 ─────────────────────────────────────────────────────── */
434
+
435
+ .xide-main {
436
+ flex: 1 1 auto;
437
+ display: flex;
438
+ min-height: 0;
439
+ }
440
+
441
+ .xide-activity {
442
+ flex: none;
443
+ width: 48px;
444
+ display: flex;
445
+ flex-direction: column;
446
+ justify-content: space-between;
447
+ background: var(--xide-bg-activity);
448
+ }
449
+
450
+ .xide-activity-top,
451
+ .xide-activity-bottom {
452
+ display: flex;
453
+ flex-direction: column;
454
+ }
455
+
456
+ .xide-activity-btn {
457
+ position: relative;
458
+ display: flex;
459
+ align-items: center;
460
+ justify-content: center;
461
+ width: 48px;
462
+ height: 48px;
463
+ border: 0;
464
+ border-left: 2px solid transparent;
465
+ background: transparent;
466
+ color: var(--xide-fg-activity) !important;
467
+ cursor: pointer;
468
+ }
469
+
470
+ .xide-activity-btn:hover {
471
+ color: var(--xide-fg-activity-active) !important;
472
+ }
473
+
474
+ .xide-activity-btn.xide--active {
475
+ color: var(--xide-fg-activity-active) !important;
476
+ border-left-color: var(--xide-fg-activity-active);
477
+ }
478
+
479
+ .xide-activity-badge {
480
+ position: absolute;
481
+ right: 6px;
482
+ bottom: 8px;
483
+ min-width: 16px;
484
+ height: 16px;
485
+ padding: 0 4px;
486
+ border-radius: 8px;
487
+ background: var(--xide-accent);
488
+ color: var(--xide-accent-fg);
489
+ font-size: 10px;
490
+ line-height: 16px;
491
+ text-align: center;
492
+ }
493
+
494
+ .xide-sidebar {
495
+ flex: none;
496
+ display: flex;
497
+ flex-direction: column;
498
+ min-width: 0;
499
+ background: var(--xide-bg-side);
500
+ border-right: 1px solid var(--xide-border-soft);
501
+ }
502
+
503
+ .xide-center {
504
+ flex: 1 1 auto;
505
+ display: flex;
506
+ flex-direction: column;
507
+ min-width: 0;
508
+ min-height: 0;
509
+ }
510
+
511
+ .xide-chat {
512
+ flex: none;
513
+ display: flex;
514
+ flex-direction: column;
515
+ min-width: 0;
516
+ min-height: 0;
517
+ overflow: hidden;
518
+ border-left: 1px solid var(--xide-border-soft);
519
+ background: var(--xide-bg-side);
520
+ }
521
+
522
+ .xide-chat > * {
523
+ flex: 1 1 auto;
524
+ min-height: 0;
525
+ }
526
+
527
+ .xide-split {
528
+ flex: none;
529
+ position: relative;
530
+ z-index: 3;
531
+ background: transparent;
532
+ touch-action: none;
533
+ }
534
+
535
+ .xide-split-x {
536
+ width: 4px;
537
+ margin: 0 -2px;
538
+ cursor: col-resize;
539
+ }
540
+
541
+ .xide-split-y {
542
+ height: 4px;
543
+ margin: -2px 0;
544
+ cursor: row-resize;
545
+ }
546
+
547
+ .xide-split:hover,
548
+ .xide-split.xide--dragging,
549
+ .xide-split:focus-visible {
550
+ background: var(--xide-focus);
551
+ transition: background 0.1s 0.2s;
552
+ }
553
+
554
+ /* ── 사이드바 공통 ──────────────────────────────────────────── */
555
+
556
+ .xide-side-view {
557
+ display: flex;
558
+ flex-direction: column;
559
+ min-height: 0;
560
+ height: 100%;
561
+ }
562
+
563
+ .xide-side-header {
564
+ flex: none;
565
+ display: flex;
566
+ align-items: center;
567
+ height: 35px;
568
+ padding: 0 8px 0 20px;
569
+ }
570
+
571
+ .xide-side-title {
572
+ flex: 1 1 auto;
573
+ font-size: 11px;
574
+ font-weight: 400;
575
+ letter-spacing: 0.04em;
576
+ text-transform: uppercase;
577
+ white-space: nowrap;
578
+ overflow: hidden;
579
+ text-overflow: ellipsis;
580
+ }
581
+
582
+ .xide-section-header {
583
+ flex: none;
584
+ display: flex;
585
+ align-items: center;
586
+ height: 22px;
587
+ padding: 0 8px 0 12px;
588
+ font-size: 11px;
589
+ font-weight: 700;
590
+ text-transform: uppercase;
591
+ letter-spacing: 0.02em;
592
+ }
593
+
594
+ .xide-section-title {
595
+ flex: 1 1 auto;
596
+ min-width: 0;
597
+ overflow: hidden;
598
+ text-overflow: ellipsis;
599
+ white-space: nowrap;
600
+ }
601
+
602
+ .xide-section-actions {
603
+ display: flex;
604
+ align-items: center;
605
+ gap: 2px;
606
+ opacity: 0;
607
+ }
608
+
609
+ .xide-side-view:hover .xide-section-actions,
610
+ .xide-side-view:focus-within .xide-section-actions,
611
+ .xide-side-header .xide-section-actions {
612
+ opacity: 1;
613
+ }
614
+
615
+ .xide-ibtn {
616
+ position: relative;
617
+ display: inline-flex;
618
+ align-items: center;
619
+ justify-content: center;
620
+ width: 22px;
621
+ height: 22px;
622
+ padding: 0;
623
+ border: 0;
624
+ border-radius: 5px;
625
+ background: transparent;
626
+ color: var(--xide-fg) !important;
627
+ cursor: pointer;
628
+ }
629
+
630
+ .xide-ibtn:hover:not(:disabled) {
631
+ background: rgba(90, 93, 94, 0.31);
632
+ }
633
+
634
+ .xide-ibtn.xide--active {
635
+ background: rgba(90, 93, 94, 0.45);
636
+ }
637
+
638
+ .xide-ibtn:disabled {
639
+ opacity: 0.4;
640
+ cursor: default;
641
+ }
642
+
643
+ .xide-badge {
644
+ position: absolute;
645
+ top: -3px;
646
+ right: -4px;
647
+ min-width: 14px;
648
+ padding: 0 3px;
649
+ border-radius: 7px;
650
+ background: var(--xide-accent);
651
+ color: var(--xide-accent-fg);
652
+ font-size: 9px;
653
+ line-height: 14px;
654
+ }
655
+
656
+ .xide-btn {
657
+ display: inline-flex;
658
+ align-items: center;
659
+ justify-content: center;
660
+ gap: 6px;
661
+ height: 26px;
662
+ padding: 0 12px;
663
+ border: 1px solid var(--xide-border);
664
+ border-radius: 2px;
665
+ background: transparent;
666
+ color: var(--xide-fg) !important;
667
+ font-size: 12px;
668
+ white-space: nowrap;
669
+ cursor: pointer;
670
+ }
671
+
672
+ .xide-btn:hover:not(:disabled) {
673
+ background: var(--xide-bg-hover);
674
+ }
675
+
676
+ .xide-btn.xide--primary {
677
+ border-color: var(--xide-accent);
678
+ background: var(--xide-accent);
679
+ color: var(--xide-accent-fg) !important;
680
+ }
681
+
682
+ .xide-btn.xide--primary:hover:not(:disabled) {
683
+ filter: brightness(1.12);
684
+ background: var(--xide-accent);
685
+ }
686
+
687
+ .xide-btn.xide--danger {
688
+ border-color: var(--xide-danger);
689
+ color: var(--xide-danger) !important;
690
+ }
691
+
692
+ .xide-btn.xide--full {
693
+ width: 100%;
694
+ }
695
+
696
+ .xide-btn:disabled {
697
+ opacity: 0.5;
698
+ cursor: default;
699
+ }
700
+
701
+ .xide-link {
702
+ display: inline-flex;
703
+ align-items: center;
704
+ gap: 4px;
705
+ padding: 0;
706
+ border: 0;
707
+ background: transparent;
708
+ color: var(--xide-focus) !important;
709
+ cursor: pointer;
710
+ }
711
+
712
+ .xide-link:hover:not(:disabled) {
713
+ text-decoration: underline;
714
+ }
715
+
716
+ .xide-link:disabled {
717
+ color: inherit !important;
718
+ cursor: default;
719
+ }
720
+
721
+ .xide-input {
722
+ width: 100%;
723
+ min-width: 0;
724
+ height: 26px;
725
+ padding: 3px 6px;
726
+ border: 1px solid transparent;
727
+ border-radius: 2px;
728
+ background: var(--xide-bg-input);
729
+ color: var(--xide-fg-strong);
730
+ font: inherit;
731
+ font-size: 13px;
732
+ outline: none;
733
+ }
734
+
735
+ textarea.xide-input {
736
+ height: auto;
737
+ min-height: 26px;
738
+ resize: none;
739
+ line-height: 18px;
740
+ }
741
+
742
+ .xide-input:focus {
743
+ border-color: var(--xide-focus);
744
+ }
745
+
746
+ .xide-input.xide--invalid {
747
+ border-color: var(--xide-danger);
748
+ }
749
+
750
+ .xide-input::placeholder {
751
+ color: var(--xide-fg-dim);
752
+ }
753
+
754
+ .xide-dim {
755
+ color: var(--xide-fg-dim);
756
+ }
757
+
758
+ .xide-small {
759
+ font-size: 12px;
760
+ }
761
+
762
+ .xide-spacer {
763
+ flex: 1 1 auto;
764
+ }
765
+
766
+ .xide-count {
767
+ min-width: 18px;
768
+ padding: 0 5px;
769
+ border-radius: 9px;
770
+ background: rgba(128, 128, 128, 0.35);
771
+ font-size: 11px;
772
+ line-height: 18px;
773
+ text-align: center;
774
+ }
775
+
776
+ .xide-row-actions {
777
+ display: none;
778
+ align-items: center;
779
+ gap: 1px;
780
+ margin-left: auto;
781
+ }
782
+
783
+ .xide-empty {
784
+ display: flex;
785
+ flex-direction: column;
786
+ align-items: center;
787
+ justify-content: center;
788
+ gap: 10px;
789
+ padding: 24px 16px;
790
+ color: var(--xide-fg-dim);
791
+ text-align: center;
792
+ }
793
+
794
+ .xide-empty p {
795
+ margin: 0;
796
+ max-width: 34em;
797
+ }
798
+
799
+ .xide-empty-actions {
800
+ display: flex;
801
+ flex-wrap: wrap;
802
+ gap: 8px;
803
+ justify-content: center;
804
+ }
805
+
806
+ .xide-progress {
807
+ flex: none;
808
+ position: relative;
809
+ height: 2px;
810
+ overflow: hidden;
811
+ }
812
+
813
+ .xide-progress span {
814
+ position: absolute;
815
+ top: 0;
816
+ width: 30%;
817
+ height: 2px;
818
+ background: var(--xide-focus);
819
+ animation: xide-progress 1.2s ease-in-out infinite;
820
+ }
821
+
822
+ @keyframes xide-progress {
823
+ from {
824
+ left: -30%;
825
+ }
826
+ to {
827
+ left: 100%;
828
+ }
829
+ }
830
+
831
+ .xide-spinner {
832
+ width: 10px;
833
+ height: 10px;
834
+ border: 1.5px solid currentColor;
835
+ border-right-color: transparent;
836
+ border-radius: 50%;
837
+ animation: xide-spin 0.8s linear infinite;
838
+ }
839
+
840
+ /* ── 탐색기 ─────────────────────────────────────────────────── */
841
+
842
+ .xide-tree {
843
+ flex: 1 1 auto;
844
+ min-height: 0;
845
+ overflow: auto;
846
+ padding-bottom: 12px;
847
+ outline: none;
848
+ }
849
+
850
+ .xide-tree.xide--drop-root {
851
+ background: rgba(83, 89, 93, 0.3);
852
+ }
853
+
854
+ .xide-tree-note {
855
+ padding: 8px 20px;
856
+ color: var(--xide-fg-dim);
857
+ font-size: 12px;
858
+ display: flex;
859
+ flex-direction: column;
860
+ align-items: flex-start;
861
+ gap: 6px;
862
+ }
863
+
864
+ .xide-tree-note.xide--error {
865
+ color: var(--xide-danger);
866
+ }
867
+
868
+ .xide-tree-row {
869
+ position: relative;
870
+ display: flex;
871
+ align-items: center;
872
+ gap: 4px;
873
+ height: 22px;
874
+ padding-right: 8px;
875
+ white-space: nowrap;
876
+ cursor: pointer;
877
+ user-select: none;
878
+ }
879
+
880
+ .xide-tree-row:hover {
881
+ background: var(--xide-bg-hover);
882
+ }
883
+
884
+ .xide-tree-row.xide--selected {
885
+ background: var(--xide-bg-selected);
886
+ }
887
+
888
+ .xide-tree:focus .xide-tree-row.xide--focused {
889
+ outline: 1px solid var(--xide-focus);
890
+ outline-offset: -1px;
891
+ background: var(--xide-bg-focus);
892
+ }
893
+
894
+ .xide-tree-row.xide--cut {
895
+ opacity: 0.55;
896
+ }
897
+
898
+ .xide-tree-row.xide--drop-target {
899
+ background: rgba(83, 89, 93, 0.5);
900
+ }
901
+
902
+ .xide-tree-guides {
903
+ position: absolute;
904
+ left: 8px;
905
+ top: 0;
906
+ bottom: 0;
907
+ pointer-events: none;
908
+ }
909
+
910
+ .xide-tree-chevron {
911
+ flex: none;
912
+ width: 16px;
913
+ display: inline-flex;
914
+ justify-content: center;
915
+ }
916
+
917
+ .xide-tree-name {
918
+ flex: 1 1 auto;
919
+ min-width: 0;
920
+ overflow: hidden;
921
+ text-overflow: ellipsis;
922
+ }
923
+
924
+ .xide-tree-deco {
925
+ flex: none;
926
+ min-width: 12px;
927
+ margin-left: 6px;
928
+ font-size: 11px;
929
+ text-align: right;
930
+ }
931
+
932
+ /* 폴더의 변경 표시 — 글자(●)는 글꼴에 따라 그림 문자로 바뀌어 모양이 흔들린다. 직접 그린다. */
933
+ .xide-tree-deco.xide--dot {
934
+ display: inline-flex;
935
+ align-items: center;
936
+ justify-content: flex-end;
937
+ align-self: stretch;
938
+ }
939
+
940
+ .xide-tree-deco.xide--dot i {
941
+ width: 6px;
942
+ height: 6px;
943
+ border-radius: 50%;
944
+ background: currentColor;
945
+ }
946
+
947
+ .xide-folder-icon {
948
+ color: #dcb67a;
949
+ }
950
+
951
+ .xide-file-generic,
952
+ .xide-file-image {
953
+ color: var(--xide-fg-dim);
954
+ }
955
+
956
+ .xide-file-badge {
957
+ flex: none;
958
+ display: inline-flex;
959
+ align-items: center;
960
+ justify-content: center;
961
+ min-width: 16px;
962
+ height: 16px;
963
+ font-family: var(--xide-mono);
964
+ font-size: 8px;
965
+ font-weight: 700;
966
+ letter-spacing: -0.02em;
967
+ }
968
+
969
+ .xide--git-modified .xide-tree-name,
970
+ .xide--git-modified .xide-tree-deco,
971
+ .xide--git-modified .xide-scm-letter,
972
+ .xide--git-modified .xide-scm-change-name {
973
+ color: var(--xide-git-modified);
974
+ }
975
+
976
+ .xide--git-added .xide-tree-name,
977
+ .xide--git-added .xide-tree-deco,
978
+ .xide--git-added .xide-scm-letter,
979
+ .xide--git-added .xide-scm-change-name {
980
+ color: var(--xide-git-added);
981
+ }
982
+
983
+ .xide--git-untracked .xide-tree-name,
984
+ .xide--git-untracked .xide-tree-deco,
985
+ .xide--git-untracked .xide-scm-letter,
986
+ .xide--git-untracked .xide-scm-change-name {
987
+ color: var(--xide-git-untracked);
988
+ }
989
+
990
+ .xide--git-deleted .xide-tree-name,
991
+ .xide--git-deleted .xide-tree-deco,
992
+ .xide--git-deleted .xide-scm-letter,
993
+ .xide--git-deleted .xide-scm-change-name {
994
+ color: var(--xide-git-deleted);
995
+ }
996
+
997
+ .xide--git-renamed .xide-tree-name,
998
+ .xide--git-renamed .xide-tree-deco,
999
+ .xide--git-renamed .xide-scm-letter,
1000
+ .xide--git-renamed .xide-scm-change-name {
1001
+ color: var(--xide-git-renamed);
1002
+ }
1003
+
1004
+ .xide--git-conflict .xide-tree-name,
1005
+ .xide--git-conflict .xide-tree-deco,
1006
+ .xide--git-conflict .xide-scm-letter,
1007
+ .xide--git-conflict .xide-scm-change-name {
1008
+ color: var(--xide-git-conflict);
1009
+ }
1010
+
1011
+ .xide-inline-input {
1012
+ position: relative;
1013
+ flex: 1 1 auto;
1014
+ min-width: 0;
1015
+ }
1016
+
1017
+ .xide-inline-input .xide-input {
1018
+ height: 20px;
1019
+ padding: 0 4px;
1020
+ border-color: var(--xide-focus);
1021
+ }
1022
+
1023
+ .xide-inline-error {
1024
+ position: absolute;
1025
+ left: 0;
1026
+ right: 0;
1027
+ top: 21px;
1028
+ z-index: 5;
1029
+ padding: 4px 6px;
1030
+ border: 1px solid var(--xide-danger);
1031
+ background: var(--xide-bg-menu);
1032
+ color: var(--xide-fg-strong);
1033
+ font-size: 12px;
1034
+ white-space: normal;
1035
+ }
1036
+
1037
+ /* ── 찾기 ───────────────────────────────────────────────────── */
1038
+
1039
+ .xide-search-form {
1040
+ flex: none;
1041
+ position: relative;
1042
+ padding: 0 12px 6px 8px;
1043
+ }
1044
+
1045
+ .xide-search-row {
1046
+ display: flex;
1047
+ align-items: flex-start;
1048
+ gap: 2px;
1049
+ }
1050
+
1051
+ .xide-search-toggle-replace {
1052
+ flex: none;
1053
+ display: flex;
1054
+ align-items: center;
1055
+ justify-content: center;
1056
+ width: 16px;
1057
+ height: 26px;
1058
+ padding: 0;
1059
+ border: 0;
1060
+ background: transparent;
1061
+ cursor: pointer;
1062
+ }
1063
+
1064
+ .xide-search-fields {
1065
+ flex: 1 1 auto;
1066
+ display: flex;
1067
+ flex-direction: column;
1068
+ gap: 4px;
1069
+ min-width: 0;
1070
+ }
1071
+
1072
+ .xide-search-box {
1073
+ position: relative;
1074
+ }
1075
+
1076
+ .xide-search-box .xide-input {
1077
+ padding-right: 72px;
1078
+ }
1079
+
1080
+ .xide-search-flags {
1081
+ position: absolute;
1082
+ top: 2px;
1083
+ right: 2px;
1084
+ display: flex;
1085
+ gap: 1px;
1086
+ }
1087
+
1088
+ .xide-flag {
1089
+ display: inline-flex;
1090
+ align-items: center;
1091
+ justify-content: center;
1092
+ width: 22px;
1093
+ height: 22px;
1094
+ padding: 0;
1095
+ border: 1px solid transparent;
1096
+ border-radius: 3px;
1097
+ background: transparent;
1098
+ cursor: pointer;
1099
+ }
1100
+
1101
+ .xide-flag:hover:not(:disabled) {
1102
+ background: rgba(90, 93, 94, 0.31);
1103
+ }
1104
+
1105
+ .xide-flag.xide--on {
1106
+ border-color: var(--xide-focus);
1107
+ background: rgba(36, 137, 219, 0.35);
1108
+ }
1109
+
1110
+ .xide-flag:disabled {
1111
+ opacity: 0.4;
1112
+ cursor: default;
1113
+ }
1114
+
1115
+ .xide-search-details-toggle {
1116
+ display: flex;
1117
+ justify-content: flex-end;
1118
+ margin-top: 2px;
1119
+ }
1120
+
1121
+ .xide-search-details {
1122
+ display: flex;
1123
+ flex-direction: column;
1124
+ gap: 6px;
1125
+ padding-left: 18px;
1126
+ }
1127
+
1128
+ .xide-search-details label {
1129
+ display: flex;
1130
+ flex-direction: column;
1131
+ gap: 3px;
1132
+ font-size: 11px;
1133
+ }
1134
+
1135
+ .xide-search-summary {
1136
+ flex: none;
1137
+ padding: 4px 20px 6px;
1138
+ color: var(--xide-fg-dim);
1139
+ font-size: 12px;
1140
+ }
1141
+
1142
+ .xide-search-summary .xide--error {
1143
+ color: var(--xide-danger);
1144
+ }
1145
+
1146
+ .xide-search-summary .xide--warn {
1147
+ color: var(--xide-warning);
1148
+ }
1149
+
1150
+ .xide-search-results {
1151
+ flex: 1 1 auto;
1152
+ min-height: 0;
1153
+ overflow: auto;
1154
+ padding-bottom: 12px;
1155
+ }
1156
+
1157
+ .xide-search-file-row {
1158
+ display: flex;
1159
+ align-items: center;
1160
+ gap: 4px;
1161
+ height: 22px;
1162
+ padding: 0 8px 0 10px;
1163
+ cursor: pointer;
1164
+ white-space: nowrap;
1165
+ }
1166
+
1167
+ .xide-search-file-row:hover,
1168
+ .xide-search-match:hover {
1169
+ background: var(--xide-bg-hover);
1170
+ }
1171
+
1172
+ .xide-search-file-row:hover .xide-row-actions {
1173
+ display: flex;
1174
+ }
1175
+
1176
+ .xide-search-file-row:hover .xide-search-count {
1177
+ display: none;
1178
+ }
1179
+
1180
+ .xide-search-file-name {
1181
+ flex: none;
1182
+ }
1183
+
1184
+ .xide-search-file-dir {
1185
+ flex: 1 1 auto;
1186
+ min-width: 0;
1187
+ overflow: hidden;
1188
+ text-overflow: ellipsis;
1189
+ color: var(--xide-fg-dim);
1190
+ font-size: 12px;
1191
+ }
1192
+
1193
+ .xide-search-count {
1194
+ margin-left: auto;
1195
+ min-width: 18px;
1196
+ padding: 0 5px;
1197
+ border-radius: 9px;
1198
+ background: rgba(128, 128, 128, 0.35);
1199
+ font-size: 11px;
1200
+ line-height: 18px;
1201
+ text-align: center;
1202
+ }
1203
+
1204
+ .xide-search-match {
1205
+ height: 22px;
1206
+ padding: 0 8px 0 42px;
1207
+ line-height: 22px;
1208
+ white-space: nowrap;
1209
+ overflow: hidden;
1210
+ text-overflow: ellipsis;
1211
+ cursor: pointer;
1212
+ }
1213
+
1214
+ .xide-search-preview {
1215
+ font-size: 13px;
1216
+ }
1217
+
1218
+ .xide-search-hit {
1219
+ background: var(--xide-hit);
1220
+ color: inherit;
1221
+ border-radius: 2px;
1222
+ }
1223
+
1224
+ del.xide-search-hit {
1225
+ background: var(--xide-del);
1226
+ text-decoration: line-through;
1227
+ }
1228
+
1229
+ .xide-search-ins {
1230
+ background: var(--xide-ins);
1231
+ text-decoration: none;
1232
+ }
1233
+
1234
+ /* ── 소스 제어 ───────────────────────────────────────────────── */
1235
+
1236
+ .xide-scm-body {
1237
+ flex: 1 1 auto;
1238
+ min-height: 0;
1239
+ overflow: auto;
1240
+ padding-bottom: 16px;
1241
+ }
1242
+
1243
+ .xide-scm-repo-select {
1244
+ display: flex;
1245
+ align-items: center;
1246
+ gap: 8px;
1247
+ padding: 4px 12px 6px 20px;
1248
+ font-size: 12px;
1249
+ }
1250
+
1251
+ .xide-scm-remote,
1252
+ .xide-scm-branch {
1253
+ display: flex;
1254
+ align-items: center;
1255
+ gap: 6px;
1256
+ padding: 2px 12px 2px 20px;
1257
+ font-size: 12px;
1258
+ min-height: 22px;
1259
+ }
1260
+
1261
+ .xide-scm-remote-path {
1262
+ flex: 1 1 auto;
1263
+ min-width: 0;
1264
+ overflow: hidden;
1265
+ text-overflow: ellipsis;
1266
+ white-space: nowrap;
1267
+ }
1268
+
1269
+ .xide-scm-remote-none {
1270
+ color: var(--xide-fg-dim);
1271
+ }
1272
+
1273
+ .xide-provider {
1274
+ flex: none;
1275
+ padding: 0 6px;
1276
+ border-radius: 3px;
1277
+ background: rgba(128, 128, 128, 0.3);
1278
+ font-size: 11px;
1279
+ line-height: 18px;
1280
+ font-weight: 600;
1281
+ }
1282
+
1283
+ .xide-provider.xide--github {
1284
+ background: #24292f;
1285
+ color: #ffffff;
1286
+ }
1287
+
1288
+ .xide-provider.xide--gitlab {
1289
+ background: #fc6d26;
1290
+ color: #ffffff;
1291
+ }
1292
+
1293
+ .xide-provider.xide--bitbucket {
1294
+ background: #2684ff;
1295
+ color: #ffffff;
1296
+ }
1297
+
1298
+ .xide-provider.xide--azure {
1299
+ background: #0078d4;
1300
+ color: #ffffff;
1301
+ }
1302
+
1303
+ .xide-warn-chip {
1304
+ padding: 0 6px;
1305
+ border-radius: 3px;
1306
+ background: var(--xide-warning);
1307
+ color: #1e1e1e;
1308
+ font-size: 11px;
1309
+ }
1310
+
1311
+ .xide-scm-commit {
1312
+ display: flex;
1313
+ flex-direction: column;
1314
+ gap: 6px;
1315
+ padding: 6px 12px 8px 20px;
1316
+ }
1317
+
1318
+ .xide-split-button {
1319
+ display: flex;
1320
+ }
1321
+
1322
+ .xide-split-button .xide-btn:first-child {
1323
+ flex: 1 1 auto;
1324
+ border-radius: 2px 0 0 2px;
1325
+ }
1326
+
1327
+ .xide-split-more {
1328
+ width: 28px;
1329
+ padding: 0 !important;
1330
+ border-left: 1px solid rgba(255, 255, 255, 0.4) !important;
1331
+ border-radius: 0 2px 2px 0 !important;
1332
+ }
1333
+
1334
+ .xide-scm-section-head {
1335
+ display: flex;
1336
+ align-items: center;
1337
+ gap: 4px;
1338
+ height: 22px;
1339
+ padding: 0 12px 0 8px;
1340
+ font-size: 11px;
1341
+ font-weight: 700;
1342
+ text-transform: uppercase;
1343
+ cursor: pointer;
1344
+ user-select: none;
1345
+ }
1346
+
1347
+ .xide-scm-section-head:hover .xide-row-actions {
1348
+ display: flex;
1349
+ }
1350
+
1351
+ .xide-scm-section-title {
1352
+ flex: 1 1 auto;
1353
+ }
1354
+
1355
+ .xide-scm-change {
1356
+ display: flex;
1357
+ align-items: center;
1358
+ gap: 4px;
1359
+ height: 22px;
1360
+ padding: 0 12px 0 28px;
1361
+ white-space: nowrap;
1362
+ cursor: pointer;
1363
+ }
1364
+
1365
+ .xide-scm-change:hover {
1366
+ background: var(--xide-bg-hover);
1367
+ }
1368
+
1369
+ .xide-scm-change:hover .xide-row-actions {
1370
+ display: flex;
1371
+ }
1372
+
1373
+ .xide-scm-change-name {
1374
+ flex: none;
1375
+ max-width: 60%;
1376
+ overflow: hidden;
1377
+ text-overflow: ellipsis;
1378
+ }
1379
+
1380
+ .xide-scm-change-name.xide--strike {
1381
+ text-decoration: line-through;
1382
+ }
1383
+
1384
+ .xide-scm-change-dir {
1385
+ flex: 1 1 auto;
1386
+ min-width: 0;
1387
+ overflow: hidden;
1388
+ text-overflow: ellipsis;
1389
+ color: var(--xide-fg-dim);
1390
+ font-size: 12px;
1391
+ }
1392
+
1393
+ .xide-scm-letter {
1394
+ flex: none;
1395
+ width: 14px;
1396
+ margin-left: 4px;
1397
+ font-size: 11px;
1398
+ font-weight: 700;
1399
+ text-align: center;
1400
+ }
1401
+
1402
+ .xide-scm-last {
1403
+ display: flex;
1404
+ align-items: center;
1405
+ gap: 6px;
1406
+ padding: 8px 12px 4px 20px;
1407
+ font-size: 12px;
1408
+ overflow: hidden;
1409
+ white-space: nowrap;
1410
+ text-overflow: ellipsis;
1411
+ }
1412
+
1413
+ .xide-scm-account {
1414
+ margin-top: 10px;
1415
+ border-top: 1px solid var(--xide-border-soft);
1416
+ }
1417
+
1418
+ .xide-scm-account-body {
1419
+ display: flex;
1420
+ flex-direction: column;
1421
+ gap: 6px;
1422
+ padding: 6px 12px 8px 20px;
1423
+ font-size: 12px;
1424
+ }
1425
+
1426
+ .xide-kv {
1427
+ display: flex;
1428
+ align-items: center;
1429
+ gap: 8px;
1430
+ min-height: 22px;
1431
+ }
1432
+
1433
+ .xide-kv > span:nth-child(2) {
1434
+ flex: 1 1 auto;
1435
+ min-width: 0;
1436
+ overflow: hidden;
1437
+ text-overflow: ellipsis;
1438
+ white-space: nowrap;
1439
+ }
1440
+
1441
+ /* ── 편집기 ─────────────────────────────────────────────────── */
1442
+
1443
+ .xide-editor-area {
1444
+ flex: 1 1 auto;
1445
+ display: flex;
1446
+ min-height: 0;
1447
+ min-width: 0;
1448
+ }
1449
+
1450
+ .xide-editor-group-wrap {
1451
+ display: flex;
1452
+ min-width: 0;
1453
+ min-height: 0;
1454
+ }
1455
+
1456
+ .xide-editor-group {
1457
+ flex: 1 1 auto;
1458
+ display: flex;
1459
+ flex-direction: column;
1460
+ min-width: 0;
1461
+ min-height: 0;
1462
+ border-left: 1px solid var(--xide-border-soft);
1463
+ }
1464
+
1465
+ .xide-editor-group-wrap:first-child .xide-editor-group {
1466
+ border-left: 0;
1467
+ }
1468
+
1469
+ .xide-tabbar {
1470
+ flex: none;
1471
+ display: flex;
1472
+ align-items: stretch;
1473
+ height: 35px;
1474
+ background: var(--xide-bg-tabs);
1475
+ }
1476
+
1477
+ .xide-tabs {
1478
+ flex: 1 1 auto;
1479
+ display: flex;
1480
+ min-width: 0;
1481
+ overflow-x: auto;
1482
+ overflow-y: hidden;
1483
+ scrollbar-width: thin;
1484
+ }
1485
+
1486
+ .xide-tabs::-webkit-scrollbar {
1487
+ height: 3px;
1488
+ }
1489
+
1490
+ .xide-tabs::-webkit-scrollbar-thumb {
1491
+ background: rgba(121, 121, 121, 0.4);
1492
+ }
1493
+
1494
+ .xide-tab {
1495
+ position: relative;
1496
+ flex: none;
1497
+ display: flex;
1498
+ align-items: center;
1499
+ gap: 6px;
1500
+ max-width: 240px;
1501
+ padding: 0 4px 0 10px;
1502
+ border-right: 1px solid var(--xide-border-soft);
1503
+ background: var(--xide-bg-tab);
1504
+ color: var(--xide-fg-dim);
1505
+ cursor: pointer;
1506
+ white-space: nowrap;
1507
+ user-select: none;
1508
+ }
1509
+
1510
+ .xide-tab.xide--active {
1511
+ background: var(--xide-bg-tab-active);
1512
+ color: var(--xide-fg-strong);
1513
+ }
1514
+
1515
+ .xide-editor-group.xide--focused .xide-tab.xide--active {
1516
+ box-shadow: inset 0 1px 0 var(--xide-focus);
1517
+ }
1518
+
1519
+ .xide-tab.xide--preview .xide-tab-label {
1520
+ font-style: italic;
1521
+ }
1522
+
1523
+ .xide-tab.xide--drop-before::before,
1524
+ .xide-tab.xide--drop-after::after {
1525
+ content: '';
1526
+ position: absolute;
1527
+ top: 4px;
1528
+ bottom: 4px;
1529
+ width: 2px;
1530
+ background: var(--xide-focus);
1531
+ }
1532
+
1533
+ .xide-tab.xide--drop-before::before {
1534
+ left: -1px;
1535
+ }
1536
+
1537
+ .xide-tab.xide--drop-after::after {
1538
+ right: -1px;
1539
+ }
1540
+
1541
+ .xide-tab-label {
1542
+ overflow: hidden;
1543
+ text-overflow: ellipsis;
1544
+ }
1545
+
1546
+ .xide-tab-dir {
1547
+ color: var(--xide-fg-dim);
1548
+ font-size: 11px;
1549
+ overflow: hidden;
1550
+ text-overflow: ellipsis;
1551
+ }
1552
+
1553
+ .xide-tab-diff {
1554
+ color: var(--xide-git-modified);
1555
+ }
1556
+
1557
+ .xide-tab-close {
1558
+ position: relative;
1559
+ display: inline-flex;
1560
+ align-items: center;
1561
+ justify-content: center;
1562
+ width: 20px;
1563
+ height: 20px;
1564
+ padding: 0;
1565
+ border: 0;
1566
+ border-radius: 4px;
1567
+ background: transparent;
1568
+ opacity: 0;
1569
+ cursor: pointer;
1570
+ }
1571
+
1572
+ .xide-tab.xide--active .xide-tab-close,
1573
+ .xide-tab:hover .xide-tab-close,
1574
+ .xide-tab.xide--dirty .xide-tab-close {
1575
+ opacity: 1;
1576
+ }
1577
+
1578
+ .xide-tab-close:hover {
1579
+ background: rgba(90, 93, 94, 0.4);
1580
+ }
1581
+
1582
+ .xide-tab-close-hover {
1583
+ position: absolute;
1584
+ display: none;
1585
+ }
1586
+
1587
+ .xide-tab.xide--dirty .xide-tab-close:hover .xide-tab-close-icon {
1588
+ display: none;
1589
+ }
1590
+
1591
+ .xide-tab.xide--dirty .xide-tab-close:hover .xide-tab-close-hover {
1592
+ position: static;
1593
+ display: inline-block;
1594
+ }
1595
+
1596
+ .xide-tabbar-actions {
1597
+ flex: none;
1598
+ display: flex;
1599
+ align-items: center;
1600
+ gap: 2px;
1601
+ padding: 0 6px;
1602
+ }
1603
+
1604
+ .xide-breadcrumbs {
1605
+ flex: none;
1606
+ display: flex;
1607
+ align-items: center;
1608
+ gap: 2px;
1609
+ height: 22px;
1610
+ padding: 0 12px;
1611
+ overflow: hidden;
1612
+ white-space: nowrap;
1613
+ font-size: 12px;
1614
+ color: var(--xide-fg-dim);
1615
+ background: var(--xide-bg);
1616
+ }
1617
+
1618
+ .xide-crumb {
1619
+ display: inline-flex;
1620
+ align-items: center;
1621
+ }
1622
+
1623
+ .xide-crumb button {
1624
+ display: inline-flex;
1625
+ align-items: center;
1626
+ gap: 4px;
1627
+ padding: 0 2px;
1628
+ border: 0;
1629
+ background: transparent;
1630
+ color: inherit !important;
1631
+ cursor: pointer;
1632
+ }
1633
+
1634
+ .xide-crumb button:hover {
1635
+ color: var(--xide-fg-strong) !important;
1636
+ }
1637
+
1638
+ .xide-crumb-note {
1639
+ margin-left: 12px;
1640
+ font-style: italic;
1641
+ }
1642
+
1643
+ .xide-editor-body {
1644
+ flex: 1 1 auto;
1645
+ position: relative;
1646
+ min-height: 0;
1647
+ background: var(--xide-bg);
1648
+ }
1649
+
1650
+ .xide-code-pane {
1651
+ position: absolute;
1652
+ inset: 0;
1653
+ display: flex;
1654
+ flex-direction: column;
1655
+ }
1656
+
1657
+ .xide-monaco {
1658
+ flex: 1 1 auto;
1659
+ min-height: 0;
1660
+ }
1661
+
1662
+ .xide-pane-note {
1663
+ position: absolute;
1664
+ inset: 0;
1665
+ display: flex;
1666
+ align-items: center;
1667
+ justify-content: center;
1668
+ color: var(--xide-fg-dim);
1669
+ pointer-events: none;
1670
+ }
1671
+
1672
+ .xide-banner {
1673
+ flex: none;
1674
+ display: flex;
1675
+ align-items: center;
1676
+ flex-wrap: wrap;
1677
+ gap: 8px;
1678
+ padding: 6px 12px;
1679
+ background: var(--xide-bg-banner);
1680
+ color: var(--xide-fg-strong);
1681
+ font-size: 12px;
1682
+ }
1683
+
1684
+ .xide-banner > span {
1685
+ flex: 1 1 200px;
1686
+ }
1687
+
1688
+ .xide-diff-toolbar {
1689
+ flex: none;
1690
+ display: flex;
1691
+ align-items: center;
1692
+ gap: 6px;
1693
+ height: 30px;
1694
+ padding: 0 8px 0 12px;
1695
+ border-bottom: 1px solid var(--xide-border-soft);
1696
+ font-size: 12px;
1697
+ }
1698
+
1699
+ .xide-welcome {
1700
+ position: absolute;
1701
+ inset: 0;
1702
+ display: flex;
1703
+ flex-direction: column;
1704
+ align-items: center;
1705
+ justify-content: center;
1706
+ gap: 8px;
1707
+ padding: 24px;
1708
+ color: var(--xide-fg-dim);
1709
+ text-align: center;
1710
+ }
1711
+
1712
+ .xide-welcome-title {
1713
+ color: var(--xide-fg-strong);
1714
+ font-size: 18px;
1715
+ }
1716
+
1717
+ .xide-welcome-text {
1718
+ max-width: 34em;
1719
+ }
1720
+
1721
+ .xide-welcome-keys {
1722
+ display: grid;
1723
+ grid-template-columns: minmax(0, 1fr);
1724
+ gap: 6px;
1725
+ margin-top: 14px;
1726
+ min-width: 260px;
1727
+ }
1728
+
1729
+ .xide-welcome-keys button {
1730
+ display: flex;
1731
+ justify-content: space-between;
1732
+ gap: 24px;
1733
+ padding: 2px 4px;
1734
+ border: 0;
1735
+ background: transparent;
1736
+ color: var(--xide-fg-dim) !important;
1737
+ cursor: pointer;
1738
+ }
1739
+
1740
+ .xide-welcome-keys button:hover {
1741
+ color: var(--xide-fg-strong) !important;
1742
+ }
1743
+
1744
+ .xide-root kbd {
1745
+ padding: 1px 5px;
1746
+ border: 1px solid var(--xide-border);
1747
+ border-bottom-width: 2px;
1748
+ border-radius: 3px;
1749
+ background: rgba(128, 128, 128, 0.17);
1750
+ font-family: var(--xide-font);
1751
+ font-size: 11px;
1752
+ color: var(--xide-fg);
1753
+ }
1754
+
1755
+ .xide-image-pane {
1756
+ position: absolute;
1757
+ inset: 0;
1758
+ display: flex;
1759
+ flex-direction: column;
1760
+ }
1761
+
1762
+ .xide-image-scroll {
1763
+ flex: 1 1 auto;
1764
+ min-height: 0;
1765
+ overflow: auto;
1766
+ display: flex;
1767
+ align-items: center;
1768
+ justify-content: center;
1769
+ padding: 16px;
1770
+ background-color: var(--xide-bg);
1771
+ background-image: linear-gradient(45deg, rgba(128, 128, 128, 0.12) 25%, transparent 25%),
1772
+ linear-gradient(-45deg, rgba(128, 128, 128, 0.12) 25%, transparent 25%),
1773
+ linear-gradient(45deg, transparent 75%, rgba(128, 128, 128, 0.12) 75%),
1774
+ linear-gradient(-45deg, transparent 75%, rgba(128, 128, 128, 0.12) 75%);
1775
+ background-size: 16px 16px;
1776
+ background-position: 0 0, 0 8px, 8px -8px, -8px 0;
1777
+ cursor: zoom-in;
1778
+ }
1779
+
1780
+ .xide-image-pane.xide--fit .xide-image-scroll img {
1781
+ max-width: 100%;
1782
+ max-height: 100%;
1783
+ object-fit: contain;
1784
+ }
1785
+
1786
+ .xide-image-pane:not(.xide--fit) .xide-image-scroll {
1787
+ align-items: flex-start;
1788
+ justify-content: flex-start;
1789
+ cursor: zoom-out;
1790
+ }
1791
+
1792
+ .xide-image-info {
1793
+ flex: none;
1794
+ padding: 4px 12px;
1795
+ color: var(--xide-fg-dim);
1796
+ font-size: 12px;
1797
+ border-top: 1px solid var(--xide-border-soft);
1798
+ }
1799
+
1800
+ /* ── 패널(터미널) ───────────────────────────────────────────── */
1801
+
1802
+ .xide-panel-wrap {
1803
+ flex: none;
1804
+ display: flex;
1805
+ min-height: 0;
1806
+ border-top: 1px solid var(--xide-border);
1807
+ }
1808
+
1809
+ .xide-panel {
1810
+ flex: 1 1 auto;
1811
+ display: flex;
1812
+ flex-direction: column;
1813
+ min-width: 0;
1814
+ min-height: 0;
1815
+ background: var(--xide-bg-panel);
1816
+ }
1817
+
1818
+ .xide-panel-header {
1819
+ flex: none;
1820
+ display: flex;
1821
+ align-items: center;
1822
+ gap: 4px;
1823
+ height: 35px;
1824
+ padding: 0 8px 0 12px;
1825
+ }
1826
+
1827
+ .xide-panel-tab {
1828
+ padding: 4px 6px;
1829
+ font-size: 11px;
1830
+ text-transform: uppercase;
1831
+ letter-spacing: 0.04em;
1832
+ border-bottom: 1px solid transparent;
1833
+ }
1834
+
1835
+ .xide-panel-tab.xide--active {
1836
+ color: var(--xide-fg-strong);
1837
+ border-bottom-color: var(--xide-fg-strong);
1838
+ }
1839
+
1840
+ .xide-terms {
1841
+ display: flex;
1842
+ align-items: center;
1843
+ gap: 2px;
1844
+ margin-left: 12px;
1845
+ min-width: 0;
1846
+ overflow-x: auto;
1847
+ }
1848
+
1849
+ .xide-term-tab {
1850
+ display: flex;
1851
+ align-items: center;
1852
+ gap: 5px;
1853
+ height: 24px;
1854
+ padding: 0 4px 0 8px;
1855
+ border-radius: 4px;
1856
+ color: var(--xide-fg-dim);
1857
+ font-size: 12px;
1858
+ white-space: nowrap;
1859
+ cursor: pointer;
1860
+ }
1861
+
1862
+ .xide-term-tab:hover {
1863
+ background: var(--xide-bg-hover);
1864
+ }
1865
+
1866
+ .xide-term-tab.xide--active {
1867
+ background: var(--xide-bg-selected);
1868
+ color: var(--xide-fg-strong);
1869
+ }
1870
+
1871
+ .xide-term-tab.xide--error,
1872
+ .xide-term-tab.xide--exited {
1873
+ color: var(--xide-fg-dim);
1874
+ font-style: italic;
1875
+ }
1876
+
1877
+ .xide-term-close {
1878
+ display: inline-flex;
1879
+ align-items: center;
1880
+ justify-content: center;
1881
+ width: 18px;
1882
+ height: 18px;
1883
+ padding: 0;
1884
+ border: 0;
1885
+ border-radius: 3px;
1886
+ background: transparent;
1887
+ opacity: 0;
1888
+ cursor: pointer;
1889
+ }
1890
+
1891
+ .xide-term-tab:hover .xide-term-close,
1892
+ .xide-term-tab.xide--active .xide-term-close {
1893
+ opacity: 1;
1894
+ }
1895
+
1896
+ .xide-term-close:hover {
1897
+ background: rgba(90, 93, 94, 0.4);
1898
+ }
1899
+
1900
+ .xide-panel-body {
1901
+ flex: 1 1 auto;
1902
+ position: relative;
1903
+ min-height: 0;
1904
+ }
1905
+
1906
+ .xide-term-body {
1907
+ position: absolute;
1908
+ inset: 0 0 0 12px;
1909
+ }
1910
+
1911
+ .xide-term-host {
1912
+ width: 100%;
1913
+ height: 100%;
1914
+ background: var(--xide-bg-panel);
1915
+ }
1916
+
1917
+ .xide-term-host .xterm {
1918
+ height: 100%;
1919
+ padding: 4px 0;
1920
+ }
1921
+
1922
+ /* xterm.css 의 검은 바탕(#000)이 위아래 여백으로 새지 않게 — 바탕은 패널 색 하나다. */
1923
+ .xide-term-host .xterm-viewport {
1924
+ scrollbar-width: thin;
1925
+ background-color: transparent !important;
1926
+ }
1927
+
1928
+ .xide-term-overlay {
1929
+ position: absolute;
1930
+ right: 16px;
1931
+ bottom: 12px;
1932
+ display: flex;
1933
+ align-items: center;
1934
+ gap: 10px;
1935
+ padding: 8px 12px;
1936
+ border: 1px solid var(--xide-border);
1937
+ border-radius: 4px;
1938
+ background: var(--xide-bg-menu);
1939
+ box-shadow: 0 2px 8px var(--xide-shadow);
1940
+ font-size: 12px;
1941
+ }
1942
+
1943
+ /* ── 상태 표시줄 ────────────────────────────────────────────── */
1944
+
1945
+ .xide-status {
1946
+ flex: none;
1947
+ display: flex;
1948
+ justify-content: space-between;
1949
+ align-items: stretch;
1950
+ height: 22px;
1951
+ padding: 0 6px;
1952
+ background: var(--xide-bg-status);
1953
+ color: var(--xide-fg-status);
1954
+ font-size: 12px;
1955
+ overflow: hidden;
1956
+ }
1957
+
1958
+ .xide-status.xide--readonly {
1959
+ background: var(--xide-bg-status-readonly);
1960
+ }
1961
+
1962
+ .xide-status-left,
1963
+ .xide-status-right {
1964
+ display: flex;
1965
+ align-items: stretch;
1966
+ min-width: 0;
1967
+ }
1968
+
1969
+ .xide-status-left {
1970
+ flex: 1 1 auto;
1971
+ overflow: hidden;
1972
+ }
1973
+
1974
+ .xide-status-item {
1975
+ display: inline-flex;
1976
+ align-items: center;
1977
+ gap: 4px;
1978
+ padding: 0 7px;
1979
+ border: 0;
1980
+ background: transparent;
1981
+ color: var(--xide-fg-status) !important;
1982
+ font-size: 12px;
1983
+ white-space: nowrap;
1984
+ }
1985
+
1986
+ button.xide-status-item {
1987
+ cursor: pointer;
1988
+ }
1989
+
1990
+ button.xide-status-item:hover:not(:disabled) {
1991
+ background: rgba(255, 255, 255, 0.12);
1992
+ }
1993
+
1994
+ button.xide-status-item:disabled {
1995
+ cursor: default;
1996
+ }
1997
+
1998
+ .xide-status-item.xide--notice {
1999
+ min-width: 0;
2000
+ overflow: hidden;
2001
+ text-overflow: ellipsis;
2002
+ display: inline-block;
2003
+ line-height: 22px;
2004
+ }
2005
+
2006
+ .xide-status-item.xide--notice .xide-icon {
2007
+ margin-right: 4px;
2008
+ margin-top: -2px;
2009
+ }
2010
+
2011
+ /* ── 떠 있는 것: 메뉴·대화 상자·빠른 열기 ─────────────────────── */
2012
+
2013
+ .xide-menu {
2014
+ position: fixed;
2015
+ z-index: 1000;
2016
+ min-width: 200px;
2017
+ max-width: 360px;
2018
+ padding: 4px 0;
2019
+ border: 1px solid var(--xide-border);
2020
+ border-radius: 5px;
2021
+ background: var(--xide-bg-menu);
2022
+ color: var(--xide-fg);
2023
+ box-shadow: 0 2px 8px var(--xide-shadow);
2024
+ font-family: var(--xide-font);
2025
+ font-size: 13px;
2026
+ outline: none;
2027
+ }
2028
+
2029
+ .xide-menu-item {
2030
+ display: flex;
2031
+ align-items: center;
2032
+ justify-content: space-between;
2033
+ gap: 24px;
2034
+ width: 100%;
2035
+ height: 26px;
2036
+ padding: 0 14px;
2037
+ border: 0;
2038
+ background: transparent;
2039
+ color: inherit;
2040
+ text-align: left;
2041
+ cursor: pointer;
2042
+ }
2043
+
2044
+ .xide-menu-item.xide--active:not(:disabled) {
2045
+ background: var(--xide-accent);
2046
+ color: var(--xide-accent-fg);
2047
+ }
2048
+
2049
+ .xide-menu-item.xide--danger:not(.xide--active) {
2050
+ color: var(--xide-danger);
2051
+ }
2052
+
2053
+ .xide-menu-item:disabled {
2054
+ opacity: 0.45;
2055
+ cursor: default;
2056
+ }
2057
+
2058
+ .xide-menu-key {
2059
+ opacity: 0.75;
2060
+ font-size: 12px;
2061
+ }
2062
+
2063
+ .xide-menu-sep {
2064
+ height: 1px;
2065
+ margin: 4px 0;
2066
+ background: var(--xide-border);
2067
+ }
2068
+
2069
+ .xide-dialog-scrim,
2070
+ .xide-qo-scrim {
2071
+ position: absolute;
2072
+ inset: 0;
2073
+ z-index: 900;
2074
+ display: flex;
2075
+ justify-content: center;
2076
+ align-items: flex-start;
2077
+ }
2078
+
2079
+ .xide-dialog-scrim {
2080
+ align-items: center;
2081
+ background: rgba(0, 0, 0, 0.3);
2082
+ }
2083
+
2084
+ .xide-dialog {
2085
+ display: flex;
2086
+ flex-direction: column;
2087
+ gap: 10px;
2088
+ width: min(440px, calc(100% - 32px));
2089
+ padding: 16px 18px;
2090
+ border: 1px solid var(--xide-border);
2091
+ border-radius: 6px;
2092
+ background: var(--xide-bg-menu);
2093
+ box-shadow: 0 4px 20px var(--xide-shadow);
2094
+ }
2095
+
2096
+ .xide-dialog-title {
2097
+ color: var(--xide-fg-strong);
2098
+ font-size: 14px;
2099
+ font-weight: 600;
2100
+ overflow-wrap: anywhere;
2101
+ }
2102
+
2103
+ .xide-dialog-message,
2104
+ .xide-dialog-detail {
2105
+ color: var(--xide-fg);
2106
+ font-size: 13px;
2107
+ overflow-wrap: anywhere;
2108
+ }
2109
+
2110
+ .xide-dialog-detail {
2111
+ color: var(--xide-fg-dim);
2112
+ font-size: 12px;
2113
+ }
2114
+
2115
+ .xide-dialog-field {
2116
+ display: flex;
2117
+ flex-direction: column;
2118
+ gap: 4px;
2119
+ font-size: 12px;
2120
+ }
2121
+
2122
+ .xide-dialog-error {
2123
+ color: var(--xide-danger);
2124
+ font-size: 12px;
2125
+ }
2126
+
2127
+ .xide-dialog-buttons {
2128
+ display: flex;
2129
+ flex-wrap: wrap;
2130
+ justify-content: flex-end;
2131
+ gap: 8px;
2132
+ margin-top: 4px;
2133
+ }
2134
+
2135
+ .xide-qo {
2136
+ width: min(600px, calc(100% - 32px));
2137
+ margin-top: 8px;
2138
+ padding: 6px;
2139
+ border: 1px solid var(--xide-border);
2140
+ border-radius: 6px;
2141
+ background: var(--xide-bg-menu);
2142
+ box-shadow: 0 4px 20px var(--xide-shadow);
2143
+ }
2144
+
2145
+ .xide-qo-list {
2146
+ max-height: 360px;
2147
+ margin-top: 6px;
2148
+ overflow: auto;
2149
+ }
2150
+
2151
+ .xide-qo-row {
2152
+ display: flex;
2153
+ align-items: center;
2154
+ gap: 6px;
2155
+ height: 24px;
2156
+ padding: 0 8px;
2157
+ border-radius: 3px;
2158
+ white-space: nowrap;
2159
+ cursor: pointer;
2160
+ }
2161
+
2162
+ .xide-qo-row.xide--active {
2163
+ background: var(--xide-bg-focus);
2164
+ color: var(--xide-fg-strong);
2165
+ }
2166
+
2167
+ .xide-qo-label b {
2168
+ color: var(--xide-focus);
2169
+ font-weight: 700;
2170
+ }
2171
+
2172
+ .xide-theme-dark .xide-qo-label b {
2173
+ color: #2aaaff;
2174
+ }
2175
+
2176
+ .xide-qo-detail {
2177
+ flex: 1 1 auto;
2178
+ min-width: 0;
2179
+ overflow: hidden;
2180
+ text-overflow: ellipsis;
2181
+ color: var(--xide-fg-dim);
2182
+ font-size: 12px;
2183
+ }
2184
+
2185
+ .xide-qo-hint {
2186
+ margin-left: auto;
2187
+ }
2188
+
2189
+ .xide-qo-empty {
2190
+ padding: 6px 8px;
2191
+ color: var(--xide-fg-dim);
2192
+ }
2193
+
2194
+ /* ── 좁은 화면 ──────────────────────────────────────────────── */
2195
+
2196
+ @media (max-width: 900px) {
2197
+ .xide-chat {
2198
+ max-width: 45%;
2199
+ }
2200
+ .xide-sidebar {
2201
+ max-width: 40%;
2202
+ }
2203
+ }