@polderlabs/bizar 7.0.4 → 8.1.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 (627) hide show
  1. package/.claude/agents/agent-browser.md +1 -1
  2. package/.claude/agents/baldr.md +1 -1
  3. package/.claude/agents/forseti.md +1 -1
  4. package/.claude/agents/frigg.md +1 -1
  5. package/.claude/agents/heimdall.md +1 -1
  6. package/.claude/agents/hermod.md +1 -1
  7. package/.claude/agents/mimir.md +1 -1
  8. package/.claude/agents/odin.md +1 -1
  9. package/.claude/agents/quick.md +1 -1
  10. package/.claude/agents/semble-search.md +1 -1
  11. package/.claude/agents/thor.md +1 -1
  12. package/.claude/agents/tyr.md +1 -1
  13. package/.claude/agents/vidarr.md +1 -1
  14. package/.claude/agents/vor.md +1 -1
  15. package/.claude/commands/goal.md +98 -0
  16. package/.claude/settings.local.json +7 -0
  17. package/bizar-dash/DESIGN.md +729 -969
  18. package/bizar-dash/GLYPH.md +418 -0
  19. package/bizar-dash/PLAN.md +1135 -0
  20. package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js +6 -0
  21. package/bizar-dash/dist/assets/ActivityFeed-CqF6iSDQ.js.map +1 -0
  22. package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js +1 -0
  23. package/bizar-dash/dist/assets/ActivityView-qdhDjRtL.js.map +1 -0
  24. package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js +28 -0
  25. package/bizar-dash/dist/assets/AgentsView-BwXkOayl.js.map +1 -0
  26. package/bizar-dash/dist/assets/Badge-BH4C3aUF.js +1 -0
  27. package/bizar-dash/dist/assets/Badge-BH4C3aUF.js.map +1 -0
  28. package/bizar-dash/dist/assets/Button-RmN1RKhE.js +6 -0
  29. package/bizar-dash/dist/assets/Button-RmN1RKhE.js.map +1 -0
  30. package/bizar-dash/dist/assets/Card-BzJeYR2D.js +1 -0
  31. package/bizar-dash/dist/assets/Card-BzJeYR2D.js.map +1 -0
  32. package/bizar-dash/dist/assets/Chip-CN2bvm7a.js +1 -0
  33. package/bizar-dash/dist/assets/Chip-CN2bvm7a.js.map +1 -0
  34. package/bizar-dash/dist/assets/EmptyState-DEiBv4-r.js +1 -0
  35. package/bizar-dash/dist/assets/EmptyState-DEiBv4-r.js.map +1 -0
  36. package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js +6 -0
  37. package/bizar-dash/dist/assets/GoalsView-CvsrzEez.js.map +1 -0
  38. package/bizar-dash/dist/assets/KanbanCard-DZEaAiEr.js +21 -0
  39. package/bizar-dash/dist/assets/KanbanCard-DZEaAiEr.js.map +1 -0
  40. package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js +67 -0
  41. package/bizar-dash/dist/assets/LibrariesView-CPgKGPpM.js.map +1 -0
  42. package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js +13 -0
  43. package/bizar-dash/dist/assets/MemoryView-Bbez5pMN.js.map +1 -0
  44. package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js +1 -0
  45. package/bizar-dash/dist/assets/OverviewView-BDegBWgg.js.map +1 -0
  46. package/bizar-dash/dist/assets/Select-xwxbK8Ed.js +16 -0
  47. package/bizar-dash/dist/assets/Select-xwxbK8Ed.js.map +1 -0
  48. package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js +10 -0
  49. package/bizar-dash/dist/assets/SettingsRow-CppSgkT_.js.map +1 -0
  50. package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js +43 -0
  51. package/bizar-dash/dist/assets/SettingsView-DUc2meHV.js.map +1 -0
  52. package/bizar-dash/dist/assets/Sheet-C_sIEw35.js +1 -0
  53. package/bizar-dash/dist/assets/Sheet-C_sIEw35.js.map +1 -0
  54. package/bizar-dash/dist/assets/Sparkline-D664vGWW.js +1 -0
  55. package/bizar-dash/dist/assets/Sparkline-D664vGWW.js.map +1 -0
  56. package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js +16 -0
  57. package/bizar-dash/dist/assets/StatTile-BRsUIA6P.js.map +1 -0
  58. package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js +1 -0
  59. package/bizar-dash/dist/assets/TasksView-DVyX5-DY.js.map +1 -0
  60. package/bizar-dash/dist/assets/Textarea-Dk97nmjO.js +1 -0
  61. package/bizar-dash/dist/assets/Textarea-Dk97nmjO.js.map +1 -0
  62. package/bizar-dash/dist/assets/ViewHeader-dPd4zAyj.js +6 -0
  63. package/bizar-dash/dist/assets/ViewHeader-dPd4zAyj.js.map +1 -0
  64. package/bizar-dash/dist/assets/brain-BajPVibR.js +6 -0
  65. package/bizar-dash/dist/assets/brain-BajPVibR.js.map +1 -0
  66. package/bizar-dash/dist/assets/calendar-CaP_Bbgc.js +6 -0
  67. package/bizar-dash/dist/assets/calendar-CaP_Bbgc.js.map +1 -0
  68. package/bizar-dash/dist/assets/cmdk-BLWIhKrV.js +80 -0
  69. package/bizar-dash/dist/assets/cmdk-BLWIhKrV.js.map +1 -0
  70. package/bizar-dash/dist/assets/dnd-kit-DU8GZk7s.js +5 -0
  71. package/bizar-dash/dist/assets/dnd-kit-DU8GZk7s.js.map +1 -0
  72. package/bizar-dash/dist/assets/git-pull-request-CFRRwdxp.js +11 -0
  73. package/bizar-dash/dist/assets/git-pull-request-CFRRwdxp.js.map +1 -0
  74. package/bizar-dash/dist/assets/index-AL3OLUfz.js +1 -0
  75. package/bizar-dash/dist/assets/index-AL3OLUfz.js.map +1 -0
  76. package/bizar-dash/dist/assets/main-CcQfRfIJ.css +1 -0
  77. package/bizar-dash/dist/assets/main-LxX9zTRk.js +109 -0
  78. package/bizar-dash/dist/assets/main-LxX9zTRk.js.map +1 -0
  79. package/bizar-dash/dist/assets/plus-CVH1JB04.js +6 -0
  80. package/bizar-dash/dist/assets/plus-CVH1JB04.js.map +1 -0
  81. package/bizar-dash/dist/assets/terminal-B2sSd5t7.js +11 -0
  82. package/bizar-dash/dist/assets/terminal-B2sSd5t7.js.map +1 -0
  83. package/bizar-dash/dist/assets/trash-2-JtYRQ79q.js +6 -0
  84. package/bizar-dash/dist/assets/trash-2-JtYRQ79q.js.map +1 -0
  85. package/bizar-dash/dist/assets/triangle-alert-Nzbrm0I2.js +6 -0
  86. package/bizar-dash/dist/assets/triangle-alert-Nzbrm0I2.js.map +1 -0
  87. package/bizar-dash/dist/assets/useFetch-CoVWwbml.js +1 -0
  88. package/bizar-dash/dist/assets/useFetch-CoVWwbml.js.map +1 -0
  89. package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js +1 -0
  90. package/bizar-dash/dist/assets/useWebSocket-CVIQB8yG.js.map +1 -0
  91. package/bizar-dash/dist/assets/wrench-B7go551L.js +6 -0
  92. package/bizar-dash/dist/assets/wrench-B7go551L.js.map +1 -0
  93. package/bizar-dash/dist/{mobile.html → v8.html} +6 -9
  94. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  95. package/bizar-dash/src/server/api.mjs +10 -0
  96. package/bizar-dash/src/server/bg-poller.mjs +81 -1
  97. package/bizar-dash/src/server/bg-poller.test.mjs +28 -0
  98. package/bizar-dash/src/server/progress-parser.mjs +221 -0
  99. package/bizar-dash/src/server/progress-parser.test.mjs +105 -0
  100. package/bizar-dash/src/server/routes/agents-cc.mjs +381 -0
  101. package/bizar-dash/src/server/routes/agents-cc.test.mjs +35 -0
  102. package/bizar-dash/src/server/routes/goals.mjs +307 -0
  103. package/bizar-dash/src/server/routes/tasks.mjs +11 -0
  104. package/bizar-dash/src/server/server.mjs +1 -57
  105. package/bizar-dash/src/web/v8/App.tsx +188 -0
  106. package/bizar-dash/src/web/v8/__tests__/App.test.tsx +102 -0
  107. package/bizar-dash/src/web/v8/__tests__/AppShell.test.tsx +79 -0
  108. package/bizar-dash/src/web/v8/__tests__/PageSkeleton.test.tsx +12 -0
  109. package/bizar-dash/src/web/v8/__tests__/SettingsView.test.tsx +84 -0
  110. package/bizar-dash/src/web/v8/__tests__/Sidebar.test.tsx +95 -0
  111. package/bizar-dash/src/web/v8/__tests__/activity.test.tsx +63 -0
  112. package/bizar-dash/src/web/v8/__tests__/agents.test.tsx +90 -0
  113. package/bizar-dash/src/web/v8/__tests__/control-plane.test.tsx +104 -0
  114. package/bizar-dash/src/web/v8/__tests__/controls.test.tsx +135 -0
  115. package/bizar-dash/src/web/v8/__tests__/cx.test.ts +25 -0
  116. package/bizar-dash/src/web/v8/__tests__/data.test.tsx +293 -0
  117. package/bizar-dash/src/web/v8/__tests__/feedback.test.tsx +213 -0
  118. package/bizar-dash/src/web/v8/__tests__/goals.test.tsx +105 -0
  119. package/bizar-dash/src/web/v8/__tests__/kanban.test.tsx +176 -0
  120. package/bizar-dash/src/web/v8/__tests__/libraries.test.tsx +70 -0
  121. package/bizar-dash/src/web/v8/__tests__/memory.test.tsx +60 -0
  122. package/bizar-dash/src/web/v8/__tests__/navigation.test.tsx +137 -0
  123. package/bizar-dash/src/web/v8/__tests__/settings.test.tsx +104 -0
  124. package/bizar-dash/src/web/v8/__tests__/theme.test.tsx +98 -0
  125. package/bizar-dash/src/web/v8/__tests__/useFetch.test.ts +92 -0
  126. package/bizar-dash/src/web/v8/__tests__/useWebSocket.test.ts +87 -0
  127. package/bizar-dash/src/web/v8/__tests__/views.test.tsx +182 -0
  128. package/bizar-dash/src/web/v8/data/fetcher.ts +59 -0
  129. package/bizar-dash/src/web/v8/data/types.ts +154 -0
  130. package/bizar-dash/src/web/v8/data/useFetch.ts +62 -0
  131. package/bizar-dash/src/web/v8/data/useWebSocket.ts +153 -0
  132. package/bizar-dash/src/web/v8/main.tsx +28 -0
  133. package/bizar-dash/src/web/v8/shell/AppShell.tsx +90 -0
  134. package/bizar-dash/src/web/v8/shell/PageSkeleton.tsx +29 -0
  135. package/bizar-dash/src/web/v8/shell/Sidebar.tsx +361 -0
  136. package/bizar-dash/src/web/v8/shell/StatusBar.tsx +63 -0
  137. package/bizar-dash/src/web/v8/shell/Topbar.tsx +113 -0
  138. package/bizar-dash/src/web/v8/shell/index.ts +15 -0
  139. package/bizar-dash/src/web/v8/ui/activity/ActivityFeed.tsx +137 -0
  140. package/bizar-dash/src/web/v8/ui/agents/AgentActivity.tsx +101 -0
  141. package/bizar-dash/src/web/v8/ui/agents/AgentCard.tsx +158 -0
  142. package/bizar-dash/src/web/v8/ui/agents/AgentDetail.tsx +252 -0
  143. package/bizar-dash/src/web/v8/ui/agents/AgentStreamPanel.tsx +371 -0
  144. package/bizar-dash/src/web/v8/ui/controls/Button.tsx +141 -0
  145. package/bizar-dash/src/web/v8/ui/controls/ButtonGroup.tsx +32 -0
  146. package/bizar-dash/src/web/v8/ui/controls/Checkbox.tsx +49 -0
  147. package/bizar-dash/src/web/v8/ui/controls/Field.tsx +78 -0
  148. package/bizar-dash/src/web/v8/ui/controls/Form.tsx +23 -0
  149. package/bizar-dash/src/web/v8/ui/controls/IconButton.tsx +112 -0
  150. package/bizar-dash/src/web/v8/ui/controls/Input.tsx +94 -0
  151. package/bizar-dash/src/web/v8/ui/controls/RadioGroup.tsx +74 -0
  152. package/bizar-dash/src/web/v8/ui/controls/Select.tsx +171 -0
  153. package/bizar-dash/src/web/v8/ui/controls/Slider.tsx +68 -0
  154. package/bizar-dash/src/web/v8/ui/controls/Switch.tsx +56 -0
  155. package/bizar-dash/src/web/v8/ui/controls/Textarea.tsx +64 -0
  156. package/bizar-dash/src/web/v8/ui/controls/Toggle.tsx +36 -0
  157. package/bizar-dash/src/web/v8/ui/controls/ToggleGroup.tsx +85 -0
  158. package/bizar-dash/src/web/v8/ui/data/Accordion.tsx +134 -0
  159. package/bizar-dash/src/web/v8/ui/data/Avatar.tsx +175 -0
  160. package/bizar-dash/src/web/v8/ui/data/Badge.tsx +93 -0
  161. package/bizar-dash/src/web/v8/ui/data/BarList.tsx +101 -0
  162. package/bizar-dash/src/web/v8/ui/data/Card.tsx +140 -0
  163. package/bizar-dash/src/web/v8/ui/data/Chip.tsx +96 -0
  164. package/bizar-dash/src/web/v8/ui/data/Kbd.tsx +42 -0
  165. package/bizar-dash/src/web/v8/ui/data/ProgressBar.tsx +93 -0
  166. package/bizar-dash/src/web/v8/ui/data/Sparkline.tsx +98 -0
  167. package/bizar-dash/src/web/v8/ui/data/StatTile.tsx +150 -0
  168. package/bizar-dash/src/web/v8/ui/data/Table.tsx +170 -0
  169. package/bizar-dash/src/web/v8/ui/data/Timeline.tsx +130 -0
  170. package/bizar-dash/src/web/v8/ui/data/ViewHeader.tsx +122 -0
  171. package/bizar-dash/src/web/v8/ui/feedback/Alert.tsx +95 -0
  172. package/bizar-dash/src/web/v8/ui/feedback/Banner.tsx +39 -0
  173. package/bizar-dash/src/web/v8/ui/feedback/ContextMenu.tsx +143 -0
  174. package/bizar-dash/src/web/v8/ui/feedback/Dialog.tsx +149 -0
  175. package/bizar-dash/src/web/v8/ui/feedback/Drawer.tsx +8 -0
  176. package/bizar-dash/src/web/v8/ui/feedback/DropdownMenu.tsx +231 -0
  177. package/bizar-dash/src/web/v8/ui/feedback/EmptyState.tsx +48 -0
  178. package/bizar-dash/src/web/v8/ui/feedback/Popover.tsx +56 -0
  179. package/bizar-dash/src/web/v8/ui/feedback/Sheet.tsx +103 -0
  180. package/bizar-dash/src/web/v8/ui/feedback/Skeleton.tsx +67 -0
  181. package/bizar-dash/src/web/v8/ui/feedback/Spinner.tsx +30 -0
  182. package/bizar-dash/src/web/v8/ui/feedback/Toast.tsx +66 -0
  183. package/bizar-dash/src/web/v8/ui/feedback/Tooltip.tsx +89 -0
  184. package/bizar-dash/src/web/v8/ui/goals/GoalCard.tsx +176 -0
  185. package/bizar-dash/src/web/v8/ui/goals/GoalDetail.tsx +245 -0
  186. package/bizar-dash/src/web/v8/ui/goals/KeyResult.tsx +115 -0
  187. package/bizar-dash/src/web/v8/ui/index.ts +322 -0
  188. package/bizar-dash/src/web/v8/ui/kanban/KanbanBoard.tsx +83 -0
  189. package/bizar-dash/src/web/v8/ui/kanban/KanbanCard.tsx +247 -0
  190. package/bizar-dash/src/web/v8/ui/kanban/KanbanColumn.tsx +186 -0
  191. package/bizar-dash/src/web/v8/ui/kanban/KanbanContextMenu.tsx +122 -0
  192. package/bizar-dash/src/web/v8/ui/kanban/KanbanQuickAdd.tsx +141 -0
  193. package/bizar-dash/src/web/v8/ui/libraries/LibraryGrid.tsx +30 -0
  194. package/bizar-dash/src/web/v8/ui/libraries/LibraryItem.tsx +161 -0
  195. package/bizar-dash/src/web/v8/ui/memory/MemoryVault.tsx +144 -0
  196. package/bizar-dash/src/web/v8/ui/navigation/CommandPalette.tsx +224 -0
  197. package/bizar-dash/src/web/v8/ui/navigation/NavLink.tsx +81 -0
  198. package/bizar-dash/src/web/v8/ui/navigation/Pagination.tsx +164 -0
  199. package/bizar-dash/src/web/v8/ui/navigation/Tabs.tsx +128 -0
  200. package/bizar-dash/src/web/v8/ui/navigation/useCommandPaletteHotkey.test.ts +79 -0
  201. package/bizar-dash/src/web/v8/ui/primitives/Box.tsx +144 -0
  202. package/bizar-dash/src/web/v8/ui/primitives/Center.tsx +40 -0
  203. package/bizar-dash/src/web/v8/ui/primitives/Cluster.tsx +67 -0
  204. package/bizar-dash/src/web/v8/ui/primitives/Grid.tsx +104 -0
  205. package/bizar-dash/src/web/v8/ui/primitives/Inline.tsx +77 -0
  206. package/bizar-dash/src/web/v8/ui/primitives/Portal.tsx +33 -0
  207. package/bizar-dash/src/web/v8/ui/primitives/ScrollArea.tsx +62 -0
  208. package/bizar-dash/src/web/v8/ui/primitives/Separator.tsx +42 -0
  209. package/bizar-dash/src/web/v8/ui/primitives/Stack.tsx +73 -0
  210. package/bizar-dash/src/web/v8/ui/primitives/VisuallyHidden.tsx +49 -0
  211. package/bizar-dash/src/web/v8/ui/settings/SettingsNav.tsx +91 -0
  212. package/bizar-dash/src/web/v8/ui/settings/SettingsRow.tsx +88 -0
  213. package/bizar-dash/src/web/v8/ui/settings/SettingsSection.tsx +109 -0
  214. package/bizar-dash/src/web/v8/ui/styles/globals.css +225 -0
  215. package/bizar-dash/src/web/v8/ui/styles/reset.css +57 -0
  216. package/bizar-dash/src/web/v8/ui/styles/tokens.css +217 -0
  217. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.test.tsx +74 -0
  218. package/bizar-dash/src/web/v8/ui/theme/DensityProvider.tsx +66 -0
  219. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.test.tsx +86 -0
  220. package/bizar-dash/src/web/v8/ui/theme/ThemeProvider.tsx +94 -0
  221. package/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +88 -0
  222. package/bizar-dash/src/web/v8/ui/theme/useDensity.ts +15 -0
  223. package/bizar-dash/src/web/v8/ui/theme/useTheme.ts +16 -0
  224. package/bizar-dash/src/web/v8/ui/utils/cx.ts +19 -0
  225. package/bizar-dash/src/web/v8/views/Activity/ActivityView.tsx +71 -0
  226. package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +172 -0
  227. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.test.tsx +142 -0
  228. package/bizar-dash/src/web/v8/views/CommandPalette/AppCommandPalette.tsx +247 -0
  229. package/bizar-dash/src/web/v8/views/Goals/GoalsView.tsx +193 -0
  230. package/bizar-dash/src/web/v8/views/Libraries/LibrariesView.tsx +108 -0
  231. package/bizar-dash/src/web/v8/views/Memory/MemoryView.tsx +77 -0
  232. package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +152 -0
  233. package/bizar-dash/src/web/v8/views/Router.tsx +72 -0
  234. package/bizar-dash/src/web/v8/views/Settings/SettingsView.tsx +730 -0
  235. package/bizar-dash/src/web/v8/views/Tasks/CommandPalettePlaceholder.tsx +106 -0
  236. package/bizar-dash/src/web/v8/views/Tasks/TasksKanbanPlaceholder.tsx +62 -0
  237. package/bizar-dash/src/web/v8/views/Tasks/TasksView.tsx +165 -0
  238. package/bizar-dash/src/web/v8/vite-env.d.ts +15 -0
  239. package/bizar-dash/src/web/{mobile.html → v8.html} +4 -7
  240. package/bizar-dash/tests/components/Button.test.tsx +51 -14
  241. package/bizar-dash/tests/components/Card.test.tsx +37 -20
  242. package/bizar-dash/tests/components/Dialog.test.tsx +80 -0
  243. package/bizar-dash/tests/components/Toast.test.tsx +48 -95
  244. package/bizar-dash/tests/goals-decompose.test.mjs +177 -0
  245. package/bizar-dash/tests/setup.ts +47 -0
  246. package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +30 -15
  247. package/bizar-dash/vite.config.ts +41 -2
  248. package/bizar-dash/vitest.config.ts +9 -4
  249. package/cli/bin.mjs +32 -0
  250. package/cli/install.mjs +26 -1
  251. package/cli/provision-claude.mjs +86 -0
  252. package/package.json +36 -3
  253. package/scripts/run-dev.mjs +84 -0
  254. package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js +0 -114
  255. package/bizar-dash/dist/assets/EnvVarsSection-BfhAz3ax.js.map +0 -1
  256. package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js +0 -1
  257. package/bizar-dash/dist/assets/MobileChat-DLWdv6tQ.js.map +0 -1
  258. package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js +0 -1
  259. package/bizar-dash/dist/assets/MobileSettings-Bxv62uPY.js.map +0 -1
  260. package/bizar-dash/dist/assets/Toast-ATSAmbdi.js +0 -26
  261. package/bizar-dash/dist/assets/Toast-ATSAmbdi.js.map +0 -1
  262. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js +0 -1
  263. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js.map +0 -1
  264. package/bizar-dash/dist/assets/main-CJAtrosO.css +0 -1
  265. package/bizar-dash/dist/assets/main-DKKj9dsq.js +0 -430
  266. package/bizar-dash/dist/assets/main-DKKj9dsq.js.map +0 -1
  267. package/bizar-dash/dist/assets/mobile-C_naUN91.js +0 -1
  268. package/bizar-dash/dist/assets/mobile-C_naUN91.js.map +0 -1
  269. package/bizar-dash/dist/assets/mobile-layout-BWLtwtfQ.css +0 -1
  270. package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js +0 -211
  271. package/bizar-dash/dist/assets/mobile-layout-GZ3bE8L6.js.map +0 -1
  272. package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js +0 -65
  273. package/bizar-dash/dist/assets/useSlashCommands-BOwD7lNb.js.map +0 -1
  274. package/bizar-dash/dist/index.html +0 -43
  275. package/bizar-dash/src/web/App.tsx +0 -915
  276. package/bizar-dash/src/web/MobileApp.tsx +0 -414
  277. package/bizar-dash/src/web/components/ArtifactCreateDialog.tsx +0 -95
  278. package/bizar-dash/src/web/components/ArtifactListDialog.tsx +0 -55
  279. package/bizar-dash/src/web/components/ArtifactViewer.tsx +0 -144
  280. package/bizar-dash/src/web/components/AuditDialog.tsx +0 -79
  281. package/bizar-dash/src/web/components/AutosaveField.tsx +0 -50
  282. package/bizar-dash/src/web/components/BackupRestore.tsx +0 -330
  283. package/bizar-dash/src/web/components/BgStatusBadge.tsx +0 -32
  284. package/bizar-dash/src/web/components/Button.tsx +0 -56
  285. package/bizar-dash/src/web/components/CanvasContextMenu.tsx +0 -68
  286. package/bizar-dash/src/web/components/Card.tsx +0 -40
  287. package/bizar-dash/src/web/components/CollapsibleSection.tsx +0 -72
  288. package/bizar-dash/src/web/components/CommandDialog.tsx +0 -66
  289. package/bizar-dash/src/web/components/DoctorPanel.tsx +0 -160
  290. package/bizar-dash/src/web/components/EmptyState.tsx +0 -30
  291. package/bizar-dash/src/web/components/EnvVarManager.tsx +0 -430
  292. package/bizar-dash/src/web/components/EvalDiff.tsx +0 -157
  293. package/bizar-dash/src/web/components/EvalExportButton.tsx +0 -27
  294. package/bizar-dash/src/web/components/EvalRunCard.tsx +0 -78
  295. package/bizar-dash/src/web/components/FileBrowser.tsx +0 -633
  296. package/bizar-dash/src/web/components/HeadroomSettings.tsx +0 -418
  297. package/bizar-dash/src/web/components/HeadroomStatus.tsx +0 -158
  298. package/bizar-dash/src/web/components/HelpDialog.tsx +0 -55
  299. package/bizar-dash/src/web/components/InviteDialog.tsx +0 -205
  300. package/bizar-dash/src/web/components/KillConfirmDialog.tsx +0 -88
  301. package/bizar-dash/src/web/components/MobileBottomNav.tsx +0 -38
  302. package/bizar-dash/src/web/components/MobileDrawer.tsx +0 -68
  303. package/bizar-dash/src/web/components/MobileHeader.tsx +0 -50
  304. package/bizar-dash/src/web/components/MobileLayout.tsx +0 -63
  305. package/bizar-dash/src/web/components/Modal.tsx +0 -215
  306. package/bizar-dash/src/web/components/Notifications.tsx +0 -242
  307. package/bizar-dash/src/web/components/ScheduleTemplateCard.tsx +0 -72
  308. package/bizar-dash/src/web/components/ScreenshotCapture.tsx +0 -138
  309. package/bizar-dash/src/web/components/ScreenshotOCR.tsx +0 -42
  310. package/bizar-dash/src/web/components/SearchModal.tsx +0 -227
  311. package/bizar-dash/src/web/components/SettingsNav.tsx +0 -117
  312. package/bizar-dash/src/web/components/SettingsSearch.tsx +0 -328
  313. package/bizar-dash/src/web/components/Sidebar.tsx +0 -89
  314. package/bizar-dash/src/web/components/Spinner.tsx +0 -19
  315. package/bizar-dash/src/web/components/StatusBadge.tsx +0 -56
  316. package/bizar-dash/src/web/components/Tag.tsx +0 -41
  317. package/bizar-dash/src/web/components/TailscaleSettings.tsx +0 -161
  318. package/bizar-dash/src/web/components/TaskCard.tsx +0 -69
  319. package/bizar-dash/src/web/components/TaskCreateSheet.tsx +0 -76
  320. package/bizar-dash/src/web/components/Toast.tsx +0 -150
  321. package/bizar-dash/src/web/components/Toggle.tsx +0 -31
  322. package/bizar-dash/src/web/components/Topbar.tsx +0 -455
  323. package/bizar-dash/src/web/components/UsageChart.tsx +0 -250
  324. package/bizar-dash/src/web/components/UsageTable.tsx +0 -90
  325. package/bizar-dash/src/web/components/VirtualList.tsx +0 -53
  326. package/bizar-dash/src/web/components/VisualPlanDialog.tsx +0 -58
  327. package/bizar-dash/src/web/components/VoiceNotesPanel.tsx +0 -211
  328. package/bizar-dash/src/web/components/VoiceRecorder.tsx +0 -105
  329. package/bizar-dash/src/web/components/WorkspaceSelector.tsx +0 -158
  330. package/bizar-dash/src/web/components/agents/CommunicationLog.tsx +0 -126
  331. package/bizar-dash/src/web/components/agents/DependencyGraph.tsx +0 -163
  332. package/bizar-dash/src/web/components/agents/QualityGates.tsx +0 -123
  333. package/bizar-dash/src/web/components/agents/RealTimeEventLog.tsx +0 -127
  334. package/bizar-dash/src/web/components/agents/RoutingDecisions.test.tsx +0 -148
  335. package/bizar-dash/src/web/components/agents/RoutingDecisions.tsx +0 -160
  336. package/bizar-dash/src/web/components/background/AttachButton.tsx +0 -96
  337. package/bizar-dash/src/web/components/background/TmuxAttachCard.tsx +0 -122
  338. package/bizar-dash/src/web/components/chat/AgentChip.tsx +0 -68
  339. package/bizar-dash/src/web/components/chat/AgentNode.tsx +0 -127
  340. package/bizar-dash/src/web/components/chat/AgentTree.tsx +0 -80
  341. package/bizar-dash/src/web/components/chat/ChatBubble.tsx +0 -60
  342. package/bizar-dash/src/web/components/chat/ChatComposer.tsx +0 -72
  343. package/bizar-dash/src/web/components/chat/ChatInfoPanel.tsx +0 -370
  344. package/bizar-dash/src/web/components/chat/ChatRail.tsx +0 -387
  345. package/bizar-dash/src/web/components/chat/ChatThread.tsx +0 -127
  346. package/bizar-dash/src/web/components/chat/ChatTopBar.tsx +0 -50
  347. package/bizar-dash/src/web/components/chat/Composer.tsx +0 -166
  348. package/bizar-dash/src/web/components/chat/ConfirmModal.tsx +0 -54
  349. package/bizar-dash/src/web/components/chat/EmptyState.tsx +0 -21
  350. package/bizar-dash/src/web/components/chat/FirstRunGreeting.tsx +0 -18
  351. package/bizar-dash/src/web/components/chat/FloatingComposer.tsx +0 -38
  352. package/bizar-dash/src/web/components/chat/InfoPanel.tsx +0 -184
  353. package/bizar-dash/src/web/components/chat/JumpToLatest.tsx +0 -58
  354. package/bizar-dash/src/web/components/chat/LoadingSkeleton.tsx +0 -19
  355. package/bizar-dash/src/web/components/chat/MessageBlock.tsx +0 -260
  356. package/bizar-dash/src/web/components/chat/MessageBubble.tsx +0 -60
  357. package/bizar-dash/src/web/components/chat/SessionList.tsx +0 -163
  358. package/bizar-dash/src/web/components/chat/SessionRowMenu.tsx +0 -206
  359. package/bizar-dash/src/web/components/chat/StreamingIndicator.tsx +0 -37
  360. package/bizar-dash/src/web/components/chat/SuggestionCards.tsx +0 -55
  361. package/bizar-dash/src/web/components/chat/WelcomeScreen.tsx +0 -36
  362. package/bizar-dash/src/web/components/chat/_legacy.ts +0 -30
  363. package/bizar-dash/src/web/components/chat/index.ts +0 -31
  364. package/bizar-dash/src/web/components/chat/useAutoGrowTextarea.ts +0 -18
  365. package/bizar-dash/src/web/components/chat/useChat.ts +0 -1190
  366. package/bizar-dash/src/web/components/chat/useSlashCommands.ts +0 -47
  367. package/bizar-dash/src/web/components/goals/GoalInput.tsx +0 -86
  368. package/bizar-dash/src/web/components/goals/PlanVisualization.tsx +0 -111
  369. package/bizar-dash/src/web/components/tasks/BacklogPanel.css +0 -109
  370. package/bizar-dash/src/web/components/tasks/BacklogPanel.tsx +0 -209
  371. package/bizar-dash/src/web/hooks/useAutosave.ts +0 -107
  372. package/bizar-dash/src/web/hooks/useI18n.ts +0 -13
  373. package/bizar-dash/src/web/index.html +0 -37
  374. package/bizar-dash/src/web/lib/api.ts +0 -237
  375. package/bizar-dash/src/web/lib/goapPlanner.ts +0 -614
  376. package/bizar-dash/src/web/lib/i18n.ts +0 -25
  377. package/bizar-dash/src/web/lib/logger.ts +0 -30
  378. package/bizar-dash/src/web/lib/markdown.tsx +0 -59
  379. package/bizar-dash/src/web/lib/search.ts +0 -115
  380. package/bizar-dash/src/web/lib/types.ts +0 -894
  381. package/bizar-dash/src/web/lib/utils.ts +0 -114
  382. package/bizar-dash/src/web/lib/ws.ts +0 -177
  383. package/bizar-dash/src/web/locales/en.json +0 -52
  384. package/bizar-dash/src/web/main.tsx +0 -43
  385. package/bizar-dash/src/web/mobile/MobileApp.tsx +0 -309
  386. package/bizar-dash/src/web/mobile/MobileBottomNav.tsx +0 -38
  387. package/bizar-dash/src/web/mobile/MobileChat.tsx +0 -138
  388. package/bizar-dash/src/web/mobile/MobileDoctor.tsx +0 -80
  389. package/bizar-dash/src/web/mobile/MobileEval.tsx +0 -167
  390. package/bizar-dash/src/web/mobile/MobileMemory.tsx +0 -108
  391. package/bizar-dash/src/web/mobile/MobileOverview.tsx +0 -213
  392. package/bizar-dash/src/web/mobile/MobileSettings.tsx +0 -251
  393. package/bizar-dash/src/web/mobile/MobileTasks.tsx +0 -94
  394. package/bizar-dash/src/web/mobile/MobileTopbar.tsx +0 -115
  395. package/bizar-dash/src/web/mobile/components/MobileBottomSheet.tsx +0 -182
  396. package/bizar-dash/src/web/mobile/components/MobileListItem.tsx +0 -64
  397. package/bizar-dash/src/web/mobile/components/MobileModal.tsx +0 -123
  398. package/bizar-dash/src/web/mobile/views/MobileActivity.tsx +0 -273
  399. package/bizar-dash/src/web/mobile/views/MobileAgents.tsx +0 -374
  400. package/bizar-dash/src/web/mobile/views/MobileArtifactCanvas.tsx +0 -439
  401. package/bizar-dash/src/web/mobile/views/MobileArtifacts.tsx +0 -143
  402. package/bizar-dash/src/web/mobile/views/MobileChat.tsx +0 -257
  403. package/bizar-dash/src/web/mobile/views/MobileConfig.tsx +0 -175
  404. package/bizar-dash/src/web/mobile/views/MobileHistory.tsx +0 -191
  405. package/bizar-dash/src/web/mobile/views/MobileMods.tsx +0 -149
  406. package/bizar-dash/src/web/mobile/views/MobileMore.tsx +0 -121
  407. package/bizar-dash/src/web/mobile/views/MobileNotifications.tsx +0 -137
  408. package/bizar-dash/src/web/mobile/views/MobilePlans.tsx +0 -26
  409. package/bizar-dash/src/web/mobile/views/MobileSchedules.tsx +0 -685
  410. package/bizar-dash/src/web/mobile/views/MobileSearchModal.tsx +0 -172
  411. package/bizar-dash/src/web/mobile/views/MobileSettings.tsx +0 -363
  412. package/bizar-dash/src/web/mobile/views/MobileSkills.tsx +0 -153
  413. package/bizar-dash/src/web/mobile/views/MobileTasks.tsx +0 -564
  414. package/bizar-dash/src/web/mobile/views/QrCodePanel.tsx +0 -69
  415. package/bizar-dash/src/web/mobile.tsx +0 -14
  416. package/bizar-dash/src/web/styles/agents-redesign.css +0 -311
  417. package/bizar-dash/src/web/styles/chat.css +0 -1740
  418. package/bizar-dash/src/web/styles/glyphs.css +0 -960
  419. package/bizar-dash/src/web/styles/main.css +0 -10389
  420. package/bizar-dash/src/web/styles/memory.css +0 -1177
  421. package/bizar-dash/src/web/styles/minimax-usage.css +0 -842
  422. package/bizar-dash/src/web/styles/mobile-chat.css +0 -5
  423. package/bizar-dash/src/web/styles/mobile-layout.css +0 -233
  424. package/bizar-dash/src/web/styles/mobile.css +0 -2181
  425. package/bizar-dash/src/web/styles/settings.css +0 -775
  426. package/bizar-dash/src/web/styles/skills.css +0 -302
  427. package/bizar-dash/src/web/styles/tasks-redesign.css +0 -253
  428. package/bizar-dash/src/web/styles/tasks.css +0 -605
  429. package/bizar-dash/src/web/ui/controls/Button.tsx +0 -77
  430. package/bizar-dash/src/web/ui/controls/Checkbox.tsx +0 -95
  431. package/bizar-dash/src/web/ui/controls/IconButton.tsx +0 -66
  432. package/bizar-dash/src/web/ui/controls/Kbd.tsx +0 -24
  433. package/bizar-dash/src/web/ui/controls/NumberInput.tsx +0 -77
  434. package/bizar-dash/src/web/ui/controls/RadioGroup.tsx +0 -109
  435. package/bizar-dash/src/web/ui/controls/SearchInput.tsx +0 -91
  436. package/bizar-dash/src/web/ui/controls/Select.tsx +0 -92
  437. package/bizar-dash/src/web/ui/controls/Slider.tsx +0 -70
  438. package/bizar-dash/src/web/ui/controls/TextInput.tsx +0 -67
  439. package/bizar-dash/src/web/ui/controls/Textarea.tsx +0 -56
  440. package/bizar-dash/src/web/ui/controls/Toggle.tsx +0 -79
  441. package/bizar-dash/src/web/ui/controls/controls.css +0 -476
  442. package/bizar-dash/src/web/ui/controls/index.ts +0 -35
  443. package/bizar-dash/src/web/ui/data/BarChart.tsx +0 -60
  444. package/bizar-dash/src/web/ui/data/DataTable.tsx +0 -216
  445. package/bizar-dash/src/web/ui/data/EmptyState.tsx +0 -60
  446. package/bizar-dash/src/web/ui/data/ErrorState.tsx +0 -56
  447. package/bizar-dash/src/web/ui/data/KeyValueList.tsx +0 -106
  448. package/bizar-dash/src/web/ui/data/LoadingState.tsx +0 -65
  449. package/bizar-dash/src/web/ui/data/Sparkline.tsx +0 -87
  450. package/bizar-dash/src/web/ui/data/StatTile.tsx +0 -87
  451. package/bizar-dash/src/web/ui/data/data.css +0 -540
  452. package/bizar-dash/src/web/ui/data/index.ts +0 -31
  453. package/bizar-dash/src/web/ui/feedback/Badge.tsx +0 -49
  454. package/bizar-dash/src/web/ui/feedback/Dialog.tsx +0 -209
  455. package/bizar-dash/src/web/ui/feedback/ProgressBar.tsx +0 -69
  456. package/bizar-dash/src/web/ui/feedback/StatusDot.tsx +0 -50
  457. package/bizar-dash/src/web/ui/feedback/Toast.tsx +0 -200
  458. package/bizar-dash/src/web/ui/feedback/Tooltip.tsx +0 -126
  459. package/bizar-dash/src/web/ui/feedback/feedback.css +0 -314
  460. package/bizar-dash/src/web/ui/feedback/index.ts +0 -43
  461. package/bizar-dash/src/web/ui/index.ts +0 -57
  462. package/bizar-dash/src/web/ui/layout/AppShell.tsx +0 -51
  463. package/bizar-dash/src/web/ui/layout/Breadcrumbs.tsx +0 -97
  464. package/bizar-dash/src/web/ui/layout/Panel.tsx +0 -73
  465. package/bizar-dash/src/web/ui/layout/PanelHeader.tsx +0 -39
  466. package/bizar-dash/src/web/ui/layout/Sidebar.tsx +0 -131
  467. package/bizar-dash/src/web/ui/layout/Tabs.tsx +0 -133
  468. package/bizar-dash/src/web/ui/layout/Topbar.tsx +0 -42
  469. package/bizar-dash/src/web/ui/layout/ViewHeader.tsx +0 -48
  470. package/bizar-dash/src/web/ui/layout/index.ts +0 -34
  471. package/bizar-dash/src/web/ui/layout/layout.css +0 -464
  472. package/bizar-dash/src/web/ui/navigation/CommandPalette.tsx +0 -199
  473. package/bizar-dash/src/web/ui/navigation/NavGroup.tsx +0 -95
  474. package/bizar-dash/src/web/ui/navigation/NavLink.tsx +0 -93
  475. package/bizar-dash/src/web/ui/navigation/index.ts +0 -17
  476. package/bizar-dash/src/web/ui/navigation/navigation.css +0 -343
  477. package/bizar-dash/src/web/ui/primitives/Box.tsx +0 -91
  478. package/bizar-dash/src/web/ui/primitives/Grid.tsx +0 -49
  479. package/bizar-dash/src/web/ui/primitives/Inline.tsx +0 -55
  480. package/bizar-dash/src/web/ui/primitives/Separator.tsx +0 -46
  481. package/bizar-dash/src/web/ui/primitives/Stack.tsx +0 -54
  482. package/bizar-dash/src/web/ui/primitives/VisuallyHidden.tsx +0 -26
  483. package/bizar-dash/src/web/ui/primitives/index.ts +0 -23
  484. package/bizar-dash/src/web/ui/primitives/primitives.css +0 -183
  485. package/bizar-dash/src/web/ui/styles/globals.css +0 -86
  486. package/bizar-dash/src/web/ui/styles/reset.css +0 -125
  487. package/bizar-dash/src/web/ui/styles/tokens.css +0 -208
  488. package/bizar-dash/src/web/ui/theme/ThemeProvider.tsx +0 -142
  489. package/bizar-dash/src/web/ui/theme/tokens.ts +0 -131
  490. package/bizar-dash/src/web/ui/theme/useTheme.ts +0 -22
  491. package/bizar-dash/src/web/ui/utils/cx.ts +0 -42
  492. package/bizar-dash/src/web/views/Activity.tsx +0 -1221
  493. package/bizar-dash/src/web/views/Agents.tsx +0 -964
  494. package/bizar-dash/src/web/views/Artifacts.tsx +0 -1494
  495. package/bizar-dash/src/web/views/BackgroundAgents.tsx +0 -822
  496. package/bizar-dash/src/web/views/Chat.tsx +0 -532
  497. package/bizar-dash/src/web/views/Config.tsx +0 -3
  498. package/bizar-dash/src/web/views/Doctor.tsx +0 -317
  499. package/bizar-dash/src/web/views/Eval.tsx +0 -372
  500. package/bizar-dash/src/web/views/EvalReport.tsx +0 -353
  501. package/bizar-dash/src/web/views/GoalPlanner.tsx +0 -158
  502. package/bizar-dash/src/web/views/Harness.tsx +0 -306
  503. package/bizar-dash/src/web/views/History.tsx +0 -353
  504. package/bizar-dash/src/web/views/Memory.tsx +0 -193
  505. package/bizar-dash/src/web/views/MiniMaxUsage.tsx +0 -942
  506. package/bizar-dash/src/web/views/ModView.tsx +0 -207
  507. package/bizar-dash/src/web/views/Mods.tsx +0 -706
  508. package/bizar-dash/src/web/views/Overview.tsx +0 -1343
  509. package/bizar-dash/src/web/views/Providers.tsx +0 -302
  510. package/bizar-dash/src/web/views/Schedules.tsx +0 -902
  511. package/bizar-dash/src/web/views/Settings.tsx +0 -308
  512. package/bizar-dash/src/web/views/Skills.tsx +0 -383
  513. package/bizar-dash/src/web/views/SpawnAgentModal.tsx +0 -221
  514. package/bizar-dash/src/web/views/Tasks.tsx +0 -789
  515. package/bizar-dash/src/web/views/Workspace.tsx +0 -294
  516. package/bizar-dash/src/web/views/glyphs/GlyphRenderer.tsx +0 -844
  517. package/bizar-dash/src/web/views/glyphs/components.tsx +0 -1098
  518. package/bizar-dash/src/web/views/memory/ConfigPanel.tsx +0 -426
  519. package/bizar-dash/src/web/views/memory/FromScreenshotPanel.tsx +0 -23
  520. package/bizar-dash/src/web/views/memory/GitSyncPanel.tsx +0 -220
  521. package/bizar-dash/src/web/views/memory/LightragPanel.tsx +0 -310
  522. package/bizar-dash/src/web/views/memory/MemoryGraphLegend.tsx +0 -29
  523. package/bizar-dash/src/web/views/memory/MemoryGraphPanel.tsx +0 -192
  524. package/bizar-dash/src/web/views/memory/MemoryGraphView.tsx +0 -336
  525. package/bizar-dash/src/web/views/memory/MemoryOverview.tsx +0 -367
  526. package/bizar-dash/src/web/views/memory/MemoryStatusCard.tsx +0 -160
  527. package/bizar-dash/src/web/views/memory/ObsidianPanel.tsx +0 -650
  528. package/bizar-dash/src/web/views/memory/SemanticSearchPanel.tsx +0 -197
  529. package/bizar-dash/src/web/views/memory/VaultFromClipboardPanel.tsx +0 -101
  530. package/bizar-dash/src/web/views/settings/ActivitySection.tsx +0 -205
  531. package/bizar-dash/src/web/views/settings/AgentSection.tsx +0 -305
  532. package/bizar-dash/src/web/views/settings/AuthSection.tsx +0 -159
  533. package/bizar-dash/src/web/views/settings/EnvVarsSection.tsx +0 -15
  534. package/bizar-dash/src/web/views/settings/GeneralSection.tsx +0 -128
  535. package/bizar-dash/src/web/views/settings/HeadroomSection.tsx +0 -39
  536. package/bizar-dash/src/web/views/settings/MemorySection.tsx +0 -154
  537. package/bizar-dash/src/web/views/settings/NetworkSection.tsx +0 -87
  538. package/bizar-dash/src/web/views/settings/NotificationsSection.tsx +0 -34
  539. package/bizar-dash/src/web/views/settings/SystemLlmSection.tsx +0 -81
  540. package/bizar-dash/src/web/views/settings/ThemeSection.tsx +0 -168
  541. package/bizar-dash/src/web/views/settings/UpdatesSection.tsx +0 -256
  542. package/bizar-dash/src/web/views/settings/WorkspacesSection.tsx +0 -189
  543. package/packages/sdk/.harness/agents.json +0 -17
  544. package/packages/sdk/.harness/topology.json +0 -4
  545. /package/bizar-dash/tests/{BackgroundAgents.test.tsx → v7-archive/BackgroundAgents.test.tsx} +0 -0
  546. /package/bizar-dash/tests/{a11y → v7-archive/a11y}/forms.test.tsx +0 -0
  547. /package/bizar-dash/tests/{a11y.test.tsx → v7-archive/a11y.test.tsx} +0 -0
  548. /package/bizar-dash/tests/{autosave.test.tsx → v7-archive/autosave.test.tsx} +0 -0
  549. /package/bizar-dash/tests/{backup-restore.test.tsx → v7-archive/backup-restore.test.tsx} +0 -0
  550. /package/bizar-dash/tests/{chat-composer.test.tsx → v7-archive/chat-composer.test.tsx} +0 -0
  551. /package/bizar-dash/tests/{communication-log.test.tsx → v7-archive/communication-log.test.tsx} +0 -0
  552. /package/bizar-dash/tests/{components → v7-archive/components}/Modal.test.tsx +0 -0
  553. /package/bizar-dash/tests/{components → v7-archive/components}/Spinner.test.tsx +0 -0
  554. /package/bizar-dash/tests/{components → v7-archive/components}/StatusBadge.test.tsx +0 -0
  555. /package/bizar-dash/tests/{components → v7-archive/components}/doctor-panel.test.tsx +0 -0
  556. /package/bizar-dash/tests/{components → v7-archive/components}/screenshot-ocr.test.tsx +0 -0
  557. /package/bizar-dash/tests/{components → v7-archive/components}/settings-search.test.tsx +0 -0
  558. /package/bizar-dash/tests/{components → v7-archive/components}/workspace-selector.test.tsx +0 -0
  559. /package/bizar-dash/tests/{ui → v7-archive}/controls/Button.test.tsx +0 -0
  560. /package/bizar-dash/tests/{ui → v7-archive}/controls/Checkbox.test.tsx +0 -0
  561. /package/bizar-dash/tests/{ui → v7-archive}/controls/IconButton.test.tsx +0 -0
  562. /package/bizar-dash/tests/{ui → v7-archive}/controls/Kbd.test.tsx +0 -0
  563. /package/bizar-dash/tests/{ui → v7-archive}/controls/NumberInput.test.tsx +0 -0
  564. /package/bizar-dash/tests/{ui → v7-archive}/controls/RadioGroup.test.tsx +0 -0
  565. /package/bizar-dash/tests/{ui → v7-archive}/controls/SearchInput.test.tsx +0 -0
  566. /package/bizar-dash/tests/{ui → v7-archive}/controls/Select.test.tsx +0 -0
  567. /package/bizar-dash/tests/{ui → v7-archive}/controls/Slider.test.tsx +0 -0
  568. /package/bizar-dash/tests/{ui → v7-archive}/controls/TextInput.test.tsx +0 -0
  569. /package/bizar-dash/tests/{ui → v7-archive}/controls/Textarea.test.tsx +0 -0
  570. /package/bizar-dash/tests/{ui → v7-archive}/controls/Toggle.test.tsx +0 -0
  571. /package/bizar-dash/tests/{ui → v7-archive}/data/BarChart.test.tsx +0 -0
  572. /package/bizar-dash/tests/{ui → v7-archive}/data/DataTable.test.tsx +0 -0
  573. /package/bizar-dash/tests/{ui → v7-archive}/data/EmptyState.test.tsx +0 -0
  574. /package/bizar-dash/tests/{ui → v7-archive}/data/ErrorState.test.tsx +0 -0
  575. /package/bizar-dash/tests/{ui → v7-archive}/data/KeyValueList.test.tsx +0 -0
  576. /package/bizar-dash/tests/{ui → v7-archive}/data/LoadingState.test.tsx +0 -0
  577. /package/bizar-dash/tests/{ui → v7-archive}/data/Sparkline.test.tsx +0 -0
  578. /package/bizar-dash/tests/{ui → v7-archive}/data/StatTile.test.tsx +0 -0
  579. /package/bizar-dash/tests/{dep-graph.test.tsx → v7-archive/dep-graph.test.tsx} +0 -0
  580. /package/bizar-dash/tests/{eval-web-ui.test.tsx → v7-archive/eval-web-ui.test.tsx} +0 -0
  581. /package/bizar-dash/tests/{event-log.test.tsx → v7-archive/event-log.test.tsx} +0 -0
  582. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Badge.test.tsx +0 -0
  583. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Dialog.test.tsx +0 -0
  584. /package/bizar-dash/tests/{ui → v7-archive}/feedback/ProgressBar.test.tsx +0 -0
  585. /package/bizar-dash/tests/{ui → v7-archive}/feedback/StatusDot.test.tsx +0 -0
  586. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Toast.test.tsx +0 -0
  587. /package/bizar-dash/tests/{ui → v7-archive}/feedback/Tooltip.test.tsx +0 -0
  588. /package/bizar-dash/tests/{goal-input.test.tsx → v7-archive/goal-input.test.tsx} +0 -0
  589. /package/bizar-dash/tests/{goap-planner.test.ts → v7-archive/goap-planner.test.ts} +0 -0
  590. /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useModal.test.tsx +0 -0
  591. /package/bizar-dash/tests/{hooks → v7-archive/hooks}/useToast.test.tsx +0 -0
  592. /package/bizar-dash/tests/{ui → v7-archive}/layout/AppShell.test.tsx +0 -0
  593. /package/bizar-dash/tests/{ui → v7-archive}/layout/Breadcrumbs.test.tsx +0 -0
  594. /package/bizar-dash/tests/{ui → v7-archive}/layout/Panel.test.tsx +0 -0
  595. /package/bizar-dash/tests/{ui → v7-archive}/layout/PanelHeader.test.tsx +0 -0
  596. /package/bizar-dash/tests/{ui → v7-archive}/layout/Sidebar.test.tsx +0 -0
  597. /package/bizar-dash/tests/{ui → v7-archive}/layout/Tabs.test.tsx +0 -0
  598. /package/bizar-dash/tests/{ui → v7-archive}/layout/Topbar.test.tsx +0 -0
  599. /package/bizar-dash/tests/{ui → v7-archive}/layout/ViewHeader.test.tsx +0 -0
  600. /package/bizar-dash/tests/{lib → v7-archive/lib}/i18n.test.ts +0 -0
  601. /package/bizar-dash/tests/{lib → v7-archive/lib}/search-fuzzy.test.ts +0 -0
  602. /package/bizar-dash/tests/{lib → v7-archive/lib}/utils.test.ts +0 -0
  603. /package/bizar-dash/tests/{memory-graph-view.test.tsx → v7-archive/memory-graph-view.test.tsx} +0 -0
  604. /package/bizar-dash/tests/{mobile-chat.test.tsx → v7-archive/mobile-chat.test.tsx} +0 -0
  605. /package/bizar-dash/tests/{mobile-layout.test.tsx → v7-archive/mobile-layout.test.tsx} +0 -0
  606. /package/bizar-dash/tests/{mobile-overview.test.tsx → v7-archive/mobile-overview.test.tsx} +0 -0
  607. /package/bizar-dash/tests/{mobile-settings.test.tsx → v7-archive/mobile-settings.test.tsx} +0 -0
  608. /package/bizar-dash/tests/{mobile-tasks.test.tsx → v7-archive/mobile-tasks.test.tsx} +0 -0
  609. /package/bizar-dash/tests/{ui → v7-archive}/navigation/CommandPalette.test.tsx +0 -0
  610. /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavGroup.test.tsx +0 -0
  611. /package/bizar-dash/tests/{ui → v7-archive}/navigation/NavLink.test.tsx +0 -0
  612. /package/bizar-dash/tests/{quality-gates.test.tsx → v7-archive/quality-gates.test.tsx} +0 -0
  613. /package/bizar-dash/tests/{settings-layout.test.tsx → v7-archive/settings-layout.test.tsx} +0 -0
  614. /package/bizar-dash/tests/{settings-mode-wiring.test.tsx → v7-archive/settings-mode-wiring.test.tsx} +0 -0
  615. /package/bizar-dash/tests/{settings-nav.test.tsx → v7-archive/settings-nav.test.tsx} +0 -0
  616. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Box.test.tsx +0 -0
  617. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Grid.test.tsx +0 -0
  618. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Inline.test.tsx +0 -0
  619. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Separator.test.tsx +0 -0
  620. /package/bizar-dash/tests/{ui → v7-archive/ui}/primitives/Stack.test.tsx +0 -0
  621. /package/bizar-dash/tests/{views → v7-archive/views}/Agents.test.tsx +0 -0
  622. /package/bizar-dash/tests/{views → v7-archive/views}/Memory.test.tsx +0 -0
  623. /package/bizar-dash/tests/{views → v7-archive/views}/Overview.test.tsx +0 -0
  624. /package/bizar-dash/tests/{views → v7-archive/views}/Tasks.test.tsx +0 -0
  625. /package/bizar-dash/tests/{views → v7-archive/views}/sidebar.test.tsx +0 -0
  626. /package/bizar-dash/tests/{views → v7-archive/views}/topbar.test.tsx +0 -0
  627. /package/bizar-dash/tests/{voice-recorder.test.tsx → v7-archive/voice-recorder.test.tsx} +0 -0
@@ -1,1740 +0,0 @@
1
- /* =====================================================================
2
- Chat UI — desktop redesign (v3.22)
3
- =====================================================================
4
- Ports the visual design from
5
- open-design/.od/projects/ea47b7b3-9f17-41f4-871e-0c5b4c7114df/index.html
6
- into the dashboard. Token vars are mapped to the project's existing
7
- palette (`--bg` == `--surface-0`, `--bg-1` == `--surface-1`,
8
- `--bg-2` == `--surface-2`, etc.) — every new rule uses the project's
9
- token vars, never hard-coded colors.
10
-
11
- The new layout is a 3-column grid:
12
- ┌──────────┬──────────────────────────────┬──────────┐
13
- │ rail │ thread │ info │
14
- │ 280px │ 1fr │ 300px │
15
- └──────────┴──────────────────────────────┴──────────┘
16
-
17
- The legacy 2-column wrapper (`.chat-shell > .chat-body > chat-sessions
18
- | chat-main | chat-info`) is kept at the bottom of the file so the
19
- mobile view continues to render without changes.
20
- ===================================================================== */
21
-
22
- /* -------- page-level layout (3-column) -------- */
23
- .chat-page {
24
- display: grid;
25
- grid-template-columns: 280px 1fr 300px;
26
- height: 100%;
27
- background: var(--bg);
28
- color: var(--text);
29
- min-height: 0;
30
- }
31
-
32
- @media (max-width: 1280px) {
33
- .chat-page { grid-template-columns: 240px 1fr 260px; }
34
- }
35
- @media (max-width: 1024px) {
36
- .chat-page { grid-template-columns: 220px 1fr; }
37
- .chat-page .chat-info { display: none; }
38
- }
39
- @media (max-width: 768px) {
40
- .chat-page { grid-template-columns: 1fr; }
41
- .chat-page .chat-rail { display: none; }
42
- }
43
-
44
- /* ============================================================
45
- SESSION RAIL
46
- ============================================================ */
47
- .chat-rail {
48
- display: flex; flex-direction: column;
49
- border-right: 1px solid var(--border);
50
- background: var(--bg);
51
- overflow: hidden;
52
- min-height: 0;
53
- }
54
- .chat-rail-head {
55
- padding: var(--space-3);
56
- border-bottom: 1px solid var(--border);
57
- flex-shrink: 0;
58
- }
59
- .chat-new-btn {
60
- display: flex; align-items: center; justify-content: center; gap: 6px;
61
- width: 100%;
62
- padding: 8px 12px;
63
- background: var(--bg-1);
64
- border: 1px solid var(--border);
65
- border-radius: var(--radius-md);
66
- color: var(--text);
67
- font: 13px/1 var(--font-sans);
68
- cursor: pointer;
69
- transition: border-color var(--motion-fast) var(--motion-ease);
70
- }
71
- .chat-new-btn:hover { border-color: var(--border-strong); }
72
- .chat-new-btn:focus-visible {
73
- outline: 1px solid var(--accent);
74
- outline-offset: 1px;
75
- }
76
- .chat-new-btn:disabled { opacity: 0.4; cursor: not-allowed; }
77
-
78
- .chat-rail-list {
79
- flex: 1; overflow-y: auto;
80
- padding: var(--space-2) var(--space-2) var(--space-6);
81
- min-height: 0;
82
- }
83
- .chat-rail-group { margin-bottom: var(--space-4); }
84
- .chat-rail-group-label {
85
- padding: var(--space-2) var(--space-3);
86
- font: 10px/1 var(--font-mono);
87
- letter-spacing: 0.08em;
88
- text-transform: uppercase;
89
- color: var(--text-muted);
90
- }
91
-
92
- /* -------- rail row -------- */
93
- .chat-rail-item {
94
- position: relative;
95
- display: block; width: 100%;
96
- padding: 8px 10px 8px 18px;
97
- background: transparent;
98
- border: 1px solid transparent;
99
- border-radius: var(--radius-md);
100
- color: var(--text);
101
- text-align: left;
102
- cursor: pointer;
103
- margin-bottom: 2px;
104
- font: inherit;
105
- transition: background var(--motion-fast) var(--motion-ease);
106
- }
107
- .chat-rail-item:hover { background: var(--bg-1); }
108
- .chat-rail-item.active {
109
- background: var(--bg-1);
110
- border-color: var(--border);
111
- }
112
- .chat-rail-item-title {
113
- font: 13px/1.4 var(--font-sans);
114
- display: flex; align-items: center; gap: 6px;
115
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
116
- /* FIX #2 — leave room for the 3-dot trigger (top-right) so the title
117
- can never collide with it. The chevron column (also on the right)
118
- only appears on the active row, see .chat-rail-tree-chevron below. */
119
- padding-right: 30px;
120
- }
121
- .chat-rail-pin { color: var(--text-muted); font-size: 11px; flex-shrink: 0; }
122
-
123
- /* FIX #2 — notification badge lives on the meta row (bottom), pinned
124
- right-aligned. Title never gets pushed. Meta row reserves fixed
125
- width on the right for the badge + chevron. */
126
- .chat-rail-item-meta {
127
- display: flex; align-items: center; justify-content: space-between;
128
- margin-top: 4px;
129
- padding-right: 38px; /* clear chevron column when active */
130
- font: 11px/1 var(--font-mono);
131
- color: var(--text-muted);
132
- min-height: 16px;
133
- }
134
- .chat-rail-item-meta-time {
135
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
136
- }
137
- .chat-rail-badge {
138
- display: inline-grid; place-items: center;
139
- min-width: 16px; height: 16px; padding: 0 5px;
140
- background: var(--accent);
141
- color: white;
142
- border-radius: 999px;
143
- font: 10px/1 var(--font-mono);
144
- flex-shrink: 0;
145
- animation: chat-rail-badge-pulse 2.4s var(--motion-ease) infinite;
146
- }
147
- @keyframes chat-rail-badge-pulse {
148
- 0%, 100% { box-shadow: 0 0 0 0 rgba(139, 92, 246, 0.4); }
149
- 50% { box-shadow: 0 0 0 4px rgba(139, 92, 246, 0); }
150
- }
151
-
152
- /* -------- state-encoded row -------- */
153
- .chat-rail-item.state-streaming { color: var(--accent); }
154
- .chat-rail-item.state-awaiting { color: var(--warning); }
155
- .chat-rail-item.state-streaming .chat-rail-item-title {
156
- color: var(--accent);
157
- font-weight: 500;
158
- }
159
- .chat-rail-item.state-awaiting .chat-rail-item-title {
160
- color: var(--text);
161
- font-weight: 400;
162
- }
163
-
164
- /* -------- status dot (left edge of row) -------- */
165
- .session-state {
166
- position: absolute;
167
- left: 4px; top: 50%;
168
- transform: translateY(-50%);
169
- border-radius: 50%;
170
- }
171
- .session-state-idle {
172
- width: 6px; height: 6px;
173
- background: var(--border);
174
- opacity: 0.6;
175
- }
176
- .session-state-awaiting {
177
- width: 6px; height: 6px;
178
- background: var(--warning);
179
- animation: awaiting-pulse 2s var(--motion-ease) infinite;
180
- }
181
- @keyframes awaiting-pulse {
182
- 0%, 100% { box-shadow: 0 0 0 0 rgba(251, 191, 36, 0.4); }
183
- 50% { box-shadow: 0 0 0 5px rgba(251, 191, 36, 0); }
184
- }
185
- .session-state-streaming {
186
- width: 6px; height: 6px;
187
- background: var(--accent);
188
- animation: rail-stream-pulse 1.4s var(--motion-ease) infinite;
189
- }
190
- @keyframes rail-stream-pulse {
191
- 0%, 100% { box-shadow: 0 0 0 0 rgba(139, 92, 246, 0.5); transform: scale(1); }
192
- 50% { box-shadow: 0 0 0 5px rgba(139, 92, 246, 0); transform: scale(1.15); }
193
- }
194
-
195
- /* ============================================================
196
- FIX #2 — 3-dot trigger + collapse chevron positioning
197
- ============================================================
198
- The two affordances sit on the right side of the row but never
199
- overlap because:
200
- - 3-dot trigger: position: absolute; top: 6px; right: 6px;
201
- (square 22×22 cell at the top-right corner)
202
- - collapse chevron: position: absolute; top: 50%; right: 28px;
203
- transform: translateY(-50%); (square 18×18 cell VERTICALLY
204
- centered in the row, sitting 22px to the LEFT of the 3-dot
205
- trigger's left edge — they never overlap)
206
- ============================================================ */
207
- .chat-rail-item-menu-trigger {
208
- position: absolute;
209
- top: 6px; right: 6px;
210
- width: 22px; height: 22px;
211
- display: inline-grid; place-items: center;
212
- background: transparent;
213
- border: 0;
214
- border-radius: var(--radius-sm);
215
- color: var(--text-muted);
216
- cursor: pointer;
217
- opacity: 0;
218
- transition: opacity var(--motion-fast) var(--motion-ease),
219
- background var(--motion-fast) var(--motion-ease),
220
- color var(--motion-fast) var(--motion-ease);
221
- z-index: 3;
222
- }
223
- .chat-rail-item:hover .chat-rail-item-menu-trigger,
224
- .chat-rail-item:focus-within .chat-rail-item-menu-trigger,
225
- .chat-rail-item-menu-trigger.open { opacity: 1; }
226
- .chat-rail-item-menu-trigger:hover {
227
- background: var(--bg-2);
228
- color: var(--text);
229
- }
230
- .chat-rail-item-menu-trigger:focus-visible {
231
- outline: 1px solid var(--accent);
232
- outline-offset: 1px;
233
- }
234
- .chat-rail-item-menu-trigger svg { width: 14px; height: 14px; }
235
-
236
- /* Collapse chevron — only on the ACTIVE row, and only when the row
237
- has children. Right: 28px puts it to the LEFT of the 3-dot trigger
238
- (which is 22px wide and starts at right: 6px → 28px is its left
239
- edge). Vertical center via translateY(-50%). */
240
- .chat-rail-item .chat-rail-tree-chevron {
241
- position: absolute;
242
- top: 50%;
243
- right: 28px;
244
- width: 18px; height: 18px;
245
- display: inline-grid; place-items: center;
246
- background: transparent;
247
- border: 0;
248
- border-radius: var(--radius-sm);
249
- color: var(--text-muted);
250
- cursor: pointer;
251
- opacity: 0;
252
- transform: translateY(-50%) rotate(0deg);
253
- transform-origin: 50% 50%;
254
- transition: opacity var(--motion-fast) var(--motion-ease),
255
- transform var(--motion-fast) var(--motion-ease),
256
- color var(--motion-fast) var(--motion-ease),
257
- background var(--motion-fast) var(--motion-ease);
258
- z-index: 2;
259
- }
260
- .chat-rail-item:hover .chat-rail-tree-chevron,
261
- .chat-rail-item:focus-within .chat-rail-tree-chevron { opacity: 1; }
262
- .chat-rail-item .chat-rail-tree-chevron.open {
263
- transform: translateY(-50%) rotate(90deg);
264
- opacity: 1; /* stay visible when tree is open so user can re-collapse */
265
- }
266
- .chat-rail-item .chat-rail-tree-chevron:hover {
267
- background: var(--bg-2);
268
- color: var(--text);
269
- }
270
- .chat-rail-item .chat-rail-tree-chevron:focus-visible {
271
- outline: 1px solid var(--accent);
272
- outline-offset: 1px;
273
- }
274
- .chat-rail-item .chat-rail-tree-chevron svg {
275
- width: 10px; height: 10px;
276
- stroke: currentColor; stroke-width: 1.6; fill: none;
277
- stroke-linecap: round; stroke-linejoin: round;
278
- }
279
-
280
- /* ============================================================
281
- SESSION ROW MENU (popover — three modes)
282
- ============================================================ */
283
- .session-row-menu {
284
- position: absolute;
285
- top: calc(100% + 2px);
286
- right: 0;
287
- min-width: 180px;
288
- background: var(--bg-1);
289
- border: 1px solid var(--border);
290
- border-radius: var(--radius-md);
291
- padding: 4px;
292
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
293
- z-index: 50;
294
- animation: session-menu-in var(--motion-base) var(--motion-ease);
295
- }
296
- @keyframes session-menu-in {
297
- from { opacity: 0; transform: translateY(-4px); }
298
- to { opacity: 1; transform: none; }
299
- }
300
- .session-row-menu-item {
301
- display: flex; align-items: center; gap: 8px;
302
- width: 100%;
303
- padding: 6px 10px;
304
- background: transparent;
305
- border: 0;
306
- border-radius: var(--radius-sm);
307
- color: var(--text);
308
- font: 12px/1 var(--font-sans);
309
- text-align: left;
310
- cursor: pointer;
311
- transition: background var(--motion-fast) var(--motion-ease),
312
- color var(--motion-fast) var(--motion-ease);
313
- }
314
- .session-row-menu-item:hover {
315
- background: var(--bg-2);
316
- color: var(--text);
317
- }
318
- .session-row-menu-item svg {
319
- width: 13px; height: 13px;
320
- flex-shrink: 0;
321
- color: var(--text-muted);
322
- }
323
- .session-row-menu-item:hover svg { color: var(--text); }
324
- .session-row-menu-item kbd {
325
- margin-left: auto;
326
- font: 10px/1 var(--font-mono);
327
- padding: 2px 5px;
328
- background: var(--bg-2);
329
- border: 1px solid var(--border);
330
- border-radius: 3px;
331
- color: var(--text-muted);
332
- }
333
- .session-row-menu-item-danger:hover { color: var(--error); }
334
- .session-row-menu-item-danger:hover svg { color: var(--error); }
335
-
336
- .session-row-menu-inline {
337
- padding: 8px 10px 10px;
338
- min-width: 220px;
339
- }
340
- .session-row-menu-inline-label {
341
- font: 10px/1 var(--font-mono);
342
- text-transform: uppercase;
343
- letter-spacing: 0.06em;
344
- color: var(--text-muted);
345
- margin-bottom: 8px;
346
- }
347
- .session-row-menu-inline-message {
348
- font: 12px/1.4 var(--font-sans);
349
- color: var(--text-muted);
350
- margin-bottom: 10px;
351
- }
352
- .session-row-menu-input {
353
- width: 100%;
354
- padding: 6px 8px;
355
- background: var(--bg);
356
- border: 1px solid var(--border);
357
- border-radius: var(--radius-sm);
358
- color: var(--text);
359
- font: 12px/1.4 var(--font-sans);
360
- outline: 0;
361
- margin-bottom: 8px;
362
- }
363
- .session-row-menu-input:focus { border-color: var(--accent); }
364
- .session-row-menu-inline-actions {
365
- display: flex; justify-content: flex-end; gap: 6px;
366
- }
367
- .session-row-menu-inline-actions button {
368
- font-size: 11px;
369
- padding: 4px 10px;
370
- }
371
-
372
- /* ============================================================
373
- AGENT ORCHESTRATION TREE (sub-agent cards hanging off the row)
374
- ============================================================ */
375
- .agent-tree {
376
- border-bottom: 1px solid var(--border);
377
- background: rgba(255, 255, 255, 0.01);
378
- }
379
- .agent-tree-empty {
380
- padding: 6px var(--space-3);
381
- font: 12px/1 var(--font-sans);
382
- }
383
-
384
- .agent-node {
385
- position: relative;
386
- margin-bottom: 8px;
387
- }
388
- .agent-node:last-child { margin-bottom: 0; }
389
- .agent-node-head {
390
- display: flex; align-items: center; gap: 8px;
391
- width: 100%;
392
- padding: 8px 12px;
393
- background: var(--bg-1);
394
- border: 1px solid var(--border);
395
- border-radius: var(--radius-md);
396
- color: var(--text);
397
- font: 13px/1 var(--font-sans);
398
- text-align: left;
399
- cursor: pointer;
400
- transition: border-color var(--motion-fast) var(--motion-ease),
401
- background var(--motion-fast) var(--motion-ease);
402
- position: relative;
403
- }
404
- .agent-node-head:hover { border-color: var(--border-strong); }
405
- .agent-node-head:focus-visible {
406
- outline: 1px solid var(--accent);
407
- outline-offset: 1px;
408
- }
409
- .agent-node.depth-0 > .agent-node-head {
410
- padding: 10px 14px;
411
- font-size: 14px;
412
- }
413
- .agent-node.depth-1 > .agent-node-head {
414
- margin-left: 16px;
415
- width: calc(100% - 16px);
416
- }
417
-
418
- .agent-node-children {
419
- position: relative;
420
- padding-top: 8px;
421
- padding-left: 0;
422
- margin-left: 14px;
423
- }
424
- .agent-node-children::before {
425
- content: '';
426
- position: absolute;
427
- left: 0; top: 0; bottom: 12px;
428
- width: 1px;
429
- background: var(--border);
430
- }
431
- .agent-node.depth-0 > .agent-node-children::before { left: 6px; }
432
- .agent-node-head::before {
433
- content: '';
434
- position: absolute;
435
- left: -14px; top: 50%;
436
- width: 14px; height: 1px;
437
- background: var(--border);
438
- }
439
- .agent-node.depth-0 > .agent-node-head::before {
440
- left: -8px;
441
- width: 8px;
442
- }
443
-
444
- .agent-node-summary {
445
- margin: 8px 0 0;
446
- padding: 8px 12px 10px 30px;
447
- font: 12px/1.5 var(--font-sans);
448
- color: var(--text-muted);
449
- border-left: 1px solid var(--border);
450
- margin-left: 14px;
451
- }
452
- .agent-node.depth-0 > .agent-node-summary {
453
- margin-left: 6px;
454
- border-left-color: var(--accent);
455
- border-left-width: 2px;
456
- padding-left: 14px;
457
- background: linear-gradient(180deg, rgba(139, 92, 246, 0.04), transparent);
458
- }
459
-
460
- .agent-node-chevron {
461
- display: inline-grid; place-items: center;
462
- width: 14px; height: 14px;
463
- background: transparent;
464
- border: 0;
465
- color: var(--text-muted);
466
- font: 10px/1 var(--font-mono);
467
- cursor: pointer;
468
- transition: transform var(--motion-fast) var(--motion-ease),
469
- color var(--motion-fast) var(--motion-ease);
470
- }
471
- .agent-node.depth-0 > .agent-node-head .agent-node-chevron {
472
- width: 18px; height: 18px;
473
- font-size: 11px;
474
- }
475
- .agent-node-chevron.open { transform: rotate(90deg); }
476
-
477
- .agent-node-dot {
478
- width: 6px; height: 6px;
479
- border-radius: 50%;
480
- background: var(--text-muted);
481
- flex-shrink: 0;
482
- }
483
- .agent-node-dot.status-streaming {
484
- background: var(--accent);
485
- box-shadow: 0 0 4px var(--accent);
486
- }
487
- .agent-node-dot.status-done { background: var(--success); }
488
- .agent-node-dot.status-blocked { background: var(--warning); }
489
- .agent-node-dot.status-awaiting { background: var(--warning); }
490
- .agent-node-dot.status-idle { background: var(--text-muted); opacity: 0.5; }
491
-
492
- .agent-node-name {
493
- font-weight: 500;
494
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
495
- }
496
- .agent-node.depth-0 > .agent-node-head .agent-node-name { font-weight: 600; }
497
- .agent-node-role {
498
- font-size: 11px;
499
- color: var(--text-muted);
500
- letter-spacing: 0.02em;
501
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
502
- }
503
- .agent-node-pill {
504
- margin-left: auto;
505
- font: 10px/1 var(--font-mono);
506
- padding: 3px 8px;
507
- border-radius: var(--radius-pill);
508
- letter-spacing: 0.04em;
509
- text-transform: uppercase;
510
- background: var(--bg-2);
511
- color: var(--text-muted);
512
- border: 1px solid var(--border);
513
- white-space: nowrap;
514
- }
515
- .agent-node-pill.status-streaming {
516
- color: var(--accent);
517
- border-color: var(--accent);
518
- background: rgba(139, 92, 246, 0.08);
519
- }
520
- .agent-node-pill.status-done { color: var(--success); border-color: var(--success); background: rgba(167, 196, 115, 0.06); }
521
- .agent-node-pill.status-blocked { color: var(--warning); border-color: var(--warning); background: rgba(251, 191, 36, 0.06); }
522
- .agent-node-pill.status-awaiting{ color: var(--warning); border-color: var(--warning); background: rgba(251, 191, 36, 0.06); }
523
- .agent-node-pill.status-idle { color: var(--text-muted); }
524
-
525
- .agent-node.closed > .agent-node-children,
526
- .agent-node.closed > .agent-node-summary { display: none; }
527
- .agent-node.closed > .agent-node-head { border-style: dashed; }
528
-
529
- /* Rail variant — tighter cards. Used by SubAgentList hanging off the
530
- active rail row. */
531
- .agent-tree.variant-rail {
532
- background: rgba(139, 92, 246, 0.04);
533
- border: 1px solid rgba(139, 92, 246, 0.18);
534
- border-radius: var(--radius-md);
535
- padding: 0;
536
- margin: 0 4px 4px;
537
- animation: tree-rail-in var(--motion-base) var(--motion-ease);
538
- }
539
- @keyframes tree-rail-in {
540
- from { opacity: 0; transform: translateY(-4px); }
541
- to { opacity: 1; transform: none; }
542
- }
543
- .agent-tree.variant-rail .agent-node { margin-bottom: 4px; }
544
- .agent-tree.variant-rail .agent-node-head {
545
- padding: 5px 8px;
546
- font-size: 11px;
547
- border-radius: var(--radius-sm);
548
- }
549
- .agent-tree.variant-rail .agent-node.depth-0 > .agent-node-head {
550
- padding: 6px 10px;
551
- font-size: 12px;
552
- }
553
- .agent-tree.variant-rail .agent-node.depth-1 > .agent-node-head {
554
- margin-left: 10px;
555
- width: calc(100% - 10px);
556
- }
557
- .agent-tree.variant-rail .agent-node-children { margin-left: 8px; padding-top: 4px; }
558
- .agent-tree.variant-rail .agent-node-children::before { left: 0; bottom: 6px; }
559
- .agent-tree.variant-rail .agent-node-head::before { left: -8px; width: 8px; }
560
- .agent-tree.variant-rail .agent-node-name { font-size: 11px; }
561
- .agent-tree.variant-rail .agent-node-role { font-size: 10px; }
562
- .agent-tree.variant-rail .agent-node-pill { font-size: 9px; padding: 2px 6px; }
563
- .agent-tree.variant-rail .agent-node-summary { display: none; }
564
- .agent-tree.variant-rail .agent-node-chevron {
565
- width: 12px; height: 12px;
566
- font-size: 9px;
567
- }
568
- .agent-tree-empty.variant-rail { padding: 8px 10px; font-size: 11px; }
569
-
570
- /* ============================================================
571
- THREAD
572
- ============================================================ */
573
- .chat-thread-section {
574
- display: grid;
575
- grid-template-rows: auto 1fr auto;
576
- min-width: 0;
577
- background: var(--bg);
578
- min-height: 0;
579
- position: relative;
580
- }
581
- /* legacy class kept for the legacy ChatThread component which wraps
582
- its content in <div className="chat-thread">. */
583
- .chat-thread.legacy {
584
- display: flex;
585
- flex-direction: column;
586
- gap: 1rem;
587
- }
588
- .chat-thread-head {
589
- display: flex; align-items: center; justify-content: space-between;
590
- padding: var(--space-4) var(--space-6);
591
- border-bottom: 1px solid var(--border);
592
- }
593
- .chat-thread-title {
594
- font: 15px/1.2 var(--font-display);
595
- letter-spacing: -0.01em;
596
- font-weight: 500;
597
- }
598
- .chat-thread-sub {
599
- display: flex; align-items: center; gap: 6px;
600
- margin-top: 4px;
601
- font: 12px/1 var(--font-sans);
602
- color: var(--text-muted);
603
- }
604
- .chat-thread-dot {
605
- width: 6px; height: 6px; border-radius: 50%;
606
- background: var(--success);
607
- box-shadow: 0 0 6px var(--success);
608
- animation: dot-throb 2s var(--motion-ease) infinite;
609
- }
610
- @keyframes dot-throb {
611
- 0%, 100% { box-shadow: 0 0 4px var(--success); }
612
- 50% { box-shadow: 0 0 10px var(--success); }
613
- }
614
- .chat-thread-sub.state-streaming .chat-thread-dot {
615
- background: var(--accent);
616
- animation: thread-dot-pulse 1.4s var(--motion-ease) infinite;
617
- }
618
- @keyframes thread-dot-pulse {
619
- 0%, 100% { box-shadow: 0 0 4px var(--accent); transform: scale(1); }
620
- 50% { box-shadow: 0 0 12px var(--accent); transform: scale(1.2); }
621
- }
622
- .chat-thread-sub.state-awaiting .chat-thread-dot { background: var(--warning); }
623
- .chat-thread-sub.state-idle .chat-thread-dot { background: var(--text-muted); animation: none; }
624
- .chat-thread-actions { display: flex; gap: 4px; }
625
-
626
- .chat-thread-scroll {
627
- overflow-y: auto;
628
- padding: var(--space-6) var(--space-8);
629
- display: flex; flex-direction: column; gap: var(--space-5);
630
- min-height: 0;
631
- }
632
-
633
- /* ============================================================
634
- MESSAGE BLOCKS
635
- ============================================================ */
636
- .msg { display: flex; gap: var(--space-3); position: relative; }
637
- .msg-user { justify-content: flex-end; }
638
- .msg-assistant { justify-content: flex-start; }
639
- .msg-system {
640
- align-self: center;
641
- display: inline-flex; align-items: center; gap: 8px;
642
- padding: 4px 10px;
643
- background: var(--bg-1);
644
- border: 1px solid var(--border);
645
- border-radius: var(--radius-pill);
646
- font: 11px/1 var(--font-sans);
647
- color: var(--text-muted);
648
- }
649
- .msg-system-dot {
650
- width: 6px; height: 6px; border-radius: 50%;
651
- background: var(--success);
652
- }
653
-
654
- .msg-avatar {
655
- flex: 0 0 auto;
656
- width: 28px; height: 28px;
657
- display: grid; place-items: center;
658
- border-radius: 50%;
659
- font: 12px/1 var(--font-mono);
660
- font-weight: 500;
661
- color: white;
662
- position: relative;
663
- overflow: visible;
664
- }
665
- .msg-avatar-user {
666
- background: var(--bg-2);
667
- color: var(--text);
668
- border: 1px solid var(--border);
669
- }
670
- .msg-avatar-assistant { background: var(--accent); }
671
- .msg-avatar-letter { position: relative; z-index: 1; }
672
- .msg-avatar-pulse {
673
- position: absolute; inset: -2px;
674
- border-radius: 50%;
675
- border: 1.5px solid var(--accent);
676
- opacity: 0;
677
- pointer-events: none;
678
- }
679
- .msg-avatar-pulse.phase-think {
680
- animation: pulse-think 1.4s var(--motion-ease) infinite;
681
- }
682
- .msg-avatar-pulse.phase-stream {
683
- animation: pulse-stream 1.8s var(--motion-ease) infinite;
684
- border-color: var(--accent);
685
- }
686
- .msg-avatar-pulse.phase-commit {
687
- animation: pulse-commit 360ms var(--motion-ease) 1;
688
- border-color: var(--success);
689
- border-width: 2px;
690
- }
691
- @keyframes pulse-think {
692
- 0% { opacity: 0; transform: scale(0.85); }
693
- 50% { opacity: 0.6; transform: scale(1.15); }
694
- 100% { opacity: 0; transform: scale(1.3); }
695
- }
696
- @keyframes pulse-stream {
697
- 0% { opacity: 0.8; transform: scale(1); }
698
- 100% { opacity: 0; transform: scale(1.5); }
699
- }
700
- @keyframes pulse-commit {
701
- 0% { opacity: 1; transform: scale(1); }
702
- 100% { opacity: 0; transform: scale(2); }
703
- }
704
-
705
- .msg-body { min-width: 0; max-width: 720px; }
706
-
707
- .msg-bubble-wrap {
708
- position: relative;
709
- }
710
- .msg-bubble-wrap::before,
711
- .msg-bubble-wrap::after {
712
- content: '';
713
- position: absolute;
714
- left: 0; right: 0;
715
- height: 14px;
716
- z-index: 1;
717
- }
718
- .msg-bubble-wrap::before { top: -14px; }
719
- .msg-bubble-wrap::after { bottom: -14px; }
720
- .msg-bubble-user-wrap { position: relative; }
721
- .msg-bubble-user-wrap::before,
722
- .msg-bubble-user-wrap::after {
723
- content: '';
724
- position: absolute;
725
- left: 0; right: 0;
726
- height: 14px;
727
- z-index: 1;
728
- }
729
- .msg-bubble-user-wrap::before { top: -14px; }
730
- .msg-bubble-user-wrap::after { bottom: -14px; }
731
-
732
- .msg-actions {
733
- position: absolute;
734
- bottom: -18px;
735
- display: inline-flex; align-items: center;
736
- gap: 1px;
737
- padding: 3px 4px;
738
- background: var(--bg);
739
- border: 1px solid var(--border);
740
- border-radius: var(--radius-md);
741
- opacity: 0;
742
- transform: translateY(-2px);
743
- transition: opacity 180ms var(--motion-ease),
744
- transform 180ms var(--motion-ease);
745
- pointer-events: none;
746
- z-index: 3;
747
- }
748
- .msg-actions-assistant { left: 0; }
749
- .msg-actions-user { right: 0; }
750
- .msg-bubble-wrap:hover .msg-actions,
751
- .msg-bubble-wrap:focus-within .msg-actions,
752
- .msg-bubble-user-wrap:hover .msg-actions,
753
- .msg-bubble-user-wrap:focus-within .msg-actions,
754
- .msg-actions:hover,
755
- .msg-actions:focus-within {
756
- opacity: 1;
757
- transform: translateY(0);
758
- pointer-events: auto;
759
- }
760
- .msg-action-btn {
761
- display: inline-flex; align-items: center; gap: 4px;
762
- padding: 4px 6px;
763
- background: transparent;
764
- border: 0;
765
- border-radius: var(--radius-sm);
766
- color: var(--text-muted);
767
- font: 11px/1 var(--font-sans);
768
- cursor: pointer;
769
- white-space: nowrap;
770
- transition: background var(--motion-fast) var(--motion-ease),
771
- color var(--motion-fast) var(--motion-ease);
772
- }
773
- .msg-action-btn:hover { background: var(--bg-1); color: var(--text); }
774
- .msg-action-btn.active { color: var(--accent); }
775
- .msg-action-feedback { padding: 4px 6px; }
776
- .msg-action-feedback.active { background: var(--bg-2); }
777
- .msg-action-label { letter-spacing: 0.01em; }
778
- .msg-action-sep {
779
- width: 1px; height: 14px;
780
- background: var(--border);
781
- margin: 0 2px;
782
- }
783
- .msg-action-btn:focus-visible {
784
- outline: 1px solid var(--accent);
785
- outline-offset: 1px;
786
- }
787
-
788
- .msg-meta {
789
- display: flex; align-items: baseline; gap: 8px;
790
- margin-bottom: 4px;
791
- }
792
- .msg-author { font: 12px/1 var(--font-sans); font-weight: 500; }
793
- .msg-ts { font: 11px/1 var(--font-mono); color: var(--text-muted); }
794
-
795
- .msg-bubble {
796
- padding: 10px 14px;
797
- border-radius: var(--radius-md);
798
- font: 14px/1.55 var(--font-sans);
799
- border: 1px solid var(--border);
800
- background: var(--bg-1);
801
- }
802
- .msg-bubble-user {
803
- background: var(--bg-1);
804
- border-color: var(--border);
805
- }
806
- .msg-bubble-assistant {
807
- background: var(--bg-1);
808
- }
809
- .msg-bubble p { margin: 0 0 var(--space-3); }
810
- .msg-bubble p:first-child { margin-top: 0; }
811
- .msg-bubble p:last-child { margin-bottom: 0; }
812
- .msg-bubble ul {
813
- margin: 0 0 var(--space-3);
814
- padding-left: 20px;
815
- }
816
- .msg-bubble ul li { margin-bottom: 4px; }
817
- .msg-bubble ul li:last-child { margin-bottom: 0; }
818
- .msg-code {
819
- margin: var(--space-3) 0;
820
- padding: 12px 14px;
821
- background: var(--bg);
822
- border: 1px solid var(--border);
823
- border-radius: var(--radius-md);
824
- font: 12px/1.55 var(--font-mono);
825
- overflow-x: auto;
826
- color: var(--text);
827
- }
828
- .msg-code code { background: transparent; padding: 0; }
829
- .msg-cursor {
830
- display: inline-block;
831
- width: 7px; height: 14px;
832
- margin-left: 2px;
833
- background: var(--accent);
834
- vertical-align: -2px;
835
- animation: cursor-blink 1s steps(2) infinite;
836
- }
837
- @keyframes cursor-blink { 50% { opacity: 0; } }
838
- .msg-phase-stream .msg-cursor {
839
- animation: cursor-pulse 0.9s steps(2) infinite,
840
- cursor-color 1.6s var(--motion-ease) infinite;
841
- width: 8px; height: 14px;
842
- background: var(--accent);
843
- }
844
- @keyframes cursor-pulse { 50% { opacity: 0; } }
845
- @keyframes cursor-color {
846
- 0%, 100% { background: var(--accent); box-shadow: 0 0 4px var(--accent); }
847
- 50% { background: var(--accent); box-shadow: 0 0 8px var(--accent); }
848
- }
849
-
850
- /* Streaming indicator in meta row */
851
- .msg-stream-indicator {
852
- display: inline-flex; align-items: center; gap: 6px;
853
- font: 11px/1 var(--font-mono);
854
- color: var(--text-muted);
855
- letter-spacing: 0.02em;
856
- }
857
- .msg-stream-label { opacity: 0.85; }
858
- .msg-stream-dots { display: inline-flex; gap: 2px; }
859
- .msg-stream-dots span {
860
- width: 3px; height: 3px; border-radius: 50%;
861
- background: var(--accent);
862
- animation: dot-bounce 1.2s var(--motion-ease) infinite;
863
- }
864
- .msg-stream-dots span:nth-child(2) { animation-delay: 0.15s; }
865
- .msg-stream-dots span:nth-child(3) { animation-delay: 0.3s; }
866
- @keyframes dot-bounce {
867
- 0%, 60%, 100% { opacity: 0.3; transform: translateY(0); }
868
- 30% { opacity: 1; transform: translateY(-3px); }
869
- }
870
- .msg-phase-stream .msg-stream-dots span { animation-duration: 0.9s; }
871
- .msg-phase-commit .msg-stream-dots span {
872
- animation-duration: 0.7s;
873
- background: var(--success);
874
- }
875
- .msg-phase-commit .msg-bubble-assistant {
876
- animation: commit-ring 480ms var(--motion-ease) 1;
877
- border-color: var(--success);
878
- }
879
- @keyframes commit-ring {
880
- 0% { box-shadow: 0 0 0 0 var(--success); border-color: var(--success); }
881
- 100% { box-shadow: 0 0 0 8px transparent; border-color: var(--border); }
882
- }
883
-
884
- .msg-enter { animation: msg-in var(--motion-slow) var(--motion-ease) both; }
885
- @keyframes msg-in {
886
- from { opacity: 0; transform: translateY(8px); }
887
- to { opacity: 1; transform: none; }
888
- }
889
-
890
- /* ============================================================
891
- COMPOSER (pill layout)
892
- ============================================================ */
893
- .chat-composer-wrap {
894
- position: relative;
895
- padding: 8px 16px 8px;
896
- border-top: 1px solid var(--border);
897
- background: var(--bg);
898
- }
899
- .chat-composer-pill {
900
- display: flex; align-items: flex-end; gap: var(--space-2);
901
- width: 100%;
902
- min-height: 48px;
903
- max-height: 200px;
904
- padding: 8px 8px 8px 16px;
905
- background: var(--bg-1);
906
- border: 1px solid var(--border);
907
- border-radius: var(--radius-pill);
908
- transition: border-color var(--motion-fast) var(--motion-ease);
909
- }
910
- .chat-composer-pill:focus-within { border-color: var(--accent); }
911
- .chat-composer-pill .agent-chip,
912
- .chat-composer-pill .model-badge {
913
- font: 11px/1 var(--font-mono);
914
- padding: 6px 10px;
915
- border-radius: var(--radius-pill);
916
- background: var(--bg-2);
917
- color: var(--text-muted);
918
- border: 1px solid var(--border);
919
- white-space: nowrap;
920
- }
921
- .chat-composer-pill input,
922
- .chat-composer-pill textarea {
923
- flex: 1;
924
- background: transparent;
925
- border: 0; outline: 0;
926
- color: var(--text);
927
- font: 14px/1.4 var(--font-sans);
928
- min-width: 0;
929
- resize: none;
930
- }
931
- .chat-composer-pill input::placeholder,
932
- .chat-composer-pill textarea::placeholder { color: var(--text-muted); }
933
- .chat-composer-pill .icon-btn {
934
- width: 32px; height: 32px;
935
- display: grid; place-items: center;
936
- background: transparent;
937
- border: 0;
938
- border-radius: 50%;
939
- color: var(--text-muted);
940
- cursor: pointer;
941
- flex-shrink: 0;
942
- }
943
- .chat-composer-pill .icon-btn:hover { background: var(--bg-2); color: var(--text); }
944
- .chat-composer-pill .icon-btn:focus-visible {
945
- outline: 1px solid var(--accent);
946
- outline-offset: 1px;
947
- }
948
- .chat-composer-pill .send-btn {
949
- width: 32px; height: 32px;
950
- display: grid; place-items: center;
951
- background: var(--accent);
952
- border: 0;
953
- border-radius: 50%;
954
- color: white;
955
- cursor: pointer;
956
- flex-shrink: 0;
957
- }
958
- .chat-composer-pill .send-btn:hover:not(:disabled) { filter: brightness(1.1); }
959
- .chat-composer-pill .send-btn:disabled { opacity: 0.4; cursor: not-allowed; }
960
- .chat-composer-pill .send-btn.takeoff { animation: send-takeoff 280ms var(--motion-ease) 1; }
961
- @keyframes send-takeoff {
962
- 0% { transform: scale(1); }
963
- 35% { transform: scale(0.85); }
964
- 70% { transform: scale(1.08); box-shadow: 0 0 0 6px rgba(139, 92, 246, 0.18); }
965
- 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(139, 92, 246, 0); }
966
- }
967
- .chat-composer-hint {
968
- display: flex; align-items: center; gap: 12px;
969
- margin-top: 8px;
970
- padding: 0 var(--space-3);
971
- font: 11px/1 var(--font-mono);
972
- letter-spacing: 0.02em;
973
- color: var(--text-muted);
974
- }
975
- .chat-composer-hint kbd {
976
- display: inline-block;
977
- padding: 2px 6px;
978
- background: var(--bg-1);
979
- border: 1px solid var(--border);
980
- border-radius: 4px;
981
- color: var(--text);
982
- font: 10px/1 var(--font-mono);
983
- }
984
-
985
- /* ============================================================
986
- JUMP-TO-LATEST FLOATING PILL
987
- ============================================================ */
988
- .jump-to-latest {
989
- position: absolute;
990
- bottom: calc(100% + 6px);
991
- left: 50%;
992
- transform: translateX(-50%) translateY(6px);
993
- display: inline-flex; align-items: center; gap: 8px;
994
- padding: 8px 14px;
995
- background: var(--bg-1);
996
- border: 1px solid var(--border);
997
- border-radius: var(--radius-pill);
998
- color: var(--text);
999
- font: 12px/1 var(--font-sans);
1000
- font-weight: 500;
1001
- cursor: pointer;
1002
- z-index: 10;
1003
- opacity: 0;
1004
- animation: jump-in var(--motion-base) var(--motion-ease) forwards;
1005
- transition: transform var(--motion-fast) var(--motion-ease),
1006
- background var(--motion-fast) var(--motion-ease),
1007
- border-color var(--motion-fast) var(--motion-ease);
1008
- white-space: nowrap;
1009
- }
1010
- .jump-to-latest:hover {
1011
- background: var(--bg-2);
1012
- border-color: var(--border-strong);
1013
- }
1014
- .jump-to-latest:focus-visible {
1015
- outline: 1px solid var(--accent);
1016
- outline-offset: 2px;
1017
- }
1018
- @keyframes jump-in {
1019
- from { opacity: 0; transform: translateX(-50%) translateY(14px); }
1020
- to { opacity: 1; transform: translateX(-50%) translateY(6px); }
1021
- }
1022
- .jump-to-latest.is-streaming {
1023
- border-color: var(--accent);
1024
- box-shadow: 0 0 0 1px var(--accent), 0 4px 18px rgba(139, 92, 246, 0.25);
1025
- }
1026
- .jump-dots { display: inline-flex; align-items: center; gap: 3px; }
1027
- .jump-dots > span {
1028
- width: 4px; height: 4px; border-radius: 50%;
1029
- background: var(--accent);
1030
- animation: jump-dot 1.2s var(--motion-ease) infinite;
1031
- }
1032
- .jump-dots > span:nth-child(2) { animation-delay: 0.15s; }
1033
- .jump-dots > span:nth-child(3) { animation-delay: 0.3s; }
1034
- @keyframes jump-dot {
1035
- 0%, 60%, 100% { opacity: 0.3; transform: translateY(0); }
1036
- 30% { opacity: 1; transform: translateY(-2px); }
1037
- }
1038
- .jump-badge {
1039
- display: inline-grid; place-items: center;
1040
- min-width: 18px; height: 18px; padding: 0 6px;
1041
- margin-left: 2px;
1042
- background: var(--accent);
1043
- color: white;
1044
- border-radius: var(--radius-pill);
1045
- font: 10px/1 var(--font-mono);
1046
- letter-spacing: 0.04em;
1047
- }
1048
- .jump-badge-live {
1049
- background: var(--success);
1050
- animation: live-pulse 1.4s var(--motion-ease) infinite;
1051
- }
1052
- @keyframes live-pulse {
1053
- 0%, 100% { box-shadow: 0 0 0 0 rgba(52, 211, 153, 0.5); }
1054
- 50% { box-shadow: 0 0 0 4px rgba(52, 211, 153, 0); }
1055
- }
1056
-
1057
- /* ============================================================
1058
- INFO PANEL
1059
- ============================================================ */
1060
- .chat-info {
1061
- border-left: 1px solid var(--border);
1062
- background: var(--bg);
1063
- padding: var(--space-3) var(--space-4);
1064
- overflow-y: auto;
1065
- font: 13px/1.5 var(--font-sans);
1066
- min-height: 0;
1067
- }
1068
- .chat-info-section {
1069
- padding: var(--space-3) 0;
1070
- border-bottom: 1px solid var(--border);
1071
- }
1072
- .chat-info-section:last-child { border-bottom: 0; }
1073
- .chat-info-section h4 {
1074
- font: 10px/1 var(--font-mono);
1075
- text-transform: uppercase;
1076
- letter-spacing: 0.08em;
1077
- color: var(--text-muted);
1078
- margin: 0 0 8px;
1079
- font-weight: 600;
1080
- }
1081
- .chat-info-bar {
1082
- margin-top: 6px;
1083
- height: 3px;
1084
- background: var(--bg-2);
1085
- border-radius: 2px;
1086
- overflow: hidden;
1087
- }
1088
- .chat-info-bar-fill {
1089
- height: 100%;
1090
- background: var(--accent);
1091
- border-radius: 2px;
1092
- }
1093
- .chat-info-agents { display: flex; flex-wrap: wrap; gap: 4px; }
1094
- .chat-info-agent {
1095
- font: 11px/1 var(--font-mono);
1096
- padding: 3px 8px;
1097
- background: var(--bg-1);
1098
- border: 1px solid var(--border);
1099
- border-radius: var(--radius-pill);
1100
- color: var(--text);
1101
- }
1102
- .chat-info-link {
1103
- display: block;
1104
- padding: 4px 0;
1105
- font: 12px/1.4 var(--font-sans);
1106
- color: var(--text);
1107
- }
1108
- .chat-info-link:hover { color: var(--accent); cursor: pointer; }
1109
- .chat-info-mono { font: 11px/1.4 var(--font-mono); color: var(--text-muted); margin-top: 4px; }
1110
-
1111
- /* ============================================================
1112
- TOAST (in-thread feedback)
1113
- ============================================================ */
1114
- .chat-toast {
1115
- position: fixed;
1116
- bottom: 96px;
1117
- left: 50%;
1118
- transform: translateX(-50%);
1119
- padding: 8px 14px;
1120
- background: rgba(10, 14, 26, 0.94);
1121
- color: #fff;
1122
- font: 12px/1 var(--font-sans);
1123
- border-radius: var(--radius-pill);
1124
- z-index: 100;
1125
- animation: chat-toast-in var(--motion-base) var(--motion-ease);
1126
- white-space: nowrap;
1127
- }
1128
- @keyframes chat-toast-in {
1129
- from { opacity: 0; transform: translate(-50%, 6px); }
1130
- to { opacity: 1; transform: translate(-50%, 0); }
1131
- }
1132
-
1133
- /* ============================================================
1134
- SHARED UTILITIES (scoped helpers used inside chat components)
1135
- ============================================================ */
1136
- .chat-mono { font-family: var(--font-mono); }
1137
- .chat-muted { color: var(--text-muted); }
1138
- .chat-ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1139
-
1140
- /* ============================================================
1141
- REDUCED MOTION — strip animations inside chat components
1142
- ============================================================ */
1143
- @media (prefers-reduced-motion: reduce) {
1144
- .msg-enter,
1145
- .msg-avatar-pulse,
1146
- .msg-stream-dots span,
1147
- .msg-stream-commit,
1148
- .msg-phase-commit .msg-bubble-assistant,
1149
- .msg-phase-stream .msg-cursor,
1150
- .send-btn.takeoff,
1151
- .chat-rail-badge,
1152
- .chat-thread-dot,
1153
- .msg-cursor,
1154
- .chat-toast,
1155
- .session-state-awaiting,
1156
- .session-state-streaming,
1157
- .chat-thread-sub.state-streaming .chat-thread-dot,
1158
- .jump-to-latest,
1159
- .jump-dots > span,
1160
- .jump-badge-live,
1161
- .session-row-menu {
1162
- animation: none !important;
1163
- }
1164
- .msg-enter { opacity: 1; transform: none; }
1165
- .jump-to-latest { opacity: 1; transform: translateX(-50%); }
1166
- .session-row-menu { animation: none !important; opacity: 1; transform: none; }
1167
- .chat-rail-item-menu-trigger,
1168
- .chat-rail-item .chat-rail-tree-chevron { transition: none !important; }
1169
- .msg-actions { transition: none !important; }
1170
- }
1171
-
1172
- /* ============================================================
1173
- LEGACY WRAPPER — keeps the MobileChat view (which uses the OLD
1174
- `.chat-shell / .chat-body / .chat-sessions / .chat-main / .chat-info`
1175
- grid) rendering. The legacy grid mirrors the new 3-column page
1176
- using the same token palette so MobileChat picks up the same
1177
- visual language even though it still uses ChatTopBar + SessionList
1178
- (via _legacy) + ChatThread + FloatingComposer (via _legacy) +
1179
- InfoPanel (via _legacy).
1180
- ============================================================ */
1181
- .chat-shell { display: flex; flex-direction: column; height: 100%; min-height: 0; background: var(--bg); color: var(--text); }
1182
- .chat-topbar {
1183
- display: flex; align-items: center; gap: 0.5rem; height: 48px; box-sizing: border-box;
1184
- padding: 0 1rem; border-bottom: 1px solid var(--border); flex-shrink: 0;
1185
- background: var(--bg);
1186
- }
1187
- .chat-topbar-project {
1188
- display: flex; align-items: center; gap: 0.375rem; height: 32px;
1189
- padding: 0 0.75rem; background: var(--bg-1);
1190
- border: 1px solid var(--border); border-radius: var(--radius-md);
1191
- color: var(--text); font-size: 0.8125rem; font-weight: 500;
1192
- cursor: pointer; max-width: 240px;
1193
- }
1194
- .chat-topbar-project:hover { background: var(--bg-2); }
1195
- .chat-topbar-project-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1196
- .chat-topbar-spacer { flex: 1; }
1197
- .chat-topbar-btn {
1198
- height: 32px; padding: 0 0.75rem; background: transparent;
1199
- border: 1px solid transparent; border-radius: var(--radius-md);
1200
- color: var(--text-muted); font-size: 0.8125rem; font-weight: 500;
1201
- cursor: pointer;
1202
- }
1203
- .chat-topbar-btn:hover { background: var(--bg-1); color: var(--text); }
1204
- .chat-topbar-btn.active { background: var(--bg-2); border-color: var(--border); color: var(--text); }
1205
-
1206
- .chat-body { display: flex; flex: 1; min-height: 0; }
1207
-
1208
- .chat-sessions {
1209
- width: 200px; flex-shrink: 0; display: flex; flex-direction: column;
1210
- background: var(--bg); border-right: 1px solid var(--border);
1211
- overflow: hidden; transition: width var(--motion-slow) var(--motion-ease);
1212
- }
1213
- @media (min-width: 1400px) { .chat-sessions { width: 220px; } }
1214
- .chat-sessions-hidden { width: 0; border-right: none; opacity: 0; pointer-events: none; }
1215
- .chat-sessions-header {
1216
- display: flex; align-items: center; justify-content: space-between;
1217
- padding: 0.875rem 1rem 0.5rem; flex-shrink: 0;
1218
- }
1219
- .chat-sessions-header-title {
1220
- font-size: 0.6875rem; font-weight: 600;
1221
- text-transform: uppercase; letter-spacing: 0.08em;
1222
- color: var(--text-muted);
1223
- }
1224
- .chat-sessions-count {
1225
- font-size: 0.6875rem; font-weight: 600; padding: 0.0625rem 0.4375rem;
1226
- background: var(--bg-2); border-radius: 999px;
1227
- color: var(--text-muted); font-variant-numeric: tabular-nums;
1228
- }
1229
- .chat-sessions-toggle {
1230
- display: flex; gap: 2px; margin: 0 0.75rem 0.5rem; padding: 2px;
1231
- background: var(--bg-1); border-radius: var(--radius-sm);
1232
- }
1233
- .chat-sessions-toggle-btn {
1234
- flex: 1; padding: 0.25rem 0.375rem; background: transparent; border: none;
1235
- border-radius: 3px; font-size: 0.6875rem; font-weight: 500;
1236
- color: var(--text-muted); cursor: pointer;
1237
- transition: all var(--motion-base) var(--motion-ease); white-space: nowrap;
1238
- }
1239
- .chat-sessions-toggle-btn:hover { color: var(--text); }
1240
- .chat-sessions-toggle-btn.active { background: var(--bg-2); color: var(--text); }
1241
- .chat-sessions-new {
1242
- display: flex; align-items: center; justify-content: center; gap: 0.375rem;
1243
- margin: 0.5rem 0.75rem 0.75rem; padding: 0.5rem;
1244
- background: transparent; border: 1px dashed var(--border);
1245
- border-radius: var(--radius-md); color: var(--text);
1246
- font-size: 0.8125rem; font-weight: 500; cursor: pointer;
1247
- transition: all var(--motion-base) var(--motion-ease);
1248
- }
1249
- .chat-sessions-new:hover:not(:disabled) {
1250
- background: var(--bg-1); border-color: var(--border-strong); border-style: solid;
1251
- }
1252
- .chat-sessions-new:disabled { opacity: 0.4; cursor: not-allowed; }
1253
- .chat-sessions-list {
1254
- list-style: none; margin: 0; padding: 0 0.375rem 0.75rem;
1255
- overflow-y: auto; flex: 1; min-height: 0;
1256
- }
1257
- .chat-sessions-item {
1258
- display: flex; flex-direction: column; gap: 0.125rem;
1259
- padding: 0.5rem 0.625rem; margin: 0.0625rem 0;
1260
- border-radius: var(--radius-sm); cursor: pointer;
1261
- }
1262
- .chat-sessions-item:hover { background: var(--bg-1); }
1263
- .chat-sessions-item.active { background: var(--bg-2); }
1264
- .chat-sessions-item-id {
1265
- font-family: var(--font-mono); font-size: 0.75rem; color: var(--text);
1266
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1;
1267
- }
1268
- .chat-sessions-item-meta { font-size: 0.6875rem; color: var(--text-muted); }
1269
- .chat-sessions-item-cline { opacity: 0.8; }
1270
- .chat-sessions-item-cline .chat-sessions-item-id { font-family: var(--font-sans); }
1271
- .chat-sessions-item-icon { flex-shrink: 0; color: var(--text-muted); margin-top: 2px; }
1272
- .chat-sessions-empty {
1273
- flex: 1; display: flex; align-items: center; justify-content: center; padding: 1rem;
1274
- }
1275
-
1276
- .chat-main {
1277
- flex: 1; min-width: 0; display: flex; flex-direction: column;
1278
- background: var(--bg); position: relative; min-height: 0;
1279
- }
1280
-
1281
- .chat-info-hidden { width: 0; padding: 0; border-left: none; opacity: 0; pointer-events: none; overflow: hidden; }
1282
-
1283
- .chat-info-card {
1284
- background: var(--bg-1); border: 1px solid var(--border);
1285
- border-radius: var(--radius-md); padding: 0.75rem 0.875rem;
1286
- }
1287
- .chat-info-card-title {
1288
- display: flex; align-items: center; gap: 0.4375rem;
1289
- font-size: 0.6875rem; font-weight: 600;
1290
- text-transform: uppercase; letter-spacing: 0.06em;
1291
- color: var(--text-muted); margin-bottom: 0.5rem;
1292
- width: 100%; background: transparent; border: none;
1293
- padding: 0; text-align: left;
1294
- }
1295
- .chat-info-card-title-button { cursor: pointer; }
1296
- .chat-info-card-title-button:hover { color: var(--text); }
1297
- .chat-info-card-count {
1298
- margin-left: auto; font-size: 0.6875rem; background: var(--bg-2);
1299
- padding: 0.0625rem 0.375rem; border-radius: 999px;
1300
- color: var(--text-muted); font-weight: 500;
1301
- }
1302
- .chat-info-card-chevron { color: var(--text-muted); transition: transform var(--motion-base) var(--motion-ease); }
1303
- .chat-info-card-chevron.open { transform: rotate(180deg); }
1304
- .chat-info-card-toggle {
1305
- margin-top: 0.4375rem; padding: 0.25rem 0; background: transparent;
1306
- border: none; color: var(--text-muted);
1307
- font-size: 0.6875rem; font-weight: 500; cursor: pointer; text-align: left;
1308
- }
1309
- .chat-info-card-toggle:hover { color: var(--text); }
1310
-
1311
- .env-table { display: grid; grid-template-columns: auto 1fr; gap: 0.25rem 0.625rem; margin: 0; font-size: 0.75rem; }
1312
- .env-table dt { color: var(--text-muted); }
1313
- .env-table dd { margin: 0; color: var(--text); font-family: var(--font-mono); font-size: 0.6875rem; }
1314
- .env-table dd.ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1315
-
1316
- .mod-mini-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.1875rem; max-height: 200px; overflow-y: auto; }
1317
- .mod-mini { display: flex; align-items: center; gap: 0.4375rem; padding: 0.25rem 0; font-size: 0.75rem; }
1318
- .mod-mini-name { font-family: var(--font-mono); color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0; }
1319
- .mod-mini-meta { font-size: 0.6875rem; color: var(--text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1320
- .mod-mini-pill { font-size: 0.625rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; padding: 0.0625rem 0.375rem; border-radius: 999px; }
1321
- .mod-mini-pill.on { background: color-mix(in oklab, var(--success), transparent 70%); color: var(--success); }
1322
- .mod-mini-pill.off { background: var(--bg-2); color: var(--text-muted); }
1323
-
1324
- /* The legacy ChatThread component still uses .chat-thread — it has
1325
- its own internal padding + welcome-screen styling. */
1326
- .chat-thread.legacy { flex: 1; overflow-y: auto; padding: 1.5rem 2rem; display: flex; flex-direction: column; gap: 1rem; min-height: 0; }
1327
- .chat-thread:has(.chat-welcome) { padding: 0; align-items: center; justify-content: flex-start; }
1328
-
1329
- /* Welcome / suggestions / message bubble — old layout. Kept so
1330
- legacy components (WelcomeScreen, MessageBubble, SuggestionCards)
1331
- continue to render via MobileChat. */
1332
- .chat-welcome {
1333
- display: flex; flex-direction: column; align-items: center; justify-content: flex-start;
1334
- text-align: center; padding: 6vh 2rem 2rem;
1335
- width: 100%; max-width: 920px;
1336
- }
1337
- .chat-welcome-h1 {
1338
- margin: 0; font-size: clamp(2.25rem, 5vw, 3.5rem);
1339
- font-weight: 700; line-height: 1.1; letter-spacing: -0.02em;
1340
- }
1341
- .chat-greeting-hello {
1342
- background: var(--gradient-hello);
1343
- -webkit-background-clip: text; background-clip: text;
1344
- color: transparent; display: inline-block;
1345
- }
1346
- .chat-greeting-name {
1347
- background: var(--gradient-name);
1348
- -webkit-background-clip: text; background-clip: text;
1349
- color: transparent; display: inline-block;
1350
- }
1351
- .chat-welcome-subtitle {
1352
- font-size: clamp(1.125rem, 2vw, 1.5rem); font-weight: 500;
1353
- color: var(--text-muted); margin: 0.5rem 0 0; letter-spacing: -0.005em;
1354
- }
1355
- .chat-suggestions {
1356
- display: grid; grid-template-columns: 1fr;
1357
- gap: 0.75rem; width: 100%; max-width: 920px; margin-top: 2.5rem;
1358
- }
1359
- @media (min-width: 600px) { .chat-suggestions { grid-template-columns: repeat(2, 1fr); } }
1360
- @media (min-width: 1100px) { .chat-suggestions { grid-template-columns: repeat(4, 1fr); } }
1361
- .chat-suggestion {
1362
- display: flex; flex-direction: column; gap: 0.5rem;
1363
- padding: 1rem 1.125rem; background: var(--bg-1);
1364
- border: 1px solid var(--border); border-radius: var(--radius-md);
1365
- cursor: pointer; text-align: left; font: inherit; color: var(--text);
1366
- transition: all var(--motion-base) var(--motion-ease); min-height: 120px;
1367
- }
1368
- .chat-suggestion:hover { transform: translateY(-2px); border-color: var(--border-strong); background: var(--bg-2); }
1369
- .chat-suggestion-title { display: flex; align-items: center; gap: 0.5rem; font-size: 0.875rem; font-weight: 600; line-height: 1.3; }
1370
- .chat-suggestion-title span { flex: 1; }
1371
- .chat-suggestion-preview {
1372
- font-size: 0.75rem; color: var(--text-muted); line-height: 1.45;
1373
- display: -webkit-box; -webkit-line-clamp: 4;
1374
- -webkit-box-orient: vertical; overflow: hidden;
1375
- }
1376
- .chat-message {
1377
- background: var(--bg-1); border: 1px solid var(--border);
1378
- border-radius: var(--radius-lg); padding: 0.875rem 1.125rem;
1379
- transition: border-color var(--motion-base) var(--motion-ease);
1380
- max-width: 880px; width: 100%; align-self: flex-start;
1381
- content-visibility: auto;
1382
- contain-intrinsic-size: 0 80px;
1383
- }
1384
- .chat-message-user { background: var(--bg-2); }
1385
- .chat-message-pinned { border-left: 2px solid var(--accent); }
1386
- .chat-message-meta {
1387
- display: flex; align-items: center; gap: 0.5rem;
1388
- margin-bottom: 0.5rem; flex-wrap: wrap;
1389
- }
1390
- .chat-message-role {
1391
- font-size: 0.6875rem; font-weight: 600;
1392
- text-transform: uppercase; letter-spacing: 0.05em;
1393
- color: var(--text-muted);
1394
- }
1395
- .chat-message-agent { font-family: var(--font-mono); font-size: 0.75rem; color: var(--accent); }
1396
- .chat-message-time { font-size: 0.6875rem; color: var(--text-muted); font-variant-numeric: tabular-nums; }
1397
- .chat-message-pin { font-size: 0.6875rem; color: var(--accent); font-weight: 600; }
1398
- .chat-message-actions {
1399
- margin-left: auto; display: flex; gap: 0.125rem;
1400
- opacity: 0; transition: opacity var(--motion-base) var(--motion-ease);
1401
- }
1402
- .chat-message:hover .chat-message-actions,
1403
- .chat-message:focus-within .chat-message-actions { opacity: 1; }
1404
- .chat-msg-action-btn {
1405
- display: flex; align-items: center; justify-content: center;
1406
- width: 24px; height: 24px; padding: 0; background: transparent;
1407
- border: none; border-radius: var(--radius-sm);
1408
- color: var(--text-muted); cursor: pointer;
1409
- }
1410
- .chat-msg-action-btn:hover { background: var(--bg-2); color: var(--text); }
1411
- .chat-msg-action-btn-danger:hover { color: var(--error); }
1412
- .chat-message-content {
1413
- font-size: 0.9375rem; line-height: 1.6; color: var(--text);
1414
- word-wrap: break-word;
1415
- }
1416
- .markdown-body p { margin: 0.5em 0; }
1417
- .markdown-body p:first-child { margin-top: 0; }
1418
- .markdown-body p:last-child { margin-bottom: 0; }
1419
- .markdown-body h1, .markdown-body h2, .markdown-body h3 { margin: 0.75em 0 0.5em; font-weight: 600; }
1420
- .markdown-body code {
1421
- font-family: var(--font-mono); font-size: 0.875em;
1422
- background: var(--bg-2); padding: 0.0625em 0.25em; border-radius: 3px;
1423
- }
1424
- .markdown-body pre {
1425
- background: var(--bg); border: 1px solid var(--border);
1426
- border-radius: var(--radius-sm); padding: 0.75rem; overflow-x: auto;
1427
- }
1428
- .markdown-body pre code { background: transparent; padding: 0; }
1429
- .markdown-body ul, .markdown-body ol { margin: 0.5em 0; padding-left: 1.5em; }
1430
- .markdown-body blockquote {
1431
- border-left: 2px solid var(--border-strong); margin: 0.5em 0;
1432
- padding: 0 0 0 0.75em; color: var(--text-muted);
1433
- }
1434
- .markdown-body a { color: var(--accent); text-decoration: underline; text-underline-offset: 2px; }
1435
-
1436
- .chat-composer-wrap.legacy {
1437
- position: sticky; bottom: 0; left: 0; right: 0;
1438
- padding: 0.5rem 1rem 1rem;
1439
- background: linear-gradient(to top, var(--bg) 0%, var(--bg) 50%, transparent 100%);
1440
- pointer-events: none; z-index: 10; max-width: 100%;
1441
- }
1442
- .chat-composer-wrap.legacy > * { pointer-events: auto; }
1443
- .chat-composer-pill.legacy {
1444
- max-width: min(880px, 100%); margin: 0 auto;
1445
- background: var(--bg-1); border: 1px solid var(--border);
1446
- border-radius: var(--radius-lg); box-shadow: 0 4px 32px rgba(0, 0, 0, 0.4);
1447
- transition: border-color var(--motion-base) var(--motion-ease);
1448
- }
1449
- .chat-composer-pill.legacy:focus-within { border-color: var(--accent); }
1450
- .chat-composer {
1451
- display: flex; flex-direction: column; gap: 0.375rem; padding: 0.5rem 0.625rem;
1452
- }
1453
- .chat-composer-suggestions {
1454
- display: flex; flex-direction: column; gap: 0.125rem;
1455
- margin: -0.25rem 0 0.25rem; padding: 0.25rem;
1456
- background: var(--bg-2); border-radius: var(--radius-md);
1457
- max-height: 240px; overflow-y: auto;
1458
- }
1459
- .chat-composer-suggestion {
1460
- display: flex; align-items: center; gap: 0.5rem;
1461
- padding: 0.5rem 0.625rem; background: transparent; border: none;
1462
- border-radius: var(--radius-sm); color: var(--text);
1463
- font: inherit; font-size: 0.8125rem; text-align: left; cursor: pointer;
1464
- }
1465
- .chat-composer-suggestion:hover { background: var(--bg); }
1466
- .chat-composer-suggestion .mono {
1467
- font-family: var(--font-mono); font-size: 0.75rem;
1468
- color: var(--accent); min-width: 80px;
1469
- }
1470
- .chat-composer-attachments { display: flex; flex-wrap: wrap; gap: 0.25rem; padding: 0 0.25rem; }
1471
- .chat-composer-attachment-tag {
1472
- display: inline-flex; align-items: center; gap: 0.25rem;
1473
- padding: 0.1875rem 0.4375rem; background: var(--bg-2);
1474
- border-radius: 999px; font-size: 0.75rem; color: var(--text);
1475
- }
1476
- .chat-composer-attachment-remove {
1477
- display: flex; align-items: center; justify-content: center;
1478
- width: 14px; height: 14px; padding: 0; background: transparent;
1479
- border: none; color: var(--text-muted); cursor: pointer;
1480
- }
1481
- .chat-composer-input { display: flex; align-items: flex-end; gap: 0.375rem; }
1482
- .chat-composer-textarea {
1483
- flex: 1; min-width: 0; width: 100%; resize: none;
1484
- background: transparent; border: none; outline: none;
1485
- color: var(--text); font: inherit; font-size: 14px;
1486
- line-height: 1.4; padding: 8px 12px;
1487
- min-height: 24px; max-height: 160px; overflow-y: auto;
1488
- }
1489
- .chat-composer-textarea::placeholder { color: var(--text-muted); }
1490
- .chat-attach-btn {
1491
- flex-shrink: 0; display: flex; align-items: center; justify-content: center;
1492
- width: 32px; height: 32px; padding: 0; background: transparent;
1493
- border: none; border-radius: var(--radius-sm);
1494
- color: var(--text-muted); cursor: pointer;
1495
- }
1496
- .chat-attach-btn:hover { background: var(--bg-2); color: var(--text); }
1497
- .chat-send-btn {
1498
- flex-shrink: 0; display: flex; align-items: center; justify-content: center;
1499
- align-self: flex-end;
1500
- width: 32px; height: 32px; padding: 0; background: var(--accent);
1501
- color: white; border: none; border-radius: var(--radius-sm); cursor: pointer;
1502
- }
1503
- .chat-send-btn:hover:not(:disabled) {
1504
- background: color-mix(in oklab, var(--accent), white 15%);
1505
- transform: scale(1.05);
1506
- }
1507
- .chat-send-btn:disabled {
1508
- background: var(--bg-2); color: var(--text-muted); cursor: not-allowed;
1509
- }
1510
-
1511
- .chat-agent-chip { position: relative; flex-shrink: 0; }
1512
- .chat-agent-chip-btn {
1513
- display: flex; align-items: center; gap: 0.375rem;
1514
- height: 32px; padding: 0 0.625rem;
1515
- background: var(--bg-2); border: 1px solid var(--border);
1516
- border-radius: var(--radius-md); color: var(--text);
1517
- font-size: 0.8125rem; font-weight: 500; cursor: pointer;
1518
- min-width: 100px; max-width: 160px;
1519
- }
1520
- .chat-agent-chip-btn > span {
1521
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
1522
- flex: 1; text-align: left;
1523
- }
1524
- .chat-agent-chip-btn:hover { background: var(--bg); border-color: var(--border-strong); }
1525
- .chat-agent-chip-btn .rotated {
1526
- transform: rotate(180deg);
1527
- transition: transform var(--motion-base) var(--motion-ease);
1528
- }
1529
- .chat-agent-chip-menu {
1530
- position: absolute; bottom: calc(100% + 6px); left: 0;
1531
- z-index: 60; min-width: 200px; max-height: 280px; overflow-y: auto;
1532
- display: flex; flex-direction: column; gap: 2px; padding: 0.375rem;
1533
- background: var(--bg-1); border: 1px solid var(--border-strong);
1534
- border-radius: var(--radius-md); box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.4);
1535
- }
1536
- .chat-agent-chip-menu button {
1537
- display: flex; align-items: center; padding: 0.5rem 0.75rem;
1538
- background: transparent; border: none; border-radius: var(--radius-sm);
1539
- color: var(--text); font: inherit; font-size: 0.8125rem;
1540
- text-align: left; cursor: pointer;
1541
- }
1542
- .chat-agent-chip-menu button:hover { background: var(--bg-2); }
1543
- .chat-agent-chip-menu button[aria-selected="true"] {
1544
- background: var(--accent); color: white;
1545
- }
1546
-
1547
- .chat-info.legacy {
1548
- width: 240px; flex-shrink: 0; display: flex; flex-direction: column;
1549
- gap: 0.625rem; padding: 1rem;
1550
- background: var(--bg); border-left: 1px solid var(--border); overflow-y: auto;
1551
- }
1552
- @media (min-width: 1400px) { .chat-info.legacy { width: 260px; } }
1553
-
1554
- .mono { font-family: var(--font-mono); }
1555
- .muted { color: var(--text-muted); }
1556
- .ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1557
-
1558
- .chat-loading-skeleton {
1559
- display: flex; flex-direction: column; gap: 0.75rem; padding: 1rem 0;
1560
- }
1561
- .chat-loading-skeleton-bubble {
1562
- display: flex; flex-direction: column; gap: 0.5rem;
1563
- padding: 0.875rem 1.125rem; background: var(--bg-1);
1564
- border: 1px solid var(--border); border-radius: var(--radius-lg);
1565
- max-width: 600px;
1566
- }
1567
- .chat-loading-skeleton-meta {
1568
- height: 12px; width: 80px;
1569
- background: var(--bg-2); border-radius: 4px;
1570
- animation: skeleton-pulse 1.4s ease-in-out infinite;
1571
- }
1572
- .chat-loading-skeleton-line {
1573
- height: 12px; background: var(--bg-2); border-radius: 4px;
1574
- animation: skeleton-pulse 1.4s ease-in-out infinite;
1575
- }
1576
- .chat-loading-skeleton-line.short { width: 60%; }
1577
- @keyframes skeleton-pulse { 0%, 100% { opacity: 0.6; } 50% { opacity: 1; } }
1578
-
1579
- .chat-streaming-indicator {
1580
- display: inline-flex; align-items: center; gap: 4px;
1581
- padding: 0.5rem 1rem;
1582
- }
1583
- .chat-streaming-indicator span {
1584
- display: inline-block; width: 6px; height: 6px;
1585
- background: var(--text-muted); border-radius: 50%;
1586
- animation: streaming-bounce 1.4s ease-in-out infinite;
1587
- }
1588
- .chat-streaming-indicator span:nth-child(2) { animation-delay: 0.16s; }
1589
- .chat-streaming-indicator span:nth-child(3) { animation-delay: 0.32s; }
1590
- @keyframes streaming-bounce {
1591
- 0%, 60%, 100% { opacity: 0.3; transform: translateY(0); }
1592
- 30% { opacity: 1; transform: translateY(-4px); }
1593
- }
1594
-
1595
- .chat-empty-state {
1596
- display: flex; flex-direction: column; align-items: center;
1597
- justify-content: center; text-align: center;
1598
- padding: 2rem; gap: 0.625rem;
1599
- }
1600
- .chat-empty-state-icon { color: var(--text-muted); opacity: 0.6; }
1601
- .chat-empty-state-title { font-size: 1rem; font-weight: 600; color: var(--text); margin: 0; }
1602
- .chat-empty-state-message {
1603
- font-size: 0.8125rem; color: var(--text-muted); margin: 0;
1604
- max-width: 320px;
1605
- }
1606
- .chat-empty-state-action { margin-top: 0.5rem; }
1607
-
1608
- /* ============================================================
1609
- v4.2.5 — CHAT OVERHAUL: source badge, info-actions, error
1610
- row, and source-tinted composer. These are additive — they
1611
- don't override any of the legacy rules above.
1612
- ============================================================ */
1613
-
1614
- /* ---- source badge (cline / bizar chat) ---- */
1615
- .chat-source-badge {
1616
- display: inline-flex; align-items: center;
1617
- padding: 2px 8px;
1618
- border-radius: var(--radius-pill);
1619
- font: 10px/1 var(--font-mono);
1620
- letter-spacing: 0.04em;
1621
- text-transform: uppercase;
1622
- border: 1px solid transparent;
1623
- }
1624
- .chat-source-cline {
1625
- background: rgba(139, 92, 246, 0.12);
1626
- color: var(--accent);
1627
- border-color: rgba(139, 92, 246, 0.4);
1628
- }
1629
- .chat-source-bizar {
1630
- background: var(--bg-2);
1631
- color: var(--text-muted);
1632
- border-color: var(--border);
1633
- }
1634
- .chat-source-none {
1635
- background: var(--bg-2);
1636
- color: var(--text-muted);
1637
- border-color: var(--border);
1638
- opacity: 0.7;
1639
- }
1640
-
1641
- /* ---- thread-head title row (so badge sits inline) ---- */
1642
- .chat-thread-title-row {
1643
- display: flex; align-items: center; gap: 8px;
1644
- flex-wrap: wrap;
1645
- }
1646
-
1647
- /* ---- thread error row (SSE/upstream failures) ---- */
1648
- .chat-thread-error {
1649
- margin-top: 4px;
1650
- padding: 4px 10px;
1651
- background: rgba(248, 81, 73, 0.08);
1652
- border: 1px solid rgba(248, 81, 73, 0.4);
1653
- border-radius: var(--radius-sm);
1654
- font: 11px/1.3 var(--font-mono);
1655
- color: var(--error);
1656
- }
1657
-
1658
- /* ---- info-panel section heads + actions ---- */
1659
- .chat-info-section-head {
1660
- display: flex; align-items: center;
1661
- margin-bottom: 8px;
1662
- }
1663
- .chat-info-value {
1664
- font: 13px/1.4 var(--font-sans);
1665
- color: var(--text);
1666
- }
1667
- .chat-info-actions {
1668
- display: flex; flex-wrap: wrap; gap: 6px;
1669
- margin-top: 8px;
1670
- }
1671
- .chat-info-actions .btn {
1672
- font: 11px/1 var(--font-sans);
1673
- padding: 6px 10px;
1674
- border: 1px solid var(--border);
1675
- background: var(--bg);
1676
- color: var(--text);
1677
- border-radius: var(--radius-sm);
1678
- cursor: pointer;
1679
- display: inline-flex; align-items: center; gap: 4px;
1680
- transition: background var(--motion-fast) var(--motion-ease);
1681
- }
1682
- .chat-info-actions .btn:hover:not(:disabled) {
1683
- background: var(--bg-1);
1684
- }
1685
- .chat-info-actions .btn:disabled { opacity: 0.5; cursor: not-allowed; }
1686
- .chat-info-actions .btn-danger { color: var(--error); border-color: rgba(248, 81, 73, 0.4); }
1687
- .chat-info-actions .btn-danger:hover:not(:disabled) {
1688
- background: rgba(248, 81, 73, 0.08);
1689
- }
1690
-
1691
- /* ---- btn-ghost tokens (also defined in main.css but we re-stamp here for safety) ---- */
1692
- .btn-ghost {
1693
- display: inline-flex; align-items: center; gap: 4px;
1694
- padding: 4px 8px;
1695
- background: transparent;
1696
- border: 1px solid transparent;
1697
- border-radius: var(--radius-sm);
1698
- color: var(--text-muted);
1699
- font: 11px/1 var(--font-mono);
1700
- cursor: pointer;
1701
- transition: background var(--motion-fast) var(--motion-ease),
1702
- color var(--motion-fast) var(--motion-ease);
1703
- }
1704
- .btn-ghost:hover:not(:disabled) { background: var(--bg-1); color: var(--text); }
1705
- .btn-ghost:disabled { opacity: 0.5; cursor: not-allowed; }
1706
- .btn-ghost.btn-danger { color: var(--error); }
1707
- .btn-ghost.btn-sm { padding: 4px 6px; font-size: 11px; }
1708
-
1709
- /* ---- composer: source-tinted pill border + hint line ---- */
1710
- .chat-composer-source-cline .chat-composer-pill {
1711
- border-color: rgba(139, 92, 246, 0.35);
1712
- }
1713
- .chat-composer-source-cline .chat-composer-pill:focus-within {
1714
- border-color: var(--accent);
1715
- }
1716
- .chat-composer-source-cline::before {
1717
- content: '';
1718
- position: absolute;
1719
- top: 0; left: 0; right: 0;
1720
- height: 1px;
1721
- background: linear-gradient(90deg, transparent, var(--accent), transparent);
1722
- opacity: 0.6;
1723
- }
1724
- .chat-composer-wrap {
1725
- position: relative;
1726
- }
1727
- .chat-composer-source-hint {
1728
- margin-left: auto;
1729
- font: 10px/1 var(--font-mono);
1730
- letter-spacing: 0.04em;
1731
- text-transform: uppercase;
1732
- color: var(--text-muted);
1733
- opacity: 0.8;
1734
- }
1735
-
1736
- /* ---- legacy composer pointer-events fix ---- */
1737
- .chat-composer-wrap.legacy {
1738
- pointer-events: none;
1739
- }
1740
- .chat-composer-wrap.legacy > * { pointer-events: auto; }