codex-lens 0.1.13 → 0.1.15

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.
package/src/global.css CHANGED
@@ -1,20 +1,24 @@
1
- @import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600;700|Fira+Sans:wght@300;400;500;600;700&display=swap');
1
+ @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=DM+Sans:wght@400;500;600;700&display=swap');
2
2
 
3
3
  :root {
4
- --bg-primary: #0F172A;
5
- --bg-secondary: #1E293B;
6
- --bg-tertiary: #334155;
4
+ --bg-primary: #000000;
5
+ --bg-secondary: #0A0A0A;
6
+ --bg-tertiary: #141414;
7
+ --bg-elevated: #1A1A1A;
8
+ --bg-surface: #0F0F0F;
7
9
  --text-primary: #F8FAFC;
8
10
  --text-secondary: #94A3B8;
9
11
  --text-muted: #64748B;
10
- --border-color: #475569;
12
+ --border-color: rgba(148, 163, 184, 0.15);
13
+ --border-glow: rgba(34, 197, 94, 0.3);
11
14
  --accent-color: #22C55E;
12
15
  --accent-hover: #16A34A;
13
- --accent-glow: rgba(34, 197, 94, 0.3);
14
- --diff-add-bg: rgba(34, 197, 94, 0.15);
16
+ --accent-glow: rgba(34, 197, 94, 0.4);
17
+ --accent-soft: rgba(34, 197, 94, 0.1);
18
+ --diff-add-bg: rgba(34, 197, 94, 0.12);
15
19
  --diff-add-text: #4ADE80;
16
20
  --diff-add-border: #22C55E;
17
- --diff-remove-bg: rgba(239, 68, 68, 0.15);
21
+ --diff-remove-bg: rgba(239, 68, 68, 0.12);
18
22
  --diff-remove-text: #F87171;
19
23
  --diff-remove-border: #EF4444;
20
24
  --danger-color: #EF4444;
@@ -22,18 +26,28 @@
22
26
  --success-color: #22C55E;
23
27
  --success-hover: #16A34A;
24
28
  --warning-color: #F59E0B;
25
- --font-family: 'Fira Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
26
- --font-mono: 'Fira Code', 'SF Mono', 'Consolas', 'Monaco', monospace;
27
- --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
28
- --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
29
- --shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.5);
30
- --shadow-glow: 0 0 20px var(--accent-glow);
31
- --radius-sm: 4px;
32
- --radius-md: 8px;
33
- --radius-lg: 12px;
34
- --transition-fast: 150ms ease;
29
+ --info-color: #3B82F6;
30
+ --font-family: 'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
31
+ --font-display: 'Space Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
32
+ --font-mono: 'JetBrains Mono', 'Fira Code', 'SF Mono', 'Consolas', monospace;
33
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.2);
34
+ --shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.2);
35
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.3);
36
+ --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.4);
37
+ --shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.5);
38
+ --shadow-glow: 0 0 24px var(--accent-glow);
39
+ --shadow-glow-sm: 0 0 12px var(--accent-glow);
40
+ --radius-xs: 4px;
41
+ --radius-sm: 6px;
42
+ --radius-md: 10px;
43
+ --radius-lg: 14px;
44
+ --radius-xl: 20px;
45
+ --transition-fast: 120ms ease;
35
46
  --transition-normal: 200ms ease;
36
47
  --transition-slow: 300ms ease;
48
+ --blur-sm: 8px;
49
+ --blur-md: 16px;
50
+ --blur-lg: 24px;
37
51
  }
38
52
 
39
53
  @media (prefers-reduced-motion: reduce) {
@@ -58,7 +72,7 @@ html, body, #root {
58
72
 
59
73
  body {
60
74
  font-family: var(--font-family);
61
- background-color: var(--bg-primary);
75
+ background: var(--bg-primary);
62
76
  color: var(--text-primary);
63
77
  font-size: 14px;
64
78
  line-height: 1.6;
@@ -68,57 +82,151 @@ body {
68
82
 
69
83
  .app-container {
70
84
  display: flex;
85
+ flex-direction: column;
71
86
  height: 100vh;
72
87
  width: 100vw;
88
+ background: var(--bg-primary);
73
89
  }
74
90
 
75
- .panel {
91
+ .top-bar {
76
92
  display: flex;
77
- flex-direction: column;
78
- overflow: hidden;
79
- background: var(--bg-secondary);
80
- border-right: 1px solid var(--border-color);
93
+ align-items: center;
94
+ justify-content: space-between;
95
+ padding: 12px 20px;
96
+ background: linear-gradient(180deg, rgba(30, 41, 59, 0.95) 0%, rgba(30, 41, 59, 0.85) 100%);
97
+ backdrop-filter: blur(var(--blur-md));
98
+ border-bottom: 1px solid var(--border-color);
99
+ min-height: 52px;
100
+ position: relative;
101
+ z-index: 100;
81
102
  }
82
103
 
83
- .panel:last-child {
84
- border-right: none;
104
+ .top-bar::after {
105
+ content: '';
106
+ position: absolute;
107
+ bottom: 0;
108
+ left: 0;
109
+ right: 0;
110
+ height: 1px;
111
+ background: linear-gradient(90deg, transparent, var(--accent-color), transparent);
112
+ opacity: 0.3;
85
113
  }
86
114
 
87
- .panel-header {
88
- padding: 12px 16px;
89
- background: linear-gradient(180deg, var(--bg-tertiary) 0%, var(--bg-secondary) 100%);
90
- border-bottom: 1px solid var(--border-color);
115
+ .top-bar-left,
116
+ .top-bar-center,
117
+ .top-bar-right {
118
+ display: flex;
119
+ align-items: center;
120
+ gap: 16px;
121
+ }
122
+
123
+ .top-bar-left {
124
+ width: 260px;
125
+ }
126
+
127
+ .top-bar-center {
128
+ flex: 1;
129
+ justify-content: center;
130
+ }
131
+
132
+ .top-bar-right {
133
+ width: 40%;
134
+ justify-content: flex-end;
135
+ }
136
+
137
+ .top-bar-title {
138
+ font-family: var(--font-display);
91
139
  font-weight: 600;
92
- font-size: 11px;
140
+ font-size: 13px;
93
141
  text-transform: uppercase;
94
- letter-spacing: 0.5px;
142
+ letter-spacing: 1px;
95
143
  color: var(--text-secondary);
96
144
  display: flex;
97
145
  align-items: center;
98
146
  gap: 8px;
99
147
  }
100
148
 
149
+ .top-bar-title::before {
150
+ content: '';
151
+ display: inline-block;
152
+ width: 3px;
153
+ height: 14px;
154
+ background: var(--accent-color);
155
+ border-radius: 2px;
156
+ }
157
+
158
+ .main-content {
159
+ display: flex;
160
+ flex: 1;
161
+ overflow: hidden;
162
+ gap: 1px;
163
+ background: var(--border-color);
164
+ }
165
+
166
+ .panel {
167
+ display: flex;
168
+ flex-direction: column;
169
+ overflow: hidden;
170
+ background: linear-gradient(180deg, var(--bg-secondary) 0%, rgba(30, 41, 59, 0.95) 100%);
171
+ }
172
+
173
+ .left-panel {
174
+ width: 260px;
175
+ flex-shrink: 0;
176
+ }
177
+
178
+ .middle-panel {
179
+ flex: 1;
180
+ min-width: 300px;
181
+ }
182
+
183
+ .right-panel {
184
+ width: 40%;
185
+ min-width: 300px;
186
+ max-width: 60%;
187
+ }
188
+
101
189
  .panel-content {
102
190
  flex: 1;
103
191
  overflow: auto;
192
+ padding: 8px;
104
193
  }
105
194
 
106
195
  .file-tree {
107
- padding: 8px;
196
+ padding: 4px;
108
197
  }
109
198
 
110
199
  .file-item {
111
- padding: 6px 12px;
200
+ padding: 8px 12px;
112
201
  cursor: pointer;
113
202
  border-radius: var(--radius-sm);
114
203
  display: flex;
115
204
  align-items: center;
116
- gap: 8px;
117
- transition: background var(--transition-fast), transform var(--transition-fast);
205
+ gap: 10px;
206
+ transition: all var(--transition-fast);
207
+ position: relative;
208
+ margin: 2px 0;
209
+ }
210
+
211
+ .file-item::before {
212
+ content: '';
213
+ position: absolute;
214
+ left: 0;
215
+ top: 50%;
216
+ transform: translateY(-50%);
217
+ width: 3px;
218
+ height: 0;
219
+ background: var(--accent-color);
220
+ border-radius: 0 2px 2px 0;
221
+ transition: height var(--transition-fast);
118
222
  }
119
223
 
120
224
  .file-item:hover {
121
- background: var(--bg-tertiary);
225
+ background: rgba(148, 163, 184, 0.08);
226
+ }
227
+
228
+ .file-item:hover::before {
229
+ height: 60%;
122
230
  }
123
231
 
124
232
  .file-item:active {
@@ -126,18 +234,22 @@ body {
126
234
  }
127
235
 
128
236
  .file-item.active {
129
- background: var(--accent-color);
237
+ background: var(--accent-soft);
130
238
  color: var(--text-primary);
131
- box-shadow: var(--shadow-glow);
239
+ }
240
+
241
+ .file-item.active::before {
242
+ height: 70%;
132
243
  }
133
244
 
134
245
  .file-icon {
135
- width: 16px;
136
- height: 16px;
246
+ width: 18px;
247
+ height: 18px;
137
248
  display: flex;
138
249
  align-items: center;
139
250
  justify-content: center;
140
251
  font-size: 14px;
252
+ opacity: 0.9;
141
253
  }
142
254
 
143
255
  .file-name {
@@ -145,15 +257,17 @@ body {
145
257
  overflow: hidden;
146
258
  text-overflow: ellipsis;
147
259
  white-space: nowrap;
260
+ font-size: 13px;
148
261
  }
149
262
 
150
263
  .diff-line {
151
264
  font-family: var(--font-mono);
152
265
  font-size: 13px;
153
- padding: 2px 16px;
266
+ padding: 3px 16px 3px 20px;
154
267
  white-space: pre;
155
268
  border-left: 3px solid transparent;
156
269
  transition: background var(--transition-fast);
270
+ position: relative;
157
271
  }
158
272
 
159
273
  .diff-line.added {
@@ -170,10 +284,11 @@ body {
170
284
 
171
285
  .diff-line::before {
172
286
  display: inline-block;
173
- width: 20px;
174
- margin-right: 8px;
287
+ width: 16px;
288
+ margin-left: -16px;
175
289
  text-align: center;
176
290
  font-weight: 600;
291
+ font-size: 12px;
177
292
  }
178
293
 
179
294
  .diff-line.added::before {
@@ -186,194 +301,17 @@ body {
186
301
  color: var(--diff-remove-text);
187
302
  }
188
303
 
189
- .chat-message {
190
- padding: 12px 16px;
191
- margin: 8px 12px;
192
- border-radius: var(--radius-lg);
193
- max-width: 85%;
194
- line-height: 1.5;
195
- }
196
-
197
- .chat-message.user {
198
- background: var(--accent-color);
199
- color: white;
200
- margin-left: auto;
201
- box-shadow: var(--shadow-md);
202
- }
203
-
204
- .chat-message.codex {
205
- background: var(--bg-tertiary);
206
- color: var(--text-primary);
207
- border: 1px solid var(--border-color);
208
- }
209
-
210
- .chat-input-container {
211
- padding: 12px;
212
- border-top: 1px solid var(--border-color);
213
- background: var(--bg-secondary);
214
- }
215
-
216
- .chat-input {
217
- width: 100%;
218
- padding: 10px 14px;
219
- background: var(--bg-primary);
220
- border: 1px solid var(--border-color);
221
- border-radius: var(--radius-md);
222
- color: var(--text-primary);
223
- font-family: var(--font-family);
224
- font-size: 14px;
225
- resize: none;
226
- transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
227
- }
228
-
229
- .chat-input:focus {
230
- outline: none;
231
- border-color: var(--accent-color);
232
- box-shadow: var(--shadow-glow);
233
- }
234
-
235
- ::-webkit-scrollbar {
236
- width: 8px;
237
- height: 8px;
238
- }
239
-
240
- ::-webkit-scrollbar-track {
241
- background: var(--bg-primary);
242
- }
243
-
244
- ::-webkit-scrollbar-thumb {
245
- background: var(--border-color);
246
- border-radius: 4px;
247
- }
248
-
249
- ::-webkit-scrollbar-thumb:hover {
250
- background: var(--text-muted);
251
- }
252
-
253
- .ws-status {
254
- display: inline-block;
255
- width: 8px;
256
- height: 8px;
257
- border-radius: 50%;
258
- margin-left: 8px;
259
- transition: background var(--transition-normal), box-shadow var(--transition-normal);
260
- }
261
-
262
- .ws-status.connected {
263
- background: var(--success-color);
264
- box-shadow: 0 0 8px var(--success-color);
265
- }
266
-
267
- .ws-status.disconnected {
268
- background: var(--danger-color);
269
- box-shadow: 0 0 8px var(--danger-color);
270
- }
271
-
272
- .version-info {
273
- display: flex;
274
- align-items: center;
275
- gap: 8px;
276
- margin-left: auto;
277
- }
278
-
279
- .version-number {
280
- font-size: 11px;
281
- color: var(--text-muted);
282
- font-weight: 500;
283
- font-family: var(--font-mono);
284
- }
285
-
286
- .update-badge {
287
- font-size: 10px;
288
- padding: 3px 8px;
289
- background: var(--warning-color);
290
- color: var(--bg-primary);
291
- border-radius: var(--radius-sm);
292
- cursor: pointer;
293
- font-weight: 600;
294
- transition: background var(--transition-fast), transform var(--transition-fast);
295
- }
296
-
297
- .update-badge:hover {
298
- background: #FBBF24;
299
- transform: translateY(-1px);
300
- }
301
-
302
- .terminal-wrapper {
303
- flex: 1;
304
- overflow: hidden;
305
- min-height: 0;
306
- }
307
-
308
- .left-panel {
309
- width: 260px;
310
- flex-shrink: 0;
311
- }
312
-
313
- .middle-panel {
314
- flex: 1;
315
- min-width: 300px;
316
- }
317
-
318
- .right-panel {
319
- width: 40%;
320
- min-width: 300px;
321
- max-width: 60%;
322
- }
323
-
324
- .section {
325
- margin-bottom: 16px;
326
- }
327
-
328
- .section-title {
329
- padding: 12px 16px 8px;
330
- font-size: 10px;
331
- font-weight: 600;
332
- color: var(--text-muted);
333
- text-transform: uppercase;
334
- letter-spacing: 0.5px;
335
- }
336
-
337
- .empty-state {
338
- padding: 32px;
339
- text-align: center;
340
- color: var(--text-muted);
341
- font-size: 13px;
342
- display: flex;
343
- flex-direction: column;
344
- align-items: center;
345
- gap: 8px;
346
- }
347
-
348
- .empty-state::before {
349
- content: '📄';
350
- font-size: 32px;
351
- opacity: 0.5;
352
- }
353
-
354
- .code-panel {
355
- font-family: var(--font-mono);
356
- }
357
-
358
- .code-content {
359
- padding: 16px;
360
- white-space: pre-wrap;
361
- word-break: break-all;
362
- line-height: 1.7;
363
- }
364
-
365
- .diff-container {
366
- font-family: var(--font-mono);
367
- font-size: 13px;
368
- padding: 8px 0;
369
- }
370
-
371
304
  .tab-bar {
372
305
  display: flex;
373
- background: var(--bg-primary);
306
+ background: rgba(15, 23, 42, 0.6);
374
307
  border-bottom: 1px solid var(--border-color);
375
308
  overflow-x: auto;
376
309
  min-height: 40px;
310
+ scrollbar-width: none;
311
+ }
312
+
313
+ .tab-bar::-webkit-scrollbar {
314
+ display: none;
377
315
  }
378
316
 
379
317
  .tab {
@@ -381,25 +319,35 @@ body {
381
319
  align-items: center;
382
320
  gap: 8px;
383
321
  padding: 10px 16px;
384
- background: var(--bg-secondary);
322
+ background: transparent;
385
323
  border-right: 1px solid var(--border-color);
386
324
  cursor: pointer;
387
325
  min-width: 100px;
388
- max-width: 200px;
326
+ max-width: 180px;
389
327
  font-size: 13px;
390
- color: var(--text-secondary);
391
- transition: background var(--transition-fast), color var(--transition-fast);
328
+ color: var(--text-muted);
329
+ transition: all var(--transition-fast);
330
+ position: relative;
392
331
  }
393
332
 
394
333
  .tab:hover {
395
- background: var(--bg-tertiary);
396
- color: var(--text-primary);
334
+ background: rgba(148, 163, 184, 0.05);
335
+ color: var(--text-secondary);
397
336
  }
398
337
 
399
338
  .tab.active {
400
- background: var(--bg-primary);
339
+ background: var(--bg-secondary);
401
340
  color: var(--text-primary);
402
- border-bottom: 2px solid var(--accent-color);
341
+ }
342
+
343
+ .tab.active::after {
344
+ content: '';
345
+ position: absolute;
346
+ bottom: 0;
347
+ left: 0;
348
+ right: 0;
349
+ height: 2px;
350
+ background: var(--accent-color);
403
351
  }
404
352
 
405
353
  .tab-name {
@@ -413,302 +361,282 @@ body {
413
361
  background: none;
414
362
  border: none;
415
363
  color: var(--text-muted);
416
- font-size: 14px;
364
+ font-size: 16px;
417
365
  cursor: pointer;
418
- padding: 2px 4px;
419
- border-radius: var(--radius-sm);
366
+ padding: 2px 6px;
367
+ border-radius: var(--radius-xs);
420
368
  line-height: 1;
421
- transition: background var(--transition-fast), color var(--transition-fast);
369
+ transition: all var(--transition-fast);
370
+ opacity: 0.6;
422
371
  }
423
372
 
424
373
  .tab-close:hover {
425
- background: rgba(255, 255, 255, 0.1);
426
- color: var(--text-primary);
374
+ background: rgba(239, 68, 68, 0.2);
375
+ color: var(--danger-color);
376
+ opacity: 1;
427
377
  }
428
378
 
429
379
  .context-menu {
430
380
  position: fixed;
431
- background: var(--bg-tertiary);
381
+ background: linear-gradient(180deg, var(--bg-tertiary) 0%, var(--bg-secondary) 100%);
432
382
  border: 1px solid var(--border-color);
433
383
  border-radius: var(--radius-md);
434
- padding: 4px 0;
384
+ padding: 6px;
435
385
  min-width: 160px;
436
386
  box-shadow: var(--shadow-lg);
437
387
  z-index: 1000;
438
388
  animation: contextMenuIn 0.15s ease;
389
+ backdrop-filter: blur(var(--blur-sm));
439
390
  }
440
391
 
441
392
  @keyframes contextMenuIn {
442
393
  from {
443
394
  opacity: 0;
444
- transform: scale(0.95);
395
+ transform: scale(0.95) translateY(-4px);
445
396
  }
446
397
  to {
447
398
  opacity: 1;
448
- transform: scale(1);
399
+ transform: scale(1) translateY(0);
449
400
  }
450
401
  }
451
402
 
452
403
  .context-menu-item {
453
- padding: 10px 16px;
404
+ padding: 10px 14px;
454
405
  cursor: pointer;
455
406
  font-size: 13px;
456
407
  color: var(--text-primary);
457
- transition: background var(--transition-fast), color var(--transition-fast);
408
+ border-radius: var(--radius-sm);
409
+ transition: all var(--transition-fast);
458
410
  }
459
411
 
460
412
  .context-menu-item:hover {
461
- background: var(--accent-color);
462
- color: white;
413
+ background: var(--accent-soft);
414
+ color: var(--accent-color);
463
415
  }
464
416
 
465
417
  .file-context-menu {
466
418
  position: fixed;
467
- background: var(--bg-tertiary);
419
+ background: linear-gradient(180deg, var(--bg-tertiary) 0%, var(--bg-secondary) 100%);
468
420
  border: 1px solid var(--border-color);
469
421
  border-radius: var(--radius-md);
470
- padding: 4px 0;
471
- min-width: 180px;
422
+ padding: 6px;
423
+ min-width: 200px;
472
424
  box-shadow: var(--shadow-lg);
473
425
  z-index: 1000;
474
426
  animation: contextMenuIn 0.15s ease;
427
+ backdrop-filter: blur(var(--blur-sm));
475
428
  }
476
429
 
477
- .task-bar {
478
- display: flex;
479
- align-items: center;
480
- justify-content: space-between;
481
- padding: 10px 16px;
482
- background: linear-gradient(180deg, var(--bg-tertiary) 0%, var(--bg-secondary) 100%);
483
- border-bottom: 1px solid var(--border-color);
484
- min-height: 48px;
485
- }
486
-
487
- .task-status {
488
- display: flex;
489
- align-items: center;
490
- gap: 10px;
491
- font-size: 13px;
492
- font-weight: 500;
493
- }
494
-
495
- .task-status.idle {
496
- color: var(--text-muted);
497
- }
498
-
499
- .task-status.running {
500
- color: var(--accent-color);
501
- }
502
-
503
- .task-status::before {
504
- content: '';
430
+ .ws-status {
505
431
  display: inline-block;
506
432
  width: 8px;
507
433
  height: 8px;
508
434
  border-radius: 50%;
435
+ margin-left: 8px;
436
+ transition: all var(--transition-normal);
509
437
  }
510
438
 
511
- .task-status.idle::before {
512
- background: var(--text-muted);
439
+ .ws-status.connected {
440
+ background: var(--success-color);
441
+ box-shadow: 0 0 8px var(--success-color);
442
+ animation: pulse 2s infinite;
513
443
  }
514
444
 
515
- .task-status.running::before {
516
- background: var(--accent-color);
517
- box-shadow: 0 0 8px var(--accent-color);
518
- animation: pulse 1.5s infinite;
445
+ .ws-status.disconnected {
446
+ background: var(--danger-color);
447
+ box-shadow: 0 0 8px var(--danger-color);
519
448
  }
520
449
 
521
450
  @keyframes pulse {
522
451
  0%, 100% {
523
452
  opacity: 1;
524
- box-shadow: 0 0 8px var(--accent-color);
453
+ box-shadow: 0 0 8px var(--success-color);
525
454
  }
526
455
  50% {
527
- opacity: 0.6;
528
- box-shadow: 0 0 4px var(--accent-color);
456
+ opacity: 0.7;
457
+ box-shadow: 0 0 4px var(--success-color);
529
458
  }
530
459
  }
531
460
 
532
- .task-buttons {
461
+ .version-info {
533
462
  display: flex;
534
- gap: 8px;
463
+ align-items: center;
464
+ gap: 10px;
535
465
  }
536
466
 
537
- .task-btn {
538
- padding: 8px 16px;
539
- border: none;
467
+ .version-number {
468
+ font-size: 11px;
469
+ color: var(--text-muted);
470
+ font-weight: 500;
471
+ font-family: var(--font-mono);
472
+ padding: 3px 8px;
473
+ background: rgba(148, 163, 184, 0.1);
474
+ border-radius: var(--radius-xs);
475
+ }
476
+
477
+ .update-badge {
478
+ font-size: 10px;
479
+ padding: 4px 10px;
480
+ background: linear-gradient(135deg, var(--warning-color) 0%, #FBBF24 100%);
481
+ color: var(--bg-primary);
540
482
  border-radius: var(--radius-sm);
541
- font-size: 12px;
542
- font-weight: 600;
543
483
  cursor: pointer;
544
- transition: background var(--transition-fast), transform var(--transition-fast), box-shadow var(--transition-fast);
545
- font-family: var(--font-family);
484
+ font-weight: 600;
485
+ transition: all var(--transition-fast);
546
486
  }
547
487
 
548
- .task-btn:hover {
488
+ .update-badge:hover {
549
489
  transform: translateY(-1px);
490
+ box-shadow: 0 4px 12px rgba(245, 158, 11, 0.3);
550
491
  }
551
492
 
552
- .task-btn:active {
553
- transform: translateY(0);
554
- }
555
-
556
- .task-btn-start {
557
- background: var(--accent-color);
558
- color: white;
559
- box-shadow: var(--shadow-sm);
493
+ .terminal-wrapper {
494
+ flex: 1;
495
+ overflow: hidden;
496
+ min-height: 0;
560
497
  }
561
498
 
562
- .task-btn-start:hover {
563
- background: var(--accent-hover);
564
- box-shadow: var(--shadow-glow);
499
+ .section {
500
+ margin-bottom: 8px;
565
501
  }
566
502
 
567
- .task-btn-start:disabled {
568
- background: var(--bg-tertiary);
503
+ .section-title {
504
+ padding: 10px 12px 6px;
505
+ font-size: 10px;
506
+ font-weight: 600;
569
507
  color: var(--text-muted);
570
- cursor: not-allowed;
571
- box-shadow: none;
572
- }
573
-
574
- .task-btn-start:disabled:hover {
575
- transform: none;
576
- }
577
-
578
- .task-btn-rollback {
579
- background: var(--danger-color);
580
- color: white;
581
- }
582
-
583
- .task-btn-rollback:hover {
584
- background: var(--danger-hover);
585
- box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
586
- }
587
-
588
- .task-btn-complete {
589
- background: var(--success-color);
590
- color: white;
508
+ text-transform: uppercase;
509
+ letter-spacing: 0.8px;
591
510
  }
592
511
 
593
- .task-btn-complete:hover {
594
- background: var(--success-hover);
595
- box-shadow: 0 4px 12px rgba(34, 197, 94, 0.3);
512
+ .empty-state {
513
+ padding: 40px 24px;
514
+ text-align: center;
515
+ color: var(--text-muted);
516
+ font-size: 13px;
517
+ display: flex;
518
+ flex-direction: column;
519
+ align-items: center;
520
+ gap: 12px;
596
521
  }
597
522
 
598
- .modal-overlay {
599
- position: fixed;
600
- top: 0;
601
- left: 0;
602
- right: 0;
603
- bottom: 0;
604
- background: rgba(0, 0, 0, 0.7);
605
- backdrop-filter: blur(4px);
523
+ .empty-state::before {
524
+ content: '';
525
+ width: 48px;
526
+ height: 48px;
527
+ background: linear-gradient(135deg, var(--bg-tertiary) 0%, var(--bg-elevated) 100%);
528
+ border-radius: var(--radius-lg);
606
529
  display: flex;
607
530
  align-items: center;
608
531
  justify-content: center;
609
- z-index: 2000;
610
- animation: modalOverlayIn 0.2s ease;
611
532
  }
612
533
 
613
- @keyframes modalOverlayIn {
614
- from { opacity: 0; }
615
- to { opacity: 1; }
534
+ .code-panel {
535
+ font-family: var(--font-mono);
616
536
  }
617
537
 
618
- .modal-content {
619
- background: var(--bg-secondary);
620
- border: 1px solid var(--border-color);
621
- border-radius: var(--radius-lg);
622
- padding: 24px;
623
- min-width: 340px;
624
- max-width: 420px;
625
- box-shadow: var(--shadow-lg);
626
- animation: modalContentIn 0.2s ease;
538
+ .code-viewer-codemirror {
539
+ height: 100%;
540
+ width: 100%;
541
+ overflow: hidden;
627
542
  }
628
543
 
629
- @keyframes modalContentIn {
630
- from {
631
- opacity: 0;
632
- transform: scale(0.95) translateY(-10px);
633
- }
634
- to {
635
- opacity: 1;
636
- transform: scale(1) translateY(0);
637
- }
544
+ .code-viewer-codemirror .cm-editor {
545
+ height: 100%;
638
546
  }
639
547
 
640
- .modal-title {
641
- font-size: 18px;
642
- font-weight: 600;
643
- margin-bottom: 12px;
644
- color: var(--text-primary);
548
+ .code-viewer-codemirror .cm-scroller {
549
+ overflow: auto;
645
550
  }
646
551
 
647
- .modal-body {
648
- font-size: 14px;
649
- color: var(--text-secondary);
650
- margin-bottom: 24px;
552
+ .code-content {
553
+ padding: 16px;
554
+ white-space: pre-wrap;
555
+ word-break: break-all;
651
556
  line-height: 1.7;
557
+ font-size: 13px;
652
558
  }
653
559
 
654
- .modal-buttons {
655
- display: flex;
656
- justify-content: flex-end;
657
- gap: 12px;
560
+ .diff-container {
561
+ font-family: var(--font-mono);
562
+ font-size: 13px;
563
+ padding: 8px 0;
658
564
  }
659
565
 
660
- .modal-btn {
661
- padding: 10px 20px;
566
+ .task-btn {
567
+ padding: 8px 18px;
662
568
  border: none;
663
569
  border-radius: var(--radius-sm);
664
- font-size: 13px;
570
+ font-size: 12px;
665
571
  font-weight: 600;
666
572
  cursor: pointer;
667
- transition: background var(--transition-fast), transform var(--transition-fast);
573
+ transition: all var(--transition-fast);
668
574
  font-family: var(--font-family);
575
+ display: inline-flex;
576
+ align-items: center;
577
+ gap: 6px;
669
578
  }
670
579
 
671
- .modal-btn:hover {
580
+ .task-btn:hover {
672
581
  transform: translateY(-1px);
673
582
  }
674
583
 
675
- .modal-btn:active {
584
+ .task-btn:active {
676
585
  transform: translateY(0);
677
586
  }
678
587
 
679
- .modal-btn-cancel {
680
- background: var(--bg-tertiary);
681
- color: var(--text-primary);
588
+ .task-btn-clear {
589
+ background: transparent;
590
+ color: var(--text-secondary);
682
591
  border: 1px solid var(--border-color);
683
592
  }
684
593
 
685
- .modal-btn-cancel:hover {
686
- background: var(--border-color);
594
+ .task-btn-clear:hover {
595
+ background: var(--accent-soft);
596
+ border-color: var(--accent-color);
597
+ color: var(--accent-color);
598
+ box-shadow: var(--shadow-glow-sm);
687
599
  }
688
600
 
689
- .modal-btn-danger {
690
- background: var(--danger-color);
691
- color: white;
601
+ ::-webkit-scrollbar {
602
+ width: 6px;
603
+ height: 6px;
692
604
  }
693
605
 
694
- .modal-btn-danger:hover {
695
- background: var(--danger-hover);
696
- box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
606
+ ::-webkit-scrollbar-track {
607
+ background: transparent;
697
608
  }
698
609
 
699
- @media (max-width: 768px) {
610
+ ::-webkit-scrollbar-thumb {
611
+ background: var(--bg-elevated);
612
+ border-radius: 3px;
613
+ }
614
+
615
+ ::-webkit-scrollbar-thumb:hover {
616
+ background: var(--text-muted);
617
+ }
618
+
619
+ ::-webkit-scrollbar-corner {
620
+ background: transparent;
621
+ }
622
+
623
+ @media (max-width: 1024px) {
700
624
  .left-panel {
701
- width: 200px;
625
+ width: 220px;
702
626
  }
703
627
 
704
628
  .right-panel {
705
- width: 50%;
706
- min-width: 200px;
629
+ width: 45%;
630
+ min-width: 250px;
631
+ }
632
+
633
+ .top-bar-left {
634
+ width: 220px;
707
635
  }
708
636
  }
709
637
 
710
- @media (max-width: 480px) {
711
- .app-container {
638
+ @media (max-width: 768px) {
639
+ .main-content {
712
640
  flex-direction: column;
713
641
  }
714
642
 
@@ -722,4 +650,24 @@ body {
722
650
  .middle-panel {
723
651
  min-height: 300px;
724
652
  }
653
+
654
+ .top-bar {
655
+ flex-wrap: wrap;
656
+ padding: 10px 16px;
657
+ }
658
+
659
+ .top-bar-left,
660
+ .top-bar-center,
661
+ .top-bar-right {
662
+ width: auto;
663
+ }
664
+
665
+ .top-bar-center {
666
+ order: 3;
667
+ width: 100%;
668
+ justify-content: flex-start;
669
+ margin-top: 8px;
670
+ padding-top: 8px;
671
+ border-top: 1px solid var(--border-color);
672
+ }
725
673
  }