@vibe80/vibe80 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +52 -0
  3. package/bin/vibe80.js +176 -0
  4. package/client/dist/assets/DiffPanel-C_IGzKI5.js +1 -0
  5. package/client/dist/assets/ExplorerPanel-BtlyAT00.js +11 -0
  6. package/client/dist/assets/LogsPanel-BW79JWzR.js +1 -0
  7. package/client/dist/assets/SettingsPanel-b9B7ygP_.js +1 -0
  8. package/client/dist/assets/TerminalPanel-C3fc1HbK.js +1 -0
  9. package/client/dist/assets/browser-e3WgtMs-.js +8 -0
  10. package/client/dist/assets/index-CgqGyssr.css +32 -0
  11. package/client/dist/assets/index-DnwKjoj7.js +706 -0
  12. package/client/dist/assets/vibe80_dark-D7OVPKcU.svg +51 -0
  13. package/client/dist/assets/vibe80_light-BJK37ybI.svg +50 -0
  14. package/client/dist/favicon.ico +0 -0
  15. package/client/dist/favicon.png +0 -0
  16. package/client/dist/favicon.svg +35 -0
  17. package/client/dist/index.html +14 -0
  18. package/client/index.html +16 -0
  19. package/client/package.json +34 -0
  20. package/client/public/favicon.ico +0 -0
  21. package/client/public/favicon.png +0 -0
  22. package/client/public/favicon.svg +35 -0
  23. package/client/public/pwa-192x192.png +0 -0
  24. package/client/public/pwa-512x512.png +0 -0
  25. package/client/src/App.jsx +3131 -0
  26. package/client/src/assets/logo_small.png +0 -0
  27. package/client/src/assets/vibe80_dark.svg +51 -0
  28. package/client/src/assets/vibe80_light.svg +50 -0
  29. package/client/src/components/Chat/ChatComposer.jsx +228 -0
  30. package/client/src/components/Chat/ChatMessages.jsx +811 -0
  31. package/client/src/components/Chat/ChatToolbar.jsx +109 -0
  32. package/client/src/components/Chat/useChatComposer.js +462 -0
  33. package/client/src/components/Diff/DiffPanel.jsx +129 -0
  34. package/client/src/components/Explorer/ExplorerPanel.jsx +449 -0
  35. package/client/src/components/Logs/LogsPanel.jsx +80 -0
  36. package/client/src/components/SessionGate/SessionGate.jsx +874 -0
  37. package/client/src/components/Settings/SettingsPanel.jsx +212 -0
  38. package/client/src/components/Terminal/TerminalPanel.jsx +39 -0
  39. package/client/src/components/Topbar/Topbar.jsx +101 -0
  40. package/client/src/components/WorktreeTabs.css +419 -0
  41. package/client/src/components/WorktreeTabs.jsx +604 -0
  42. package/client/src/hooks/useAttachments.jsx +125 -0
  43. package/client/src/hooks/useBacklog.js +254 -0
  44. package/client/src/hooks/useChatClear.js +90 -0
  45. package/client/src/hooks/useChatCollapse.js +42 -0
  46. package/client/src/hooks/useChatCommands.js +294 -0
  47. package/client/src/hooks/useChatExport.js +144 -0
  48. package/client/src/hooks/useChatMessagesState.js +69 -0
  49. package/client/src/hooks/useChatSend.js +158 -0
  50. package/client/src/hooks/useChatSocket.js +1239 -0
  51. package/client/src/hooks/useDiffNavigation.js +19 -0
  52. package/client/src/hooks/useExplorerActions.js +1184 -0
  53. package/client/src/hooks/useGitIdentity.js +114 -0
  54. package/client/src/hooks/useLayoutMode.js +31 -0
  55. package/client/src/hooks/useLocalPreferences.js +131 -0
  56. package/client/src/hooks/useMessageSync.js +30 -0
  57. package/client/src/hooks/useNotifications.js +132 -0
  58. package/client/src/hooks/usePaneNavigation.js +67 -0
  59. package/client/src/hooks/usePanelState.js +13 -0
  60. package/client/src/hooks/useProviderSelection.js +70 -0
  61. package/client/src/hooks/useRepoBranchesModels.js +218 -0
  62. package/client/src/hooks/useRepoStatus.js +350 -0
  63. package/client/src/hooks/useRpcLogActions.js +19 -0
  64. package/client/src/hooks/useRpcLogView.js +58 -0
  65. package/client/src/hooks/useSessionHandoff.js +97 -0
  66. package/client/src/hooks/useSessionLifecycle.js +287 -0
  67. package/client/src/hooks/useSessionReset.js +63 -0
  68. package/client/src/hooks/useSessionResync.js +77 -0
  69. package/client/src/hooks/useTerminalSession.js +328 -0
  70. package/client/src/hooks/useToolbarExport.js +27 -0
  71. package/client/src/hooks/useTurnInterrupt.js +43 -0
  72. package/client/src/hooks/useVibe80Forms.js +128 -0
  73. package/client/src/hooks/useWorkspaceAuth.js +932 -0
  74. package/client/src/hooks/useWorktreeCloseConfirm.js +46 -0
  75. package/client/src/hooks/useWorktrees.js +396 -0
  76. package/client/src/i18n.jsx +87 -0
  77. package/client/src/index.css +5147 -0
  78. package/client/src/locales/en.json +37 -0
  79. package/client/src/locales/fr.json +321 -0
  80. package/client/src/main.jsx +16 -0
  81. package/client/vite.config.js +62 -0
  82. package/docs/api/asyncapi.json +1511 -0
  83. package/docs/api/openapi.json +3242 -0
  84. package/git_hooks/prepare-commit-msg +35 -0
  85. package/package.json +36 -0
  86. package/server/package.json +29 -0
  87. package/server/scripts/rotate-workspace-secret.js +101 -0
  88. package/server/src/claudeClient.js +454 -0
  89. package/server/src/clientEvents.js +594 -0
  90. package/server/src/clientFactory.js +164 -0
  91. package/server/src/codexClient.js +468 -0
  92. package/server/src/config.js +27 -0
  93. package/server/src/helpers.js +138 -0
  94. package/server/src/index.js +1641 -0
  95. package/server/src/middleware/auth.js +93 -0
  96. package/server/src/middleware/debug.js +89 -0
  97. package/server/src/middleware/errorTypes.js +60 -0
  98. package/server/src/providerLogger.js +60 -0
  99. package/server/src/routes/files.js +114 -0
  100. package/server/src/routes/git.js +183 -0
  101. package/server/src/routes/health.js +13 -0
  102. package/server/src/routes/sessions.js +407 -0
  103. package/server/src/routes/workspaces.js +296 -0
  104. package/server/src/routes/worktrees.js +993 -0
  105. package/server/src/runAs.js +458 -0
  106. package/server/src/runtimeStore.js +32 -0
  107. package/server/src/services/auth.js +157 -0
  108. package/server/src/services/claudeThreadDirectory.js +33 -0
  109. package/server/src/services/session.js +918 -0
  110. package/server/src/services/workspace.js +858 -0
  111. package/server/src/storage/index.js +17 -0
  112. package/server/src/storage/redis.js +412 -0
  113. package/server/src/storage/sqlite.js +649 -0
  114. package/server/src/worktreeManager.js +717 -0
  115. package/server/tests/README.md +13 -0
  116. package/server/tests/factories/workspaceFactory.js +13 -0
  117. package/server/tests/fixtures/workspaceCredentials.json +4 -0
  118. package/server/tests/integration/routes/workspaces-routes.test.js +626 -0
  119. package/server/tests/setup/env.js +9 -0
  120. package/server/tests/unit/helpers.test.js +95 -0
  121. package/server/tests/unit/services/auth.test.js +181 -0
  122. package/server/tests/unit/services/workspace.test.js +115 -0
  123. package/server/vitest.config.js +23 -0
@@ -0,0 +1,5147 @@
1
+ @import url("https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Space+Mono:wght@400;700&display=swap");
2
+
3
+ :root {
4
+ color-scheme: light;
5
+ font-family: "Space Grotesk", system-ui, sans-serif;
6
+ --diff-font-family: "Space Mono";
7
+ --font-mono: "Space Mono", ui-monospace, SFMono-Regular, Menlo, Monaco,
8
+ Consolas, "Liberation Mono", "Courier New", monospace;
9
+ --bg: #f5f2ea;
10
+ --bg-strong: #efe9dc;
11
+ --ink: #141311;
12
+ --ink-muted: #4b463f;
13
+ --accent: #ee5d3b;
14
+ --accent-dark: #b43c24;
15
+ --surface: #ffffff;
16
+ --shadow: 0 20px 60px rgba(20, 19, 17, 0.12);
17
+ --app-bg: radial-gradient(circle at top left, #fff6df, transparent 60%),
18
+ radial-gradient(circle at 20% 20%, #f6dbc7, transparent 55%),
19
+ linear-gradient(160deg, #f4efe6, #efe5d3);
20
+ --radius: 20px;
21
+ }
22
+
23
+ :root[data-theme="dark"] {
24
+ color-scheme: dark;
25
+ --bg: #0e0f0e;
26
+ --bg-strong: #171a18;
27
+ --ink: #f2ede3;
28
+ --ink-muted: #b7ada1;
29
+ --accent: #ee5d3b;
30
+ --accent-dark: #d9573c;
31
+ --surface: #171a19;
32
+ --surface-elevated: #1f2321;
33
+ --surface-ghost: rgba(20, 24, 22, 0.8);
34
+ --border-soft: rgba(255, 255, 255, 0.12);
35
+ --shadow: 0 20px 60px rgba(0, 0, 0, 0.55);
36
+ --shadow: 0 20px 60px rgba(0, 0, 0, 0.55);
37
+ --app-bg: radial-gradient(circle at top left, #1b211f, transparent 60%),
38
+ radial-gradient(circle at 20% 20%, #261a16, transparent 55%),
39
+ linear-gradient(160deg, #0f1110, #141816);
40
+ }
41
+
42
+ :root {
43
+ --surface-elevated: #ffffff;
44
+ --surface-ghost: rgba(255, 255, 255, 0.92);
45
+ --border-soft: rgba(20, 19, 17, 0.12);
46
+ }
47
+
48
+ * {
49
+ box-sizing: border-box;
50
+ }
51
+
52
+ body {
53
+ margin: 0;
54
+ height: 100vh;
55
+ min-height: 100vh;
56
+ height: 100dvh;
57
+ min-height: 100dvh;
58
+ background: var(--app-bg);
59
+ color: var(--ink);
60
+ overflow: hidden;
61
+ }
62
+
63
+ button,
64
+ input,
65
+ select,
66
+ textarea {
67
+ font-family: "Space Grotesk", system-ui, sans-serif;
68
+ }
69
+
70
+ #root {
71
+ height: 100vh;
72
+ min-height: 100vh;
73
+ height: 100dvh;
74
+ min-height: 100dvh;
75
+ }
76
+
77
+ .session-gate {
78
+ min-height: 100vh;
79
+ min-height: 100dvh;
80
+ height: 100vh;
81
+ height: 100dvh;
82
+ padding: 24px;
83
+ }
84
+
85
+ .session-gate.session-fullscreen {
86
+ padding: 0;
87
+ display: flex;
88
+ justify-content: center;
89
+ }
90
+
91
+ .session-layout {
92
+ width: min(980px, 100%);
93
+ display: grid;
94
+ grid-template-columns: minmax(0, 1fr) 280px;
95
+ gap: 24px;
96
+ align-items: start;
97
+ }
98
+
99
+ .session-layout--fullscreen {
100
+ width: 100%;
101
+ height: 100%;
102
+ padding: 32px 40px;
103
+ grid-template-columns: minmax(0, 1fr) 320px;
104
+ align-items: stretch;
105
+ box-sizing: border-box;
106
+ max-width: 1120px;
107
+ margin: 0 auto;
108
+ }
109
+
110
+ .session-shell {
111
+ width: 100%;
112
+ height: 100%;
113
+ background: var(--surface);
114
+ border-radius: 24px;
115
+ padding: 24px 32px;
116
+ box-shadow: var(--shadow);
117
+ display: grid;
118
+ grid-template-rows: auto 1fr auto;
119
+ gap: 16px;
120
+ position: relative;
121
+ min-height: calc(100vh - 64px);
122
+ }
123
+
124
+ .session-shell h1 {
125
+ margin: 0;
126
+ font-size: clamp(28px, 3vw, 30px);
127
+ }
128
+
129
+ .session-header {
130
+ display: grid;
131
+ gap: 8px;
132
+ }
133
+
134
+ .session-gate .session-header {
135
+ display: grid;
136
+ grid-template-columns: auto 1fr auto;
137
+ grid-template-rows: auto auto;
138
+ grid-template-areas:
139
+ "action title logo"
140
+ "hint hint hint";
141
+ align-items: center;
142
+ gap: 8px;
143
+ }
144
+
145
+ .session-gate .session-header .session-card-action {
146
+ grid-area: action;
147
+ }
148
+
149
+ .session-gate .session-header h1 {
150
+ grid-area: title;
151
+ margin-left: -10px;
152
+ }
153
+
154
+ .session-gate .session-header .brand-logo {
155
+ grid-area: logo;
156
+ justify-self: end;
157
+ height: 24px;
158
+ }
159
+
160
+ .session-gate .session-header .session-hint {
161
+ grid-area: hint;
162
+ }
163
+
164
+ .session-body {
165
+ overflow-y: auto;
166
+ padding-right: 4px;
167
+ }
168
+
169
+ .session-footer {
170
+ display: flex;
171
+ justify-content: flex-end;
172
+ gap: 12px;
173
+ padding-top: 8px;
174
+ background: var(--surface);
175
+ }
176
+
177
+ .session-footer-full {
178
+ width: 100%;
179
+ }
180
+
181
+ .session-hint {
182
+ margin: 0;
183
+ color: var(--ink-muted);
184
+ font-size: 15px;
185
+ }
186
+
187
+ .session-info {
188
+ display: none;
189
+ }
190
+
191
+ .session-info-card {
192
+ background: var(--surface);
193
+ border-radius: 20px;
194
+ padding: 18px;
195
+ box-shadow: var(--shadow);
196
+ display: grid;
197
+ gap: 10px;
198
+ font-size: 14px;
199
+ color: var(--ink-muted);
200
+ position: sticky;
201
+ top: 24px;
202
+ }
203
+
204
+ .session-info-title {
205
+ font-weight: 600;
206
+ color: var(--ink);
207
+ display: inline-flex;
208
+ align-items: center;
209
+ gap: 8px;
210
+ font-size: 14px;
211
+ }
212
+
213
+ .session-info-icon {
214
+ font-size: 16px;
215
+ }
216
+
217
+ .session-info-link {
218
+ color: var(--accent);
219
+ text-decoration: none;
220
+ font-weight: 600;
221
+ }
222
+
223
+ .session-info-link:hover {
224
+ text-decoration: underline;
225
+ }
226
+
227
+ .session-form {
228
+ display: grid;
229
+ gap: 18px;
230
+ }
231
+
232
+ .session-form--compact {
233
+ gap: 14px;
234
+ }
235
+
236
+ .session-form-row {
237
+ display: grid;
238
+ grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
239
+ gap: 12px;
240
+ }
241
+
242
+ .session-form-row.is-compact-grid {
243
+ grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
244
+ }
245
+
246
+ .session-form-row.is-actions {
247
+ display: flex;
248
+ justify-content: flex-end;
249
+ gap: 12px;
250
+ }
251
+
252
+ .session-form-row--sticky {
253
+ position: sticky;
254
+ bottom: 0;
255
+ background: var(--surface);
256
+ padding: 10px 0 0;
257
+ z-index: 2;
258
+ }
259
+
260
+ .session-form-row.is-actions .session-button {
261
+ width: auto;
262
+ }
263
+ .session-form-row > div:empty {
264
+ display: none;
265
+ }
266
+
267
+ .session-form input,
268
+ .session-form textarea,
269
+ .session-form select {
270
+ border: 1px solid rgba(20, 19, 17, 0.14);
271
+ border-radius: 14px;
272
+ padding: 12px 14px;
273
+ font-size: 15px;
274
+ outline: none;
275
+ color: var(--ink);
276
+ width: 100%;
277
+ }
278
+
279
+ .session-form input[type="checkbox"],
280
+ .session-form input[type="radio"] {
281
+ width: auto;
282
+ }
283
+
284
+ .session-form select {
285
+ background: var(--surface);
286
+ cursor: pointer;
287
+ }
288
+
289
+ .session-form textarea {
290
+ resize: vertical;
291
+ min-height: 140px;
292
+ line-height: 1.4;
293
+ }
294
+
295
+ .session-form-row.single {
296
+ grid-template-columns: minmax(0, 1fr);
297
+ }
298
+
299
+ .session-button {
300
+ border: none;
301
+ border-radius: 999px;
302
+ background: var(--accent);
303
+ color: white;
304
+ font-weight: 600;
305
+ padding: 12px 18px;
306
+ cursor: pointer;
307
+ width: 100%;
308
+ }
309
+
310
+ .session-button.secondary {
311
+ background: rgba(20, 19, 17, 0.08);
312
+ color: var(--ink);
313
+ }
314
+
315
+ .session-button:disabled {
316
+ background: #d6c6b8;
317
+ cursor: not-allowed;
318
+ }
319
+
320
+ .session-auth {
321
+ display: grid;
322
+ gap: 12px;
323
+ padding: 12px;
324
+ border-radius: 16px;
325
+ background: rgba(20, 19, 17, 0.04);
326
+ }
327
+
328
+ .session-auth-compact {
329
+ gap: 8px;
330
+ }
331
+
332
+ .session-auth-title {
333
+ font-weight: 600;
334
+ font-size: 14px;
335
+ }
336
+
337
+ .session-auth-options {
338
+ display: grid;
339
+ gap: 10px;
340
+ justify-items: start;
341
+ }
342
+
343
+ .session-auth-options--inline-row {
344
+ display: flex;
345
+ flex-wrap: wrap;
346
+ align-items: center;
347
+ gap: 12px 18px;
348
+ width: 100%;
349
+ }
350
+
351
+ .session-auth-options--compact {
352
+ display: flex;
353
+ flex-direction: column;
354
+ align-items: flex-start;
355
+ gap: 10px;
356
+ width: 100%;
357
+ }
358
+
359
+ .session-auth-options--compact .session-auth-option {
360
+ width: 100%;
361
+ justify-content: flex-start;
362
+ text-align: left;
363
+ }
364
+
365
+ .session-auth-info {
366
+ font-size: 12px;
367
+ margin-left: 6px;
368
+ color: var(--ink-muted);
369
+ cursor: help;
370
+ }
371
+
372
+ .session-auth-hint-inline {
373
+ display: inline-flex;
374
+ align-items: center;
375
+ gap: 6px;
376
+ }
377
+
378
+ .session-auth-options.is-inline {
379
+ grid-auto-flow: column;
380
+ justify-content: start;
381
+ }
382
+
383
+ .session-auth-accordion {
384
+ width: 100%;
385
+ }
386
+
387
+ .session-auth-card {
388
+ border-radius: 14px;
389
+ border: 1px solid rgba(20, 19, 17, 0.08);
390
+ background: rgba(20, 19, 17, 0.02);
391
+ padding: 10px 12px;
392
+ display: grid;
393
+ gap: 10px;
394
+ width: 100%;
395
+ }
396
+
397
+ .session-auth-header {
398
+ display: flex;
399
+ align-items: center;
400
+ justify-content: flex-start;
401
+ gap: 10px;
402
+ }
403
+
404
+ .session-auth-file {
405
+ display: grid;
406
+ gap: 6px;
407
+ }
408
+
409
+ .session-auth-file-name {
410
+ font-size: 12px;
411
+ color: var(--ink-muted);
412
+ word-break: break-word;
413
+ }
414
+
415
+ .session-auth-option {
416
+ display: inline-flex;
417
+ align-items: center;
418
+ gap: 8px;
419
+ font-size: 14px;
420
+ color: var(--ink);
421
+ width: auto;
422
+ justify-content: flex-start;
423
+ }
424
+
425
+ .session-auth-grid {
426
+ display: grid;
427
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
428
+ gap: 12px;
429
+ width: 100%;
430
+ }
431
+
432
+ .session-auth-hint {
433
+ font-size: 13px;
434
+ color: var(--ink-muted);
435
+ }
436
+
437
+ .session-workspace-options {
438
+ display: grid;
439
+ grid-template-columns: repeat(2, minmax(0, 1fr));
440
+ gap: 14px;
441
+ margin-bottom: 14px;
442
+ }
443
+
444
+ .session-workspace-toggle {
445
+ display: grid;
446
+ grid-template-columns: repeat(3, minmax(0, 1fr));
447
+ gap: 10px;
448
+ margin-bottom: 30px;
449
+ }
450
+
451
+ .session-workspace-option {
452
+ border: 1px solid rgba(20, 19, 17, 0.08);
453
+ border-radius: 16px;
454
+ padding: 16px;
455
+ background: #f9fbff;
456
+ display: grid;
457
+ grid-template-columns: auto 1fr;
458
+ gap: 12px;
459
+ text-align: left;
460
+ cursor: pointer;
461
+ font-family: "Space Grotesk", system-ui, sans-serif;
462
+ box-shadow: 0 6px 18px rgba(20, 19, 17, 0.08);
463
+ transition: border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
464
+ }
465
+
466
+ .session-workspace-option.is-compact {
467
+ padding: 10px 12px;
468
+ grid-template-columns: auto auto;
469
+ align-items: center;
470
+ gap: 10px;
471
+ }
472
+
473
+ .session-workspace-option:disabled {
474
+ cursor: not-allowed;
475
+ opacity: 0.6;
476
+ }
477
+
478
+ .session-workspace-option.is-selected {
479
+ border-color: rgba(243, 166, 107, 0.7);
480
+ box-shadow: 0 10px 24px rgba(243, 166, 107, 0.22);
481
+ background: rgba(243, 166, 107, 0.15);
482
+ }
483
+
484
+ .session-workspace-icon {
485
+ width: 38px;
486
+ height: 38px;
487
+ border-radius: 50%;
488
+ display: inline-flex;
489
+ align-items: center;
490
+ justify-content: center;
491
+ color: white;
492
+ font-size: 16px;
493
+ }
494
+
495
+ .session-workspace-icon.is-join {
496
+ background: #7cc1df;
497
+ }
498
+
499
+ .session-workspace-icon.is-create {
500
+ background: #f3a66b;
501
+ }
502
+
503
+ .session-workspace-icon.is-leave {
504
+ background: #9aa4b2;
505
+ }
506
+
507
+ .session-workspace-option-text {
508
+ display: flex;
509
+ flex-direction: column;
510
+ gap: 4px;
511
+ }
512
+
513
+ .session-workspace-option-title {
514
+ font-weight: 700;
515
+ font-size: 14px;
516
+ color: var(--ink);
517
+ }
518
+
519
+ .session-workspace-option-subtitle {
520
+ font-size: 12px;
521
+ color: var(--ink-muted);
522
+ }
523
+
524
+ .session-workspace-form {
525
+ background: rgba(20, 19, 17, 0.05);
526
+ border-radius: 18px;
527
+ padding: 16px;
528
+ display: grid;
529
+ gap: 10px;
530
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
531
+ }
532
+
533
+ .session-workspace-form-labels {
534
+ display: grid;
535
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
536
+ gap: 12px;
537
+ font-weight: 600;
538
+ font-size: 13px;
539
+ color: var(--ink);
540
+ }
541
+
542
+ .session-workspace-form-grid {
543
+ display: grid;
544
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
545
+ gap: 12px;
546
+ }
547
+
548
+ .session-step {
549
+ position: relative;
550
+ }
551
+
552
+ .session-card-action {
553
+ position: absolute;
554
+ top: 16px;
555
+ right: 16px;
556
+ }
557
+
558
+ .session-panel {
559
+ overflow: hidden;
560
+ max-height: 0;
561
+ opacity: 0;
562
+ transform: translateY(-6px);
563
+ transition: max-height 0.3s ease, opacity 0.25s ease, transform 0.25s ease;
564
+ pointer-events: none;
565
+ }
566
+
567
+ .session-panel.is-visible {
568
+ max-height: 800px;
569
+ opacity: 1;
570
+ transform: translateY(0);
571
+ pointer-events: auto;
572
+ }
573
+
574
+ .workspace-created-card {
575
+ background: rgba(20, 19, 17, 0.04);
576
+ border-radius: 18px;
577
+ padding: 16px;
578
+ display: grid;
579
+ gap: 12px;
580
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.6);
581
+ }
582
+
583
+ .workspace-created-row {
584
+ display: grid;
585
+ grid-template-columns: minmax(0, 140px) minmax(0, 1fr) auto;
586
+ gap: 10px;
587
+ align-items: center;
588
+ }
589
+
590
+ .workspace-created-label {
591
+ font-size: 13px;
592
+ font-weight: 600;
593
+ color: var(--ink);
594
+ }
595
+
596
+ .workspace-created-value {
597
+ background: var(--surface);
598
+ border-radius: 12px;
599
+ padding: 8px 12px;
600
+ font-family: var(--font-mono);
601
+ font-size: 12px;
602
+ overflow: hidden;
603
+ text-overflow: ellipsis;
604
+ white-space: nowrap;
605
+ max-width: 260px;
606
+ }
607
+
608
+ .workspace-created-copy {
609
+ border: none;
610
+ background: rgba(238, 93, 59, 0.12);
611
+ color: var(--accent-dark);
612
+ width: 34px;
613
+ height: 34px;
614
+ border-radius: 10px;
615
+ cursor: pointer;
616
+ display: inline-flex;
617
+ align-items: center;
618
+ justify-content: center;
619
+ }
620
+
621
+ .workspace-created-copy:hover:not(:disabled) {
622
+ background: rgba(238, 93, 59, 0.2);
623
+ }
624
+
625
+ .session-list {
626
+ list-style: none;
627
+ padding: 0;
628
+ margin: 0;
629
+ display: flex;
630
+ flex-direction: column;
631
+ gap: 10px;
632
+ }
633
+
634
+ .session-item {
635
+ display: flex;
636
+ justify-content: space-between;
637
+ align-items: center;
638
+ gap: 12px;
639
+ padding: 10px 12px;
640
+ border-radius: 12px;
641
+ background: rgba(20, 19, 17, 0.05);
642
+ }
643
+
644
+ .session-item-meta {
645
+ display: flex;
646
+ flex-direction: column;
647
+ gap: 4px;
648
+ min-width: 0;
649
+ }
650
+
651
+ .session-item-title {
652
+ font-weight: 600;
653
+ font-size: 14px;
654
+ }
655
+
656
+ .session-item-sub {
657
+ font-size: 12px;
658
+ color: var(--ink-muted);
659
+ word-break: break-word;
660
+ }
661
+
662
+ .session-list-button {
663
+ border: none;
664
+ border-radius: 12px;
665
+ background: var(--accent);
666
+ color: white;
667
+ font-weight: 600;
668
+ padding: 8px 14px;
669
+ cursor: pointer;
670
+ }
671
+
672
+ .session-list-button.is-danger {
673
+ background: #e05a4f;
674
+ }
675
+
676
+ .session-list-button:disabled {
677
+ background: #d6c6b8;
678
+ cursor: not-allowed;
679
+ }
680
+
681
+ .session-item-actions {
682
+ display: flex;
683
+ gap: 8px;
684
+ align-items: center;
685
+ }
686
+
687
+ .toast-container {
688
+ position: fixed;
689
+ right: 24px;
690
+ bottom: 24px;
691
+ z-index: 40;
692
+ display: flex;
693
+ flex-direction: column;
694
+ gap: 8px;
695
+ }
696
+
697
+ .toast {
698
+ background: var(--surface);
699
+ border: 1px solid rgba(20, 19, 17, 0.12);
700
+ border-radius: 12px;
701
+ padding: 10px 14px;
702
+ box-shadow: 0 12px 24px rgba(20, 19, 17, 0.16);
703
+ font-weight: 600;
704
+ color: var(--ink);
705
+ max-width: 320px;
706
+ }
707
+
708
+ .toast.is-success {
709
+ border-color: rgba(46, 125, 50, 0.4);
710
+ color: #2e7d32;
711
+ background: rgba(46, 125, 50, 0.12);
712
+ }
713
+
714
+ .app {
715
+ display: grid;
716
+ grid-template-rows: auto minmax(0, 1fr);
717
+ gap: 16px;
718
+ max-width: 100%;
719
+ margin: 0 auto;
720
+ padding: 16px 18px calc(20px + env(safe-area-inset-bottom));
721
+ height: 100vh;
722
+ min-height: 100vh;
723
+ height: 100dvh;
724
+ min-height: 100dvh;
725
+ }
726
+
727
+ .header {
728
+ display: flex;
729
+ justify-content: space-between;
730
+ align-items: center;
731
+ gap: 16px;
732
+ }
733
+
734
+ .topbar-left {
735
+ display: flex;
736
+ align-items: center;
737
+ gap: 12px;
738
+ min-width: 0;
739
+ flex: 1;
740
+ }
741
+
742
+ .topbar-brand {
743
+ display: flex;
744
+ flex-direction: column;
745
+ min-width: 0;
746
+ }
747
+
748
+ .topbar-subtitle {
749
+ font-size: 12px;
750
+ color: var(--ink-muted);
751
+ white-space: nowrap;
752
+ overflow: hidden;
753
+ text-overflow: ellipsis;
754
+ max-width: 320px;
755
+ }
756
+
757
+ .topbar-right {
758
+ display: flex;
759
+ align-items: center;
760
+ gap: 10px;
761
+ flex-wrap: wrap;
762
+ justify-content: flex-end;
763
+ }
764
+
765
+ .topbar-tabs {
766
+ flex: 1;
767
+ min-width: 0;
768
+ }
769
+
770
+ .status-pill {
771
+ padding: 8px 14px;
772
+ border-radius: 999px;
773
+ font-size: 13px;
774
+ font-weight: 600;
775
+ background: var(--bg-strong);
776
+ color: var(--ink-muted);
777
+ white-space: nowrap;
778
+ }
779
+
780
+ .status-pill.ok {
781
+ background: rgba(238, 93, 59, 0.15);
782
+ color: var(--accent-dark);
783
+ }
784
+
785
+ .status-pill.down {
786
+ background: rgba(20, 19, 17, 0.08);
787
+ color: var(--ink-muted);
788
+ }
789
+
790
+ .status-pill.busy {
791
+ background: rgba(20, 19, 17, 0.06);
792
+ color: var(--ink);
793
+ }
794
+
795
+ .icon-button {
796
+ border: 1px solid rgba(20, 19, 17, 0.16);
797
+ background: var(--surface);
798
+ color: var(--ink);
799
+ border-radius: 12px;
800
+ width: 38px;
801
+ height: 38px;
802
+ display: grid;
803
+ place-items: center;
804
+ font-weight: 800;
805
+ cursor: pointer;
806
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
807
+ flex: 0 0 auto;
808
+ }
809
+
810
+ .icon-button:disabled {
811
+ opacity: 0.6;
812
+ cursor: not-allowed;
813
+ box-shadow: none;
814
+ }
815
+
816
+ .icon-button:not(:disabled):hover {
817
+ transform: translateY(-1px);
818
+ box-shadow: 0 8px 16px rgba(20, 19, 17, 0.08);
819
+ }
820
+
821
+ .dropdown {
822
+ position: relative;
823
+ }
824
+
825
+ .pill-button {
826
+ border-radius: 999px;
827
+ border: 1px solid rgba(20, 19, 17, 0.16);
828
+ background: var(--surface);
829
+ color: var(--ink);
830
+ font-weight: 600;
831
+ font-size: 12px;
832
+ letter-spacing: 0.08em;
833
+ text-transform: uppercase;
834
+ padding: 8px 12px;
835
+ cursor: pointer;
836
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
837
+ white-space: nowrap;
838
+ }
839
+
840
+ .pill-button:disabled {
841
+ opacity: 0.6;
842
+ cursor: not-allowed;
843
+ box-shadow: none;
844
+ }
845
+
846
+ .pill-button:not(:disabled):hover {
847
+ transform: translateY(-1px);
848
+ box-shadow: 0 8px 16px rgba(20, 19, 17, 0.08);
849
+ }
850
+
851
+ .dropdown-menu {
852
+ position: absolute;
853
+ top: calc(100% + 10px);
854
+ right: 0;
855
+ width: min(320px, calc(100vw - 48px));
856
+ background: var(--surface);
857
+ border: 1px solid rgba(20, 19, 17, 0.12);
858
+ border-radius: 16px;
859
+ box-shadow: 0 18px 40px rgba(20, 19, 17, 0.14);
860
+ padding: 12px;
861
+ display: grid;
862
+ gap: 10px;
863
+ z-index: 80;
864
+ max-height: calc(100dvh - 140px);
865
+ overflow: auto;
866
+ }
867
+
868
+ .dropdown-title {
869
+ font-weight: 800;
870
+ font-size: 12px;
871
+ letter-spacing: 0.08em;
872
+ text-transform: uppercase;
873
+ color: var(--ink-muted);
874
+ }
875
+
876
+ .dropdown-divider {
877
+ height: 1px;
878
+ background: rgba(20, 19, 17, 0.12);
879
+ }
880
+
881
+ .menu-item {
882
+ border-radius: 12px;
883
+ border: 1px solid rgba(20, 19, 17, 0.12);
884
+ background: rgba(20, 19, 17, 0.03);
885
+ color: var(--ink);
886
+ padding: 10px 12px;
887
+ font-weight: 700;
888
+ font-size: 13px;
889
+ cursor: pointer;
890
+ text-align: left;
891
+ }
892
+
893
+ .menu-item.is-active {
894
+ background: rgba(238, 93, 59, 0.12);
895
+ border-color: rgba(238, 93, 59, 0.22);
896
+ }
897
+
898
+ .menu-item.danger {
899
+ background: rgba(238, 93, 59, 0.1);
900
+ border-color: rgba(238, 93, 59, 0.22);
901
+ color: var(--accent-dark);
902
+ }
903
+
904
+ .menu-label {
905
+ display: grid;
906
+ gap: 6px;
907
+ font-weight: 700;
908
+ font-size: 12px;
909
+ color: var(--ink-muted);
910
+ }
911
+
912
+ .model-control {
913
+ display: flex;
914
+ align-items: center;
915
+ gap: 8px;
916
+ flex-wrap: wrap;
917
+ }
918
+
919
+ .model-button {
920
+ border-radius: 999px;
921
+ border: 1px solid rgba(20, 19, 17, 0.16);
922
+ background: transparent;
923
+ color: var(--ink);
924
+ font-weight: 600;
925
+ font-size: 12px;
926
+ text-transform: uppercase;
927
+ letter-spacing: 0.08em;
928
+ padding: 8px 12px;
929
+ cursor: pointer;
930
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
931
+ }
932
+
933
+ .model-button:disabled {
934
+ cursor: not-allowed;
935
+ color: var(--ink-muted);
936
+ }
937
+
938
+ .model-select {
939
+ border-radius: 12px;
940
+ border: 1px solid rgba(20, 19, 17, 0.16);
941
+ padding: 6px 10px;
942
+ font-size: 13px;
943
+ background: var(--surface);
944
+ color: var(--ink);
945
+ }
946
+
947
+ .model-select:disabled {
948
+ color: var(--ink-muted);
949
+ }
950
+
951
+ .clear-chat {
952
+ border-radius: 999px;
953
+ border: 1px solid rgba(20, 19, 17, 0.2);
954
+ background: transparent;
955
+ color: var(--ink-muted);
956
+ font-weight: 600;
957
+ font-size: 12px;
958
+ letter-spacing: 0.08em;
959
+ text-transform: uppercase;
960
+ padding: 8px 14px;
961
+ cursor: pointer;
962
+ transition: transform 0.2s ease, box-shadow 0.2s ease,
963
+ border-color 0.2s ease, color 0.2s ease;
964
+ }
965
+
966
+ .clear-chat:disabled {
967
+ cursor: not-allowed;
968
+ opacity: 0.5;
969
+ box-shadow: none;
970
+ }
971
+
972
+ .clear-chat:not(:disabled):hover {
973
+ transform: translateY(-1px);
974
+ border-color: rgba(20, 19, 17, 0.35);
975
+ color: var(--ink);
976
+ box-shadow: 0 8px 16px rgba(20, 19, 17, 0.08);
977
+ }
978
+
979
+ .status-wrap {
980
+ display: flex;
981
+ align-items: center;
982
+ gap: 12px;
983
+ }
984
+
985
+ .eyebrow {
986
+ margin: 0;
987
+ font-weight: 600;
988
+ letter-spacing: 0.2em;
989
+ text-transform: uppercase;
990
+ color: var(--ink-muted);
991
+ font-size: 12px;
992
+ }
993
+
994
+ .brand-logo {
995
+ display: block;
996
+ height: 34px;
997
+ width: auto;
998
+ object-fit: contain;
999
+ opacity: 0.7;
1000
+ }
1001
+
1002
+ .header h1 {
1003
+ margin: 8px 0 0;
1004
+ font-size: clamp(28px, 3vw, 40px);
1005
+ }
1006
+
1007
+ .status {
1008
+ padding: 8px 14px;
1009
+ border-radius: 999px;
1010
+ font-size: 14px;
1011
+ font-weight: 600;
1012
+ background: var(--bg-strong);
1013
+ color: var(--ink-muted);
1014
+ }
1015
+
1016
+ .status.ok {
1017
+ background: rgba(238, 93, 59, 0.15);
1018
+ color: var(--accent-dark);
1019
+ }
1020
+
1021
+ .status.down {
1022
+ background: rgba(20, 19, 17, 0.12);
1023
+ color: var(--ink-muted);
1024
+ }
1025
+
1026
+ .loader {
1027
+ display: inline-flex;
1028
+ gap: 6px;
1029
+ align-items: center;
1030
+ padding: 6px 10px;
1031
+ border-radius: 999px;
1032
+ background: rgba(238, 93, 59, 0.12);
1033
+ }
1034
+
1035
+ .loader .dot {
1036
+ width: 6px;
1037
+ height: 6px;
1038
+ border-radius: 50%;
1039
+ background: var(--accent);
1040
+ animation: bounce 0.8s infinite ease-in-out;
1041
+ }
1042
+
1043
+ .loader .dot:nth-child(2) {
1044
+ animation-delay: 0.15s;
1045
+ }
1046
+
1047
+ .loader .dot:nth-child(3) {
1048
+ animation-delay: 0.3s;
1049
+ }
1050
+
1051
+ @keyframes bounce {
1052
+ 0%,
1053
+ 80%,
1054
+ 100% {
1055
+ transform: translateY(0);
1056
+ opacity: 0.5;
1057
+ }
1058
+ 40% {
1059
+ transform: translateY(-6px);
1060
+ opacity: 1;
1061
+ }
1062
+ }
1063
+
1064
+ @keyframes chat-meta-spin {
1065
+ 0% {
1066
+ transform: rotate(0deg);
1067
+ }
1068
+ 100% {
1069
+ transform: rotate(360deg);
1070
+ }
1071
+ }
1072
+
1073
+ .activity {
1074
+ display: flex;
1075
+ gap: 10px;
1076
+ align-items: center;
1077
+ padding: 10px 16px;
1078
+ border-radius: 12px;
1079
+ background: var(--bg-strong);
1080
+ color: var(--ink-muted);
1081
+ font-size: 14px;
1082
+ }
1083
+
1084
+ .activity-label {
1085
+ font-weight: 600;
1086
+ color: var(--ink);
1087
+ }
1088
+
1089
+ .chat {
1090
+ background: var(--surface);
1091
+ border-radius: var(--radius);
1092
+ box-shadow: var(--shadow);
1093
+ padding: 18px;
1094
+ padding-left: calc(18px + var(--chat-toolbar-offset));
1095
+ display: flex;
1096
+ flex-direction: column;
1097
+ gap: 12px;
1098
+ min-height: 0;
1099
+ flex: 1;
1100
+ height: 100%;
1101
+ font-size: 14px;
1102
+ }
1103
+
1104
+ main.chat {
1105
+ padding-bottom: 12px;
1106
+ }
1107
+
1108
+ .chat-scroll {
1109
+ display: flex;
1110
+ flex-direction: column;
1111
+ gap: 12px;
1112
+ overflow-y: auto;
1113
+ overflow-x: hidden;
1114
+ min-height: 0;
1115
+ flex: 1;
1116
+ padding-bottom: var(--composer-space, 160px);
1117
+ }
1118
+
1119
+ .chat-scroll-inner {
1120
+ display: flex;
1121
+ flex-direction: column;
1122
+ gap: 12px;
1123
+ width: 100%;
1124
+ }
1125
+
1126
+ .chat-scroll-inner.has-meta {
1127
+ max-width: none;
1128
+ margin: 0;
1129
+ }
1130
+
1131
+ .chat-history-grid {
1132
+ display: grid;
1133
+ grid-template-columns: minmax(0, 1fr);
1134
+ align-items: start;
1135
+ gap: 12px;
1136
+ }
1137
+
1138
+ .chat-history-grid.has-meta {
1139
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--chat-max-width))
1140
+ minmax(0, 1fr);
1141
+ column-gap: 24px;
1142
+ }
1143
+
1144
+ .chat-history-grid.has-annotations {
1145
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--chat-max-width))
1146
+ minmax(0, 1fr);
1147
+ column-gap: 24px;
1148
+ }
1149
+
1150
+ .chat-history {
1151
+ grid-column: 1 / -1;
1152
+ display: flex;
1153
+ flex-direction: column;
1154
+ gap: 12px;
1155
+ min-width: 0;
1156
+ }
1157
+
1158
+ .chat-history-reveal {
1159
+ align-self: center;
1160
+ border: 1px solid rgba(20, 19, 17, 0.18);
1161
+ background: var(--surface);
1162
+ color: var(--ink);
1163
+ padding: 6px 14px;
1164
+ border-radius: 999px;
1165
+ font-family: "Space Grotesk", system-ui, sans-serif;
1166
+ font-size: 12px;
1167
+ letter-spacing: 0.01em;
1168
+ cursor: pointer;
1169
+ transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
1170
+ }
1171
+
1172
+ .chat-history-reveal:hover {
1173
+ transform: translateY(-1px);
1174
+ border-color: rgba(20, 19, 17, 0.32);
1175
+ box-shadow: 0 6px 16px rgba(20, 19, 17, 0.12);
1176
+ }
1177
+
1178
+ .chat-history-reveal:focus-visible {
1179
+ outline: 2px solid rgba(20, 19, 17, 0.55);
1180
+ outline-offset: 2px;
1181
+ }
1182
+
1183
+ .chat-history-grid.has-meta .chat-history {
1184
+ grid-column: 2;
1185
+ }
1186
+
1187
+ .chat-history-grid.has-annotations .chat-history {
1188
+ grid-column: 2;
1189
+ }
1190
+
1191
+ .chat-meta-rail {
1192
+ grid-column: 1;
1193
+ justify-self: end;
1194
+ align-self: start;
1195
+ min-width: 0;
1196
+ position: sticky;
1197
+ top: 12px;
1198
+ margin-right: 10px;
1199
+ border-right: 1px solid #ccc;
1200
+ padding-right: 10px;
1201
+ min-height: 230px;
1202
+ }
1203
+
1204
+ .chat-annotation-rail {
1205
+ grid-column: 3;
1206
+ justify-self: start;
1207
+ width: min(100%, 320px);
1208
+ align-self: start;
1209
+ position: sticky;
1210
+ top: 12px;
1211
+ min-width: 0;
1212
+ }
1213
+
1214
+ .chat-annotation-card {
1215
+ border: 1px solid var(--border);
1216
+ border-radius: 12px;
1217
+ background: var(--surface);
1218
+ padding: 10px;
1219
+ display: flex;
1220
+ flex-direction: column;
1221
+ gap: 8px;
1222
+ max-height: 70vh;
1223
+ overflow: auto;
1224
+ }
1225
+
1226
+ .chat-annotation-title {
1227
+ font-size: 12px;
1228
+ font-weight: 700;
1229
+ }
1230
+
1231
+ .chat-annotation-subtitle,
1232
+ .chat-annotation-empty {
1233
+ font-size: 11px;
1234
+ opacity: 0.75;
1235
+ }
1236
+
1237
+ .chat-annotation-list {
1238
+ display: flex;
1239
+ flex-direction: column;
1240
+ gap: 8px;
1241
+ }
1242
+
1243
+ .chat-annotation-item {
1244
+ border: 1px solid var(--border);
1245
+ border-radius: 10px;
1246
+ padding: 8px;
1247
+ display: flex;
1248
+ flex-direction: column;
1249
+ gap: 6px;
1250
+ }
1251
+
1252
+ .chat-annotation-quote {
1253
+ font-size: 11px;
1254
+ color: var(--ink-muted, #666);
1255
+ white-space: pre-wrap;
1256
+ }
1257
+
1258
+ .chat-annotation-input {
1259
+ width: 100%;
1260
+ min-height: 56px;
1261
+ border: 1px solid var(--border);
1262
+ border-radius: 8px;
1263
+ background: var(--surface);
1264
+ color: var(--ink);
1265
+ font-family: "Space Grotesk", system-ui, sans-serif;
1266
+ font-size: 12px;
1267
+ padding: 6px 8px;
1268
+ }
1269
+
1270
+ .chat-annotation-remove {
1271
+ align-self: flex-end;
1272
+ border: 1px solid var(--border);
1273
+ border-radius: 999px;
1274
+ background: transparent;
1275
+ color: var(--ink);
1276
+ font-size: 11px;
1277
+ padding: 2px 8px;
1278
+ cursor: pointer;
1279
+ }
1280
+
1281
+ .annotation-line-source-list {
1282
+ margin-top: 8px;
1283
+ border-top: 1px dashed var(--border);
1284
+ padding-top: 6px;
1285
+ display: flex;
1286
+ flex-direction: column;
1287
+ gap: 2px;
1288
+ }
1289
+
1290
+ .annotation-line-source-row {
1291
+ display: grid;
1292
+ grid-template-columns: minmax(0, 1fr) auto;
1293
+ gap: 6px;
1294
+ align-items: start;
1295
+ border-radius: 6px;
1296
+ padding: 2px 2px;
1297
+ }
1298
+
1299
+ .annotation-line-source-row:hover {
1300
+ background: rgba(238, 93, 59, 0.08);
1301
+ }
1302
+
1303
+ .annotation-line-source-text {
1304
+ overflow-wrap: anywhere;
1305
+ font-size: 13px;
1306
+ opacity: 0.7;
1307
+ }
1308
+
1309
+ .annotation-line-source-text > * {
1310
+ margin: 0;
1311
+ }
1312
+
1313
+ .annotation-line-source-text :is(p, ul, ol, li, blockquote, pre) {
1314
+ margin: 0;
1315
+ }
1316
+
1317
+ .annotation-line-source-button {
1318
+ opacity: 0;
1319
+ pointer-events: none;
1320
+ border: none;
1321
+ background: transparent;
1322
+ color: var(--accent);
1323
+ cursor: pointer;
1324
+ font-size: 12px;
1325
+ }
1326
+
1327
+ .annotation-line-source-row:hover .annotation-line-source-button {
1328
+ opacity: 1;
1329
+ pointer-events: auto;
1330
+ }
1331
+
1332
+ .chat-meta-card {
1333
+ display: flex;
1334
+ flex-direction: column;
1335
+ gap: 8px;
1336
+ padding: 2px 0;
1337
+ border: none;
1338
+ background: transparent;
1339
+ color: var(--ink);
1340
+ font-family: "Space Grotesk", system-ui, sans-serif;
1341
+ font-size: 12px;
1342
+ box-shadow: none;
1343
+ max-width: 200px;
1344
+ text-align: right;
1345
+ }
1346
+
1347
+ .chat-meta-section {
1348
+ display: flex;
1349
+ flex-direction: column;
1350
+ gap: 4px;
1351
+ padding: 6px 0;
1352
+ }
1353
+
1354
+ .chat-meta-section:last-child {
1355
+ padding-bottom: 0;
1356
+ }
1357
+
1358
+ .chat-meta-repo-title {
1359
+ display: block;
1360
+ font-size: 14px;
1361
+ }
1362
+
1363
+ .chat-meta-repo-name {
1364
+ font-weight: 500;
1365
+ font-size: 12px;
1366
+ color: var(--ink-muted);
1367
+ }
1368
+
1369
+ .chat-meta-repo-branch {
1370
+ font-weight: 700;
1371
+ }
1372
+
1373
+ .chat-meta-repo-icon {
1374
+ display: inline-block;
1375
+ font-size: 12px;
1376
+ margin: 0 4px 0 0;
1377
+ }
1378
+
1379
+ .chat-meta-repo-branch-line {
1380
+ display: inline-flex;
1381
+ align-items: center;
1382
+ justify-content: flex-end;
1383
+ gap: 4px;
1384
+ font-size: 14px;
1385
+ margin-bottom: 4px;
1386
+ }
1387
+
1388
+ .chat-meta-repo-commit {
1389
+ display: inline;
1390
+ }
1391
+
1392
+ .chat-meta-message {
1393
+ margin-left: 8px;
1394
+ }
1395
+
1396
+ .chat-meta-hash {
1397
+ display: inline-flex;
1398
+ align-items: center;
1399
+ padding: 2px 6px;
1400
+ border-radius: 6px;
1401
+ background: rgba(20, 19, 17, 0.08);
1402
+ color: var(--ink);
1403
+ font-family: var(--font-mono);
1404
+ font-size: 11px;
1405
+ font-weight: 600;
1406
+ }
1407
+
1408
+ .chat-meta-provider {
1409
+ display: inline;
1410
+ color: var(--ink-muted);
1411
+ font-size: 12px;
1412
+ font-weight: 600;
1413
+ }
1414
+
1415
+ .chat-meta-provider-icon {
1416
+ display: inline-block;
1417
+ font-size: 12px;
1418
+ color: var(--ink-muted);
1419
+ margin-right: 4px;
1420
+ }
1421
+
1422
+ .chat-meta-provider-label {
1423
+ color: var(--ink);
1424
+ }
1425
+
1426
+ .chat-meta-provider-sep {
1427
+ opacity: 0.6;
1428
+ }
1429
+
1430
+ .chat-meta-permissions {
1431
+ display: flex;
1432
+ flex-direction: column;
1433
+ gap: 6px;
1434
+ align-items: flex-end;
1435
+ }
1436
+
1437
+ .chat-meta-permission {
1438
+ display: inline-flex;
1439
+ align-items: center;
1440
+ gap: 6px;
1441
+ justify-content: flex-end;
1442
+ color: var(--ink-muted);
1443
+ font-size: 12px;
1444
+ font-weight: 600;
1445
+ }
1446
+
1447
+ .chat-meta-permission-icon {
1448
+ display: inline-flex;
1449
+ align-items: center;
1450
+ font-size: 11px;
1451
+ color: var(--ink-muted);
1452
+ }
1453
+
1454
+ .chat-meta-permission-icon.is-internet {
1455
+ color: #2f9e44;
1456
+ }
1457
+
1458
+ .chat-meta-permission-icon.is-credentials {
1459
+ color: var(--accent, #ee5d3b);
1460
+ }
1461
+
1462
+ .chat-meta-task {
1463
+ display: inline-flex;
1464
+ align-items: center;
1465
+ gap: 6px;
1466
+ justify-content: flex-end;
1467
+ color: var(--ink-muted);
1468
+ font-size: 12px;
1469
+ font-weight: 600;
1470
+ }
1471
+
1472
+ .chat-meta-task-text {
1473
+ display: inline;
1474
+ align-items: center;
1475
+ gap: 4px;
1476
+ }
1477
+
1478
+ .chat-meta-task-text p {
1479
+ margin: 0;
1480
+ }
1481
+
1482
+ .chat-meta-task-loader {
1483
+ display: inline-block;
1484
+ width: 12px;
1485
+ height: 12px;
1486
+ border-radius: 50%;
1487
+ border: 2px solid rgba(20, 19, 17, 0.18);
1488
+ border-top-color: var(--accent, #ee5d3b);
1489
+ animation: chat-meta-spin 0.9s linear infinite;
1490
+ flex: 0 0 auto;
1491
+ }
1492
+
1493
+ .chat-meta-message {
1494
+ color: var(--ink-muted);
1495
+ line-height: 1.3;
1496
+ word-break: break-word;
1497
+ }
1498
+
1499
+ .chat-toolbar {
1500
+ position: absolute;
1501
+ top: var(--chat-toolbar-inset);
1502
+ left: var(--chat-toolbar-inset);
1503
+ display: flex;
1504
+ flex-direction: column;
1505
+ align-items: center;
1506
+ gap: calc(14px * var(--chat-toolbar-scale, 1));
1507
+ padding: calc(16px * var(--chat-toolbar-scale, 1))
1508
+ calc(12px * var(--chat-toolbar-scale, 1));
1509
+ background: transparent;
1510
+ border: none;
1511
+ border-radius: calc(28px * var(--chat-toolbar-scale, 1));
1512
+ box-shadow: none;
1513
+ z-index: 5;
1514
+ }
1515
+
1516
+ .chat-toolbar-group {
1517
+ display: flex;
1518
+ flex-direction: column;
1519
+ gap: calc(12px * var(--chat-toolbar-scale, 1));
1520
+ align-items: center;
1521
+ }
1522
+
1523
+ .chat-toolbar-item {
1524
+ position: relative;
1525
+ display: flex;
1526
+ justify-content: center;
1527
+ width: 100%;
1528
+ }
1529
+
1530
+ .chat-toolbar-button {
1531
+ width: calc(84px * var(--chat-toolbar-scale, 1));
1532
+ border-radius: calc(18px * var(--chat-toolbar-scale, 1));
1533
+ border: none;
1534
+ background: transparent;
1535
+ color: var(--ink);
1536
+ display: flex;
1537
+ flex-direction: column;
1538
+ align-items: center;
1539
+ gap: calc(8px * var(--chat-toolbar-scale, 1));
1540
+ padding: calc(6px * var(--chat-toolbar-scale, 1))
1541
+ calc(4px * var(--chat-toolbar-scale, 1));
1542
+ font-size: calc(12px * var(--chat-toolbar-scale, 1));
1543
+ font-weight: 600;
1544
+ font-family: "Space Grotesk", system-ui, sans-serif;
1545
+ cursor: pointer;
1546
+ transition: transform 0.2s ease, color 0.2s ease;
1547
+ }
1548
+
1549
+ .chat-toolbar-icon-wrap {
1550
+ width: calc(40px * var(--chat-toolbar-scale, 1));
1551
+ height: calc(40px * var(--chat-toolbar-scale, 1));
1552
+ border-radius: calc(14px * var(--chat-toolbar-scale, 1));
1553
+ border: 1px solid rgba(20, 19, 17, 0.12);
1554
+ background: var(--surface);
1555
+ color: var(--ink);
1556
+ display: grid;
1557
+ place-items: center;
1558
+ transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease,
1559
+ background 0.2s ease;
1560
+ }
1561
+
1562
+ .chat-toolbar-label {
1563
+ text-align: center;
1564
+ line-height: 1.1;
1565
+ font-family: "Space Grotesk", system-ui, sans-serif;
1566
+ text-transform: uppercase;
1567
+ letter-spacing: 0.06em;
1568
+ }
1569
+
1570
+ .chat-toolbar-button.is-active,
1571
+ .chat-toolbar-button.is-open {
1572
+ color: var(--accent-dark);
1573
+ }
1574
+
1575
+ .chat-toolbar-button.is-active .chat-toolbar-icon-wrap,
1576
+ .chat-toolbar-button.is-open .chat-toolbar-icon-wrap {
1577
+ border-color: rgba(238, 93, 59, 0.5);
1578
+ background: rgba(238, 93, 59, 0.12);
1579
+ }
1580
+
1581
+ .chat-toolbar-button.is-danger {
1582
+ color: var(--accent-dark);
1583
+ }
1584
+
1585
+ .chat-toolbar-button.is-danger .chat-toolbar-icon-wrap {
1586
+ background: rgba(238, 93, 59, 0.12);
1587
+ border-color: rgba(238, 93, 59, 0.35);
1588
+ }
1589
+
1590
+ .chat-toolbar-button:disabled {
1591
+ opacity: 0.5;
1592
+ cursor: not-allowed;
1593
+ transform: none;
1594
+ }
1595
+
1596
+ .chat-toolbar-button:not(:disabled):hover {
1597
+ transform: translateY(-1px);
1598
+ }
1599
+
1600
+ .chat-toolbar-button:not(:disabled):hover .chat-toolbar-icon-wrap {
1601
+ box-shadow: 0 10px 18px rgba(20, 19, 17, 0.12);
1602
+ transform: translateY(-1px);
1603
+ }
1604
+
1605
+ .chat-toolbar-icon {
1606
+ font-size: calc(16px * var(--chat-toolbar-scale, 1));
1607
+ line-height: 1;
1608
+ }
1609
+
1610
+ .chat-toolbar-divider {
1611
+ height: 1px;
1612
+ width: calc(56px * var(--chat-toolbar-scale, 1));
1613
+ background: rgba(20, 19, 17, 0.12);
1614
+ }
1615
+
1616
+ .chat-toolbar-menu {
1617
+ position: absolute;
1618
+ left: calc(100% + calc(12px * var(--chat-toolbar-scale, 1)));
1619
+ top: 50%;
1620
+ transform: translateY(-50%);
1621
+ background: var(--surface);
1622
+ border: 1px solid rgba(20, 19, 17, 0.12);
1623
+ border-radius: calc(14px * var(--chat-toolbar-scale, 1));
1624
+ box-shadow: 0 18px 36px rgba(20, 19, 17, 0.16);
1625
+ padding: calc(8px * var(--chat-toolbar-scale, 1));
1626
+ display: grid;
1627
+ gap: calc(6px * var(--chat-toolbar-scale, 1));
1628
+ min-width: calc(140px * var(--chat-toolbar-scale, 1));
1629
+ z-index: 12;
1630
+ }
1631
+
1632
+ .chat-toolbar-menu-item {
1633
+ border: none;
1634
+ background: rgba(20, 19, 17, 0.04);
1635
+ color: var(--ink);
1636
+ padding: calc(8px * var(--chat-toolbar-scale, 1)) calc(10px * var(--chat-toolbar-scale, 1));
1637
+ border-radius: calc(10px * var(--chat-toolbar-scale, 1));
1638
+ font-weight: 600;
1639
+ font-size: calc(13px * var(--chat-toolbar-scale, 1));
1640
+ text-align: left;
1641
+ cursor: pointer;
1642
+ }
1643
+
1644
+ .chat-toolbar-menu-item:disabled {
1645
+ opacity: 0.6;
1646
+ cursor: not-allowed;
1647
+ }
1648
+
1649
+ .chat-toolbar-menu-item:not(:disabled):hover {
1650
+ background: rgba(20, 19, 17, 0.1);
1651
+ }
1652
+
1653
+ .layout {
1654
+ display: grid;
1655
+ grid-template-columns: minmax(280px, 360px) minmax(0, 1fr);
1656
+ gap: 16px;
1657
+ align-items: stretch;
1658
+ min-height: 0;
1659
+ height: 100%;
1660
+ overflow: hidden;
1661
+ position: relative;
1662
+ }
1663
+
1664
+ .side {
1665
+ background: var(--surface);
1666
+ border-radius: var(--radius);
1667
+ box-shadow: var(--shadow);
1668
+ padding: 14px;
1669
+ display: flex;
1670
+ flex-direction: column;
1671
+ gap: 12px;
1672
+ min-height: 0;
1673
+ }
1674
+
1675
+ .conversation {
1676
+ display: flex;
1677
+ flex-direction: column;
1678
+ gap: 0;
1679
+ min-height: 0;
1680
+ height: 100%;
1681
+ position: relative;
1682
+ --composer-space: 160px;
1683
+ --chat-max-width: 72ch;
1684
+ }
1685
+
1686
+ .conversation.is-chat-narrow .chat-scroll-inner,
1687
+ .conversation.is-chat-narrow .composer-inner {
1688
+ max-width: var(--chat-max-width);
1689
+ width: 100%;
1690
+ margin: 0 auto;
1691
+ }
1692
+
1693
+ .conversation.is-chat-narrow .chat-scroll-inner.has-meta {
1694
+ max-width: none;
1695
+ margin: 0;
1696
+ }
1697
+
1698
+ .pane-stack {
1699
+ flex: 1;
1700
+ min-height: 0;
1701
+ height: 100%;
1702
+ position: relative;
1703
+ --chat-toolbar-scale: 0.8;
1704
+ --chat-toolbar-width: calc(108px * var(--chat-toolbar-scale));
1705
+ --chat-toolbar-gap: calc(18px * var(--chat-toolbar-scale));
1706
+ --chat-toolbar-offset: calc(var(--chat-toolbar-width) + var(--chat-toolbar-gap));
1707
+ --chat-toolbar-inset: calc(18px * var(--chat-toolbar-scale));
1708
+ }
1709
+
1710
+ .layout:not(.is-mobile).is-side-collapsed {
1711
+ grid-template-columns: minmax(0, 1fr);
1712
+ }
1713
+
1714
+ .layout:not(.is-mobile).is-side-collapsed .side {
1715
+ display: none;
1716
+ }
1717
+
1718
+ .side-backdrop {
1719
+ position: fixed;
1720
+ inset: 0;
1721
+ border: none;
1722
+ padding: 0;
1723
+ background: rgba(20, 19, 17, 0.35);
1724
+ z-index: 50;
1725
+ }
1726
+
1727
+ .side-tabs {
1728
+ display: flex;
1729
+ gap: 8px;
1730
+ }
1731
+
1732
+ .side-tab {
1733
+ flex: 1;
1734
+ border-radius: 999px;
1735
+ border: 1px solid rgba(20, 19, 17, 0.12);
1736
+ background: rgba(20, 19, 17, 0.03);
1737
+ color: var(--ink-muted);
1738
+ font-weight: 700;
1739
+ font-size: 12px;
1740
+ letter-spacing: 0.08em;
1741
+ text-transform: uppercase;
1742
+ padding: 8px 10px;
1743
+ cursor: pointer;
1744
+ display: inline-flex;
1745
+ align-items: center;
1746
+ justify-content: center;
1747
+ gap: 8px;
1748
+ }
1749
+
1750
+ .side-tab.is-active {
1751
+ background: var(--bg-strong);
1752
+ color: var(--ink);
1753
+ border-color: rgba(20, 19, 17, 0.22);
1754
+ }
1755
+
1756
+ .badge {
1757
+ display: inline-flex;
1758
+ align-items: center;
1759
+ justify-content: center;
1760
+ min-width: 22px;
1761
+ height: 18px;
1762
+ padding: 0 8px;
1763
+ border-radius: 999px;
1764
+ background: rgba(20, 19, 17, 0.08);
1765
+ color: var(--ink);
1766
+ font-weight: 800;
1767
+ font-size: 11px;
1768
+ letter-spacing: 0;
1769
+ text-transform: none;
1770
+ }
1771
+
1772
+ .side-body {
1773
+ min-height: 0;
1774
+ overflow: auto;
1775
+ display: flex;
1776
+ flex-direction: column;
1777
+ gap: 12px;
1778
+ }
1779
+
1780
+ .side-footer {
1781
+ margin-top: auto;
1782
+ display: flex;
1783
+ }
1784
+
1785
+ .side-footer-button {
1786
+ width: 100%;
1787
+ border-radius: 14px;
1788
+ border: 1px solid rgba(20, 19, 17, 0.12);
1789
+ background: rgba(20, 19, 17, 0.04);
1790
+ color: var(--ink);
1791
+ font-weight: 700;
1792
+ font-size: 13px;
1793
+ padding: 12px 14px;
1794
+ cursor: pointer;
1795
+ display: inline-flex;
1796
+ align-items: center;
1797
+ justify-content: center;
1798
+ gap: 8px;
1799
+ transition: transform 0.2s ease, box-shadow 0.2s ease,
1800
+ border-color 0.2s ease, background 0.2s ease;
1801
+ }
1802
+
1803
+ .side-footer-icon {
1804
+ font-size: 15px;
1805
+ }
1806
+
1807
+ .side-footer-button:hover {
1808
+ transform: translateY(-1px);
1809
+ border-color: rgba(20, 19, 17, 0.24);
1810
+ box-shadow: 0 10px 20px rgba(20, 19, 17, 0.08);
1811
+ }
1812
+
1813
+ .side-footer-button.is-active {
1814
+ background: var(--bg-strong);
1815
+ border-color: rgba(20, 19, 17, 0.28);
1816
+ }
1817
+
1818
+ .panel-header {
1819
+ display: flex;
1820
+ flex-direction: column;
1821
+ gap: 4px;
1822
+ }
1823
+
1824
+ .panel-title {
1825
+ font-weight: 800;
1826
+ font-size: 14px;
1827
+ }
1828
+
1829
+ .panel-subtitle {
1830
+ font-size: 12px;
1831
+ color: var(--ink-muted);
1832
+ word-break: break-all;
1833
+ }
1834
+
1835
+ .conversation-tabs {
1836
+ display: flex;
1837
+ gap: 10px;
1838
+ }
1839
+
1840
+ .tab-button {
1841
+ border-radius: 999px;
1842
+ border: 1px solid rgba(20, 19, 17, 0.12);
1843
+ background: transparent;
1844
+ color: var(--ink-muted);
1845
+ font-weight: 600;
1846
+ font-size: 12px;
1847
+ letter-spacing: 0.08em;
1848
+ text-transform: uppercase;
1849
+ padding: 8px 14px;
1850
+ cursor: pointer;
1851
+ transition: transform 0.2s ease, box-shadow 0.2s ease,
1852
+ border-color 0.2s ease, color 0.2s ease;
1853
+ }
1854
+
1855
+ .tab-button.is-active {
1856
+ background: var(--bg-strong);
1857
+ color: var(--ink);
1858
+ border-color: rgba(20, 19, 17, 0.24);
1859
+ }
1860
+
1861
+ .tab-button:not(.is-active):hover {
1862
+ transform: translateY(-1px);
1863
+ border-color: rgba(20, 19, 17, 0.3);
1864
+ color: var(--ink);
1865
+ box-shadow: 0 8px 16px rgba(20, 19, 17, 0.08);
1866
+ }
1867
+
1868
+ .diff-panel {
1869
+ background: var(--surface);
1870
+ border-radius: var(--radius);
1871
+ box-shadow: var(--shadow);
1872
+ padding: 20px;
1873
+ padding-left: calc(20px + var(--chat-toolbar-offset));
1874
+ display: flex;
1875
+ flex-direction: column;
1876
+ gap: 16px;
1877
+ overflow: auto;
1878
+ min-height: 0;
1879
+ height: 100%;
1880
+ }
1881
+
1882
+ :root[data-theme="dark"] .diff-panel .diff-view {
1883
+ color: var(--ink);
1884
+ }
1885
+
1886
+
1887
+ :root[data-theme="dark"] .diff-panel .diff-gutter {
1888
+ background: #0f1211;
1889
+ color: rgba(242, 237, 227, 0.6);
1890
+ }
1891
+
1892
+ :root[data-theme="dark"] .diff-panel .diff-line:hover {
1893
+ background: rgba(255, 255, 255, 0.04);
1894
+ }
1895
+
1896
+ :root[data-theme="dark"] .diff-panel .diff-code-added {
1897
+ background: rgba(54, 86, 58, 0.6);
1898
+ }
1899
+
1900
+ :root[data-theme="dark"] .diff-panel .diff-code-deleted {
1901
+ background: rgba(99, 52, 49, 0.6);
1902
+ }
1903
+
1904
+ :root[data-theme="dark"] .diff-panel .diff-gutter-added {
1905
+ background: rgba(54, 86, 58, 0.85);
1906
+ color: #e7f3ea;
1907
+ }
1908
+
1909
+ :root[data-theme="dark"] .diff-panel .diff-gutter-deleted {
1910
+ background: rgba(99, 52, 49, 0.85);
1911
+ color: #fdeceb;
1912
+ }
1913
+
1914
+ :root[data-theme="dark"] .diff-panel .diff-line::selection,
1915
+ :root[data-theme="dark"] .diff-panel .diff-line ::selection {
1916
+ background: rgba(120, 180, 255, 0.35);
1917
+ color: #ffffff;
1918
+ }
1919
+
1920
+ :root[data-theme="dark"] .diff-panel .diff-gutter::selection,
1921
+ :root[data-theme="dark"] .diff-panel .diff-gutter ::selection {
1922
+ background: rgba(120, 180, 255, 0.35);
1923
+ color: #ffffff;
1924
+ }
1925
+
1926
+ .explorer-panel {
1927
+ background: var(--surface);
1928
+ border-radius: var(--radius);
1929
+ box-shadow: var(--shadow);
1930
+ padding: 18px;
1931
+ padding-left: calc(18px + var(--chat-toolbar-offset));
1932
+ display: flex;
1933
+ flex-direction: column;
1934
+ gap: 12px;
1935
+ overflow: hidden;
1936
+ min-height: 0;
1937
+ height: 100%;
1938
+ }
1939
+
1940
+ .explorer-header {
1941
+ display: flex;
1942
+ align-items: baseline;
1943
+ justify-content: space-between;
1944
+ gap: 12px;
1945
+ }
1946
+
1947
+ .explorer-title {
1948
+ font-weight: 700;
1949
+ font-size: 14px;
1950
+ }
1951
+
1952
+ .explorer-subtitle {
1953
+ color: var(--ink-muted);
1954
+ font-size: 12px;
1955
+ margin-top: 4px;
1956
+ }
1957
+
1958
+ .explorer-refresh {
1959
+ border: 1px solid rgba(20, 19, 17, 0.16);
1960
+ background: rgba(20, 19, 17, 0.04);
1961
+ color: var(--ink);
1962
+ padding: 6px 10px;
1963
+ border-radius: 10px;
1964
+ font-size: 12px;
1965
+ font-weight: 600;
1966
+ cursor: pointer;
1967
+ }
1968
+
1969
+ .explorer-refresh:disabled {
1970
+ opacity: 0.5;
1971
+ cursor: not-allowed;
1972
+ }
1973
+
1974
+ .explorer-body {
1975
+ flex: 1;
1976
+ min-height: 0;
1977
+ display: grid;
1978
+ grid-template-columns: minmax(200px, 280px) minmax(0, 1fr);
1979
+ gap: 12px;
1980
+ }
1981
+
1982
+ .explorer-tree-wrap {
1983
+ display: flex;
1984
+ flex-direction: column;
1985
+ min-height: 0;
1986
+ }
1987
+
1988
+ .explorer-tree-header {
1989
+ padding: 8px 10px;
1990
+ margin-bottom: 8px;
1991
+ border: 1px solid rgba(20, 19, 17, 0.1);
1992
+ border-radius: 14px;
1993
+ background: rgba(250, 248, 244, 0.8);
1994
+ display: flex;
1995
+ align-items: center;
1996
+ gap: 8px;
1997
+ }
1998
+
1999
+ .explorer-tree-icon-btn {
2000
+ border: 1px solid rgba(20, 19, 17, 0.16);
2001
+ background: rgba(20, 19, 17, 0.04);
2002
+ color: var(--ink);
2003
+ width: 28px;
2004
+ height: 28px;
2005
+ border-radius: 8px;
2006
+ display: inline-flex;
2007
+ align-items: center;
2008
+ justify-content: center;
2009
+ cursor: pointer;
2010
+ }
2011
+
2012
+ .explorer-tree-icon-btn:hover {
2013
+ background: rgba(20, 19, 17, 0.08);
2014
+ }
2015
+
2016
+ .explorer-tree-icon-btn:disabled {
2017
+ opacity: 0.5;
2018
+ cursor: not-allowed;
2019
+ }
2020
+
2021
+ .explorer-tree,
2022
+ .explorer-editor {
2023
+ border: 1px solid rgba(20, 19, 17, 0.1);
2024
+ border-radius: 14px;
2025
+ background: rgba(250, 248, 244, 0.8);
2026
+ min-height: 0;
2027
+ }
2028
+
2029
+ .explorer-tree {
2030
+ padding: 10px 8px;
2031
+ overflow: auto;
2032
+ flex: 1;
2033
+ }
2034
+
2035
+ .explorer-tree-entry {
2036
+ display: flex;
2037
+ align-items: center;
2038
+ gap: 4px;
2039
+ }
2040
+
2041
+ .explorer-tree-caret-button {
2042
+ border: none;
2043
+ background: transparent;
2044
+ color: var(--ink-muted);
2045
+ width: 22px;
2046
+ min-width: 22px;
2047
+ height: 24px;
2048
+ border-radius: 6px;
2049
+ display: inline-flex;
2050
+ align-items: center;
2051
+ justify-content: center;
2052
+ cursor: pointer;
2053
+ }
2054
+
2055
+ .explorer-tree-caret-button:hover {
2056
+ background: rgba(20, 19, 17, 0.06);
2057
+ }
2058
+
2059
+ .explorer-editor {
2060
+ display: flex;
2061
+ flex-direction: column;
2062
+ overflow: hidden;
2063
+ }
2064
+
2065
+ .explorer-editor-tabs {
2066
+ display: flex;
2067
+ align-items: center;
2068
+ padding: 6px 8px;
2069
+ border-bottom: 1px solid rgba(20, 19, 17, 0.08);
2070
+ background: rgba(20, 19, 17, 0.03);
2071
+ overflow: hidden;
2072
+ min-height: 41px;
2073
+ }
2074
+
2075
+ .explorer-editor-tabs-list {
2076
+ display: flex;
2077
+ align-items: center;
2078
+ gap: 6px;
2079
+ flex: 1;
2080
+ min-width: 0;
2081
+ overflow-x: auto;
2082
+ }
2083
+
2084
+ .explorer-editor-tabs-actions {
2085
+ margin-left: 8px;
2086
+ display: inline-flex;
2087
+ align-items: center;
2088
+ flex-shrink: 0;
2089
+ }
2090
+
2091
+ .explorer-editor-tab {
2092
+ display: inline-flex;
2093
+ align-items: center;
2094
+ max-width: 220px;
2095
+ border: 1px solid rgba(20, 19, 17, 0.14);
2096
+ border-radius: 8px;
2097
+ background: rgba(20, 19, 17, 0.03);
2098
+ }
2099
+
2100
+ .explorer-editor-tab.is-active {
2101
+ border-color: rgba(238, 93, 59, 0.45);
2102
+ background: rgba(238, 93, 59, 0.12);
2103
+ }
2104
+
2105
+ .explorer-editor-tab-open,
2106
+ .explorer-editor-tab-close {
2107
+ border: none;
2108
+ background: transparent;
2109
+ color: var(--ink);
2110
+ font-size: 11px;
2111
+ line-height: 1;
2112
+ }
2113
+
2114
+ .explorer-editor-tab-open {
2115
+ max-width: 180px;
2116
+ padding: 6px 8px;
2117
+ text-align: left;
2118
+ white-space: nowrap;
2119
+ overflow: hidden;
2120
+ text-overflow: ellipsis;
2121
+ cursor: pointer;
2122
+ }
2123
+
2124
+ .explorer-editor-tab-close {
2125
+ padding: 6px 6px 6px 2px;
2126
+ cursor: pointer;
2127
+ opacity: 0.75;
2128
+ }
2129
+
2130
+ .explorer-editor-tab-close:hover {
2131
+ opacity: 1;
2132
+ }
2133
+
2134
+ .explorer-editor-header {
2135
+ padding: 8px 12px;
2136
+ font-size: 12px;
2137
+ font-weight: 600;
2138
+ border-bottom: 1px solid rgba(20, 19, 17, 0.08);
2139
+ color: var(--ink-muted);
2140
+ background: rgba(20, 19, 17, 0.03);
2141
+ display: flex;
2142
+ align-items: center;
2143
+ justify-content: space-between;
2144
+ gap: 8px;
2145
+ }
2146
+
2147
+ .explorer-editor-path {
2148
+ white-space: nowrap;
2149
+ overflow: hidden;
2150
+ text-overflow: ellipsis;
2151
+ }
2152
+
2153
+ .explorer-editor-actions {
2154
+ display: flex;
2155
+ align-items: center;
2156
+ gap: 6px;
2157
+ }
2158
+
2159
+ .explorer-action {
2160
+ border: 1px solid rgba(20, 19, 17, 0.16);
2161
+ background: rgba(20, 19, 17, 0.04);
2162
+ color: var(--ink);
2163
+ padding: 4px 8px;
2164
+ border-radius: 8px;
2165
+ font-size: 11px;
2166
+ font-weight: 600;
2167
+ cursor: pointer;
2168
+ }
2169
+
2170
+ .explorer-action.primary {
2171
+ background: rgba(238, 93, 59, 0.14);
2172
+ color: var(--accent-dark);
2173
+ border-color: rgba(238, 93, 59, 0.4);
2174
+ }
2175
+
2176
+ .explorer-action:disabled {
2177
+ opacity: 0.5;
2178
+ cursor: not-allowed;
2179
+ }
2180
+
2181
+ .explorer-editor-content {
2182
+ flex: 1;
2183
+ margin: 0;
2184
+ padding: 12px;
2185
+ overflow: auto;
2186
+ font-family: var(--font-mono);
2187
+ font-size: 12px;
2188
+ line-height: 1.6;
2189
+ white-space: pre;
2190
+ }
2191
+
2192
+ .explorer-editor-input {
2193
+ flex: 1;
2194
+ min-height: 0;
2195
+ background: transparent;
2196
+ margin: 0;
2197
+ padding: 0;
2198
+ display: flex;
2199
+ }
2200
+
2201
+ .explorer-tree-list {
2202
+ list-style: none;
2203
+ margin: 0;
2204
+ padding-left: 16px;
2205
+ display: flex;
2206
+ flex-direction: column;
2207
+ gap: 2px;
2208
+ }
2209
+
2210
+ .explorer-tree > .explorer-tree-list {
2211
+ padding-left: 0;
2212
+ }
2213
+
2214
+ .explorer-tree-item {
2215
+ display: flex;
2216
+ flex-direction: column;
2217
+ gap: 2px;
2218
+ min-width: 0;
2219
+ }
2220
+
2221
+ .explorer-tree-toggle,
2222
+ .explorer-tree-file {
2223
+ border: none;
2224
+ background: transparent;
2225
+ color: var(--ink);
2226
+ display: flex;
2227
+ align-items: center;
2228
+ gap: 6px;
2229
+ padding: 4px 6px;
2230
+ border-radius: 8px;
2231
+ cursor: pointer;
2232
+ text-align: left;
2233
+ font-size: 13px;
2234
+ min-width: 0;
2235
+ }
2236
+
2237
+ .explorer-tree-entry .explorer-tree-toggle {
2238
+ flex: 1;
2239
+ min-width: 0;
2240
+ }
2241
+
2242
+ .explorer-tree-toggle:hover,
2243
+ .explorer-tree-file:hover {
2244
+ background: rgba(20, 19, 17, 0.06);
2245
+ }
2246
+
2247
+ .explorer-tree-item.is-file.is-selected > .explorer-tree-file {
2248
+ background: rgba(238, 93, 59, 0.12);
2249
+ color: var(--accent-dark);
2250
+ }
2251
+
2252
+ .explorer-tree-item.is-dir.is-selected .explorer-tree-toggle {
2253
+ background: rgba(238, 93, 59, 0.12);
2254
+ color: var(--accent-dark);
2255
+ }
2256
+
2257
+ .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-toggle,
2258
+ .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-file,
2259
+ .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-toggle .explorer-tree-name,
2260
+ .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-toggle .explorer-tree-icon,
2261
+ .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-file .explorer-tree-name,
2262
+ .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-file .explorer-tree-icon {
2263
+ color: #1d5fd3;
2264
+ }
2265
+
2266
+ .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-toggle,
2267
+ .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-file,
2268
+ .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-toggle .explorer-tree-name,
2269
+ .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-toggle .explorer-tree-icon,
2270
+ .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-file .explorer-tree-name,
2271
+ .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-file .explorer-tree-icon {
2272
+ color: #1f8c4a;
2273
+ }
2274
+
2275
+ .explorer-tree-caret {
2276
+ font-size: 12px;
2277
+ color: var(--ink-muted);
2278
+ }
2279
+
2280
+ .explorer-tree-icon {
2281
+ font-size: 12px;
2282
+ }
2283
+
2284
+ .explorer-tree-name {
2285
+ font-family: "Space Grotesk", system-ui, sans-serif !important;
2286
+ white-space: nowrap;
2287
+ overflow: hidden;
2288
+ text-overflow: ellipsis;
2289
+ min-width: 0;
2290
+ flex: 1;
2291
+ }
2292
+
2293
+ .explorer-tree-rename-input {
2294
+ border: 1px solid rgba(20, 19, 17, 0.2);
2295
+ border-radius: 6px;
2296
+ padding: 2px 6px;
2297
+ font-size: 12px;
2298
+ line-height: 1.2;
2299
+ width: auto;
2300
+ flex: 1;
2301
+ min-width: 0;
2302
+ background: rgba(255, 255, 255, 0.9);
2303
+ color: var(--ink);
2304
+ margin-left: 4px;
2305
+ }
2306
+
2307
+ .explorer-tree-rename-input:focus {
2308
+ outline: none;
2309
+ border-color: rgba(238, 93, 59, 0.5);
2310
+ box-shadow: 0 0 0 2px rgba(238, 93, 59, 0.15);
2311
+ }
2312
+
2313
+ .explorer-file-dialog-overlay {
2314
+ position: fixed;
2315
+ inset: 0;
2316
+ background: rgba(10, 12, 12, 0.45);
2317
+ display: flex;
2318
+ align-items: center;
2319
+ justify-content: center;
2320
+ z-index: 80;
2321
+ padding: 20px;
2322
+ }
2323
+
2324
+ .explorer-file-dialog {
2325
+ width: min(420px, 100%);
2326
+ border-radius: 14px;
2327
+ background: var(--surface);
2328
+ border: 1px solid rgba(20, 19, 17, 0.14);
2329
+ box-shadow: 0 20px 60px rgba(20, 19, 17, 0.28);
2330
+ padding: 18px;
2331
+ display: flex;
2332
+ flex-direction: column;
2333
+ gap: 14px;
2334
+ }
2335
+
2336
+ .explorer-file-dialog h3 {
2337
+ margin: 0;
2338
+ font-size: 16px;
2339
+ font-weight: 700;
2340
+ }
2341
+
2342
+ .explorer-file-dialog-field {
2343
+ display: flex;
2344
+ flex-direction: column;
2345
+ gap: 6px;
2346
+ }
2347
+
2348
+ .explorer-file-dialog-field label {
2349
+ font-size: 12px;
2350
+ color: var(--ink-muted);
2351
+ font-weight: 600;
2352
+ }
2353
+
2354
+ .explorer-file-dialog-field input {
2355
+ border: 1px solid rgba(20, 19, 17, 0.18);
2356
+ border-radius: 8px;
2357
+ background: rgba(255, 255, 255, 0.85);
2358
+ color: var(--ink);
2359
+ padding: 8px 10px;
2360
+ }
2361
+
2362
+ .explorer-file-dialog-actions {
2363
+ display: flex;
2364
+ justify-content: flex-end;
2365
+ gap: 10px;
2366
+ }
2367
+
2368
+ .explorer-empty,
2369
+ .explorer-editor-empty,
2370
+ .explorer-truncated {
2371
+ color: var(--ink-muted);
2372
+ font-size: 12px;
2373
+ padding: 8px 10px;
2374
+ }
2375
+
2376
+ .terminal-panel {
2377
+ background: var(--surface);
2378
+ border-radius: var(--radius);
2379
+ box-shadow: var(--shadow);
2380
+ padding: 20px;
2381
+ padding-left: calc(20px + var(--chat-toolbar-offset));
2382
+ display: flex;
2383
+ flex-direction: column;
2384
+ gap: 12px;
2385
+ overflow: hidden;
2386
+ min-height: 0;
2387
+ height: 100%;
2388
+ }
2389
+
2390
+ .terminal-header {
2391
+ display: flex;
2392
+ align-items: baseline;
2393
+ justify-content: space-between;
2394
+ gap: 12px;
2395
+ }
2396
+
2397
+ .terminal-title {
2398
+ font-weight: 700;
2399
+ font-size: 14px;
2400
+ }
2401
+
2402
+ .terminal-meta {
2403
+ color: var(--ink-muted);
2404
+ font-size: 12px;
2405
+ }
2406
+
2407
+ .terminal-body {
2408
+ flex: 1;
2409
+ min-height: 0;
2410
+ border-radius: 12px;
2411
+ overflow: hidden;
2412
+ border: 1px solid rgba(20, 19, 17, 0.1);
2413
+ background: #fbf6ee;
2414
+ }
2415
+
2416
+ .terminal-body .xterm {
2417
+ height: 100%;
2418
+ }
2419
+
2420
+ .terminal-empty {
2421
+ color: var(--ink-muted);
2422
+ font-size: 12px;
2423
+ }
2424
+
2425
+ :root[data-theme="dark"] .tab-button {
2426
+ background: rgba(255, 255, 255, 0.08);
2427
+ border-color: rgba(255, 255, 255, 0.18);
2428
+ color: #e6edf3;
2429
+ }
2430
+
2431
+ :root[data-theme="dark"] .tab-button.is-active {
2432
+ background: rgba(255, 255, 255, 0.18);
2433
+ border-color: rgba(255, 255, 255, 0.35);
2434
+ color: #ffffff;
2435
+ }
2436
+
2437
+ :root[data-theme="dark"] .tab-button:not(.is-active):hover {
2438
+ border-color: rgba(255, 255, 255, 0.35);
2439
+ color: #ffffff;
2440
+ box-shadow: 0 8px 16px rgba(0, 0, 0, 0.25);
2441
+ }
2442
+
2443
+ :root[data-theme="dark"] .explorer-tree,
2444
+ :root[data-theme="dark"] .explorer-editor {
2445
+ border-color: rgba(255, 255, 255, 0.12);
2446
+ background: rgba(22, 24, 23, 0.85);
2447
+ }
2448
+
2449
+ :root[data-theme="dark"] .explorer-tree-header {
2450
+ border-color: rgba(255, 255, 255, 0.12);
2451
+ background: rgba(22, 24, 23, 0.85);
2452
+ }
2453
+
2454
+ :root[data-theme="dark"] .explorer-tree-icon-btn {
2455
+ border-color: rgba(255, 255, 255, 0.24);
2456
+ background: rgba(255, 255, 255, 0.06);
2457
+ color: #e6edf3;
2458
+ }
2459
+
2460
+ :root[data-theme="dark"] .explorer-tree-icon-btn:hover {
2461
+ background: rgba(255, 255, 255, 0.12);
2462
+ }
2463
+
2464
+ :root[data-theme="dark"] .explorer-editor-header {
2465
+ border-bottom-color: rgba(255, 255, 255, 0.08);
2466
+ background: rgba(255, 255, 255, 0.04);
2467
+ color: var(--ink-muted);
2468
+ }
2469
+
2470
+ :root[data-theme="dark"] .explorer-editor-tabs {
2471
+ border-bottom-color: rgba(255, 255, 255, 0.08);
2472
+ background: rgba(255, 255, 255, 0.04);
2473
+ }
2474
+
2475
+ :root[data-theme="dark"] .explorer-editor-tab {
2476
+ border-color: rgba(255, 255, 255, 0.2);
2477
+ background: rgba(255, 255, 255, 0.05);
2478
+ }
2479
+
2480
+ :root[data-theme="dark"] .explorer-editor-tab.is-active {
2481
+ border-color: rgba(238, 93, 59, 0.5);
2482
+ background: rgba(238, 93, 59, 0.22);
2483
+ }
2484
+
2485
+ :root[data-theme="dark"] .explorer-editor-tab-open,
2486
+ :root[data-theme="dark"] .explorer-editor-tab-close {
2487
+ color: #e6edf3;
2488
+ }
2489
+
2490
+ :root[data-theme="dark"] .explorer-tree-toggle:hover,
2491
+ :root[data-theme="dark"] .explorer-tree-file:hover {
2492
+ background: rgba(255, 255, 255, 0.08);
2493
+ }
2494
+
2495
+ :root[data-theme="dark"] .explorer-tree-item.is-file.is-selected > .explorer-tree-file {
2496
+ background: rgba(238, 93, 59, 0.22);
2497
+ color: #ffd2c7;
2498
+ }
2499
+
2500
+ :root[data-theme="dark"] .explorer-tree-item.is-dir.is-selected .explorer-tree-toggle {
2501
+ background: rgba(238, 93, 59, 0.22);
2502
+ color: #ffd2c7;
2503
+ }
2504
+
2505
+ :root[data-theme="dark"] .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-toggle,
2506
+ :root[data-theme="dark"] .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-file,
2507
+ :root[data-theme="dark"] .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-toggle .explorer-tree-name,
2508
+ :root[data-theme="dark"] .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-toggle .explorer-tree-icon,
2509
+ :root[data-theme="dark"] .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-file .explorer-tree-name,
2510
+ :root[data-theme="dark"] .explorer-tree-item.is-modified:not(.is-selected) > .explorer-tree-file .explorer-tree-icon {
2511
+ color: #8ab4ff;
2512
+ }
2513
+
2514
+ :root[data-theme="dark"] .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-toggle,
2515
+ :root[data-theme="dark"] .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-file,
2516
+ :root[data-theme="dark"] .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-toggle .explorer-tree-name,
2517
+ :root[data-theme="dark"] .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-toggle .explorer-tree-icon,
2518
+ :root[data-theme="dark"] .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-file .explorer-tree-name,
2519
+ :root[data-theme="dark"] .explorer-tree-item.is-untracked:not(.is-selected) > .explorer-tree-file .explorer-tree-icon {
2520
+ color: #7ee6a8;
2521
+ }
2522
+
2523
+ :root[data-theme="dark"] .explorer-tree-caret-button:hover {
2524
+ background: rgba(255, 255, 255, 0.08);
2525
+ }
2526
+
2527
+ .explorer-tree-toggle.is-renaming,
2528
+ .explorer-tree-file.is-renaming {
2529
+ cursor: default;
2530
+ }
2531
+
2532
+ :root[data-theme="dark"] .explorer-tree-rename-input {
2533
+ border-color: rgba(255, 255, 255, 0.22);
2534
+ background: rgba(255, 255, 255, 0.06);
2535
+ color: #e6edf3;
2536
+ }
2537
+
2538
+ :root[data-theme="dark"] .explorer-file-dialog {
2539
+ background: rgba(19, 21, 20, 0.96);
2540
+ border-color: rgba(255, 255, 255, 0.14);
2541
+ }
2542
+
2543
+ :root[data-theme="dark"] .explorer-file-dialog-field input {
2544
+ border-color: rgba(255, 255, 255, 0.24);
2545
+ background: rgba(255, 255, 255, 0.06);
2546
+ color: #e6edf3;
2547
+ }
2548
+
2549
+ :root[data-theme="dark"] .diff-file {
2550
+ border-color: rgba(255, 255, 255, 0.1);
2551
+ background: rgba(20, 22, 21, 0.9);
2552
+ }
2553
+
2554
+ :root[data-theme="dark"] .diff-file-header {
2555
+ background: rgba(255, 255, 255, 0.05);
2556
+ border-bottom-color: rgba(255, 255, 255, 0.12);
2557
+ color: #e6edf3;
2558
+ }
2559
+
2560
+ :root[data-theme="dark"] .diff-status {
2561
+ background: rgba(255, 255, 255, 0.05);
2562
+ color: #c9d1d9;
2563
+ }
2564
+
2565
+ :root[data-theme="dark"] .diff-fallback {
2566
+ color: #e6edf3;
2567
+ }
2568
+
2569
+ :root[data-theme="dark"] .diff-file-note {
2570
+ color: #c9d1d9;
2571
+ }
2572
+
2573
+ :root[data-theme="dark"] .diff-line,
2574
+ :root[data-theme="dark"] .diff-code,
2575
+ :root[data-theme="dark"] .diff-gutter {
2576
+ color: #e6edf3;
2577
+ }
2578
+
2579
+ :root[data-theme="dark"] .diff-line-add,
2580
+ :root[data-theme="dark"] .diff-line-added,
2581
+ :root[data-theme="dark"] .diff-line-insert,
2582
+ :root[data-theme="dark"] .diff-added {
2583
+ background: rgba(54, 86, 58, 0.45);
2584
+ color: #e6edf3;
2585
+ }
2586
+
2587
+ :root[data-theme="dark"] .diff-line-add .diff-code,
2588
+ :root[data-theme="dark"] .diff-line-added .diff-code,
2589
+ :root[data-theme="dark"] .diff-line-insert .diff-code,
2590
+ :root[data-theme="dark"] .diff-added .diff-code,
2591
+ :root[data-theme="dark"] .diff-code-insert {
2592
+ background: rgba(54, 86, 58, 0.6);
2593
+ }
2594
+
2595
+ :root[data-theme="dark"] .diff-line-add .diff-gutter,
2596
+ :root[data-theme="dark"] .diff-line-added .diff-gutter,
2597
+ :root[data-theme="dark"] .diff-line-insert .diff-gutter,
2598
+ :root[data-theme="dark"] .diff-added .diff-gutter,
2599
+ :root[data-theme="dark"] .diff-gutter-insert {
2600
+ background: rgba(54, 86, 58, 0.85);
2601
+ color: #e7f3ea;
2602
+ }
2603
+
2604
+ :root[data-theme="dark"] .diff-line-del,
2605
+ :root[data-theme="dark"] .diff-line-removed,
2606
+ :root[data-theme="dark"] .diff-line-delete,
2607
+ :root[data-theme="dark"] .diff-removed {
2608
+ background: rgba(99, 52, 49, 0.5);
2609
+ color: #e6edf3;
2610
+ }
2611
+
2612
+ :root[data-theme="dark"] .diff-line-del .diff-code,
2613
+ :root[data-theme="dark"] .diff-line-removed .diff-code,
2614
+ :root[data-theme="dark"] .diff-line-delete .diff-code,
2615
+ :root[data-theme="dark"] .diff-removed .diff-code,
2616
+ :root[data-theme="dark"] .diff-code-delete {
2617
+ background: rgba(99, 52, 49, 0.6);
2618
+ }
2619
+
2620
+ :root[data-theme="dark"] .diff-line-del .diff-gutter,
2621
+ :root[data-theme="dark"] .diff-line-removed .diff-gutter,
2622
+ :root[data-theme="dark"] .diff-line-delete .diff-gutter,
2623
+ :root[data-theme="dark"] .diff-removed .diff-gutter,
2624
+ :root[data-theme="dark"] .diff-gutter-delete {
2625
+ background: rgba(99, 52, 49, 0.85);
2626
+ color: #fdeceb;
2627
+ }
2628
+
2629
+ :root[data-theme="dark"] .diff-hunk {
2630
+ background: rgba(255, 255, 255, 0.06);
2631
+ color: #c9d1d9;
2632
+ }
2633
+
2634
+ :root[data-theme="dark"] .terminal-body {
2635
+ border-color: rgba(255, 255, 255, 0.12);
2636
+ background: #0f1110;
2637
+ }
2638
+
2639
+ .logs-panel {
2640
+ background: var(--surface);
2641
+ border-radius: var(--radius);
2642
+ box-shadow: var(--shadow);
2643
+ padding: 20px;
2644
+ padding-left: calc(20px + var(--chat-toolbar-offset));
2645
+ display: flex;
2646
+ flex-direction: column;
2647
+ gap: 12px;
2648
+ overflow: hidden;
2649
+ min-height: 0;
2650
+ height: 100%;
2651
+ }
2652
+
2653
+ .settings-panel {
2654
+ background: var(--surface);
2655
+ border-radius: var(--radius);
2656
+ box-shadow: var(--shadow);
2657
+ padding: 20px;
2658
+ padding-left: calc(20px + var(--chat-toolbar-offset));
2659
+ display: flex;
2660
+ flex-direction: column;
2661
+ gap: 18px;
2662
+ overflow: auto;
2663
+ min-height: 0;
2664
+ height: 100%;
2665
+ }
2666
+
2667
+ .settings-header {
2668
+ display: flex;
2669
+ align-items: flex-start;
2670
+ gap: 12px;
2671
+ }
2672
+
2673
+ .settings-heading {
2674
+ display: flex;
2675
+ flex-direction: column;
2676
+ gap: 6px;
2677
+ }
2678
+
2679
+ .settings-back {
2680
+ border-radius: 999px;
2681
+ width: 34px;
2682
+ height: 34px;
2683
+ font-size: 16px;
2684
+ }
2685
+
2686
+ .settings-title {
2687
+ font-weight: 800;
2688
+ font-size: 16px;
2689
+ }
2690
+
2691
+ .settings-subtitle {
2692
+ font-size: 12px;
2693
+ color: var(--ink-muted);
2694
+ }
2695
+
2696
+ .settings-group {
2697
+ display: flex;
2698
+ flex-direction: column;
2699
+ gap: 12px;
2700
+ }
2701
+
2702
+ .settings-item {
2703
+ display: flex;
2704
+ align-items: center;
2705
+ justify-content: space-between;
2706
+ gap: 16px;
2707
+ padding: 12px 14px;
2708
+ border-radius: 12px;
2709
+ border: 1px solid rgba(20, 19, 17, 0.1);
2710
+ background: rgba(20, 19, 17, 0.03);
2711
+ }
2712
+
2713
+ .settings-text {
2714
+ display: flex;
2715
+ flex-direction: column;
2716
+ gap: 4px;
2717
+ }
2718
+
2719
+ .settings-name {
2720
+ font-weight: 700;
2721
+ font-size: 13px;
2722
+ }
2723
+
2724
+ .settings-hint {
2725
+ font-size: 12px;
2726
+ color: var(--ink-muted);
2727
+ }
2728
+
2729
+ .settings-toggle {
2730
+ width: 18px;
2731
+ height: 18px;
2732
+ accent-color: #1f2a44;
2733
+ }
2734
+
2735
+ .settings-select {
2736
+ border: 1px solid rgba(20, 19, 17, 0.12);
2737
+ border-radius: 12px;
2738
+ padding: 8px 10px;
2739
+ background: var(--surface);
2740
+ color: var(--ink);
2741
+ font-size: 13px;
2742
+ font-weight: 600;
2743
+ }
2744
+
2745
+ .settings-item--stacked {
2746
+ align-items: stretch;
2747
+ flex-direction: column;
2748
+ }
2749
+
2750
+ .settings-fields {
2751
+ display: grid;
2752
+ gap: 12px;
2753
+ width: 100%;
2754
+ }
2755
+
2756
+ .settings-field {
2757
+ display: flex;
2758
+ flex-direction: column;
2759
+ gap: 6px;
2760
+ width: 100%;
2761
+ }
2762
+
2763
+ .settings-field-label {
2764
+ font-size: 12px;
2765
+ font-weight: 700;
2766
+ color: var(--ink-muted);
2767
+ }
2768
+
2769
+ .settings-input {
2770
+ border: 1px solid rgba(20, 19, 17, 0.12);
2771
+ border-radius: 12px;
2772
+ padding: 10px 12px;
2773
+ background: var(--surface);
2774
+ color: var(--ink);
2775
+ font-size: 13px;
2776
+ font-weight: 600;
2777
+ }
2778
+
2779
+ .settings-actions {
2780
+ display: flex;
2781
+ flex-wrap: wrap;
2782
+ gap: 10px;
2783
+ align-items: center;
2784
+ }
2785
+
2786
+ .settings-button {
2787
+ border-radius: 999px;
2788
+ padding: 8px 16px;
2789
+ background: #1f2a44;
2790
+ color: #f6f4f0;
2791
+ font-size: 12px;
2792
+ font-weight: 700;
2793
+ }
2794
+
2795
+ .settings-button:disabled {
2796
+ opacity: 0.5;
2797
+ cursor: not-allowed;
2798
+ }
2799
+
2800
+ .settings-status {
2801
+ font-size: 12px;
2802
+ color: var(--ink-muted);
2803
+ }
2804
+
2805
+ .settings-status.is-error {
2806
+ color: #b42318;
2807
+ }
2808
+
2809
+ .is-hidden {
2810
+ display: none;
2811
+ }
2812
+
2813
+ .logs-header {
2814
+ display: flex;
2815
+ align-items: baseline;
2816
+ justify-content: space-between;
2817
+ gap: 12px;
2818
+ }
2819
+
2820
+ .logs-controls {
2821
+ display: flex;
2822
+ align-items: center;
2823
+ gap: 10px;
2824
+ flex-wrap: wrap;
2825
+ justify-content: flex-end;
2826
+ }
2827
+
2828
+ .logs-title {
2829
+ font-weight: 700;
2830
+ font-size: 14px;
2831
+ }
2832
+
2833
+ .logs-count {
2834
+ color: var(--ink-muted);
2835
+ font-size: 12px;
2836
+ }
2837
+
2838
+ .logs-filters {
2839
+ display: flex;
2840
+ gap: 6px;
2841
+ }
2842
+
2843
+ .logs-filter {
2844
+ border: 1px solid rgba(20, 19, 17, 0.16);
2845
+ background: transparent;
2846
+ color: var(--ink-muted);
2847
+ border-radius: 999px;
2848
+ padding: 4px 10px;
2849
+ font-size: 11px;
2850
+ text-transform: uppercase;
2851
+ letter-spacing: 0.08em;
2852
+ cursor: pointer;
2853
+ }
2854
+
2855
+ .logs-filter.is-active {
2856
+ background: var(--bg-strong);
2857
+ color: var(--ink);
2858
+ border-color: rgba(20, 19, 17, 0.28);
2859
+ }
2860
+
2861
+ .logs-clear {
2862
+ border: 1px solid rgba(20, 19, 17, 0.16);
2863
+ background: transparent;
2864
+ color: var(--ink);
2865
+ border-radius: 999px;
2866
+ padding: 4px 10px;
2867
+ font-size: 11px;
2868
+ cursor: pointer;
2869
+ }
2870
+
2871
+ .logs-clear:disabled {
2872
+ color: var(--ink-muted);
2873
+ cursor: not-allowed;
2874
+ }
2875
+
2876
+ .logs-empty {
2877
+ color: var(--ink-muted);
2878
+ font-size: 12px;
2879
+ }
2880
+
2881
+ .logs-list {
2882
+ display: flex;
2883
+ flex-direction: column;
2884
+ gap: 12px;
2885
+ overflow: auto;
2886
+ min-height: 0;
2887
+ }
2888
+
2889
+ .logs-item {
2890
+ border-radius: 12px;
2891
+ border: 1px solid rgba(20, 19, 17, 0.12);
2892
+ padding: 10px 12px;
2893
+ background: rgba(20, 19, 17, 0.02);
2894
+ }
2895
+
2896
+ .logs-stdin {
2897
+ border-left: 4px solid rgba(238, 93, 59, 0.6);
2898
+ }
2899
+
2900
+ .logs-stdout {
2901
+ border-left: 4px solid rgba(31, 96, 117, 0.6);
2902
+ }
2903
+
2904
+ .logs-meta {
2905
+ display: flex;
2906
+ flex-wrap: wrap;
2907
+ gap: 8px;
2908
+ font-size: 11px;
2909
+ text-transform: uppercase;
2910
+ letter-spacing: 0.08em;
2911
+ color: var(--ink-muted);
2912
+ }
2913
+
2914
+ .logs-method {
2915
+ font-weight: 600;
2916
+ color: var(--ink);
2917
+ }
2918
+
2919
+ .logs-payload {
2920
+ margin: 8px 0 0;
2921
+ font-family: var(--font-mono);
2922
+ font-size: 12px;
2923
+ white-space: pre-wrap;
2924
+ word-break: break-word;
2925
+ }
2926
+
2927
+ .diff-header {
2928
+ display: flex;
2929
+ align-items: baseline;
2930
+ justify-content: space-between;
2931
+ gap: 12px;
2932
+ }
2933
+
2934
+ .diff-actions {
2935
+ display: flex;
2936
+ align-items: center;
2937
+ gap: 6px;
2938
+ }
2939
+
2940
+ .diff-action-button {
2941
+ border-radius: 999px;
2942
+ border: 1px solid rgba(20, 19, 17, 0.16);
2943
+ background: var(--surface);
2944
+ padding: 5px 10px;
2945
+ font-size: 11px;
2946
+ font-weight: 700;
2947
+ letter-spacing: 0.02em;
2948
+ color: var(--ink);
2949
+ cursor: pointer;
2950
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
2951
+ }
2952
+
2953
+ .diff-action-button.primary {
2954
+ background: #2f5b4c;
2955
+ color: white;
2956
+ border-color: transparent;
2957
+ box-shadow: 0 6px 14px rgba(47, 91, 76, 0.2);
2958
+ }
2959
+
2960
+ .diff-action-button:hover:not(:disabled) {
2961
+ transform: translateY(-1px);
2962
+ }
2963
+
2964
+ .diff-action-button:disabled {
2965
+ opacity: 0.6;
2966
+ cursor: not-allowed;
2967
+ box-shadow: none;
2968
+ }
2969
+
2970
+ .diff-title {
2971
+ font-weight: 700;
2972
+ font-size: 14px;
2973
+ }
2974
+
2975
+ .diff-count {
2976
+ color: var(--ink-muted);
2977
+ font-size: 12px;
2978
+ }
2979
+
2980
+ .diff-status {
2981
+ background: rgba(20, 19, 17, 0.04);
2982
+ border-radius: 12px;
2983
+ padding: 10px 12px;
2984
+ font-family: var(--font-mono);
2985
+ font-size: 12px;
2986
+ color: var(--ink-muted);
2987
+ }
2988
+
2989
+ .diff-body {
2990
+ display: grid;
2991
+ gap: 18px;
2992
+ }
2993
+
2994
+ .diff-line {
2995
+ font-size: 13px;
2996
+ }
2997
+
2998
+ .diff-file {
2999
+ border: 1px solid rgba(20, 19, 17, 0.08);
3000
+ border-radius: 12px;
3001
+ overflow: hidden;
3002
+ background: var(--surface);
3003
+ }
3004
+
3005
+ .diff-file-header {
3006
+ padding: 10px 14px;
3007
+ font-weight: 600;
3008
+ font-size: 13px;
3009
+ background: rgba(20, 19, 17, 0.04);
3010
+ border-bottom: 1px solid rgba(20, 19, 17, 0.08);
3011
+ }
3012
+
3013
+ .diff-fallback {
3014
+ padding: 0px 12px;
3015
+ font-family: var(--font-mono);
3016
+ font-size: 12px;
3017
+ white-space: pre-wrap;
3018
+ }
3019
+
3020
+ .diff-file-note {
3021
+ padding: 8px 12px 12px;
3022
+ color: var(--ink-muted);
3023
+ font-size: 12px;
3024
+ }
3025
+
3026
+ .untracked-diff-view {
3027
+ width: 100%;
3028
+ border-collapse: collapse;
3029
+ table-layout: fixed;
3030
+ font-family: var(--font-mono);
3031
+ font-size: 12px;
3032
+ }
3033
+
3034
+ .untracked-diff-view .diff-gutter {
3035
+ width: 56px;
3036
+ min-width: 56px;
3037
+ text-align: right;
3038
+ user-select: none;
3039
+ }
3040
+
3041
+ .untracked-diff-view .diff-code {
3042
+ white-space: pre-wrap;
3043
+ word-break: break-word;
3044
+ }
3045
+
3046
+ .diff-empty {
3047
+ color: var(--ink-muted);
3048
+ font-size: 13px;
3049
+ }
3050
+
3051
+ .attachments {
3052
+ display: flex;
3053
+ flex-direction: column;
3054
+ gap: 16px;
3055
+ min-height: 0;
3056
+ }
3057
+
3058
+ .attachments h2 {
3059
+ margin: 0;
3060
+ font-size: 18px;
3061
+ }
3062
+
3063
+ .attachments-subtitle {
3064
+ margin: 6px 0 0;
3065
+ font-size: 12px;
3066
+ color: var(--ink-muted);
3067
+ word-break: break-all;
3068
+ }
3069
+
3070
+ .upload {
3071
+ border: 1px dashed rgba(20, 19, 17, 0.2);
3072
+ border-radius: 14px;
3073
+ padding: 14px;
3074
+ text-align: center;
3075
+ font-weight: 600;
3076
+ color: var(--ink);
3077
+ cursor: pointer;
3078
+ background: rgba(238, 93, 59, 0.08);
3079
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
3080
+ }
3081
+
3082
+ .upload input {
3083
+ display: none;
3084
+ }
3085
+
3086
+ .upload:hover {
3087
+ transform: translateY(-1px);
3088
+ box-shadow: 0 10px 18px rgba(20, 19, 17, 0.12);
3089
+ }
3090
+
3091
+ .upload.disabled {
3092
+ opacity: 0.6;
3093
+ cursor: not-allowed;
3094
+ box-shadow: none;
3095
+ }
3096
+
3097
+ .attachments-meta {
3098
+ display: flex;
3099
+ justify-content: space-between;
3100
+ font-size: 12px;
3101
+ color: var(--ink-muted);
3102
+ }
3103
+
3104
+ .attachments-error {
3105
+ background: rgba(238, 93, 59, 0.12);
3106
+ color: var(--accent-dark);
3107
+ padding: 10px 12px;
3108
+ border-radius: 12px;
3109
+ font-size: 13px;
3110
+ }
3111
+
3112
+ .attachments-empty {
3113
+ border: 1px dashed rgba(20, 19, 17, 0.18);
3114
+ border-radius: 12px;
3115
+ padding: 16px;
3116
+ text-align: center;
3117
+ color: var(--ink-muted);
3118
+ font-size: 13px;
3119
+ }
3120
+
3121
+ .attachments-list {
3122
+ list-style: none;
3123
+ padding: 0;
3124
+ margin: 0;
3125
+ display: flex;
3126
+ flex-direction: column;
3127
+ gap: 10px;
3128
+ max-height: 360px;
3129
+ overflow-y: auto;
3130
+ }
3131
+
3132
+ .attachments-item {
3133
+ display: grid;
3134
+ grid-template-columns: auto 1fr;
3135
+ gap: 10px;
3136
+ align-items: center;
3137
+ padding: 10px 12px;
3138
+ border-radius: 12px;
3139
+ background: var(--bg-strong);
3140
+ cursor: pointer;
3141
+ }
3142
+
3143
+ .attachments-item input {
3144
+ accent-color: var(--accent);
3145
+ width: 16px;
3146
+ height: 16px;
3147
+ }
3148
+
3149
+ .attachments-name {
3150
+ font-weight: 600;
3151
+ font-size: 13px;
3152
+ }
3153
+
3154
+ .visually-hidden {
3155
+ position: absolute;
3156
+ width: 1px;
3157
+ height: 1px;
3158
+ padding: 0;
3159
+ margin: -1px;
3160
+ overflow: hidden;
3161
+ clip: rect(0, 0, 0, 0);
3162
+ border: 0;
3163
+ }
3164
+
3165
+ .empty {
3166
+ padding: 32px;
3167
+ text-align: center;
3168
+ color: var(--ink-muted);
3169
+ border: 1px dashed rgba(20, 19, 17, 0.2);
3170
+ border-radius: 16px;
3171
+ }
3172
+
3173
+ .bubble {
3174
+ padding: 14px 16px;
3175
+ border-radius: 18px;
3176
+ line-height: 1.45;
3177
+ font-size: 14px;
3178
+ white-space: normal;
3179
+ }
3180
+
3181
+ .bubble .plain-text {
3182
+ white-space: pre-wrap;
3183
+ }
3184
+
3185
+ .bubble :where(p, ul, ol, pre, blockquote, h1, h2, h3, h4, h5, h6) {
3186
+ margin: 0px 0 10px;
3187
+ }
3188
+
3189
+ .bubble :where(p:last-child, ul:last-child, ol:last-child, pre:last-child, blockquote:last-child) {
3190
+ margin-bottom: 0;
3191
+ }
3192
+
3193
+ .bubble hr {
3194
+ border: none;
3195
+ border-top: 1px #eee dashed;
3196
+ margin: 15px 0;
3197
+ }
3198
+
3199
+ .bubble code {
3200
+ font-family: var(--font-mono);
3201
+ font-size: 0.9em;
3202
+ background: rgba(20, 19, 17, 0.08);
3203
+ padding: 2px 6px;
3204
+ border-radius: 8px;
3205
+ white-space: pre-wrap;
3206
+ overflow-wrap: anywhere;
3207
+ word-break: break-word;
3208
+ }
3209
+
3210
+ .bubble .inline-code {
3211
+ position: relative;
3212
+ display: inline-flex;
3213
+ align-items: center;
3214
+ vertical-align: middle;
3215
+ max-width: 100%;
3216
+ flex-wrap: wrap;
3217
+ }
3218
+
3219
+ .bubble .inline-code--link {
3220
+ cursor: pointer;
3221
+ }
3222
+
3223
+ .bubble .inline-code-link {
3224
+ border: none;
3225
+ background: transparent;
3226
+ padding: 0;
3227
+ margin: 0;
3228
+ cursor: pointer;
3229
+ color: inherit;
3230
+ display: inline-flex;
3231
+ align-items: center;
3232
+ }
3233
+
3234
+ .bubble .inline-code-link:hover code {
3235
+ text-decoration: underline;
3236
+ }
3237
+
3238
+ .bubble .inline-code code {
3239
+ padding-right: 22px;
3240
+ max-width: 100%;
3241
+ }
3242
+
3243
+ .bubble .inline-code .code-copy {
3244
+ position: absolute;
3245
+ right: 4px;
3246
+ top: 50%;
3247
+ transform: translateY(-50%) scale(0.95);
3248
+ width: 16px;
3249
+ height: 16px;
3250
+ border-radius: 6px;
3251
+ border: none;
3252
+ background: rgba(20, 19, 17, 0.12);
3253
+ color: var(--ink);
3254
+ font-size: 10px;
3255
+ line-height: 1;
3256
+ display: inline-flex;
3257
+ align-items: center;
3258
+ justify-content: center;
3259
+ opacity: 0;
3260
+ pointer-events: none;
3261
+ transition: opacity 0.15s ease, transform 0.15s ease;
3262
+ }
3263
+
3264
+ .bubble .inline-code:hover .code-copy,
3265
+ .bubble .inline-code:focus-within .code-copy {
3266
+ opacity: 1;
3267
+ pointer-events: auto;
3268
+ transform: translateY(-50%) scale(1);
3269
+ }
3270
+
3271
+ .bubble pre {
3272
+ padding: 12px 14px;
3273
+ background: rgba(20, 19, 17, 0.08);
3274
+ border-radius: 12px;
3275
+ overflow-x: hidden;
3276
+ white-space: pre-wrap;
3277
+ word-break: break-word;
3278
+ }
3279
+
3280
+ .bubble .fileref-list {
3281
+ margin: 12px 0;
3282
+ padding-left: 18px;
3283
+ list-style: disc;
3284
+ display: grid;
3285
+ gap: 6px;
3286
+ }
3287
+
3288
+ .bubble .fileref-item {
3289
+ margin: 0;
3290
+ }
3291
+
3292
+ .bubble .fileref-link {
3293
+ display: inline-flex;
3294
+ align-items: center;
3295
+ gap: 6px;
3296
+ text-align: left;
3297
+ padding: 4px 8px;
3298
+ border-radius: 8px;
3299
+ border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent);
3300
+ background: color-mix(in srgb, var(--accent) 18%, transparent);
3301
+ color: var(--ink);
3302
+ font-family: var(--font-mono);
3303
+ font-size: 0.92em;
3304
+ cursor: pointer;
3305
+ transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
3306
+ max-width: 100%;
3307
+ box-sizing: border-box;
3308
+ white-space: normal;
3309
+ overflow-wrap: anywhere;
3310
+ word-break: break-word;
3311
+ flex-wrap: wrap;
3312
+ }
3313
+
3314
+ .bubble .fileref-link:hover {
3315
+ background: color-mix(in srgb, var(--accent) 28%, transparent);
3316
+ border-color: color-mix(in srgb, var(--accent) 45%, transparent);
3317
+ transform: translateY(-1px);
3318
+ }
3319
+
3320
+ .bubble .fileref-link:focus-visible {
3321
+ outline: 2px solid color-mix(in srgb, var(--accent) 55%, transparent);
3322
+ outline-offset: 2px;
3323
+ }
3324
+
3325
+ .bubble .backlog-view {
3326
+ display: flex;
3327
+ flex-direction: column;
3328
+ gap: 12px;
3329
+ margin-top: 6px;
3330
+ }
3331
+
3332
+ .bubble .backlog-title {
3333
+ font-weight: 600;
3334
+ font-size: 15px;
3335
+ }
3336
+
3337
+ .bubble .backlog-list {
3338
+ display: flex;
3339
+ flex-direction: column;
3340
+ gap: 8px;
3341
+ }
3342
+
3343
+ .bubble .backlog-row {
3344
+ display: grid;
3345
+ grid-template-columns: 18px 1fr;
3346
+ gap: 8px;
3347
+ align-items: center;
3348
+ }
3349
+
3350
+ .bubble .backlog-checkbox {
3351
+ width: 16px;
3352
+ height: 16px;
3353
+ accent-color: var(--accent);
3354
+ cursor: pointer;
3355
+ }
3356
+
3357
+ .bubble .backlog-text {
3358
+ border: none;
3359
+ background: transparent;
3360
+ padding: 0;
3361
+ text-align: left;
3362
+ font-size: 12px;
3363
+ color: var(--ink);
3364
+ overflow: hidden;
3365
+ text-overflow: ellipsis;
3366
+ white-space: nowrap;
3367
+ cursor: pointer;
3368
+ }
3369
+
3370
+ .bubble .backlog-text:hover {
3371
+ color: var(--accent);
3372
+ }
3373
+
3374
+ .bubble .backlog-pagination {
3375
+ display: flex;
3376
+ align-items: center;
3377
+ justify-content: flex-end;
3378
+ gap: 8px;
3379
+ font-size: 12px;
3380
+ color: var(--ink-muted);
3381
+ }
3382
+
3383
+ .bubble .backlog-page-button {
3384
+ border: 1px solid rgba(20, 19, 17, 0.16);
3385
+ background: rgba(20, 19, 17, 0.05);
3386
+ border-radius: 999px;
3387
+ padding: 4px 10px;
3388
+ cursor: pointer;
3389
+ font-size: 12px;
3390
+ color: var(--ink);
3391
+ }
3392
+
3393
+ .bubble .backlog-page-button:disabled {
3394
+ opacity: 0.4;
3395
+ cursor: default;
3396
+ }
3397
+
3398
+ .bubble .backlog-empty {
3399
+ color: var(--ink-muted);
3400
+ font-size: 13px;
3401
+ }
3402
+
3403
+ .bubble .backlog-panel {
3404
+ background: transparent;
3405
+ }
3406
+
3407
+ .bubble :where(table) {
3408
+ width: 100%;
3409
+ border-collapse: separate;
3410
+ border-spacing: 0;
3411
+ border-radius: 14px;
3412
+ overflow: hidden;
3413
+ background: var(--surface);
3414
+ box-shadow: 0 12px 26px rgba(20, 19, 17, 0.12);
3415
+ margin: 8px 0;
3416
+ }
3417
+
3418
+ .bubble :where(table) thead {
3419
+ background: var(--accent);
3420
+ color: white;
3421
+ }
3422
+
3423
+ .bubble :where(table) th,
3424
+ .bubble :where(table) td {
3425
+ padding: 10px 12px;
3426
+ text-align: left;
3427
+ border-bottom: 1px solid rgba(20, 19, 17, 0.08);
3428
+ font-size: 13px;
3429
+ }
3430
+
3431
+ .bubble :where(table) th {
3432
+ font-weight: 600;
3433
+ letter-spacing: 0.01em;
3434
+ }
3435
+
3436
+ .bubble :where(table) tbody tr {
3437
+ background: rgba(20, 19, 17, 0.02);
3438
+ transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.2s ease;
3439
+ }
3440
+
3441
+ .bubble :where(table) tbody tr:nth-child(even) {
3442
+ background: rgba(20, 19, 17, 0.04);
3443
+ }
3444
+
3445
+ .bubble :where(table) tbody tr:hover {
3446
+ background: rgba(20, 19, 17, 0.08);
3447
+ box-shadow: inset 0 0 0 1px rgba(20, 19, 17, 0.08);
3448
+ }
3449
+
3450
+ .bubble :where(table) tbody tr:last-child td {
3451
+ border-bottom: none;
3452
+ }
3453
+
3454
+ .bubble-attachments {
3455
+ margin-top: 10px;
3456
+ display: flex;
3457
+ flex-wrap: wrap;
3458
+ gap: 8px;
3459
+ }
3460
+
3461
+ .attachment-card {
3462
+ display: flex;
3463
+ align-items: center;
3464
+ gap: 8px;
3465
+ padding: 8px 10px;
3466
+ border-radius: 12px;
3467
+ border: 1px solid rgba(20, 19, 17, 0.1);
3468
+ background: rgba(20, 19, 17, 0.04);
3469
+ text-decoration: none;
3470
+ color: inherit;
3471
+ font-size: 12px;
3472
+ cursor: pointer;
3473
+ text-align: left;
3474
+ }
3475
+
3476
+ .attachment-card:disabled {
3477
+ opacity: 0.6;
3478
+ cursor: not-allowed;
3479
+ }
3480
+
3481
+ .attachment-card--image {
3482
+ flex-direction: column;
3483
+ align-items: flex-start;
3484
+ text-align: left;
3485
+ gap: 6px;
3486
+ max-width: 100%;
3487
+ }
3488
+
3489
+ .attachment-thumb {
3490
+ width: min(160px, 100%);
3491
+ height: 110px;
3492
+ object-fit: cover;
3493
+ border-radius: 12px;
3494
+ background: rgba(20, 19, 17, 0.06);
3495
+ }
3496
+
3497
+ .attachment-thumb--empty {
3498
+ display: block;
3499
+ width: min(160px, 100%);
3500
+ height: 110px;
3501
+ border-radius: 12px;
3502
+ background: rgba(20, 19, 17, 0.08);
3503
+ }
3504
+
3505
+ .attachment-icon {
3506
+ font-size: 16px;
3507
+ }
3508
+
3509
+ .attachment-name {
3510
+ font-weight: 600;
3511
+ word-break: break-word;
3512
+ }
3513
+
3514
+ .bubble.user .attachment-card {
3515
+ color: var(--ink);
3516
+ }
3517
+
3518
+ .bubble.user .attachment-name {
3519
+ color: var(--ink);
3520
+ }
3521
+
3522
+ .attachment-modal {
3523
+ position: fixed;
3524
+ inset: 0;
3525
+ background: rgba(20, 19, 17, 0.5);
3526
+ display: flex;
3527
+ align-items: center;
3528
+ justify-content: center;
3529
+ z-index: 40;
3530
+ padding: 24px;
3531
+ }
3532
+
3533
+ .attachment-modal-body {
3534
+ background: var(--surface);
3535
+ border-radius: 16px;
3536
+ padding: 14px;
3537
+ max-width: 92vw;
3538
+ max-height: 90vh;
3539
+ display: flex;
3540
+ flex-direction: column;
3541
+ gap: 10px;
3542
+ box-shadow: 0 20px 50px rgba(20, 19, 17, 0.3);
3543
+ }
3544
+
3545
+ .attachment-modal-body img {
3546
+ max-width: 86vw;
3547
+ max-height: 72vh;
3548
+ object-fit: contain;
3549
+ border-radius: 12px;
3550
+ }
3551
+
3552
+ .attachment-modal-name {
3553
+ font-size: 12px;
3554
+ color: var(--ink-muted);
3555
+ word-break: break-word;
3556
+ }
3557
+
3558
+ .attachment-modal-close {
3559
+ position: absolute;
3560
+ top: 16px;
3561
+ right: 16px;
3562
+ border: none;
3563
+ background: var(--surface);
3564
+ color: var(--ink);
3565
+ border-radius: 999px;
3566
+ width: 36px;
3567
+ height: 36px;
3568
+ font-size: 20px;
3569
+ font-weight: 700;
3570
+ cursor: pointer;
3571
+ box-shadow: 0 10px 20px rgba(20, 19, 17, 0.2);
3572
+ }
3573
+
3574
+ :root[data-theme="dark"] .attachment-modal {
3575
+ background: rgba(7, 8, 7, 0.7);
3576
+ }
3577
+
3578
+ :root[data-theme="dark"] .attachment-modal-body {
3579
+ background: var(--surface-elevated);
3580
+ border: 1px solid var(--border-soft);
3581
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.55);
3582
+ }
3583
+
3584
+ :root[data-theme="dark"] .attachment-modal-name {
3585
+ color: rgba(242, 237, 227, 0.6);
3586
+ }
3587
+
3588
+ :root[data-theme="dark"] .attachment-modal-close {
3589
+ background: rgba(255, 255, 255, 0.08);
3590
+ color: var(--ink);
3591
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.45);
3592
+ }
3593
+
3594
+ :root[data-theme="dark"] .bubble code,
3595
+ :root[data-theme="dark"] .bubble pre,
3596
+ :root[data-theme="dark"] .chat-meta-hash {
3597
+ background: #222;
3598
+ }
3599
+
3600
+ :root[data-theme="dark"] .session-workspace-option {
3601
+ background: var(--border-soft);
3602
+ }
3603
+
3604
+ .bubble pre code {
3605
+ background: none;
3606
+ padding: 0;
3607
+ }
3608
+
3609
+ .bubble blockquote {
3610
+ border-left: 3px solid rgba(20, 19, 17, 0.2);
3611
+ padding-left: 12px;
3612
+ color: var(--ink-muted);
3613
+ }
3614
+
3615
+ .warning-message {
3616
+ display: flex;
3617
+ gap: 10px;
3618
+ align-items: flex-start;
3619
+ }
3620
+
3621
+ .warning-icon {
3622
+ color: #f59e0b;
3623
+ margin-top: 2px;
3624
+ }
3625
+
3626
+ .warning-body {
3627
+ flex: 1;
3628
+ min-width: 0;
3629
+ }
3630
+
3631
+ :root[data-theme="dark"] .warning-icon {
3632
+ color: #f6c453;
3633
+ }
3634
+
3635
+ .bubble ul,
3636
+ .bubble ol {
3637
+ padding-left: 20px;
3638
+ }
3639
+
3640
+ .choices {
3641
+ margin-top: 10px;
3642
+ display: grid;
3643
+ gap: 8px;
3644
+ }
3645
+
3646
+ .choices.is-inline {
3647
+ align-items: center;
3648
+ }
3649
+
3650
+ .choices-question {
3651
+ font-size: 12px;
3652
+ font-weight: 600;
3653
+ color: var(--ink-muted);
3654
+ }
3655
+
3656
+ .choices-list {
3657
+ display: grid;
3658
+ gap: 8px;
3659
+ }
3660
+
3661
+ .choices-list.is-inline {
3662
+ display: flex;
3663
+ flex-wrap: wrap;
3664
+ gap: 10px;
3665
+ }
3666
+
3667
+ .choices.is-inline .choice-button {
3668
+ width: auto;
3669
+ min-width: 84px;
3670
+ text-align: center;
3671
+ }
3672
+
3673
+ .choice-button {
3674
+ width: 100%;
3675
+ text-align: left;
3676
+ padding: 10px 12px;
3677
+ border-radius: 12px;
3678
+ border: 1px solid rgba(20, 19, 17, 0.12);
3679
+ background: var(--surface);
3680
+ color: var(--ink);
3681
+ font-family: "Space Grotesk", system-ui, sans-serif;
3682
+ font-size: 14px;
3683
+ cursor: pointer;
3684
+ transition: transform 0.15s ease, box-shadow 0.15s ease,
3685
+ background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
3686
+ }
3687
+
3688
+ :root[data-theme="dark"] .choice-button {
3689
+ border-color: var(--accent, #ee5d3b);
3690
+ }
3691
+
3692
+ .choice-button:hover {
3693
+ transform: translateY(-1px);
3694
+ box-shadow: 0 8px 16px rgba(20, 19, 17, 0.08);
3695
+ }
3696
+
3697
+ .choice-button:disabled {
3698
+ cursor: not-allowed;
3699
+ opacity: 0.55;
3700
+ box-shadow: none;
3701
+ transform: none;
3702
+ }
3703
+
3704
+ .choice-button:disabled:hover {
3705
+ box-shadow: none;
3706
+ transform: none;
3707
+ }
3708
+
3709
+ .choice-button.is-selected {
3710
+ border-color: rgba(20, 19, 17, 0.45);
3711
+ background: rgba(20, 19, 17, 0.08);
3712
+ box-shadow: 0 12px 22px rgba(20, 19, 17, 0.16);
3713
+ transform: translateY(-1px);
3714
+ }
3715
+
3716
+ .choice-button.is-muted {
3717
+ color: var(--ink-muted);
3718
+ border-color: rgba(20, 19, 17, 0.08);
3719
+ background: rgba(20, 19, 17, 0.03);
3720
+ font-size: 12.5px;
3721
+ transform: translateX(10px);
3722
+ }
3723
+
3724
+ .bubble.user .choice-button {
3725
+ border-color: rgba(255, 255, 255, 0.4);
3726
+ background: rgba(255, 255, 255, 0.1);
3727
+ color: white;
3728
+ }
3729
+
3730
+ .bubble.user .choice-button.is-selected {
3731
+ border-color: rgba(255, 255, 255, 0.75);
3732
+ background: rgba(255, 255, 255, 0.22);
3733
+ box-shadow: 0 12px 22px rgba(0, 0, 0, 0.22);
3734
+ }
3735
+
3736
+ .bubble.user .choice-button.is-muted {
3737
+ color: rgba(255, 255, 255, 0.65);
3738
+ border-color: rgba(255, 255, 255, 0.2);
3739
+ background: rgba(255, 255, 255, 0.08);
3740
+ }
3741
+
3742
+ .bubble.user .choices-question {
3743
+ color: rgba(255, 255, 255, 0.8);
3744
+ }
3745
+
3746
+ .vibe80-form {
3747
+ margin-top: 10px;
3748
+ }
3749
+
3750
+ .vibe80-form-button {
3751
+ width: 100%;
3752
+ text-align: left;
3753
+ padding: 10px 12px;
3754
+ border-radius: 12px;
3755
+ border: 1px solid rgba(20, 19, 17, 0.12);
3756
+ background: rgba(20, 19, 17, 0.04);
3757
+ color: var(--ink);
3758
+ font-family: "Space Grotesk", system-ui, sans-serif;
3759
+ font-size: 14px;
3760
+ font-weight: 600;
3761
+ cursor: pointer;
3762
+ transition: transform 0.15s ease, box-shadow 0.15s ease,
3763
+ background 0.2s ease, border-color 0.2s ease;
3764
+ }
3765
+
3766
+ .vibe80-form-button:hover {
3767
+ transform: translateY(-1px);
3768
+ box-shadow: 0 8px 16px rgba(20, 19, 17, 0.08);
3769
+ background: rgba(20, 19, 17, 0.08);
3770
+ }
3771
+
3772
+ .bubble.user .vibe80-form-button {
3773
+ border-color: rgba(255, 255, 255, 0.4);
3774
+ background: rgba(255, 255, 255, 0.12);
3775
+ color: white;
3776
+ }
3777
+
3778
+ .vibe80-form-overlay {
3779
+ position: fixed;
3780
+ inset: 0;
3781
+ background: rgba(15, 15, 15, 0.4);
3782
+ display: flex;
3783
+ align-items: center;
3784
+ justify-content: center;
3785
+ padding: 20px;
3786
+ z-index: 60;
3787
+ }
3788
+
3789
+ .vibe80-form-dialog {
3790
+ width: min(540px, 92vw);
3791
+ background: var(--surface);
3792
+ border-radius: 18px;
3793
+ border: 1px solid var(--border-soft);
3794
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);
3795
+ padding: 18px 20px 20px;
3796
+ display: grid;
3797
+ gap: 16px;
3798
+ max-height: 85vh;
3799
+ overflow: hidden;
3800
+ grid-template-rows: auto 1fr;
3801
+ }
3802
+
3803
+ .vibe80-form-header {
3804
+ display: flex;
3805
+ align-items: center;
3806
+ justify-content: space-between;
3807
+ gap: 12px;
3808
+ }
3809
+
3810
+ .vibe80-form-title {
3811
+ font-size: 16px;
3812
+ font-weight: 700;
3813
+ color: var(--ink);
3814
+ }
3815
+
3816
+ .vibe80-form-close {
3817
+ border: none;
3818
+ background: rgba(20, 19, 17, 0.08);
3819
+ color: var(--ink);
3820
+ width: 30px;
3821
+ height: 30px;
3822
+ border-radius: 999px;
3823
+ font-size: 18px;
3824
+ cursor: pointer;
3825
+ }
3826
+
3827
+ .vibe80-form-body {
3828
+ display: grid;
3829
+ gap: 16px;
3830
+ overflow: auto;
3831
+ padding-right: 4px;
3832
+ min-height: 0;
3833
+ }
3834
+
3835
+ .vibe80-form-field {
3836
+ display: grid;
3837
+ gap: 8px;
3838
+ }
3839
+
3840
+ .vibe80-form-label {
3841
+ font-size: 12px;
3842
+ font-weight: 600;
3843
+ color: var(--ink-muted);
3844
+ }
3845
+
3846
+ .vibe80-form-input {
3847
+ width: 100%;
3848
+ border: 1px solid var(--border-soft);
3849
+ border-radius: 10px;
3850
+ padding: 10px 12px;
3851
+ font-size: 14px;
3852
+ font-family: "Space Grotesk", system-ui, sans-serif;
3853
+ background: var(--surface-elevated);
3854
+ color: var(--ink);
3855
+ }
3856
+
3857
+ .vibe80-form-input:focus {
3858
+ outline: none;
3859
+ border-color: rgba(238, 93, 59, 0.6);
3860
+ box-shadow: 0 0 0 3px rgba(238, 93, 59, 0.12);
3861
+ }
3862
+
3863
+ .vibe80-form-options {
3864
+ display: grid;
3865
+ gap: 8px;
3866
+ }
3867
+
3868
+ .vibe80-form-option {
3869
+ display: flex;
3870
+ align-items: center;
3871
+ gap: 8px;
3872
+ font-size: 14px;
3873
+ color: var(--ink);
3874
+ }
3875
+
3876
+ .vibe80-form-checkbox {
3877
+ display: flex;
3878
+ align-items: center;
3879
+ gap: 8px;
3880
+ font-size: 14px;
3881
+ color: var(--ink);
3882
+ }
3883
+
3884
+ .vibe80-form-empty {
3885
+ font-size: 13px;
3886
+ color: var(--ink-muted);
3887
+ }
3888
+
3889
+ .vibe80-form-actions {
3890
+ display: flex;
3891
+ justify-content: flex-end;
3892
+ gap: 10px;
3893
+ padding-top: 4px;
3894
+ }
3895
+
3896
+ .vibe80-form-cancel,
3897
+ .vibe80-form-submit {
3898
+ border: none;
3899
+ border-radius: 999px;
3900
+ padding: 8px 16px;
3901
+ font-size: 13px;
3902
+ font-weight: 600;
3903
+ cursor: pointer;
3904
+ }
3905
+
3906
+ .vibe80-form-cancel {
3907
+ background: rgba(20, 19, 17, 0.08);
3908
+ color: var(--ink);
3909
+ }
3910
+
3911
+ .vibe80-form-submit {
3912
+ background: var(--accent);
3913
+ color: white;
3914
+ }
3915
+
3916
+ .vibe80-form-submit:disabled {
3917
+ cursor: not-allowed;
3918
+ opacity: 0.6;
3919
+ filter: grayscale(0.2);
3920
+ }
3921
+
3922
+ .worktree-close-confirm-overlay {
3923
+ position: fixed;
3924
+ inset: 0;
3925
+ background: rgba(15, 15, 15, 0.45);
3926
+ display: flex;
3927
+ align-items: center;
3928
+ justify-content: center;
3929
+ padding: 20px;
3930
+ z-index: 62;
3931
+ }
3932
+
3933
+ .worktree-close-confirm-dialog {
3934
+ width: min(520px, 92vw);
3935
+ background: var(--surface);
3936
+ border-radius: 18px;
3937
+ border: 1px solid rgba(20, 19, 17, 0.1);
3938
+ box-shadow: 0 24px 60px rgba(0, 0, 0, 0.22);
3939
+ padding: 18px 20px 20px;
3940
+ display: grid;
3941
+ gap: 12px;
3942
+ }
3943
+
3944
+ .worktree-close-confirm-header {
3945
+ display: flex;
3946
+ align-items: center;
3947
+ justify-content: space-between;
3948
+ gap: 12px;
3949
+ }
3950
+
3951
+ .worktree-close-confirm-title {
3952
+ font-size: 16px;
3953
+ font-weight: 700;
3954
+ color: var(--ink);
3955
+ }
3956
+
3957
+ .worktree-close-confirm-close {
3958
+ border: none;
3959
+ background: rgba(20, 19, 17, 0.08);
3960
+ color: var(--ink);
3961
+ width: 30px;
3962
+ height: 30px;
3963
+ border-radius: 999px;
3964
+ font-size: 18px;
3965
+ cursor: pointer;
3966
+ }
3967
+
3968
+ .worktree-close-confirm-body {
3969
+ font-size: 14px;
3970
+ color: var(--ink-muted);
3971
+ line-height: 1.45;
3972
+ }
3973
+
3974
+ .worktree-close-confirm-actions {
3975
+ display: flex;
3976
+ flex-wrap: wrap;
3977
+ gap: 10px;
3978
+ justify-content: flex-end;
3979
+ padding-top: 4px;
3980
+ }
3981
+
3982
+ .worktree-close-confirm-cancel,
3983
+ .worktree-close-confirm-merge,
3984
+ .worktree-close-confirm-delete {
3985
+ border: none;
3986
+ border-radius: 999px;
3987
+ padding: 8px 14px;
3988
+ font-size: 13px;
3989
+ font-weight: 600;
3990
+ cursor: pointer;
3991
+ }
3992
+
3993
+ .worktree-close-confirm-cancel {
3994
+ background: rgba(20, 19, 17, 0.08);
3995
+ color: var(--ink);
3996
+ }
3997
+
3998
+ .worktree-close-confirm-merge {
3999
+ background: rgba(20, 19, 17, 0.9);
4000
+ color: white;
4001
+ }
4002
+
4003
+ .worktree-close-confirm-delete {
4004
+ background: rgba(214, 62, 36, 0.12);
4005
+ color: #d63e24;
4006
+ border: 1px solid rgba(214, 62, 36, 0.3);
4007
+ }
4008
+
4009
+ .handoff-modal-overlay {
4010
+ position: fixed;
4011
+ inset: 0;
4012
+ background: rgba(15, 15, 15, 0.45);
4013
+ display: flex;
4014
+ align-items: center;
4015
+ justify-content: center;
4016
+ padding: 20px;
4017
+ z-index: 63;
4018
+ }
4019
+
4020
+ .handoff-modal {
4021
+ width: min(420px, 92vw);
4022
+ background: var(--surface);
4023
+ border-radius: 18px;
4024
+ border: 1px solid rgba(20, 19, 17, 0.1);
4025
+ box-shadow: 0 24px 60px rgba(0, 0, 0, 0.22);
4026
+ padding: 18px 20px 20px;
4027
+ display: grid;
4028
+ gap: 12px;
4029
+ }
4030
+
4031
+ .handoff-modal-header {
4032
+ display: flex;
4033
+ align-items: center;
4034
+ justify-content: space-between;
4035
+ gap: 12px;
4036
+ }
4037
+
4038
+ .handoff-modal-title {
4039
+ font-size: 16px;
4040
+ font-weight: 700;
4041
+ color: var(--ink);
4042
+ }
4043
+
4044
+ .handoff-modal-close {
4045
+ border: none;
4046
+ background: rgba(20, 19, 17, 0.08);
4047
+ color: var(--ink);
4048
+ width: 30px;
4049
+ height: 30px;
4050
+ border-radius: 999px;
4051
+ display: grid;
4052
+ place-items: center;
4053
+ cursor: pointer;
4054
+ }
4055
+
4056
+ .handoff-modal-body {
4057
+ display: grid;
4058
+ gap: 12px;
4059
+ }
4060
+
4061
+ .handoff-modal-text {
4062
+ margin: 0;
4063
+ color: var(--ink-muted);
4064
+ font-size: 13px;
4065
+ line-height: 1.4;
4066
+ }
4067
+
4068
+ .handoff-modal-qr {
4069
+ display: flex;
4070
+ align-items: center;
4071
+ justify-content: center;
4072
+ padding: 12px;
4073
+ border-radius: 12px;
4074
+ background: rgba(20, 19, 17, 0.04);
4075
+ }
4076
+
4077
+ .handoff-modal-qr img {
4078
+ width: 260px;
4079
+ height: 260px;
4080
+ object-fit: contain;
4081
+ }
4082
+
4083
+ .handoff-modal-placeholder {
4084
+ text-align: center;
4085
+ color: var(--ink-muted);
4086
+ font-size: 13px;
4087
+ padding: 24px 12px;
4088
+ background: rgba(20, 19, 17, 0.04);
4089
+ border-radius: 12px;
4090
+ }
4091
+
4092
+ .handoff-modal-meta {
4093
+ font-size: 12px;
4094
+ color: var(--ink-muted);
4095
+ text-align: center;
4096
+ }
4097
+
4098
+ .handoff-modal-error {
4099
+ background: rgba(239, 68, 68, 0.12);
4100
+ color: #b91c1c;
4101
+ padding: 8px 10px;
4102
+ border-radius: 10px;
4103
+ font-size: 12px;
4104
+ }
4105
+
4106
+ .handoff-modal-actions {
4107
+ display: flex;
4108
+ justify-content: center;
4109
+ }
4110
+
4111
+ .handoff-modal-actions .session-button {
4112
+ width: 100%;
4113
+ }
4114
+
4115
+ :root[data-theme="dark"] .worktree-close-confirm-overlay {
4116
+ background: rgba(7, 8, 7, 0.7);
4117
+ }
4118
+
4119
+ :root[data-theme="dark"] .worktree-close-confirm-dialog {
4120
+ background: var(--surface-elevated);
4121
+ border-color: var(--border-soft);
4122
+ box-shadow: 0 24px 60px rgba(0, 0, 0, 0.6);
4123
+ }
4124
+
4125
+ :root[data-theme="dark"] .worktree-close-confirm-title {
4126
+ color: var(--ink);
4127
+ }
4128
+
4129
+ :root[data-theme="dark"] .handoff-modal-overlay {
4130
+ background: rgba(7, 8, 7, 0.7);
4131
+ }
4132
+
4133
+ :root[data-theme="dark"] .handoff-modal {
4134
+ background: var(--surface-elevated);
4135
+ border-color: var(--border-soft);
4136
+ box-shadow: 0 24px 60px rgba(0, 0, 0, 0.6);
4137
+ }
4138
+
4139
+ :root[data-theme="dark"] .handoff-modal-qr,
4140
+ :root[data-theme="dark"] .handoff-modal-placeholder {
4141
+ background: rgba(255, 255, 255, 0.04);
4142
+ }
4143
+
4144
+ :root[data-theme="dark"] .handoff-modal-error {
4145
+ background: rgba(239, 68, 68, 0.2);
4146
+ color: #fca5a5;
4147
+ }
4148
+
4149
+ :root[data-theme="dark"] .worktree-close-confirm-close {
4150
+ background: rgba(255, 255, 255, 0.08);
4151
+ color: var(--ink);
4152
+ }
4153
+
4154
+ :root[data-theme="dark"] .worktree-close-confirm-body {
4155
+ color: rgba(242, 237, 227, 0.65);
4156
+ }
4157
+
4158
+ :root[data-theme="dark"] .worktree-close-confirm-cancel {
4159
+ background: rgba(255, 255, 255, 0.08);
4160
+ color: var(--ink);
4161
+ }
4162
+
4163
+ :root[data-theme="dark"] .worktree-close-confirm-merge {
4164
+ background: rgba(255, 255, 255, 0.92);
4165
+ color: #121412;
4166
+ }
4167
+
4168
+ :root[data-theme="dark"] .worktree-close-confirm-delete {
4169
+ background: rgba(214, 62, 36, 0.2);
4170
+ color: #ff8a6b;
4171
+ border-color: rgba(214, 62, 36, 0.4);
4172
+ }
4173
+
4174
+ .bubble.user {
4175
+ align-self: flex-end;
4176
+ background: var(--accent);
4177
+ color: white;
4178
+ border-bottom-right-radius: 6px;
4179
+ max-width: 100%;
4180
+ }
4181
+
4182
+ .bubble.assistant {
4183
+ align-self: flex-start;
4184
+ background: transparent;
4185
+ color: var(--ink);
4186
+ border-radius: 0;
4187
+ padding: 0;
4188
+ }
4189
+
4190
+ .bubble.command-execution,
4191
+ .bubble.backlog {
4192
+ align-self: stretch;
4193
+ background: var(--bg);
4194
+ border-radius: 16px;
4195
+ padding: 8px 12px;
4196
+ border: 1px solid rgba(20, 19, 17, 0.08);
4197
+ }
4198
+
4199
+ .command-execution-panel {
4200
+ display: grid;
4201
+ gap: 0;
4202
+ }
4203
+
4204
+ .command-execution-panel > summary {
4205
+ list-style: none;
4206
+ }
4207
+
4208
+ .command-execution-panel > summary::-webkit-details-marker {
4209
+ display: none;
4210
+ }
4211
+
4212
+ .command-execution-summary {
4213
+ display: inline-flex;
4214
+ align-items: center;
4215
+ gap: 10px;
4216
+ font-weight: 600;
4217
+ color: var(--ink);
4218
+ cursor: pointer;
4219
+ }
4220
+
4221
+ .command-execution-summary.is-static {
4222
+ cursor: default;
4223
+ }
4224
+
4225
+ .command-execution-title {
4226
+ display: inline-flex;
4227
+ align-items: start;
4228
+ gap: 8px;
4229
+ font-size: 11px;
4230
+ }
4231
+
4232
+ .command-execution-tool-icon {
4233
+ display: inline-flex;
4234
+ align-items: center;
4235
+ margin-top: 2px;
4236
+ color: var(--accent);
4237
+ }
4238
+
4239
+ .command-execution-loader {
4240
+ padding: 0;
4241
+ background: transparent;
4242
+ gap: 4px;
4243
+ }
4244
+
4245
+ .command-execution-loader .dot {
4246
+ width: 5px;
4247
+ height: 5px;
4248
+ }
4249
+
4250
+ .command-execution-output {
4251
+ margin: 8px 0 0;
4252
+ padding: 12px;
4253
+ border-radius: 12px;
4254
+ background: rgba(20, 19, 17, 0.08);
4255
+ font-family: var(--font-mono);
4256
+ font-size: 12.5px;
4257
+ line-height: 1.45;
4258
+ white-space: pre-wrap;
4259
+ color: var(--ink);
4260
+ overflow-x: hidden;
4261
+ word-break: break-word;
4262
+ }
4263
+
4264
+ .bubble.assistant :where(p, ul, ol, pre, blockquote) {
4265
+ margin: 8px 0 8px;
4266
+ }
4267
+
4268
+ .bubble.assistant :where(ul, ol) {
4269
+ margin: 2px 0;
4270
+ padding-left: 18px;
4271
+ }
4272
+
4273
+ .bubble.assistant :where(li) {
4274
+ margin: 0;
4275
+ }
4276
+
4277
+ .bubble.assistant :where(li:last-child) {
4278
+ margin-bottom: 0;
4279
+ }
4280
+
4281
+ .bubble.assistant :where(ul, ol) > li + li {
4282
+ margin-top: 2px;
4283
+ }
4284
+
4285
+ .bubble.assistant.typing {
4286
+ margin-top: 2px;
4287
+ padding: 10px 0 0;
4288
+ border-top: 1px dashed rgba(20, 19, 17, 0.05);
4289
+ align-self: stretch;
4290
+ background: var(--surface);
4291
+ }
4292
+
4293
+ .typing-indicator {
4294
+ display: inline-flex;
4295
+ align-items: center;
4296
+ gap: 10px;
4297
+ color: var(--ink-muted);
4298
+ font-size: 13px;
4299
+ font-style: italic;
4300
+ animation: fade-in 0.25s ease-out;
4301
+ max-width: 100%;
4302
+ width: 100%;
4303
+ }
4304
+
4305
+ .typing-indicator .loader {
4306
+ padding: 0;
4307
+ background: transparent;
4308
+ }
4309
+
4310
+ .typing-text {
4311
+ flex: 1;
4312
+ min-width: 0;
4313
+ overflow: hidden;
4314
+ text-overflow: ellipsis;
4315
+ white-space: nowrap;
4316
+ }
4317
+
4318
+ .typing-indicator .dot {
4319
+ width: 5px;
4320
+ height: 5px;
4321
+ }
4322
+
4323
+ @keyframes fade-in {
4324
+ from {
4325
+ opacity: 0;
4326
+ transform: translateY(2px);
4327
+ }
4328
+ to {
4329
+ opacity: 1;
4330
+ transform: translateY(0);
4331
+ }
4332
+ }
4333
+
4334
+ .composer {
4335
+ --composer-control-height: 44px;
4336
+ --composer-icon-size: 16px;
4337
+ display: flex;
4338
+ flex-direction: column;
4339
+ gap: 10px;
4340
+ padding: 12px;
4341
+ border-radius: var(--radius);
4342
+ background: var(--surface);
4343
+ box-shadow: var(--shadow);
4344
+ align-items: stretch;
4345
+ position: relative;
4346
+ width: max-content;
4347
+ max-width: calc(100% - 24px);
4348
+ }
4349
+
4350
+ .composer.is-dragging {
4351
+ outline: 2px dashed var(--accent);
4352
+ outline-offset: 4px;
4353
+ box-shadow: 0 0 0 3px rgba(255, 123, 31, 0.2);
4354
+ }
4355
+
4356
+ .composer-inner {
4357
+ display: flex;
4358
+ flex-direction: column;
4359
+ gap: 10px;
4360
+ width: auto;
4361
+ }
4362
+
4363
+ .composer-attach-button {
4364
+ position: relative;
4365
+ width: var(--composer-control-height);
4366
+ height: var(--composer-control-height);
4367
+ padding: 0;
4368
+ }
4369
+
4370
+ .attachment-badge {
4371
+ position: absolute;
4372
+ top: -8px;
4373
+ left: 50%;
4374
+ transform: translateX(-50%);
4375
+ min-width: 18px;
4376
+ height: 18px;
4377
+ padding: 0 6px;
4378
+ border-radius: 999px;
4379
+ background: var(--accent);
4380
+ color: white;
4381
+ font-size: 10px;
4382
+ font-weight: 800;
4383
+ display: inline-flex;
4384
+ align-items: center;
4385
+ justify-content: center;
4386
+ border: 2px solid var(--surface);
4387
+ z-index: 1;
4388
+ }
4389
+
4390
+ .composer--sticky {
4391
+ position: absolute;
4392
+ left: 50%;
4393
+ bottom: 12px;
4394
+ z-index: 20;
4395
+ transform: translateX(-50%);
4396
+ margin: 0;
4397
+ margin-left: 42px;
4398
+ }
4399
+
4400
+ .composer-input {
4401
+ width: 100%;
4402
+ min-width: 0;
4403
+ min-height: var(--composer-control-height);
4404
+ border-radius: 16px;
4405
+ border: none;
4406
+ padding: 12px 8px;
4407
+ font-family: "Space Grotesk", system-ui, sans-serif;
4408
+ font-size: 15px;
4409
+ color: var(--ink);
4410
+ background: transparent;
4411
+ resize: none;
4412
+ outline: none;
4413
+ }
4414
+
4415
+ .composer-input:focus {
4416
+ border: none;
4417
+ box-shadow: none;
4418
+ outline: none;
4419
+ }
4420
+
4421
+ .composer-main {
4422
+ display: grid;
4423
+ grid-template-columns: auto minmax(240px, clamp(240px, 36vw, 520px)) auto auto;
4424
+ gap: 10px;
4425
+ align-items: flex-end;
4426
+ }
4427
+
4428
+ .composer-model-select {
4429
+ height: var(--composer-control-height);
4430
+ min-width: 120px;
4431
+ max-width: 180px;
4432
+ padding: 0 12px 0 6px;
4433
+ border-radius: 12px;
4434
+ border: 1px solid var(--border);
4435
+ background: var(--surface);
4436
+ color: var(--ink);
4437
+ font-family: "Space Grotesk", system-ui, sans-serif;
4438
+ font-size: 12px;
4439
+ text-align: right;
4440
+ text-align-last: right;
4441
+ }
4442
+
4443
+ .composer-model-select:disabled {
4444
+ opacity: 0.55;
4445
+ }
4446
+
4447
+ .composer-actions {
4448
+ display: flex;
4449
+ flex-wrap: wrap;
4450
+ gap: 10px;
4451
+ justify-content: flex-end;
4452
+ }
4453
+
4454
+ .composer-meta {
4455
+ display: flex;
4456
+ justify-content: space-between;
4457
+ gap: 12px;
4458
+ flex-wrap: wrap;
4459
+ align-items: center;
4460
+ }
4461
+
4462
+ .send-icon {
4463
+ display: none;
4464
+ font-size: var(--composer-icon-size);
4465
+ line-height: 1;
4466
+ width: var(--composer-icon-size);
4467
+ height: var(--composer-icon-size);
4468
+ }
4469
+
4470
+ .stop-icon {
4471
+ display: inline-flex;
4472
+ align-items: center;
4473
+ justify-content: center;
4474
+ font-size: var(--composer-icon-size);
4475
+ line-height: 1;
4476
+ width: var(--composer-icon-size);
4477
+ height: var(--composer-icon-size);
4478
+ }
4479
+
4480
+ .composer button.primary.stop-button {
4481
+ padding: 0;
4482
+ width: var(--composer-control-height);
4483
+ min-width: var(--composer-control-height);
4484
+ min-height: var(--composer-control-height);
4485
+ display: inline-flex;
4486
+ align-items: center;
4487
+ justify-content: center;
4488
+ }
4489
+
4490
+ .composer button.primary.send-button {
4491
+ padding: 0;
4492
+ width: var(--composer-control-height);
4493
+ min-width: var(--composer-control-height);
4494
+ min-height: var(--composer-control-height);
4495
+ display: inline-flex;
4496
+ align-items: center;
4497
+ justify-content: center;
4498
+ }
4499
+
4500
+ .composer button.primary.send-button .send-icon {
4501
+ display: inline-flex;
4502
+ align-items: center;
4503
+ justify-content: center;
4504
+ }
4505
+
4506
+ .link-button {
4507
+ border: none;
4508
+ background: transparent;
4509
+ color: var(--ink-muted);
4510
+ font-weight: 700;
4511
+ font-size: 12px;
4512
+ cursor: pointer;
4513
+ padding: 6px 8px;
4514
+ border-radius: 10px;
4515
+ }
4516
+
4517
+ .link-button:hover {
4518
+ background: rgba(20, 19, 17, 0.05);
4519
+ color: var(--ink);
4520
+ }
4521
+
4522
+ .composer-chips {
4523
+ display: flex;
4524
+ flex-wrap: wrap;
4525
+ gap: 6px;
4526
+ }
4527
+
4528
+ .composer-attachments {
4529
+ display: flex;
4530
+ flex-wrap: wrap;
4531
+ gap: 10px;
4532
+ }
4533
+
4534
+ .composer-command-menu {
4535
+ position: absolute;
4536
+ left: 58px;
4537
+ bottom: calc(100% - 8px);
4538
+ z-index: 30;
4539
+ width: min(320px, calc(100vw - 48px));
4540
+ }
4541
+
4542
+ .command-menu {
4543
+ background: var(--surface);
4544
+ border-radius: 12px;
4545
+ box-shadow: var(--shadow);
4546
+ border: 1px solid var(--border);
4547
+ padding: 6px;
4548
+ }
4549
+
4550
+ .command-item {
4551
+ display: flex;
4552
+ flex-direction: column;
4553
+ gap: 4px;
4554
+ padding: 8px 10px;
4555
+ border-radius: 10px;
4556
+ cursor: pointer;
4557
+ color: var(--ink);
4558
+ }
4559
+
4560
+ .command-item.is-selected,
4561
+ .command-item:hover {
4562
+ background: rgba(255, 123, 31, 0.12);
4563
+ }
4564
+
4565
+ .command-item-label {
4566
+ font-weight: 600;
4567
+ font-size: 14px;
4568
+ }
4569
+
4570
+ .command-item-desc {
4571
+ font-size: 12px;
4572
+ color: var(--muted);
4573
+ }
4574
+
4575
+ .command-empty {
4576
+ padding: 10px;
4577
+ color: var(--muted);
4578
+ font-size: 12px;
4579
+ }
4580
+
4581
+ .composer-attachments .attachment-card-body {
4582
+ min-width: 0;
4583
+ max-width: 100%;
4584
+ }
4585
+
4586
+ .composer-attachments .attachment-card-title {
4587
+ max-width: 100%;
4588
+ }
4589
+
4590
+ .attachment-card {
4591
+ border: 1px solid var(--border-soft);
4592
+ border-radius: 16px;
4593
+ background: var(--surface-ghost);
4594
+ padding: 12px 14px;
4595
+ min-width: 150px;
4596
+ max-width: 200px;
4597
+ display: flex;
4598
+ flex-direction: column;
4599
+ gap: 8px;
4600
+ box-shadow: 0 12px 24px rgba(20, 19, 17, 0.08);
4601
+ }
4602
+
4603
+ .attachment-card-title {
4604
+ font-size: 14px;
4605
+ font-weight: 700;
4606
+ color: var(--ink);
4607
+ overflow: hidden;
4608
+ text-overflow: ellipsis;
4609
+ white-space: nowrap;
4610
+ }
4611
+
4612
+ .attachment-card-meta {
4613
+ font-size: 12px;
4614
+ color: var(--ink-muted);
4615
+ }
4616
+
4617
+ .attachment-card-footer {
4618
+ display: flex;
4619
+ align-items: center;
4620
+ justify-content: space-between;
4621
+ gap: 8px;
4622
+ }
4623
+
4624
+ .attachment-card-type {
4625
+ border-radius: 999px;
4626
+ padding: 4px 8px;
4627
+ background: rgba(20, 19, 17, 0.06);
4628
+ font-size: 11px;
4629
+ font-weight: 700;
4630
+ letter-spacing: 0.06em;
4631
+ color: var(--ink-muted);
4632
+ }
4633
+
4634
+ :root[data-theme="dark"] .attachment-card-type,
4635
+ :root[data-theme="dark"] .attachment-card-remove,
4636
+ :root[data-theme="dark"] .vibe80-form-cancel,
4637
+ :root[data-theme="dark"] .vibe80-form-close {
4638
+ background: rgba(255, 255, 255, 0.08);
4639
+ }
4640
+
4641
+ :root[data-theme="dark"] .vibe80-form-overlay {
4642
+ background: rgba(7, 8, 7, 0.7);
4643
+ }
4644
+
4645
+ :root[data-theme="dark"] .vibe80-form-dialog {
4646
+ background: var(--surface-elevated);
4647
+ border-color: var(--border-soft);
4648
+ }
4649
+
4650
+ :root[data-theme="dark"] .vibe80-form-select,
4651
+ :root[data-theme="dark"] .vibe80-form-input {
4652
+ background: #111413;
4653
+ color: var(--ink);
4654
+ border-color: rgba(255, 255, 255, 0.14);
4655
+ }
4656
+
4657
+ :root[data-theme="dark"] .vibe80-form-input {
4658
+ background: #111413;
4659
+ border-color: rgba(255, 255, 255, 0.14);
4660
+ color: var(--ink);
4661
+ }
4662
+
4663
+ :root[data-theme="dark"] .vibe80-form-input::placeholder {
4664
+ color: rgba(242, 237, 227, 0.5);
4665
+ }
4666
+
4667
+ :root[data-theme="dark"] .attachment-card {
4668
+ background: #1c201e;
4669
+ border-color: rgba(255, 255, 255, 0.12);
4670
+ box-shadow: 0 10px 24px rgba(0, 0, 0, 0.45);
4671
+ }
4672
+
4673
+ :root[data-theme="dark"] .attachment-card-title {
4674
+ color: #f5efe4;
4675
+ }
4676
+
4677
+ :root[data-theme="dark"] .attachment-card-meta {
4678
+ color: rgba(242, 237, 227, 0.6);
4679
+ }
4680
+
4681
+ :root[data-theme="dark"] .attachment-card-remove:hover {
4682
+ background: rgba(255, 255, 255, 0.16);
4683
+ }
4684
+
4685
+ :root[data-theme="dark"] .composer-input::placeholder {
4686
+ color: rgba(242, 237, 227, 0.5);
4687
+ }
4688
+ .attachment-card-remove {
4689
+ border: none;
4690
+ background: rgba(20, 19, 17, 0.08);
4691
+ color: var(--ink);
4692
+ font-weight: 700;
4693
+ font-size: 14px;
4694
+ width: 28px;
4695
+ height: 28px;
4696
+ border-radius: 999px;
4697
+ cursor: pointer;
4698
+ }
4699
+
4700
+ .attachment-card-remove:hover {
4701
+ background: rgba(20, 19, 17, 0.16);
4702
+ }
4703
+
4704
+ .composer-attachments-count {
4705
+ font-size: 12px;
4706
+ color: var(--ink-muted);
4707
+ }
4708
+
4709
+ :root[data-theme="dark"] .composer-input {
4710
+ color: var(--ink);
4711
+ }
4712
+
4713
+ :root[data-theme="dark"] .composer-attachments-count {
4714
+ color: rgba(242, 237, 227, 0.6);
4715
+ }
4716
+
4717
+ .chip {
4718
+ background: rgba(20, 19, 17, 0.06);
4719
+ border: 1px solid rgba(20, 19, 17, 0.1);
4720
+ border-radius: 999px;
4721
+ padding: 6px 10px;
4722
+ font-weight: 700;
4723
+ font-size: 12px;
4724
+ color: var(--ink);
4725
+ }
4726
+
4727
+ .chip--removable {
4728
+ display: inline-flex;
4729
+ align-items: center;
4730
+ gap: 6px;
4731
+ cursor: pointer;
4732
+ }
4733
+
4734
+ .chip--removable:hover {
4735
+ background: rgba(20, 19, 17, 0.12);
4736
+ }
4737
+
4738
+ .chip-remove {
4739
+ font-weight: 800;
4740
+ color: var(--ink-muted);
4741
+ }
4742
+
4743
+ .chip-muted {
4744
+ color: var(--ink-muted);
4745
+ }
4746
+
4747
+ .composer-attachments-error {
4748
+ margin-top: 8px;
4749
+ }
4750
+
4751
+ .composer button.primary,
4752
+ .composer button.secondary,
4753
+ .composer button.ghost {
4754
+ border-radius: 999px;
4755
+ font-weight: 700;
4756
+ padding: 10px 16px;
4757
+ min-height: var(--composer-control-height);
4758
+ cursor: pointer;
4759
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
4760
+ }
4761
+
4762
+ .composer button.primary {
4763
+ border: none;
4764
+ background: var(--accent);
4765
+ color: white;
4766
+ }
4767
+
4768
+ .composer .secondary {
4769
+ background: transparent;
4770
+ color: var(--accent);
4771
+ border: 1px solid rgba(238, 93, 59, 0.4);
4772
+ box-shadow: none;
4773
+ }
4774
+
4775
+ .composer .ghost {
4776
+ background: transparent;
4777
+ color: var(--ink);
4778
+ border: 1px solid rgba(20, 19, 17, 0.2);
4779
+ box-shadow: none;
4780
+ }
4781
+
4782
+ .composer .ghost:not(:disabled):hover {
4783
+ box-shadow: none;
4784
+ background: rgba(20, 19, 17, 0.06);
4785
+ }
4786
+
4787
+ .composer .secondary:not(:disabled):hover {
4788
+ box-shadow: none;
4789
+ background: rgba(238, 93, 59, 0.08);
4790
+ }
4791
+
4792
+ .composer button:disabled {
4793
+ background: #d6c6b8;
4794
+ cursor: not-allowed;
4795
+ box-shadow: none;
4796
+ }
4797
+
4798
+ .composer .secondary:disabled,
4799
+ .composer .ghost:disabled {
4800
+ background: transparent;
4801
+ color: var(--ink-muted);
4802
+ border-color: rgba(20, 19, 17, 0.12);
4803
+ }
4804
+
4805
+ .composer button.primary:not(:disabled):hover {
4806
+ transform: translateY(-1px);
4807
+ box-shadow: 0 8px 16px rgba(238, 93, 59, 0.3);
4808
+ }
4809
+
4810
+ .backlog {
4811
+ display: flex;
4812
+ flex-direction: column;
4813
+ gap: 12px;
4814
+ min-height: 0;
4815
+ }
4816
+
4817
+ .backlog-header {
4818
+ display: flex;
4819
+ align-items: center;
4820
+ justify-content: space-between;
4821
+ gap: 12px;
4822
+ }
4823
+
4824
+ .backlog-header h2 {
4825
+ margin: 0;
4826
+ font-size: 14px;
4827
+ }
4828
+
4829
+ .backlog-count {
4830
+ border-radius: 999px;
4831
+ padding: 2px 8px;
4832
+ font-size: 12px;
4833
+ background: rgba(20, 19, 17, 0.08);
4834
+ color: var(--ink-muted);
4835
+ }
4836
+
4837
+ .backlog-empty {
4838
+ color: var(--ink-muted);
4839
+ font-size: 12px;
4840
+ }
4841
+
4842
+ .backlog-list {
4843
+ list-style: none;
4844
+ margin: 0;
4845
+ padding: 0;
4846
+ display: flex;
4847
+ flex-direction: column;
4848
+ gap: 12px;
4849
+ max-height: 240px;
4850
+ overflow: auto;
4851
+ }
4852
+
4853
+ .backlog-item {
4854
+ border: 1px solid rgba(20, 19, 17, 0.1);
4855
+ border-radius: 12px;
4856
+ padding: 10px 12px;
4857
+ display: flex;
4858
+ flex-direction: column;
4859
+ gap: 8px;
4860
+ background: rgba(20, 19, 17, 0.02);
4861
+ }
4862
+
4863
+ .backlog-text {
4864
+ font-size: 13px;
4865
+ color: var(--ink);
4866
+ }
4867
+
4868
+ .backlog-actions {
4869
+ display: flex;
4870
+ flex-wrap: wrap;
4871
+ gap: 8px;
4872
+ }
4873
+
4874
+ .backlog-actions button {
4875
+ border: 1px solid rgba(20, 19, 17, 0.12);
4876
+ border-radius: 999px;
4877
+ background: var(--bg-strong);
4878
+ color: var(--ink);
4879
+ font-size: 12px;
4880
+ font-weight: 600;
4881
+ padding: 6px 12px;
4882
+ cursor: pointer;
4883
+ }
4884
+
4885
+ .backlog-actions button:disabled {
4886
+ cursor: not-allowed;
4887
+ opacity: 0.6;
4888
+ }
4889
+
4890
+ .backlog-actions .ghost {
4891
+ background: transparent;
4892
+ }
4893
+
4894
+ .backlog-meta {
4895
+ font-size: 11px;
4896
+ color: var(--ink-muted);
4897
+ }
4898
+
4899
+ @media (max-width: 1024px) {
4900
+ .app {
4901
+ padding: 12px 12px calc(14px + env(safe-area-inset-bottom));
4902
+ gap: 10px;
4903
+ }
4904
+
4905
+ .header {
4906
+ flex-direction: column;
4907
+ align-items: stretch;
4908
+ gap: 8px;
4909
+ position: relative;
4910
+ }
4911
+
4912
+ .topbar-left {
4913
+ gap: 10px;
4914
+ padding-right: calc(56px + env(safe-area-inset-right));
4915
+ flex-wrap: wrap;
4916
+ }
4917
+
4918
+ .topbar-tabs {
4919
+ width: 100%;
4920
+ order: 3;
4921
+ }
4922
+
4923
+ .topbar-brand {
4924
+ gap: 2px;
4925
+ }
4926
+
4927
+ .header .icon-button {
4928
+ width: 34px;
4929
+ height: 34px;
4930
+ border-radius: 10px;
4931
+ }
4932
+
4933
+ .topbar-right {
4934
+ width: 100%;
4935
+ justify-content: space-between;
4936
+ }
4937
+
4938
+ .more-menu {
4939
+ position: absolute;
4940
+ top: 0;
4941
+ right: calc(0px + env(safe-area-inset-right));
4942
+ }
4943
+
4944
+ .layout {
4945
+ display: block;
4946
+ grid-template-columns: 1fr;
4947
+ gap: 10px;
4948
+ }
4949
+
4950
+ .layout.is-mobile .conversation {
4951
+ gap: 8px;
4952
+ }
4953
+
4954
+ .layout.is-mobile .pane-stack {
4955
+ --chat-toolbar-offset: 0px;
4956
+ --chat-toolbar-inset: 0px;
4957
+ }
4958
+
4959
+ .layout.is-mobile .chat-toolbar {
4960
+ display: none;
4961
+ }
4962
+
4963
+ .layout.is-mobile .chat {
4964
+ padding: 12px;
4965
+ }
4966
+
4967
+ .layout.is-mobile .explorer-body {
4968
+ grid-template-columns: 1fr;
4969
+ }
4970
+
4971
+ .layout.is-mobile .composer {
4972
+ --composer-control-height: 42px;
4973
+ padding: 8px;
4974
+ gap: 6px;
4975
+ }
4976
+
4977
+ .layout.is-mobile .composer--sticky {
4978
+ left: 50%;
4979
+ transform: translateX(-50%);
4980
+ bottom: calc(8px + env(safe-area-inset-bottom));
4981
+ margin: 0;
4982
+ }
4983
+
4984
+ .layout.is-mobile .side {
4985
+ position: fixed;
4986
+ top: 0;
4987
+ bottom: 0;
4988
+ left: 0;
4989
+ width: min(360px, 88vw);
4990
+ transform: translateX(-110%);
4991
+ transition: transform 0.2s ease;
4992
+ z-index: 60;
4993
+ border-radius: 0 20px 20px 0;
4994
+ }
4995
+
4996
+ .layout.is-mobile.is-side-open .side {
4997
+ transform: translateX(0);
4998
+ }
4999
+
5000
+ .layout.is-mobile .composer-main {
5001
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
5002
+ gap: 8px;
5003
+ align-items: center;
5004
+ }
5005
+
5006
+ .layout.is-mobile .composer-attach-button,
5007
+ .layout.is-mobile .composer button.primary {
5008
+ width: var(--composer-control-height);
5009
+ height: var(--composer-control-height);
5010
+ padding: 0;
5011
+ border-radius: 12px;
5012
+ }
5013
+
5014
+ .layout.is-mobile .composer-input {
5015
+ min-height: var(--composer-control-height);
5016
+ width: 100%;
5017
+ padding: 10px 12px;
5018
+ overflow: auto;
5019
+ }
5020
+
5021
+ .layout.is-mobile .composer-model-select {
5022
+ min-width: 96px;
5023
+ max-width: 120px;
5024
+ font-size: 12px;
5025
+ padding-right: 24px;
5026
+ }
5027
+
5028
+ .layout.is-mobile .composer-meta {
5029
+ justify-content: flex-end;
5030
+ }
5031
+
5032
+ .layout.is-mobile .composer-meta .link-button,
5033
+ .layout.is-mobile .composer-chips {
5034
+ display: none;
5035
+ }
5036
+
5037
+ .layout.is-mobile .send-text {
5038
+ display: none;
5039
+ }
5040
+
5041
+ .layout.is-mobile .send-icon {
5042
+ display: inline-flex;
5043
+ align-items: center;
5044
+ justify-content: center;
5045
+ }
5046
+
5047
+ .session-form {
5048
+ grid-template-columns: 1fr;
5049
+ }
5050
+ }
5051
+
5052
+ @media (max-width: 640px) {
5053
+ .session-gate {
5054
+ padding: 16px;
5055
+ }
5056
+
5057
+ .session-workspace-options {
5058
+ grid-template-columns: 1fr;
5059
+ }
5060
+
5061
+ .session-workspace-toggle {
5062
+ grid-template-columns: 1fr;
5063
+ }
5064
+
5065
+ .session-layout--fullscreen {
5066
+ padding: 20px 16px;
5067
+ grid-template-columns: 1fr;
5068
+ }
5069
+
5070
+ .session-panel {
5071
+ padding: 20px;
5072
+ min-height: auto;
5073
+ }
5074
+
5075
+ .session-form-row {
5076
+ grid-template-columns: 1fr;
5077
+ }
5078
+
5079
+ .session-form-row.is-compact-grid {
5080
+ grid-template-columns: 1fr;
5081
+ }
5082
+
5083
+ .session-form-row.is-actions {
5084
+ flex-direction: column;
5085
+ align-items: stretch;
5086
+ }
5087
+
5088
+ .session-form-row.is-actions .session-button {
5089
+ width: 100%;
5090
+ }
5091
+
5092
+ .session-form-row > div:empty {
5093
+ display: none;
5094
+ }
5095
+
5096
+ .session-form-row > button {
5097
+ width: 100%;
5098
+ justify-self: center;
5099
+ }
5100
+ }
5101
+
5102
+ @media (max-width: 1279px) {
5103
+ .chat-history-grid.has-annotations {
5104
+ grid-template-columns: minmax(0, 1fr);
5105
+ }
5106
+
5107
+ .chat-history-grid.has-annotations .chat-history {
5108
+ grid-column: 1 / -1;
5109
+ }
5110
+
5111
+ .chat-annotation-rail {
5112
+ display: none;
5113
+ }
5114
+ }
5115
+
5116
+ @media (min-width: 980px) {
5117
+ .session-info {
5118
+ display: block;
5119
+ }
5120
+ }
5121
+
5122
+ /* Worktree start button */
5123
+ .worktree-start-btn {
5124
+ margin-top: 16px;
5125
+ padding: 12px 24px;
5126
+ background: var(--accent);
5127
+ color: white;
5128
+ border: none;
5129
+ border-radius: 12px;
5130
+ font-size: 14px;
5131
+ font-weight: 500;
5132
+ cursor: pointer;
5133
+ transition: all 0.15s ease;
5134
+ }
5135
+
5136
+ .worktree-start-btn:hover {
5137
+ background: var(--accent-dark);
5138
+ transform: translateY(-1px);
5139
+ box-shadow: 0 4px 12px rgba(238, 93, 59, 0.3);
5140
+ }
5141
+
5142
+ /* Conversation section with worktree tabs */
5143
+ .conversation {
5144
+ display: flex;
5145
+ flex-direction: column;
5146
+ overflow: hidden;
5147
+ }