@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,2181 +0,0 @@
1
- /* ─────────────────────────────────────────────────────────────────────
2
- Bizar Dashboard — Mobile styles (v3.5.0)
3
- Phone-first: 320px-768px wide. Bottom nav. Sticky composer.
4
- ───────────────────────────────────────────────────────────────────── */
5
-
6
- /* v3.21.x — Mobile chat stylesheet must be imported BEFORE all other
7
- rules (CSS @import ordering rule). */
8
- @import './mobile-chat.css';
9
-
10
- /* ─── Theme tokens (mirror main.css) ─────────────────────────────── */
11
- :root {
12
- /* Surfaces */
13
- --bg: #0b0e14;
14
- --bg-elev: #12161f;
15
- --bg-elev-2: #1a1f2b;
16
- --bg-elev-3: #232a39;
17
- --surface: var(--bg-elev);
18
- --surface-2: var(--bg-elev-2);
19
-
20
- /* Borders */
21
- --border: #232a39;
22
- --border-strong: #2d3648;
23
-
24
- /* Text */
25
- --text: #c9d1d9;
26
- --text-muted: #6e7681;
27
- --text-dim: #484f58;
28
- --text-strong: #f0f6fc;
29
-
30
- /* Accent (violet) */
31
- --accent: #8b5cf6;
32
- --accent-bg: rgba(139, 92, 246, 0.12);
33
- --accent-border: rgba(139, 92, 246, 0.4);
34
- --accent-2: #a78bfa;
35
-
36
- /* Status */
37
- --success: #3fb950;
38
- --warning: #d29922;
39
- --error: #f85149;
40
- --info: #58a6ff;
41
-
42
- /* Fonts */
43
- --font-sans: 'Inter var', 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
44
- --font-mono: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
45
-
46
- /* Mobile constants */
47
- --mobile-tap-target: 44px;
48
- --mobile-nav-height: 56px;
49
- --mobile-topbar-height: 48px;
50
- --mobile-padding: 16px;
51
- --mobile-font-base: 16px;
52
- }
53
-
54
- /* ─── Reset ──────────────────────────────────────────────────────────── */
55
- *,
56
- *::before,
57
- *::after {
58
- box-sizing: border-box;
59
- -webkit-tap-highlight-color: transparent;
60
- -webkit-touch-callout: none;
61
- touch-action: manipulation;
62
- }
63
-
64
- html,
65
- body {
66
- margin: 0;
67
- padding: 0;
68
- height: 100%;
69
- overflow: hidden;
70
- }
71
-
72
- body {
73
- font-family: var(--font-sans);
74
- font-size: var(--mobile-font-base);
75
- line-height: 1.5;
76
- background: var(--bg);
77
- color: var(--text);
78
- -webkit-font-smoothing: antialiased;
79
- overscroll-behavior: none;
80
- }
81
-
82
- button,
83
- [role="button"],
84
- a,
85
- input,
86
- select,
87
- textarea {
88
- touch-action: manipulation;
89
- }
90
-
91
- input,
92
- textarea,
93
- select {
94
- user-select: text;
95
- -webkit-user-select: text;
96
- font-size: var(--mobile-font-base);
97
- }
98
-
99
- a {
100
- color: var(--accent);
101
- text-decoration: none;
102
- }
103
-
104
- code,
105
- .mono {
106
- font-family: var(--font-mono);
107
- }
108
-
109
- /* ─── App shell ──────────────────────────────────────────────────────── */
110
- .mobile-app {
111
- display: flex;
112
- flex-direction: column;
113
- height: 100vh;
114
- height: 100dvh;
115
- background: var(--bg);
116
- color: var(--text);
117
- font-family: var(--font-sans);
118
- padding-top: env(safe-area-inset-top, 0);
119
- padding-bottom: env(safe-area-inset-bottom, 0);
120
- overscroll-behavior: none;
121
- }
122
-
123
- /* ─── Top bar ───────────────────────────────────────────────────────── */
124
- .mobile-topbar {
125
- height: var(--mobile-topbar-height);
126
- flex-shrink: 0;
127
- display: flex;
128
- align-items: center;
129
- justify-content: space-between;
130
- padding: 0 var(--mobile-padding);
131
- background: var(--surface);
132
- border-bottom: 1px solid var(--border);
133
- position: sticky;
134
- top: 0;
135
- z-index: 10;
136
- }
137
-
138
- .mobile-topbar-left {
139
- display: flex;
140
- align-items: center;
141
- gap: 8px;
142
- }
143
-
144
- .mobile-logo {
145
- font-size: 20px;
146
- line-height: 1;
147
- }
148
-
149
- .mobile-title {
150
- font-size: 16px;
151
- font-weight: 600;
152
- color: var(--text-strong);
153
- }
154
-
155
- .mobile-topbar-right {
156
- display: flex;
157
- align-items: center;
158
- gap: 4px;
159
- }
160
-
161
- .mobile-icon-btn {
162
- width: var(--mobile-tap-target);
163
- height: var(--mobile-tap-target);
164
- min-width: var(--mobile-tap-target);
165
- min-height: var(--mobile-tap-target);
166
- display: flex;
167
- align-items: center;
168
- justify-content: center;
169
- background: transparent;
170
- border: none;
171
- border-radius: 8px;
172
- color: var(--text-muted);
173
- cursor: pointer;
174
- transition: background 120ms ease, color 120ms ease;
175
- padding: 0;
176
- }
177
-
178
- .mobile-icon-btn:hover {
179
- background: var(--bg-elev-2);
180
- color: var(--text);
181
- }
182
-
183
- .mobile-icon-btn:active {
184
- background: var(--bg-elev-3);
185
- }
186
-
187
- .mobile-icon-btn-danger {
188
- color: var(--error);
189
- }
190
-
191
- /* ─── Content area ───────────────────────────────────────────────────── */
192
- .mobile-content {
193
- flex: 1;
194
- overflow-y: auto;
195
- overflow-x: hidden;
196
- -webkit-overflow-scrolling: touch;
197
- padding: var(--mobile-padding);
198
- padding-bottom: calc(var(--mobile-nav-height) + var(--mobile-padding) + env(safe-area-inset-bottom, 0));
199
- }
200
-
201
- .mobile-view {
202
- max-width: 100%;
203
- min-width: 0;
204
- }
205
-
206
- .mobile-view-footer {
207
- padding: 24px 0;
208
- text-align: center;
209
- }
210
-
211
- /* ─── Bottom nav ────────────────────────────────────────────────────── */
212
- .mobile-bottom-nav {
213
- position: fixed;
214
- bottom: 0;
215
- left: 0;
216
- right: 0;
217
- height: calc(var(--mobile-nav-height) + env(safe-area-inset-bottom, 0));
218
- background: var(--surface);
219
- border-top: 1px solid var(--border);
220
- display: flex;
221
- align-items: stretch;
222
- padding-bottom: env(safe-area-inset-bottom, 0);
223
- z-index: 50;
224
- }
225
-
226
- .mobile-nav-btn {
227
- flex: 1;
228
- display: flex;
229
- flex-direction: column;
230
- align-items: center;
231
- justify-content: center;
232
- gap: 2px;
233
- background: transparent;
234
- border: none;
235
- color: var(--text-muted);
236
- cursor: pointer;
237
- min-height: var(--mobile-tap-target);
238
- padding: 8px 4px;
239
- transition: color 120ms ease;
240
- }
241
-
242
- .mobile-nav-btn-active {
243
- color: var(--accent);
244
- }
245
-
246
- /* Active-state pulse per DESIGN.md §9.1: a soft --accent-soft wash
247
- behind the icon so the active tab reads at a glance without a heavy
248
- fill. The pulse sits behind the icon, not the whole button, so the
249
- tap target keeps its full nav-btn footprint for thumb reach. */
250
- .mobile-nav-btn-active > svg {
251
- background: var(--accent-soft);
252
- border-radius: 999px;
253
- padding: 4px;
254
- box-sizing: content-box;
255
- }
256
-
257
- .mobile-nav-label {
258
- font-size: 10px;
259
- font-weight: 500;
260
- }
261
-
262
- /* ─── Loading ────────────────────────────────────────────────────────── */
263
- .mobile-loading {
264
- display: flex;
265
- flex-direction: column;
266
- align-items: center;
267
- justify-content: center;
268
- height: 100vh;
269
- height: 100dvh;
270
- gap: 12px;
271
- color: var(--text-muted);
272
- }
273
-
274
- /* ─── Stats grid ─────────────────────────────────────────────────────── */
275
- .mobile-stats {
276
- display: grid;
277
- grid-template-columns: 1fr 1fr;
278
- gap: 12px;
279
- margin-bottom: 20px;
280
- }
281
-
282
- .mobile-stat {
283
- background: var(--surface);
284
- border: 1px solid var(--border);
285
- border-radius: 12px;
286
- padding: 16px;
287
- text-align: center;
288
- }
289
-
290
- .mobile-stat-value {
291
- font-size: 28px;
292
- font-weight: 700;
293
- color: var(--accent);
294
- line-height: 1;
295
- }
296
-
297
- .mobile-stat-label {
298
- font-size: 12px;
299
- color: var(--text-muted);
300
- margin-top: 4px;
301
- }
302
-
303
- /* ─── Sections ───────────────────────────────────────────────────────── */
304
- .mobile-section {
305
- margin-bottom: 20px;
306
- }
307
-
308
- .mobile-section-title {
309
- font-size: 12px;
310
- font-weight: 600;
311
- color: var(--text-muted);
312
- text-transform: uppercase;
313
- letter-spacing: 0.05em;
314
- margin: 0 0 8px;
315
- display: flex;
316
- align-items: center;
317
- gap: 6px;
318
- }
319
-
320
- /* ─── Cards ───────────────────────────────────────────────────────────── */
321
- .mobile-card {
322
- background: var(--surface);
323
- border: 1px solid var(--border);
324
- border-radius: 12px;
325
- padding: 14px;
326
- margin-bottom: 12px;
327
- }
328
-
329
- .mobile-card-list {
330
- display: flex;
331
- flex-direction: column;
332
- gap: 6px;
333
- }
334
-
335
- /* ─── Agent card ─────────────────────────────────────────────────────── */
336
- .mobile-agent-card {
337
- display: flex;
338
- align-items: center;
339
- gap: 10px;
340
- padding: 12px;
341
- background: var(--surface);
342
- border: 1px solid var(--border);
343
- border-radius: 10px;
344
- }
345
-
346
- .mobile-agent-dot {
347
- width: 8px;
348
- height: 8px;
349
- border-radius: 50%;
350
- background: var(--text-dim);
351
- flex-shrink: 0;
352
- }
353
-
354
- .mobile-agent-dot[data-status="working"],
355
- .mobile-agent-dot[data-status="doing"] {
356
- background: var(--success);
357
- animation: pulse-dot 1.6s ease-in-out infinite;
358
- }
359
-
360
- .mobile-agent-dot[data-status="error"],
361
- .mobile-agent-dot[data-status="stuck"] {
362
- background: var(--error);
363
- }
364
-
365
- .mobile-agent-dot[data-status="idle"] {
366
- background: var(--text-dim);
367
- }
368
-
369
- @keyframes pulse-dot {
370
- 0%, 100% { opacity: 1; }
371
- 50% { opacity: 0.4; }
372
- }
373
-
374
- .mobile-agent-info {
375
- flex: 1;
376
- min-width: 0;
377
- }
378
-
379
- .mobile-agent-name {
380
- font-size: 14px;
381
- font-weight: 500;
382
- display: -webkit-box;
383
- -webkit-box-orient: vertical;
384
- -webkit-line-clamp: 2;
385
- overflow: hidden;
386
- white-space: normal;
387
- overflow-wrap: anywhere;
388
- }
389
-
390
- .mobile-agent-meta {
391
- font-size: 12px;
392
- color: var(--text-muted);
393
- display: block;
394
- overflow-wrap: anywhere;
395
- }
396
-
397
- /* ─── Task card ──────────────────────────────────────────────────────── */
398
- .mobile-task-card {
399
- width: 100%;
400
- padding: 12px;
401
- background: var(--surface);
402
- border: 1px solid var(--border);
403
- border-radius: 10px;
404
- display: flex;
405
- align-items: center;
406
- gap: 10px;
407
- text-align: left;
408
- }
409
-
410
- .mobile-task-actions {
411
- display: flex;
412
- gap: 2px;
413
- flex-shrink: 0;
414
- }
415
-
416
- .priority-dot {
417
- width: 8px;
418
- height: 8px;
419
- border-radius: 50%;
420
- flex-shrink: 0;
421
- }
422
-
423
- .task-content {
424
- flex: 1;
425
- min-width: 0;
426
- }
427
-
428
- .task-title {
429
- font-size: 14px;
430
- font-weight: 500;
431
- display: -webkit-box;
432
- -webkit-box-orient: vertical;
433
- -webkit-line-clamp: 2;
434
- overflow: hidden;
435
- white-space: normal;
436
- overflow-wrap: anywhere;
437
- }
438
-
439
- .task-meta {
440
- font-size: 12px;
441
- color: var(--text-muted);
442
- display: block;
443
- overflow-wrap: anywhere;
444
- }
445
-
446
- /* ─── Tasks toolbar ───────────────────────────────────────────────────── */
447
- .mobile-tasks-toolbar {
448
- display: flex;
449
- flex-wrap: wrap;
450
- gap: 8px;
451
- align-items: center;
452
- margin-bottom: 16px;
453
- }
454
-
455
- .mobile-search-input {
456
- flex: 1;
457
- height: var(--mobile-tap-target);
458
- padding: 0 14px;
459
- background: var(--surface);
460
- border: 1px solid var(--border);
461
- border-radius: 22px;
462
- color: var(--text);
463
- font-family: inherit;
464
- font-size: var(--mobile-font-base);
465
- outline: none;
466
- }
467
-
468
- .mobile-search-input:focus {
469
- border-color: var(--accent);
470
- }
471
-
472
- .mobile-empty-inline {
473
- font-size: 13px;
474
- color: var(--text-muted);
475
- padding: 4px 0;
476
- }
477
-
478
- .mobile-empty-compact {
479
- padding: 24px 16px;
480
- }
481
-
482
- /* ─── Settings ───────────────────────────────────────────────────────── */
483
- .mobile-setting-row {
484
- display: flex;
485
- justify-content: space-between;
486
- align-items: center;
487
- padding: 10px 0;
488
- border-bottom: 1px solid var(--border);
489
- }
490
-
491
- .mobile-setting-row:last-child {
492
- border-bottom: none;
493
- }
494
-
495
- .mobile-setting-label {
496
- font-size: 14px;
497
- color: var(--text);
498
- }
499
-
500
- .mobile-setting-value {
501
- font-size: 14px;
502
- color: var(--text-muted);
503
- text-align: right;
504
- }
505
-
506
- /* ─── More tab list items ────────────────────────────────────────────── */
507
- .mobile-list-item {
508
- display: flex;
509
- align-items: center;
510
- gap: 12px;
511
- padding: 12px;
512
- background: var(--surface);
513
- border: 1px solid var(--border);
514
- border-radius: 10px;
515
- }
516
-
517
- .mobile-list-icon {
518
- color: var(--text-muted);
519
- flex-shrink: 0;
520
- }
521
-
522
- .mobile-list-content {
523
- flex: 1;
524
- min-width: 0;
525
- }
526
-
527
- .mobile-list-title {
528
- font-size: 14px;
529
- font-weight: 500;
530
- display: -webkit-box;
531
- -webkit-box-orient: vertical;
532
- -webkit-line-clamp: 2;
533
- overflow: hidden;
534
- white-space: normal;
535
- overflow-wrap: anywhere;
536
- }
537
-
538
- .mobile-list-meta {
539
- font-size: 12px;
540
- color: var(--text-muted);
541
- display: block;
542
- overflow-wrap: anywhere;
543
- }
544
-
545
- .mobile-list-badge {
546
- font-size: 11px;
547
- padding: 2px 8px;
548
- border-radius: 12px;
549
- background: var(--bg-elev-3);
550
- color: var(--text-muted);
551
- flex-shrink: 0;
552
- }
553
-
554
- .mobile-list-badge[data-status="working"],
555
- .mobile-list-badge[data-status="doing"] {
556
- background: rgba(63, 185, 80, 0.15);
557
- color: var(--success);
558
- }
559
-
560
- .mobile-list-badge[data-status="error"],
561
- .mobile-list-badge[data-status="stuck"] {
562
- background: rgba(248, 81, 73, 0.15);
563
- color: var(--error);
564
- }
565
-
566
- .badge-on {
567
- background: rgba(63, 185, 80, 0.15);
568
- color: var(--success);
569
- }
570
-
571
- .badge-off {
572
- background: var(--bg-elev-3);
573
- color: var(--text-dim);
574
- }
575
-
576
- .mobile-active-badge {
577
- font-size: 11px;
578
- padding: 2px 8px;
579
- border-radius: 12px;
580
- background: var(--accent-bg);
581
- color: var(--accent);
582
- flex-shrink: 0;
583
- }
584
-
585
- /* ─── Empty state ────────────────────────────────────────────────────── */
586
- .mobile-empty {
587
- text-align: center;
588
- padding: 48px 20px;
589
- color: var(--text-muted);
590
- }
591
-
592
- .mobile-empty svg {
593
- margin-bottom: 12px;
594
- opacity: 0.4;
595
- }
596
-
597
- .mobile-empty p {
598
- margin: 0 0 6px;
599
- }
600
-
601
- .muted {
602
- color: var(--text-muted);
603
- font-size: 13px;
604
- }
605
-
606
- /* ─── Buttons ─────────────────────────────────────────────────────────── */
607
- .mobile-btn {
608
- min-height: var(--mobile-tap-target);
609
- min-width: var(--mobile-tap-target);
610
- padding: 12px 20px;
611
- border-radius: 10px;
612
- font-size: 15px;
613
- font-weight: 500;
614
- border: none;
615
- background: var(--accent);
616
- color: white;
617
- cursor: pointer;
618
- display: inline-flex;
619
- align-items: center;
620
- justify-content: center;
621
- gap: 8px;
622
- transition: opacity 120ms ease;
623
- text-decoration: none;
624
- }
625
-
626
- .mobile-btn:active {
627
- opacity: 0.7;
628
- }
629
-
630
- .mobile-btn-secondary {
631
- background: var(--surface);
632
- border: 1px solid var(--border);
633
- color: var(--text);
634
- }
635
-
636
- .mobile-more-footer {
637
- padding: 16px 0;
638
- border-top: 1px solid var(--border);
639
- margin-top: 8px;
640
- }
641
-
642
- .mobile-more-link {
643
- display: flex;
644
- align-items: center;
645
- justify-content: center;
646
- gap: 4px;
647
- color: var(--accent);
648
- font-size: 14px;
649
- text-decoration: none;
650
- min-height: var(--mobile-tap-target);
651
- padding: 12px;
652
- }
653
-
654
- /* ─── Dark mode ───────────────────────────────────────────────────────── */
655
- [data-theme="dark"] .mobile-app {
656
- background: #0d1117;
657
- }
658
-
659
- /* ─── Light mode ──────────────────────────────────────────────────────── */
660
- [data-theme="light"] {
661
- --bg: #ffffff;
662
- --bg-elev: #f6f8fa;
663
- --bg-elev-2: #eaeef2;
664
- --bg-elev-3: #d0d7de;
665
- --surface: var(--bg-elev);
666
- --surface-2: var(--bg-elev-2);
667
- --border: #d0d7de;
668
- --border-strong: #afb8c1;
669
- --text: #1f2328;
670
- --text-muted: #656d76;
671
- --text-dim: #8c959f;
672
- --text-strong: #1f2328;
673
-
674
- /* v3.5.6 — Accent override. The :root block sets --accent: #8b5cf6
675
- (a dark-mode violet) which looks harsh on a white background.
676
- Match the desktop main.css light-mode value (#7c3aed) so the
677
- mobile dashboard stays visually consistent with desktop. Without
678
- this override, mobile light mode shows a too-bright purple accent
679
- everywhere --accent is used (links, buttons, focus rings, etc.). */
680
- --accent: #7c3aed;
681
- --accent-2: #6d28d9;
682
- --accent-bg: rgba(124, 58, 237, 0.08);
683
- --accent-border: rgba(124, 58, 237, 0.3);
684
- }
685
-
686
- /* ═══════════════════════════════════════════════════════════════════════
687
- NEW MOBILE STYLES (v3.6 — comprehensive mobile parity)
688
- ═══════════════════════════════════════════════════════════════════════ */
689
-
690
- /* ─── Bottom sheet ─────────────────────────────────────────────────── */
691
- .mobile-sheet-overlay {
692
- position: fixed;
693
- inset: 0;
694
- background: rgba(0, 0, 0, 0.6);
695
- z-index: 100;
696
- display: flex;
697
- align-items: flex-end;
698
- animation: sheet-fade-in 150ms ease;
699
- }
700
-
701
- @keyframes sheet-fade-in {
702
- from { opacity: 0; }
703
- to { opacity: 1; }
704
- }
705
-
706
- .mobile-sheet {
707
- width: 100%;
708
- background: var(--surface);
709
- border-radius: 16px 16px 0 0;
710
- max-height: 85vh;
711
- overflow-y: auto;
712
- overflow-x: hidden;
713
- animation: sheet-slide-up 200ms cubic-bezier(0.32, 0.72, 0, 1);
714
- display: flex;
715
- flex-direction: column;
716
- }
717
-
718
- @keyframes sheet-slide-up {
719
- from { transform: translateY(100%); }
720
- to { transform: translateY(0); }
721
- }
722
-
723
- .mobile-sheet-handle {
724
- width: 36px;
725
- height: 4px;
726
- background: var(--border-strong);
727
- border-radius: 2px;
728
- margin: 10px auto 0;
729
- flex-shrink: 0;
730
- }
731
-
732
- .mobile-sheet-header {
733
- display: flex;
734
- align-items: center;
735
- justify-content: space-between;
736
- padding: 12px 16px 8px;
737
- border-bottom: 1px solid var(--border);
738
- flex-shrink: 0;
739
- }
740
-
741
- .mobile-sheet-title {
742
- font-size: 16px;
743
- font-weight: 600;
744
- color: var(--text-strong);
745
- margin: 0;
746
- }
747
-
748
- .mobile-sheet-content {
749
- flex: 1;
750
- overflow-y: auto;
751
- padding: 12px 16px;
752
- }
753
-
754
- .mobile-sheet-actions {
755
- padding: 12px 16px;
756
- border-top: 1px solid var(--border);
757
- flex-shrink: 0;
758
- display: flex;
759
- gap: 8px;
760
- }
761
-
762
- /* ─── Full-screen modal ────────────────────────────────────────────── */
763
- .mobile-modal-overlay {
764
- position: fixed;
765
- inset: 0;
766
- background: var(--bg);
767
- z-index: 200;
768
- display: flex;
769
- flex-direction: column;
770
- animation: modal-fade-in 150ms ease;
771
- }
772
-
773
- @keyframes modal-fade-in {
774
- from { opacity: 0; }
775
- to { opacity: 1; }
776
- }
777
-
778
- .mobile-modal {
779
- flex: 1;
780
- display: flex;
781
- flex-direction: column;
782
- overflow: hidden;
783
- }
784
-
785
- .mobile-modal-header {
786
- display: flex;
787
- align-items: center;
788
- justify-content: space-between;
789
- padding: 12px 16px;
790
- border-bottom: 1px solid var(--border);
791
- flex-shrink: 0;
792
- }
793
-
794
- .mobile-modal-title {
795
- font-size: 18px;
796
- font-weight: 600;
797
- color: var(--text-strong);
798
- margin: 0;
799
- }
800
-
801
- .mobile-modal-content {
802
- flex: 1;
803
- overflow-y: auto;
804
- padding: 16px;
805
- }
806
-
807
- .mobile-modal-actions {
808
- padding: 12px 16px;
809
- border-top: 1px solid var(--border);
810
- flex-shrink: 0;
811
- display: flex;
812
- gap: 8px;
813
- }
814
-
815
- /* ─── Search modal ─────────────────────────────────────────────────── */
816
- .mobile-search-container {
817
- display: flex;
818
- flex-direction: column;
819
- gap: 12px;
820
- height: 100%;
821
- }
822
-
823
- .mobile-search-input-row {
824
- display: flex;
825
- align-items: center;
826
- gap: 8px;
827
- background: var(--surface);
828
- border: 1px solid var(--border);
829
- border-radius: 12px;
830
- padding: 0 14px;
831
- height: var(--mobile-tap-target);
832
- }
833
-
834
- .mobile-search-field {
835
- flex: 1;
836
- background: transparent;
837
- border: none;
838
- outline: none;
839
- color: var(--text);
840
- font-family: inherit;
841
- font-size: var(--mobile-font-base);
842
- }
843
-
844
- .mobile-search-scopes {
845
- display: flex;
846
- gap: 6px;
847
- flex-wrap: wrap;
848
- }
849
-
850
- .mobile-scope-chip {
851
- min-height: var(--mobile-tap-target);
852
- padding: 10px 14px;
853
- border-radius: 16px;
854
- font-size: 13px;
855
- font-weight: 500;
856
- background: var(--surface);
857
- border: 1px solid var(--border);
858
- color: var(--text-muted);
859
- cursor: pointer;
860
- transition: all 120ms ease;
861
- }
862
-
863
- .mobile-scope-chip.active {
864
- background: var(--accent-bg);
865
- border-color: var(--accent-border);
866
- color: var(--accent);
867
- }
868
-
869
- .mobile-search-results {
870
- flex: 1;
871
- overflow-y: auto;
872
- }
873
-
874
- .mobile-search-group {
875
- margin-bottom: 16px;
876
- }
877
-
878
- .mobile-search-group-title {
879
- font-size: 11px;
880
- font-weight: 600;
881
- color: var(--text-muted);
882
- text-transform: uppercase;
883
- letter-spacing: 0.05em;
884
- margin: 0 0 6px;
885
- display: flex;
886
- align-items: center;
887
- gap: 4px;
888
- }
889
-
890
- .mobile-search-result-item {
891
- padding: 10px 12px;
892
- background: var(--surface);
893
- border: 1px solid var(--border);
894
- border-radius: 8px;
895
- margin-bottom: 4px;
896
- cursor: pointer;
897
- }
898
-
899
- .mobile-search-result-title {
900
- font-size: 14px;
901
- font-weight: 500;
902
- display: block;
903
- overflow-wrap: anywhere;
904
- }
905
-
906
- .mobile-search-result-meta {
907
- font-size: 12px;
908
- color: var(--text-muted);
909
- display: block;
910
- overflow-wrap: anywhere;
911
- }
912
-
913
- .mobile-search-loading {
914
- text-align: center;
915
- padding: 20px;
916
- color: var(--text-muted);
917
- font-size: 14px;
918
- }
919
-
920
- /* ─── Notifications ────────────────────────────────────────────────── */
921
- .mobile-notif-btn {
922
- position: relative;
923
- }
924
-
925
- .mobile-notif-badge {
926
- position: absolute;
927
- top: 4px;
928
- right: 4px;
929
- min-width: 16px;
930
- height: 16px;
931
- background: var(--error);
932
- color: white;
933
- font-size: 10px;
934
- font-weight: 700;
935
- border-radius: 8px;
936
- display: flex;
937
- align-items: center;
938
- justify-content: center;
939
- padding: 0 4px;
940
- }
941
-
942
- .mobile-notif-list {
943
- display: flex;
944
- flex-direction: column;
945
- gap: 4px;
946
- }
947
-
948
- .mobile-notif-item {
949
- width: 100%;
950
- min-height: var(--mobile-tap-target);
951
- display: flex;
952
- align-items: flex-start;
953
- gap: 12px;
954
- padding: 12px;
955
- background: var(--surface);
956
- border: 1px solid var(--border);
957
- border-radius: 10px;
958
- cursor: pointer;
959
- position: relative;
960
- }
961
-
962
- .mobile-notif-item.unread {
963
- border-color: var(--accent-border);
964
- }
965
-
966
- .mobile-notif-icon {
967
- width: 28px;
968
- height: 28px;
969
- border-radius: 50%;
970
- display: flex;
971
- align-items: center;
972
- justify-content: center;
973
- font-size: 14px;
974
- flex-shrink: 0;
975
- }
976
-
977
- .mobile-notif-icon.severity-success { background: rgba(63, 185, 80, 0.15); color: var(--success); }
978
- .mobile-notif-icon.severity-error { background: rgba(248, 81, 73, 0.15); color: var(--error); }
979
- .mobile-notif-icon.severity-warning { background: rgba(210, 153, 34, 0.15); color: var(--warning); }
980
- .mobile-notif-icon.severity-info { background: rgba(88, 166, 255, 0.15); color: var(--info); }
981
-
982
- .mobile-notif-body {
983
- flex: 1;
984
- min-width: 0;
985
- }
986
-
987
- .mobile-notif-title {
988
- font-size: 14px;
989
- font-weight: 500;
990
- display: block;
991
- overflow-wrap: anywhere;
992
- }
993
-
994
- .mobile-notif-text {
995
- font-size: 13px;
996
- color: var(--text-muted);
997
- display: block;
998
- margin-top: 2px;
999
- }
1000
-
1001
- .mobile-notif-time {
1002
- font-size: 11px;
1003
- color: var(--text-dim);
1004
- display: block;
1005
- margin-top: 4px;
1006
- }
1007
-
1008
- .mobile-notif-dot {
1009
- width: 8px;
1010
- height: 8px;
1011
- border-radius: 50%;
1012
- background: var(--accent);
1013
- flex-shrink: 0;
1014
- margin-top: 6px;
1015
- }
1016
-
1017
- /* ─── Project selector ─────────────────────────────────────────────── */
1018
- .mobile-project-btn {
1019
- display: flex;
1020
- align-items: center;
1021
- gap: 4px;
1022
- background: transparent;
1023
- border: none;
1024
- color: var(--text-muted);
1025
- cursor: pointer;
1026
- min-height: var(--mobile-tap-target);
1027
- min-width: var(--mobile-tap-target);
1028
- padding: 10px 8px;
1029
- border-radius: 6px;
1030
- font-size: 14px;
1031
- font-family: inherit;
1032
- }
1033
-
1034
- .mobile-project-btn:hover {
1035
- background: var(--bg-elev-2);
1036
- color: var(--text);
1037
- }
1038
-
1039
- .mobile-project-name {
1040
- max-width: 120px;
1041
- display: -webkit-box;
1042
- -webkit-box-orient: vertical;
1043
- -webkit-line-clamp: 2;
1044
- overflow: hidden;
1045
- white-space: normal;
1046
- }
1047
-
1048
- .mobile-project-list {
1049
- display: flex;
1050
- flex-direction: column;
1051
- gap: 6px;
1052
- }
1053
-
1054
- .mobile-project-item {
1055
- display: flex;
1056
- align-items: center;
1057
- gap: 12px;
1058
- padding: 12px;
1059
- background: var(--surface);
1060
- border: 1px solid var(--border);
1061
- border-radius: 10px;
1062
- cursor: pointer;
1063
- }
1064
-
1065
- .mobile-project-item.active {
1066
- border-color: var(--accent-border);
1067
- }
1068
-
1069
- .mobile-project-status {
1070
- width: 8px;
1071
- height: 8px;
1072
- border-radius: 50%;
1073
- background: var(--text-dim);
1074
- flex-shrink: 0;
1075
- }
1076
-
1077
- .mobile-project-status[data-status="active"] { background: var(--success); }
1078
- .mobile-project-status[data-status="error"] { background: var(--error); }
1079
-
1080
- .mobile-project-info {
1081
- flex: 1;
1082
- min-width: 0;
1083
- }
1084
-
1085
- .mobile-project-item-name {
1086
- font-size: 14px;
1087
- font-weight: 500;
1088
- display: block;
1089
- }
1090
-
1091
- .mobile-project-item-path {
1092
- font-size: 11px;
1093
- color: var(--text-muted);
1094
- display: block;
1095
- overflow-wrap: anywhere;
1096
- font-family: var(--font-mono);
1097
- }
1098
-
1099
- /* ─── Back button ─────────────────────────────────────────────────── */
1100
- .mobile-back-btn {
1101
- position: fixed;
1102
- top: calc(var(--mobile-topbar-height) + 8px);
1103
- left: 12px;
1104
- z-index: 60;
1105
- background: var(--surface);
1106
- border: 1px solid var(--border);
1107
- color: var(--text);
1108
- font-size: 13px;
1109
- font-weight: 500;
1110
- min-height: var(--mobile-tap-target);
1111
- padding: 10px 14px;
1112
- border-radius: 20px;
1113
- cursor: pointer;
1114
- display: flex;
1115
- align-items: center;
1116
- gap: 4px;
1117
- box-shadow: 0 2px 8px rgba(0,0,0,0.3);
1118
- }
1119
-
1120
- /* ─── Kanban tabs ─────────────────────────────────────────────────── */
1121
- .mobile-kanban-tabs {
1122
- display: flex;
1123
- gap: 4px;
1124
- margin-bottom: 12px;
1125
- overflow-x: auto;
1126
- -webkit-overflow-scrolling: touch;
1127
- }
1128
-
1129
- .mobile-kanban-tab {
1130
- min-height: var(--mobile-tap-target);
1131
- padding: 10px 14px;
1132
- border-radius: 20px;
1133
- font-size: 13px;
1134
- font-weight: 500;
1135
- background: var(--surface);
1136
- border: 1px solid var(--border);
1137
- color: var(--text-muted);
1138
- cursor: pointer;
1139
- white-space: nowrap;
1140
- transition: all 120ms ease;
1141
- flex-shrink: 0;
1142
- }
1143
-
1144
- .mobile-kanban-tab.active {
1145
- background: var(--accent-bg);
1146
- border-color: var(--accent-border);
1147
- color: var(--accent);
1148
- }
1149
-
1150
- .mobile-tasks-filters {
1151
- display: flex;
1152
- flex-wrap: wrap;
1153
- gap: 8px;
1154
- margin-bottom: 12px;
1155
- }
1156
-
1157
- .mobile-filter-select {
1158
- min-height: var(--mobile-tap-target);
1159
- padding: 0 10px;
1160
- background: var(--surface);
1161
- border: 1px solid var(--border);
1162
- border-radius: 18px;
1163
- color: var(--text);
1164
- font-family: inherit;
1165
- font-size: 13px;
1166
- cursor: pointer;
1167
- }
1168
-
1169
- /* ─── FAB ─────────────────────────────────────────────────────────── */
1170
- .mobile-fab {
1171
- position: fixed;
1172
- bottom: calc(var(--mobile-nav-height) + 80px + env(safe-area-inset-bottom, 0));
1173
- right: 20px;
1174
- width: 56px;
1175
- height: 56px;
1176
- border-radius: 50%;
1177
- background: var(--accent);
1178
- color: white;
1179
- border: none;
1180
- cursor: pointer;
1181
- display: flex;
1182
- align-items: center;
1183
- justify-content: center;
1184
- box-shadow: 0 4px 16px rgba(139, 92, 246, 0.4);
1185
- z-index: 30;
1186
- transition: transform 120ms ease, box-shadow 120ms ease;
1187
- }
1188
-
1189
- .mobile-fab:active {
1190
- transform: scale(0.94);
1191
- box-shadow: 0 2px 8px rgba(139, 92, 246, 0.3);
1192
- }
1193
-
1194
- /* ─── Task detail ────────────────────────────────────────────────── */
1195
- .mobile-task-detail-actions {
1196
- display: flex;
1197
- gap: 8px;
1198
- flex-wrap: wrap;
1199
- }
1200
-
1201
- .mobile-task-detail {
1202
- display: flex;
1203
- flex-direction: column;
1204
- gap: 12px;
1205
- }
1206
-
1207
- .mobile-task-detail-header {
1208
- display: flex;
1209
- align-items: center;
1210
- gap: 8px;
1211
- }
1212
-
1213
- .mobile-task-status-badge {
1214
- font-size: 11px;
1215
- font-weight: 600;
1216
- padding: 3px 10px;
1217
- border-radius: 12px;
1218
- text-transform: capitalize;
1219
- }
1220
-
1221
- .mobile-task-status-badge.status-queued { background: rgba(88, 166, 255, 0.15); color: var(--info); }
1222
- .mobile-task-status-badge.status-doing { background: rgba(63, 185, 80, 0.15); color: var(--success); }
1223
- .mobile-task-status-badge.status-blocked { background: rgba(248, 81, 73, 0.15); color: var(--error); }
1224
- .mobile-task-status-badge.status-done { background: rgba(63, 185, 80, 0.15); color: var(--success); }
1225
-
1226
- .mobile-task-priority {
1227
- font-size: 11px;
1228
- font-weight: 600;
1229
- padding: 3px 10px;
1230
- border-radius: 12px;
1231
- text-transform: capitalize;
1232
- }
1233
-
1234
- .mobile-task-priority.priority-high { background: rgba(248, 81, 73, 0.15); color: var(--error); }
1235
- .mobile-task-priority.priority-normal { background: rgba(88, 166, 255, 0.15); color: var(--info); }
1236
- .mobile-task-priority.priority-low { background: var(--bg-elev-3); color: var(--text-dim); }
1237
-
1238
- .mobile-task-detail-title {
1239
- font-size: 18px;
1240
- font-weight: 600;
1241
- color: var(--text-strong);
1242
- margin: 0;
1243
- }
1244
-
1245
- .mobile-task-detail-desc {
1246
- font-size: 14px;
1247
- color: var(--text-muted);
1248
- line-height: 1.5;
1249
- margin: 0;
1250
- overflow-wrap: anywhere;
1251
- }
1252
-
1253
- .mobile-task-detail-meta {
1254
- display: flex;
1255
- flex-direction: column;
1256
- gap: 0;
1257
- }
1258
-
1259
- .mobile-task-detail-row {
1260
- display: flex;
1261
- justify-content: space-between;
1262
- align-items: center;
1263
- padding: 8px 0;
1264
- border-bottom: 1px solid var(--border);
1265
- font-size: 13px;
1266
- }
1267
-
1268
- .mobile-task-detail-row:last-child {
1269
- border-bottom: none;
1270
- }
1271
-
1272
- .mobile-task-detail-row span:first-child {
1273
- color: var(--text-muted);
1274
- }
1275
-
1276
- .mobile-task-detail-row span:last-child {
1277
- color: var(--text);
1278
- font-weight: 500;
1279
- }
1280
-
1281
- /* ─── Task form ───────────────────────────────────────────────────── */
1282
- .mobile-task-form {
1283
- display: flex;
1284
- flex-direction: column;
1285
- gap: 12px;
1286
- }
1287
-
1288
- .mobile-field-label {
1289
- font-size: 12px;
1290
- font-weight: 600;
1291
- color: var(--text-muted);
1292
- text-transform: uppercase;
1293
- letter-spacing: 0.04em;
1294
- margin-bottom: 4px;
1295
- display: block;
1296
- }
1297
-
1298
- .mobile-input {
1299
- width: 100%;
1300
- min-height: var(--mobile-tap-target);
1301
- padding: 10px 14px;
1302
- background: var(--surface);
1303
- border: 1px solid var(--border);
1304
- border-radius: 10px;
1305
- color: var(--text);
1306
- font-family: inherit;
1307
- font-size: var(--mobile-font-base);
1308
- outline: none;
1309
- transition: border-color 120ms ease;
1310
- }
1311
-
1312
- .mobile-input:focus {
1313
- border-color: var(--accent);
1314
- }
1315
-
1316
- .mobile-input-sm {
1317
- min-height: var(--mobile-tap-target);
1318
- padding: 8px 12px;
1319
- }
1320
-
1321
- /* ─── Agent detail ────────────────────────────────────────────────── */
1322
- .mobile-agent-detail {
1323
- display: flex;
1324
- flex-direction: column;
1325
- gap: 12px;
1326
- }
1327
-
1328
- .mobile-agent-detail-status {
1329
- display: flex;
1330
- align-items: center;
1331
- gap: 8px;
1332
- }
1333
-
1334
- .mobile-agent-detail-status-text {
1335
- font-size: 14px;
1336
- font-weight: 500;
1337
- text-transform: capitalize;
1338
- }
1339
-
1340
- .mobile-agent-detail-desc {
1341
- font-size: 14px;
1342
- color: var(--text-muted);
1343
- line-height: 1.5;
1344
- margin: 0;
1345
- overflow-wrap: anywhere;
1346
- }
1347
-
1348
- /* ─── Canvas ──────────────────────────────────────────────────────── */
1349
- .mobile-view-canvas {
1350
- padding-bottom: 80px;
1351
- }
1352
-
1353
- .mobile-canvas-bar {
1354
- display: flex;
1355
- align-items: center;
1356
- justify-content: space-between;
1357
- padding: 0 0 12px;
1358
- border-bottom: 1px solid var(--border);
1359
- margin-bottom: 12px;
1360
- }
1361
-
1362
- .mobile-canvas-meta {
1363
- display: flex;
1364
- flex-direction: column;
1365
- gap: 2px;
1366
- }
1367
-
1368
- .mobile-canvas-title {
1369
- font-size: 16px;
1370
- font-weight: 600;
1371
- color: var(--text-strong);
1372
- }
1373
-
1374
- .mobile-canvas-status {
1375
- font-size: 11px;
1376
- font-weight: 600;
1377
- padding: 2px 8px;
1378
- border-radius: 10px;
1379
- text-transform: capitalize;
1380
- }
1381
-
1382
- .mobile-canvas-status[data-status="approved"],
1383
- .mobile-canvas-status[data-status="done"] {
1384
- background: rgba(63, 185, 80, 0.15);
1385
- color: var(--success);
1386
- }
1387
-
1388
- .mobile-canvas-status[data-status="in-progress"],
1389
- .mobile-canvas-status[data-status="doing"] {
1390
- background: rgba(88, 166, 255, 0.15);
1391
- color: var(--info);
1392
- }
1393
-
1394
- .mobile-canvas-status[data-status="draft"] {
1395
- background: var(--bg-elev-3);
1396
- color: var(--text-dim);
1397
- }
1398
-
1399
- .mobile-canvas-actions {
1400
- display: flex;
1401
- align-items: center;
1402
- gap: 4px;
1403
- }
1404
-
1405
- .mobile-canvas-comment-count {
1406
- position: absolute;
1407
- top: 2px;
1408
- right: 2px;
1409
- background: var(--accent);
1410
- color: white;
1411
- font-size: 9px;
1412
- font-weight: 700;
1413
- border-radius: 6px;
1414
- padding: 1px 4px;
1415
- min-width: 14px;
1416
- text-align: center;
1417
- }
1418
-
1419
- .mobile-canvas-elements {
1420
- display: flex;
1421
- flex-direction: column;
1422
- gap: 10px;
1423
- }
1424
-
1425
- .mobile-canvas-element {
1426
- background: var(--surface);
1427
- border: 2px solid var(--border);
1428
- border-radius: 12px;
1429
- overflow: hidden;
1430
- cursor: pointer;
1431
- }
1432
-
1433
- .mobile-canvas-element.selected {
1434
- box-shadow: 0 0 0 2px var(--accent);
1435
- }
1436
-
1437
- .mobile-canvas-el-header {
1438
- display: flex;
1439
- align-items: center;
1440
- gap: 6px;
1441
- padding: 8px 12px;
1442
- }
1443
-
1444
- .mobile-canvas-el-type {
1445
- font-size: 11px;
1446
- font-weight: 600;
1447
- text-transform: uppercase;
1448
- }
1449
-
1450
- .mobile-canvas-el-status {
1451
- font-size: 10px;
1452
- padding: 1px 6px;
1453
- border-radius: 8px;
1454
- background: var(--bg-elev-3);
1455
- color: var(--text-muted);
1456
- margin-left: auto;
1457
- }
1458
-
1459
- .mobile-canvas-el-title {
1460
- font-size: 14px;
1461
- font-weight: 600;
1462
- padding: 8px 12px;
1463
- color: var(--text-strong);
1464
- }
1465
-
1466
- .mobile-canvas-el-content {
1467
- font-size: 13px;
1468
- color: var(--text-muted);
1469
- padding: 0 12px 8px;
1470
- line-height: 1.4;
1471
- }
1472
-
1473
- .mobile-canvas-el-comments {
1474
- display: flex;
1475
- align-items: center;
1476
- gap: 4px;
1477
- padding: 6px 12px;
1478
- border-top: 1px solid var(--border);
1479
- font-size: 11px;
1480
- color: var(--text-dim);
1481
- }
1482
-
1483
- .mobile-canvas-comments {
1484
- margin-top: 16px;
1485
- background: var(--surface);
1486
- border: 1px solid var(--border);
1487
- border-radius: 12px;
1488
- overflow: hidden;
1489
- }
1490
-
1491
- .mobile-canvas-comments-header {
1492
- display: flex;
1493
- align-items: center;
1494
- justify-content: space-between;
1495
- padding: 12px;
1496
- border-bottom: 1px solid var(--border);
1497
- }
1498
-
1499
- .mobile-canvas-comments-header h4 {
1500
- margin: 0;
1501
- font-size: 14px;
1502
- font-weight: 600;
1503
- }
1504
-
1505
- .mobile-canvas-comment-list {
1506
- max-height: 300px;
1507
- overflow-y: auto;
1508
- padding: 12px;
1509
- }
1510
-
1511
- .mobile-canvas-comment {
1512
- margin-bottom: 12px;
1513
- }
1514
-
1515
- .mobile-canvas-comment-head {
1516
- display: flex;
1517
- align-items: center;
1518
- gap: 8px;
1519
- margin-bottom: 4px;
1520
- }
1521
-
1522
- .mobile-canvas-comment-head .mono {
1523
- font-size: 11px;
1524
- font-weight: 600;
1525
- }
1526
-
1527
- .mobile-canvas-comment-head .muted {
1528
- font-size: 11px;
1529
- color: var(--text-dim);
1530
- margin-left: auto;
1531
- }
1532
-
1533
- .mobile-canvas-comment-text {
1534
- font-size: 13px;
1535
- color: var(--text-muted);
1536
- line-height: 1.4;
1537
- }
1538
-
1539
- .mobile-canvas-comment-input {
1540
- display: flex;
1541
- gap: 8px;
1542
- padding: 12px;
1543
- border-top: 1px solid var(--border);
1544
- }
1545
-
1546
- .mobile-canvas-comment-input .mobile-input {
1547
- flex: 1;
1548
- }
1549
-
1550
- /* ─── Activity enhancements ─────────────────────────────────────────── */
1551
- .mobile-activity-header {
1552
- display: flex;
1553
- align-items: center;
1554
- justify-content: space-between;
1555
- margin-bottom: 8px;
1556
- }
1557
-
1558
- .mobile-event-item {
1559
- display: flex;
1560
- align-items: flex-start;
1561
- gap: 10px;
1562
- padding: 10px 12px;
1563
- background: var(--surface);
1564
- border: 1px solid var(--border);
1565
- border-radius: 10px;
1566
- margin-bottom: 4px;
1567
- cursor: pointer;
1568
- }
1569
-
1570
- .mobile-event-kind {
1571
- font-size: 10px;
1572
- font-weight: 700;
1573
- padding: 2px 8px;
1574
- border-radius: 8px;
1575
- background: var(--bg-elev-3);
1576
- color: var(--text-muted);
1577
- text-transform: uppercase;
1578
- flex-shrink: 0;
1579
- }
1580
-
1581
- .mobile-event-msg {
1582
- flex: 1;
1583
- font-size: 13px;
1584
- color: var(--text);
1585
- overflow-wrap: anywhere;
1586
- }
1587
-
1588
- .mobile-event-time {
1589
- font-size: 11px;
1590
- color: var(--text-dim);
1591
- flex-shrink: 0;
1592
- }
1593
-
1594
- /* ─── Submit hero ─────────────────────────────────────────────────── */
1595
- .mobile-submit-hero {
1596
- background: linear-gradient(135deg, var(--accent-bg) 0%, var(--bg-elev) 100%);
1597
- border: 1px solid var(--accent-border);
1598
- border-radius: 16px;
1599
- padding: 16px;
1600
- margin-bottom: 16px;
1601
- }
1602
-
1603
- .mobile-submit-input {
1604
- width: 100%;
1605
- background: var(--surface);
1606
- border: 1px solid var(--border);
1607
- border-radius: 12px;
1608
- padding: 12px;
1609
- color: var(--text);
1610
- font-family: inherit;
1611
- font-size: var(--mobile-font-base);
1612
- resize: none;
1613
- outline: none;
1614
- margin-bottom: 12px;
1615
- }
1616
-
1617
- .mobile-submit-input:focus {
1618
- border-color: var(--accent);
1619
- }
1620
-
1621
- .mobile-submit-actions {
1622
- display: flex;
1623
- flex-direction: column;
1624
- gap: 10px;
1625
- }
1626
-
1627
- .mobile-submit-chips {
1628
- display: flex;
1629
- gap: 6px;
1630
- flex-wrap: wrap;
1631
- }
1632
-
1633
- .mobile-submit-chip {
1634
- min-height: var(--mobile-tap-target);
1635
- padding: 10px 12px;
1636
- border-radius: 16px;
1637
- font-size: 12px;
1638
- font-weight: 500;
1639
- background: var(--surface);
1640
- border: 1px solid var(--border);
1641
- color: var(--text-muted);
1642
- cursor: pointer;
1643
- transition: all 120ms ease;
1644
- }
1645
-
1646
- .mobile-submit-chip:hover {
1647
- border-color: var(--accent-border);
1648
- color: var(--accent);
1649
- }
1650
-
1651
- /* ─── More nav ────────────────────────────────────────────────────── */
1652
- .mobile-more-nav-item {
1653
- display: flex;
1654
- align-items: center;
1655
- gap: 14px;
1656
- padding: 14px 12px;
1657
- background: var(--surface);
1658
- border: 1px solid var(--border);
1659
- border-radius: 12px;
1660
- margin-bottom: 6px;
1661
- cursor: pointer;
1662
- transition: all 120ms ease;
1663
- }
1664
-
1665
- .mobile-more-nav-item:hover {
1666
- border-color: var(--accent-border);
1667
- background: var(--bg-elev-2);
1668
- }
1669
-
1670
- .mobile-more-nav-icon {
1671
- width: 40px;
1672
- height: 40px;
1673
- border-radius: 10px;
1674
- background: var(--bg-elev-2);
1675
- color: var(--accent);
1676
- display: flex;
1677
- align-items: center;
1678
- justify-content: center;
1679
- flex-shrink: 0;
1680
- }
1681
-
1682
- .mobile-more-nav-content {
1683
- flex: 1;
1684
- min-width: 0;
1685
- }
1686
-
1687
- .mobile-more-nav-label {
1688
- font-size: 15px;
1689
- font-weight: 600;
1690
- color: var(--text-strong);
1691
- display: flex;
1692
- align-items: center;
1693
- gap: 8px;
1694
- }
1695
-
1696
- .mobile-more-nav-count {
1697
- font-size: 11px;
1698
- font-weight: 600;
1699
- padding: 1px 7px;
1700
- border-radius: 10px;
1701
- background: var(--bg-elev-3);
1702
- color: var(--text-muted);
1703
- }
1704
-
1705
- .mobile-more-nav-desc {
1706
- font-size: 12px;
1707
- color: var(--text-muted);
1708
- display: block;
1709
- margin-top: 2px;
1710
- }
1711
-
1712
- .mobile-more-nav-arrow {
1713
- color: var(--text-dim);
1714
- flex-shrink: 0;
1715
- }
1716
-
1717
- /* ─── Config ─────────────────────────────────────────────────────── */
1718
- .mobile-config-list {
1719
- display: flex;
1720
- flex-direction: column;
1721
- gap: 0;
1722
- }
1723
-
1724
- .mobile-config-row {
1725
- display: flex;
1726
- align-items: flex-start;
1727
- flex-wrap: wrap;
1728
- gap: 10px;
1729
- padding: 10px 0;
1730
- border-bottom: 1px solid var(--border);
1731
- }
1732
-
1733
- .mobile-config-row:last-child {
1734
- border-bottom: none;
1735
- }
1736
-
1737
- .mobile-config-key {
1738
- flex: 0 0 104px;
1739
- display: flex;
1740
- flex-direction: column;
1741
- gap: 2px;
1742
- }
1743
-
1744
- .mobile-config-key .mono {
1745
- font-size: 12px;
1746
- font-weight: 500;
1747
- color: var(--text);
1748
- word-break: break-all;
1749
- }
1750
-
1751
- .mobile-config-type {
1752
- font-size: 10px;
1753
- color: var(--text-dim);
1754
- text-transform: uppercase;
1755
- }
1756
-
1757
- .mobile-config-value {
1758
- flex: 1;
1759
- min-width: 0;
1760
- }
1761
-
1762
- .mobile-config-value .mobile-input {
1763
- min-height: var(--mobile-tap-target);
1764
- padding: 6px 10px;
1765
- font-size: 13px;
1766
- }
1767
-
1768
- /* ─── Toggle switch ────────────────────────────────────────────────── */
1769
- .mobile-toggle {
1770
- position: relative;
1771
- display: inline-flex;
1772
- align-items: center;
1773
- cursor: pointer;
1774
- width: 44px;
1775
- height: 24px;
1776
- }
1777
-
1778
- .mobile-toggle input {
1779
- opacity: 0;
1780
- width: 0;
1781
- height: 0;
1782
- position: absolute;
1783
- }
1784
-
1785
- .mobile-toggle-slider {
1786
- position: absolute;
1787
- inset: 0;
1788
- background: var(--bg-elev-3);
1789
- border-radius: 12px;
1790
- transition: background 200ms ease;
1791
- }
1792
-
1793
- .mobile-toggle-slider::before {
1794
- content: '';
1795
- position: absolute;
1796
- left: 2px;
1797
- top: 2px;
1798
- width: 20px;
1799
- height: 20px;
1800
- background: white;
1801
- border-radius: 50%;
1802
- transition: transform 200ms ease;
1803
- }
1804
-
1805
- .mobile-toggle input:checked + .mobile-toggle-slider {
1806
- background: var(--accent);
1807
- }
1808
-
1809
- .mobile-toggle input:checked + .mobile-toggle-slider::before {
1810
- transform: translateX(20px);
1811
- }
1812
-
1813
- /* ─── Theme buttons ────────────────────────────────────────────────── */
1814
- .mobile-theme-btns {
1815
- display: flex;
1816
- gap: 6px;
1817
- }
1818
-
1819
- .mobile-theme-btn {
1820
- display: flex;
1821
- align-items: center;
1822
- gap: 4px;
1823
- min-height: var(--mobile-tap-target);
1824
- padding: 10px 12px;
1825
- border-radius: 16px;
1826
- font-size: 12px;
1827
- font-weight: 500;
1828
- background: var(--surface);
1829
- border: 1px solid var(--border);
1830
- color: var(--text-muted);
1831
- cursor: pointer;
1832
- transition: all 120ms ease;
1833
- }
1834
-
1835
- .mobile-theme-btn.active {
1836
- background: var(--accent-bg);
1837
- border-color: var(--accent-border);
1838
- color: var(--accent);
1839
- }
1840
-
1841
- /* ─── Accent swatches ─────────────────────────────────────────────── */
1842
- .mobile-accent-swatches {
1843
- display: flex;
1844
- gap: 8px;
1845
- flex-wrap: wrap;
1846
- }
1847
-
1848
- .mobile-accent-swatch {
1849
- width: var(--mobile-tap-target);
1850
- height: var(--mobile-tap-target);
1851
- border-radius: 50%;
1852
- border: 2px solid transparent;
1853
- cursor: pointer;
1854
- transition: transform 120ms ease;
1855
- }
1856
-
1857
- .mobile-accent-swatch:hover {
1858
- transform: scale(1.1);
1859
- }
1860
-
1861
- .mobile-accent-swatch.active {
1862
- border-color: white;
1863
- box-shadow: 0 0 0 2px var(--accent);
1864
- }
1865
-
1866
- /* ─── Settings save bar ────────────────────────────────────────────── */
1867
- .mobile-settings-save-bar {
1868
- display: flex;
1869
- align-items: center;
1870
- justify-content: space-between;
1871
- gap: 12px;
1872
- flex-wrap: wrap;
1873
- padding: 10px 16px;
1874
- background: var(--warning);
1875
- color: #000;
1876
- font-size: 13px;
1877
- font-weight: 500;
1878
- margin: calc(-1 * var(--mobile-padding));
1879
- margin-bottom: 12px;
1880
- }
1881
-
1882
- /* ─── List item interactive ──────────────────────────────────────── */
1883
- .mobile-list-item-interactive {
1884
- cursor: pointer;
1885
- transition: all 120ms ease;
1886
- }
1887
-
1888
- .mobile-list-item-interactive:hover {
1889
- border-color: var(--accent-border);
1890
- background: var(--bg-elev-2);
1891
- }
1892
-
1893
- .mobile-list-item-interactive:active {
1894
- opacity: 0.8;
1895
- }
1896
-
1897
- .mobile-list-status-dot {
1898
- width: 8px;
1899
- height: 8px;
1900
- border-radius: 50%;
1901
- flex-shrink: 0;
1902
- }
1903
-
1904
- .mobile-list-status-dot[data-status="working"],
1905
- .mobile-list-status-dot[data-status="doing"] {
1906
- background: var(--success);
1907
- }
1908
-
1909
- .mobile-list-status-dot[data-status="error"],
1910
- .mobile-list-status-dot[data-status="stuck"] {
1911
- background: var(--error);
1912
- }
1913
-
1914
- .mobile-list-status-dot[data-status="idle"] {
1915
- background: var(--text-dim);
1916
- }
1917
-
1918
- .mobile-list-badge.badge-accent {
1919
- background: var(--accent-bg);
1920
- color: var(--accent);
1921
- }
1922
-
1923
- .mobile-list-badge.badge-warning {
1924
- background: rgba(210, 153, 34, 0.15);
1925
- color: var(--warning);
1926
- }
1927
-
1928
- /* ─── Danger button ─────────────────────────────────────────────── */
1929
- .mobile-btn-danger {
1930
- background: var(--error);
1931
- color: white;
1932
- }
1933
-
1934
- .mobile-btn-danger:active {
1935
- opacity: 0.8;
1936
- }
1937
-
1938
- .mobile-artifact-iframe {
1939
- width: 100%;
1940
- min-height: min(70dvh, 560px);
1941
- border: 1px solid var(--border);
1942
- border-radius: 12px;
1943
- background: white;
1944
- }
1945
-
1946
- @media (max-width: 420px) {
1947
- .mobile-config-key,
1948
- .mobile-config-value {
1949
- flex-basis: 100%;
1950
- }
1951
-
1952
- .mobile-task-detail-row {
1953
- flex-direction: column;
1954
- }
1955
-
1956
- .mobile-task-detail-row span:first-child,
1957
- .mobile-task-detail-row span:last-child {
1958
- flex: none;
1959
- text-align: left;
1960
- }
1961
- }
1962
-
1963
- /* ─── Mobile Overview (v5.4) ───────────────────────────────────────────── */
1964
- .mobile-overview {
1965
- display: flex;
1966
- flex-direction: column;
1967
- gap: 16px;
1968
- }
1969
-
1970
- .mobile-hero {
1971
- padding: 20px 16px;
1972
- background: linear-gradient(135deg, rgba(139, 92, 246, 0.15), rgba(59, 130, 246, 0.10));
1973
- border: 1px solid var(--border);
1974
- border-radius: 14px;
1975
- }
1976
-
1977
- .mobile-hero h1 {
1978
- margin: 0 0 8px;
1979
- font-size: 24px;
1980
- font-weight: 700;
1981
- line-height: 1.2;
1982
- }
1983
-
1984
- .mobile-hero p {
1985
- margin: 0 0 12px;
1986
- font-size: 13px;
1987
- color: var(--text-dim);
1988
- line-height: 1.4;
1989
- }
1990
-
1991
- .mobile-hero-input {
1992
- width: 100%;
1993
- background: var(--surface-2);
1994
- border: 1px solid var(--border);
1995
- border-radius: 8px;
1996
- padding: 10px 12px;
1997
- color: var(--text);
1998
- font-size: 14px;
1999
- font-family: inherit;
2000
- resize: vertical;
2001
- margin-bottom: 8px;
2002
- box-sizing: border-box;
2003
- }
2004
-
2005
- .mobile-hero-submit {
2006
- width: 100%;
2007
- padding: 10px;
2008
- background: var(--accent, #8b5cf6);
2009
- color: white;
2010
- border: none;
2011
- border-radius: 8px;
2012
- font-weight: 600;
2013
- font-size: 14px;
2014
- cursor: pointer;
2015
- display: inline-flex;
2016
- align-items: center;
2017
- justify-content: center;
2018
- gap: 6px;
2019
- }
2020
-
2021
- .mobile-hero-submit:disabled {
2022
- opacity: 0.5;
2023
- cursor: not-allowed;
2024
- }
2025
-
2026
- .mobile-stats-stack {
2027
- display: flex;
2028
- flex-direction: column;
2029
- gap: 8px;
2030
- }
2031
-
2032
- .mobile-stat-card {
2033
- display: flex;
2034
- align-items: center;
2035
- gap: 14px;
2036
- padding: 14px 16px;
2037
- background: var(--surface-1);
2038
- border: 1px solid var(--border);
2039
- border-radius: 10px;
2040
- }
2041
-
2042
- .mobile-stat-card.is-blue { border-left: 4px solid #58a6ff; }
2043
- .mobile-stat-card.is-purple { border-left: 4px solid #8b5cf6; }
2044
- .mobile-stat-card.is-green { border-left: 4px solid #3fb950; }
2045
- .mobile-stat-card.is-yellow { border-left: 4px solid #d29922; }
2046
-
2047
- .mobile-stat-icon {
2048
- display: flex;
2049
- align-items: center;
2050
- justify-content: center;
2051
- width: 40px;
2052
- height: 40px;
2053
- border-radius: 10px;
2054
- background: var(--surface-2);
2055
- color: var(--text);
2056
- flex-shrink: 0;
2057
- }
2058
-
2059
- .mobile-stat-body { flex: 1; min-width: 0; }
2060
-
2061
- .mobile-stat-label {
2062
- font-size: 12px;
2063
- color: var(--text-dim);
2064
- text-transform: uppercase;
2065
- letter-spacing: 0.05em;
2066
- }
2067
-
2068
- .mobile-stat-value {
2069
- font-size: 24px;
2070
- font-weight: 700;
2071
- margin-top: 2px;
2072
- }
2073
-
2074
- .mobile-stat-subtext {
2075
- font-size: 11px;
2076
- color: var(--text-dim);
2077
- margin-top: 2px;
2078
- }
2079
-
2080
- .mobile-activity-card,
2081
- .mobile-quick-actions {
2082
- padding: 16px;
2083
- background: var(--surface-1);
2084
- border: 1px solid var(--border);
2085
- border-radius: 10px;
2086
- }
2087
-
2088
- .mobile-activity-card h3 {
2089
- margin: 0 0 12px;
2090
- font-size: 14px;
2091
- font-weight: 600;
2092
- }
2093
-
2094
- .mobile-activity-list {
2095
- list-style: none;
2096
- padding: 0;
2097
- margin: 0;
2098
- display: flex;
2099
- flex-direction: column;
2100
- gap: 8px;
2101
- }
2102
-
2103
- .mobile-activity-item {
2104
- display: flex;
2105
- gap: 8px;
2106
- padding: 8px;
2107
- border-radius: 6px;
2108
- background: var(--surface-2);
2109
- font-size: 12px;
2110
- }
2111
-
2112
- .mobile-activity-time {
2113
- color: var(--text-dim);
2114
- font-variant-numeric: tabular-nums;
2115
- flex-shrink: 0;
2116
- }
2117
-
2118
- .mobile-activity-text {
2119
- word-break: break-word;
2120
- }
2121
-
2122
- .mobile-quick-actions {
2123
- display: flex;
2124
- flex-direction: column;
2125
- gap: 8px;
2126
- }
2127
-
2128
- .mobile-quick-action {
2129
- display: flex;
2130
- align-items: center;
2131
- gap: 8px;
2132
- padding: 12px;
2133
- background: var(--surface-2);
2134
- border: 1px solid var(--border);
2135
- border-radius: 8px;
2136
- color: var(--text);
2137
- font-size: 14px;
2138
- font-weight: 500;
2139
- text-align: left;
2140
- cursor: pointer;
2141
- }
2142
-
2143
- /* ─── View error boundary ───────────────────────────────────────────── */
2144
- /* Shown when a child view throws during render (see MobileViewBoundary
2145
- in MobileApp.tsx). Keeps the chrome intact so the user can still tap
2146
- the back button or reload instead of staring at a blank white screen. */
2147
- .mobile-view-error {
2148
- display: flex;
2149
- flex-direction: column;
2150
- align-items: center;
2151
- justify-content: center;
2152
- gap: 12px;
2153
- padding: 32px 24px;
2154
- text-align: center;
2155
- min-height: 50vh;
2156
- }
2157
-
2158
- .mobile-view-error h2 {
2159
- font-size: 18px;
2160
- font-weight: 600;
2161
- color: var(--text);
2162
- margin: 0;
2163
- }
2164
-
2165
- .mobile-view-error p {
2166
- font-size: 13px;
2167
- color: var(--text-muted);
2168
- margin: 0;
2169
- max-width: 32ch;
2170
- word-break: break-word;
2171
- }
2172
-
2173
- /* ─── Reduce motion ──────────────────────────────────────────────────── */
2174
- @media (prefers-reduced-motion: reduce) {
2175
- *,
2176
- *::before,
2177
- *::after {
2178
- animation-duration: 0.01ms !important;
2179
- transition-duration: 0.01ms !important;
2180
- }
2181
- }