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