@pennyfarthing/cyclist 10.4.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/dist/api/agent-load.d.ts +1 -2
  2. package/dist/api/agent-load.d.ts.map +1 -1
  3. package/dist/api/agent-load.js +2 -123
  4. package/dist/api/agent-load.js.map +1 -1
  5. package/dist/api/audit-log.d.ts +1 -17
  6. package/dist/api/audit-log.d.ts.map +1 -1
  7. package/dist/api/audit-log.js +2 -162
  8. package/dist/api/audit-log.js.map +1 -1
  9. package/dist/api/background-tasks.d.ts +1 -26
  10. package/dist/api/background-tasks.d.ts.map +1 -1
  11. package/dist/api/background-tasks.js +2 -55
  12. package/dist/api/background-tasks.js.map +1 -1
  13. package/dist/api/bell.d.ts +1 -18
  14. package/dist/api/bell.d.ts.map +1 -1
  15. package/dist/api/bell.js +2 -33
  16. package/dist/api/bell.js.map +1 -1
  17. package/dist/api/code-markers.d.ts +1 -8
  18. package/dist/api/code-markers.d.ts.map +1 -1
  19. package/dist/api/code-markers.js +2 -61
  20. package/dist/api/code-markers.js.map +1 -1
  21. package/dist/api/complexity.d.ts +1 -2
  22. package/dist/api/complexity.d.ts.map +1 -1
  23. package/dist/api/complexity.js +2 -46
  24. package/dist/api/complexity.js.map +1 -1
  25. package/dist/api/context.d.ts +1 -37
  26. package/dist/api/context.d.ts.map +1 -1
  27. package/dist/api/context.js +2 -143
  28. package/dist/api/context.js.map +1 -1
  29. package/dist/api/dead-code.d.ts +1 -2
  30. package/dist/api/dead-code.d.ts.map +1 -1
  31. package/dist/api/dead-code.js +2 -69
  32. package/dist/api/dead-code.js.map +1 -1
  33. package/dist/api/dependencies.d.ts +1 -2
  34. package/dist/api/dependencies.d.ts.map +1 -1
  35. package/dist/api/dependencies.js +2 -42
  36. package/dist/api/dependencies.js.map +1 -1
  37. package/dist/api/evaluation.d.ts +1 -19
  38. package/dist/api/evaluation.d.ts.map +1 -1
  39. package/dist/api/evaluation.js +2 -127
  40. package/dist/api/evaluation.js.map +1 -1
  41. package/dist/api/file-browser.d.ts +1 -8
  42. package/dist/api/file-browser.d.ts.map +1 -1
  43. package/dist/api/file-browser.js +2 -114
  44. package/dist/api/file-browser.js.map +1 -1
  45. package/dist/api/git.d.ts +1 -46
  46. package/dist/api/git.d.ts.map +1 -1
  47. package/dist/api/git.js +2 -354
  48. package/dist/api/git.js.map +1 -1
  49. package/dist/api/health-score.d.ts +1 -2
  50. package/dist/api/health-score.d.ts.map +1 -1
  51. package/dist/api/health-score.js +2 -46
  52. package/dist/api/health-score.js.map +1 -1
  53. package/dist/api/hook-request.d.ts +1 -40
  54. package/dist/api/hook-request.d.ts.map +1 -1
  55. package/dist/api/hook-request.js +2 -277
  56. package/dist/api/hook-request.js.map +1 -1
  57. package/dist/api/hotspots.d.ts +1 -2
  58. package/dist/api/hotspots.d.ts.map +1 -1
  59. package/dist/api/hotspots.js +2 -61
  60. package/dist/api/hotspots.js.map +1 -1
  61. package/dist/api/identity.d.ts +1 -16
  62. package/dist/api/identity.d.ts.map +1 -1
  63. package/dist/api/identity.js +2 -78
  64. package/dist/api/identity.js.map +1 -1
  65. package/dist/api/index.d.ts +1 -34
  66. package/dist/api/index.d.ts.map +1 -1
  67. package/dist/api/index.js +2 -44
  68. package/dist/api/index.js.map +1 -1
  69. package/dist/api/mode.d.ts +1 -22
  70. package/dist/api/mode.d.ts.map +1 -1
  71. package/dist/api/mode.js +2 -37
  72. package/dist/api/mode.js.map +1 -1
  73. package/dist/api/otlp.d.ts +1 -2
  74. package/dist/api/otlp.d.ts.map +1 -1
  75. package/dist/api/otlp.js +2 -46
  76. package/dist/api/otlp.js.map +1 -1
  77. package/dist/api/permissions.d.ts +1 -15
  78. package/dist/api/permissions.d.ts.map +1 -1
  79. package/dist/api/permissions.js +2 -66
  80. package/dist/api/permissions.js.map +1 -1
  81. package/dist/api/persona.d.ts +1 -8
  82. package/dist/api/persona.d.ts.map +1 -1
  83. package/dist/api/persona.js +2 -67
  84. package/dist/api/persona.js.map +1 -1
  85. package/dist/api/portrait.d.ts +1 -5
  86. package/dist/api/portrait.d.ts.map +1 -1
  87. package/dist/api/portrait.js +2 -27
  88. package/dist/api/portrait.js.map +1 -1
  89. package/dist/api/settings.d.ts +1 -53
  90. package/dist/api/settings.d.ts.map +1 -1
  91. package/dist/api/settings.js +2 -464
  92. package/dist/api/settings.js.map +1 -1
  93. package/dist/api/spans.d.ts +1 -16
  94. package/dist/api/spans.d.ts.map +1 -1
  95. package/dist/api/spans.js +2 -244
  96. package/dist/api/spans.js.map +1 -1
  97. package/dist/api/stats.d.ts +1 -12
  98. package/dist/api/stats.d.ts.map +1 -1
  99. package/dist/api/stats.js +2 -84
  100. package/dist/api/stats.js.map +1 -1
  101. package/dist/api/story.d.ts +1 -2
  102. package/dist/api/story.d.ts.map +1 -1
  103. package/dist/api/story.js +2 -14
  104. package/dist/api/story.js.map +1 -1
  105. package/dist/api/telemetry.d.ts +1 -18
  106. package/dist/api/telemetry.d.ts.map +1 -1
  107. package/dist/api/telemetry.js +2 -164
  108. package/dist/api/telemetry.js.map +1 -1
  109. package/dist/api/theme-agents.d.ts +1 -60
  110. package/dist/api/theme-agents.d.ts.map +1 -1
  111. package/dist/api/theme-agents.js +2 -213
  112. package/dist/api/theme-agents.js.map +1 -1
  113. package/dist/api/todos.d.ts +1 -32
  114. package/dist/api/todos.d.ts.map +1 -1
  115. package/dist/api/todos.js +2 -43
  116. package/dist/api/todos.js.map +1 -1
  117. package/dist/api/token-stats.d.ts +1 -7
  118. package/dist/api/token-stats.d.ts.map +1 -1
  119. package/dist/api/token-stats.js +2 -35
  120. package/dist/api/token-stats.js.map +1 -1
  121. package/dist/api/welcome.d.ts +1 -21
  122. package/dist/api/welcome.d.ts.map +1 -1
  123. package/dist/api/welcome.js +2 -34
  124. package/dist/api/welcome.js.map +1 -1
  125. package/dist/bikerack.js +2 -2
  126. package/dist/bikerack.js.map +1 -1
  127. package/dist/env.d.ts +6 -0
  128. package/dist/env.d.ts.map +1 -0
  129. package/dist/env.js +10 -0
  130. package/dist/env.js.map +1 -0
  131. package/dist/focus.d.ts +53 -0
  132. package/dist/focus.d.ts.map +1 -0
  133. package/dist/focus.js +122 -0
  134. package/dist/focus.js.map +1 -0
  135. package/dist/git-cache.d.ts +1 -0
  136. package/dist/git-cache.d.ts.map +1 -1
  137. package/dist/git-cache.js +3 -1
  138. package/dist/git-cache.js.map +1 -1
  139. package/dist/menu-builder.d.ts.map +1 -1
  140. package/dist/menu-builder.js +0 -1
  141. package/dist/menu-builder.js.map +1 -1
  142. package/dist/prime.d.ts +3 -3
  143. package/dist/prime.d.ts.map +1 -1
  144. package/dist/prime.js +38 -14
  145. package/dist/prime.js.map +1 -1
  146. package/dist/public/css/react.css +1 -1
  147. package/dist/public/js/react/react.js +53 -61
  148. package/dist/server.d.ts +18 -85
  149. package/dist/server.d.ts.map +1 -1
  150. package/dist/server.js +105 -405
  151. package/dist/server.js.map +1 -1
  152. package/dist/sprint-data.d.ts +1 -1
  153. package/dist/sprint-data.d.ts.map +1 -1
  154. package/dist/sprint-data.js +2 -2
  155. package/dist/sprint-data.js.map +1 -1
  156. package/dist/theme-metadata.d.ts +3 -3
  157. package/dist/theme-metadata.d.ts.map +1 -1
  158. package/dist/theme-metadata.js +4 -4
  159. package/dist/theme-metadata.js.map +1 -1
  160. package/dist/websocket.d.ts +2 -0
  161. package/dist/websocket.d.ts.map +1 -1
  162. package/dist/websocket.js +53 -75
  163. package/dist/websocket.js.map +1 -1
  164. package/package.json +2 -6
  165. package/portraits/hogans-heroes/large/burkhalter-35312.png +0 -0
  166. package/portraits/hogans-heroes/large/carter-34352.png +0 -0
  167. package/portraits/hogans-heroes/large/hochstetter-45314.png +0 -0
  168. package/portraits/hogans-heroes/large/hogan-44541.png +0 -0
  169. package/portraits/hogans-heroes/large/kinch-35241.png +0 -0
  170. package/portraits/hogans-heroes/large/klink-23434.png +0 -0
  171. package/portraits/hogans-heroes/large/lebeau-45443.png +0 -0
  172. package/portraits/hogans-heroes/large/marya-53543.png +0 -0
  173. package/portraits/hogans-heroes/large/newkirk-54432.png +0 -0
  174. package/portraits/hogans-heroes/large/schultz-42453.png +0 -0
  175. package/portraits/hogans-heroes/large/underground-55131.png +0 -0
  176. package/portraits/hogans-heroes/medium/burkhalter-35312.png +0 -0
  177. package/portraits/hogans-heroes/medium/carter-34352.png +0 -0
  178. package/portraits/hogans-heroes/medium/hochstetter-45314.png +0 -0
  179. package/portraits/hogans-heroes/medium/hogan-44541.png +0 -0
  180. package/portraits/hogans-heroes/medium/kinch-35241.png +0 -0
  181. package/portraits/hogans-heroes/medium/klink-23434.png +0 -0
  182. package/portraits/hogans-heroes/medium/lebeau-45443.png +0 -0
  183. package/portraits/hogans-heroes/medium/marya-53543.png +0 -0
  184. package/portraits/hogans-heroes/medium/newkirk-54432.png +0 -0
  185. package/portraits/hogans-heroes/medium/schultz-42453.png +0 -0
  186. package/portraits/hogans-heroes/medium/underground-55131.png +0 -0
  187. package/portraits/monty-python/large/announcer-44441.png +0 -0
  188. package/portraits/monty-python/large/arguer-35412.png +0 -0
  189. package/portraits/monty-python/large/bicycle-repair-man-35241.png +0 -0
  190. package/portraits/monty-python/large/colonel-35423.png +0 -0
  191. package/portraits/monty-python/large/counsellor-45341.png +0 -0
  192. package/portraits/monty-python/large/gumbys-23524.png +0 -0
  193. package/portraits/monty-python/large/nudge-43533.png +0 -0
  194. package/portraits/monty-python/large/praline-45413.png +0 -0
  195. package/portraits/monty-python/large/silly-walks-55322.png +0 -0
  196. package/portraits/monty-python/large/wensleydale-54451.png +0 -0
  197. package/portraits/monty-python/large/xim-nez-43534.png +0 -0
  198. package/portraits/monty-python/medium/announcer-44441.png +0 -0
  199. package/portraits/monty-python/medium/arguer-35412.png +0 -0
  200. package/portraits/monty-python/medium/bicycle-repair-man-35241.png +0 -0
  201. package/portraits/monty-python/medium/colonel-35423.png +0 -0
  202. package/portraits/monty-python/medium/counsellor-45341.png +0 -0
  203. package/portraits/monty-python/medium/gumbys-23524.png +0 -0
  204. package/portraits/monty-python/medium/nudge-43533.png +0 -0
  205. package/portraits/monty-python/medium/praline-45413.png +0 -0
  206. package/portraits/monty-python/medium/silly-walks-55322.png +0 -0
  207. package/portraits/monty-python/medium/wensleydale-54451.png +0 -0
  208. package/portraits/monty-python/medium/xim-nez-43534.png +0 -0
  209. package/portraits/stephen-king/large/andy-55231.png +0 -0
  210. package/portraits/stephen-king/large/christine-25112.png +0 -0
  211. package/portraits/stephen-king/large/danny-53243.png +0 -0
  212. package/portraits/stephen-king/large/flagg-55311.png +0 -0
  213. package/portraits/stephen-king/large/gaunt-54421.png +0 -0
  214. package/portraits/stephen-king/large/jack-44224.png +0 -0
  215. package/portraits/stephen-king/large/johnny-44353.png +0 -0
  216. package/portraits/stephen-king/large/margaret-15415.png +0 -0
  217. package/portraits/stephen-king/large/paul-45233.png +0 -0
  218. package/portraits/stephen-king/large/pennywise-54411.png +0 -0
  219. package/portraits/stephen-king/large/roland-35121.png +0 -0
  220. package/portraits/stephen-king/medium/andy-55231.png +0 -0
  221. package/portraits/stephen-king/medium/christine-25112.png +0 -0
  222. package/portraits/stephen-king/medium/danny-53243.png +0 -0
  223. package/portraits/stephen-king/medium/flagg-55311.png +0 -0
  224. package/portraits/stephen-king/medium/gaunt-54421.png +0 -0
  225. package/portraits/stephen-king/medium/jack-44224.png +0 -0
  226. package/portraits/stephen-king/medium/johnny-44353.png +0 -0
  227. package/portraits/stephen-king/medium/margaret-15415.png +0 -0
  228. package/portraits/stephen-king/medium/paul-45233.png +0 -0
  229. package/portraits/stephen-king/medium/pennywise-54411.png +0 -0
  230. package/portraits/stephen-king/medium/roland-35121.png +0 -0
  231. package/portraits/star-trek-tng/large/beverly-44352.png +0 -0
  232. package/portraits/star-trek-tng/large/data-55241.png +0 -0
  233. package/portraits/star-trek-tng/large/deanna-43353.png +0 -0
  234. package/portraits/star-trek-tng/large/geordi-54342.png +0 -0
  235. package/portraits/star-trek-tng/large/jean-luc-45342.png +0 -0
  236. package/portraits/star-trek-tng/large/kathryn-45332.png +0 -0
  237. package/portraits/star-trek-tng/large/miles-35342.png +0 -0
  238. package/portraits/star-trek-tng/large/q-53521.png +0 -0
  239. package/portraits/star-trek-tng/large/spock-45231.png +0 -0
  240. package/portraits/star-trek-tng/large/troi-44352.png +0 -0
  241. package/portraits/star-trek-tng/medium/beverly-44352.png +0 -0
  242. package/portraits/star-trek-tng/medium/data-55241.png +0 -0
  243. package/portraits/star-trek-tng/medium/deanna-43353.png +0 -0
  244. package/portraits/star-trek-tng/medium/geordi-54342.png +0 -0
  245. package/portraits/star-trek-tng/medium/jean-luc-45342.png +0 -0
  246. package/portraits/star-trek-tng/medium/kathryn-45332.png +0 -0
  247. package/portraits/star-trek-tng/medium/miles-35342.png +0 -0
  248. package/portraits/star-trek-tng/medium/q-53521.png +0 -0
  249. package/portraits/star-trek-tng/medium/spock-45231.png +0 -0
  250. package/portraits/star-trek-tng/medium/troi-44352.png +0 -0
  251. package/src/public/App.tsx +0 -340
  252. package/src/public/components/AgentLoadDialog.tsx +0 -202
  253. package/src/public/components/AgentPopup.tsx +0 -308
  254. package/src/public/components/ApprovalModal/ApprovalModal.css +0 -35
  255. package/src/public/components/ApprovalModal/index.tsx +0 -632
  256. package/src/public/components/BikeRackIndex.tsx +0 -54
  257. package/src/public/components/BikeRackWorkspace.tsx +0 -142
  258. package/src/public/components/CommandPalette.tsx +0 -555
  259. package/src/public/components/ConfirmDialog.tsx +0 -168
  260. package/src/public/components/ContextIndicator/ContextIndicator.css +0 -85
  261. package/src/public/components/ContextIndicator/index.tsx +0 -330
  262. package/src/public/components/ContextSparkline.tsx +0 -56
  263. package/src/public/components/ControlBar.tsx +0 -636
  264. package/src/public/components/DeadCodeDialog.tsx +0 -169
  265. package/src/public/components/DiffViewer.tsx +0 -585
  266. package/src/public/components/DockviewWorkspace.tsx +0 -737
  267. package/src/public/components/Editor.tsx +0 -630
  268. package/src/public/components/ErrorBoundary.tsx +0 -67
  269. package/src/public/components/FileTree.tsx +0 -379
  270. package/src/public/components/FontPicker/FontPicker.css +0 -276
  271. package/src/public/components/FontPicker/index.tsx +0 -430
  272. package/src/public/components/FullFileTree.tsx +0 -237
  273. package/src/public/components/HealthGauge.tsx +0 -181
  274. package/src/public/components/Message.tsx +0 -225
  275. package/src/public/components/MessageList.tsx +0 -98
  276. package/src/public/components/MessageView.tsx +0 -400
  277. package/src/public/components/ModeSwitch/ModeSwitch.css +0 -165
  278. package/src/public/components/ModeSwitch/index.tsx +0 -372
  279. package/src/public/components/PersonaHeader.tsx +0 -240
  280. package/src/public/components/QuickActions.tsx +0 -267
  281. package/src/public/components/SpanTimeline.tsx +0 -352
  282. package/src/public/components/StandalonePanel.tsx +0 -84
  283. package/src/public/components/StatsStrip.tsx +0 -162
  284. package/src/public/components/StreamingContent.tsx +0 -77
  285. package/src/public/components/SubagentSpan.tsx +0 -180
  286. package/src/public/components/TandemPortrait.tsx +0 -72
  287. package/src/public/components/ThemePalette/ThemePalette.css +0 -179
  288. package/src/public/components/ThemePalette/index.tsx +0 -326
  289. package/src/public/components/ToolCallBlock.tsx +0 -252
  290. package/src/public/components/ToolStack.tsx +0 -209
  291. package/src/public/components/ToolStatus.tsx +0 -57
  292. package/src/public/components/dialogs/CodeMarkersDialog.tsx +0 -169
  293. package/src/public/components/dialogs/ComplexityDialog.tsx +0 -163
  294. package/src/public/components/dialogs/DependenciesDialog.tsx +0 -120
  295. package/src/public/components/dialogs/HotspotsDialog.tsx +0 -451
  296. package/src/public/components/dialogs/ToolDialog.tsx +0 -43
  297. package/src/public/components/panel-registry.ts +0 -11
  298. package/src/public/components/panels/ACPanel.tsx +0 -93
  299. package/src/public/components/panels/AcceptanceCriteriaPanel.tsx +0 -104
  300. package/src/public/components/panels/AuditLogPanel.tsx +0 -465
  301. package/src/public/components/panels/BackgroundPanel.tsx +0 -115
  302. package/src/public/components/panels/BikeLanePanel.tsx +0 -214
  303. package/src/public/components/panels/ChangedPanel.tsx +0 -65
  304. package/src/public/components/panels/DebugPanel.tsx +0 -344
  305. package/src/public/components/panels/DiffsPanel.tsx +0 -155
  306. package/src/public/components/panels/GitPanel.tsx +0 -216
  307. package/src/public/components/panels/HotspotsPanel.tsx +0 -365
  308. package/src/public/components/panels/MessagePanel.tsx +0 -497
  309. package/src/public/components/panels/SettingsPanel.tsx +0 -453
  310. package/src/public/components/panels/SprintPanel.tsx +0 -670
  311. package/src/public/components/panels/TTYPanel.tsx +0 -299
  312. package/src/public/components/panels/TodoPanel.tsx +0 -142
  313. package/src/public/components/panels/WorkflowPanel.tsx +0 -224
  314. package/src/public/components/panels/index.ts +0 -24
  315. package/src/public/components/ui/alert-dialog.tsx +0 -139
  316. package/src/public/components/ui/badge.tsx +0 -36
  317. package/src/public/components/ui/button.tsx +0 -57
  318. package/src/public/components/ui/checkbox.tsx +0 -28
  319. package/src/public/components/ui/collapsible.tsx +0 -9
  320. package/src/public/components/ui/command.tsx +0 -151
  321. package/src/public/components/ui/dialog.tsx +0 -120
  322. package/src/public/components/ui/popover.tsx +0 -31
  323. package/src/public/components/ui/progress.tsx +0 -28
  324. package/src/public/components/ui/scroll-area.tsx +0 -46
  325. package/src/public/components/ui/select.tsx +0 -157
  326. package/src/public/components/ui/separator.tsx +0 -29
  327. package/src/public/components/ui/skeleton.tsx +0 -15
  328. package/src/public/components/ui/switch.tsx +0 -27
  329. package/src/public/components/ui/toggle-group.tsx +0 -59
  330. package/src/public/components/ui/toggle.tsx +0 -43
  331. package/src/public/components/ui/tooltip.tsx +0 -30
  332. package/src/public/contexts/ClaudeContext.tsx +0 -311
  333. package/src/public/contexts/MessageQueueContext.tsx +0 -143
  334. package/src/public/css/theme-browser.css +0 -550
  335. package/src/public/css/theme-system.css +0 -630
  336. package/src/public/hooks/index.ts +0 -49
  337. package/src/public/hooks/useAgentLoad.ts +0 -105
  338. package/src/public/hooks/useBackgroundTasks.ts +0 -131
  339. package/src/public/hooks/useClaude.ts +0 -234
  340. package/src/public/hooks/useCodeMarkers.ts +0 -101
  341. package/src/public/hooks/useColorScheme.ts +0 -42
  342. package/src/public/hooks/useCommandHistory.ts +0 -99
  343. package/src/public/hooks/useComplexity.ts +0 -80
  344. package/src/public/hooks/useDeadCode.ts +0 -99
  345. package/src/public/hooks/useDependencies.ts +0 -82
  346. package/src/public/hooks/useDiffs.ts +0 -143
  347. package/src/public/hooks/useFileBrowser.ts +0 -71
  348. package/src/public/hooks/useGitStatus.ts +0 -233
  349. package/src/public/hooks/useHealthScore.ts +0 -69
  350. package/src/public/hooks/useHotspots.ts +0 -123
  351. package/src/public/hooks/useLayoutPersistence.ts +0 -138
  352. package/src/public/hooks/useMarkdownParser.ts +0 -36
  353. package/src/public/hooks/useMarkerActions.ts +0 -234
  354. package/src/public/hooks/useMessageQueue.ts +0 -380
  355. package/src/public/hooks/useMessageStream.ts +0 -131
  356. package/src/public/hooks/usePersona.ts +0 -112
  357. package/src/public/hooks/usePlanModeExit.ts +0 -105
  358. package/src/public/hooks/useResponsiveLayout.ts +0 -173
  359. package/src/public/hooks/useSprint.ts +0 -147
  360. package/src/public/hooks/useStatsStrip.ts +0 -204
  361. package/src/public/hooks/useStory.ts +0 -135
  362. package/src/public/hooks/useSubagentHelper.ts +0 -64
  363. package/src/public/hooks/useSyntaxHighlighter.ts +0 -52
  364. package/src/public/hooks/useTabCompletion.ts +0 -124
  365. package/src/public/hooks/useTodos.ts +0 -93
  366. package/src/public/hooks/useUserAvatar.ts +0 -54
  367. package/src/public/index.tsx +0 -10
  368. package/src/public/lib/utils.ts +0 -6
  369. package/src/public/styles/dockview-theme.css +0 -459
  370. package/src/public/styles/tailwind.css +0 -4396
  371. package/src/public/types/electron.d.ts +0 -18
  372. package/src/public/types/message.ts +0 -51
  373. package/src/public/utils/avatar-service.ts +0 -73
  374. package/src/public/utils/color-presets.ts +0 -940
  375. package/src/public/utils/font-presets.ts +0 -362
  376. package/src/public/utils/formatDuration.ts +0 -14
  377. package/src/public/utils/markdown.ts +0 -249
  378. package/src/public/utils/messageFilters.ts +0 -128
  379. package/src/public/utils/slash-commands.ts +0 -353
  380. package/src/public/utils/subagent-display.ts +0 -146
  381. package/src/public/utils/syntax.ts +0 -219
  382. package/src/public/utils/toolIntentSummarizer.ts +0 -199
  383. package/src/public/utils/toolStackGrouper.ts +0 -106
  384. package/src/public/utils/toolTypeColors.ts +0 -45
@@ -1,4396 +0,0 @@
1
- /* Tailwind CSS for Cyclist React components */
2
-
3
- @import "tailwindcss";
4
- @config "../../../tailwind.config.js";
5
-
6
- /* =============================================================================
7
- Docking Workspace Styles
8
- ============================================================================= */
9
-
10
- /* Screen reader only — visually hidden but accessible */
11
- .visually-hidden {
12
- position: absolute;
13
- width: 1px;
14
- height: 1px;
15
- padding: 0;
16
- margin: -1px;
17
- overflow: hidden;
18
- clip: rect(0, 0, 0, 0);
19
- white-space: nowrap;
20
- border: 0;
21
- }
22
-
23
- .cyclist-app {
24
- position: absolute;
25
- top: 0;
26
- left: 0;
27
- right: 0;
28
- bottom: 0;
29
- display: flex;
30
- flex-direction: column;
31
- background: var(--bg-primary, #1e1e1e);
32
- color: var(--text-primary, #d4d4d4);
33
- font-family: var(--font-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);
34
- font-size: var(--font-size-ui, 1rem);
35
- }
36
-
37
- /* Main element needs to fill the flex container */
38
- .cyclist-app > main {
39
- display: flex;
40
- flex: 1;
41
- min-height: 0;
42
- }
43
-
44
- .docking-workspace {
45
- display: flex;
46
- flex: 1;
47
- overflow: hidden;
48
- }
49
-
50
- /* Sidebar styling */
51
- .sidebar {
52
- position: relative;
53
- display: flex;
54
- flex-direction: column;
55
- background: var(--bg-secondary, #252526);
56
- border-color: var(--border-color, #3c3c3c);
57
- overflow: hidden;
58
- transition: width 0.2s ease;
59
- height: 100%;
60
- min-height: 0;
61
- }
62
-
63
- .sidebar-left {
64
- border-right: 1px solid var(--border-color, #3c3c3c);
65
- }
66
-
67
- .sidebar-right {
68
- border-left: 1px solid var(--border-color, #3c3c3c);
69
- }
70
-
71
- .sidebar[data-collapsed="true"] {
72
- /* Use min-width for toggle visibility instead of 0 */
73
- width: 32px !important;
74
- min-width: 32px;
75
- }
76
-
77
- /* Hide content but keep toggle visible when collapsed */
78
- .sidebar[data-collapsed="true"] .tablist,
79
- .sidebar[data-collapsed="true"] .panel {
80
- display: none;
81
- }
82
-
83
- /* Style collapse toggle when collapsed - make it fill the narrow strip */
84
- .sidebar[data-collapsed="true"] .collapse-toggle {
85
- position: absolute;
86
- top: 50%;
87
- transform: translateY(-50%);
88
- bottom: auto;
89
- padding: 8px 4px;
90
- }
91
-
92
- /* Tablist styling */
93
- .tablist {
94
- display: flex;
95
- flex-wrap: wrap;
96
- gap: 2px;
97
- padding: 4px;
98
- background: var(--bg-tertiary, #2d2d2d);
99
- border-bottom: 1px solid var(--border-color, #3c3c3c);
100
- }
101
-
102
- .tab {
103
- display: flex;
104
- align-items: center;
105
- gap: 4px;
106
- padding: 4px 8px;
107
- background: transparent;
108
- border: none;
109
- color: var(--text-secondary, #8b8b8b);
110
- cursor: pointer;
111
- font-size: 0.75rem;
112
- text-transform: uppercase;
113
- letter-spacing: 0.05em;
114
- transition: all 0.15s ease;
115
- }
116
-
117
- .tab:hover {
118
- color: var(--text-primary, #d4d4d4);
119
- background: var(--bg-hover, #3c3c3c);
120
- }
121
-
122
- .tab.active {
123
- color: var(--accent-color, #007acc);
124
- background: var(--bg-active, #37373d);
125
- }
126
-
127
- .tab.dragging {
128
- opacity: 0.5;
129
- }
130
-
131
- /* Drag handle */
132
- .drag-handle {
133
- opacity: 0.4;
134
- font-size: 0.6rem;
135
- cursor: grab;
136
- }
137
-
138
- .drag-handle:hover {
139
- opacity: 0.8;
140
- }
141
-
142
- .drag-handle.dragging {
143
- cursor: grabbing;
144
- }
145
-
146
- /* Tab drop targets */
147
- .tab-drop-target {
148
- width: 4px;
149
- height: 24px;
150
- margin: 0 -2px;
151
- transition: background 0.15s ease;
152
- }
153
-
154
- .tab-drop-target.tab-insertion-indicator {
155
- background: var(--accent-color, #007acc);
156
- }
157
-
158
- /* Panel content */
159
- .panel {
160
- flex: 1;
161
- min-height: 0; /* Allow flex child to shrink below content size */
162
- overflow: auto;
163
- padding: 8px;
164
- }
165
-
166
- /* Message panel needs special flex handling - no padding, full height */
167
- .panel.panel-message {
168
- display: flex;
169
- flex-direction: column;
170
- padding: 0;
171
- overflow: hidden;
172
- }
173
-
174
- .panel[hidden] {
175
- display: none;
176
- }
177
-
178
- .panel-content {
179
- height: 100%;
180
- overflow: auto;
181
- }
182
-
183
- /* Center region */
184
- .center-region {
185
- flex: 1;
186
- display: flex;
187
- flex-direction: column;
188
- background: var(--bg-primary, #1e1e1e);
189
- overflow: hidden;
190
- height: 100%;
191
- min-height: 0;
192
- }
193
-
194
- .center-region.drop-zone-rejected {
195
- background: rgba(255, 0, 0, 0.1);
196
- }
197
-
198
- /* Drop zone active state */
199
- .drop-zone-active {
200
- background: rgba(0, 122, 204, 0.1) !important;
201
- }
202
-
203
- /* Resize handles */
204
- .resize-handle {
205
- width: 4px;
206
- background: transparent;
207
- cursor: col-resize;
208
- transition: background 0.15s ease;
209
- }
210
-
211
- .resize-handle:hover {
212
- background: var(--accent-color, #007acc);
213
- }
214
-
215
- /* Collapse toggle buttons */
216
- .collapse-toggle {
217
- position: absolute;
218
- bottom: 8px;
219
- padding: 4px 8px;
220
- background: var(--bg-tertiary, #2d2d2d);
221
- border: 1px solid var(--border-color, #3c3c3c);
222
- border-radius: 4px;
223
- color: var(--text-secondary, #8b8b8b);
224
- cursor: pointer;
225
- font-size: 0.75rem;
226
- transition: all 0.15s ease;
227
- }
228
-
229
- .sidebar-left .collapse-toggle {
230
- right: 8px;
231
- }
232
-
233
- .sidebar-right .collapse-toggle {
234
- left: 8px;
235
- }
236
-
237
- .collapse-toggle:hover {
238
- color: var(--text-primary, #d4d4d4);
239
- background: var(--bg-hover, #3c3c3c);
240
- }
241
-
242
- /* Drag ghost */
243
- .drag-ghost {
244
- padding: 4px 8px;
245
- background: var(--bg-tertiary, #2d2d2d);
246
- border: 1px solid var(--accent-color, #007acc);
247
- border-radius: 4px;
248
- color: var(--text-primary, #d4d4d4);
249
- font-size: 0.75rem;
250
- pointer-events: none;
251
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
252
- }
253
-
254
- /* Placeholder panels */
255
- .sprint-placeholder,
256
- .progress-placeholder,
257
- .background-placeholder,
258
- .git-placeholder,
259
- .settings-placeholder,
260
- .debug-placeholder {
261
- display: flex;
262
- align-items: center;
263
- justify-content: center;
264
- height: 100%;
265
- color: var(--text-secondary, #8b8b8b);
266
- font-size: 0.875rem;
267
- }
268
-
269
- /* =============================================================================
270
- PersonaHeader Component Styles
271
- ============================================================================= */
272
-
273
- .persona-header {
274
- display: flex;
275
- align-items: center;
276
- gap: 12px;
277
- padding: 8px 12px;
278
- background: var(--bg-secondary, #252526);
279
- border-bottom: 1px solid var(--border-color, #3c3c3c);
280
- flex-shrink: 0;
281
- position: relative;
282
- overflow: visible;
283
- min-width: 0;
284
- }
285
-
286
- .persona-header.empty {
287
- display: none;
288
- }
289
-
290
- .persona-header.clickable {
291
- cursor: pointer;
292
- border-radius: 6px;
293
- transition: background 0.15s;
294
- }
295
-
296
- .persona-header.clickable:hover {
297
- background: var(--hover-color, rgba(255, 255, 255, 0.05));
298
- }
299
-
300
- .persona-header.clickable:focus-visible {
301
- outline: 2px solid var(--accent-color, #007acc);
302
- outline-offset: 2px;
303
- }
304
-
305
- /* Portrait group: portrait + tandem positioned together */
306
- .persona-portrait-group {
307
- container-type: inline-size;
308
- container-name: portrait-group;
309
- display: flex;
310
- flex-direction: column;
311
- align-items: flex-start;
312
- gap: 8px;
313
- flex-shrink: 0;
314
- width: 100px;
315
- }
316
-
317
- /* Container query: hide backseat portrait when panel is narrow */
318
- @container portrait-group (max-width: 180px) {
319
- .persona-tandem-portrait {
320
- display: none;
321
- }
322
- }
323
-
324
- .persona-portrait {
325
- width: 100px;
326
- height: 100px;
327
- border-radius: 50%;
328
- overflow: hidden;
329
- flex-shrink: 0;
330
- min-width: 48px;
331
- min-height: 48px;
332
- aspect-ratio: 1;
333
- background: var(--bg-tertiary, #2d2d2d);
334
- display: flex;
335
- align-items: center;
336
- justify-content: center;
337
- transition: width 0.2s ease, height 0.2s ease;
338
- }
339
-
340
- .persona-portrait .portrait-image {
341
- width: 100%;
342
- height: 100%;
343
- object-fit: cover;
344
- }
345
-
346
- .persona-portrait .portrait-fallback {
347
- font-size: 1.5rem;
348
- }
349
-
350
- /* Role badge inline in name row */
351
- .persona-name-row .persona-role.badge {
352
- padding: 1px 6px;
353
- color: #fff;
354
- font-size: 0.6rem;
355
- border-radius: 8px;
356
- text-transform: uppercase;
357
- font-weight: 600;
358
- white-space: nowrap;
359
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
360
- flex-shrink: 0;
361
- }
362
-
363
- .persona-info {
364
- display: flex;
365
- flex-direction: column;
366
- gap: 2px;
367
- flex: 1;
368
- min-width: 0;
369
- width: 0;
370
- overflow: hidden;
371
- }
372
-
373
- .persona-branding {
374
- height: 80px;
375
- width: auto;
376
- flex-shrink: 0;
377
- opacity: 0.5;
378
- pointer-events: none;
379
- transition: height 0.2s ease;
380
- }
381
-
382
- /* Compact mode: collapsed header */
383
- .persona-header.compact .persona-portrait {
384
- width: 40px;
385
- height: 40px;
386
- }
387
-
388
- .persona-header.compact .persona-portrait .portrait-fallback {
389
- font-size: 1.2rem;
390
- }
391
-
392
- .persona-header.compact .persona-tandem-portrait {
393
- display: none;
394
- }
395
-
396
- .persona-header.compact .persona-branding {
397
- height: 32px;
398
- }
399
-
400
- /* Tandem portrait: backseat agent below primary (Story 96-1) */
401
- .persona-tandem-portrait {
402
- width: 48px;
403
- height: 48px;
404
- border-radius: 50%;
405
- opacity: 0.55;
406
- transition: opacity 300ms ease-in-out;
407
- position: relative;
408
- overflow: hidden;
409
- }
410
-
411
- .persona-tandem-portrait .tandem-portrait-image {
412
- width: 100%;
413
- height: 100%;
414
- object-fit: cover;
415
- }
416
-
417
- .persona-tandem-portrait .tandem-portrait-fallback {
418
- font-size: 1.2rem;
419
- }
420
-
421
- .tandem-role-badge {
422
- position: absolute;
423
- bottom: -2px;
424
- right: -2px;
425
- font-size: 9px;
426
- font-weight: 700;
427
- line-height: 16px;
428
- padding: 0 4px;
429
- border-radius: 8px;
430
- background: var(--accent-color, #007acc);
431
- color: #fff;
432
- }
433
-
434
- .persona-header.compact .persona-catchphrase {
435
- display: none;
436
- }
437
-
438
- /* Collapse toggle button */
439
- .persona-collapse-toggle {
440
- position: absolute;
441
- bottom: 2px;
442
- right: 8px;
443
- background: none;
444
- border: none;
445
- color: var(--text-secondary, #8b8b8b);
446
- font-size: 0.6rem;
447
- cursor: pointer;
448
- padding: 0 4px;
449
- opacity: 0;
450
- transition: opacity 0.15s;
451
- }
452
-
453
- .persona-header:hover .persona-collapse-toggle {
454
- opacity: 1;
455
- }
456
-
457
- .persona-collapse-toggle:hover {
458
- color: var(--text-primary, #d4d4d4);
459
- }
460
-
461
- .persona-name-row {
462
- display: flex;
463
- align-items: center;
464
- gap: 8px;
465
- flex-wrap: nowrap;
466
- overflow: hidden;
467
- }
468
-
469
- .persona-character {
470
- font-weight: 600;
471
- color: var(--text-primary, #d4d4d4);
472
- font-size: 0.95rem;
473
- overflow: hidden;
474
- text-overflow: ellipsis;
475
- white-space: nowrap;
476
- }
477
-
478
- .persona-theme {
479
- color: var(--text-secondary, #8b8b8b);
480
- font-size: 0.8rem;
481
- overflow: hidden;
482
- text-overflow: ellipsis;
483
- white-space: nowrap;
484
- }
485
-
486
- .persona-catchphrase {
487
- color: var(--text-secondary, #8b8b8b);
488
- font-size: 0.75rem;
489
- font-style: italic;
490
- overflow: hidden;
491
- text-overflow: ellipsis;
492
- white-space: nowrap;
493
- max-width: 100%;
494
- }
495
-
496
- /* Message panel */
497
- .message-panel {
498
- display: flex;
499
- flex-direction: column;
500
- height: 100%;
501
- flex: 1;
502
- }
503
-
504
- .message-panel-content {
505
- flex: 1;
506
- overflow: hidden; /* scroll handled by .message-list inside */
507
- min-height: 0;
508
- }
509
-
510
- .message-panel-resize-handle {
511
- height: 4px;
512
- flex-shrink: 0;
513
- cursor: row-resize;
514
- background: var(--border-color, #3c3c3c);
515
- transition: background 0.15s ease;
516
- }
517
-
518
- .message-panel-resize-handle:hover {
519
- background: var(--accent-color, #007acc);
520
- }
521
-
522
- .message-panel-editor {
523
- flex-shrink: 0;
524
- background: var(--bg-secondary, #252526);
525
- overflow: visible;
526
- display: flex;
527
- flex-direction: column;
528
- min-height: 120px;
529
- }
530
-
531
- /* Message View - the conversation area */
532
- .message-view {
533
- display: flex;
534
- flex-direction: column;
535
- height: 100%;
536
- width: 100%;
537
- position: relative;
538
- }
539
-
540
- /* Message List - scrollable message container */
541
- .message-list {
542
- flex: 1;
543
- min-height: 0;
544
- overflow-y: auto;
545
- overflow-x: hidden;
546
- display: flex;
547
- flex-direction: column;
548
- gap: 0;
549
- padding: 1rem 1.5rem;
550
- }
551
-
552
- /* Individual messages — Tufte: no bubbles, no backgrounds */
553
- .message {
554
- display: flex;
555
- gap: 0.75rem;
556
- padding: 0.25rem 0;
557
- line-height: 1.5;
558
- }
559
-
560
- .message-avatar {
561
- flex-shrink: 0;
562
- width: 2rem;
563
- height: 2rem;
564
- display: flex;
565
- align-items: center;
566
- justify-content: center;
567
- font-size: 1.25rem;
568
- }
569
-
570
- .message-content {
571
- flex: 1;
572
- min-width: 0;
573
- overflow-wrap: break-word;
574
- }
575
-
576
- .message-content p {
577
- margin: 0 0 0.5rem 0;
578
- }
579
-
580
- .message-content p:last-child {
581
- margin-bottom: 0;
582
- }
583
-
584
- .message-content pre {
585
- background: var(--bg-primary, #1e1e1e);
586
- padding: 0.75rem;
587
- border-radius: 4px;
588
- overflow-x: auto;
589
- margin: 0.5rem 0;
590
- }
591
-
592
- .message-content code {
593
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
594
- font-size: var(--font-size-code, 0.875em);
595
- }
596
-
597
- .message-content pre code {
598
- background: none;
599
- padding: 0;
600
- }
601
-
602
- .message-content :not(pre) > code {
603
- background: var(--bg-tertiary, #2d2d2d);
604
- padding: 0.125rem 0.375rem;
605
- border-radius: 3px;
606
- }
607
-
608
- .message-content .table-wrapper {
609
- margin: 0.5rem 0;
610
- overflow-x: auto;
611
- border-radius: 4px;
612
- border: 1px solid var(--border-primary, #333);
613
- }
614
-
615
- .message-content table {
616
- border-collapse: collapse;
617
- width: 100%;
618
- font-size: 0.85em;
619
- }
620
-
621
- .message-content thead th {
622
- font-size: 0.75rem;
623
- font-weight: 600;
624
- text-transform: uppercase;
625
- letter-spacing: 0.03em;
626
- color: var(--text-secondary, #8b8b8b);
627
- padding: 0.4rem 0.75rem;
628
- text-align: left;
629
- background: var(--bg-primary, #1e1e1e);
630
- border-bottom: 1px solid var(--border-primary, #333);
631
- white-space: nowrap;
632
- }
633
-
634
- .message-content tbody td {
635
- padding: 0.35rem 0.75rem;
636
- color: var(--text-primary, #d4d4d4);
637
- border-bottom: 1px solid var(--border-primary, #333);
638
- }
639
-
640
- .message-content tbody tr:last-child td {
641
- border-bottom: none;
642
- }
643
-
644
- .message-content tbody tr:hover {
645
- background: var(--bg-secondary, #252526);
646
- }
647
-
648
- .message-content th.sortable-th {
649
- cursor: pointer;
650
- user-select: none;
651
- }
652
-
653
- .message-content th.sortable-th:hover {
654
- color: var(--text-primary, #d4d4d4);
655
- }
656
-
657
- .message-content .sort-indicator {
658
- font-size: 0.65em;
659
- opacity: 0.7;
660
- }
661
-
662
- /* User messages — blockquote left border */
663
- .message-user {
664
- border-left: 2px solid var(--text-secondary, #8b8b8b);
665
- padding-left: 0.75rem;
666
- color: var(--text-primary, #d4d4d4);
667
- }
668
-
669
- .message-user .message-content pre,
670
- .message-user .message-content :not(pre) > code {
671
- background: var(--bg-tertiary, #2d2d2d);
672
- }
673
-
674
- .message-attachment-indicator {
675
- display: inline-flex;
676
- align-items: center;
677
- gap: 0.25rem;
678
- margin-top: 0.5rem;
679
- padding: 0.125rem 0.5rem;
680
- background: rgba(0, 0, 0, 0.2);
681
- border-radius: 4px;
682
- font-size: 0.75rem;
683
- opacity: 0.8;
684
- }
685
-
686
- /* Agent messages — no background, no constraints */
687
- .message-agent {
688
- color: var(--text-primary, #d4d4d4);
689
- }
690
-
691
- /* Turn-based grouping — Tufte spacing */
692
- .turn-group {
693
- padding-top: 1rem;
694
- }
695
-
696
- .turn-group:first-child {
697
- padding-top: 0;
698
- }
699
-
700
- .turn-group + .turn-group {
701
- border-top: 1px solid var(--border-color, #3c3c3c);
702
- }
703
-
704
- /* Turn label — speaker + timestamp + optional role badge */
705
- .turn-label {
706
- display: flex;
707
- align-items: center;
708
- flex-wrap: wrap;
709
- gap: 0.5rem;
710
- padding: 0.25rem 0;
711
- margin-bottom: 0.25rem;
712
- padding-left: 2.75rem; /* align with message content: avatar 2rem + gap 0.75rem */
713
- }
714
-
715
- .turn-speaker {
716
- font-size: 0.75rem;
717
- font-weight: 600;
718
- color: var(--text-secondary, #8b8b8b);
719
- text-transform: uppercase;
720
- letter-spacing: 0.05em;
721
- }
722
-
723
- .turn-timestamp {
724
- font-size: 0.6875rem;
725
- color: var(--text-muted, #666);
726
- margin-left: auto;
727
- }
728
-
729
- /* Role badge in turn label — flush right under timestamp */
730
- .turn-role-badge {
731
- font-size: 0.5625rem;
732
- padding: 0px 5px;
733
- color: #fff;
734
- border-radius: 3px;
735
- font-weight: 700;
736
- letter-spacing: 0.05em;
737
- line-height: 1.4;
738
- }
739
-
740
- /* Context cleared divider bar */
741
- .context-cleared-bar {
742
- display: flex;
743
- align-items: center;
744
- gap: 0.75rem;
745
- padding: 0.5rem 0;
746
- }
747
-
748
- .context-cleared-line {
749
- flex: 1;
750
- background-color: var(--text-muted, #666);
751
- opacity: 0.4;
752
- }
753
-
754
- .context-cleared-label {
755
- font-size: 0.6875rem;
756
- font-weight: 600;
757
- color: var(--text-muted, #666);
758
- text-transform: uppercase;
759
- letter-spacing: 0.08em;
760
- white-space: nowrap;
761
- }
762
-
763
- .context-cleared-time {
764
- font-size: 0.625rem;
765
- color: var(--text-muted, #666);
766
- opacity: 0.7;
767
- white-space: nowrap;
768
- }
769
-
770
- /* User turn: left-aligned like agent turns */
771
-
772
- /* Hide avatar on continuation messages (same speaker, not first in turn) */
773
- .message.continuation .message-avatar {
774
- visibility: hidden;
775
- }
776
-
777
- /* Same-turn messages: tight spacing */
778
- .message.continuation {
779
- padding-top: 0;
780
- }
781
-
782
- /* Hook/System message styling (AC3: Story 75-5) */
783
- .message-hook,
784
- .message-system {
785
- background: none;
786
- border-left: 2px dashed var(--border-color, #3c3c3c);
787
- padding-left: 0.75rem;
788
- color: var(--text-secondary, #8b8b8b);
789
- font-size: 0.85rem;
790
- }
791
-
792
- .message-hook .message-avatar,
793
- .message-system .message-avatar {
794
- color: var(--text-secondary, #8b8b8b);
795
- }
796
-
797
- .hook-feedback {
798
- background: var(--bg-secondary, #252526);
799
- border-left: 3px solid var(--warning-color, #cca700);
800
- padding-left: 0.75rem;
801
- }
802
-
803
- .message-tool_use,
804
- .message-tool_result {
805
- background: none;
806
- border: none;
807
- color: var(--text-secondary, #8b8b8b);
808
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
809
- font-size: var(--font-size-code, 0.85rem);
810
- }
811
-
812
- .tool-name {
813
- font-weight: 600;
814
- color: var(--accent-color, #007acc);
815
- margin-bottom: 0.25rem;
816
- }
817
-
818
- /* =============================================================================
819
- Avatar Portraits
820
- ============================================================================= */
821
-
822
- .avatar-portrait {
823
- width: 100%;
824
- height: 100%;
825
- border-radius: 50%;
826
- object-fit: cover;
827
- }
828
-
829
- .avatar-emoji {
830
- font-size: 1.25rem;
831
- }
832
-
833
- /* Thinking/streaming indicator - portrait throbs */
834
- @keyframes avatar-throb {
835
- 0%, 100% {
836
- transform: scale(1);
837
- box-shadow: 0 0 0 0 var(--accent-color, #007acc);
838
- }
839
- 50% {
840
- transform: scale(1.08);
841
- box-shadow: 0 0 8px 2px var(--accent-color, #007acc);
842
- }
843
- }
844
-
845
- .avatar-thinking {
846
- animation: avatar-throb 1.2s ease-in-out infinite;
847
- }
848
-
849
- /* Backseat thinking indicator - subtler throb for tandem portrait */
850
- @keyframes tandem-throb {
851
- 0%, 100% {
852
- transform: scale(1);
853
- box-shadow: 0 0 0 0 var(--accent-color, #007acc);
854
- }
855
- 50% {
856
- transform: scale(1.04);
857
- box-shadow: 0 0 6px 1px var(--accent-color, #007acc);
858
- }
859
- }
860
-
861
- .avatar-tandem-thinking {
862
- animation: tandem-throb 1.8s ease-in-out infinite;
863
- }
864
-
865
- /* Observation pulse - one-shot on primary portrait when backseat observation injected */
866
- @keyframes observation-pulse {
867
- 0% {
868
- box-shadow: 0 0 12px 4px var(--accent-color, #007acc);
869
- }
870
- 100% {
871
- box-shadow: 0 0 0 0 var(--accent-color, #007acc);
872
- }
873
- }
874
-
875
- .avatar-observation-pulse {
876
- animation: observation-pulse 600ms ease-out 1;
877
- }
878
-
879
- @media (prefers-reduced-motion: reduce) {
880
- .avatar-thinking {
881
- animation: none;
882
- opacity: 0.85;
883
- border: 2px solid var(--accent-color, #007acc);
884
- }
885
- .avatar-tandem-thinking {
886
- animation: none;
887
- opacity: 0.85;
888
- border: 2px solid var(--accent-color, #007acc);
889
- }
890
- .avatar-observation-pulse {
891
- animation: none;
892
- opacity: 0.9;
893
- border: 2px solid var(--accent-color, #007acc);
894
- }
895
- }
896
-
897
- .message-avatar.avatar-fallback::after {
898
- content: '🤖';
899
- font-size: 1.25rem;
900
- }
901
-
902
- /* =============================================================================
903
- Subagent Span Styles — Tufte: indented left-border, no box
904
- ============================================================================= */
905
-
906
- .subagent-span {
907
- margin: 0.5rem 0;
908
- margin-left: 2.75rem; /* align with message content */
909
- border: none;
910
- border-left: 2px solid var(--accent-color, #007acc);
911
- border-radius: 0;
912
- background: none;
913
- padding-left: 0.5rem;
914
- }
915
-
916
- .subagent-header {
917
- display: flex;
918
- align-items: center;
919
- gap: 0.5rem;
920
- padding: 0.25rem 0;
921
- cursor: pointer;
922
- background: none;
923
- border-radius: 0;
924
- font-size: 0.8rem;
925
- transition: background-color 0.15s ease;
926
- }
927
-
928
- .subagent-header:hover {
929
- background-color: var(--bg-secondary, #252526);
930
- }
931
-
932
- .subagent-toggle {
933
- color: var(--text-secondary, #8b8b8b);
934
- font-size: 0.625rem;
935
- width: 0.875rem;
936
- display: flex;
937
- align-items: center;
938
- justify-content: center;
939
- }
940
-
941
- .subagent-helper-name {
942
- font-weight: 600;
943
- color: var(--text-primary, #d4d4d4);
944
- }
945
-
946
- .subagent-friendly-message {
947
- color: var(--text-secondary, #8b8b8b);
948
- overflow: hidden;
949
- text-overflow: ellipsis;
950
- white-space: nowrap;
951
- flex: 1;
952
- min-width: 0;
953
- }
954
-
955
- .subagent-type-badge {
956
- font-size: 0.625rem;
957
- padding: 0 4px;
958
- flex-shrink: 0;
959
- }
960
-
961
- .subagent-count {
962
- color: var(--text-muted, #666);
963
- font-size: 0.6875rem;
964
- font-family: var(--font-mono, monospace);
965
- margin-left: auto;
966
- flex-shrink: 0;
967
- }
968
-
969
- .subagent-content {
970
- padding: 0.25rem 0;
971
- }
972
-
973
- /* Subagent prompt — truncated single line, no avatar */
974
- .message-subagent-prompt {
975
- background: none;
976
- border-left: none;
977
- color: var(--text-muted, #666);
978
- font-size: 0.75rem;
979
- padding: 0.125rem 0;
980
- }
981
-
982
- .message-subagent-prompt .message-content {
983
- font-style: italic;
984
- overflow: hidden;
985
- text-overflow: ellipsis;
986
- white-space: nowrap;
987
- }
988
-
989
- /* Tool calls inside subagent: no extra indent (already indented by parent) */
990
- .subagent-content .tool-call-block {
991
- margin-left: 0;
992
- }
993
-
994
- .subagent-content .message {
995
- padding: 0.125rem 0;
996
- }
997
-
998
- /* =============================================================================
999
- QuickActions Component Styles
1000
- ============================================================================= */
1001
-
1002
- .quick-actions {
1003
- display: flex;
1004
- flex-direction: column;
1005
- gap: 8px;
1006
- padding: 12px 16px;
1007
- margin: 8px 0;
1008
- background: var(--bg-secondary, #252526);
1009
- border-radius: 8px;
1010
- border: 1px solid var(--border-color, #3c3c3c);
1011
- position: relative;
1012
- z-index: 10;
1013
- pointer-events: auto;
1014
- }
1015
-
1016
- .quick-actions-content {
1017
- color: var(--text-secondary, #8b8b8b);
1018
- font-size: 0.875rem;
1019
- margin-bottom: 4px;
1020
- }
1021
-
1022
- .quick-actions-buttons {
1023
- display: flex;
1024
- flex-wrap: wrap;
1025
- gap: 8px;
1026
- }
1027
-
1028
- .quick-action-btn {
1029
- padding: 8px 16px;
1030
- background: var(--accent-color, #007acc);
1031
- border: 1px solid var(--accent-color, #007acc);
1032
- border-radius: 6px;
1033
- color: #fff;
1034
- font-size: 0.875rem;
1035
- font-weight: 500;
1036
- cursor: pointer;
1037
- transition: all 0.15s ease;
1038
- }
1039
-
1040
- .quick-action-btn:hover:not(:disabled) {
1041
- background: var(--accent-hover, #0098ff);
1042
- border-color: var(--accent-hover, #0098ff);
1043
- filter: brightness(1.1);
1044
- }
1045
-
1046
- .quick-action-btn:disabled {
1047
- opacity: 0.5;
1048
- cursor: not-allowed;
1049
- }
1050
-
1051
- .quick-actions-input {
1052
- display: flex;
1053
- gap: 8px;
1054
- }
1055
-
1056
- .quick-actions-input input {
1057
- flex: 1;
1058
- padding: 8px 12px;
1059
- background: var(--bg-primary, #1e1e1e);
1060
- border: 1px solid var(--border-color, #3c3c3c);
1061
- border-radius: 6px;
1062
- color: var(--text-primary, #d4d4d4);
1063
- font-size: 0.875rem;
1064
- }
1065
-
1066
- .quick-actions-input input:focus {
1067
- outline: none;
1068
- border-color: var(--accent-color, #007acc);
1069
- }
1070
-
1071
- .auto-invoke-status {
1072
- color: var(--text-secondary, #8b8b8b);
1073
- font-size: 0.875rem;
1074
- font-style: italic;
1075
- }
1076
-
1077
- /* Scroll to bottom button */
1078
- .scroll-to-bottom-button {
1079
- position: absolute;
1080
- bottom: 1rem;
1081
- right: 1rem;
1082
- padding: 0.5rem 0.75rem;
1083
- background: var(--accent-color, #007acc);
1084
- border: none;
1085
- border-radius: 4px;
1086
- color: #fff;
1087
- cursor: pointer;
1088
- font-size: 0.875rem;
1089
- transition: all 0.2s ease;
1090
- z-index: 10;
1091
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
1092
- }
1093
-
1094
- .scroll-to-bottom-button:hover {
1095
- background: var(--accent-color-hover, #0098ff);
1096
- }
1097
-
1098
- /* Empty state */
1099
- .message-view-empty {
1100
- display: flex;
1101
- align-items: center;
1102
- justify-content: center;
1103
- flex: 1;
1104
- color: var(--text-secondary, #8b8b8b);
1105
- font-size: 0.875rem;
1106
- text-align: center;
1107
- padding: 2rem;
1108
- }
1109
-
1110
- .message-panel.error {
1111
- color: var(--error-color, #f14c4c);
1112
- }
1113
-
1114
- .streaming-indicator {
1115
- padding: 8px 1rem;
1116
- text-align: left;
1117
- color: var(--accent-color, #007acc);
1118
- font-style: italic;
1119
- font-size: 0.875rem;
1120
- }
1121
-
1122
-
1123
- /* =============================================================================
1124
- Editor Component Styles
1125
- ============================================================================= */
1126
-
1127
- /* Editor with controls layout */
1128
- .editor-with-controls {
1129
- display: flex;
1130
- gap: 8px;
1131
- align-items: stretch;
1132
- height: 100%;
1133
- }
1134
-
1135
- .editor-area {
1136
- flex: 1;
1137
- min-width: 0; /* Prevent overflow */
1138
- display: flex;
1139
- flex-direction: column;
1140
- }
1141
-
1142
- .editor-container {
1143
- display: flex;
1144
- flex-direction: column;
1145
- padding: 8px;
1146
- min-width: 0; /* Prevent overflow */
1147
- flex: 1;
1148
- }
1149
-
1150
- .mode-toolbar {
1151
- display: flex;
1152
- gap: 4px;
1153
- margin-bottom: 8px;
1154
- }
1155
-
1156
- .mode-button {
1157
- padding: 4px 12px;
1158
- background: var(--bg-tertiary, #2d2d2d);
1159
- border: 1px solid var(--border-color, #3c3c3c);
1160
- border-radius: 4px;
1161
- color: var(--text-secondary, #8b8b8b);
1162
- font-size: 0.75rem;
1163
- cursor: pointer;
1164
- transition: all 0.15s ease;
1165
- }
1166
-
1167
- .mode-button:hover {
1168
- color: var(--text-primary, #d4d4d4);
1169
- background: var(--bg-hover, #3c3c3c);
1170
- }
1171
-
1172
- .mode-button.active {
1173
- color: var(--accent-color, #007acc);
1174
- border-color: var(--accent-color, #007acc);
1175
- background: var(--bg-active, #37373d);
1176
- }
1177
-
1178
- .editor-wrapper {
1179
- position: relative;
1180
- min-width: 0; /* Prevent overflow */
1181
- flex: 1;
1182
- display: flex;
1183
- flex-direction: column;
1184
- }
1185
-
1186
- .editor-textarea {
1187
- width: 100%;
1188
- min-height: 60px;
1189
- flex: 1;
1190
- padding: 8px;
1191
- background: var(--bg-primary, #1e1e1e);
1192
- border: 1px solid var(--border-color, #3c3c3c);
1193
- border-radius: 4px;
1194
- color: var(--text-primary, #d4d4d4);
1195
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
1196
- font-size: 0.875rem;
1197
- line-height: 1.4;
1198
- resize: none;
1199
- box-sizing: border-box;
1200
- }
1201
-
1202
- .editor-textarea:focus {
1203
- outline: none;
1204
- border-color: var(--accent-color, #007acc);
1205
- }
1206
-
1207
- .editor-textarea::placeholder {
1208
- color: var(--text-secondary, #8b8b8b);
1209
- }
1210
-
1211
- /* Completion popup */
1212
- .completion-popup {
1213
- position: absolute;
1214
- bottom: 100%;
1215
- left: 0;
1216
- right: 0;
1217
- max-height: 200px;
1218
- overflow-y: auto;
1219
- background: var(--bg-secondary, #252526);
1220
- border: 1px solid var(--border-color, #3c3c3c);
1221
- border-radius: 4px;
1222
- margin-bottom: 4px;
1223
- box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.3);
1224
- z-index: 100;
1225
- }
1226
-
1227
- .completion-item {
1228
- display: flex;
1229
- justify-content: space-between;
1230
- padding: 6px 10px;
1231
- cursor: pointer;
1232
- transition: background 0.1s ease;
1233
- }
1234
-
1235
- .completion-item:hover,
1236
- .completion-item.selected {
1237
- background: var(--bg-hover, #3c3c3c);
1238
- }
1239
-
1240
- .completion-name {
1241
- color: var(--accent-color, #007acc);
1242
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
1243
- font-size: 0.8rem;
1244
- }
1245
-
1246
- .completion-desc {
1247
- color: var(--text-secondary, #8b8b8b);
1248
- font-size: 0.75rem;
1249
- margin-left: 12px;
1250
- }
1251
-
1252
- /* Queue indicator */
1253
- .queue-indicator {
1254
- display: flex;
1255
- align-items: center;
1256
- justify-content: space-between;
1257
- padding: 4px 8px;
1258
- background: var(--bg-tertiary, #2d2d2d);
1259
- border-radius: 4px;
1260
- margin-top: 8px;
1261
- font-size: 0.75rem;
1262
- }
1263
-
1264
- .queue-count {
1265
- color: var(--text-secondary, #8b8b8b);
1266
- }
1267
-
1268
- .queue-clear {
1269
- padding: 2px 8px;
1270
- background: transparent;
1271
- border: 1px solid var(--border-color, #3c3c3c);
1272
- border-radius: 3px;
1273
- color: var(--text-secondary, #8b8b8b);
1274
- cursor: pointer;
1275
- font-size: 0.7rem;
1276
- }
1277
-
1278
- .queue-clear:hover {
1279
- color: var(--text-primary, #d4d4d4);
1280
- border-color: var(--text-secondary, #8b8b8b);
1281
- }
1282
-
1283
- /* Image preview */
1284
- .image-preview {
1285
- display: flex;
1286
- flex-wrap: wrap;
1287
- gap: 8px;
1288
- margin-bottom: 8px;
1289
- }
1290
-
1291
- .image-preview-item {
1292
- position: relative;
1293
- width: 60px;
1294
- height: 60px;
1295
- border-radius: 4px;
1296
- overflow: hidden;
1297
- border: 1px solid var(--border-color, #3c3c3c);
1298
- }
1299
-
1300
- .image-preview-item img {
1301
- width: 100%;
1302
- height: 100%;
1303
- object-fit: cover;
1304
- }
1305
-
1306
- .image-remove {
1307
- position: absolute;
1308
- top: 2px;
1309
- right: 2px;
1310
- width: 16px;
1311
- height: 16px;
1312
- background: rgba(0, 0, 0, 0.7);
1313
- border: none;
1314
- border-radius: 50%;
1315
- color: white;
1316
- font-size: 10px;
1317
- cursor: pointer;
1318
- display: flex;
1319
- align-items: center;
1320
- justify-content: center;
1321
- }
1322
-
1323
- /* =============================================================================
1324
- ControlBar Component Styles
1325
- ============================================================================= */
1326
-
1327
- .control-bar {
1328
- display: flex;
1329
- flex-direction: column;
1330
- gap: 4px;
1331
- padding: 8px;
1332
- flex-shrink: 0;
1333
- align-self: flex-end;
1334
- }
1335
-
1336
- .btn-stop {
1337
- display: flex;
1338
- align-items: center;
1339
- gap: 6px;
1340
- padding: 8px 16px;
1341
- background: var(--error-color, #f14c4c);
1342
- border: none;
1343
- border-radius: 4px;
1344
- color: #fff;
1345
- font-size: 0.8rem;
1346
- font-weight: 500;
1347
- cursor: pointer;
1348
- transition: all 0.15s ease;
1349
- white-space: nowrap;
1350
- }
1351
-
1352
- .btn-stop:hover:not(:disabled) {
1353
- background: #ff6b6b;
1354
- }
1355
-
1356
- .btn-stop:disabled {
1357
- opacity: 0.4;
1358
- cursor: not-allowed;
1359
- background: var(--bg-tertiary, #2d2d2d);
1360
- color: var(--text-secondary, #8b8b8b);
1361
- }
1362
-
1363
- .btn-stop.stopping {
1364
- background: var(--warning-color, #cca700);
1365
- }
1366
-
1367
- .btn-stop.throbbing {
1368
- animation: throb 1.5s ease-in-out infinite;
1369
- }
1370
-
1371
- @keyframes throb {
1372
- 0%, 100% {
1373
- transform: scale(1);
1374
- box-shadow: 0 0 0 0 rgba(241, 76, 76, 0.4);
1375
- }
1376
- 50% {
1377
- transform: scale(1.02);
1378
- box-shadow: 0 0 0 6px rgba(241, 76, 76, 0);
1379
- }
1380
- }
1381
-
1382
- .btn-stop .icon {
1383
- font-size: 0.9rem;
1384
- }
1385
-
1386
- .btn-stop .spinner {
1387
- width: 12px;
1388
- height: 12px;
1389
- border: 2px solid rgba(255, 255, 255, 0.3);
1390
- border-top-color: #fff;
1391
- border-radius: 50%;
1392
- animation: spin 0.8s linear infinite;
1393
- }
1394
-
1395
- @keyframes spin {
1396
- to { transform: rotate(360deg); }
1397
- }
1398
-
1399
- .btn-reset {
1400
- display: flex;
1401
- align-items: center;
1402
- justify-content: center;
1403
- padding: 8px 16px;
1404
- background: var(--bg-tertiary, #2d2d2d);
1405
- border: 1px solid var(--border-color, #3c3c3c);
1406
- border-radius: 4px;
1407
- color: var(--text-secondary, #8b8b8b);
1408
- font-size: 0.8rem;
1409
- cursor: pointer;
1410
- transition: all 0.15s ease;
1411
- white-space: nowrap;
1412
- }
1413
-
1414
- .btn-reset:hover {
1415
- color: var(--text-primary, #d4d4d4);
1416
- background: var(--bg-hover, #3c3c3c);
1417
- border-color: var(--text-secondary, #8b8b8b);
1418
- }
1419
-
1420
- /* =============================================================================
1421
- Sidebar Panel Styles
1422
- ============================================================================= */
1423
-
1424
- /* Sprint panel */
1425
- .sprint-panel {
1426
- padding: 8px;
1427
- }
1428
-
1429
- .sprint-panel .story-header {
1430
- display: flex;
1431
- align-items: center;
1432
- gap: 8px;
1433
- margin-bottom: 8px;
1434
- }
1435
-
1436
- .sprint-panel .story-id {
1437
- color: var(--accent-color, #007acc);
1438
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
1439
- font-size: 0.8rem;
1440
- }
1441
-
1442
- .sprint-panel .story-status {
1443
- padding: 2px 6px;
1444
- background: var(--bg-tertiary, #2d2d2d);
1445
- border-radius: 3px;
1446
- font-size: 0.7rem;
1447
- text-transform: uppercase;
1448
- }
1449
-
1450
- .sprint-panel .story-title {
1451
- font-size: 0.875rem;
1452
- font-weight: 500;
1453
- margin: 0 0 8px 0;
1454
- }
1455
-
1456
- .sprint-panel .story-phase,
1457
- .sprint-panel .story-workflow,
1458
- .sprint-panel .story-points,
1459
- .sprint-panel .story-epic {
1460
- font-size: 0.75rem;
1461
- color: var(--text-secondary, #8b8b8b);
1462
- margin-bottom: 4px;
1463
- }
1464
-
1465
- .sprint-panel .hint {
1466
- font-size: 0.75rem;
1467
- color: var(--text-secondary, #8b8b8b);
1468
- margin-top: 8px;
1469
- }
1470
-
1471
- /* Enhanced Sprint Panel (MSSCI-14189) */
1472
- .enhanced-sprint-panel {
1473
- padding: 12px;
1474
- font-size: 0.8rem;
1475
- }
1476
-
1477
- .enhanced-sprint-panel section {
1478
- margin-bottom: 16px;
1479
- }
1480
-
1481
- .enhanced-sprint-panel section:last-child {
1482
- margin-bottom: 0;
1483
- }
1484
-
1485
- .enhanced-sprint-panel h2 {
1486
- font-size: 0.7rem;
1487
- font-weight: 600;
1488
- text-transform: uppercase;
1489
- letter-spacing: 0.05em;
1490
- color: var(--text-secondary, #8b8b8b);
1491
- margin: 0 0 8px 0;
1492
- padding-bottom: 4px;
1493
- border-bottom: 1px solid var(--border-color, #3c3c3c);
1494
- }
1495
-
1496
- /* Current Story Section */
1497
- .enhanced-sprint-panel [data-section="current-story"] .story-id {
1498
- color: var(--accent-color, #007acc);
1499
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
1500
- font-size: 0.75rem;
1501
- margin-right: 8px;
1502
- }
1503
-
1504
- .enhanced-sprint-panel [data-section="current-story"] .story-title {
1505
- font-weight: 500;
1506
- display: block;
1507
- margin: 4px 0;
1508
- }
1509
-
1510
- .enhanced-sprint-panel [data-section="current-story"] .story-status {
1511
- display: inline-block;
1512
- padding: 2px 6px;
1513
- background: var(--accent-color, #007acc);
1514
- color: #fff;
1515
- border-radius: 3px;
1516
- font-size: 0.65rem;
1517
- text-transform: uppercase;
1518
- margin-right: 6px;
1519
- }
1520
-
1521
- .enhanced-sprint-panel [data-section="current-story"] .story-points {
1522
- font-size: 0.7rem;
1523
- color: var(--text-secondary, #8b8b8b);
1524
- }
1525
-
1526
- .enhanced-sprint-panel .next-up-label {
1527
- font-size: 0.7rem;
1528
- color: var(--text-secondary, #8b8b8b);
1529
- font-style: italic;
1530
- margin-right: 6px;
1531
- }
1532
-
1533
- /* Epic Group */
1534
- .enhanced-sprint-panel .epic-group {
1535
- border: 1px solid var(--border-color, #3c3c3c);
1536
- border-radius: 4px;
1537
- margin-bottom: 8px;
1538
- overflow: hidden;
1539
- }
1540
-
1541
- .enhanced-sprint-panel .epic-group:last-child {
1542
- margin-bottom: 0;
1543
- }
1544
-
1545
- .enhanced-sprint-panel .epic-group.epic-completed {
1546
- opacity: 0.7;
1547
- }
1548
-
1549
- /* Completed Epics Section */
1550
- .enhanced-sprint-panel [data-section="completed-epics"] .epic-group {
1551
- opacity: 0.5;
1552
- border-color: var(--border-color, #3c3c3c);
1553
- }
1554
-
1555
- .enhanced-sprint-panel [data-section="completed-epics"] .epic-group:hover {
1556
- opacity: 0.7;
1557
- }
1558
-
1559
- /* Epic Header */
1560
- .enhanced-sprint-panel .epic-header {
1561
- display: flex;
1562
- align-items: center;
1563
- gap: 8px;
1564
- padding: 8px;
1565
- background: var(--bg-tertiary, #2d2d2d);
1566
- }
1567
-
1568
- .enhanced-sprint-panel .epic-toggle {
1569
- background: none;
1570
- border: none;
1571
- color: var(--text-secondary, #8b8b8b);
1572
- cursor: pointer;
1573
- padding: 0;
1574
- font-size: 0.7rem;
1575
- width: 16px;
1576
- flex-shrink: 0;
1577
- }
1578
-
1579
- .enhanced-sprint-panel .epic-toggle:hover {
1580
- color: var(--text-primary, #d4d4d4);
1581
- }
1582
-
1583
- .enhanced-sprint-panel .epic-toggle:focus-visible {
1584
- outline: 2px solid var(--accent-color, #007acc);
1585
- outline-offset: 2px;
1586
- border-radius: 2px;
1587
- }
1588
-
1589
- .enhanced-sprint-panel .epic-title {
1590
- font-weight: 500;
1591
- flex: 1;
1592
- min-width: 0;
1593
- overflow: hidden;
1594
- text-overflow: ellipsis;
1595
- white-space: nowrap;
1596
- }
1597
-
1598
- .enhanced-sprint-panel .epic-jira {
1599
- font-size: 0.65rem;
1600
- color: var(--text-secondary, #8b8b8b);
1601
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
1602
- }
1603
-
1604
- /* Epic Progress Bar */
1605
- .enhanced-sprint-panel .epic-progress {
1606
- width: 60px;
1607
- height: 4px;
1608
- background: var(--bg-secondary, #252526);
1609
- border-radius: 2px;
1610
- overflow: hidden;
1611
- flex-shrink: 0;
1612
- }
1613
-
1614
- .enhanced-sprint-panel .epic-progress .progress-bar {
1615
- height: 100%;
1616
- background: var(--accent-color, #007acc);
1617
- border-radius: 2px;
1618
- transition: width 0.2s ease;
1619
- }
1620
-
1621
- .enhanced-sprint-panel .epic-progress-label {
1622
- font-size: 0.65rem;
1623
- color: var(--text-secondary, #8b8b8b);
1624
- min-width: 50px;
1625
- text-align: right;
1626
- }
1627
-
1628
- /* Archive Button */
1629
- .enhanced-sprint-panel .archive-button {
1630
- padding: 2px 8px;
1631
- background: transparent;
1632
- border: 1px solid var(--border-color, #3c3c3c);
1633
- border-radius: 3px;
1634
- color: var(--text-secondary, #8b8b8b);
1635
- font-size: 0.65rem;
1636
- cursor: pointer;
1637
- transition: all 0.15s ease;
1638
- }
1639
-
1640
- .enhanced-sprint-panel .archive-button:hover:not(:disabled) {
1641
- background: var(--bg-hover, #3c3c3c);
1642
- color: var(--text-primary, #d4d4d4);
1643
- border-color: var(--text-secondary, #8b8b8b);
1644
- }
1645
-
1646
- .enhanced-sprint-panel .archive-button:disabled {
1647
- opacity: 0.5;
1648
- cursor: not-allowed;
1649
- }
1650
-
1651
- /* Story Items */
1652
- .enhanced-sprint-panel .epic-stories {
1653
- border-top: 1px solid var(--border-color, #3c3c3c);
1654
- }
1655
-
1656
- .enhanced-sprint-panel .story-item {
1657
- display: flex;
1658
- align-items: center;
1659
- gap: 8px;
1660
- padding: 6px 8px 6px 28px;
1661
- border-bottom: 1px solid var(--border-color, #3c3c3c);
1662
- transition: background 0.1s ease;
1663
- }
1664
-
1665
- .enhanced-sprint-panel .story-item:last-child {
1666
- border-bottom: none;
1667
- }
1668
-
1669
- .enhanced-sprint-panel .story-item:hover {
1670
- background: var(--bg-hover, rgba(255, 255, 255, 0.03));
1671
- }
1672
-
1673
- .enhanced-sprint-panel .story-item .story-info {
1674
- flex: 1;
1675
- min-width: 0;
1676
- display: flex;
1677
- flex-direction: column;
1678
- gap: 1px;
1679
- }
1680
-
1681
- .enhanced-sprint-panel .story-item .story-title {
1682
- overflow: hidden;
1683
- text-overflow: ellipsis;
1684
- white-space: nowrap;
1685
- font-size: 0.75rem;
1686
- }
1687
-
1688
- .enhanced-sprint-panel .story-item .story-meta {
1689
- display: flex;
1690
- align-items: center;
1691
- gap: 6px;
1692
- }
1693
-
1694
- .enhanced-sprint-panel .story-item .story-assignee {
1695
- font-size: 0.625rem;
1696
- color: var(--text-tertiary, #6b6b6b);
1697
- font-style: italic;
1698
- }
1699
-
1700
- .enhanced-sprint-panel .story-item .story-workflow-badge {
1701
- font-size: 0.5625rem;
1702
- text-transform: uppercase;
1703
- letter-spacing: 0.05em;
1704
- color: var(--text-secondary, #8b8b8b);
1705
- background: var(--bg-tertiary, #2d2d2d);
1706
- padding: 0 4px;
1707
- border-radius: 2px;
1708
- }
1709
-
1710
- .enhanced-sprint-panel .story-item .story-completed-date {
1711
- font-size: 0.625rem;
1712
- font-variant-numeric: tabular-nums;
1713
- font-family: var(--font-mono, monospace);
1714
- color: var(--text-tertiary, #6b6b6b);
1715
- }
1716
-
1717
- .enhanced-sprint-panel .story-item .priority-label {
1718
- font-size: 0.6rem;
1719
- font-weight: 500;
1720
- color: var(--text-tertiary, #6b6b6b);
1721
- flex-shrink: 0;
1722
- opacity: 0.7;
1723
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
1724
- }
1725
-
1726
- .enhanced-sprint-panel .story-item .story-points {
1727
- font-size: 0.65rem;
1728
- color: var(--text-secondary, #8b8b8b);
1729
- background: var(--bg-tertiary, #2d2d2d);
1730
- padding: 1px 5px;
1731
- border-radius: 3px;
1732
- flex-shrink: 0;
1733
- }
1734
-
1735
- /* Story Status Colors via data-status attribute */
1736
- .enhanced-sprint-panel .story-item[data-status="backlog"] {
1737
- border-left: 3px solid var(--text-secondary, #8b8b8b);
1738
- }
1739
-
1740
- .enhanced-sprint-panel .story-item[data-status="in_progress"] {
1741
- border-left: 3px solid var(--accent-color, #007acc);
1742
- background: rgba(0, 122, 204, 0.05);
1743
- }
1744
-
1745
- .enhanced-sprint-panel .story-item[data-status="done"] {
1746
- border-left: 3px solid var(--success-color, #4ec9b0);
1747
- }
1748
-
1749
- .enhanced-sprint-panel .story-item[data-status="cancelled"] {
1750
- border-left: 3px solid var(--error-color, #f14c4c);
1751
- opacity: 0.6;
1752
- text-decoration: line-through;
1753
- }
1754
-
1755
- /* Future Initiatives Section */
1756
- .enhanced-sprint-panel .future-epic {
1757
- display: flex;
1758
- align-items: center;
1759
- gap: 8px;
1760
- padding: 8px;
1761
- border: 1px solid var(--border-color, #3c3c3c);
1762
- border-radius: 4px;
1763
- margin-bottom: 6px;
1764
- }
1765
-
1766
- .enhanced-sprint-panel .future-epic:last-child {
1767
- margin-bottom: 0;
1768
- }
1769
-
1770
- .enhanced-sprint-panel .future-epic-title {
1771
- flex: 1;
1772
- min-width: 0;
1773
- overflow: hidden;
1774
- text-overflow: ellipsis;
1775
- white-space: nowrap;
1776
- font-weight: 500;
1777
- }
1778
-
1779
- .enhanced-sprint-panel .future-epic-points {
1780
- font-size: 0.65rem;
1781
- color: var(--text-secondary, #8b8b8b);
1782
- }
1783
-
1784
- /* Future Epic Status Badges */
1785
- .enhanced-sprint-panel .future-epic-status {
1786
- padding: 2px 6px;
1787
- border-radius: 3px;
1788
- font-size: 0.6rem;
1789
- text-transform: uppercase;
1790
- font-weight: 500;
1791
- }
1792
-
1793
- .enhanced-sprint-panel .future-epic-status[data-status="ready"],
1794
- .enhanced-sprint-panel .future-epic[data-testid*="ready"] .future-epic-status {
1795
- background: var(--accent-color, #007acc);
1796
- color: #fff;
1797
- }
1798
-
1799
- .enhanced-sprint-panel .future-epic-status[data-status="planning"],
1800
- .enhanced-sprint-panel .future-epic[data-testid*="planning"] .future-epic-status {
1801
- background: var(--bg-tertiary, #2d2d2d);
1802
- color: var(--text-secondary, #8b8b8b);
1803
- }
1804
-
1805
- .enhanced-sprint-panel .future-epic-status[data-status="blocked"],
1806
- .enhanced-sprint-panel .future-epic[data-testid*="blocked"] .future-epic-status {
1807
- background: var(--warning-color, #cca700);
1808
- color: #000;
1809
- }
1810
-
1811
- /* Promote Button */
1812
- .enhanced-sprint-panel .promote-button {
1813
- padding: 3px 10px;
1814
- background: var(--accent-color, #007acc);
1815
- border: none;
1816
- border-radius: 3px;
1817
- color: #fff;
1818
- font-size: 0.65rem;
1819
- font-weight: 500;
1820
- cursor: pointer;
1821
- transition: background 0.15s ease;
1822
- }
1823
-
1824
- .enhanced-sprint-panel .promote-button:hover:not(:disabled) {
1825
- background: var(--accent-hover, #0098ff);
1826
- }
1827
-
1828
- .enhanced-sprint-panel .promote-button:disabled {
1829
- opacity: 0.5;
1830
- cursor: not-allowed;
1831
- }
1832
-
1833
- /* Empty State */
1834
- .enhanced-sprint-panel .empty-state {
1835
- padding: 16px;
1836
- text-align: center;
1837
- color: var(--text-secondary, #8b8b8b);
1838
- border: 1px dashed var(--border-color, #3c3c3c);
1839
- border-radius: 4px;
1840
- }
1841
-
1842
- .enhanced-sprint-panel .empty-state .hint {
1843
- font-size: 0.7rem;
1844
- margin-top: 6px;
1845
- margin-bottom: 0;
1846
- font-style: italic;
1847
- }
1848
-
1849
- /* Loading and Error States */
1850
- .enhanced-sprint-panel .loading-state {
1851
- padding: 20px;
1852
- text-align: center;
1853
- color: var(--text-secondary, #8b8b8b);
1854
- }
1855
-
1856
- .enhanced-sprint-panel .error-toast {
1857
- padding: 8px 12px;
1858
- background: var(--error-color, #f14c4c);
1859
- color: #fff;
1860
- border-radius: 4px;
1861
- font-size: 0.75rem;
1862
- margin-bottom: 12px;
1863
- }
1864
-
1865
- /* Confirmation Dialog */
1866
- .enhanced-sprint-panel .confirm-dialog {
1867
- padding: 12px;
1868
- background: var(--bg-tertiary, #2d2d2d);
1869
- border: 1px solid var(--border-color, #3c3c3c);
1870
- border-radius: 4px;
1871
- margin-bottom: 12px;
1872
- }
1873
-
1874
- .enhanced-sprint-panel .confirm-dialog p {
1875
- margin: 0 0 8px 0;
1876
- font-size: 0.8rem;
1877
- }
1878
-
1879
- .enhanced-sprint-panel .confirm-dialog button {
1880
- padding: 4px 12px;
1881
- margin-right: 8px;
1882
- border-radius: 3px;
1883
- font-size: 0.75rem;
1884
- cursor: pointer;
1885
- }
1886
-
1887
- .enhanced-sprint-panel .confirm-dialog button[data-testid="confirm-archive-yes"] {
1888
- background: var(--error-color, #f14c4c);
1889
- border: none;
1890
- color: #fff;
1891
- }
1892
-
1893
- .enhanced-sprint-panel .confirm-dialog button[data-testid="confirm-archive-no"] {
1894
- background: transparent;
1895
- border: 1px solid var(--border-color, #3c3c3c);
1896
- color: var(--text-secondary, #8b8b8b);
1897
- }
1898
-
1899
- /* Git panel */
1900
- .git-panel {
1901
- padding: 8px;
1902
- }
1903
-
1904
- .git-panel .branch-info {
1905
- display: flex;
1906
- align-items: center;
1907
- gap: 6px;
1908
- margin-bottom: 8px;
1909
- }
1910
-
1911
- .git-panel .branch-icon {
1912
- color: var(--accent-color, #007acc);
1913
- }
1914
-
1915
- .git-panel .branch-name {
1916
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
1917
- font-size: 0.8rem;
1918
- }
1919
-
1920
- .git-panel .dirty-indicator {
1921
- color: var(--warning-color, #cca700);
1922
- }
1923
-
1924
- .git-panel .sync-status {
1925
- display: flex;
1926
- gap: 8px;
1927
- margin-bottom: 8px;
1928
- font-size: 0.75rem;
1929
- }
1930
-
1931
- .git-panel .ahead {
1932
- color: var(--success-color, #4ec9b0);
1933
- }
1934
-
1935
- .git-panel .behind {
1936
- color: var(--warning-color, #cca700);
1937
- }
1938
-
1939
- .git-panel .file-status {
1940
- display: flex;
1941
- flex-wrap: wrap;
1942
- gap: 8px;
1943
- }
1944
-
1945
- .git-panel .status-item {
1946
- font-size: 0.75rem;
1947
- }
1948
-
1949
- .git-panel .status-item.staged {
1950
- color: var(--success-color, #4ec9b0);
1951
- }
1952
-
1953
- .git-panel .status-item.modified {
1954
- color: var(--warning-color, #cca700);
1955
- }
1956
-
1957
- .git-panel .status-item.untracked {
1958
- color: var(--text-secondary, #8b8b8b);
1959
- }
1960
-
1961
- /* Git panel - stacked multi-repo view */
1962
- .git-panel.stacked {
1963
- display: flex;
1964
- flex-direction: column;
1965
- gap: 12px;
1966
- }
1967
-
1968
- .git-panel .repo-status {
1969
- padding: 8px;
1970
- background: var(--bg-tertiary, #2d2d2d);
1971
- border-radius: 4px;
1972
- border-left: 3px solid var(--accent-color, #007acc);
1973
- }
1974
-
1975
- .git-panel .repo-header {
1976
- display: flex;
1977
- align-items: center;
1978
- gap: 6px;
1979
- margin-bottom: 4px;
1980
- }
1981
-
1982
- .git-panel .repo-name {
1983
- font-size: 0.75rem;
1984
- font-weight: 600;
1985
- color: var(--text-secondary, #8b8b8b);
1986
- text-transform: uppercase;
1987
- letter-spacing: 0.5px;
1988
- }
1989
-
1990
- .git-panel .repo-status .branch-info {
1991
- margin-bottom: 4px;
1992
- }
1993
-
1994
- .git-panel .repo-status .sync-status {
1995
- margin-bottom: 4px;
1996
- }
1997
-
1998
- /* Develop-behind indicator */
1999
- .git-panel .develop-behind {
2000
- color: var(--status-warning, #cca700);
2001
- }
2002
-
2003
- /* Sync all repos action bar */
2004
- .git-panel .git-panel-actions {
2005
- padding: 0 0 4px;
2006
- }
2007
-
2008
- .git-panel .sync-all-btn {
2009
- display: flex;
2010
- align-items: center;
2011
- justify-content: center;
2012
- gap: 6px;
2013
- width: 100%;
2014
- padding: 6px 10px;
2015
- border: 1px solid var(--border-secondary, rgba(255, 255, 255, 0.08));
2016
- border-radius: 4px;
2017
- background: var(--bg-tertiary, #2d2d2d);
2018
- color: var(--text-secondary, #8b8b8b);
2019
- font-size: 0.75rem;
2020
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
2021
- cursor: pointer;
2022
- transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease;
2023
- }
2024
-
2025
- .git-panel .sync-all-btn:hover {
2026
- background: var(--bg-hover, #3d3d3d);
2027
- color: var(--text-primary, #e0e0e0);
2028
- border-color: var(--accent-color, #007acc);
2029
- }
2030
-
2031
- .git-panel .sync-all-btn:active {
2032
- background: var(--bg-active, #4d4d4d);
2033
- }
2034
-
2035
- .git-panel .repo-status .file-status {
2036
- gap: 6px;
2037
- }
2038
-
2039
- /* File status toggle button */
2040
- .git-panel .file-status-toggle {
2041
- display: flex;
2042
- align-items: center;
2043
- gap: 6px;
2044
- background: none;
2045
- border: none;
2046
- padding: 4px 0;
2047
- cursor: pointer;
2048
- width: 100%;
2049
- text-align: left;
2050
- }
2051
-
2052
- .git-panel .file-status-toggle:hover {
2053
- opacity: 0.8;
2054
- }
2055
-
2056
- .git-panel .toggle-icon {
2057
- font-size: 0.6rem;
2058
- color: var(--text-secondary, #8b8b8b);
2059
- transition: transform 0.15s ease;
2060
- }
2061
-
2062
- .git-panel .toggle-icon.open {
2063
- transform: rotate(90deg);
2064
- }
2065
-
2066
- /* File list dropdown */
2067
- .git-panel .file-list {
2068
- list-style: none;
2069
- margin: 8px 0 0 0;
2070
- padding: 0;
2071
- border-top: 1px solid var(--border-color, #404040);
2072
- padding-top: 8px;
2073
- max-height: 200px;
2074
- overflow-y: auto;
2075
- }
2076
-
2077
- .git-panel .file-item {
2078
- display: flex;
2079
- align-items: center;
2080
- gap: 8px;
2081
- padding: 2px 0;
2082
- font-size: 0.75rem;
2083
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
2084
- }
2085
-
2086
- .git-panel .file-status-icon {
2087
- width: 14px;
2088
- text-align: center;
2089
- font-weight: 600;
2090
- }
2091
-
2092
- .git-panel .file-item.staged .file-status-icon {
2093
- color: var(--success-color, #4ec9b0);
2094
- }
2095
-
2096
- .git-panel .file-item.modified .file-status-icon {
2097
- color: var(--warning-color, #cca700);
2098
- }
2099
-
2100
- .git-panel .file-item.untracked .file-status-icon {
2101
- color: var(--text-secondary, #8b8b8b);
2102
- }
2103
-
2104
- .git-panel .file-path {
2105
- overflow: hidden;
2106
- text-overflow: ellipsis;
2107
- white-space: nowrap;
2108
- color: var(--text-primary, #d4d4d4);
2109
- }
2110
-
2111
- /* Progress panel and Todo panel (shared styles) */
2112
- .progress-panel,
2113
- .todo-panel {
2114
- padding: 8px;
2115
- }
2116
-
2117
- .progress-panel .progress-bar-container,
2118
- .todo-panel .progress-bar-container {
2119
- position: relative;
2120
- height: 20px;
2121
- background: var(--bg-tertiary, #2d2d2d);
2122
- border-radius: 4px;
2123
- margin-bottom: 12px;
2124
- overflow: hidden;
2125
- }
2126
-
2127
- .progress-panel .progress-bar,
2128
- .todo-panel .progress-bar {
2129
- height: 100%;
2130
- background: var(--accent-color, #007acc);
2131
- transition: width 0.3s ease;
2132
- }
2133
-
2134
- .progress-panel .progress-text,
2135
- .todo-panel .progress-text {
2136
- position: absolute;
2137
- top: 50%;
2138
- left: 50%;
2139
- transform: translate(-50%, -50%);
2140
- font-size: 0.7rem;
2141
- color: var(--text-primary, #d4d4d4);
2142
- }
2143
-
2144
- .progress-panel .todo-section,
2145
- .todo-panel .todo-section {
2146
- margin-bottom: 12px;
2147
- }
2148
-
2149
- .progress-panel .todo-section h4,
2150
- .todo-panel .todo-section h4 {
2151
- font-size: 0.75rem;
2152
- color: var(--text-secondary, #8b8b8b);
2153
- margin: 0 0 6px 0;
2154
- text-transform: uppercase;
2155
- }
2156
-
2157
- .progress-panel .todo-item,
2158
- .todo-panel .todo-item {
2159
- display: flex;
2160
- align-items: center;
2161
- gap: 6px;
2162
- padding: 4px 0;
2163
- font-size: 0.8rem;
2164
- }
2165
-
2166
- .progress-panel .todo-status,
2167
- .todo-panel .todo-status {
2168
- width: 16px;
2169
- text-align: center;
2170
- color: var(--text-secondary, #8b8b8b);
2171
- }
2172
-
2173
- .progress-panel .todo-in_progress .todo-status,
2174
- .todo-panel .todo-in_progress .todo-status {
2175
- color: var(--accent-color, #007acc);
2176
- }
2177
-
2178
- .progress-panel .todo-completed .todo-status,
2179
- .todo-panel .todo-completed .todo-status {
2180
- color: var(--success-color, #4ec9b0);
2181
- }
2182
-
2183
- .progress-panel .todo-blocked,
2184
- .todo-panel .todo-blocked {
2185
- font-size: 0.7rem;
2186
- color: var(--error-color, #f14c4c);
2187
- }
2188
-
2189
- /* Progress panel internal tabs (Workflow/AC/Todo) */
2190
- .progress-tabs {
2191
- display: flex;
2192
- gap: 2px;
2193
- margin-bottom: 8px;
2194
- border-bottom: 1px solid var(--border-color, #3d3d3d);
2195
- padding-bottom: 4px;
2196
- }
2197
-
2198
- .progress-tab {
2199
- padding: 4px 8px;
2200
- font-size: 0.75rem;
2201
- color: var(--text-secondary, #8b8b8b);
2202
- background: transparent;
2203
- border: none;
2204
- border-radius: 4px 4px 0 0;
2205
- cursor: pointer;
2206
- transition: color 0.15s, background 0.15s;
2207
- position: relative;
2208
- }
2209
-
2210
- .progress-tab:hover {
2211
- color: var(--text-primary, #d4d4d4);
2212
- background: var(--bg-tertiary, #2d2d2d);
2213
- }
2214
-
2215
- .progress-tab.active {
2216
- color: var(--text-primary, #d4d4d4);
2217
- background: var(--bg-tertiary, #2d2d2d);
2218
- border-bottom: 2px solid var(--accent-color, #007acc);
2219
- margin-bottom: -5px;
2220
- }
2221
-
2222
- .progress-tab .tab-indicator {
2223
- font-size: 0.5rem;
2224
- color: var(--accent-color, #007acc);
2225
- margin-left: 4px;
2226
- vertical-align: super;
2227
- }
2228
-
2229
- .progress-tab-content {
2230
- padding-top: 4px;
2231
- }
2232
-
2233
- /* Workflow content within Progress panel */
2234
- .workflow-content {
2235
- padding: 4px 0;
2236
- }
2237
-
2238
- .workflow-content .workflow-type-badge {
2239
- display: inline-block;
2240
- padding: 2px 8px;
2241
- font-size: 0.7rem;
2242
- font-weight: 600;
2243
- color: var(--text-primary, #d4d4d4);
2244
- background: var(--bg-tertiary, #2d2d2d);
2245
- border-radius: 4px;
2246
- margin-bottom: 8px;
2247
- }
2248
-
2249
- .workflow-content .phase-progress {
2250
- display: flex;
2251
- flex-wrap: wrap;
2252
- align-items: center;
2253
- gap: 4px;
2254
- }
2255
-
2256
- .workflow-content .phase-step {
2257
- display: flex;
2258
- align-items: center;
2259
- gap: 4px;
2260
- padding: 2px 6px;
2261
- font-size: 0.7rem;
2262
- border-radius: 4px;
2263
- }
2264
-
2265
- .workflow-content .phase-step.done {
2266
- color: var(--success-color, #4ec9b0);
2267
- }
2268
-
2269
- .workflow-content .phase-step.current {
2270
- color: var(--accent-color, #007acc);
2271
- background: var(--bg-tertiary, #2d2d2d);
2272
- }
2273
-
2274
- .workflow-content .phase-step.pending {
2275
- color: var(--text-secondary, #8b8b8b);
2276
- }
2277
-
2278
- .workflow-content .phase-arrow {
2279
- color: var(--text-secondary, #8b8b8b);
2280
- font-size: 0.65rem;
2281
- }
2282
-
2283
- .workflow-content .phase-icon {
2284
- flex-shrink: 0;
2285
- width: 14px;
2286
- text-align: center;
2287
- }
2288
-
2289
- .workflow-content .phase-label {
2290
- white-space: nowrap;
2291
- }
2292
-
2293
- /* Stepped workflow progress (Step N of M) */
2294
- .stepped-progress {
2295
- display: flex;
2296
- align-items: baseline;
2297
- gap: 8px;
2298
- font-size: 0.75rem;
2299
- }
2300
-
2301
- .stepped-counter {
2302
- color: var(--accent-color, #007acc);
2303
- font-weight: 600;
2304
- }
2305
-
2306
- .stepped-current-label {
2307
- color: var(--text-secondary, #8b8b8b);
2308
- font-style: italic;
2309
- }
2310
-
2311
- /* Available workflows list (MSSCI-14301) */
2312
- .available-workflows {
2313
- padding: 4px 0;
2314
- }
2315
-
2316
- .available-workflows-header {
2317
- padding: 4px 8px;
2318
- border-bottom: 1px solid var(--border-color, #3c3c3c);
2319
- }
2320
-
2321
- .available-workflows-title {
2322
- font-size: 0.7rem;
2323
- font-weight: 600;
2324
- color: var(--text-secondary, #8b8b8b);
2325
- text-transform: uppercase;
2326
- letter-spacing: 0.05em;
2327
- }
2328
-
2329
- .available-workflows-list {
2330
- overflow-y: auto;
2331
- }
2332
-
2333
- .workflow-entry {
2334
- padding: 6px 8px;
2335
- border-bottom: 1px solid var(--border-color, #3c3c3c);
2336
- }
2337
-
2338
- .workflow-entry:last-child {
2339
- border-bottom: none;
2340
- }
2341
-
2342
- .workflow-entry-header {
2343
- display: flex;
2344
- align-items: center;
2345
- justify-content: space-between;
2346
- gap: 6px;
2347
- }
2348
-
2349
- .workflow-entry-name {
2350
- font-size: 0.8rem;
2351
- font-weight: 500;
2352
- color: var(--text-primary, #d4d4d4);
2353
- }
2354
-
2355
- .workflow-entry-type-badge {
2356
- font-size: 0.6rem;
2357
- padding: 0 4px;
2358
- flex-shrink: 0;
2359
- }
2360
-
2361
- .workflow-entry-description {
2362
- font-size: 0.7rem;
2363
- color: var(--text-secondary, #8b8b8b);
2364
- margin-top: 2px;
2365
- line-height: 1.3;
2366
- }
2367
-
2368
- .workflow-entry-hint {
2369
- font-size: 0.65rem;
2370
- color: var(--accent-color, #007acc);
2371
- font-family: var(--font-mono, monospace);
2372
- margin-top: 4px;
2373
- opacity: 0.8;
2374
- }
2375
-
2376
- .workflow-entry-footer {
2377
- display: flex;
2378
- justify-content: flex-end;
2379
- margin-top: 4px;
2380
- }
2381
-
2382
- .workflow-start-button {
2383
- font-size: 0.65rem;
2384
- height: 22px;
2385
- padding: 0 8px;
2386
- color: var(--accent-color, #007acc);
2387
- }
2388
-
2389
- /* Workflow panel container */
2390
- .workflow-panel {
2391
- height: 100%;
2392
- overflow-y: auto;
2393
- padding: 4px 8px;
2394
- }
2395
-
2396
- .workflow-panel .error-message {
2397
- color: var(--color-danger, #ef4444);
2398
- font-size: 0.75rem;
2399
- padding: 8px 0;
2400
- }
2401
-
2402
- /* Todo content wrapper */
2403
- .todo-content {
2404
- padding: 4px 0;
2405
- }
2406
-
2407
- /* Background panel */
2408
- .background-panel {
2409
- padding: 8px;
2410
- }
2411
-
2412
- .background-panel .panel-header {
2413
- display: flex;
2414
- justify-content: space-between;
2415
- align-items: center;
2416
- margin-bottom: 8px;
2417
- }
2418
-
2419
- .background-panel .task-counts {
2420
- font-size: 0.75rem;
2421
- color: var(--text-secondary, #8b8b8b);
2422
- }
2423
-
2424
- .background-panel .pending-count {
2425
- color: var(--accent-color, #007acc);
2426
- margin-right: 8px;
2427
- }
2428
-
2429
- .background-panel .clear-button {
2430
- padding: 2px 8px;
2431
- background: transparent;
2432
- border: 1px solid var(--border-color, #3c3c3c);
2433
- border-radius: 3px;
2434
- color: var(--text-secondary, #8b8b8b);
2435
- cursor: pointer;
2436
- font-size: 0.7rem;
2437
- }
2438
-
2439
- .background-panel .task-item {
2440
- display: flex;
2441
- align-items: center;
2442
- gap: 8px;
2443
- padding: 6px 0;
2444
- border-bottom: 1px solid var(--border-color, #3c3c3c);
2445
- }
2446
-
2447
- .background-panel .task-status {
2448
- width: 20px;
2449
- text-align: center;
2450
- font-size: 0.8rem;
2451
- }
2452
-
2453
- .background-panel .task-pending .task-status {
2454
- color: var(--accent-color, #007acc);
2455
- }
2456
-
2457
- .background-panel .task-completed .task-status {
2458
- color: var(--success-color, #4ec9b0);
2459
- }
2460
-
2461
- .background-panel .task-error .task-status {
2462
- color: var(--error-color, #f14c4c);
2463
- }
2464
-
2465
- .background-panel .task-content {
2466
- flex: 1;
2467
- min-width: 0;
2468
- }
2469
-
2470
- .background-panel .task-description {
2471
- font-size: 0.8rem;
2472
- display: block;
2473
- overflow: hidden;
2474
- text-overflow: ellipsis;
2475
- white-space: nowrap;
2476
- }
2477
-
2478
- .background-panel .task-type {
2479
- font-size: 0.7rem;
2480
- color: var(--text-secondary, #8b8b8b);
2481
- }
2482
-
2483
- .background-panel .task-elapsed {
2484
- font-size: 0.7rem;
2485
- color: var(--text-secondary, #8b8b8b);
2486
- }
2487
-
2488
- /* Diffs panel */
2489
- .diffs-panel {
2490
- padding: 8px;
2491
- }
2492
-
2493
- .diffs-panel .panel-header {
2494
- display: flex;
2495
- justify-content: space-between;
2496
- align-items: center;
2497
- margin-bottom: 8px;
2498
- }
2499
-
2500
- .diffs-panel .diff-count {
2501
- font-size: 0.75rem;
2502
- color: var(--text-secondary, #8b8b8b);
2503
- }
2504
-
2505
- .diffs-panel .diff-tabs {
2506
- display: flex;
2507
- flex-wrap: wrap;
2508
- gap: 4px;
2509
- margin-bottom: 8px;
2510
- }
2511
-
2512
- .diffs-panel .diff-tab {
2513
- padding: 4px 8px;
2514
- background: var(--bg-tertiary, #2d2d2d);
2515
- border: none;
2516
- border-radius: 3px;
2517
- color: var(--text-secondary, #8b8b8b);
2518
- font-size: 0.75rem;
2519
- cursor: pointer;
2520
- }
2521
-
2522
- .diffs-panel .diff-tab.active {
2523
- color: var(--accent-color, #007acc);
2524
- background: var(--bg-active, #37373d);
2525
- }
2526
-
2527
- .diffs-panel .diff-view {
2528
- background: var(--bg-tertiary, #2d2d2d);
2529
- border-radius: 4px;
2530
- overflow: hidden;
2531
- }
2532
-
2533
- .diffs-panel .diff-header {
2534
- display: flex;
2535
- justify-content: space-between;
2536
- padding: 6px 8px;
2537
- background: var(--bg-secondary, #252526);
2538
- font-size: 0.75rem;
2539
- }
2540
-
2541
- .diffs-panel .diff-path {
2542
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
2543
- }
2544
-
2545
- .diffs-panel .diff-tool {
2546
- color: var(--text-secondary, #8b8b8b);
2547
- }
2548
-
2549
- .diffs-panel .diff-content {
2550
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
2551
- font-size: 0.75rem;
2552
- overflow-x: auto;
2553
- }
2554
-
2555
- .diffs-panel .diff-line {
2556
- display: flex;
2557
- padding: 0 8px;
2558
- line-height: 1.4;
2559
- }
2560
-
2561
- .diffs-panel .diff-line.diff-added {
2562
- background: rgba(78, 201, 176, 0.1);
2563
- }
2564
-
2565
- .diffs-panel .diff-line.diff-removed {
2566
- background: rgba(241, 76, 76, 0.1);
2567
- }
2568
-
2569
- .diffs-panel .line-num {
2570
- min-width: 32px;
2571
- width: 32px;
2572
- flex-shrink: 0;
2573
- color: var(--text-secondary, #8b8b8b);
2574
- text-align: right;
2575
- padding-right: 8px;
2576
- user-select: none;
2577
- }
2578
-
2579
- .diffs-panel .line-prefix {
2580
- width: 16px;
2581
- flex-shrink: 0;
2582
- color: var(--text-secondary, #8b8b8b);
2583
- }
2584
-
2585
- .diffs-panel .line-content {
2586
- flex: 1;
2587
- white-space: pre;
2588
- overflow-x: visible;
2589
- }
2590
-
2591
- .diffs-panel .diff-added .line-prefix {
2592
- color: var(--success-color, #4ec9b0);
2593
- }
2594
-
2595
- .diffs-panel .diff-removed .line-prefix {
2596
- color: var(--error-color, #f14c4c);
2597
- }
2598
-
2599
- /* Debug panel */
2600
- .debug-panel {
2601
- padding: 8px;
2602
- }
2603
-
2604
- .debug-panel h4 {
2605
- font-size: 0.75rem;
2606
- color: var(--text-secondary, #8b8b8b);
2607
- margin: 0 0 8px 0;
2608
- text-transform: uppercase;
2609
- }
2610
-
2611
- .debug-panel .context-info {
2612
- background: var(--bg-tertiary, #2d2d2d);
2613
- border-radius: 4px;
2614
- padding: 8px 12px;
2615
- margin-bottom: 16px;
2616
- }
2617
-
2618
- .debug-panel .context-bar {
2619
- height: 8px;
2620
- background: var(--bg-primary, #1e1e1e);
2621
- border-radius: 4px;
2622
- overflow: hidden;
2623
- margin-bottom: 4px;
2624
- }
2625
-
2626
- .debug-panel .context-fill {
2627
- height: 100%;
2628
- background: var(--accent-color, #007acc);
2629
- }
2630
-
2631
- .context-sparkline {
2632
- width: 100%;
2633
- height: 32px;
2634
- margin: 4px 0;
2635
- }
2636
-
2637
- .context-sparkline svg {
2638
- width: 100%;
2639
- height: 100%;
2640
- }
2641
-
2642
- .debug-panel .context-text {
2643
- font-size: 0.75rem;
2644
- color: var(--text-primary, #d4d4d4);
2645
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
2646
- }
2647
-
2648
- .debug-panel .token-stats {
2649
- display: grid;
2650
- grid-template-columns: auto 1fr;
2651
- gap: 4px 12px;
2652
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
2653
- font-size: 0.75rem;
2654
- background: var(--bg-tertiary, #2d2d2d);
2655
- padding: 8px 12px;
2656
- border-radius: 4px;
2657
- margin: 0;
2658
- }
2659
-
2660
- .debug-panel .token-stats dt {
2661
- color: var(--text-secondary, #8b8b8b);
2662
- }
2663
-
2664
- .debug-panel .token-stats dd {
2665
- color: var(--text-primary, #d4d4d4);
2666
- text-align: right;
2667
- margin: 0;
2668
- }
2669
-
2670
- .debug-panel .context-breakdown {
2671
- display: grid;
2672
- grid-template-columns: auto 1fr;
2673
- gap: 4px 12px;
2674
- font-size: 0.75rem;
2675
- margin-top: 8px;
2676
- padding-top: 8px;
2677
- border-top: 1px solid var(--border-color, #3d3d3d);
2678
- }
2679
-
2680
- .debug-panel .context-breakdown dt {
2681
- color: var(--text-secondary, #8b8b8b);
2682
- }
2683
-
2684
- .debug-panel .context-breakdown dd {
2685
- color: var(--text-primary, #d4d4d4);
2686
- text-align: right;
2687
- margin: 0;
2688
- }
2689
-
2690
- /* Tier display - MSSCI-12799 */
2691
- .debug-panel .tier-display {
2692
- display: flex;
2693
- align-items: center;
2694
- gap: 8px;
2695
- margin-bottom: 8px;
2696
- padding: 6px 8px;
2697
- background: var(--bg-tertiary, #2d2d2d);
2698
- border-radius: 4px;
2699
- }
2700
-
2701
- .debug-panel .tier-badge {
2702
- display: inline-flex;
2703
- align-items: center;
2704
- padding: 2px 8px;
2705
- border-radius: 4px;
2706
- font-size: 0.7rem;
2707
- font-weight: 600;
2708
- text-transform: uppercase;
2709
- letter-spacing: 0.05em;
2710
- }
2711
-
2712
- .debug-panel .tier-badge.tier-full {
2713
- background: rgba(59, 130, 246, 0.2);
2714
- color: #3b82f6;
2715
- border: 1px solid rgba(59, 130, 246, 0.4);
2716
- }
2717
-
2718
- .debug-panel .tier-badge.tier-refresh {
2719
- background: rgba(34, 197, 94, 0.2);
2720
- color: #22c55e;
2721
- border: 1px solid rgba(34, 197, 94, 0.4);
2722
- }
2723
-
2724
- .debug-panel .tier-badge.tier-handoff {
2725
- background: rgba(234, 179, 8, 0.2);
2726
- color: #eab308;
2727
- border: 1px solid rgba(234, 179, 8, 0.4);
2728
- }
2729
-
2730
- .debug-panel .tier-badge.tier-minimal {
2731
- background: rgba(168, 85, 247, 0.2);
2732
- color: #a855f7;
2733
- border: 1px solid rgba(168, 85, 247, 0.4);
2734
- }
2735
-
2736
- .debug-panel .tier-savings {
2737
- font-size: 0.7rem;
2738
- color: var(--text-secondary, #8b8b8b);
2739
- }
2740
-
2741
- /* Token stat cards - MSSCI-12782 */
2742
- .debug-panel .token-stat-card {
2743
- display: contents;
2744
- }
2745
-
2746
- /* Component breakdown - MSSCI-12800 */
2747
- .debug-panel .component-breakdown {
2748
- margin: 8px 0;
2749
- background: var(--bg-tertiary, #2d2d2d);
2750
- border-radius: 4px;
2751
- overflow: hidden;
2752
- }
2753
-
2754
- .debug-panel .breakdown-header {
2755
- display: flex;
2756
- align-items: center;
2757
- justify-content: space-between;
2758
- padding: 6px 8px;
2759
- background: var(--bg-secondary, #252526);
2760
- }
2761
-
2762
- .debug-panel .breakdown-toggle {
2763
- background: none;
2764
- border: none;
2765
- color: var(--text-secondary, #8b8b8b);
2766
- cursor: pointer;
2767
- font-size: 0.75rem;
2768
- padding: 0;
2769
- }
2770
-
2771
- .debug-panel .breakdown-toggle:hover {
2772
- color: var(--text-primary, #d4d4d4);
2773
- }
2774
-
2775
- .debug-panel .total-tokens {
2776
- font-size: 0.7rem;
2777
- color: var(--text-secondary, #8b8b8b);
2778
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
2779
- }
2780
-
2781
- .debug-panel .component-list {
2782
- padding: 0 8px;
2783
- max-height: 0;
2784
- overflow: hidden;
2785
- transition: max-height 0.2s ease, padding 0.2s ease;
2786
- }
2787
-
2788
- .debug-panel .component-list.expanded {
2789
- max-height: 200px;
2790
- padding: 8px;
2791
- overflow-y: auto;
2792
- }
2793
-
2794
- .debug-panel .component-item {
2795
- display: flex;
2796
- justify-content: space-between;
2797
- align-items: center;
2798
- padding: 2px 0;
2799
- font-size: 0.7rem;
2800
- }
2801
-
2802
- .debug-panel .component-name {
2803
- color: var(--text-secondary, #8b8b8b);
2804
- }
2805
-
2806
- .debug-panel .component-tokens {
2807
- color: var(--text-primary, #d4d4d4);
2808
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
2809
- }
2810
-
2811
- /* HealthGauge header and controls */
2812
-
2813
- .health-gauge-header {
2814
- display: flex;
2815
- justify-content: space-between;
2816
- align-items: center;
2817
- margin-bottom: 0.25rem;
2818
- }
2819
-
2820
- .health-gauge-age {
2821
- font-size: 0.75rem;
2822
- color: var(--text-muted);
2823
- }
2824
-
2825
- .health-gauge-error {
2826
- font-size: 0.75rem;
2827
- color: var(--color-danger, #ef4444);
2828
- }
2829
-
2830
- /* HealthGauge SVG */
2831
-
2832
- [data-testid="health-gauge"] svg {
2833
- display: block;
2834
- margin: 0 auto;
2835
- }
2836
-
2837
- /* HealthGauge dimension breakdown */
2838
-
2839
- .health-gauge-partial {
2840
- text-align: center;
2841
- font-size: 0.75rem;
2842
- color: var(--text-muted);
2843
- margin-top: 0.25rem;
2844
- }
2845
-
2846
- .health-gauge-breakdown {
2847
- display: flex;
2848
- flex-direction: column;
2849
- gap: 0.25rem;
2850
- margin-top: 0.5rem;
2851
- padding: 0.5rem 0;
2852
- border-top: 1px solid var(--border);
2853
- }
2854
-
2855
- .health-gauge-dimension {
2856
- display: flex;
2857
- justify-content: space-between;
2858
- align-items: center;
2859
- cursor: pointer;
2860
- padding: 0.25rem 0.5rem;
2861
- border-radius: 4px;
2862
- }
2863
-
2864
- .health-gauge-dimension:hover {
2865
- background: var(--border);
2866
- }
2867
-
2868
- .dimension-label {
2869
- font-size: 0.8125rem;
2870
- color: var(--text-secondary);
2871
- text-decoration: underline;
2872
- text-decoration-color: transparent;
2873
- transition: text-decoration-color 0.15s, color 0.15s;
2874
- }
2875
-
2876
- .health-gauge-dimension:hover .dimension-label {
2877
- text-decoration-color: currentColor;
2878
- color: var(--text-primary);
2879
- }
2880
-
2881
- .dimension-score {
2882
- font-size: 0.8125rem;
2883
- font-variant-numeric: tabular-nums;
2884
- text-align: right;
2885
- font-family: var(--font-mono, monospace);
2886
- color: var(--text-primary);
2887
- }
2888
-
2889
- /* Settings panel */
2890
- .settings-panel {
2891
- padding: 8px;
2892
- }
2893
-
2894
- .settings-panel .settings-section {
2895
- margin-bottom: 16px;
2896
- }
2897
-
2898
- .settings-panel .settings-section h4 {
2899
- font-size: 0.75rem;
2900
- color: var(--text-secondary, #8b8b8b);
2901
- margin: 0 0 8px 0;
2902
- text-transform: uppercase;
2903
- }
2904
-
2905
- .settings-panel select {
2906
- width: 100%;
2907
- padding: 6px 8px;
2908
- background: var(--bg-tertiary, #2d2d2d);
2909
- border: 1px solid var(--border-color, #3c3c3c);
2910
- border-radius: 4px;
2911
- color: var(--text-primary, #d4d4d4);
2912
- font-size: 0.8rem;
2913
- }
2914
-
2915
- .settings-panel .toggle-setting {
2916
- display: grid;
2917
- grid-template-columns: 36px 1fr;
2918
- align-items: center;
2919
- gap: 4px 8px;
2920
- padding: 4px 0;
2921
- font-size: 0.8rem;
2922
- cursor: pointer;
2923
- }
2924
-
2925
- .settings-panel .setting-description {
2926
- grid-column: 2;
2927
- font-size: 0.7rem;
2928
- color: var(--text-secondary, #8b8b8b);
2929
- }
2930
-
2931
- /* Switch (Radix) - explicit colors since Tailwind v4 data-[state] variants don't generate */
2932
- .cyclist-switch {
2933
- background: var(--bg-tertiary, #2d2d2d);
2934
- border-color: var(--border-color, #3c3c3c);
2935
- }
2936
-
2937
- .cyclist-switch[data-state="checked"] {
2938
- background: var(--accent, #4f46e5);
2939
- border-color: var(--accent, #4f46e5);
2940
- }
2941
-
2942
- .cyclist-switch-thumb {
2943
- background: var(--text-primary, #e4e4e7);
2944
- }
2945
-
2946
- /* ThemePalette in settings - ensure solid background for dropdown */
2947
- .settings-panel .theme-palette-menu {
2948
- background: var(--bg-secondary, #252526);
2949
- }
2950
-
2951
- /* Audit Log panel - Tufte-inspired: maximize data-ink, minimize chrome */
2952
- .audit-log-panel {
2953
- font-size: 0.8rem;
2954
- }
2955
-
2956
- .audit-log-panel .audit-log-stats {
2957
- font-size: 0.75rem;
2958
- color: var(--text-secondary, #8b8b8b);
2959
- }
2960
-
2961
- .audit-log-panel .audit-log-stats .text-success {
2962
- color: var(--text-secondary, #8b8b8b);
2963
- }
2964
-
2965
- .audit-log-panel .audit-log-stats .text-error {
2966
- color: var(--error, #ef4444);
2967
- }
2968
-
2969
- /* Only highlight error count when there are actual errors */
2970
- .audit-log-panel .audit-log-stats .text-error:has(strong:empty),
2971
- .audit-log-panel .audit-log-stats .text-error strong:only-child {
2972
- opacity: 0.6;
2973
- }
2974
-
2975
- .audit-log-panel .audit-log-toolbar {
2976
- gap: 6px;
2977
- }
2978
-
2979
- .audit-log-panel select {
2980
- padding: 4px 8px;
2981
- background: var(--bg-tertiary, #2d2d2d);
2982
- border: 1px solid var(--border-color, #3c3c3c);
2983
- border-radius: 4px;
2984
- color: var(--text-primary, #d4d4d4);
2985
- font-size: 0.75rem;
2986
- }
2987
-
2988
- .audit-log-panel .audit-log-btn {
2989
- padding: 4px 10px !important;
2990
- background: transparent !important;
2991
- border: none !important;
2992
- color: var(--text-secondary, #8b8b8b);
2993
- font-size: 0.7rem;
2994
- font-weight: normal;
2995
- letter-spacing: 0.03em;
2996
- opacity: 0.7;
2997
- }
2998
-
2999
- .audit-log-panel .audit-log-btn:hover {
3000
- background: var(--bg-tertiary, #2d2d2d) !important;
3001
- color: var(--text-primary, #d4d4d4);
3002
- opacity: 1;
3003
- }
3004
-
3005
- .audit-log-panel .audit-log-btn-clear {
3006
- color: var(--error, #ef4444);
3007
- border-color: transparent !important;
3008
- background: transparent;
3009
- opacity: 0.6;
3010
- }
3011
-
3012
- .audit-log-panel .audit-log-btn-clear:hover {
3013
- opacity: 1;
3014
- background: transparent;
3015
- }
3016
-
3017
- .audit-log-panel table {
3018
- border-collapse: collapse;
3019
- width: 100%;
3020
- }
3021
-
3022
- .audit-log-panel thead th {
3023
- font-size: 0.65rem;
3024
- font-weight: 500;
3025
- text-transform: uppercase;
3026
- letter-spacing: 0.06em;
3027
- color: var(--text-muted, #666);
3028
- border-bottom: 1px solid var(--border-color, #3c3c3c);
3029
- padding: 6px 8px;
3030
- background: var(--bg-primary, #1e1e1e);
3031
- }
3032
-
3033
- .audit-log-panel tbody tr {
3034
- border-bottom: none;
3035
- }
3036
-
3037
- .audit-log-panel tbody td {
3038
- padding: 3px 8px;
3039
- color: var(--text-secondary, #8b8b8b);
3040
- font-size: 0.75rem;
3041
- }
3042
-
3043
- .audit-log-panel tbody tr:hover {
3044
- background: var(--bg-secondary, #252526);
3045
- }
3046
-
3047
- .audit-log-panel tbody .tool-name {
3048
- font-weight: 500;
3049
- }
3050
- .audit-log-panel tbody .tool-name[data-tool="read"] { color: var(--tool-read-color, #3b82f6); }
3051
- .audit-log-panel tbody .tool-name[data-tool="write"] { color: var(--tool-write-color, #f97316); }
3052
- .audit-log-panel tbody .tool-name[data-tool="bash"] { color: var(--tool-bash-color, #22c55e); }
3053
- .audit-log-panel tbody .tool-name[data-tool="glob"] { color: var(--tool-glob-color, #a855f7); }
3054
- .audit-log-panel tbody .tool-name[data-tool="grep"] { color: var(--tool-grep-color, #06b6d4); }
3055
- .audit-log-panel tbody .tool-name[data-tool="edit"] { color: var(--tool-edit-color, #eab308); }
3056
- .audit-log-panel tbody .tool-name[data-tool="task"] { color: var(--tool-task-color, #ec4899); }
3057
- .audit-log-panel tbody .tool-name[data-tool="skill"] { color: var(--text-secondary, #8b8b8b); }
3058
-
3059
- .audit-log-panel tbody .status-ok {
3060
- color: var(--success, #22c55e);
3061
- opacity: 0.4;
3062
- }
3063
-
3064
- .audit-log-panel tbody .status-err {
3065
- color: var(--error, #ef4444);
3066
- opacity: 0.9;
3067
- }
3068
-
3069
- .audit-log-panel .expanded-detail {
3070
- background: var(--bg-secondary, #252526);
3071
- }
3072
-
3073
- .audit-log-panel .expanded-detail > td {
3074
- padding: 8px 12px !important;
3075
- }
3076
-
3077
- .audit-log-panel .detail-grid {
3078
- display: grid;
3079
- grid-template-columns: auto 1fr;
3080
- gap: 2px 12px;
3081
- font-size: 0.72rem;
3082
- }
3083
-
3084
- .audit-log-panel .detail-row {
3085
- display: contents;
3086
- }
3087
-
3088
- .audit-log-panel .detail-label {
3089
- color: var(--text-muted, #666);
3090
- font-size: 0.68rem;
3091
- text-transform: uppercase;
3092
- letter-spacing: 0.04em;
3093
- white-space: nowrap;
3094
- padding: 1px 0;
3095
- }
3096
-
3097
- .audit-log-panel .detail-value {
3098
- color: var(--text-primary, #d4d4d4);
3099
- word-break: break-all;
3100
- padding: 1px 0;
3101
- }
3102
-
3103
- .audit-log-panel .detail-output {
3104
- margin-top: 6px;
3105
- }
3106
-
3107
- .audit-log-panel .detail-output .detail-label {
3108
- margin-bottom: 3px;
3109
- }
3110
-
3111
- .audit-log-panel .expanded-detail pre {
3112
- background: var(--bg-tertiary, #2d2d2d);
3113
- padding: 6px 8px;
3114
- border-radius: 4px;
3115
- font-size: 0.68rem;
3116
- overflow-x: auto;
3117
- max-height: 10rem;
3118
- color: var(--text-secondary, #8b8b8b);
3119
- margin: 0;
3120
- }
3121
-
3122
- /* Changed panel (FileTree) */
3123
- .changed-panel {
3124
- display: flex;
3125
- flex-direction: column;
3126
- height: 100%;
3127
- min-height: 0;
3128
- }
3129
-
3130
- /* =============================================================================
3131
- FileTree Component Styles
3132
- ============================================================================= */
3133
-
3134
- .filetree {
3135
- display: flex;
3136
- flex-direction: column;
3137
- height: 100%;
3138
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
3139
- font-size: 0.8rem;
3140
- overflow: hidden;
3141
- }
3142
-
3143
- /* File count badge - positioned at top right */
3144
- .file-count-badge {
3145
- display: inline-flex;
3146
- align-items: center;
3147
- justify-content: center;
3148
- min-width: 20px;
3149
- height: 18px;
3150
- padding: 0 6px;
3151
- margin: 8px 8px 0 auto;
3152
- background: var(--bg-tertiary, #2d2d2d);
3153
- border: 1px solid var(--border-color, #3c3c3c);
3154
- border-radius: 10px;
3155
- color: var(--text-secondary, #8b8b8b);
3156
- font-size: 0.7rem;
3157
- font-weight: 600;
3158
- flex-shrink: 0;
3159
- }
3160
-
3161
- .file-count-badge:not([title=""]) {
3162
- background: var(--accent-color, #007acc);
3163
- border-color: var(--accent-color, #007acc);
3164
- color: #fff;
3165
- }
3166
-
3167
- /* Empty state */
3168
- .filetree .empty-state {
3169
- display: flex;
3170
- align-items: center;
3171
- justify-content: center;
3172
- flex: 1;
3173
- color: var(--text-secondary, #8b8b8b);
3174
- font-size: 0.8rem;
3175
- font-family: var(--font-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);
3176
- font-style: italic;
3177
- }
3178
-
3179
- /* Full file tree enhancements */
3180
- .full-filetree .filetree-scroll {
3181
- flex: 1;
3182
- min-height: 0;
3183
- }
3184
-
3185
- .full-filetree .tree-loading {
3186
- color: var(--text-secondary, #8b8b8b);
3187
- font-size: 0.75rem;
3188
- font-style: italic;
3189
- padding: 4px 8px;
3190
- }
3191
-
3192
- .full-filetree .tree-error {
3193
- color: var(--color-danger, #ef4444);
3194
- font-size: 0.75rem;
3195
- padding: 4px 8px;
3196
- }
3197
-
3198
- .full-filetree .directory-header.has-changes .directory-name {
3199
- color: var(--color-warning, #f59e0b);
3200
- }
3201
-
3202
- /* Directory sections */
3203
- .directory-section {
3204
- border-bottom: 1px solid var(--border-color, #3c3c3c);
3205
- }
3206
-
3207
- .directory-section:last-child {
3208
- border-bottom: none;
3209
- }
3210
-
3211
- /* Directory header (clickable toggle row) */
3212
- .directory-header {
3213
- display: flex;
3214
- align-items: center;
3215
- gap: 4px;
3216
- padding: 6px 8px;
3217
- background: var(--bg-secondary, #252526);
3218
- cursor: pointer;
3219
- user-select: none;
3220
- transition: background 0.1s ease;
3221
- }
3222
-
3223
- .directory-header:hover {
3224
- background: var(--bg-tertiary, #2d2d2d);
3225
- }
3226
-
3227
- /* Toggle button */
3228
- .directory-toggle {
3229
- display: flex;
3230
- align-items: center;
3231
- justify-content: center;
3232
- width: 16px;
3233
- height: 16px;
3234
- padding: 0;
3235
- background: transparent;
3236
- border: none;
3237
- color: var(--text-secondary, #8b8b8b);
3238
- cursor: pointer;
3239
- flex-shrink: 0;
3240
- }
3241
-
3242
- .directory-toggle:hover {
3243
- color: var(--text-primary, #d4d4d4);
3244
- }
3245
-
3246
- .directory-toggle:focus {
3247
- outline: 1px solid var(--accent-color, #007acc);
3248
- outline-offset: 1px;
3249
- border-radius: 2px;
3250
- }
3251
-
3252
- .toggle-icon {
3253
- font-size: 0.65rem;
3254
- line-height: 1;
3255
- }
3256
-
3257
- /* Directory name (path) */
3258
- .directory-name {
3259
- flex: 1;
3260
- min-width: 0;
3261
- color: var(--text-primary, #d4d4d4);
3262
- font-weight: 500;
3263
- overflow: hidden;
3264
- text-overflow: ellipsis;
3265
- white-space: nowrap;
3266
- }
3267
-
3268
- /* Directory file count */
3269
- .directory-count {
3270
- padding: 1px 6px;
3271
- background: var(--bg-primary, #1e1e1e);
3272
- border-radius: 8px;
3273
- color: var(--text-secondary, #8b8b8b);
3274
- font-size: 0.65rem;
3275
- flex-shrink: 0;
3276
- }
3277
-
3278
- /* Container for file items within a directory */
3279
- .directory-files {
3280
- background: var(--bg-primary, #1e1e1e);
3281
- }
3282
-
3283
- /* Individual file item */
3284
- .file-item {
3285
- display: flex;
3286
- align-items: center;
3287
- gap: 8px;
3288
- padding: 4px 8px 4px 28px;
3289
- cursor: pointer;
3290
- transition: background 0.1s ease;
3291
- border-left: 2px solid transparent;
3292
- }
3293
-
3294
- .file-item:hover {
3295
- background: var(--bg-tertiary, #2d2d2d);
3296
- }
3297
-
3298
- .file-item.focused,
3299
- .file-item:focus {
3300
- background: var(--bg-active, #37373d);
3301
- border-left-color: var(--accent-color, #007acc);
3302
- outline: none;
3303
- }
3304
-
3305
- /* File status colors - row background tint */
3306
- .file-item.file-created {
3307
- border-left-color: transparent;
3308
- }
3309
-
3310
- .file-item.file-created:hover,
3311
- .file-item.file-created.focused,
3312
- .file-item.file-created:focus {
3313
- border-left-color: var(--color-success, #22c55e);
3314
- }
3315
-
3316
- .file-item.file-modified {
3317
- border-left-color: transparent;
3318
- }
3319
-
3320
- .file-item.file-modified:hover,
3321
- .file-item.file-modified.focused,
3322
- .file-item.file-modified:focus {
3323
- border-left-color: var(--color-warning, #f59e0b);
3324
- }
3325
-
3326
- .file-item.file-deleted {
3327
- border-left-color: transparent;
3328
- }
3329
-
3330
- .file-item.file-deleted:hover,
3331
- .file-item.file-deleted.focused,
3332
- .file-item.file-deleted:focus {
3333
- border-left-color: var(--color-danger, #ef4444);
3334
- }
3335
-
3336
- /* Status icon (+, ~, -) */
3337
- .status-icon {
3338
- display: inline-flex;
3339
- align-items: center;
3340
- justify-content: center;
3341
- width: 14px;
3342
- height: 14px;
3343
- font-size: 0.85rem;
3344
- font-weight: 700;
3345
- flex-shrink: 0;
3346
- line-height: 1;
3347
- }
3348
-
3349
- .status-icon.status-created {
3350
- color: var(--color-success, #22c55e);
3351
- }
3352
-
3353
- .status-icon.status-modified {
3354
- color: var(--color-warning, #f59e0b);
3355
- }
3356
-
3357
- .status-icon.status-deleted {
3358
- color: var(--color-danger, #ef4444);
3359
- }
3360
-
3361
- /* File name */
3362
- .file-name {
3363
- flex: 1;
3364
- min-width: 0;
3365
- color: var(--text-primary, #d4d4d4);
3366
- overflow: hidden;
3367
- text-overflow: ellipsis;
3368
- white-space: nowrap;
3369
- }
3370
-
3371
- /* Deleted files have muted/strikethrough style */
3372
- .file-item.file-deleted .file-name {
3373
- color: var(--text-secondary, #8b8b8b);
3374
- text-decoration: line-through;
3375
- text-decoration-color: var(--color-danger, #ef4444);
3376
- }
3377
-
3378
- /* Empty and placeholder states */
3379
- .empty,
3380
- .placeholder {
3381
- display: flex;
3382
- align-items: center;
3383
- justify-content: center;
3384
- color: var(--text-secondary, #8b8b8b);
3385
- height: 100%;
3386
- font-size: 0.875rem;
3387
- }
3388
-
3389
- .loading {
3390
- display: flex;
3391
- align-items: center;
3392
- justify-content: center;
3393
- height: 100%;
3394
- }
3395
-
3396
- .spinner {
3397
- color: var(--text-secondary, #8b8b8b);
3398
- font-size: 0.875rem;
3399
- }
3400
-
3401
- /* =============================================================================
3402
- Hide vanilla JS UI when React is active
3403
- ============================================================================= */
3404
-
3405
- /* When React app is mounted, hide the vanilla JS container */
3406
- #react-root:not(:empty) ~ #container {
3407
- display: none !important;
3408
- }
3409
-
3410
- /* =============================================================================
3411
- StatsStrip Component Styles
3412
- ============================================================================= */
3413
-
3414
- .stats-strip {
3415
- display: flex;
3416
- align-items: center;
3417
- justify-content: space-between;
3418
- padding: 0.25rem 0.75rem;
3419
- background: var(--bg-secondary, #252526);
3420
- border-top: 1px solid var(--border-color, #3c3c3c);
3421
- font-size: 0.8125rem;
3422
- flex-shrink: 0;
3423
- }
3424
-
3425
- .stats-left,
3426
- .stats-right {
3427
- display: flex;
3428
- align-items: center;
3429
- gap: 0.75rem;
3430
- }
3431
-
3432
- /* PWD display */
3433
- .stats-pwd {
3434
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
3435
- color: var(--text-secondary, #8b8b8b);
3436
- font-size: 0.75rem;
3437
- max-width: 200px;
3438
- overflow: hidden;
3439
- text-overflow: ellipsis;
3440
- white-space: nowrap;
3441
- }
3442
-
3443
- .stats-pwd:empty {
3444
- display: none;
3445
- }
3446
-
3447
- /* Identity elements */
3448
- .stats-jira-email,
3449
- .stats-github-user {
3450
- font-family: var(--font-mono, 'SF Mono', Monaco, monospace);
3451
- font-size: 0.75rem;
3452
- color: var(--text-secondary, #8b8b8b);
3453
- opacity: 0.8;
3454
- white-space: nowrap;
3455
- overflow: hidden;
3456
- text-overflow: ellipsis;
3457
- max-width: 150px;
3458
- }
3459
-
3460
- .stats-github-user {
3461
- color: var(--text-muted, #6b6b6b);
3462
- }
3463
-
3464
- /* Model badge */
3465
- .stats-model-badge {
3466
- display: inline-flex;
3467
- align-items: center;
3468
- padding: 0.125rem 0.5rem;
3469
- background: var(--accent-color, #007acc);
3470
- color: white;
3471
- border-radius: 10px;
3472
- font-weight: 600;
3473
- font-size: 0.7rem;
3474
- text-transform: lowercase;
3475
- letter-spacing: 0.03em;
3476
- }
3477
-
3478
- /* Context meter */
3479
- .stats-context-meter {
3480
- position: relative;
3481
- width: 80px;
3482
- height: 18px;
3483
- background: var(--bg-primary, #1e1e1e);
3484
- border-radius: 4px;
3485
- overflow: hidden;
3486
- }
3487
-
3488
- .stats-context-meter .context-fill {
3489
- position: absolute;
3490
- top: 0;
3491
- left: 0;
3492
- height: 100%;
3493
- border-radius: 4px;
3494
- transition: width 0.3s ease, background-color 0.3s ease;
3495
- }
3496
-
3497
- .stats-context-meter .context-percent {
3498
- position: absolute;
3499
- top: 50%;
3500
- left: 50%;
3501
- transform: translate(-50%, -50%);
3502
- font-size: 0.75rem;
3503
- font-weight: 600;
3504
- color: var(--text-primary, #d4d4d4);
3505
- text-shadow: 0 0 2px var(--bg-primary, #1e1e1e);
3506
- z-index: 1;
3507
- }
3508
-
3509
- /* Context level colors */
3510
- .stats-context-meter.level-safe .context-fill {
3511
- background: var(--color-success, #22c55e);
3512
- }
3513
-
3514
- .stats-context-meter.level-warning .context-fill {
3515
- background: var(--color-warning, #f59e0b);
3516
- }
3517
-
3518
- .stats-context-meter.level-danger .context-fill {
3519
- background: var(--color-danger, #ef4444);
3520
- }
3521
-
3522
- /* =============================================================================
3523
- Queue Display Component Styles (MSSCI-12275)
3524
- ============================================================================= */
3525
-
3526
- .queue-display {
3527
- display: flex;
3528
- flex-direction: column;
3529
- background: var(--bg-tertiary, #2d2d2d);
3530
- border-radius: 4px;
3531
- margin-top: 8px;
3532
- max-height: 150px;
3533
- overflow: hidden;
3534
- }
3535
-
3536
- .queue-header {
3537
- display: flex;
3538
- align-items: center;
3539
- gap: 8px;
3540
- padding: 6px 8px;
3541
- background: var(--bg-secondary, #252526);
3542
- border-bottom: 1px solid var(--border-color, #3c3c3c);
3543
- }
3544
-
3545
- .queue-display .queue-count {
3546
- font-size: 0.75rem;
3547
- color: var(--text-secondary, #8b8b8b);
3548
- }
3549
-
3550
- .queue-mode-badge {
3551
- font-size: 0.7rem;
3552
- padding: 1px 4px;
3553
- border-radius: 3px;
3554
- background: var(--bg-primary, #1e1e1e);
3555
- }
3556
-
3557
- .queue-mode-badge.bell-mode {
3558
- background: rgba(245, 158, 11, 0.2);
3559
- color: var(--color-warning, #f59e0b);
3560
- }
3561
-
3562
- .queue-clear-btn {
3563
- margin-left: auto;
3564
- padding: 2px 8px;
3565
- background: transparent;
3566
- border: 1px solid var(--border-color, #3c3c3c);
3567
- border-radius: 3px;
3568
- color: var(--text-secondary, #8b8b8b);
3569
- cursor: pointer;
3570
- font-size: 0.7rem;
3571
- }
3572
-
3573
- .queue-clear-btn:hover {
3574
- color: var(--text-primary, #d4d4d4);
3575
- border-color: var(--text-secondary, #8b8b8b);
3576
- }
3577
-
3578
- .queue-list {
3579
- list-style: none;
3580
- margin: 0;
3581
- padding: 0;
3582
- overflow-y: auto;
3583
- max-height: 100px;
3584
- }
3585
-
3586
- .queue-item {
3587
- display: flex;
3588
- align-items: center;
3589
- gap: 6px;
3590
- padding: 4px 8px;
3591
- border-bottom: 1px solid var(--border-color, #3c3c3c);
3592
- font-size: 0.75rem;
3593
- }
3594
-
3595
- .queue-item:last-child {
3596
- border-bottom: none;
3597
- }
3598
-
3599
- .queue-item-text {
3600
- flex: 1;
3601
- color: var(--text-primary, #d4d4d4);
3602
- overflow: hidden;
3603
- text-overflow: ellipsis;
3604
- white-space: nowrap;
3605
- }
3606
-
3607
- .queue-image-indicator {
3608
- color: var(--accent-color, #007acc);
3609
- font-size: 0.7rem;
3610
- flex-shrink: 0;
3611
- }
3612
-
3613
- .queue-item-remove {
3614
- padding: 0 4px;
3615
- background: transparent;
3616
- border: none;
3617
- color: var(--text-secondary, #8b8b8b);
3618
- cursor: pointer;
3619
- font-size: 0.9rem;
3620
- line-height: 1;
3621
- }
3622
-
3623
- .queue-item-remove:hover {
3624
- color: var(--error-color, #f14c4c);
3625
- }
3626
-
3627
- .queue-item-actions {
3628
- display: flex;
3629
- gap: 2px;
3630
- flex-shrink: 0;
3631
- }
3632
-
3633
- .queue-item-inject {
3634
- padding: 0 4px;
3635
- background: transparent;
3636
- border: none;
3637
- color: var(--accent-color, #007acc);
3638
- cursor: pointer;
3639
- font-size: 0.7rem;
3640
- line-height: 1;
3641
- }
3642
-
3643
- .queue-item-inject:hover {
3644
- color: var(--success-color, #4caf50);
3645
- }
3646
-
3647
- /* =============================================================================
3648
- Bell Injected Message Styles (Audit Fix 2026-02-03)
3649
- ============================================================================= */
3650
-
3651
- .message-bell-injected {
3652
- border-left: 2px solid var(--warning-color, #cca700);
3653
- padding-left: 0.75rem;
3654
- }
3655
-
3656
- .message-bell-injected .bell-indicator {
3657
- display: inline-block;
3658
- margin-right: 6px;
3659
- font-size: 0.9em;
3660
- opacity: 0.8;
3661
- }
3662
-
3663
- /* =============================================================================
3664
- Agent Popup Styles (MSSCI-12403)
3665
- ============================================================================= */
3666
-
3667
- .agent-popup-backdrop {
3668
- position: fixed;
3669
- inset: 0;
3670
- background: rgba(0, 0, 0, 0.5);
3671
- z-index: 1000;
3672
- }
3673
-
3674
- .agent-popup {
3675
- position: fixed;
3676
- top: 50%;
3677
- left: 50%;
3678
- transform: translate(-50%, -50%);
3679
- background: var(--surface-color, #1e1e1e);
3680
- border: 1px solid var(--border-color, #3c3c3c);
3681
- border-radius: 8px;
3682
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
3683
- z-index: 1001;
3684
- width: 600px;
3685
- max-width: 90vw;
3686
- max-height: 80vh;
3687
- display: flex;
3688
- flex-direction: column;
3689
- overflow: hidden;
3690
- }
3691
-
3692
- .agent-popup-header {
3693
- display: flex;
3694
- justify-content: space-between;
3695
- align-items: center;
3696
- padding: 12px 16px;
3697
- border-bottom: 1px solid var(--border-color, #3c3c3c);
3698
- background: var(--surface-alt, #252526);
3699
- }
3700
-
3701
- .agent-popup-theme {
3702
- font-size: 1.1rem;
3703
- font-weight: 600;
3704
- margin: 0;
3705
- display: flex;
3706
- align-items: center;
3707
- gap: 8px;
3708
- }
3709
-
3710
- .agent-popup-close {
3711
- background: transparent;
3712
- border: none;
3713
- color: var(--text-muted, #888);
3714
- font-size: 1.5rem;
3715
- cursor: pointer;
3716
- padding: 0 4px;
3717
- line-height: 1;
3718
- }
3719
-
3720
- .agent-popup-close:hover {
3721
- color: var(--text-color, #fff);
3722
- }
3723
-
3724
- .agent-popup-content {
3725
- display: grid;
3726
- grid-template-columns: 200px 1fr;
3727
- flex: 1;
3728
- overflow: hidden;
3729
- }
3730
-
3731
- .agent-popup-loading,
3732
- .agent-popup-error {
3733
- padding: 32px;
3734
- text-align: center;
3735
- color: var(--text-muted, #888);
3736
- }
3737
-
3738
- /* Team Roster */
3739
- .agent-popup-roster {
3740
- border-right: 1px solid var(--border-color, #3c3c3c);
3741
- overflow-y: auto;
3742
- padding: 8px 0;
3743
- }
3744
-
3745
- .roster-title {
3746
- font-size: 0.75rem;
3747
- text-transform: uppercase;
3748
- color: var(--text-muted, #888);
3749
- padding: 4px 12px;
3750
- margin: 0 0 4px 0;
3751
- }
3752
-
3753
- .roster-list {
3754
- list-style: none;
3755
- margin: 0;
3756
- padding: 0;
3757
- }
3758
-
3759
- .roster-item {
3760
- display: flex;
3761
- align-items: center;
3762
- gap: 8px;
3763
- padding: 8px 12px;
3764
- cursor: pointer;
3765
- transition: background 0.15s;
3766
- }
3767
-
3768
- .roster-item:hover {
3769
- background: var(--hover-color, rgba(255, 255, 255, 0.05));
3770
- }
3771
-
3772
- .roster-item.current {
3773
- background: var(--hover-color, rgba(255, 255, 255, 0.08));
3774
- }
3775
-
3776
- .roster-item.previewing {
3777
- background: var(--accent-bg, rgba(0, 122, 204, 0.15));
3778
- }
3779
-
3780
- .roster-character {
3781
- flex: 1;
3782
- white-space: nowrap;
3783
- overflow: hidden;
3784
- text-overflow: ellipsis;
3785
- font-size: 0.9rem;
3786
- }
3787
-
3788
- .roster-role {
3789
- font-size: 0.65rem;
3790
- padding: 2px 6px;
3791
- border-radius: 3px;
3792
- text-transform: uppercase;
3793
- font-weight: 500;
3794
- color: #000;
3795
- }
3796
-
3797
- .roster-current-marker {
3798
- font-size: 0.6rem;
3799
- color: var(--accent-color, #007acc);
3800
- }
3801
-
3802
- /* Agent Details - MSSCI-14204: Fixed dimensions to prevent layout shift */
3803
- .agent-popup-details {
3804
- padding: 16px;
3805
- overflow-y: auto;
3806
- min-height: 380px;
3807
- max-height: calc(80vh - 60px); /* Account for header */
3808
- transition: opacity 0.15s ease;
3809
- }
3810
-
3811
- .popup-portrait {
3812
- width: 200px;
3813
- height: 200px;
3814
- margin: 0 auto 16px;
3815
- border-radius: 8px;
3816
- overflow: hidden;
3817
- background: var(--surface-alt, #252526);
3818
- }
3819
-
3820
- .popup-portrait img {
3821
- width: 100%;
3822
- height: 100%;
3823
- object-fit: cover;
3824
- }
3825
-
3826
- .popup-portrait .portrait-placeholder {
3827
- width: 100%;
3828
- height: 100%;
3829
- display: flex;
3830
- align-items: center;
3831
- justify-content: center;
3832
- font-size: 3rem;
3833
- }
3834
-
3835
- .popup-character {
3836
- text-align: center;
3837
- font-size: 1.2rem;
3838
- margin: 0 0 8px 0;
3839
- }
3840
-
3841
- .popup-role-mapping {
3842
- text-align: center;
3843
- font-size: 0.85rem;
3844
- color: var(--text-muted, #888);
3845
- margin-bottom: 16px;
3846
- }
3847
-
3848
- .popup-role-mapping .role-badge {
3849
- display: inline-block;
3850
- font-size: 0.65rem;
3851
- padding: 2px 6px;
3852
- border-radius: 3px;
3853
- text-transform: uppercase;
3854
- font-weight: 500;
3855
- color: #000;
3856
- margin-right: 4px;
3857
- }
3858
-
3859
- .popup-detail {
3860
- margin-bottom: 12px;
3861
- max-height: 4.5em; /* ~3 lines */
3862
- overflow: hidden;
3863
- }
3864
-
3865
- .popup-detail label {
3866
- display: block;
3867
- font-size: 0.75rem;
3868
- text-transform: uppercase;
3869
- color: var(--text-muted, #888);
3870
- margin-bottom: 2px;
3871
- }
3872
-
3873
- .popup-detail span {
3874
- font-size: 0.9rem;
3875
- display: -webkit-box;
3876
- -webkit-line-clamp: 3;
3877
- -webkit-box-orient: vertical;
3878
- overflow: hidden;
3879
- }
3880
-
3881
- .lift-value.positive {
3882
- color: var(--success-color, #4caf50);
3883
- }
3884
-
3885
- .lift-value.negative {
3886
- color: var(--error-color, #f44336);
3887
- }
3888
-
3889
- .tier-badge {
3890
- font-size: 0.7rem;
3891
- padding: 2px 8px;
3892
- border-radius: 4px;
3893
- font-weight: 600;
3894
- }
3895
-
3896
- .tier-badge.tier-s {
3897
- background: linear-gradient(135deg, #ffd700, #ffb700);
3898
- color: #000;
3899
- }
3900
-
3901
- .tier-badge.tier-a {
3902
- background: #4caf50;
3903
- color: #fff;
3904
- }
3905
-
3906
- .tier-badge.tier-b {
3907
- background: #2196f3;
3908
- color: #fff;
3909
- }
3910
-
3911
- .tier-badge.tier-c {
3912
- background: #757575;
3913
- color: #fff;
3914
- }
3915
-
3916
- /* =============================================================================
3917
- Span Timeline Styles
3918
- ============================================================================= */
3919
-
3920
- .span-timeline {
3921
- display: flex;
3922
- flex-direction: column;
3923
- background: var(--surface-color, #1e1e1e);
3924
- border: 1px solid var(--border-color, #3c3c3c);
3925
- border-radius: 4px;
3926
- overflow: hidden;
3927
- }
3928
-
3929
- .span-timeline-loading {
3930
- padding: 16px;
3931
- text-align: center;
3932
- color: var(--text-muted, #888);
3933
- }
3934
-
3935
- .span-timeline-toolbar {
3936
- display: flex;
3937
- justify-content: space-between;
3938
- align-items: center;
3939
- padding: 4px 8px;
3940
- background: var(--surface-alt, #252526);
3941
- border-bottom: 1px solid var(--border-color, #3c3c3c);
3942
- font-size: 0.8rem;
3943
- }
3944
-
3945
- .span-timeline-toolbar .span-count {
3946
- color: var(--text-muted, #888);
3947
- }
3948
-
3949
- .span-timeline-toolbar .zoom-controls {
3950
- display: flex;
3951
- gap: 2px;
3952
- }
3953
-
3954
- .span-timeline-toolbar .zoom-controls button {
3955
- width: 24px;
3956
- height: 24px;
3957
- padding: 0;
3958
- background: var(--surface-color, #1e1e1e);
3959
- border: 1px solid var(--border-color, #3c3c3c);
3960
- border-radius: 3px;
3961
- color: var(--text-color, #fff);
3962
- cursor: pointer;
3963
- font-size: 0.9rem;
3964
- }
3965
-
3966
- .span-timeline-toolbar .zoom-controls button:hover {
3967
- background: var(--hover-color, rgba(255, 255, 255, 0.1));
3968
- }
3969
-
3970
- .span-timeline-container {
3971
- flex: 1;
3972
- overflow-x: auto;
3973
- overflow-y: hidden;
3974
- }
3975
-
3976
- .span-timeline-track {
3977
- position: relative;
3978
- min-height: 160px;
3979
- }
3980
-
3981
- .span-timeline-axis {
3982
- position: absolute;
3983
- top: 0;
3984
- left: 0;
3985
- right: 0;
3986
- height: 20px;
3987
- border-bottom: 1px solid var(--border-color, #3c3c3c);
3988
- }
3989
-
3990
- .span-timeline-axis .axis-tick {
3991
- position: absolute;
3992
- top: 0;
3993
- height: 100%;
3994
- border-left: 1px solid var(--border-color, #3c3c3c);
3995
- }
3996
-
3997
- .span-timeline-axis .tick-label {
3998
- position: absolute;
3999
- top: 2px;
4000
- left: 4px;
4001
- font-size: 0.65rem;
4002
- color: var(--text-muted, #888);
4003
- white-space: nowrap;
4004
- }
4005
-
4006
- .span-timeline-bars {
4007
- position: absolute;
4008
- top: 24px;
4009
- left: 0;
4010
- right: 0;
4011
- bottom: 0;
4012
- }
4013
-
4014
- .span-bar {
4015
- position: absolute;
4016
- height: 24px;
4017
- border-radius: 3px;
4018
- cursor: pointer;
4019
- overflow: hidden;
4020
- transition: opacity 0.15s, transform 0.15s;
4021
- opacity: 0.85;
4022
- }
4023
-
4024
- .span-bar:hover {
4025
- opacity: 1;
4026
- transform: scaleY(1.1);
4027
- z-index: 10;
4028
- }
4029
-
4030
- .span-bar.selected {
4031
- opacity: 1;
4032
- box-shadow: 0 0 0 2px var(--accent-color, #007acc);
4033
- z-index: 11;
4034
- }
4035
-
4036
- .span-bar.error {
4037
- background-image: repeating-linear-gradient(
4038
- 45deg,
4039
- transparent,
4040
- transparent 4px,
4041
- rgba(0, 0, 0, 0.2) 4px,
4042
- rgba(0, 0, 0, 0.2) 8px
4043
- );
4044
- }
4045
-
4046
- .span-bar-label {
4047
- padding: 2px 6px;
4048
- font-size: 0.65rem;
4049
- color: #000;
4050
- font-weight: 500;
4051
- white-space: nowrap;
4052
- overflow: hidden;
4053
- text-overflow: ellipsis;
4054
- }
4055
-
4056
- .span-timeline-details {
4057
- background: var(--surface-alt, #252526);
4058
- border-top: 1px solid var(--border-color, #3c3c3c);
4059
- padding: 8px;
4060
- font-size: 0.8rem;
4061
- }
4062
-
4063
- .span-timeline-details .detail-header {
4064
- display: flex;
4065
- align-items: center;
4066
- gap: 8px;
4067
- margin-bottom: 8px;
4068
- }
4069
-
4070
- .span-timeline-details .tool-badge {
4071
- padding: 2px 8px;
4072
- border-radius: 3px;
4073
- font-size: 0.7rem;
4074
- font-weight: 500;
4075
- color: #000;
4076
- }
4077
-
4078
- .span-timeline-details .duration {
4079
- color: var(--text-muted, #888);
4080
- }
4081
-
4082
- .span-timeline-details .status.success {
4083
- color: var(--success-color, #4caf50);
4084
- }
4085
-
4086
- .span-timeline-details .status.error {
4087
- color: var(--error-color, #f44336);
4088
- }
4089
-
4090
- .span-timeline-details .close-details {
4091
- margin-left: auto;
4092
- background: transparent;
4093
- border: none;
4094
- color: var(--text-muted, #888);
4095
- font-size: 1.2rem;
4096
- cursor: pointer;
4097
- padding: 0 4px;
4098
- }
4099
-
4100
- .span-timeline-details .close-details:hover {
4101
- color: var(--text-color, #fff);
4102
- }
4103
-
4104
- .span-timeline-details .detail-body {
4105
- display: grid;
4106
- gap: 4px;
4107
- }
4108
-
4109
- .span-timeline-details .detail-row {
4110
- display: flex;
4111
- gap: 8px;
4112
- }
4113
-
4114
- .span-timeline-details .detail-row label {
4115
- color: var(--text-muted, #888);
4116
- min-width: 60px;
4117
- }
4118
-
4119
- .span-timeline-details .detail-row .mono {
4120
- font-family: monospace;
4121
- font-size: 0.75rem;
4122
- }
4123
-
4124
- .span-timeline-details .detail-row.error span {
4125
- color: var(--error-color, #f44336);
4126
- }
4127
-
4128
- .span-timeline-legend {
4129
- display: flex;
4130
- gap: 12px;
4131
- padding: 4px 8px;
4132
- background: var(--surface-alt, #252526);
4133
- border-top: 1px solid var(--border-color, #3c3c3c);
4134
- font-size: 0.7rem;
4135
- }
4136
-
4137
- .span-timeline-legend .legend-item {
4138
- display: flex;
4139
- align-items: center;
4140
- gap: 4px;
4141
- }
4142
-
4143
- .span-timeline-legend .legend-color {
4144
- width: 12px;
4145
- height: 12px;
4146
- border-radius: 2px;
4147
- }
4148
-
4149
- .span-timeline-legend .legend-label {
4150
- color: var(--text-muted, #888);
4151
- }
4152
-
4153
- /* =============================================================================
4154
- Confirm Dialog Styles
4155
- ============================================================================= */
4156
-
4157
- .confirm-dialog-backdrop {
4158
- position: fixed;
4159
- inset: 0;
4160
- background: rgba(0, 0, 0, 0.6);
4161
- display: flex;
4162
- align-items: center;
4163
- justify-content: center;
4164
- z-index: 2000;
4165
- }
4166
-
4167
- .confirm-dialog {
4168
- background: var(--surface-color, #1e1e1e);
4169
- border: 1px solid var(--border-color, #3c3c3c);
4170
- border-radius: 8px;
4171
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
4172
- width: 400px;
4173
- max-width: 90vw;
4174
- padding: 20px;
4175
- }
4176
-
4177
- .confirm-dialog.danger {
4178
- border-color: var(--error-color, #f44336);
4179
- }
4180
-
4181
- .confirm-dialog-title {
4182
- font-size: 1.1rem;
4183
- font-weight: 600;
4184
- margin: 0 0 12px 0;
4185
- display: flex;
4186
- align-items: center;
4187
- gap: 8px;
4188
- }
4189
-
4190
- .confirm-dialog-title .danger-icon {
4191
- font-size: 1.2rem;
4192
- }
4193
-
4194
- .confirm-dialog-message {
4195
- margin: 0 0 20px 0;
4196
- color: var(--text-muted, #b0b0b0);
4197
- font-size: 0.95rem;
4198
- line-height: 1.5;
4199
- }
4200
-
4201
- .confirm-dialog-actions {
4202
- display: flex;
4203
- justify-content: flex-end;
4204
- gap: 8px;
4205
- }
4206
-
4207
- .confirm-dialog-btn {
4208
- padding: 8px 16px;
4209
- border-radius: 4px;
4210
- font-size: 0.9rem;
4211
- font-weight: 500;
4212
- cursor: pointer;
4213
- transition: background 0.15s, border-color 0.15s;
4214
- }
4215
-
4216
- .confirm-dialog-btn.cancel {
4217
- background: transparent;
4218
- border: 1px solid var(--border-color, #3c3c3c);
4219
- color: var(--text-color, #fff);
4220
- }
4221
-
4222
- .confirm-dialog-btn.cancel:hover {
4223
- background: var(--hover-color, rgba(255, 255, 255, 0.05));
4224
- }
4225
-
4226
- .confirm-dialog-btn.confirm {
4227
- background: var(--accent-color, #007acc);
4228
- border: 1px solid var(--accent-color, #007acc);
4229
- color: #fff;
4230
- }
4231
-
4232
- .confirm-dialog-btn.confirm:hover {
4233
- background: var(--accent-hover, #005a9e);
4234
- }
4235
-
4236
- .confirm-dialog-btn.confirm.danger {
4237
- background: var(--error-color, #f44336);
4238
- border-color: var(--error-color, #f44336);
4239
- }
4240
-
4241
- .confirm-dialog-btn.confirm.danger:hover {
4242
- background: #d32f2f;
4243
- border-color: #d32f2f;
4244
- }
4245
-
4246
- .confirm-dialog-btn:focus-visible {
4247
- outline: 2px solid var(--accent-color, #007acc);
4248
- outline-offset: 2px;
4249
- }
4250
-
4251
- /* =============================================================================
4252
- Bell/Relay Toggle Styles (MSSCI-12275, MSSCI-12395)
4253
- ============================================================================= */
4254
-
4255
- .control-bar-toggles {
4256
- display: flex;
4257
- gap: 4px;
4258
- margin-bottom: 4px;
4259
- }
4260
-
4261
- /* Agent Quick Picker (MSSCI-14762) */
4262
- .agent-quick-picker-wrapper {
4263
- position: relative;
4264
- }
4265
-
4266
- .agent-quick-picker-dropdown {
4267
- position: absolute;
4268
- bottom: 100%;
4269
- left: 0;
4270
- margin-bottom: 4px;
4271
- min-width: 120px;
4272
- max-height: 300px;
4273
- overflow-y: auto;
4274
- background: var(--bg-secondary, #1e1e1e);
4275
- border: 1px solid var(--border-color, #3c3c3c);
4276
- border-radius: 6px;
4277
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
4278
- z-index: 100;
4279
- padding: 4px;
4280
- }
4281
-
4282
- .agent-quick-picker-option {
4283
- display: flex;
4284
- align-items: center;
4285
- gap: 8px;
4286
- padding: 6px 8px;
4287
- border-radius: 4px;
4288
- cursor: pointer;
4289
- transition: background 0.1s ease;
4290
- }
4291
-
4292
- .agent-quick-picker-option:hover {
4293
- background: var(--bg-hover, #3c3c3c);
4294
- }
4295
-
4296
- .agent-quick-picker-option.current {
4297
- background: var(--bg-tertiary, #2d2d2d);
4298
- border-left: 2px solid var(--accent, #007acc);
4299
- }
4300
-
4301
- .agent-option-role {
4302
- font-size: 0.7rem;
4303
- text-transform: uppercase;
4304
- color: var(--text-secondary, #8b8b8b);
4305
- min-width: 64px;
4306
- }
4307
-
4308
-
4309
- .btn-toggle {
4310
- display: flex;
4311
- align-items: center;
4312
- justify-content: center;
4313
- width: 32px;
4314
- height: 28px;
4315
- padding: 0;
4316
- background: var(--bg-tertiary, #2d2d2d);
4317
- border: 1px solid var(--border-color, #3c3c3c);
4318
- border-radius: 4px;
4319
- cursor: pointer;
4320
- transition: all 0.15s ease;
4321
- }
4322
-
4323
- .btn-toggle:hover {
4324
- background: var(--bg-hover, #3c3c3c);
4325
- border-color: var(--text-secondary, #8b8b8b);
4326
- }
4327
-
4328
- .btn-toggle svg {
4329
- opacity: 0.5;
4330
- transition: opacity 0.15s ease;
4331
- }
4332
-
4333
- .btn-toggle:hover svg {
4334
- opacity: 0.8;
4335
- }
4336
-
4337
- /* Bell mode active */
4338
- .btn-toggle.bell-toggle.active {
4339
- background: rgba(245, 158, 11, 0.15);
4340
- border-color: var(--color-warning, #f59e0b);
4341
- }
4342
-
4343
- .btn-toggle.bell-toggle.active svg {
4344
- opacity: 1;
4345
- }
4346
-
4347
- /* Relay mode active */
4348
- .btn-toggle.relay-toggle.active {
4349
- background: rgba(139, 92, 246, 0.15);
4350
- border-color: var(--color-purple, #8b5cf6);
4351
- }
4352
-
4353
- .btn-toggle.relay-toggle.active svg {
4354
- opacity: 1;
4355
- }
4356
-
4357
- /* Active toggle colors (no animation - too distracting) */
4358
- .btn-toggle.bell-toggle.active {
4359
- color: var(--color-warning, #f59e0b);
4360
- }
4361
-
4362
- .btn-toggle.relay-toggle.active {
4363
- color: var(--color-purple, #8b5cf6);
4364
- }
4365
-
4366
- /* TirePump button - visible at 50%+ context */
4367
- .btn-toggle.pump-toggle {
4368
- background: rgba(6, 182, 212, 0.15);
4369
- border-color: var(--color-cyan, #06b6d4);
4370
- }
4371
-
4372
- .btn-toggle.pump-toggle svg {
4373
- opacity: 1;
4374
- }
4375
-
4376
- /* TirePump warning state at 70%+ context */
4377
- .btn-toggle.pump-toggle.warning {
4378
- background: rgba(239, 68, 68, 0.2);
4379
- border-color: var(--color-error, #ef4444);
4380
- animation: pump-pulse 1.5s ease-in-out infinite;
4381
- }
4382
-
4383
- .btn-toggle.pump-toggle.warning svg {
4384
- opacity: 1;
4385
- }
4386
-
4387
- @keyframes pump-pulse {
4388
- 0%, 100% {
4389
- opacity: 1;
4390
- box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.4);
4391
- }
4392
- 50% {
4393
- opacity: 0.85;
4394
- box-shadow: 0 0 8px 2px rgba(239, 68, 68, 0.3);
4395
- }
4396
- }