@spzxg/cli-ui 0.6.2 → 0.6.5

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 (131) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +137 -11
  3. package/dist/cli-ui-embed-BmLN2Jjg.js +43290 -0
  4. package/dist/{cli-ui-index-BY5i3wId.js → cli-ui-index-D4qfPHMd.js} +2 -2
  5. package/dist/{cli-ui-jszip.min-BZsUwI-s.js → cli-ui-jszip.min-DC9898pC.js} +1 -1
  6. package/dist/{cli-ui-jszip.min-m01fexHW.js → cli-ui-jszip.min-DpEl0G1z.js} +2 -2
  7. package/dist/{cli-ui-xlsx-CpWicJLT.js → cli-ui-xlsx-zs7oEtPj.js} +1 -1
  8. package/dist/cli-ui.css +32 -1
  9. package/dist/cli-ui.js +1 -1
  10. package/package.json +14 -8
  11. package/src/board/BrowserPane.tsx +160 -74
  12. package/src/board/ChangesPane.tsx +2 -2
  13. package/src/board/CliBoard.tsx +79 -50
  14. package/src/board/FileViewer.tsx +32 -22
  15. package/src/board/FilesPane.tsx +32 -15
  16. package/src/board/PanelControls.tsx +28 -0
  17. package/src/board/blocks.tsx +5 -5
  18. package/src/board/context.ts +65 -0
  19. package/src/board/fileOps.ts +26 -3
  20. package/src/board/fileWatch.ts +88 -0
  21. package/src/board/folderDownload.ts +30 -14
  22. package/src/board/panels.ts +33 -0
  23. package/src/board/textLoad.ts +2 -2
  24. package/src/board/workspace.ts +38 -9
  25. package/src/chat/CliChat.tsx +73 -30
  26. package/src/chat/Composer.tsx +41 -41
  27. package/src/chat/RunControls.tsx +99 -0
  28. package/src/chat/configuration.ts +15 -0
  29. package/src/chat/draft.ts +41 -0
  30. package/src/chat/export.ts +2 -2
  31. package/src/components.tsx +13 -0
  32. package/src/core/blocks.ts +2 -2
  33. package/src/core/callbacks.ts +8 -0
  34. package/src/core/client.ts +8 -6
  35. package/src/core/conversation.ts +3 -3
  36. package/src/core/id.ts +15 -0
  37. package/src/core/identity.ts +33 -0
  38. package/src/core/provider.tsx +24 -14
  39. package/src/core/store.ts +83 -26
  40. package/src/core/types.ts +34 -0
  41. package/src/elements.tsx +135 -29
  42. package/src/embed.ts +6 -8
  43. package/src/index.ts +24 -17
  44. package/src/layout/CliSplit.tsx +1 -1
  45. package/src/msglist/CliMsgList.tsx +10 -10
  46. package/src/operator/branchFlow.ts +35 -0
  47. package/src/operator/index.ts +9 -0
  48. package/src/operator/liveStream.ts +1 -0
  49. package/src/operator/node/AgentConnect.tsx +624 -0
  50. package/src/operator/node/AppearancePanel.tsx +35 -0
  51. package/src/operator/node/BranchHistory.tsx +67 -0
  52. package/src/operator/node/BranchNavigator.tsx +36 -0
  53. package/src/operator/node/BrowserPane.tsx +128 -0
  54. package/src/operator/node/BrowserPopup.tsx +22 -0
  55. package/src/operator/node/Chat.tsx +517 -0
  56. package/src/operator/node/CommandPalette.tsx +213 -0
  57. package/src/operator/node/Composer.tsx +287 -0
  58. package/src/operator/node/InsightsView.tsx +831 -0
  59. package/src/operator/node/Layout.tsx +190 -0
  60. package/src/operator/node/Markdown.tsx +61 -0
  61. package/src/operator/node/Modal.tsx +179 -0
  62. package/src/operator/node/NeedsYouMenu.tsx +54 -0
  63. package/src/operator/node/OnboardingWizard.tsx +250 -0
  64. package/src/operator/node/Orchestrator.tsx +634 -0
  65. package/src/operator/node/ProjectLanding.tsx +86 -0
  66. package/src/operator/node/ProjectsColumn.tsx +137 -0
  67. package/src/operator/node/ProviderAuth.tsx +561 -0
  68. package/src/operator/node/RunControls.tsx +2 -0
  69. package/src/operator/node/RunSwitch.tsx +113 -0
  70. package/src/operator/node/Services.tsx +245 -0
  71. package/src/operator/node/SessionRail.tsx +260 -0
  72. package/src/operator/node/SessionView.tsx +288 -0
  73. package/src/operator/node/SettingsView.tsx +690 -0
  74. package/src/operator/node/TaskBoard.tsx +352 -0
  75. package/src/operator/node/TaskChanges.tsx +530 -0
  76. package/src/operator/node/TaskHero.tsx +50 -0
  77. package/src/operator/node/TasksColumn.tsx +200 -0
  78. package/src/operator/node/Terminal.tsx +143 -0
  79. package/src/operator/node/Transcript.tsx +463 -0
  80. package/src/operator/node/ViewFile.tsx +79 -0
  81. package/src/operator/node/Welcome.tsx +101 -0
  82. package/src/operator/node/WorktreePrune.tsx +333 -0
  83. package/src/operator/node/agents.ts +58 -0
  84. package/src/operator/node/api.ts +40 -0
  85. package/src/operator/node/boardBackend.ts +80 -0
  86. package/src/operator/node/boardEvents.ts +22 -0
  87. package/src/operator/node/boardInteraction.ts +15 -0
  88. package/src/operator/node/boardState.ts +57 -0
  89. package/src/operator/node/boardWorkspace.ts +12 -0
  90. package/src/operator/node/branchFlow.ts +1 -0
  91. package/src/operator/node/composerDraft.ts +52 -0
  92. package/src/operator/node/fileLinks.ts +81 -0
  93. package/src/operator/node/format.ts +290 -0
  94. package/src/operator/node/github.tsx +234 -0
  95. package/src/operator/node/icons.tsx +88 -0
  96. package/src/operator/node/liveStream.ts +270 -0
  97. package/src/operator/node/modals.tsx +720 -0
  98. package/src/operator/node/navHistory.ts +70 -0
  99. package/src/operator/node/persist.ts +26 -0
  100. package/src/operator/node/protocol/agents/optIn.ts +9 -0
  101. package/src/operator/node/protocol/agents/types.ts +394 -0
  102. package/src/operator/node/protocol/approvalFailure.ts +77 -0
  103. package/src/operator/node/protocol/authFailure.ts +66 -0
  104. package/src/operator/node/protocol/customModels.ts +23 -0
  105. package/src/operator/node/protocol/events.ts +13 -0
  106. package/src/operator/node/protocol/features.ts +70 -0
  107. package/src/operator/node/protocol/internalUsage.ts +1 -0
  108. package/src/operator/node/protocol/promptLimits.ts +52 -0
  109. package/src/operator/node/protocol/storageRetention.ts +13 -0
  110. package/src/operator/node/protocol/types.ts +332 -0
  111. package/src/operator/node/protocol/usageLimit.ts +72 -0
  112. package/src/operator/node/shared.tsx +89 -0
  113. package/src/operator/node/transcriptModel.ts +129 -0
  114. package/src/operator/node/types.ts +296 -0
  115. package/src/operator/node/useGlobalEvents.ts +97 -0
  116. package/src/operator/node/useOrchestrator.ts +696 -0
  117. package/src/operator/node/usePrefs.ts +114 -0
  118. package/src/operator/node/useRecaps.ts +91 -0
  119. package/src/operator/node/useTaskStream.ts +279 -0
  120. package/src/operator.base.css +1798 -0
  121. package/src/operator.css +186 -16
  122. package/src/styles.css +20 -0
  123. package/src/ui/Markdown.tsx +7 -2
  124. package/src/ui/Popover.tsx +77 -0
  125. package/src/ui/TextBlock.tsx +3 -3
  126. package/src/ui/Transcript.tsx +10 -8
  127. package/src/ui/fileLinks.ts +6 -0
  128. package/src/ui/format.ts +1 -1
  129. package/src/ui/shared.tsx +1 -1
  130. package/src/ui/transcriptModel.ts +2 -2
  131. package/dist/cli-ui-embed-6IJ_jRVh.js +0 -41223
@@ -0,0 +1,1798 @@
1
+ /* ==========================================================================
2
+ Orchestrator — hi-fi app styling
3
+ Three-column tool for running Claude Code projects & task sessions
4
+ (ported from the Claude Design hi-fi prototype)
5
+ ========================================================================== */
6
+
7
+ :root{
8
+ /* ---- cool near-black "mission control" palette (dark = default) ---- */
9
+ --bg:#080a0e;
10
+ --bg-2:#0a0d12;
11
+ --chrome:#0a0d12; /* top bar / sidebar base */
12
+ --panel:#0c1119;
13
+ --panel-2:#0b0f16;
14
+ --surface:#0c1119;
15
+ --surface-2:#0a0e14;
16
+ --raise:#0e141d;
17
+ --code-bg:#0a0e14;
18
+
19
+ --ink:#f3f6fa;
20
+ --ink-2:#c4ccd6;
21
+ --ink-3:#99a4b3;
22
+ --ink-4:#5c6776;
23
+
24
+ --line:rgba(150,170,200,.10);
25
+ --line-2:rgba(150,170,200,.055);
26
+ --line-strong:rgba(150,170,200,.18);
27
+
28
+ --accent:#4d8cff; /* primary / live (electric blue) */
29
+ --accent-soft:rgba(77,140,255,.14);
30
+ --accent-ink:#9cc0ff;
31
+
32
+ --red:#ff6a45; /* alias of coral */
33
+ --red-soft:rgba(255,106,69,.12);
34
+ --coral:#ff6a45; /* needs you (alert) */
35
+ --coral-soft:rgba(255,106,69,.12);
36
+ --amber:#f5a623; /* blocked */
37
+ --amber-soft:rgba(245,166,35,.12);
38
+ --green:#38d39f; /* done / merged */
39
+ --green-soft:rgba(56,211,159,.12);
40
+ --blue:#4d8cff; /* live / working */
41
+ --blue-soft:rgba(77,140,255,.14);
42
+ --operator:#a978ff; /* Operator's own agent work */
43
+
44
+ --grid:rgba(150,170,200,.05);
45
+ --row-sel:rgba(150,170,200,.07);
46
+ --selection-bg:#15243a;
47
+ --selection-line:rgba(77,140,255,.28);
48
+ --on-accent:#06070a; /* ink on a filled accent/blue/green button */
49
+ --topbar:rgba(8,10,14,.82);
50
+
51
+ --glow-blue:0 0 10px #4d8cff;
52
+ --glow-coral:0 0 10px #ff6a45;
53
+ --glow-green:0 0 10px #38d39f;
54
+
55
+ --diff-add-bg:rgba(56,211,159,.10);
56
+ --diff-del-bg:rgba(255,106,69,.10);
57
+
58
+ --sans:'Space Grotesk', system-ui, sans-serif;
59
+ --mono:'JetBrains Mono', ui-monospace, monospace;
60
+
61
+ --r-sm:7px;
62
+ --r:10px;
63
+ --r-lg:14px;
64
+ --r-xl:18px;
65
+
66
+ --sh-1:0 1px 2px rgba(0,0,0,.34);
67
+ --sh-2:0 10px 28px rgba(0,0,0,.4);
68
+ --sh-3:0 24px 60px rgba(0,0,0,.55);
69
+
70
+ --col-proj:236px;
71
+ --col-task:352px;
72
+ --col-rail:430px; /* DIFF / PREVIEW / CONTEXT rail */
73
+ --density:1;
74
+ }
75
+
76
+ [data-theme="light"]{
77
+ /* ---- warm paper variant ---- */
78
+ --bg:#f4f1ea;
79
+ --bg-2:#efeae0;
80
+ --chrome:#efeae0;
81
+ --panel:#fffdf8;
82
+ --panel-2:#f6f2ea;
83
+ --surface:#fffdf8;
84
+ --surface-2:#f6f2ea;
85
+ --raise:#ffffff;
86
+ --code-bg:#f6f2ea;
87
+
88
+ --ink:#14171c;
89
+ --ink-2:#46505c;
90
+ --ink-3:#5b6470;
91
+ --ink-4:#8a8678;
92
+
93
+ --line:rgba(20,23,28,.10);
94
+ --line-2:rgba(20,23,28,.055);
95
+ --line-strong:rgba(20,23,28,.16);
96
+
97
+ --accent:#1f5fd6;
98
+ --accent-soft:rgba(31,95,214,.10);
99
+ --accent-ink:#1a4fb0;
100
+
101
+ --red:#e0512f;
102
+ --red-soft:rgba(224,81,47,.10);
103
+ --coral:#e0512f;
104
+ --coral-soft:rgba(224,81,47,.10);
105
+ --amber:#b07d18;
106
+ --amber-soft:rgba(176,125,24,.12);
107
+ --green:#178a5f;
108
+ --green-soft:rgba(23,138,95,.12);
109
+ --blue:#1f5fd6;
110
+ --blue-soft:rgba(31,95,214,.10);
111
+ --operator:#7c3fc4;
112
+
113
+ --grid:rgba(20,30,50,.045);
114
+ --row-sel:rgba(20,23,28,.045);
115
+ --selection-bg:#eaf1fd;
116
+ --selection-line:rgba(31,95,214,.22);
117
+ --on-accent:#ffffff;
118
+ --topbar:rgba(244,241,234,.85);
119
+
120
+ --glow-blue:0 0 0 4px rgba(31,95,214,.14);
121
+ --glow-coral:0 0 0 4px rgba(224,81,47,.14);
122
+ --glow-green:0 0 0 4px rgba(23,138,95,.14);
123
+
124
+ --diff-add-bg:rgba(23,138,95,.10);
125
+ --diff-del-bg:rgba(224,81,47,.10);
126
+
127
+ --sh-1:0 1px 2px rgba(20,30,50,.05), 0 1px 1px rgba(20,30,50,.04);
128
+ --sh-2:0 10px 28px rgba(20,30,50,.08);
129
+ --sh-3:0 18px 44px rgba(20,30,50,.12);
130
+ }
131
+
132
+ *{box-sizing:border-box;}
133
+ /* Theme changes are atomic; hover/focus transitions resume after the new palette
134
+ has painted. Otherwise dark surfaces briefly swallow the new dark text. */
135
+ html[data-theme-changing] *,html[data-theme-changing] *::before,html[data-theme-changing] *::after{transition:none!important;}
136
+ html,body{margin:0;height:100%;}
137
+ body{
138
+ background:var(--bg);
139
+ color:var(--ink);
140
+ font-family:var(--sans);
141
+ font-size:14px;
142
+ line-height:1.45;
143
+ -webkit-font-smoothing:antialiased;
144
+ text-rendering:optimizeLegibility;
145
+ overflow:hidden;
146
+ }
147
+ button{font-family:inherit;color:inherit;cursor:pointer;border:none;background:none;}
148
+ ::-webkit-scrollbar{width:10px;height:10px;}
149
+ ::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:6px;border:3px solid transparent;background-clip:content-box;}
150
+ ::-webkit-scrollbar-thumb:hover{background:var(--ink-4);background-clip:content-box;}
151
+ :focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
152
+
153
+ .mono{font-family:var(--mono);}
154
+ .tnum{font-variant-numeric:tabular-nums;}
155
+
156
+ /* ============================== app shell ============================== */
157
+ /* dvh tracks the *visible* viewport as mobile browser chrome / the on-screen
158
+ keyboard expand and collapse, so the composer never ends up behind them; vh
159
+ is the desktop fallback. */
160
+ .app{height:100vh;height:100dvh;display:flex;flex-direction:column;background:var(--chrome);}
161
+ .titlebar{
162
+ height:50px;flex:0 0 auto;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:14px;
163
+ padding:0 16px;background:var(--topbar);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
164
+ border-bottom:1px solid var(--line);z-index:30;
165
+ }
166
+ @keyframes tb-spin{to{transform:rotate(360deg);}}
167
+ .tb-left{grid-column:1;justify-self:start;display:flex;align-items:center;gap:14px;min-width:0;}
168
+ .tb-logo{display:flex;align-items:center;gap:10px;}
169
+ .tb-ring{position:relative;width:22px;height:22px;border-radius:50%;border:1px solid var(--accent);display:flex;align-items:center;justify-content:center;flex:0 0 auto;}
170
+ .tb-core{width:4px;height:4px;border-radius:50%;background:var(--accent);box-shadow:var(--glow-blue);}
171
+ .tb-arc{position:absolute;inset:-1px;border-radius:50%;background:conic-gradient(from 0deg,var(--accent),transparent 90deg);animation:tb-spin 3.4s linear infinite;opacity:.55;}
172
+ .tb-word{font-weight:700;letter-spacing:.04em;color:var(--ink);font-size:15px;}
173
+ .tb-div{width:1px;height:18px;background:var(--line-strong);}
174
+ .tb-crumb{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:11px;letter-spacing:.06em;min-width:0;}
175
+ .tb-crumb .cz{color:var(--ink-4);}
176
+ .tb-crumb .cs{color:var(--ink-4);opacity:.6;}
177
+ .tb-crumb .cn{color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
178
+
179
+ .tb-omni{justify-self:center;display:flex;align-items:center;gap:8px;width:360px;max-width:32vw;padding:7px 12px;
180
+ border:1px solid var(--line);border-radius:6px;background:var(--bg-2);color:var(--ink-4);font-size:12.5px;transition:border-color .12s,color .12s;}
181
+ .tb-omni:hover{border-color:var(--line-strong);color:var(--ink-3);}
182
+ .tb-omni .omni-ic{display:flex;width:13px;height:13px;}
183
+ .tb-omni .omni-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
184
+ .tb-omni .omni-k{margin-left:auto;font-family:var(--mono);font-size:10px;border:1px solid var(--line);border-radius:3px;padding:1px 5px;flex:0 0 auto;}
185
+
186
+ .tb-right{grid-column:3;justify-self:end;display:flex;align-items:center;gap:12px;min-width:0;}
187
+ .tb-actions{display:flex;align-items:center;gap:4px;}
188
+ .tb-btn{display:flex;align-items:center;gap:6px;height:30px;padding:0 10px;border-radius:var(--r-sm);color:var(--ink-3);font-size:12px;font-weight:600;border:1px solid transparent;}
189
+ .tb-btn:hover:not(:disabled){background:var(--panel);color:var(--ink);border-color:var(--line);}
190
+ .tb-btn:disabled{opacity:.4;cursor:default;}
191
+ .tb-btn.on{color:var(--accent);border-color:var(--accent-soft);background:var(--accent-soft);}
192
+ .tb-icon{display:grid;place-items:center;width:30px;height:30px;border-radius:var(--r-sm);color:var(--ink-3);border:1px solid transparent;}
193
+ .tb-icon:hover{background:var(--panel);color:var(--ink);border-color:var(--line);}
194
+ .tb-icon.on{color:var(--accent);border-color:var(--accent-soft);background:var(--accent-soft);}
195
+ .tb-avatar{width:28px;height:28px;border-radius:50%;background:var(--accent);display:grid;place-items:center;font-size:11px;font-weight:700;color:var(--on-accent);flex:0 0 auto;}
196
+
197
+ /* Instance-wide "an agent's login expired" strip, between the titlebar and the
198
+ workspace. Not dismissible on purpose: no session can run until it's fixed. */
199
+ .auth-banner{flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:9px 16px;font-size:12.5px;color:var(--red);background:var(--red-soft);border-bottom:1px solid var(--red);z-index:29;}
200
+ .auth-banner .ab-ic{display:grid;place-items:center;flex:0 0 auto;}
201
+ .auth-banner .ab-msg{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
202
+ .auth-banner .ab-msg b{font-weight:700;}
203
+ .auth-banner .ab-why{margin-left:8px;font-family:var(--mono);font-size:11px;opacity:.75;}
204
+ .auth-banner .ab-spacer{flex:1;}
205
+ .auth-banner .btn{flex:0 0 auto;}
206
+
207
+ .body{flex:1;display:flex;min-height:0;}
208
+
209
+ /* ============================== columns ============================== */
210
+ .col{display:flex;flex-direction:column;min-height:0;background:var(--panel);}
211
+ /* min-width:0 lets these flex items shrink below their content's min-content
212
+ size — without it the inline flex-basis from a resize drag is floored at the
213
+ panel content width, so the panels could grow but never narrow. */
214
+ .col-projects{flex:0 0 var(--col-proj);min-width:0;border-right:1px solid var(--line);background:var(--panel-2);}
215
+ .col-tasks{flex:0 0 var(--col-task);min-width:0;border-right:1px solid var(--line);}
216
+ .col-session{flex:1;min-width:0;background:var(--surface);}
217
+
218
+ /* Welcome tutorial coach banner (seeded project only) */
219
+ .wcoach{flex:0 0 auto;margin:10px 12px 0;padding:12px 14px;border:1px solid var(--accent-soft);border-left:3px solid var(--accent);border-radius:var(--r);background:var(--accent-soft);}
220
+ .wcoach-head{display:flex;align-items:center;gap:8px;}
221
+ .wcoach-ic{display:inline-flex;color:var(--accent);}
222
+ .wcoach-title{flex:1;font-weight:650;font-size:13.5px;color:var(--ink);}
223
+ .wcoach-x{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:none;background:transparent;color:var(--ink-4);border-radius:6px;cursor:pointer;}
224
+ .wcoach-x:hover{background:var(--line);color:var(--ink-2);}
225
+ .wcoach-sub{margin:6px 0 0;font-size:12.5px;line-height:1.5;color:var(--ink-2);}
226
+ .wcoach-steps{display:flex;gap:14px;margin-top:11px;flex-wrap:wrap;}
227
+ .wcoach-step{display:flex;gap:8px;align-items:flex-start;flex:1 1 150px;min-width:140px;}
228
+ .wcoach-num{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:19px;height:19px;border-radius:50%;background:var(--accent);color:#fff;font-size:11px;font-weight:700;margin-top:1px;}
229
+ .wcoach-step-t{font-size:12.5px;font-weight:650;color:var(--ink);}
230
+ .wcoach-step-b{font-size:11.5px;line-height:1.45;color:var(--ink-3);margin-top:1px;}
231
+
232
+ /* drag handle between columns — a zero-width seam whose grab bar is an absolutely
233
+ positioned 10px overlay straddling the border, lifted above both neighbors so
234
+ nothing swallows the drag; shows an accent guide on hover/drag */
235
+ .col-resize{flex:0 0 0;align-self:stretch;position:relative;z-index:7;}
236
+ .col-resize-bar{position:absolute;top:0;bottom:0;left:-5px;width:10px;display:block;cursor:col-resize;}
237
+ .col-resize-bar::before{content:"";position:absolute;top:0;bottom:0;left:4px;width:2px;background:transparent;transition:background .12s;}
238
+ .col-resize-bar:hover::before,.col-resize-bar:active::before{background:var(--accent);}
239
+
240
+ /* collapsed-panel rail — slim, clickable spine that restores the hidden panel */
241
+ .col-rail{flex:0 0 30px;display:flex;flex-direction:column;align-items:center;gap:12px;padding-top:14px;
242
+ background:var(--panel-2);border-right:1px solid var(--line);color:var(--ink-3);transition:background .12s,color .12s;}
243
+ .col-rail.rail-task{background:var(--panel);}
244
+ .col-rail.rail-right{border-right:none;border-left:1px solid var(--line);}
245
+ .col-rail.rail-right svg{transform:rotate(180deg);} /* chevron points left → panel opens leftward */
246
+ .col-rail:hover{background:var(--panel);color:var(--ink);}
247
+ .col-rail svg{width:16px;height:16px;}
248
+ .rail-label{writing-mode:vertical-rl;font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;}
249
+
250
+ .col-head{
251
+ flex:0 0 auto;display:flex;align-items:center;gap:8px;height:52px;padding:0 14px 0 16px;
252
+ border-bottom:1px solid var(--line);
253
+ }
254
+ .col-head .ch-title{font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);}
255
+ .col-head .spacer{flex:1;}
256
+
257
+ .icon-btn{
258
+ width:28px;height:28px;border-radius:var(--r-sm);display:grid;place-items:center;color:var(--ink-2);
259
+ }
260
+ .icon-btn:hover{background:var(--panel);color:var(--ink);}
261
+ .col-tasks .icon-btn:hover,.col-session .icon-btn:hover{background:var(--surface-2);}
262
+ .icon-btn svg{width:16px;height:16px;}
263
+
264
+ /* ----------------------------- search ----------------------------- */
265
+ .search-bar{
266
+ flex:0 0 auto;display:flex;align-items:center;gap:7px;margin:8px 10px 2px;padding:0 9px;height:32px;
267
+ border-radius:var(--r);background:var(--surface-2);border:1px solid var(--line-2);transition:border-color .12s;
268
+ }
269
+ .search-bar:focus-within{border-color:var(--accent);}
270
+ .search-bar .search-ic{display:grid;place-items:center;color:var(--ink-4);flex:0 0 auto;}
271
+ .search-bar .search-ic svg{width:14px;height:14px;}
272
+ .search-input{flex:1;min-width:0;border:none;background:transparent;outline:none;color:var(--ink);font-size:12.5px;}
273
+ .search-input::placeholder{color:var(--ink-4);}
274
+ .search-clear{flex:0 0 auto;display:grid;place-items:center;width:18px;height:18px;border-radius:5px;color:var(--ink-4);cursor:pointer;}
275
+ .search-clear:hover{background:var(--panel);color:var(--ink-2);}
276
+ .search-clear svg{width:13px;height:13px;}
277
+ .search-empty{padding:18px 14px;text-align:center;font-size:12px;color:var(--ink-4);}
278
+
279
+ .scroll{flex:1;overflow-y:auto;overflow-x:hidden;}
280
+
281
+ /* ----------------------------- projects ----------------------------- */
282
+ .proj-list{padding:8px;display:flex;flex-direction:column;gap:2px;}
283
+ .proj{
284
+ display:flex;align-items:center;gap:10px;padding:calc(8px*var(--density)) 9px;border-radius:var(--r);
285
+ cursor:pointer;position:relative;transition:background .12s;width:100%;text-align:left;
286
+ }
287
+ .proj:hover{background:var(--panel);}
288
+ .proj.dragging{opacity:.4;}
289
+ .proj.drag-over{box-shadow:inset 0 2px 0 var(--accent);}
290
+ .proj.sel{background:var(--selection-bg);box-shadow:inset 0 0 0 1px var(--selection-line);}
291
+ .proj.sel::before{content:"";position:absolute;left:-8px;top:50%;transform:translateY(-50%);width:3px;height:20px;border-radius:3px;background:var(--accent);}
292
+ .proj .pic{
293
+ width:30px;height:30px;flex:0 0 auto;border-radius:9px;display:grid;place-items:center;position:relative;
294
+ font-family:var(--mono);font-weight:700;font-size:13px;color:#fff;letter-spacing:-.02em;
295
+ }
296
+ .proj .pmeta{flex:1;min-width:0;}
297
+ .proj .pname{font-weight:650;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:-.01em;}
298
+ .proj .psub{font-family:var(--mono);font-size:10px;color:var(--ink-3);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
299
+ .proj .pcount{display:flex;align-items:center;gap:3px;flex-shrink:0;font-family:var(--mono);font-size:10px;color:var(--ink-3);white-space:nowrap;}
300
+ .proj .pdot{width:7px;height:7px;border-radius:50%;}
301
+
302
+ /* deprecated area — set-aside projects, collapsed by default at the list's foot */
303
+ .dep-area{margin-top:8px;padding-top:6px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:2px;}
304
+ .dep-head{display:flex;align-items:center;gap:7px;padding:6px 9px;border-radius:var(--r);width:100%;text-align:left;cursor:pointer;color:var(--ink-3);font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;}
305
+ .dep-head:hover{background:var(--panel);color:var(--ink-2);}
306
+ .dep-head svg{width:13px;height:13px;}
307
+ .dep-chev{display:grid;place-items:center;transition:transform .12s;}
308
+ .dep-chev.open{transform:rotate(90deg);}
309
+ .dep-title{flex:1;}
310
+ .dep-count{color:var(--ink-4);}
311
+ .proj.dep{cursor:default;opacity:.62;}
312
+ .proj.dep:hover{background:var(--panel);opacity:1;}
313
+ .proj.dep .pic{filter:grayscale(.5);}
314
+
315
+ .proj-foot{flex:0 0 auto;border-top:1px solid var(--line);padding:8px;display:flex;flex-direction:column;gap:2px;}
316
+ .nav-item{display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:var(--r);width:100%;text-align:left;color:var(--ink-2);font-size:13px;font-weight:600;cursor:pointer;transition:background .12s,color .12s;}
317
+ .nav-item svg{width:16px;height:16px;color:var(--ink-3);}
318
+ .nav-item:hover{background:var(--panel);color:var(--ink);}
319
+ .nav-item:hover svg{color:var(--ink-2);}
320
+ .nav-item.active{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);}
321
+ .nav-item.active svg{color:var(--accent);}
322
+ .user-chip{display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:var(--r);width:100%;text-align:left;}
323
+
324
+ /* settings view — replaces the tasks+session work area */
325
+ .settings-nav{flex:0 0 220px;min-width:0;border-right:1px solid var(--line);background:var(--panel-2);padding:10px;gap:2px;}
326
+ .settings-nav-h{padding:6px 9px 10px;font-size:15px;font-weight:700;color:var(--ink);}
327
+ .settings-nav-list{display:flex;flex-direction:column;gap:2px;flex:1;min-height:0;overflow-y:auto;}
328
+ .settings-nav-foot{padding:10px 9px 4px;border-top:1px solid var(--line);font-family:var(--mono);font-size:10px;color:var(--ink-3);}
329
+ .settings-head{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:14px 20px 12px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,var(--surface) 0%, var(--panel) 100%);}
330
+ .settings-title{font-size:16px;font-weight:700;color:var(--ink);}
331
+ .settings-body{padding:20px;max-width:680px;border:0;margin:0;min-width:0;width:100%;}
332
+ .settings-body code{font-family:var(--mono);font-size:12px;background:var(--surface-2);padding:1px 5px;border-radius:5px;}
333
+ .user-chip .av{width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,#C2603C,#D89A3A);display:grid;place-items:center;color:#fff;font-weight:700;font-size:12px;}
334
+ .user-chip .un{font-weight:600;font-size:13px;}
335
+ .user-chip .ue{font-family:var(--mono);font-size:10px;color:var(--ink-3);}
336
+
337
+ /* ----------------------------- tasks ----------------------------- */
338
+ .proj-banner{
339
+ flex:0 0 auto;padding:14px 16px 12px;border-bottom:1px solid var(--line);
340
+ background:linear-gradient(180deg,var(--surface) 0%, var(--panel) 100%);
341
+ }
342
+ .pb-row{display:flex;align-items:center;gap:6px;}
343
+ .pb-home{display:flex;align-items:center;gap:10px;flex:1;min-width:0;text-align:left;border-radius:var(--r-sm);padding:3px;margin:-3px;cursor:pointer;}
344
+ .pb-home:hover{background:var(--surface-2);}
345
+ .pb-pic{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;font-family:var(--mono);font-weight:700;font-size:15px;color:#fff;flex:0 0 auto;}
346
+ .pb-name{font-size:17px;font-weight:700;letter-spacing:-.02em;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
347
+ .pb-ctx{
348
+ margin-top:10px;display:flex;align-items:flex-start;gap:8px;padding:9px 11px;border-radius:var(--r);
349
+ background:var(--surface-2);border:1px solid var(--line-2);cursor:pointer;transition:border-color .12s;width:100%;text-align:left;
350
+ }
351
+ .pb-ctx:hover{border-color:var(--accent);}
352
+ .pb-ctx .ctx-txt{flex:1;min-width:0;font-size:11.5px;color:var(--ink-2);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
353
+ .pb-ctx .ctx-txt.empty-ctx{color:var(--ink-4);font-style:italic;}
354
+ .pb-ctx .ctx-edit{font-family:var(--mono);font-size:9.5px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em;flex:0 0 auto;display:flex;align-items:center;gap:4px;}
355
+
356
+ .task-scroll{padding:10px 10px 4px;}
357
+ .task-group-h{display:flex;align-items:center;gap:7px;padding:10px 6px 7px;font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);}
358
+ .task-group-h .gcount{color:var(--ink-4);}
359
+ .task-group-h .gline{flex:1;height:1px;background:var(--line);}
360
+ .task-group-h.tgh-btn{width:100%;background:none;border:0;cursor:pointer;text-align:left;transition:color .12s;}
361
+ .task-group-h.tgh-btn:hover{color:var(--ink-2);}
362
+ .task-group-h .tgh-chev{transition:transform .15s;color:var(--ink-4);font-size:13px;margin-left:-2px;}
363
+ .task-group-h.is-collapsed .tgh-chev{transform:rotate(-90deg);}
364
+
365
+ .task{
366
+ position:relative;display:block;width:100%;text-align:left;padding:calc(11px*var(--density)) 13px;
367
+ border-radius:var(--r-lg);background:var(--surface);border:1px solid var(--line-2);
368
+ box-shadow:var(--sh-1);margin-bottom:8px;cursor:pointer;transition:transform .1s, box-shadow .12s, border-color .12s;
369
+ }
370
+ .task:hover{box-shadow:var(--sh-2);border-color:var(--line-strong);}
371
+ .task.sel{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent), var(--sh-2);}
372
+ .task-top{display:flex;align-items:center;gap:9px;}
373
+ .task .ttitle{flex:1;min-width:0;font-weight:650;font-size:13.5px;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
374
+ .task .tdesc{font-size:12px;color:var(--ink-2);margin-top:5px;line-height:1.42;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
375
+ .task-foot{display:flex;align-items:center;gap:8px;margin-top:9px;}
376
+ .task-foot .activity{font-family:var(--mono);font-size:10px;color:var(--ink-3);display:flex;align-items:center;gap:5px;}
377
+ .task-foot .spacer{flex:1;}
378
+
379
+ /* task dependencies (ordering) -------------------------------------- */
380
+ /* "blocked by" chip on a task card */
381
+ .blocked-chip{display:inline-flex;align-items:center;gap:5px;margin-top:7px;padding:2px 8px;border-radius:999px;font-size:10.5px;font-weight:600;color:var(--amber);background:var(--amber-soft);border:1px solid var(--amber);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
382
+ .blocked-chip svg{flex:0 0 auto;}
383
+ /* "queued to auto-start" — blocked, but armed to launch itself (blue, not amber) */
384
+ .blocked-chip.auto{color:var(--blue);background:var(--blue-soft);border-color:var(--blue);}
385
+ /* hero banner shown above a blocked task's disabled Start button */
386
+ .hero-blocked{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding:9px 12px;border-radius:var(--r);font-size:12.5px;color:var(--amber);background:var(--amber-soft);border:1px solid var(--amber);}
387
+ .hero-blocked svg{flex:0 0 auto;}
388
+ .hero-blocked.auto{color:var(--blue);background:var(--blue-soft);border-color:var(--blue);}
389
+ /* dependency picker (modals) */
390
+ .dep-list{display:flex;flex-direction:column;border:1px solid var(--line-strong);border-radius:var(--r);background:var(--raise);max-height:200px;overflow-y:auto;}
391
+ .dep-row{display:flex;align-items:center;gap:9px;padding:8px 11px;border-bottom:1px solid var(--line);font-size:13px;color:var(--ink);cursor:pointer;}
392
+ .dep-row:last-child{border-bottom:none;}
393
+ .dep-row:hover{background:var(--line);}
394
+ .dep-row.on{background:var(--accent-soft,var(--line));}
395
+ .dep-row input{flex:0 0 auto;}
396
+ .dep-row .dep-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
397
+ .dep-row .dep-status{font-family:var(--mono);font-size:10px;color:var(--ink-3);flex:0 0 auto;}
398
+ /* the "Start when unblocked" opt-in shown under the dep list once blockers are picked */
399
+ .dep-autostart{display:flex;align-items:center;gap:8px;margin-top:8px;font-size:12.5px;color:var(--ink-2);cursor:pointer;}
400
+ .dep-autostart input{flex:0 0 auto;}
401
+
402
+ /* status dot */
403
+ .sdot{width:9px;height:9px;border-radius:50%;flex:0 0 auto;position:relative;display:inline-block;}
404
+ .sdot.r{background:var(--ink-4);} /* not started — idle/neutral */
405
+ .sdot.a{background:var(--amber);box-shadow:0 0 7px var(--amber);} /* in progress (paused) */
406
+ .sdot.g{background:var(--green);box-shadow:var(--glow-green);} /* done / merged */
407
+ .sdot.h{background:#8b7fd6;box-shadow:0 0 7px rgba(139,127,214,.55);} /* on hold — paused */
408
+ .sdot.x{background:transparent;border:1.5px solid var(--ink-4);box-sizing:border-box;} /* cancelled — hollow */
409
+ .sdot.b{background:var(--blue);box-shadow:var(--glow-blue);} /* live / working */
410
+ .sdot.c{background:var(--coral);box-shadow:var(--glow-coral);} /* needs you */
411
+ .sdot.lg{width:12px;height:12px;}
412
+ .sdot.pulse::after{content:"";position:absolute;inset:0;border-radius:50%;background:inherit;box-shadow:none;animation:ping 1.6s cubic-bezier(0,0,.2,1) infinite;}
413
+ @keyframes ping{0%{transform:scale(1);opacity:.55;}80%,100%{transform:scale(2.4);opacity:0;}}
414
+
415
+ /* "needs your input" surfacing ---------------------------------------- */
416
+ /* per-task: blue label + a soft left rail so awaiting cards stand out */
417
+ .slabel.await{color:var(--blue);font-weight:600;}
418
+ .task.awaiting{box-shadow:inset 2px 0 0 var(--blue);background:linear-gradient(90deg,var(--blue-soft),transparent 40%);}
419
+ .status-ctl.awaiting .cv{color:var(--blue);font-weight:600;}
420
+ /* tasks-column group header */
421
+ .task-group-h.needs-you{color:var(--blue);}
422
+ .task-group-h.needs-you .gcount{background:var(--blue-soft);color:var(--blue);}
423
+
424
+ /* board (kanban) view -------------------------------------------------- */
425
+ /* Layout ported from the Claude Design "Operator — Board View" study,
426
+ rendered entirely with the app's own tokens. */
427
+ /* icon-only list/board toggle in the tasks-column (list mode) header */
428
+ .view-toggle{display:flex;align-items:center;border:1px solid var(--line-2);border-radius:var(--r);overflow:hidden;flex:0 0 auto;}
429
+ .view-toggle button{display:flex;align-items:center;justify-content:center;width:27px;height:24px;background:none;border:0;color:var(--ink-3);cursor:pointer;font-size:13px;transition:color .12s,background .12s;}
430
+ .view-toggle button:hover{color:var(--ink);}
431
+ .view-toggle button.on{background:var(--selection-bg);color:var(--accent-ink);}
432
+
433
+ /* full-workspace shell: board mode owns everything right of the sidebar */
434
+ .board-ws{flex:1;min-width:0;background:var(--surface-2);position:relative;overflow:hidden;}
435
+ .bws-h{flex:0 0 auto;min-height:54px;display:flex;align-items:center;gap:10px;padding:0 16px;border-bottom:1px solid var(--line);background:var(--panel);}
436
+ .bws-pic{width:26px;height:26px;border-radius:8px;color:#fff;font-weight:700;font-size:12px;display:grid;place-items:center;flex:0 0 auto;}
437
+ .bws-name{margin:0;font-size:15px;font-weight:650;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
438
+ .bws-count{font-family:var(--mono);font-size:9.5px;color:var(--ink-3);border:1px solid var(--line);border-radius:999px;padding:3px 8px;white-space:nowrap;}
439
+ .bws-h .spacer{flex:1;}
440
+ .bws-search{width:240px;flex:0 1 auto;}
441
+ .bws-search .search-bar{margin:0;height:28px;}
442
+ /* labeled list/board segmented toggle (workspace header) */
443
+ .bseg{display:flex;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:2px;gap:2px;flex:0 0 auto;}
444
+ .bseg button{border:0;background:none;font-family:var(--mono);font-size:9.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-4);padding:5px 11px;border-radius:5px;display:flex;align-items:center;gap:6px;cursor:pointer;transition:color .12s;}
445
+ .bseg button:hover{color:var(--ink-2);}
446
+ .bseg button.on{background:var(--raise);color:var(--ink);box-shadow:var(--sh-1);}
447
+ .bseg button svg{width:11px;height:11px;}
448
+
449
+ /* the board scrolls horizontally; each column scrolls vertically */
450
+ .board-wrap{flex:1;min-height:0;display:flex;flex-direction:column;}
451
+ .board{flex:1;min-height:0;display:flex;gap:10px;align-items:stretch;overflow-x:auto;overflow-y:hidden;padding:14px 14px 0;}
452
+ /* columns share the workspace width (grow evenly, capped so cards keep a card
453
+ shape); past the cap — or with many columns — the board scrolls sideways */
454
+ .bcol{flex:1 1 218px;min-width:218px;max-width:340px;display:flex;flex-direction:column;min-height:0;border-radius:var(--r-lg);position:relative;transition:background .15s;}
455
+ /* the Suggested column IS the list's suggestion tray, turned into a column:
456
+ same dashed accent shell, wash, and spark header */
457
+ .bcol.k-suggested{border:1px dashed var(--accent);background:var(--accent-soft);padding:0 4px;}
458
+ .bcol.k-suggested .bcol-h .cn{color:var(--accent-ink);display:flex;align-items:center;gap:6px;}
459
+ [data-theme="dark"] .bcol.k-suggested .bcol-h .cn{color:#D98C6A;}
460
+ .bcol.k-suggested .bcol-h .cn svg{width:11px;height:11px;}
461
+ .bcol.k-suggested .bcol-rule{background:transparent;}
462
+ .bcol-h{flex:0 0 auto;height:30px;display:flex;align-items:center;gap:8px;padding:0 6px;}
463
+ .bcol-h .cn{font-family:var(--mono);font-size:9.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);white-space:nowrap;}
464
+ .bcol-h .ct{font-family:var(--mono);font-size:9.5px;font-weight:700;color:var(--ink-4);background:var(--raise);border:1px solid var(--line-2);border-radius:999px;min-width:20px;text-align:center;padding:2px 5px;}
465
+ .bcol-h .cn.needs-you{color:var(--blue);}
466
+ .bcol-h .ct.needs-you{color:var(--blue);border-color:var(--blue-soft);}
467
+ .bcol-h .sp{flex:1;}
468
+ .bcol-h .derived{font-family:var(--mono);font-size:8px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-4);border:1px solid var(--line);border-radius:4px;padding:2px 4px;}
469
+ /* per-column status rule under the header — solid, in the same colors the
470
+ status dots use, so columns read as the list's groups turned sideways */
471
+ .bcol-rule{flex:0 0 auto;height:2px;border-radius:2px;background:var(--line);margin:0 4px 9px;}
472
+ .bcol.k-awaiting .bcol-rule{background:linear-gradient(90deg,var(--blue),var(--blue-soft));}
473
+ .bcol.k-in_progress .bcol-rule{background:linear-gradient(90deg,var(--amber),var(--amber-soft));}
474
+ .bcol.k-on_hold .bcol-rule{background:linear-gradient(90deg,#8b7fd6,transparent);}
475
+ .bcol.k-done .bcol-rule{background:linear-gradient(90deg,var(--green),var(--green-soft));}
476
+ .bcol-body{flex:1;min-height:60px;overflow-y:auto;padding:0 4px 18px;display:flex;flex-direction:column;gap:8px;}
477
+ .b-slot{display:flex;flex-direction:column;gap:8px;flex:0 0 auto;}
478
+ .bcol-empty{padding:16px 6px;text-align:center;font-family:var(--mono);font-size:10px;color:var(--ink-4);text-transform:uppercase;letter-spacing:.06em;}
479
+
480
+ /* drag states */
481
+ .bcol.drag-over{background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent);}
482
+ .bcol.drag-over .bcol-h .cn{color:var(--accent);}
483
+ .bcol.reject .bcol-body{opacity:.38;}
484
+ .bcol.reject::after{content:"";position:absolute;inset:40px 0 14px;border-radius:var(--r);background:repeating-linear-gradient(135deg,var(--coral-soft) 0 7px,transparent 7px 14px);box-shadow:inset 0 0 0 1px var(--coral-soft);pointer-events:none;opacity:.45;}
485
+ .b-nodrop{position:absolute;top:45%;left:50%;transform:translate(-50%,-50%);z-index:3;display:flex;flex-direction:column;align-items:center;gap:7px;font-family:var(--mono);font-size:9px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--coral);background:var(--raise);border:1px solid var(--coral);border-radius:var(--r);padding:11px 13px;text-align:center;width:186px;box-shadow:var(--sh-2);pointer-events:none;}
486
+ .b-nodrop small{font-family:var(--sans);font-size:10.5px;letter-spacing:0;text-transform:none;color:var(--ink-3);font-weight:400;line-height:1.4;}
487
+ .b-nodrop .x{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--coral);display:grid;place-items:center;}
488
+ .b-nodrop .x svg{width:11px;height:11px;}
489
+ .b-dropline{flex:0 0 auto;height:2px;border-radius:2px;background:var(--accent);box-shadow:var(--glow-blue);position:relative;margin:1px 2px;pointer-events:none;}
490
+ .b-dropline::before,.b-dropline::after{content:"";position:absolute;top:-2.5px;width:7px;height:7px;border-radius:50%;background:var(--accent);}
491
+ .b-dropline::before{left:-3px;}
492
+ .b-dropline::after{right:-3px;}
493
+ .b-emptydrop{flex:1;border:1px dashed var(--accent);border-radius:var(--r-lg);background:var(--accent-soft);display:grid;place-items:center;font-family:var(--mono);font-size:9px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);min-height:110px;pointer-events:none;}
494
+
495
+ /* card */
496
+ .bcard{position:relative;background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-lg);padding:10px 11px;box-shadow:var(--sh-1);flex:0 0 auto;cursor:pointer;transition:border-color .12s,background .12s,opacity .12s;}
497
+ .bcard:hover{border-color:var(--line-strong);background:var(--raise);}
498
+ .bcard.sel{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),var(--sh-1);}
499
+ .bc-top{display:flex;align-items:flex-start;gap:8px;}
500
+ .bc-top .sdot{margin-top:4px;}
501
+ .bc-title{flex:1;min-width:0;margin:0;font-size:12.5px;font-weight:550;line-height:1.35;letter-spacing:-.005em;color:var(--ink);}
502
+ .bc-meta{display:flex;align-items:center;gap:7px;margin-top:8px;flex-wrap:wrap;}
503
+ .bc-act{font-family:var(--mono);font-size:9.5px;color:var(--ink-4);letter-spacing:.02em;display:flex;align-items:center;gap:5px;}
504
+ .bc-act.on{color:var(--amber);}
505
+ .bc-act.need{color:var(--blue);}
506
+ /* indeterminate "working" scanner under a live card's meta row */
507
+ .bc-bar{height:2px;border-radius:2px;background:var(--line-2);margin-top:9px;overflow:hidden;}
508
+ .bc-bar i{display:block;height:100%;width:40%;border-radius:2px;background:linear-gradient(90deg,var(--amber),var(--blue));animation:bscan 2.2s ease-in-out infinite;}
509
+ @keyframes bscan{0%{margin-left:-40%;}100%{margin-left:100%;}}
510
+ .bc-foot{display:flex;align-items:center;gap:8px;margin-top:9px;padding-top:8px;border-top:1px solid var(--line-2);}
511
+ .bc-foot .sp{flex:1;}
512
+ .bc-chip{font-family:var(--mono);font-size:9px;letter-spacing:.04em;color:var(--ink-3);border:1px solid var(--line);border-radius:5px;padding:2.5px 6px;display:flex;align-items:center;gap:5px;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
513
+ .bc-chip.block{color:var(--amber);border-color:var(--amber);background:var(--amber-soft);}
514
+ .bc-chip.autostart{color:var(--blue);border-color:var(--blue);background:var(--blue-soft);}
515
+ .bc-chip svg{width:10px;height:10px;flex:0 0 auto;}
516
+ .bc-sess{font-family:var(--mono);font-size:9px;color:var(--ink-4);display:flex;align-items:center;gap:4px;}
517
+ .bc-sess svg{width:10px;height:10px;}
518
+ /* signal language: waiting card = blue rail + wash; working card = amber rail */
519
+ .bcard.needs{background:linear-gradient(90deg,var(--blue-soft),transparent 55%),var(--surface);border-color:var(--blue);}
520
+ .bcard.needs::before{content:"";position:absolute;left:-1px;top:8px;bottom:8px;width:2.5px;border-radius:3px;background:var(--blue);box-shadow:var(--glow-blue);animation:brail 1.8s ease-in-out infinite;}
521
+ @keyframes brail{0%,100%{opacity:1;}50%{opacity:.35;}}
522
+ .bcard.working{border-color:var(--amber);}
523
+ .bcard.working::before{content:"";position:absolute;left:-1px;top:8px;bottom:8px;width:2.5px;border-radius:3px;background:linear-gradient(180deg,var(--amber),var(--blue));opacity:.9;}
524
+ /* suggested cards look like every other card (the column header carries the
525
+ "proposed by an agent" framing); they just add the quick-action row */
526
+ .bsug-acts{display:flex;gap:6px;margin-top:9px;}
527
+ .bsug-acts button{flex:1;font-family:var(--mono);font-size:8.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:5px 0;border-radius:5px;border:1px solid var(--line);background:transparent;color:var(--ink-3);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:4px;}
528
+ .bsug-acts button:hover{color:var(--ink);border-color:var(--line-strong);}
529
+ .bsug-acts button.go{background:var(--blue-soft);border-color:var(--blue);color:var(--blue);}
530
+ .bsug-acts button.no{flex:0 0 30px;color:var(--ink-4);}
531
+ .bsug-acts button svg{width:10px;height:10px;}
532
+ /* terminal columns: compact rows, day dividers, veil past the cap */
533
+ .bcard.mini{padding:8px 10px;}
534
+ .bcard.mini .bc-top{align-items:center;}
535
+ .bcard.mini .bc-top .sdot{margin-top:0;}
536
+ .bcard.mini .bc-title{font-size:12px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
537
+ .bcard.mini .bc-meta{margin-top:5px;}
538
+ .b-day{font-family:var(--mono);font-size:8.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-4);display:flex;align-items:center;gap:7px;padding:3px 2px;}
539
+ .b-day i{flex:1;height:1px;background:var(--line-2);}
540
+ .b-showall{margin:2px 2px 0;border:1px dashed var(--line);border-radius:var(--r);padding:9px;text-align:center;font-family:var(--mono);font-size:9px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);background:var(--surface-2);cursor:pointer;flex:0 0 auto;}
541
+ .b-showall:hover{color:var(--ink);border-color:var(--line-strong);}
542
+ .bcard.dragging{opacity:.45;border-style:dashed;}
543
+ /* board-mode loading skeleton */
544
+ .board-loading .skel{height:10px;}
545
+
546
+ /* slide-over session panel (click a card → session over a dimmed board) */
547
+ .bpanel-scrim{position:absolute;inset:0;background:rgba(4,6,10,.45);z-index:5;}
548
+ .bpanel{position:absolute;top:0;right:0;bottom:0;width:min(900px,88%);z-index:6;background:var(--surface);border-left:1px solid var(--line-strong);box-shadow:var(--sh-3);display:flex;flex-direction:column;animation:bslide .18s ease-out;}
549
+ @keyframes bslide{from{transform:translateX(26px);opacity:.4;}to{transform:none;opacity:1;}}
550
+ .bpanel-bar{flex:0 0 auto;height:36px;display:flex;align-items:center;gap:6px;padding:0 10px;border-bottom:1px solid var(--line);background:var(--panel);}
551
+ .bpanel-bar .bp-hint{font-family:var(--mono);font-size:9px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-4);}
552
+ .bpanel-bar .spacer{flex:1;}
553
+ .bpanel .session-body{flex:1;min-height:0;display:flex;}
554
+ .app.mobile .bcol{flex:0 0 min(78vw,260px);}
555
+ /* toolbar pill — the cross-project count */
556
+ .needs-you-pill{display:inline-flex;align-items:center;gap:8px;height:28px;padding:0 11px;border-radius:999px;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;font-weight:500;color:var(--coral);background:var(--coral-soft);border:1px solid var(--coral-soft);cursor:pointer;transition:filter .12s;}
557
+ .needs-you-pill:hover{filter:brightness(1.12);}
558
+ .needs-you-pill .ny-dot{width:7px;height:7px;border-radius:50%;background:var(--coral);box-shadow:var(--glow-coral);position:relative;}
559
+ .needs-you-pill .ny-dot::after{content:"";position:absolute;inset:-4px;border-radius:50%;border:1px solid var(--coral);animation:ping 2s ease-out infinite;}
560
+ /* "need you" dropdown — list of awaiting tasks across all projects */
561
+ .ny-menu{max-width:340px;max-height:min(60vh,420px);overflow-y:auto;}
562
+ .ny-empty{padding:14px 14px 16px;font-size:12.5px;color:var(--ink-3);}
563
+ .ny-row{display:flex;align-items:center;gap:10px;width:100%;padding:9px 13px;border:0;background:none;text-align:left;cursor:pointer;}
564
+ .ny-row:hover{background:var(--surface-2);}
565
+ .ny-row .ny-proj{flex:0 0 auto;width:22px;height:22px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:700;}
566
+ .ny-row .ny-text{display:flex;flex-direction:column;gap:1px;min-width:0;}
567
+ .ny-row .ny-title{font-size:13px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
568
+ .ny-row .ny-sub{font-size:11px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
569
+ /* sidebar per-project badge, pinned to the project glyph */
570
+ .proj-await{position:absolute;top:-5px;right:-5px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:var(--blue);color:#fff;font-size:10px;font-weight:700;line-height:16px;text-align:center;box-shadow:0 0 0 2px var(--surface);}
571
+
572
+ /* priority pill */
573
+ .pri{font-family:var(--mono);font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;padding:2px 6px;border-radius:5px;flex:0 0 auto;line-height:1.35;}
574
+ .pri.hi{background:var(--red-soft);color:#A23E2A;}
575
+ .pri.med{background:var(--amber-soft);color:#9A6E14;}
576
+ .pri.lo{background:var(--surface-2);color:var(--ink-3);border:1px solid var(--line-2);}
577
+ [data-theme="dark"] .pri.hi{color:#E08F78;}
578
+ [data-theme="dark"] .pri.med{color:#DCB458;}
579
+
580
+ /* suggested tray */
581
+ .suggest{margin:6px 10px 12px;border-radius:var(--r-lg);border:1px dashed var(--accent);background:var(--accent-soft);overflow:hidden;}
582
+ .suggest-h{display:flex;align-items:center;gap:7px;padding:10px 13px 8px;font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-ink);}
583
+ [data-theme="dark"] .suggest-h{color:#D98C6A;}
584
+ .suggest-h .sp{margin-left:auto;font-weight:600;}
585
+ .sug{display:flex;align-items:center;gap:7px;padding:9px 13px;border-top:1px solid rgba(194,96,60,.18);}
586
+ .sug .sg-meta{flex:1;min-width:0;}
587
+ .sug .sg-name{font-weight:600;font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
588
+ .sug .sg-why{font-size:10.5px;color:var(--ink-2);margin-top:2px;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;}
589
+ .sug-btn{flex:0 0 auto;display:flex;align-items:center;gap:5px;font-family:var(--mono);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--on-accent);background:var(--accent);padding:5px 9px;border-radius:var(--r-sm);}
590
+ .sug-btn:hover{filter:brightness(1.06);}
591
+ .sug-add{flex:0 0 auto;display:flex;align-items:center;gap:5px;font-family:var(--mono);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--accent-ink);background:transparent;border:1px solid rgba(194,96,60,.4);padding:4px 8px;border-radius:var(--r-sm);}
592
+ .sug-add:hover{background:rgba(194,96,60,.1);}
593
+ .sug-add svg{width:13px;height:13px;}
594
+ .sug-dismiss{flex:0 0 auto;width:22px;height:22px;border-radius:6px;display:grid;place-items:center;color:var(--ink-3);}
595
+ .sug-dismiss:hover{background:rgba(194,96,60,.12);color:var(--accent-ink);}
596
+
597
+ /* empty state */
598
+ .empty{padding:40px 24px;text-align:center;color:var(--ink-3);}
599
+ .empty .e-ic{width:42px;height:42px;margin:0 auto 12px;border-radius:12px;background:var(--surface-2);display:grid;place-items:center;color:var(--ink-4);}
600
+ .empty .e-t{font-weight:650;color:var(--ink-2);font-size:14px;}
601
+ .empty .e-s{font-size:12px;margin-top:5px;line-height:1.5;}
602
+
603
+ /* ============================== session ============================== */
604
+ .session-body{flex:1;min-height:0;display:flex;}
605
+ .session{flex:1;min-height:0;display:flex;flex-direction:column;min-width:0;position:relative;}
606
+ /* Wrapper exists so the nav cluster anchors to the transcript's bottom edge —
607
+ i.e. always just above the composer, however tall the composer grows. */
608
+ .transcript-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;}
609
+ .msg-nav{position:absolute;right:18px;bottom:12px;z-index:5;display:flex;flex-direction:column;gap:6px;}
610
+ .msg-nav-btn{width:34px;height:34px;border-radius:999px;display:grid;place-items:center;background:var(--surface);border:1px solid var(--line);color:var(--ink-2);box-shadow:0 4px 14px rgba(0,0,0,.18);cursor:pointer;transition:transform .12s ease,background .12s ease;}
611
+ .msg-nav-btn:hover{background:var(--surface-2);transform:translateY(-1px);}
612
+ .msg-nav-btn svg{width:16px;height:16px;}
613
+
614
+ /* ===== workspace split: transcript beside the DIFF/PREVIEW/CONTEXT rail ===== */
615
+ /* Track order: transcript · 0px drag seam · DIFF/CONTEXT rail. The rail width is
616
+ driven by an inline gridTemplateColumns from layout state (resizable); the
617
+ --col-rail value here is only the SSR/fallback default. */
618
+ .sess-split{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 0px var(--col-rail);}
619
+ .sess-main{position:relative;min-width:0;min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--line);}
620
+ .sess-rail{min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--bg-2);}
621
+ .rail-tabs{flex:0 0 auto;display:flex;gap:2px;padding:0 14px;border-bottom:1px solid var(--line);}
622
+ .rail-tab{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--ink-4);background:transparent;border:none;border-bottom:2px solid transparent;padding:14px 13px 12px;cursor:pointer;transition:color .12s;}
623
+ .rail-tab.on{color:var(--ink);border-bottom-color:var(--accent);}
624
+ .rail-tab:not(.on):hover{color:var(--ink-2);}
625
+ .rail-collapse{display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:var(--ink-4);cursor:pointer;padding:4px;margin:auto 0;border-radius:6px;transition:color .12s,background .12s;}
626
+ .rail-collapse svg{width:16px;height:16px;}
627
+ .rail-collapse:hover{color:var(--ink);background:var(--panel-2);}
628
+ .rail-scroll{flex:1;min-height:0;display:flex;flex-direction:column;}
629
+ .rail-pad{flex:1;min-height:0;overflow-y:auto;padding:16px;}
630
+ .rail-eyebrow{font-family:var(--mono);font-size:10px;letter-spacing:.14em;color:var(--ink-4);}
631
+
632
+ /* preview tab */
633
+ .prev-frame{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--panel);box-shadow:var(--sh-2);}
634
+ .prev-chrome{display:flex;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid var(--line);background:var(--bg-2);}
635
+ .prev-dots{display:flex;gap:5px;}
636
+ .prev-dots i{width:9px;height:9px;border-radius:50%;opacity:.6;}
637
+ .prev-dots i:nth-child(1){background:var(--coral);}
638
+ .prev-dots i:nth-child(2){background:var(--amber);}
639
+ .prev-dots i:nth-child(3){background:var(--green);}
640
+ .prev-addr{flex:1;min-width:0;display:flex;align-items:center;gap:7px;font-family:var(--mono);font-size:10.5px;color:var(--ink-3);background:var(--code-bg);border-radius:4px;padding:5px 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
641
+ .prev-live{width:6px;height:6px;flex:0 0 auto;border-radius:50%;background:var(--green);box-shadow:var(--glow-green);}
642
+ .prev-body{position:relative;aspect-ratio:4/3;background:var(--bg);}
643
+ .prev-grid{position:absolute;inset:0;background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:22px 22px;}
644
+ .prev-mock{position:absolute;inset:0;padding:18px;display:flex;flex-direction:column;gap:10px;}
645
+ .pm-title{font-size:15px;font-weight:700;color:var(--ink);}
646
+ .pm-bar{height:8px;border-radius:3px;background:var(--line-strong);}
647
+ .pm-bar.w60{width:60%;}
648
+ .pm-bar.w80{width:80%;background:var(--line);}
649
+ .pm-rows{margin-top:6px;display:flex;flex-direction:column;gap:7px;}
650
+ .pm-row{height:34px;border-radius:5px;border:1px solid var(--line);background:var(--panel);}
651
+ .pm-cta{margin-top:auto;align-self:flex-start;font-size:12px;font-weight:600;color:var(--on-accent);background:var(--accent);border-radius:5px;padding:8px 14px;}
652
+ .prev-actions{display:flex;gap:9px;margin-top:14px;}
653
+ .prev-actions .btn{flex:1;justify-content:center;}
654
+ .prev-note{margin-top:14px;font-family:var(--mono);font-size:10.5px;line-height:1.7;color:var(--ink-4);}
655
+
656
+ /* context tab */
657
+ .ctxw-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;}
658
+ .ctxw-pct{font-family:var(--mono);font-size:11px;color:var(--ink-2);}
659
+ .ctxw-meter{height:8px;border-radius:4px;background:var(--line);overflow:hidden;margin-bottom:18px;}
660
+ .ctxw-fill{height:100%;background:var(--accent);box-shadow:var(--glow-blue);transition:width .3s ease;}
661
+ .ctxw-timeline{position:relative;padding-left:22px;}
662
+ .ctxw-timeline::before{content:"";position:absolute;left:6px;top:6px;bottom:10px;width:1px;background:var(--line-strong);}
663
+ .ctxw-node{position:relative;margin-bottom:18px;}
664
+ .ctxw-node:last-child{margin-bottom:0;}
665
+ .ctxw-dot{position:absolute;left:-22px;top:3px;width:13px;height:13px;border-radius:50%;background:var(--bg-2);}
666
+ .ctxw-node.done .ctxw-dot{border:2px solid var(--green);}
667
+ .ctxw-node.current .ctxw-dot{border:2px solid var(--accent);box-shadow:inset 0 0 0 2px var(--bg-2),0 0 0 0 var(--accent);}
668
+ .ctxw-node.current .ctxw-dot::after{content:"";position:absolute;inset:2px;border-radius:50%;background:var(--accent);box-shadow:var(--glow-blue);}
669
+ .ctxw-name{font-size:13.5px;font-weight:600;color:var(--ink);}
670
+ .ctxw-node.done .ctxw-name{color:var(--ink-2);}
671
+ .ctxw-desc{font-family:var(--mono);font-size:11px;color:var(--ink-3);line-height:1.6;margin-top:4px;}
672
+ .ctxw-clear{width:100%;justify-content:center;margin-top:20px;}
673
+ .ctxw-foot{margin-top:12px;font-family:var(--mono);font-size:10px;line-height:1.7;color:var(--ink-4);text-align:center;}
674
+ .sess-head{flex:0 0 auto;display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-height:60px;padding:11px 18px;border-bottom:1px solid var(--line);background:var(--surface);}
675
+ .sess-head .sh-main{min-width:150px;flex:1;}
676
+ .sess-head .crumb{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);display:flex;align-items:center;gap:6px;}
677
+ .sess-head .crumb .sep{opacity:.5;}
678
+ .sess-head .crumb-export{display:inline-flex;align-items:center;gap:4px;height:20px;margin-left:4px;padding:0 7px;border-radius:99px;border:1px solid var(--line-2);font:inherit;font-weight:600;color:var(--ink-3);white-space:nowrap;cursor:pointer;}
679
+ .sess-head .crumb-export:hover{border-color:var(--line-strong);background:var(--surface-2);color:var(--ink);}
680
+ .sess-head .crumb-export svg{width:11px;height:11px;}
681
+ .sess-head .sh-title{font-size:17px;font-weight:700;letter-spacing:-.02em;margin-top:2px;display:flex;align-items:center;gap:4px;min-width:0;}
682
+ .sess-head .sh-title .sht-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
683
+ .sess-head .sh-edit{flex:0 0 auto;width:24px;height:24px;display:grid;place-items:center;border-radius:6px;color:var(--ink-3);}
684
+ .sess-head .sh-edit svg{width:13px;height:13px;}
685
+ .sess-head .sh-tools{display:flex;align-items:center;gap:7px;flex:0 0 auto;}
686
+
687
+ /* clickable link to the GitHub PR opened from this task's branch */
688
+ .pr-chip{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 11px;border-radius:99px;border:1px solid var(--line);background:var(--surface-2);font-size:12px;font-weight:600;color:var(--ink-2);text-decoration:none;white-space:nowrap;flex:0 0 auto;}
689
+ .pr-chip:hover{border-color:var(--line-strong);color:var(--ink);}
690
+ .pr-chip svg{width:13px;height:13px;}
691
+
692
+ /* cumulative token/cost spend for the task */
693
+ .usage-chip{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 11px;border-radius:99px;border:1px solid var(--line);background:var(--surface-2);font-family:var(--mono);font-size:11px;font-weight:600;color:var(--ink-3);white-space:nowrap;flex:0 0 auto;cursor:default;}
694
+ .usage-chip .usage-dot{color:var(--ink-4,var(--ink-3));opacity:.6;}
695
+ /* Cache reads are secondary by design — the headline is fresh tokens. */
696
+ .usage-chip .usage-cached{opacity:.62;font-weight:500;}
697
+ .psub-cost{color:var(--ink-2);}
698
+
699
+ /* status control */
700
+ .status-ctl{display:flex;align-items:center;gap:7px;height:30px;padding:0 11px;border-radius:99px;border:1px solid var(--line);background:var(--surface-2);font-size:12px;font-weight:600;color:var(--ink-2);white-space:nowrap;flex:0 0 auto;}
701
+ .status-ctl:hover{border-color:var(--line-strong);}
702
+ .viewseg{display:inline-flex;align-items:center;gap:2px;border:1px solid var(--line);border-radius:99px;background:var(--surface-2);padding:2px;flex:0 0 auto;}
703
+ .viewseg-btn{height:26px;padding:0 14px;border-radius:99px;font-size:12px;font-weight:600;color:var(--ink-2);background:transparent;border:none;cursor:pointer;white-space:nowrap;transition:background .12s,color .12s;}
704
+ .viewseg-btn.on{background:var(--accent);color:var(--on-accent);}
705
+ .viewseg-btn:not(.on):hover{color:var(--ink);}
706
+
707
+ /* ---- task changes (diff viewer) ---- */
708
+ .tc-root{display:flex;flex-direction:column;flex:1;min-height:0;}
709
+ .tc-note{padding:18px 16px;color:var(--ink-2);font-size:13px;}
710
+ .tc-note.err{color:var(--red);}
711
+ .tc-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:11px 16px;border-bottom:1px solid var(--line);flex:0 0 auto;}
712
+ .tc-branch{font-family:var(--mono);font-size:11.5px;background:var(--panel);border:1px solid var(--line);border-radius:var(--r-sm);padding:2px 7px;color:var(--ink);}
713
+ .tc-arrow{font-size:12px;color:var(--ink-3);}
714
+ .tc-stat{font-family:var(--mono);font-size:12px;}
715
+ .tc-stat .add,.tc-cnt .add{color:var(--green);}
716
+ .tc-stat .del,.tc-cnt .del{color:var(--red);}
717
+ .tc-dirty{font-size:11px;color:var(--amber);}
718
+ .tc-ahead{font-size:11px;color:var(--ink-3);}
719
+ .tc-spacer{flex:1;}
720
+ .tc-btn{font-size:12px;font-weight:600;padding:5px 12px;border-radius:var(--r-sm);border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);cursor:pointer;}
721
+ .tc-btn:hover:not(:disabled){background:var(--surface-2);}
722
+ .tc-btn:disabled{opacity:.5;cursor:default;}
723
+ .tc-btn.primary{border-color:var(--accent);background:var(--accent);color:var(--on-accent);}
724
+ /* the PR link rendered as an <a> in the same toolbar row */
725
+ a.tc-btn{display:inline-flex;align-items:center;text-decoration:none;line-height:1.4;}
726
+ .tc-merged{font-size:12px;font-weight:600;color:var(--green);}
727
+ .tc-merged.faint{color:var(--ink-3);font-weight:500;}
728
+ .tc-mergebar{margin:10px 16px 0;padding:8px 10px;border-radius:var(--r-sm);font-size:12px;}
729
+ .tc-mergebar.ok{background:var(--green-soft);color:var(--green);}
730
+ .tc-mergebar.bad{background:var(--red-soft);color:var(--red);}
731
+ .tc-conflicts{margin-top:4px;font-family:var(--mono);white-space:pre-wrap;}
732
+ .tc-mergebar.review{background:var(--amber-soft);color:var(--amber);}
733
+ .tc-conflict-actions{display:flex;gap:8px;margin-top:8px;}
734
+ .tc-manual{margin-top:8px;padding-top:8px;border-top:1px solid var(--line);color:var(--ink-2);line-height:1.5;}
735
+ .tc-manual code{font-family:var(--mono);background:var(--surface-2);padding:1px 4px;border-radius:3px;}
736
+ .tc-scroll{flex:1;min-height:0;overflow:auto;position:relative;padding-bottom:40px;}
737
+ .tc-list{margin:12px 16px;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;}
738
+ .tc-list-h{padding:7px 12px;font-size:12px;font-weight:700;color:var(--ink-2);background:var(--panel);border-bottom:1px solid var(--line);}
739
+ .tc-frow{display:flex;align-items:center;gap:9px;width:100%;padding:6px 12px;border:none;border-bottom:1px solid var(--line);background:transparent;cursor:pointer;font-family:var(--mono);font-size:12px;text-align:left;color:var(--ink);}
740
+ .tc-frow:last-child{border-bottom:none;}
741
+ .tc-frow:hover{background:var(--surface-2);}
742
+ .tc-frow.on{background:var(--accent-soft);}
743
+ .tc-fpath{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
744
+ .tc-cnt{font-family:var(--mono);font-size:11.5px;flex:0 0 auto;}
745
+ .tc-bin{font-size:11px;color:var(--ink-3);}
746
+ .tc-st{flex:0 0 auto;width:15px;text-align:center;font-weight:700;font-size:11px;}
747
+ .tc-st.s-A,.tc-st.s-new{color:var(--green);}
748
+ .tc-st.s-M{color:var(--amber);}
749
+ .tc-st.s-D{color:var(--red);}
750
+ .tc-st.s-R{color:var(--accent-ink);}
751
+ /* content-visibility lets the browser skip layout+paint for file sections
752
+ outside the viewport; contain-intrinsic-size `auto` keeps the last rendered
753
+ height as the placeholder so the scrollbar stays stable. */
754
+ .tc-file{margin:0 16px 12px;border:1px solid var(--line);border-radius:var(--r);content-visibility:auto;contain-intrinsic-size:auto 480px;}
755
+ .tc-fhead{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:9px;width:100%;padding:8px 12px;border:none;border-bottom:1px solid var(--line);border-radius:var(--r) var(--r) 0 0;background:var(--panel);cursor:pointer;font-family:var(--mono);font-size:12px;text-align:left;color:var(--ink);}
756
+ .tc-fhead:hover{background:var(--surface-2);}
757
+ .tc-chev{transition:transform .12s;color:var(--ink-3);display:inline-block;font-size:10px;}
758
+ .tc-chev.open{transform:rotate(90deg);}
759
+ .tc-hunks{font-family:var(--mono);font-size:12px;line-height:1.55;background:var(--surface);overflow-x:auto;border-radius:0 0 var(--r) var(--r);}
760
+ .dl{padding:0 12px;white-space:pre;color:var(--ink);}
761
+ .dl.add{background:var(--green-soft);}
762
+ .dl.del{background:var(--red-soft);}
763
+ .dl.ctx{color:var(--ink-3);}
764
+ .dl.hunk{background:var(--accent-soft);color:var(--accent-ink);}
765
+ .tc-empty{padding:10px 12px;color:var(--ink-3);font-size:12px;font-family:var(--sans);}
766
+ .tc-bigdiff{display:block;width:100%;padding:10px 12px;border:none;border-radius:0 0 var(--r) var(--r);background:var(--surface);color:var(--ink-3);font-size:12px;font-family:var(--sans);text-align:left;cursor:pointer;}
767
+ .tc-bigdiff:hover{background:var(--surface-2);color:var(--ink);}
768
+ .status-ctl .cv{font-family:var(--mono);font-size:11px;}
769
+ .status-ctl svg{width:14px;height:14px;}
770
+ /* Live "which model actually ran" badge inside the model picker control. */
771
+ .model-badge{font-family:var(--mono);font-size:10px;font-weight:600;line-height:1;padding:2px 6px;border-radius:99px;background:var(--accent-soft);color:var(--accent-ink);}
772
+ /* Which agent (Claude Code / Codex …) a task runs under — task cards + header. */
773
+ .agent-badge{font-family:var(--mono);font-size:9px;font-weight:700;line-height:1;letter-spacing:.04em;padding:2px 6px;border-radius:99px;background:var(--surface-2);color:var(--ink-3);white-space:nowrap;flex:0 0 auto;}
774
+
775
+ .btn{display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 13px;border-radius:var(--r-sm);font-size:12.5px;font-weight:600;transition:background .12s,filter .12s;}
776
+ .btn svg{width:15px;height:15px;}
777
+ .btn:disabled{opacity:.45;cursor:default;}
778
+ .btn-ghost{color:var(--ink-2);}
779
+ .btn-ghost:hover{background:var(--surface-2);color:var(--ink);}
780
+ .btn-line{border:1px solid var(--line-strong);color:var(--ink-2);background:var(--surface);}
781
+ .btn-line:hover{background:var(--surface-2);color:var(--ink);}
782
+ .btn-line.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-ink);}
783
+ [data-theme="dark"] .btn-line.on{color:#E0A07F;}
784
+ .btn-accent{background:var(--accent);color:var(--on-accent);box-shadow:var(--sh-1);}
785
+ .btn-accent:hover{filter:brightness(1.06);}
786
+ .btn-accent:disabled{filter:none;}
787
+ .btn-sm{height:28px;padding:0 10px;font-size:12px;}
788
+
789
+ /* transcript */
790
+ .transcript{flex:1;overflow-y:auto;padding:26px 0 18px;}
791
+ .tw{max-width:760px;margin:0 auto;padding:0 28px;}
792
+ .msg{margin-bottom:22px;}
793
+ .msg .who{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);margin-bottom:7px;}
794
+ .msg .who .badge{font-size:9px;padding:1px 5px;border-radius:4px;background:var(--surface-2);color:var(--ink-3);letter-spacing:.04em;}
795
+ .msg .who .msg-time{font-weight:400;letter-spacing:.03em;text-transform:none;color:var(--ink-3);opacity:.75;}
796
+ .msg .who .av{width:18px;height:18px;border-radius:5px;display:grid;place-items:center;color:#fff;font-size:10px;}
797
+ .msg .who .av.you{background:linear-gradient(135deg,#C2603C,#D89A3A);}
798
+ /* Assistant side: the agent's brand mark, drawn bare (no chip) in brand colour
799
+ and near chip-size. Both marks are fine-detail logos — the Claude burst's
800
+ rays and the Codex knot's loops fall below a pixel inside an 11px glyph on a
801
+ chip and blur into a solid blob, which is what made the old avatar read as a
802
+ plain square. Bare + 16px keeps the detail legible at 1x. Claude wears its
803
+ clay in both themes; the monochrome Codex mark follows --ink. */
804
+ .msg .who .av.cc{color:var(--ink-2);}
805
+ .msg .who .av.cc.claude{color:#D97757;}
806
+ .msg .who .av.cc.codex{color:var(--ink);}
807
+ .msg .who .av svg{width:11px;height:11px;}
808
+ .msg .who .av.cc svg{width:16px;height:16px;}
809
+ .msg-body{font-size:14px;line-height:1.6;color:var(--ink);}
810
+ .msg-body p{margin:0 0 10px;}
811
+ .msg-body p:last-child{margin-bottom:0;}
812
+ .msg-body code{font-family:var(--mono);font-size:12.5px;background:var(--surface-2);border:1px solid var(--line-2);padding:1px 5px;border-radius:5px;color:var(--accent-ink);}
813
+ [data-theme="dark"] .msg-body code{color:#E0A07F;}
814
+ .msg-body strong{font-weight:700;}
815
+
816
+ .msg.user .msg-body{background:var(--accent-soft);border:1px solid rgba(194,96,60,.2);border-radius:var(--r-lg);padding:13px 15px;}
817
+ .msg.user.initial .msg-body{background:var(--surface);border:1px solid var(--accent);box-shadow:var(--sh-1);}
818
+ /* queued follow-up: a dimmed user bubble waiting its turn, with a cancel × */
819
+ .msg.user.queued{opacity:.62;}
820
+ .msg.user.queued .msg-body{background:var(--surface-2);border:1px dashed var(--line-2);position:relative;padding-right:34px;}
821
+ .queued-badge{background:var(--surface-2);color:var(--ink-4);border:1px solid var(--line-2);}
822
+ .queued-x{position:absolute;top:8px;right:8px;width:20px;height:20px;border-radius:6px;display:grid;place-items:center;color:var(--ink-4);transition:background .12s,color .12s;}
823
+ .queued-x:hover{background:var(--red-soft);color:var(--red);}
824
+ .queued-x svg{width:12px;height:12px;}
825
+ .msg-tool{margin-bottom:9px;}
826
+ .initial-tag{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--accent);background:var(--accent-soft);padding:2px 7px;border-radius:5px;margin-bottom:9px;}
827
+
828
+ /* tool call block (expandable) */
829
+ .tool{font-family:var(--mono);font-size:12px;border-radius:var(--r);border:1px solid var(--line-2);background:var(--surface-2);overflow:hidden;}
830
+ .tool-h{display:flex;align-items:center;gap:8px;padding:8px 12px;color:var(--ink-2);width:100%;text-align:left;font-family:var(--mono);font-size:12px;}
831
+ .tool-h:hover{background:var(--panel-2);}
832
+ .tool-h .tchev{flex:0 0 auto;color:var(--ink-4);display:inline-flex;transition:transform .14s;}
833
+ .tool-h .tchev svg{width:13px;height:13px;}
834
+ .tool-h .tchev.open{transform:rotate(90deg);}
835
+ .tool-h .tg{color:var(--ink-2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;}
836
+ .tool-h .tcheck{margin-left:auto;color:var(--green);flex:0 0 auto;display:inline-flex;}
837
+ .tool-h .tx{margin-left:auto;color:var(--red);flex:0 0 auto;display:inline-flex;}
838
+ .tool-h .tcheck svg,.tool-h .tx svg{width:14px;height:14px;}
839
+ .tool-body{border-top:1px solid var(--line-2);background:var(--panel-2);}
840
+ .tool-pre{margin:0;padding:11px 13px;font-family:var(--mono);font-size:11.5px;line-height:1.55;color:var(--ink-2);white-space:pre-wrap;word-break:break-word;max-height:340px;overflow:auto;}
841
+ /* Expanded Edit/Write diff: colored full-width rows, no wrap (scroll instead). */
842
+ .tool-pre.diff{padding:8px 0;white-space:pre;word-break:normal;}
843
+ .tool-pre.diff .dl{padding:0 13px;}
844
+ .tool-pre.err{color:#A23E2A;}
845
+ [data-theme="dark"] .tool-pre.err{color:#E08F78;}
846
+ .tool-divider{padding:6px 13px 4px;font-size:9px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-4);border-top:1px dashed var(--line-strong);}
847
+
848
+ /* ---- peek: the always-visible "⎿" tier (mimics Claude Code) ---- */
849
+ .tpeek{font-family:var(--mono);font-size:11.5px;line-height:1.5;color:var(--ink-3);padding:0 12px 8px 12px;}
850
+ .tcorner{color:var(--ink-4);margin-right:7px;flex:0 0 auto;}
851
+ .tpeek-count{display:flex;align-items:center;width:100%;text-align:left;padding:0 12px 8px 12px;margin:0;font-family:var(--mono);font-size:11.5px;color:var(--ink-3);}
852
+ .tpeek-count:hover .tpeek-more{color:var(--accent-ink);}
853
+ .tpeek-txt{color:var(--ink-2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
854
+ .tpeek-more{margin-left:auto;flex:0 0 auto;font-size:10px;letter-spacing:.02em;color:var(--ink-4);padding-left:10px;}
855
+ button.tpeek-more{display:block;margin:5px 0 0 19px;text-align:left;}
856
+ button.tpeek-more:hover{color:var(--accent-ink);}
857
+ .tpeek-sum{display:flex;align-items:center;gap:8px;padding-bottom:3px;}
858
+ .tpeek-pre{margin:3px 0 0 19px;padding:7px 10px;font-family:var(--mono);font-size:11px;line-height:1.5;background:var(--surface);border:1px solid var(--line-2);border-radius:6px;white-space:pre;overflow-x:auto;color:var(--ink-2);max-height:170px;overflow-y:auto;}
859
+ .tpeek-pre.diff{padding:6px 0;white-space:pre;}
860
+ .tpeek-pre .dl{padding:0 10px;}
861
+ .tpeek-pre .dl.add{background:var(--green-soft);}
862
+ .tpeek-pre .dl.del{background:var(--red-soft);}
863
+ .dstat{font-weight:700;}
864
+ .dstat.add{color:var(--green);}
865
+ .dstat.del{color:var(--red);}
866
+ .tpeek-todos{padding:2px 12px 9px 12px;display:flex;flex-direction:column;gap:3px;}
867
+ .tdo{display:flex;align-items:baseline;gap:8px;color:var(--ink-2);}
868
+ .tdo-box{flex:0 0 auto;width:12px;text-align:center;color:var(--ink-4);}
869
+ .tdo.completed .tdo-box{color:var(--green);}
870
+ .tdo.completed .tdo-txt{color:var(--ink-4);text-decoration:line-through;}
871
+ .tdo.in_progress .tdo-box{color:var(--accent);}
872
+ .tdo.in_progress .tdo-txt{color:var(--ink);font-weight:600;}
873
+
874
+ /* ---------------- AskUserQuestion card ---------------- */
875
+ .ask{border:1px solid var(--accent-soft);border-radius:var(--r);background:var(--surface-2);overflow:hidden;}
876
+ .ask.answered{border-color:var(--line-2);opacity:.92;}
877
+ .ask-head{display:flex;align-items:center;gap:7px;padding:9px 13px;font-size:11px;font-weight:700;letter-spacing:.02em;color:var(--accent-ink);background:var(--accent-soft);border-bottom:1px solid var(--accent-soft);}
878
+ .ask.answered .ask-head{color:var(--ink-3);background:var(--panel-2);}
879
+ .ask-head svg{width:14px;height:14px;}
880
+ .ask-q{padding:12px 13px;border-top:1px solid var(--line-2);}
881
+ .ask-q:first-of-type{border-top:none;}
882
+ .ask-qh{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;font-weight:600;color:var(--ink-1);line-height:1.4;margin-bottom:9px;}
883
+ .ask-chip{font-family:var(--mono);font-size:9.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--accent-ink);background:var(--accent-soft);padding:2px 6px;border-radius:5px;}
884
+ .ask-multi{font-size:9.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-4);margin-left:auto;}
885
+ .ask-opts{display:flex;flex-direction:column;gap:7px;}
886
+ .ask-opt{display:flex;flex-direction:column;gap:2px;text-align:left;padding:9px 11px;border:1px solid var(--line-2);border-radius:9px;background:var(--panel);transition:border-color .12s,background .12s;}
887
+ .ask-opt:hover:not(:disabled){border-color:var(--accent);}
888
+ .ask-opt.on{border-color:var(--accent);background:var(--accent-soft);}
889
+ .ask-opt:disabled{cursor:default;opacity:.7;}
890
+ .ask-opt-l{font-size:12.5px;font-weight:600;color:var(--ink-1);}
891
+ .ask-opt-d{font-size:11.5px;line-height:1.45;color:var(--ink-3);}
892
+ .ask-other{padding:8px 11px;border:1px solid var(--line-2);border-radius:9px;background:var(--panel);font-size:12.5px;color:var(--ink-1);font-family:inherit;}
893
+ .ask-other:focus{outline:none;border-color:var(--accent);}
894
+ .ask-foot{display:flex;justify-content:flex-end;padding:11px 13px;border-top:1px solid var(--line-2);}
895
+ .ask-picked{font-size:12.5px;color:var(--ink-2);font-weight:500;}
896
+ /* browser_ask_user input card (Transcript.tsx InputView) */
897
+ .input-row{display:flex;gap:6px;align-items:center;}
898
+ .input-row .ask-other{flex:1;min-width:0;}
899
+ .input-err{font-size:11.5px;color:var(--red);}
900
+ .input-note{font-size:11px;color:var(--ink-3);}
901
+
902
+ /* ---------------- markdown (assistant / user message bodies) ---------------- */
903
+ .md > :first-child{margin-top:0;}
904
+ .md > :last-child{margin-bottom:0;}
905
+ .md p{margin:0 0 10px;}
906
+ .md strong{font-weight:700;}
907
+ .md a{color:var(--accent-ink);text-decoration:underline;text-underline-offset:2px;}
908
+ [data-theme="dark"] .md a{color:#E0A07F;}
909
+ .md ul,.md ol{margin:8px 0;padding-left:22px;}
910
+ .md li{margin-bottom:4px;}
911
+ .md li::marker{color:var(--ink-3);}
912
+ .md h1,.md h2,.md h3,.md h4{margin:16px 0 8px;font-weight:700;letter-spacing:-.01em;line-height:1.3;}
913
+ .md h1{font-size:18px;}
914
+ .md h2{font-size:16px;}
915
+ .md h3{font-size:14.5px;}
916
+ .md h4{font-size:13px;}
917
+ .md code{font-family:var(--mono);font-size:12.5px;background:var(--surface-2);border:1px solid var(--line-2);padding:1px 5px;border-radius:5px;color:var(--accent-ink);}
918
+ [data-theme="dark"] .md code{color:#E0A07F;}
919
+ .md pre{margin:0 0 12px;background:var(--panel-2);border:1px solid var(--line-2);border-radius:var(--r);padding:12px 14px;overflow-x:auto;}
920
+ .md pre code{display:block;background:none;border:none;padding:0;color:var(--ink);font-size:12.5px;line-height:1.55;}
921
+ .md blockquote{margin:8px 0;padding:2px 0 2px 14px;border-left:3px solid var(--line-strong);color:var(--ink-2);}
922
+ .md hr{border:none;border-top:1px solid var(--line);margin:14px 0;}
923
+ .md table{border-collapse:collapse;margin:8px 0;font-size:13px;width:100%;}
924
+ .md th,.md td{border:1px solid var(--line-2);padding:6px 10px;text-align:left;}
925
+ .md th{background:var(--surface-2);font-weight:700;}
926
+
927
+ /* syntax highlighting (highlight.js token classes — warm palette, dual theme) */
928
+ .hljs-comment,.hljs-quote{color:var(--ink-4);font-style:italic;}
929
+ .hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-type{color:#9E5BA0;}
930
+ .hljs-string,.hljs-meta-string,.hljs-regexp{color:#5C8C5A;}
931
+ .hljs-number,.hljs-symbol{color:#9A6E14;}
932
+ .hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#3E7CA8;}
933
+ .hljs-function .hljs-title,.hljs-title.function_,.hljs-section{color:#C2603C;}
934
+ .hljs-attr,.hljs-attribute,.hljs-variable,.hljs-template-variable{color:#9C4426;}
935
+ .hljs-tag,.hljs-name{color:#3E7CA8;}
936
+ .hljs-meta,.hljs-comment-doc{color:var(--ink-3);}
937
+ .hljs-deletion{color:var(--red);}
938
+ .hljs-addition{color:var(--green);}
939
+ .hljs-emphasis{font-style:italic;}
940
+ .hljs-strong{font-weight:700;}
941
+ [data-theme="dark"] .hljs-keyword,[data-theme="dark"] .hljs-literal,[data-theme="dark"] .hljs-type{color:#C58FC4;}
942
+ [data-theme="dark"] .hljs-string{color:#8FBE82;}
943
+ [data-theme="dark"] .hljs-number{color:#DCB458;}
944
+ [data-theme="dark"] .hljs-built_in,[data-theme="dark"] .hljs-tag,[data-theme="dark"] .hljs-name{color:#6FA8CF;}
945
+ [data-theme="dark"] .hljs-function .hljs-title,[data-theme="dark"] .hljs-title.function_{color:#E08F78;}
946
+ [data-theme="dark"] .hljs-attr,[data-theme="dark"] .hljs-variable{color:#E0A07F;}
947
+
948
+ /* system / error notice */
949
+ /* pre-line: provider error text carries its own line breaks (and the recovery
950
+ notices are appended after a blank line) — collapsing them ran the raw error
951
+ and the explanation together as one paragraph. */
952
+ .msg.system .msg-body{font-family:var(--mono);font-size:12px;color:#A23E2A;background:var(--red-soft);border:1px solid rgba(192,80,60,.3);border-radius:var(--r);padding:9px 12px;white-space:pre-line;}
953
+ [data-theme="dark"] .msg.system .msg-body{color:#E08F78;}
954
+ .msg.system.info .msg-body{color:var(--green);background:var(--green-soft);border-color:rgba(110,150,90,.3);}
955
+ [data-theme="dark"] .msg.system.info .msg-body{color:var(--green);}
956
+ /* context-overflow recovery — warning line + one-click /clear */
957
+ .msg.system.overflow .overflow-actions{margin-top:9px;}
958
+ .msg.system.overflow .overflow-actions .btn{font-family:var(--sans);}
959
+
960
+ /* Reopened-task sync banner (behind base branch). */
961
+ .sync-banner{display:flex;align-items:center;gap:10px;margin:10px 16px 0;padding:8px 12px;border-radius:var(--r-sm);font-size:12px;font-weight:600;color:var(--amber);background:var(--amber-soft);border:1px solid var(--amber);flex:0 0 auto;}
962
+ .sync-banner.conflict{color:var(--red);background:var(--red-soft);border-color:var(--red);}
963
+ .sync-msg{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
964
+ .sync-spacer{flex:1;}
965
+
966
+ /* session break (/clear) */
967
+ .sbreak{display:flex;align-items:center;gap:14px;margin:30px 0;}
968
+ .sbreak .ln{flex:1;height:1px;background:repeating-linear-gradient(90deg,var(--line-strong) 0 5px,transparent 5px 10px);}
969
+ .sbreak .card{flex:0 0 auto;max-width:66%;text-align:center;border:1px solid var(--accent);border-radius:var(--r-lg);background:var(--accent-soft);padding:11px 17px;box-shadow:var(--sh-1);}
970
+ .sbreak .card .cl{display:flex;align-items:center;justify-content:center;gap:6px;font-family:var(--mono);font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--accent-ink);}
971
+ [data-theme="dark"] .sbreak .card .cl{color:#D98C6A;}
972
+ .sbreak .card .ct{font-size:12.5px;color:var(--ink-2);margin-top:5px;line-height:1.45;text-align:left;white-space:pre-wrap;max-height:160px;overflow-y:auto;}
973
+ .sbreak .card .ct b{color:var(--ink);}
974
+
975
+ .session-label{display:flex;align-items:center;gap:9px;margin:0 0 20px;font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-4);}
976
+ .session-label .ln{flex:1;height:1px;background:var(--line);}
977
+
978
+ /* windowed transcript: reveal earlier rows */
979
+ .load-older{display:flex;justify-content:center;margin:0 0 18px;}
980
+ .load-older .btn{font-size:12px;color:var(--ink-3);}
981
+ /* running indicator */
982
+ .run-ind{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
983
+ .run-ind-t{font-family:var(--mono);font-size:11px;color:var(--ink-3);}
984
+ .run-ind-quiet{font-size:12px;color:var(--ink-3);}
985
+ /* typing */
986
+ .typing{display:inline-flex;gap:4px;align-items:center;padding:4px 0;}
987
+ .typing i{width:6px;height:6px;border-radius:50%;background:var(--ink-4);animation:typing 1.2s infinite;}
988
+ .typing i:nth-child(2){animation-delay:.18s;}
989
+ .typing i:nth-child(3){animation-delay:.36s;}
990
+ @keyframes typing{0%,60%,100%{opacity:.3;transform:translateY(0);}30%{opacity:1;transform:translateY(-3px);}}
991
+
992
+ /* ---- async-state primitives (spinner · loading note · skeleton · inline error) ---- */
993
+ .spinner{width:15px;height:15px;border-radius:50%;border:2px solid var(--line-strong);border-top-color:var(--accent);animation:wizspin .7s linear infinite;flex:0 0 auto;}
994
+ .load-note{display:flex;align-items:center;gap:9px;font-size:12.5px;color:var(--ink-3);padding:14px;}
995
+ /* shimmer bar — size it inline per use; compose several for card/list skeletons */
996
+ @keyframes skel{0%,100%{opacity:.45;}50%{opacity:.95;}}
997
+ .skel{display:block;flex:0 0 auto;background:var(--line);border-radius:5px;animation:skel 1.3s ease-in-out infinite;}
998
+ .skel-list{display:flex;flex-direction:column;gap:6px;}
999
+ /* skeleton stand-in for a bordered list row (folder picker, repo list) */
1000
+ .skel-lrow{display:flex;align-items:center;gap:9px;padding:11px 13px;border-bottom:1px solid var(--line);}
1001
+ .skel-lrow:last-child{border-bottom:none;}
1002
+ /* recoverable inline error: message + optional retry, same voice as .msg.system */
1003
+ .err-note{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;padding:9px 12px;border-radius:var(--r);font-size:12.5px;line-height:1.45;color:#A23E2A;background:var(--red-soft);border:1px solid rgba(192,80,60,.3);}
1004
+ [data-theme="dark"] .err-note{color:#E08F78;}
1005
+ .err-note .err-msg{flex:1 1 auto;min-width:0;overflow-wrap:anywhere;}
1006
+ .err-note .btn{flex:0 0 auto;}
1007
+
1008
+ /* composer */
1009
+ .composer{flex:0 0 auto;padding:12px 20px 10px;background:var(--surface);container-type:inline-size;}
1010
+ .clear-confirm{flex:0 0 auto;display:flex;align-items:center;flex-wrap:wrap;gap:9px;padding:9px 18px;border-bottom:1px solid var(--line);background:var(--surface);font-size:12px;color:var(--ink-2);}
1011
+ .clear-confirm .spacer{flex:1;}
1012
+ .composer-inner{max-width:800px;margin:0 auto;position:relative;}
1013
+ .comp-box{border:1px solid var(--line-strong);border-radius:24px;background:var(--raise);box-shadow:0 4px 20px rgba(0,0,0,.04);transition:border-color .15s,box-shadow .15s;overflow:hidden;}
1014
+ .comp-box:focus-within{border-color:var(--ink-4);box-shadow:0 4px 24px rgba(0,0,0,.07);}
1015
+ .comp-area{padding:18px 20px 8px;}
1016
+ .comp-area textarea{display:block;width:100%;min-width:0;border:none;background:none;resize:none;outline:none;font-family:var(--sans);font-size:15px;line-height:1.6;color:var(--ink);max-height:200px;min-height:62px;}
1017
+ .comp-area textarea::placeholder{color:var(--ink-4);}
1018
+ .comp-toolbar{display:flex;align-items:center;gap:7px;padding:4px 12px 12px;min-width:0;}
1019
+ .comp-add{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;flex:none;color:var(--ink-2);background:transparent;}
1020
+ .comp-add svg{width:22px;height:22px;}
1021
+ .comp-add:hover,.comp-setting:hover{background:var(--surface-2);}
1022
+ .comp-control{position:relative;min-width:0;}
1023
+ .comp-model{margin-left:auto;}
1024
+ .comp-setting{display:flex;align-items:center;gap:6px;min-height:36px;max-width:100%;padding:6px 8px;border-radius:10px;color:var(--ink-2);background:transparent;font-size:12px;white-space:nowrap;}
1025
+ .comp-setting svg{width:14px;height:14px;}
1026
+ .comp-setting.elevated{color:var(--amber);}
1027
+ .comp-model-name{min-width:0;max-width:220px;overflow:hidden;text-overflow:ellipsis;}
1028
+ .comp-reasoning{color:var(--ink-3);font-size:11px;}
1029
+ .comp-setting:disabled,.comp-add:disabled{opacity:.5;cursor:default;}
1030
+ .send{width:36px;height:36px;flex:none;border-radius:50%;background:var(--accent);color:var(--on-accent);display:grid;place-items:center;transition:filter .12s,opacity .12s;}
1031
+ .send:hover{filter:brightness(1.07);}
1032
+ .send:disabled{opacity:.35;cursor:default;filter:none;}
1033
+ .send.stop{background:var(--blue);color:#fff;}
1034
+ .send.stop svg{fill:currentColor;width:15px;height:15px;}
1035
+ /* mid-turn: queue button + stop button sit side by side */
1036
+ .send-group{display:flex;align-items:flex-end;gap:8px;flex:0 0 auto;}
1037
+ .send svg{width:17px;height:17px;}
1038
+ .comp-foot{display:flex;align-items:center;gap:10px;padding:9px 14px;border-top:1px solid var(--line-2);background:var(--surface-2);}
1039
+ .comp-foot .hint{font-family:var(--mono);font-size:10px;color:var(--ink-3);display:flex;align-items:center;gap:5px;}
1040
+ .comp-foot .hint svg{width:13px;height:13px;}
1041
+ .comp-foot .kbd{font-family:var(--mono);font-size:9.5px;border:1px solid var(--line-strong);border-radius:4px;padding:1px 5px;color:var(--ink-3);background:var(--surface);}
1042
+ .comp-foot .spacer{flex:1;}
1043
+ /* Agent / model switchers at the start of the composer footer (RunSwitch.tsx). */
1044
+ .composer-inner{container-type:inline-size;}
1045
+ .run-sw{display:flex;align-items:center;gap:5px;height:22px;padding:0 8px;border-radius:99px;border:1px solid var(--line-strong);background:var(--surface);font-family:var(--mono);font-size:10.5px;font-weight:600;color:var(--ink-2);cursor:pointer;white-space:nowrap;max-width:190px;}
1046
+ .run-sw:hover{border-color:var(--accent);color:var(--ink);}
1047
+ .run-sw svg{width:12px;height:12px;flex:0 0 auto;}
1048
+ .run-sw-v{overflow:hidden;text-overflow:ellipsis;min-width:0;}
1049
+ .pop-note{padding:8px 13px 10px;border-top:1px solid var(--line-2);font-size:11px;line-height:1.5;color:var(--ink-3);max-width:280px;}
1050
+ @container (max-width:560px){.comp-foot .comp-hint-extra{display:none;}}
1051
+ @container (max-width:420px){.comp-foot .hint .kbd{display:none;}.run-sw{max-width:130px;}}
1052
+
1053
+ .send-group{display:flex;align-items:center;gap:6px;flex:none;}
1054
+ .send svg{width:19px;height:19px;}
1055
+ .comp-caption{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:4px;padding:8px 6px 0;font-size:10px;color:var(--ink-4);}
1056
+ .comp-caption button{display:flex;align-items:center;gap:4px;background:transparent;color:var(--ink-3);font-size:10px;}
1057
+ .comp-caption button:disabled{opacity:.45;cursor:default;}
1058
+ .comp-error,.control-error{padding:8px 10px;font-size:12px;line-height:1.5;color:var(--red);overflow-wrap:anywhere;}
1059
+ .comp-upload-status{padding:6px 10px;font-size:11px;color:var(--ink-3);}
1060
+ .comp-quote{display:flex;align-items:flex-start;gap:10px;margin:12px 14px 0;padding:10px 12px;border-left:3px solid var(--accent);border-radius:5px 12px 12px 5px;background:var(--surface-2);font-size:12px;}
1061
+ .comp-quote>div{flex:1;min-width:0;}
1062
+ .comp-quote strong{font-weight:500;color:var(--ink-2);}
1063
+ .comp-quote p{margin:4px 0 0;color:var(--ink-3);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow-wrap:anywhere;white-space:pre-wrap;}
1064
+ .comp-quote .icon-btn{width:24px;height:24px;flex:none;}
1065
+ .hero-controls{display:flex;align-items:center;gap:12px;padding:12px 20px;border-bottom:1px solid var(--line);}
1066
+ .hero-controls .comp-model{margin-left:0;}
1067
+ .compact-chat{flex:1;}
1068
+ .compact-chat[hidden]{display:none;}
1069
+ .compact-session>.sess-rail{flex:1;}
1070
+ .compact-session .sess-head{flex-wrap:wrap;}
1071
+ .compact-session .sh-tools{flex-wrap:wrap;}
1072
+ .msg-actions{display:flex;margin-top:6px;}
1073
+ .msg-actions button{display:flex;align-items:center;gap:4px;padding:4px 6px;border-radius:6px;background:transparent;font-size:11px;color:var(--ink-4);}
1074
+ .msg-actions button:hover,.msg-actions button:focus-visible{background:var(--surface-2);color:var(--ink);}
1075
+ .msg-body{overflow-wrap:anywhere;min-width:0;}
1076
+ button.pop-item{width:100%;text-align:left;background:transparent;color:var(--ink);font:inherit;}
1077
+ button.pop-item:hover{background:var(--surface-2);}
1078
+ .pop-item .pi-sub{display:block;}
1079
+ .pop-item:disabled{opacity:.5;cursor:default;}
1080
+ .popover{max-width:calc(100vw - 16px);overscroll-behavior:contain;}
1081
+ .composer button:focus-visible,.msg-actions button:focus-visible,.popover button:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
1082
+ @container (max-width:420px){
1083
+ .comp-toolbar{flex-wrap:wrap;gap:4px;padding:4px 10px 10px;}
1084
+ .comp-setting{font-size:11px;padding:5px;gap:4px;}
1085
+ .comp-model-name{max-width:145px;}
1086
+ .comp-area{padding:14px 16px 6px;}
1087
+ .comp-caption{font-size:9px;}
1088
+ }
1089
+ @container (max-width:310px){
1090
+ .comp-control:has(.permission){flex:1;}
1091
+ .comp-model{margin-left:0;flex:1;}
1092
+ .comp-model-name{max-width:120px;}
1093
+ .comp-toolbar>.send-group{margin-left:auto;}
1094
+ }
1095
+
1096
+ /* image attachments — composer chips + drop state */
1097
+ .comp-box.dropping{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);}
1098
+ .attach-row{display:flex;flex-wrap:wrap;gap:8px;padding:10px 12px 0;}
1099
+ .attach-chip{position:relative;width:56px;height:56px;border:1px solid var(--line-strong);border-radius:8px;overflow:hidden;background:var(--surface-2);}
1100
+ .attach-chip img{width:100%;height:100%;object-fit:cover;display:block;}
1101
+ .attach-chip.uploading img{opacity:.4;}
1102
+ .attach-chip.error{border-color:var(--red);}
1103
+ .attach-chip.error img{opacity:.35;}
1104
+ .attach-badge{position:absolute;left:0;right:0;bottom:0;font-family:var(--mono);font-size:8.5px;text-align:center;padding:1px 0 2px;background:rgba(0,0,0,.55);color:#fff;}
1105
+ .attach-badge.err{background:var(--red);}
1106
+ .attach-x{position:absolute;top:2px;right:2px;width:16px;height:16px;border-radius:50%;background:rgba(0,0,0,.65);color:#fff;font-size:12px;line-height:1;display:grid;place-items:center;padding:0;cursor:pointer;}
1107
+ .attach-x:hover{background:rgba(0,0,0,.85);}
1108
+ /* text-file attachment (a diverted big paste) — a labeled chip, not a square. */
1109
+ .attach-chip.file{width:auto;height:auto;max-width:220px;padding:7px 26px 7px 9px;}
1110
+ .attach-file{display:flex;align-items:center;gap:5px;font-family:var(--mono);font-size:11px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
1111
+ .attach-file svg{flex:none;width:12px;height:12px;opacity:.7;}
1112
+ .attach-chip.file.uploading{opacity:.55;}
1113
+
1114
+ /* attachments — transcript thumbnails + file chips */
1115
+ .msg-attachments{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;}
1116
+ .msg-attachments img{max-width:240px;max-height:170px;border-radius:8px;border:1px solid var(--line-strong);display:block;box-shadow:var(--sh-1);}
1117
+ .msg-attachments .file-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:11px;color:var(--ink-2);text-decoration:none;padding:6px 10px;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface-2);}
1118
+ .msg-attachments .file-chip:hover{border-color:var(--line-strong);color:var(--ink);}
1119
+ .msg-attachments .file-chip svg{width:12px;height:12px;opacity:.7;}
1120
+
1121
+ /* slash menu */
1122
+ .slash{position:absolute;bottom:100%;left:0;margin-bottom:8px;width:280px;background:var(--raise);border:1px solid var(--line-strong);border-radius:var(--r);box-shadow:var(--sh-3);overflow:hidden;z-index:20;}
1123
+ .slash-item{display:flex;align-items:center;gap:11px;padding:10px 13px;cursor:pointer;}
1124
+ .slash-item:hover,.slash-item.act{background:var(--surface-2);}
1125
+ .slash-item .cmd{font-family:var(--mono);font-size:12.5px;font-weight:700;color:var(--accent-ink);}
1126
+ [data-theme="dark"] .slash-item .cmd{color:#D98C6A;}
1127
+ .slash-item .cd{font-size:11.5px;color:var(--ink-3);margin-left:auto;}
1128
+
1129
+ /* unstarted task hero */
1130
+ .hero{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;text-align:center;overflow-y:auto;}
1131
+ .hero .h-ic{width:60px;height:60px;border-radius:18px;background:var(--surface-2);border:1px solid var(--line-2);display:grid;place-items:center;color:var(--accent);margin-bottom:20px;}
1132
+ .hero .h-ic svg{width:26px;height:26px;}
1133
+ .hero .h-status{display:inline-flex;align-items:center;gap:7px;font-family:var(--mono);font-size:11px;font-weight:600;color:var(--ink-3);margin-bottom:14px;}
1134
+ .hero h2{font-size:24px;font-weight:700;letter-spacing:-.02em;margin:0 0 10px;max-width:520px;}
1135
+ .hero .h-desc{font-size:14px;color:var(--ink-2);line-height:1.6;max-width:480px;margin:0 0 8px;}
1136
+ .hero .h-prompt{margin:20px 0 24px;max-width:520px;text-align:left;border:1px solid var(--line-2);border-radius:var(--r-lg);background:var(--surface);overflow:hidden;box-shadow:var(--sh-1);}
1137
+ .hero .h-prompt .hp-h{font-family:var(--mono);font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);padding:9px 14px;border-bottom:1px solid var(--line-2);background:var(--surface-2);}
1138
+ .hero .h-prompt .hp-b{padding:13px 14px;font-size:13px;line-height:1.55;color:var(--ink);}
1139
+ .hero .h-prompt .hp-b .ctx-pre{display:block;font-family:var(--mono);font-size:10.5px;color:var(--ink-3);margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed var(--line-strong);}
1140
+
1141
+ /* ============================== modal ============================== */
1142
+ .scrim{position:fixed;inset:0;background:rgba(38,36,31,.42);backdrop-filter:blur(3px);display:grid;place-items:center;z-index:200;animation:fadein .15s ease;}
1143
+ @keyframes fadein{from{opacity:0;}to{opacity:1;}}
1144
+ .modal{width:560px;max-width:calc(100vw - 40px);max-height:calc(100vh - 60px);overflow-y:auto;background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--r-xl);box-shadow:var(--sh-3);animation:pop .18s cubic-bezier(.2,.9,.3,1.2);}
1145
+ @keyframes pop{from{opacity:0;transform:translateY(10px) scale(.98);}to{opacity:1;transform:none;}}
1146
+ .modal-h{display:flex;align-items:center;gap:10px;padding:18px 22px 14px;border-bottom:1px solid var(--line);}
1147
+ .modal-h .m-title{font-size:17px;font-weight:700;letter-spacing:-.02em;flex:1;}
1148
+ .modal-h .m-sub{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);}
1149
+ .modal-b{padding:20px 22px;}
1150
+
1151
+ /* Copy-the-project-id chip, sitting inline with the project-context modal's
1152
+ heading. Monospace + tabular so the id reads as an identifier, not prose. */
1153
+ .copy-id{display:inline-flex;align-items:center;gap:6px;vertical-align:middle;margin-left:8px;
1154
+ padding:2px 7px;border:1px solid var(--line-strong);border-radius:var(--r-sm,6px);
1155
+ background:var(--raise);color:var(--ink-3);cursor:pointer;font-family:var(--mono);
1156
+ font-size:10.5px;font-weight:500;letter-spacing:0;max-width:230px;}
1157
+ .copy-id:hover{color:var(--ink);border-color:var(--ink-4);}
1158
+ .copy-id:focus-visible{outline:2px solid var(--accent);outline-offset:1px;}
1159
+ .copy-id .copy-id-v{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1160
+ .copy-id svg{width:12px;height:12px;flex:0 0 auto;}
1161
+
1162
+ /* Collapsible "call this project over HTTP" block at the foot of the same modal. */
1163
+ .api-snip-head{display:flex;align-items:center;gap:8px;width:100%;text-align:left;
1164
+ font-family:var(--mono);font-size:10px;font-weight:700;text-transform:uppercase;
1165
+ letter-spacing:.07em;color:var(--ink-3);cursor:pointer;padding:0;}
1166
+ .api-snip-head:hover{color:var(--ink-2);}
1167
+ .api-snip-head svg{width:13px;height:13px;}
1168
+ .api-snip-head .opt{text-transform:none;letter-spacing:0;font-weight:400;}
1169
+ .api-snip-chev{display:inline-flex;transition:transform .15s ease;}
1170
+ .api-snip-chev.open{transform:rotate(90deg);}
1171
+ .api-snips{display:flex;flex-direction:column;gap:10px;margin-top:11px;}
1172
+ .api-snip-auth{display:flex;align-items:flex-start;gap:7px;padding:8px 11px;
1173
+ border:1px solid var(--line-strong);border-left:2px solid var(--ink-4);
1174
+ border-radius:var(--r);background:var(--raise);
1175
+ font-size:12px;line-height:1.6;color:var(--ink-3);}
1176
+ .api-snip-auth.on{border-left-color:var(--accent);color:var(--ink-2);}
1177
+ .api-snip-auth svg{width:13px;height:13px;flex:0 0 auto;margin-top:2px;}
1178
+ .api-snip-auth code{font-family:var(--mono);font-size:11px;}
1179
+
1180
+ .api-snip-l{display:flex;align-items:center;justify-content:space-between;gap:10px;
1181
+ font-size:12px;color:var(--ink-2);margin-bottom:5px;}
1182
+ .api-snip-pre{margin:0;padding:9px 11px;background:var(--raise);
1183
+ border:1px solid var(--line-strong);border-radius:var(--r);
1184
+ font-size:11.5px;line-height:1.65;color:var(--ink-2);
1185
+ white-space:pre-wrap;word-break:break-all;overflow-x:auto;}
1186
+
1187
+ .modal-f{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:14px 22px 20px;}
1188
+ .modal-f .spacer{flex:1;}
1189
+
1190
+ .field{margin-bottom:18px;}
1191
+ .field:last-child{margin-bottom:0;}
1192
+ .field .lab{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-3);margin-bottom:8px;}
1193
+ .field .lab svg{width:13px;height:13px;}
1194
+ .field .lab .opt{font-weight:500;text-transform:none;letter-spacing:0;color:var(--ink-4);}
1195
+ .field input[type=text],.field input[type=number],.field textarea{
1196
+ width:100%;border:1px solid var(--line-strong);border-radius:var(--r);background:var(--raise);
1197
+ padding:11px 13px;font-family:var(--sans);font-size:14px;color:var(--ink);outline:none;transition:border-color .12s,box-shadow .12s;
1198
+ }
1199
+ .field textarea{resize:vertical;min-height:88px;line-height:1.55;}
1200
+ /* Context label row: the action buttons (Preview, Refresh with AI) keep their
1201
+ size and wrap as a group below the label on narrow widths instead of
1202
+ squishing. */
1203
+ .ctx-lab{flex-wrap:wrap;}
1204
+ .ctx-lab .ctx-actions{display:flex;align-items:center;gap:8px;margin-left:auto;}
1205
+ .ctx-lab .ctx-actions .btn{flex-shrink:0;white-space:nowrap;}
1206
+ .job-cost-hint{font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--ink-4);white-space:nowrap;}
1207
+ /* Rendered-markdown preview that stands in for a .field textarea (same box). */
1208
+ .field .md-preview{width:100%;border:1px solid var(--line-strong);border-radius:var(--r);background:var(--raise);padding:11px 13px;overflow-y:auto;font-size:14px;}
1209
+ .field .md-preview.empty{color:var(--ink-3);font-style:italic;}
1210
+ /* No native spinners — the rest of the app has none, so they read as out of place. */
1211
+ .field input[type=number]{-moz-appearance:textfield;appearance:textfield;}
1212
+ .field input[type=number]::-webkit-outer-spin-button,.field input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}
1213
+ .field input:focus,.field textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);}
1214
+ .field .ctx-mono{font-family:var(--mono);font-size:12.5px;}
1215
+ .field .hlp{font-size:11.5px;color:var(--ink-3);margin-top:7px;line-height:1.45;}
1216
+
1217
+ .seg{display:flex;gap:6px;}
1218
+ .seg button{flex:1;display:flex;align-items:center;justify-content:center;gap:7px;height:40px;border-radius:var(--r);border:1px solid var(--line-strong);background:var(--raise);font-size:13px;font-weight:600;color:var(--ink-2);transition:all .12s;}
1219
+ .seg button:hover{border-color:var(--line-strong);background:var(--surface-2);}
1220
+ .seg button.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-ink);}
1221
+ .seg button svg{width:14px;height:14px;}
1222
+ [data-theme="dark"] .seg button.on{color:#E0A07F;}
1223
+ .seg button .pdot{width:9px;height:9px;border-radius:50%;}
1224
+
1225
+ .modal-close{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;color:var(--ink-3);}
1226
+ .modal-close:hover{background:var(--surface-2);color:var(--ink);}
1227
+
1228
+ /* destructive action */
1229
+ .btn-danger{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 13px;border-radius:var(--r-sm);font-size:12.5px;font-weight:600;border:1px solid var(--red);color:var(--red);background:var(--surface);transition:background .12s;}
1230
+ .btn-danger:hover{background:var(--red-soft);}
1231
+ .btn-danger.on{background:var(--red);color:#fff;border-color:var(--red);}
1232
+ .btn-danger.on:hover{filter:brightness(1.06);}
1233
+ .btn-danger svg{width:14px;height:14px;}
1234
+
1235
+ /* ============================== terminal drawer ============================== */
1236
+ .tb-btn.on{background:var(--accent);color:#fff;}
1237
+ .tb-btn.on:hover{background:var(--accent);filter:brightness(1.06);}
1238
+ .tb-btn:disabled{opacity:.4;cursor:default;}
1239
+ .tb-btn svg{width:14px;height:14px;}
1240
+
1241
+ .term-drawer{
1242
+ --term-bg:#FBFAF6;
1243
+ flex:0 0 auto;display:flex;flex-direction:column;min-height:0;
1244
+ border-top:1px solid var(--line-strong);background:var(--term-bg);
1245
+ }
1246
+ [data-theme="dark"] .term-drawer{--term-bg:#15140f;}
1247
+ .term-drawer.collapsed{height:0 !important;border-top:0;overflow:hidden;}
1248
+ .term-resize{height:6px;flex:0 0 auto;cursor:row-resize;background:var(--chrome);border-bottom:1px solid var(--line);}
1249
+ .term-resize:hover{background:var(--accent-soft);}
1250
+ .term-bar{display:flex;align-items:center;gap:8px;height:30px;flex:0 0 auto;padding:0 8px 0 12px;background:var(--chrome);border-bottom:1px solid var(--line);font-family:var(--mono);font-size:11px;color:var(--ink-3);}
1251
+ .term-bar svg{width:14px;height:14px;}
1252
+ .term-bar .term-title{font-weight:700;color:var(--ink-2);letter-spacing:.04em;text-transform:uppercase;font-size:10px;}
1253
+ .term-bar .term-cwd{color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1254
+ .term-bar .icon-btn{width:24px;height:24px;}
1255
+ /* project ↔ task-worktree scope toggle (reuses the board-header segmented look,
1256
+ shrunk to fit the 30px bar) */
1257
+ .term-bar .bseg{padding:1px;gap:1px;}
1258
+ .term-bar .bseg button{padding:3px 8px;font-size:9px;}
1259
+ .bseg button:disabled{opacity:.45;cursor:not-allowed;}
1260
+ .bseg button:disabled:hover{color:var(--ink-4);}
1261
+ .term-host{flex:1;min-height:0;padding:6px 8px;overflow:hidden;}
1262
+ .term-host .xterm{height:100%;}
1263
+ .term-host .xterm-viewport{overflow-y:auto;}
1264
+
1265
+ /* ===================== mobile terminal sheet ===================== */
1266
+ /* Full-screen, keyboard-aware terminal for phones (see MobileTerminalSheet). Its
1267
+ height is pinned to window.visualViewport in JS so the keyboard never covers
1268
+ the button-bar; everything here just lays out bar / output / keys and respects
1269
+ the notch + home-indicator insets. */
1270
+ .mterm{
1271
+ --term-bg:#FBFAF6;
1272
+ position:fixed;inset:0;z-index:150;display:flex;flex-direction:column;
1273
+ background:var(--term-bg);overflow:hidden;
1274
+ }
1275
+ [data-theme="dark"] .mterm{--term-bg:#15140f;}
1276
+ .mterm.hidden{display:none;}
1277
+ .mterm-bar{
1278
+ display:flex;align-items:center;gap:8px;flex:0 0 auto;
1279
+ height:calc(46px + env(safe-area-inset-top));padding:env(safe-area-inset-top) 8px 0 14px;
1280
+ background:var(--chrome);border-bottom:1px solid var(--line);
1281
+ font-family:var(--mono);font-size:11px;color:var(--ink-3);
1282
+ }
1283
+ .mterm-bar svg{width:15px;height:15px;}
1284
+ .mterm-bar .mterm-cwd{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-2);}
1285
+ .mterm-bar .icon-btn{width:40px;height:40px;font-family:var(--mono);font-size:13px;font-weight:700;color:var(--ink-2);}
1286
+ .mterm .term-host{flex:1;min-height:0;padding:6px 8px;}
1287
+ .mterm-keys{
1288
+ display:flex;align-items:center;gap:8px;flex:0 0 auto;
1289
+ padding:8px 12px calc(8px + env(safe-area-inset-bottom));
1290
+ background:var(--chrome);border-top:1px solid var(--line);
1291
+ }
1292
+ .mtk{
1293
+ height:42px;min-width:64px;padding:0 16px;border-radius:var(--r-sm);
1294
+ border:1px solid var(--line-strong);background:var(--raise);
1295
+ font-family:var(--mono);font-size:13px;font-weight:600;color:var(--ink);
1296
+ }
1297
+ .mtk:active{background:var(--surface-2);}
1298
+ .mtk-enter{background:var(--accent);color:#fff;border-color:var(--accent);}
1299
+
1300
+ /* mobile-only terminal toggle in the titlebar (the desktop tb-actions row is
1301
+ hidden on phones) */
1302
+ .tb-term-mobile{width:40px;height:40px;border-radius:var(--r-sm);display:grid;place-items:center;color:var(--ink-2);flex:0 0 auto;}
1303
+ .tb-term-mobile svg{width:18px;height:18px;}
1304
+ .tb-term-mobile.on{background:var(--accent);color:#fff;}
1305
+
1306
+ /* ============================== services drawer ============================== */
1307
+ /* Bottom drawer (reuses .term-drawer chrome) listing a project's managed services
1308
+ with a status dot, controls, and a live log pane. */
1309
+ .svc-drawer .term-bar svg{width:14px;height:14px;}
1310
+ .svc-err{color:var(--red);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:50%;}
1311
+ .svc-body{flex:1;min-height:0;display:flex;}
1312
+ .svc-list{flex:0 0 280px;min-width:0;border-right:1px solid var(--line);overflow-y:auto;padding:6px;display:flex;flex-direction:column;gap:3px;}
1313
+ .svc-empty{padding:14px 10px;font-size:12px;color:var(--ink-3);line-height:1.5;}
1314
+ .svc-row{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:7px 9px;border-radius:var(--r-sm);border:1px solid transparent;background:transparent;cursor:pointer;color:var(--ink-2);font-size:12.5px;}
1315
+ .svc-row:hover{background:var(--surface-2);}
1316
+ .svc-row.on{background:var(--surface-2);border-color:var(--line);}
1317
+ .svc-dot{width:8px;height:8px;border-radius:50%;flex:0 0 auto;background:var(--ink-4);}
1318
+ .svc-dot.g{background:var(--green,#5C8C5A);}
1319
+ .svc-dot.a{background:var(--yellow,#9A6E14);animation:pulse 1.4s ease-in-out infinite;}
1320
+ .svc-dot.r{background:var(--red);}
1321
+ .svc-dot.x{background:var(--ink-4);}
1322
+ .svc-name{font-weight:600;color:var(--ink);}
1323
+ .svc-status{font-size:11px;color:var(--ink-3);}
1324
+ .svc-url{font-family:var(--mono);font-size:11px;color:var(--accent);text-decoration:none;padding:1px 5px;border-radius:5px;}
1325
+ .svc-url:hover{background:var(--accent-soft);}
1326
+ .svc-vis{font-size:11px;color:var(--ink-2);background:var(--surface);border:1px solid var(--line);border-radius:5px;padding:1px 3px;cursor:pointer;}
1327
+ .svc-row>.icon-btn{width:24px;height:24px;display:grid;place-items:center;cursor:pointer;border-radius:5px;color:var(--ink-2);}
1328
+ .svc-row>.icon-btn:hover{background:var(--surface);color:var(--ink);}
1329
+ .svc-row>.icon-btn svg{width:13px;height:13px;}
1330
+ .svc-actions{display:flex;align-items:center;gap:2px;}
1331
+ .svc-actions .icon-btn{width:24px;height:24px;display:grid;place-items:center;cursor:pointer;border-radius:5px;color:var(--ink-2);}
1332
+ .svc-actions .icon-btn:hover{background:var(--surface);color:var(--ink);}
1333
+ .svc-actions .icon-btn svg{width:13px;height:13px;}
1334
+ .svc-log-pane{flex:1;min-width:0;display:flex;flex-direction:column;}
1335
+ .svc-banner{padding:7px 10px;font-size:11.5px;line-height:1.5;color:var(--red);border-bottom:1px solid var(--line);background:var(--surface-2);}
1336
+ .svc-logs{flex:1;min-width:0;overflow-y:auto;padding:8px 10px;font-family:var(--mono);font-size:11.5px;line-height:1.45;background:var(--term-bg);}
1337
+ .svc-logs-empty{color:var(--ink-3);}
1338
+ .svc-log-line{white-space:pre-wrap;word-break:break-word;color:var(--ink-2);}
1339
+ .svc-log-line.stderr{color:var(--red);}
1340
+ .svc-log-line.system{color:var(--ink-3);font-style:italic;}
1341
+ .svc-cfg-row{display:flex;align-items:center;gap:10px;}
1342
+ .svc-cfg-lab{flex:0 0 92px;font-size:12px;color:var(--ink-2);}
1343
+ .svc-cfg-row input{flex:1;min-width:0;}
1344
+ @keyframes pulse{0%,100%{opacity:1;}50%{opacity:.4;}}
1345
+
1346
+ /* status menu (popover) */
1347
+ /* max-height + scroll: the model picker now carries Claude Code's full list
1348
+ (families, 1M variants, pinned versions), which is taller than a viewport. */
1349
+ .popover{position:absolute;z-index:60;background:var(--raise);border:1px solid var(--line-strong);border-radius:var(--r);box-shadow:var(--sh-3);overflow-y:auto;overscroll-behavior:contain;max-height:min(60vh,440px);min-width:200px;animation:pop .14s ease;}
1350
+ .pop-item{display:flex;align-items:center;gap:10px;padding:10px 13px;cursor:pointer;font-size:13px;font-weight:600;}
1351
+ .pop-item:hover{background:var(--surface-2);}
1352
+ .pop-item .pi-check{margin-left:auto;color:var(--accent);}
1353
+ .pop-item .pi-check svg{width:14px;height:14px;}
1354
+ .pop-item .pi-sub{font-family:var(--mono);font-size:10px;color:var(--ink-3);font-weight:400;}
1355
+ .pop-sec{padding:8px 13px 4px;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);}
1356
+ .pop-custom-model{border-top:1px solid var(--line);padding-bottom:10px;}
1357
+ .pop-custom-row{display:flex;gap:7px;padding:5px 10px;}
1358
+ .pop-custom-row input{min-width:260px;flex:1;font-size:11px;}
1359
+ .pop-custom-model>.pi-sub{max-width:360px;padding:0 11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1360
+
1361
+ /* ⌘K command palette */
1362
+ .palette-scrim{position:fixed;inset:0;background:rgba(0,0,0,.38);backdrop-filter:blur(3px);z-index:240;display:flex;align-items:flex-start;justify-content:center;padding-top:13vh;animation:fadein .12s ease;}
1363
+ .palette{width:580px;max-width:92vw;display:flex;flex-direction:column;background:var(--raise);border:1px solid var(--line-strong);border-radius:12px;box-shadow:var(--sh-3);overflow:hidden;animation:pop .14s ease;}
1364
+ .palette-input{display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--line);}
1365
+ .palette-input .p-ic{display:flex;width:15px;height:15px;color:var(--ink-3);flex:0 0 auto;}
1366
+ .palette-input .p-ic svg{width:15px;height:15px;}
1367
+ .palette-input input{flex:1;min-width:0;background:none;border:none;outline:none;color:var(--ink);font-size:14px;font-family:inherit;}
1368
+ .palette-input input::placeholder{color:var(--ink-4);}
1369
+ .palette-kbd{font-family:var(--mono);font-size:10px;color:var(--ink-3);border:1px solid var(--line);border-radius:3px;padding:1px 5px;flex:0 0 auto;}
1370
+ .palette-list{max-height:min(52vh,460px);overflow-y:auto;padding:6px 6px 8px;}
1371
+ .palette-empty{padding:18px 14px 20px;font-size:13px;color:var(--ink-3);text-align:center;}
1372
+ .pal-row{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border-radius:8px;text-align:left;color:var(--ink);}
1373
+ .pal-row.on{background:var(--accent-soft);}
1374
+ .pal-row .pr-ic{display:flex;align-items:center;justify-content:center;width:20px;height:20px;color:var(--ink-3);flex:0 0 auto;}
1375
+ .pal-row .pr-ic svg{width:15px;height:15px;}
1376
+ .pal-row.on .pr-ic{color:var(--accent);}
1377
+ .pal-row .pr-chip{flex:0 0 auto;width:20px;height:20px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:10px;font-weight:700;}
1378
+ .pal-row .pr-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;}
1379
+ .pal-row .pr-sub{color:var(--ink-3);font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:0 1 auto;}
1380
+ .pal-row .pr-hint{margin-left:auto;color:var(--ink-4);font-family:var(--mono);font-size:10px;white-space:nowrap;flex:0 0 auto;padding-left:10px;}
1381
+
1382
+ /* generic separators / utility */
1383
+ .divider{height:1px;background:var(--line);margin:6px 0;}
1384
+
1385
+ .send svg{width:17px;height:17px;}
1386
+ .sug-btn svg,.btn-sm svg{width:13px;height:13px;}
1387
+
1388
+ /* status label (opt-in via .slabel consumers; hidden by default) */
1389
+ .slabel{display:none;font-family:var(--mono);font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);flex:0 0 auto;}
1390
+
1391
+ /* project recap card (session pane, no task selected) */
1392
+ .recap-card{margin:18px 0;border:1px solid var(--line-2);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--sh-1);overflow:hidden;}
1393
+ .recap-head{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line-2);background:var(--surface-2);}
1394
+ .recap-head .spacer,.recap-foot .spacer{flex:1;}
1395
+ .recap-badge{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-ink);}
1396
+ .recap-badge svg{width:13px;height:13px;}
1397
+ .recap-meta{font-size:11.5px;color:var(--ink-3);}
1398
+ .recap-body{padding:14px 16px;font-size:14px;line-height:1.6;color:var(--ink);}
1399
+ .recap-body>:first-child{margin-top:0;}
1400
+ .recap-body>:last-child{margin-bottom:0;}
1401
+ .recap-foot{display:flex;align-items:center;gap:10px;padding:11px 14px;border-top:1px solid var(--line-2);}
1402
+
1403
+ /* responsive guard for narrow desktops / tablets — just tighten the columns */
1404
+ @media (min-width:761px) and (max-width:900px){
1405
+ .col-projects{flex-basis:200px;}
1406
+ .col-tasks{flex-basis:300px;}
1407
+ }
1408
+
1409
+ /* ============================== phone layout ==============================
1410
+ Below 760px the three columns can't coexist. Orchestrator mounts a single
1411
+ pane at a time (projects → tasks → session) and threads a back button into
1412
+ each header; this block makes that pane fill the screen, fattens hit targets
1413
+ to a thumb-friendly ~44px, and respects the notch / home-indicator insets. */
1414
+ @media (max-width:760px){
1415
+ /* The mounted pane is the only flex child of .body — let it fill the width.
1416
+ Column direction matters only for Settings, which mounts its section nav +
1417
+ content together; the other panes mount one child. !important beats the
1418
+ inline flex-basis the desktop resize drag writes. */
1419
+ .body.mobile{flex-direction:column;}
1420
+ .body.mobile > .col,
1421
+ .body.mobile > .settings-nav{flex:1 1 100% !important;width:100%;min-width:0;border-right:none;}
1422
+
1423
+ /* Titlebar: drop the identity chip and desktop actions (terminal/appearance aren't
1424
+ useful on a phone), keep the brand + the "needs you" pill reachable. Pad for
1425
+ the status bar / notch. */
1426
+ .app.mobile .titlebar{padding-top:env(safe-area-inset-top);height:calc(46px + env(safe-area-inset-top));padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right));}
1427
+ .app.mobile .tb-user,
1428
+ .app.mobile .tb-actions{display:none;}
1429
+ .app.mobile .needs-you-pill{height:34px;}
1430
+
1431
+ /* Back affordance — a 40px square chevron prepended to the tasks/session header. */
1432
+ .mobile-back{flex:0 0 auto;width:40px;height:40px;border-radius:var(--r-sm);display:grid;place-items:center;color:var(--ink-2);margin-right:2px;}
1433
+ .mobile-back:hover,.mobile-back:active{background:var(--surface-2);color:var(--ink);}
1434
+ .mobile-back svg{width:20px;height:20px;}
1435
+
1436
+ /* Fatten the column-header / list controls for touch. */
1437
+ .app.mobile .col-head{height:56px;}
1438
+ .app.mobile .icon-btn{width:40px;height:40px;}
1439
+ .app.mobile .proj{padding-top:12px;padding-bottom:12px;}
1440
+ .app.mobile .task{padding-top:11px;padding-bottom:11px;}
1441
+
1442
+ /* Session header: the model/reasoning/priority/status chips can't fit on one
1443
+ 390px row, so stack the title above a horizontally scrollable control rail. */
1444
+ .app.mobile .sess-head{flex-wrap:wrap;row-gap:8px;align-items:center;}
1445
+ .app.mobile .sh-main{flex:1 1 100%;order:1;}
1446
+ .app.mobile .mobile-back{order:0;}
1447
+ .app.mobile .sh-tools{order:2;flex:1 1 100%;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:2px;scrollbar-width:none;}
1448
+ .app.mobile .sh-tools::-webkit-scrollbar{display:none;}
1449
+ .app.mobile .sh-tools > *{flex:0 0 auto;}
1450
+ .app.mobile .status-ctl{height:36px;}
1451
+
1452
+ /* Composer: 16px text stops iOS from zooming on focus; pad out the bottom for
1453
+ the home indicator. The keyboard hints are mouse-era noise on a phone. */
1454
+ .app.mobile .composer{padding:10px 12px calc(12px + env(safe-area-inset-bottom));}
1455
+ .app.mobile .comp-area textarea{font-size:16px;}
1456
+ .app.mobile .comp-caption>span{display:none;}
1457
+ .app.mobile .send{width:40px;height:40px;}
1458
+
1459
+ /* Ask card options are tap targets — give them room. */
1460
+ .app.mobile .ask-opt{padding:10px 13px;}
1461
+ .app.mobile .ask-other{padding:11px;font-size:16px;}
1462
+
1463
+ /* Modals go near-fullscreen so their forms are usable. */
1464
+ .app.mobile .modal{width:100%;max-width:calc(100vw - 16px);max-height:calc(100dvh - 32px);}
1465
+ .app.mobile .field input[type=text],
1466
+ .app.mobile .field input[type=number],
1467
+ .app.mobile .field textarea{font-size:16px;}
1468
+
1469
+ /* Diff review: let long code lines scroll rather than blow out the layout. */
1470
+ .app.mobile .tc-hunks{overflow-x:auto;-webkit-overflow-scrolling:touch;}
1471
+
1472
+ /* Settings: stack the section nav above its content as a scrolling rail. */
1473
+ .app.mobile .settings-nav{flex:0 0 auto !important;border-right:none;border-bottom:1px solid var(--line);}
1474
+ .app.mobile .settings-nav-list{flex-direction:row;overflow-x:auto;-webkit-overflow-scrolling:touch;}
1475
+ .app.mobile .settings-nav-list .nav-item{flex:0 0 auto;}
1476
+ .app.mobile .settings-nav-foot{display:none;}
1477
+ }
1478
+
1479
+ /* ── First-run onboarding wizard ─────────────────────────────────────────── */
1480
+ .wiz-scrim{position:fixed;inset:0;background:rgba(38,36,31,.55);backdrop-filter:blur(4px);display:grid;place-items:center;z-index:300;animation:fadein .18s ease;padding:24px;}
1481
+ .wiz{display:flex;width:min(940px,100%);height:min(640px,calc(100vh - 48px));background:var(--panel);border:1px solid var(--line-strong);border-radius:var(--r-xl,16px);box-shadow:var(--sh-3);overflow:hidden;animation:pop .22s cubic-bezier(.2,.9,.3,1.2);}
1482
+ .wiz-rail{flex:0 0 230px;display:flex;flex-direction:column;gap:4px;padding:22px 18px;background:var(--panel-2);border-right:1px solid var(--line);}
1483
+ .wiz-brand{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px;letter-spacing:-.01em;}
1484
+ .wiz-brand .glyph{width:20px;height:20px;border-radius:6px;background:var(--accent);display:grid;place-items:center;color:#fff;}
1485
+ .wiz-brand .glyph svg{width:13px;height:13px;}
1486
+ .wiz-rail-sub{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);margin:3px 0 18px 1px;}
1487
+ .wiz-steps{display:flex;flex-direction:column;gap:2px;}
1488
+ .wiz-stepitem{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:var(--r);color:var(--ink-3);font-size:13px;font-weight:600;transition:background .12s,color .12s;}
1489
+ .wiz-stepitem.active{background:var(--accent-soft);color:var(--accent-ink);}
1490
+ .wiz-stepitem.done{color:var(--ink-2);}
1491
+ .wiz-stepnum{flex:0 0 22px;height:22px;display:grid;place-items:center;border-radius:50%;border:1.5px solid var(--line-strong);font-size:11px;}
1492
+ .wiz-stepnum svg{width:13px;height:13px;}
1493
+ .wiz-stepitem.active .wiz-stepnum{border-color:var(--accent);color:var(--accent-ink);}
1494
+ .wiz-stepitem.done .wiz-stepnum{border-color:var(--green,#5C8C5A);color:var(--green,#5C8C5A);}
1495
+ .wiz-skip{align-self:flex-start;}
1496
+ .wiz-main{flex:1;min-width:0;display:flex;flex-direction:column;}
1497
+ .wiz-head{padding:30px 34px 16px;border-bottom:1px solid var(--line);}
1498
+ .wiz-step-tag{font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-ink);margin-bottom:8px;}
1499
+ .wiz-title{font-size:21px;font-weight:700;letter-spacing:-.02em;}
1500
+ .wiz-sub{font-size:13px;color:var(--ink-2);line-height:1.55;margin-top:7px;max-width:560px;}
1501
+ .wiz-body{flex:1;min-height:0;padding:26px 34px;overflow-y:auto;}
1502
+ .wiz-body.wiz-scroll{padding-top:22px;}
1503
+ .wiz-foot{display:flex;align-items:center;gap:10px;padding:16px 34px;border-top:1px solid var(--line);}
1504
+ .wiz-foot .spacer{flex:1;}
1505
+ .wiz-connected{display:flex;align-items:flex-start;gap:12px;}
1506
+ .wiz-ok{flex:0 0 28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--accent-soft);color:var(--green,#5C8C5A);}
1507
+ .wiz-ok svg{width:16px;height:16px;}
1508
+ .wiz-ok-t{font-size:14px;font-weight:600;color:var(--ink);}
1509
+ /* connected-but-broken: same layout as .wiz-connected, warning voice */
1510
+ .wiz-warn{flex:0 0 28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--red-soft);color:var(--red);}
1511
+ .wiz-warn svg{width:16px;height:16px;}
1512
+ .wiz-connected.broken .wiz-ok-t{color:var(--red);}
1513
+ .wiz-connected.broken .hlp{font-family:var(--mono);font-size:11px;}
1514
+ .wiz-fail{display:flex;align-items:flex-start;gap:12px;}
1515
+ .wiz-failic{flex:0 0 28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--red-soft);color:var(--red);}
1516
+ .wiz-failic svg{width:16px;height:16px;}
1517
+ .wiz-verify{display:flex;align-items:center;gap:12px;font-size:14px;color:var(--ink-2);}
1518
+ .wiz-spin{width:18px;height:18px;border-radius:50%;border:2.5px solid var(--line-strong);border-top-color:var(--accent);animation:wizspin .7s linear infinite;flex:0 0 auto;}
1519
+ @keyframes wizspin{to{transform:rotate(360deg);}}
1520
+ .wiz-codecard{max-width:600px;border:1px solid var(--line-strong);border-radius:var(--r);background:var(--raise);padding:16px 18px;}
1521
+ .wiz-termlog{margin-top:10px;max-height:160px;overflow:auto;background:#15140f;color:#cfc8b8;font-family:var(--mono);font-size:11px;line-height:1.5;padding:10px 12px;border-radius:8px;white-space:pre-wrap;word-break:break-word;}
1522
+ .linkbtn{color:var(--accent-ink);font-weight:600;text-decoration:underline;text-underline-offset:2px;cursor:pointer;background:none;border:none;padding:0;font-size:inherit;}
1523
+ .linkbtn:hover{filter:brightness(1.1);}
1524
+ @media (max-width:760px){
1525
+ .wiz-scrim{padding:0;}
1526
+ .wiz{flex-direction:column;width:100%;height:100%;border-radius:0;border:none;}
1527
+ .wiz-rail{flex:0 0 auto;flex-direction:row;align-items:center;gap:10px;padding:12px 14px;overflow-x:auto;border-right:none;border-bottom:1px solid var(--line);}
1528
+ .wiz-rail-sub,.wiz-steplabel{display:none;}
1529
+ .wiz-brand{flex:0 0 auto;}
1530
+ .wiz-steps{flex-direction:row;flex:1;}
1531
+ .wiz-skip{flex:0 0 auto;}
1532
+ .wiz-head{padding:22px 18px 14px;}
1533
+ .wiz-title{font-size:18px;}
1534
+ .wiz-body{padding:18px;}
1535
+ .wiz-foot{padding:14px 18px;}
1536
+ }
1537
+
1538
+ /* ============ insights (usage dashboard — ported from the Claude Design mock) ============ */
1539
+ .insights{overflow-y:auto;background:var(--bg);}
1540
+ .in-wrap{width:100%;max-width:1440px;margin:0 auto;padding:24px 32px 60px;animation:fadein .25s ease both;}
1541
+ .in-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;flex-wrap:wrap;margin-bottom:22px;}
1542
+ .in-back{display:flex;align-items:center;gap:7px;font-size:11px;letter-spacing:.08em;color:var(--ink-3);background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:8px 12px;cursor:pointer;flex:0 0 auto;}
1543
+ .in-back:hover{border-color:var(--line-strong);color:var(--ink);}
1544
+ .in-title{font-size:24px;font-weight:700;color:var(--ink);letter-spacing:-.01em;line-height:1.1;}
1545
+ .in-sub{font-size:13px;color:var(--ink-3);margin-top:3px;}
1546
+ .in-sparse{display:flex;align-items:center;gap:7px;font-size:10px;letter-spacing:.06em;color:var(--amber);border:1px solid var(--amber-soft);background:var(--amber-soft);border-radius:5px;padding:6px 10px;}
1547
+
1548
+ .in-filters{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding-bottom:20px;margin-bottom:20px;border-bottom:1px solid var(--line);}
1549
+ .in-seg{display:flex;align-items:center;gap:2px;border:1px solid var(--line);border-radius:7px;padding:3px;background:var(--bg-2);}
1550
+ .in-seg button{font-family:var(--mono);font-size:12px;letter-spacing:.02em;font-weight:500;color:var(--ink-3);background:transparent;border:none;border-radius:5px;padding:7px 14px;cursor:pointer;}
1551
+ .in-seg button.on{color:var(--ink);background:var(--panel);}
1552
+ .in-dd{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--ink-2);background:var(--panel);border:1px solid var(--line);border-radius:7px;padding:8px 12px;cursor:pointer;min-width:160px;}
1553
+ .in-dd:hover{border-color:var(--line-strong);}
1554
+ .in-dd-k{font-size:9px;letter-spacing:.12em;color:var(--ink-4);}
1555
+ .in-dd-v{flex:1;text-align:left;font-weight:500;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
1556
+ .in-dd-c{color:var(--ink-4);font-size:10px;}
1557
+ .in-menu{position:absolute;z-index:20;top:calc(100% + 6px);left:0;min-width:220px;max-height:280px;overflow-y:auto;background:var(--panel);border:1px solid var(--line-strong);border-radius:8px;box-shadow:var(--sh-2, 0 18px 44px rgba(0,0,0,.4));padding:5px;}
1558
+ .in-menu button{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;text-align:left;font-size:13px;color:var(--ink-2);background:transparent;border:none;border-radius:5px;padding:9px 11px;cursor:pointer;font-weight:500;}
1559
+ .in-menu button:hover{background:var(--row-sel);}
1560
+ .in-menu button.on{color:var(--ink);background:var(--row-sel);}
1561
+ .in-menu-m{font-size:10px;color:var(--ink-4);}
1562
+ .in-clear{font-size:11px;color:var(--ink-4);background:transparent;border:none;cursor:pointer;padding:6px;}
1563
+ .in-clear:hover{color:var(--coral);}
1564
+
1565
+ .in-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(196px,1fr));gap:14px;margin-bottom:16px;}
1566
+ .in-kpi{border:1px solid var(--line);border-radius:10px;background:var(--panel);padding:15px 16px;display:flex;flex-direction:column;min-height:132px;}
1567
+ .in-kpi-h{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;}
1568
+ .in-kpi-l{font-size:10px;letter-spacing:.12em;color:var(--ink-3);text-transform:uppercase;}
1569
+ .in-kpi-d{display:flex;align-items:center;gap:3px;font-size:10.5px;}
1570
+ .kpi-big{font-size:27px;font-weight:700;color:var(--ink);letter-spacing:-.01em;line-height:1;}
1571
+ .kpi-lines{font-size:23px;font-weight:700;letter-spacing:-.01em;line-height:1;display:flex;gap:8px;align-items:baseline;}
1572
+ .in-kpi-s{font-size:11px;color:var(--ink-4);line-height:1.3;margin-top:3px;}
1573
+
1574
+ .in-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(440px,100%),1fr));gap:16px;margin-bottom:16px;}
1575
+ .in-card{border:1px solid var(--line);border-radius:11px;background:var(--panel);padding:17px 18px 14px;display:flex;flex-direction:column;gap:14px;}
1576
+ .in-card-h{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;}
1577
+ .in-card-t{font-size:14.5px;font-weight:600;color:var(--ink);}
1578
+ .in-card-s{font-size:11px;color:var(--ink-4);margin-top:2px;}
1579
+ .in-card-n{font-size:11px;color:var(--ink-2);}
1580
+ .in-legend{display:flex;gap:12px;flex-wrap:wrap;justify-content:flex-end;}
1581
+ .in-leg{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-3);}
1582
+ .in-leg-dot{width:9px;height:9px;flex:none;border-radius:2px;}
1583
+ .in-leg-btn{display:flex;align-items:center;gap:6px;padding:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;}
1584
+ .in-leg-btn:hover{color:var(--ink);}
1585
+ .in-xlab{position:absolute;transform:translateX(-50%);font-size:9.5px;color:var(--ink-4);white-space:nowrap;}
1586
+ .insights .dim{color:var(--ink-2);}
1587
+
1588
+ .in-tip{position:absolute;top:2px;z-index:6;pointer-events:none;min-width:150px;background:var(--panel-2);border:1px solid var(--line-strong);border-radius:7px;box-shadow:var(--sh-2, 0 10px 28px rgba(0,0,0,.4));padding:9px 11px;}
1589
+ .in-tip-t{font-family:var(--mono);font-size:9.5px;letter-spacing:.08em;color:var(--ink-4);margin-bottom:7px;}
1590
+ .in-tip-row{display:flex;align-items:center;gap:8px;margin-top:4px;}
1591
+ .in-tip-row:first-of-type{margin-top:0;}
1592
+ .in-tip-dot{width:8px;height:8px;flex:none;border-radius:2px;}
1593
+ .in-tip-l{flex:1;font-size:11.5px;color:var(--ink-3);}
1594
+ .in-tip-v{font-size:11.5px;color:var(--ink-2);}
1595
+ .in-tip-v.strong{font-weight:700;color:var(--ink);}
1596
+
1597
+ .in-switch-l{display:flex;align-items:center;gap:8px;cursor:pointer;user-select:none;font-size:10px;letter-spacing:.04em;color:var(--ink-3);}
1598
+ .in-switch{position:relative;width:34px;height:19px;border-radius:11px;border:1px solid var(--line-strong);background:var(--bg-2);cursor:pointer;padding:0;transition:background .15s;}
1599
+ .in-switch span{position:absolute;top:1px;left:1px;width:15px;height:15px;border-radius:50%;background:var(--ink-3);transition:left .15s;}
1600
+ .in-switch.on{background:var(--accent);}
1601
+ .in-switch.on span{left:16px;background:var(--on-accent);}
1602
+
1603
+ .in-provbar{display:flex;gap:2px;height:14px;width:100%;margin-bottom:18px;border-radius:4px;overflow:hidden;}
1604
+ .in-provtable{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:8px;overflow:hidden;}
1605
+ .in-provhead{display:grid;grid-template-columns:1.6fr 1fr .8fr .8fr;gap:12px;padding:9px 14px;background:var(--bg-2);font-size:9.5px;letter-spacing:.1em;color:var(--ink-4);}
1606
+ .in-provhead span:not(:first-child){text-align:right;}
1607
+ .in-provrow{display:grid;grid-template-columns:1.6fr 1fr .8fr .8fr;gap:12px;align-items:center;padding:13px 14px;background:var(--panel);border-top:1px solid var(--line-2);font-size:13px;}
1608
+ .in-provrow > .mono{text-align:right;}
1609
+ .in-provname{display:block;font-size:13.5px;font-weight:600;color:var(--ink);}
1610
+ .in-provmodels{display:block;font-size:10.5px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
1611
+
1612
+ .in-otable{display:flex;flex-direction:column;overflow-x:auto;border-top:1px solid var(--line);}
1613
+ .in-orow{display:grid;grid-template-columns:minmax(230px,1.7fr) .55fr .8fr .85fr .9fr .8fr;gap:12px;align-items:center;min-width:760px;padding:13px 20px;border-bottom:1px solid var(--line-2);font-size:12.5px;}
1614
+ .in-orow > .mono{text-align:right;}
1615
+ .in-ohead{padding-top:9px;padding-bottom:9px;background:var(--bg-2);font-size:9.5px;letter-spacing:.1em;color:var(--ink-4);}
1616
+ .in-ohead span:not(:first-child){text-align:right;}
1617
+ .in-oname{font-size:13.5px;font-weight:600;color:var(--ink);}
1618
+ .in-oscope{display:block;margin-top:2px;font-size:9.5px;color:var(--ink-4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
1619
+ .in-oavg{font-weight:700;color:var(--ink);}
1620
+ .in-olink{justify-self:end;padding:3px 0;border:0;background:transparent;color:var(--accent);font-family:var(--mono);font-size:10.5px;cursor:pointer;white-space:nowrap;}
1621
+ .in-olink:hover{text-decoration:underline;}
1622
+ .in-oempty{padding:18px 20px;color:var(--ink-3);font-size:12.5px;line-height:1.55;}
1623
+
1624
+ .in-ptable{display:flex;flex-direction:column;overflow-x:auto;}
1625
+ .in-prow{display:grid;grid-template-columns:1.8fr 1fr 1fr .9fr 1.2fr 1fr 132px;gap:12px;align-items:center;padding:14px 20px;min-width:760px;font-size:12.5px;}
1626
+ .in-prow > .mono{text-align:right;}
1627
+ .in-phead{padding:9px 20px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--bg-2);font-size:9.5px;letter-spacing:.1em;color:var(--ink-4);}
1628
+ .in-phead span:not(:first-child){text-align:right;}
1629
+ .in-pbtn{width:100%;text-align:left;border:none;border-bottom:1px solid var(--line-2);border-left:2px solid transparent;background:transparent;cursor:pointer;color:inherit;}
1630
+ .in-pbtn:hover{background:var(--row-sel);}
1631
+ .in-pbtn.sel{background:var(--row-sel);}
1632
+ .in-pname{font-size:13.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
1633
+ .in-pmore{width:100%;text-align:center;font-size:11px;letter-spacing:.06em;color:var(--ink-3);background:var(--bg-2);border:none;padding:12px;cursor:pointer;}
1634
+ .in-pmore:hover{color:var(--accent);}
1635
+
1636
+ .in-empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:18px;padding:70px 24px;border:1px dashed var(--line-strong);border-radius:14px;background:var(--panel-2);}
1637
+ .in-empty-bars{display:flex;align-items:flex-end;gap:6px;height:60px;opacity:.5;}
1638
+ .in-empty-bars span{width:12px;border-radius:2px;border:1px dashed var(--line-strong);}
1639
+ .in-empty-t{font-size:19px;font-weight:700;color:var(--ink);margin-bottom:9px;}
1640
+ .in-empty-s{font-size:14px;line-height:1.65;color:var(--ink-3);}
1641
+ .in-empty-f{font-size:10px;letter-spacing:.06em;color:var(--ink-4);}
1642
+
1643
+ @media (max-width:760px){
1644
+ .in-wrap{padding:16px 14px 40px;}
1645
+ .in-head{margin-bottom:16px;}
1646
+ .in-dd{min-width:0;flex:1;}
1647
+ }
1648
+
1649
+ /* ── Task browser (app/orchestrator/BrowserPane.tsx) ── */
1650
+ .bp{display:flex;flex-direction:column;gap:12px;}
1651
+ /* Keep each block at its natural height and let the rail scroll — otherwise a tall
1652
+ panel squeezes the live picture (overflow:hidden) down to nothing. */
1653
+ .bp > *{flex-shrink:0;}
1654
+ .bp-head{display:flex;align-items:center;gap:10px;}
1655
+ .bp-badge{font-family:var(--mono);font-size:10px;letter-spacing:.08em;padding:3px 8px;border-radius:999px;border:1px solid var(--line-strong);color:var(--ink-3);}
1656
+ .bp-badge.ai{border-color:var(--blue);color:var(--accent-ink);background:var(--blue-soft);}
1657
+ .bp-badge.human{border-color:var(--coral);color:var(--coral);background:var(--coral-soft);}
1658
+ .bp-meta{font-family:var(--mono);font-size:10px;color:var(--ink-4);}
1659
+ .bp-handoff{border:1px solid var(--coral);background:var(--coral-soft);border-radius:var(--r-sm);padding:10px 12px;font-size:12.5px;line-height:1.6;color:var(--ink);}
1660
+ .bp-handoff-sub{margin-top:4px;font-family:var(--mono);font-size:10.5px;color:var(--ink-3);}
1661
+ .bp-viewer{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--panel);box-shadow:var(--sh-2);position:relative;}
1662
+ .bp-chrome{gap:6px;}
1663
+ .bp-nav{width:24px;height:24px;border-radius:4px;color:var(--ink-3);font-size:15px;line-height:1;}
1664
+ .bp-nav:not(:disabled):hover{background:var(--surface-2);color:var(--ink);}
1665
+ .bp-nav:disabled{opacity:.35;cursor:default;}
1666
+ .bp-addr-form{flex:1;min-width:0;display:flex;}
1667
+ .bp-addr{width:100%;border:none;outline:none;}
1668
+ .bp-addr:read-only{cursor:default;}
1669
+ .bp-screen{position:relative;background:#fff;min-height:160px;}
1670
+ .bp-screen img{display:block;width:100%;height:auto;user-select:none;}
1671
+ .bp-screen.live img{cursor:pointer;outline:2px solid var(--coral);outline-offset:-2px;}
1672
+ .bp-empty{padding:48px 16px;text-align:center;font-family:var(--mono);font-size:11px;color:#667;}
1673
+ .bp-toast{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);background:rgba(8,10,14,.86);color:#f3f6fa;font-size:12px;padding:6px 12px;border-radius:6px;white-space:nowrap;}
1674
+ .bp-keys{position:absolute;left:-9999px;width:1px;height:1px;opacity:0;}
1675
+ .bp-actions{margin-top:0;}
1676
+ .bp-row{display:flex;align-items:center;gap:8px;}
1677
+ .bp-idle p{font-size:12.5px;line-height:1.7;color:var(--ink-2);margin:0 0 12px;}
1678
+ .bp-error{border:1px solid var(--red);background:var(--red-soft);color:var(--ink);border-radius:var(--r-sm);padding:8px 10px;font-size:12px;line-height:1.6;}
1679
+ .bp-popup-page{min-height:100vh;background:var(--bg-2);}
1680
+ .bp-popup{max-width:1400px;margin:0 auto;}
1681
+ .bp-logins{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--panel);}
1682
+ .bp-logins-head{width:100%;display:flex;align-items:center;gap:10px;padding:10px 12px;text-align:left;}
1683
+ .bp-logins-head:hover{background:var(--surface-2);}
1684
+ .bp-logins-body{border-top:1px solid var(--line);padding:10px 12px;display:flex;flex-direction:column;gap:6px;}
1685
+ .bp-logins-sub{font-family:var(--mono);font-size:10px;letter-spacing:.08em;color:var(--ink-3);margin-top:6px;}
1686
+ .bp-logins-row{display:flex;align-items:center;gap:10px;min-height:30px;}
1687
+ .bp-logins-name{flex:1;min-width:0;font-size:12.5px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1688
+ .bp-ok{border:1px solid var(--green);background:var(--green-soft);color:var(--ink);border-radius:var(--r-sm);padding:8px 10px;font-size:12px;line-height:1.6;}
1689
+ .bp-kept{border:1px solid var(--line-strong);background:var(--surface-2);border-radius:var(--r-sm);padding:10px 12px;font-size:12.5px;line-height:1.6;color:var(--ink-2);}
1690
+
1691
+ /* Keep usable chat width even when persisted sidebar widths exceed the window. */
1692
+ .body:not(.mobile)>.col-projects{max-width:24vw;}
1693
+ .body:not(.mobile)>.col-tasks{max-width:30vw;}
1694
+ .compact-session .sh-main{overflow:hidden;}
1695
+ .compact-session .crumb{flex-wrap:wrap;}
1696
+ .compact-session .sh-tools{min-width:0;max-width:100%;}
1697
+ .compact-session .viewseg{flex-shrink:0;}
1698
+
1699
+ .popover .pop-custom-row input{min-width:0;}
1700
+ .popover .pop-item>span:first-child{min-width:0;overflow-wrap:anywhere;}
1701
+
1702
+ @media(max-width:760px){
1703
+ .app.mobile .sh-main{flex:1 1 0;order:0;}
1704
+ .app.mobile .sess-head{padding:10px 12px;gap:8px;}
1705
+ .app.mobile .tb-right{gap:6px;}
1706
+ .app.mobile .needs-you-pill{white-space:nowrap;flex-shrink:0;font-size:11px;}
1707
+ .app.mobile .tb-avatar{display:none;}
1708
+ }
1709
+ @media(max-width:420px){.app.mobile .tb-word{display:none;}}
1710
+
1711
+ /* Chat navigation: a quiet title row, a separate view switch and contextual actions. */
1712
+ .sess-head{padding:14px 22px;gap:12px;flex-wrap:nowrap;}
1713
+ .sess-head .sh-main{min-width:0;}
1714
+ .sess-head .sh-title{font-size:18px;font-weight:600;}
1715
+ .session-project-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1716
+ .sess-head .sh-tools{gap:8px;flex-wrap:nowrap;flex-shrink:0;}
1717
+ .session-more{width:32px;height:32px;}
1718
+ .session-viewbar{display:flex;align-items:center;gap:16px;min-height:42px;padding:0 22px;border-bottom:1px solid var(--line-2);}
1719
+ .session-agent-label{color:var(--ink-3);font-size:12px;}
1720
+ .session-branch{margin-left:auto;min-width:0;display:flex;align-items:center;gap:6px;color:var(--ink-4);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1721
+ .session-viewbar .viewseg{flex-shrink:0;}
1722
+ .compact-session .sh-tools{flex-wrap:nowrap;}
1723
+ .composer{padding:16px 24px 12px;}
1724
+ .comp-box{border-radius:22px;}
1725
+ .comp-area{padding:18px 20px 10px;}
1726
+ .comp-toolbar{padding:4px 14px 12px;}
1727
+ .comp-setting{font-size:13px;}
1728
+ .comp-caption{font-size:11px;padding-top:9px;}
1729
+ .comp-caption button{font-size:11px;}
1730
+ .transcript .tw{max-width:800px;}
1731
+ .task-origin{display:flex;align-items:center;gap:5px;font-size:10px;color:var(--ink-3);padding-top:7px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1732
+ .fork-sources{display:flex;flex-wrap:wrap;gap:6px;padding:12px 14px 0;}
1733
+ .fork-sources>span{max-width:100%;display:flex;align-items:center;gap:6px;padding:6px 8px;border:1px solid var(--line);background:var(--surface-2);border-radius:8px;font-size:11px;color:var(--ink-2);overflow-wrap:anywhere;}
1734
+ .fork-sources button{display:grid;place-items:center;color:var(--ink-3);background:transparent;flex-shrink:0;}
1735
+ .mention-menu{position:absolute;bottom:calc(100% + 8px);left:0;right:0;z-index:30;max-height:min(320px,45vh);overflow:auto;border:1px solid var(--line-strong);border-radius:14px;background:var(--raise);box-shadow:var(--sh-3);}
1736
+ .mention-heading{position:sticky;top:0;display:flex;justify-content:space-between;padding:12px 14px;font-size:11px;color:var(--ink-3);background:var(--raise);border-bottom:1px solid var(--line);}
1737
+ .mention-menu>p{padding:14px;font-size:12px;color:var(--ink-3);line-height:1.6;}
1738
+ .mention-menu>button{display:flex;align-items:center;gap:10px;width:100%;padding:11px 14px;text-align:left;color:var(--ink);background:transparent;}
1739
+ .mention-menu>button:hover,.mention-menu>button[aria-selected=true]{background:var(--accent-soft);}
1740
+ .mention-menu>button>span{flex:1;min-width:0;}
1741
+ .mention-menu strong,.mention-menu small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1742
+ .mention-menu strong{font-size:13px;font-weight:500;}
1743
+ .mention-menu small{font-size:10px;color:var(--ink-3);margin-top:4px;}
1744
+ .branch-nav{margin:28px 0 24px;min-width:0;}
1745
+ .branch-ending{display:flex;align-items:center;gap:12px;margin-bottom:16px;color:var(--ink-3);font-size:11px;}
1746
+ .branch-ending::before,.branch-ending::after{content:"";height:1px;flex:1;background:var(--line-strong);}
1747
+ .branch-nav-head{display:flex;align-items:center;gap:6px;margin-bottom:10px;font-size:12px;color:var(--ink-2);}
1748
+ .branch-nav-head>span:first-child{display:flex;gap:6px;align-items:center;}
1749
+ .branch-nav-hint{margin-left:auto;font-size:10px;color:var(--ink-4);}
1750
+ .branch-nav-head .icon-btn{width:28px;height:28px;}
1751
+ .branch-cards{display:flex;gap:10px;overflow-x:auto;padding:1px 1px 5px;scroll-snap-type:x proximity;scrollbar-width:thin;overscroll-behavior-x:contain;}
1752
+ .branch-card{display:flex;flex-direction:column;gap:7px;flex:0 0 calc((100% - 10px)/2);min-width:148px;text-align:left;padding:12px;border-radius:12px;border:1px solid var(--line);background:var(--panel);color:var(--ink-2);scroll-snap-align:start;}
1753
+ .branch-card:only-child{flex-basis:100%;}
1754
+ .branch-card:hover{border-color:var(--line-strong);background:var(--row-sel);}
1755
+ .branch-card.selected{border-color:var(--accent);background:var(--accent-soft);}
1756
+ .branch-card-meta{display:flex;justify-content:space-between;gap:8px;font-size:10px;color:var(--ink-3);}
1757
+ .branch-card.selected .branch-card-meta{color:var(--accent);}
1758
+ .branch-card strong{font-size:13px;font-weight:500;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere;}
1759
+ .branch-card small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;color:var(--ink-3);}
1760
+ .flow-task-heading{display:flex;flex-direction:column;gap:6px;margin:4px 0 20px;}
1761
+ .flow-task-heading>span{font-size:10px;color:var(--ink-3);}
1762
+ .flow-task-heading strong,.flow-task-heading button{font-size:14px;font-weight:600;color:var(--ink);text-align:left;overflow-wrap:anywhere;}
1763
+ .flow-task-heading button{background:transparent;align-self:flex-start;}
1764
+ .flow-task-heading button:hover{color:var(--accent);}
1765
+ .flow-task-heading.current{border-left:2px solid var(--accent);padding-left:12px;}
1766
+ .flow-history-note{padding:12px;background:var(--surface-2);border-radius:8px;font-size:12px;color:var(--ink-3);line-height:1.6;}
1767
+ .flow-history-note pre{white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;max-height:240px;overflow:auto;}
1768
+ .flow-history-note summary{cursor:pointer;margin-top:8px;}
1769
+ .fork-merge-note{padding:12px 16px;color:var(--ink-3);font-size:11px;line-height:1.6;border-bottom:1px solid var(--line-2);overflow-wrap:anywhere;}
1770
+ .sess-responsive{flex:1;min-height:0;display:flex;flex-direction:column;}
1771
+ .sess-responsive>.sess-rail{flex:1;}
1772
+ @media(max-width:760px){
1773
+
1774
+ .app.mobile .tb-word{display:inline;font-size:12px;}
1775
+ .app.mobile .titlebar{height:calc(44px + env(safe-area-inset-top));}
1776
+ .app.mobile .workspace-menu{width:36px;height:36px;}
1777
+ .app.mobile .sess-head{padding:10px 12px;gap:8px;flex-wrap:nowrap;}
1778
+ .app.mobile .sh-main{flex:1;order:0;min-width:0;}
1779
+ .app.mobile .sh-tools{order:0;flex:0 0 auto;overflow:visible;padding:0;}
1780
+ .app.mobile .sh-title{font-size:16px;}
1781
+ .app.mobile .sh-edit{display:none;}
1782
+ .app.mobile .crumb{font-size:10px;flex-wrap:nowrap;}
1783
+ .app.mobile .mobile-back{width:28px;height:32px;}
1784
+ .app.mobile .status-ctl{padding:0 7px;height:30px;font-size:10px;gap:4px;}
1785
+ .app.mobile .session-more{width:28px;height:32px;}
1786
+ .app.mobile .session-viewbar{padding:0 14px;gap:8px;min-height:40px;}
1787
+ .app.mobile .session-branch{font-size:9px;}
1788
+ .app.mobile .branch-nav{margin:24px 0 20px;}
1789
+ .app.mobile .branch-card{padding:10px;}
1790
+ .app.mobile .branch-nav-hint{display:none;}
1791
+ .app.mobile .comp-setting{font-size:11px;}
1792
+ }
1793
+
1794
+ /* The responsive shell always owns all remaining vertical space. */
1795
+ .sess-responsive>.sess-main{flex:1;min-height:0;display:flex;flex-direction:column;}
1796
+ .sess-responsive>.sess-main[hidden]{display:none;}
1797
+
1798
+ @media(max-width:760px){.app.mobile .tb-icon:not(.workspace-menu){display:none;}}