@gokulvenkatareddy/cortex 0.1.7

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 (299) hide show
  1. package/README.md +1295 -0
  2. package/apps/octogent/.github/workflows/ci.yml +40 -0
  3. package/apps/octogent/.shims/claude +4 -0
  4. package/apps/octogent/AGENTS.md +71 -0
  5. package/apps/octogent/CONTRIBUTING.md +72 -0
  6. package/apps/octogent/LICENSE +21 -0
  7. package/apps/octogent/README.md +184 -0
  8. package/apps/octogent/apps/api/AGENTS.md +32 -0
  9. package/apps/octogent/apps/api/package.json +19 -0
  10. package/apps/octogent/apps/api/src/agentStateDetection.ts +181 -0
  11. package/apps/octogent/apps/api/src/claudeSessionScanner.ts +235 -0
  12. package/apps/octogent/apps/api/src/claudeSkills.ts +182 -0
  13. package/apps/octogent/apps/api/src/claudeUsage.ts +922 -0
  14. package/apps/octogent/apps/api/src/cli.ts +595 -0
  15. package/apps/octogent/apps/api/src/codeIntelStore.ts +46 -0
  16. package/apps/octogent/apps/api/src/codexUsage.ts +278 -0
  17. package/apps/octogent/apps/api/src/createApiServer/codeIntelRoutes.ts +60 -0
  18. package/apps/octogent/apps/api/src/createApiServer/conversationRoutes.ts +128 -0
  19. package/apps/octogent/apps/api/src/createApiServer/deckRoutes.ts +873 -0
  20. package/apps/octogent/apps/api/src/createApiServer/gitParsers.ts +140 -0
  21. package/apps/octogent/apps/api/src/createApiServer/gitRoutes.ts +214 -0
  22. package/apps/octogent/apps/api/src/createApiServer/miscRoutes.ts +316 -0
  23. package/apps/octogent/apps/api/src/createApiServer/monitorParsers.ts +137 -0
  24. package/apps/octogent/apps/api/src/createApiServer/monitorRoutes.ts +95 -0
  25. package/apps/octogent/apps/api/src/createApiServer/requestHandler.ts +311 -0
  26. package/apps/octogent/apps/api/src/createApiServer/requestParsers.ts +25 -0
  27. package/apps/octogent/apps/api/src/createApiServer/routeHelpers.ts +97 -0
  28. package/apps/octogent/apps/api/src/createApiServer/security.ts +70 -0
  29. package/apps/octogent/apps/api/src/createApiServer/terminalParsers.ts +167 -0
  30. package/apps/octogent/apps/api/src/createApiServer/terminalRoutes.ts +315 -0
  31. package/apps/octogent/apps/api/src/createApiServer/types.ts +24 -0
  32. package/apps/octogent/apps/api/src/createApiServer/uiStateParsers.ts +255 -0
  33. package/apps/octogent/apps/api/src/createApiServer/upgradeHandler.ts +38 -0
  34. package/apps/octogent/apps/api/src/createApiServer/usageRoutes.ts +84 -0
  35. package/apps/octogent/apps/api/src/createApiServer.ts +176 -0
  36. package/apps/octogent/apps/api/src/deck/readDeckTentacles.ts +595 -0
  37. package/apps/octogent/apps/api/src/githubRepoSummary.ts +397 -0
  38. package/apps/octogent/apps/api/src/logging.ts +9 -0
  39. package/apps/octogent/apps/api/src/monitor/defaults.ts +3 -0
  40. package/apps/octogent/apps/api/src/monitor/index.ts +8 -0
  41. package/apps/octogent/apps/api/src/monitor/repository.ts +303 -0
  42. package/apps/octogent/apps/api/src/monitor/service.ts +349 -0
  43. package/apps/octogent/apps/api/src/monitor/types.ts +120 -0
  44. package/apps/octogent/apps/api/src/monitor/xProvider.ts +587 -0
  45. package/apps/octogent/apps/api/src/projectPersistence.ts +377 -0
  46. package/apps/octogent/apps/api/src/prompts/index.ts +10 -0
  47. package/apps/octogent/apps/api/src/prompts/promptResolver.ts +145 -0
  48. package/apps/octogent/apps/api/src/runtimeMetadata.ts +69 -0
  49. package/apps/octogent/apps/api/src/server.ts +80 -0
  50. package/apps/octogent/apps/api/src/setupState.ts +80 -0
  51. package/apps/octogent/apps/api/src/setupStatus.ts +174 -0
  52. package/apps/octogent/apps/api/src/startupPrerequisites.ts +146 -0
  53. package/apps/octogent/apps/api/src/terminalRuntime/channelMessaging.ts +87 -0
  54. package/apps/octogent/apps/api/src/terminalRuntime/claudeTranscript.ts +279 -0
  55. package/apps/octogent/apps/api/src/terminalRuntime/constants.ts +15 -0
  56. package/apps/octogent/apps/api/src/terminalRuntime/conversations.ts +492 -0
  57. package/apps/octogent/apps/api/src/terminalRuntime/gitOperations.ts +341 -0
  58. package/apps/octogent/apps/api/src/terminalRuntime/hookProcessor.ts +405 -0
  59. package/apps/octogent/apps/api/src/terminalRuntime/protocol.ts +46 -0
  60. package/apps/octogent/apps/api/src/terminalRuntime/ptyEnvironment.ts +50 -0
  61. package/apps/octogent/apps/api/src/terminalRuntime/registry.ts +423 -0
  62. package/apps/octogent/apps/api/src/terminalRuntime/sessionRuntime.ts +671 -0
  63. package/apps/octogent/apps/api/src/terminalRuntime/systemClients.ts +432 -0
  64. package/apps/octogent/apps/api/src/terminalRuntime/types.ts +157 -0
  65. package/apps/octogent/apps/api/src/terminalRuntime/worktreeManager.ts +135 -0
  66. package/apps/octogent/apps/api/src/terminalRuntime.ts +567 -0
  67. package/apps/octogent/apps/api/src/usageUtils.ts +16 -0
  68. package/apps/octogent/apps/api/src/ws-shim.d.ts +28 -0
  69. package/apps/octogent/apps/api/tests/agentStateDetection.test.ts +67 -0
  70. package/apps/octogent/apps/api/tests/claudeUsage.test.ts +583 -0
  71. package/apps/octogent/apps/api/tests/codexUsage.test.ts +107 -0
  72. package/apps/octogent/apps/api/tests/createApiServer.test.ts +3207 -0
  73. package/apps/octogent/apps/api/tests/githubRepoSummary.test.ts +100 -0
  74. package/apps/octogent/apps/api/tests/logging.test.ts +33 -0
  75. package/apps/octogent/apps/api/tests/monitorApi.test.ts +467 -0
  76. package/apps/octogent/apps/api/tests/monitorCore.test.ts +104 -0
  77. package/apps/octogent/apps/api/tests/promptResolver.test.ts +109 -0
  78. package/apps/octogent/apps/api/tests/protocol.test.ts +14 -0
  79. package/apps/octogent/apps/api/tests/sessionRuntime.test.ts +608 -0
  80. package/apps/octogent/apps/api/tests/startupPrerequisites.test.ts +70 -0
  81. package/apps/octogent/apps/api/tests/upgradeHandler.test.ts +40 -0
  82. package/apps/octogent/apps/api/tests/xMonitorProvider.test.ts +109 -0
  83. package/apps/octogent/apps/api/tsconfig.json +7 -0
  84. package/apps/octogent/apps/api/vitest.config.ts +7 -0
  85. package/apps/octogent/apps/web/AGENTS.md +38 -0
  86. package/apps/octogent/apps/web/index.html +13 -0
  87. package/apps/octogent/apps/web/package.json +32 -0
  88. package/apps/octogent/apps/web/public/octopus-favicon.svg +26 -0
  89. package/apps/octogent/apps/web/src/App.tsx +646 -0
  90. package/apps/octogent/apps/web/src/app/canvas/types.ts +34 -0
  91. package/apps/octogent/apps/web/src/app/codeIntelAggregation.ts +278 -0
  92. package/apps/octogent/apps/web/src/app/constants.ts +28 -0
  93. package/apps/octogent/apps/web/src/app/conversationNormalizers.ts +135 -0
  94. package/apps/octogent/apps/web/src/app/formatTimestamp.ts +18 -0
  95. package/apps/octogent/apps/web/src/app/githubMetrics.ts +76 -0
  96. package/apps/octogent/apps/web/src/app/githubNormalizers.ts +91 -0
  97. package/apps/octogent/apps/web/src/app/hooks/useAgentRuntimeStates.ts +18 -0
  98. package/apps/octogent/apps/web/src/app/hooks/useBackendLivenessPolling.ts +53 -0
  99. package/apps/octogent/apps/web/src/app/hooks/useCanvasGraphData.ts +449 -0
  100. package/apps/octogent/apps/web/src/app/hooks/useCanvasTransform.ts +260 -0
  101. package/apps/octogent/apps/web/src/app/hooks/useClaudeUsagePolling.ts +40 -0
  102. package/apps/octogent/apps/web/src/app/hooks/useClickOutside.ts +30 -0
  103. package/apps/octogent/apps/web/src/app/hooks/useCodeIntelRuntime.ts +83 -0
  104. package/apps/octogent/apps/web/src/app/hooks/useCodexUsagePolling.ts +35 -0
  105. package/apps/octogent/apps/web/src/app/hooks/useConsoleKeyboardShortcuts.ts +31 -0
  106. package/apps/octogent/apps/web/src/app/hooks/useConversationsRuntime.ts +377 -0
  107. package/apps/octogent/apps/web/src/app/hooks/useForceSimulation.ts +319 -0
  108. package/apps/octogent/apps/web/src/app/hooks/useGitHubPrimaryViewModel.ts +143 -0
  109. package/apps/octogent/apps/web/src/app/hooks/useGithubSummaryPolling.ts +28 -0
  110. package/apps/octogent/apps/web/src/app/hooks/useInitialColumnsHydration.ts +64 -0
  111. package/apps/octogent/apps/web/src/app/hooks/useMonitorRuntime.ts +220 -0
  112. package/apps/octogent/apps/web/src/app/hooks/usePersistedUiState.ts +536 -0
  113. package/apps/octogent/apps/web/src/app/hooks/usePollingData.ts +79 -0
  114. package/apps/octogent/apps/web/src/app/hooks/usePromptLibrary.ts +185 -0
  115. package/apps/octogent/apps/web/src/app/hooks/useTentacleGitLifecycle.ts +530 -0
  116. package/apps/octogent/apps/web/src/app/hooks/useTerminalCompletionNotification.ts +94 -0
  117. package/apps/octogent/apps/web/src/app/hooks/useTerminalMutations.ts +266 -0
  118. package/apps/octogent/apps/web/src/app/hooks/useTerminalStateReconciliation.ts +23 -0
  119. package/apps/octogent/apps/web/src/app/hooks/useUsageHeatmapPolling.ts +43 -0
  120. package/apps/octogent/apps/web/src/app/hooks/useWorkspaceSetup.ts +80 -0
  121. package/apps/octogent/apps/web/src/app/hotkeys.ts +31 -0
  122. package/apps/octogent/apps/web/src/app/monitorNormalizers.ts +145 -0
  123. package/apps/octogent/apps/web/src/app/notificationSounds.ts +164 -0
  124. package/apps/octogent/apps/web/src/app/terminalRuntimeStateStore.ts +261 -0
  125. package/apps/octogent/apps/web/src/app/terminalState.ts +21 -0
  126. package/apps/octogent/apps/web/src/app/types.ts +42 -0
  127. package/apps/octogent/apps/web/src/app/uiStateNormalizers.ts +113 -0
  128. package/apps/octogent/apps/web/src/app/usageNormalizers.ts +58 -0
  129. package/apps/octogent/apps/web/src/components/ActiveAgentsSidebar.tsx +60 -0
  130. package/apps/octogent/apps/web/src/components/ActivityPrimaryView.tsx +21 -0
  131. package/apps/octogent/apps/web/src/components/AgentStateBadge.tsx +47 -0
  132. package/apps/octogent/apps/web/src/components/CanvasPrimaryView.tsx +1532 -0
  133. package/apps/octogent/apps/web/src/components/ClearAllConversationsDialog.tsx +33 -0
  134. package/apps/octogent/apps/web/src/components/CodeIntelArcDiagram.tsx +245 -0
  135. package/apps/octogent/apps/web/src/components/CodeIntelPrimaryView.tsx +104 -0
  136. package/apps/octogent/apps/web/src/components/CodeIntelTreemap.tsx +138 -0
  137. package/apps/octogent/apps/web/src/components/ConsolePrimaryNav.tsx +31 -0
  138. package/apps/octogent/apps/web/src/components/ConversationsPrimaryView.tsx +243 -0
  139. package/apps/octogent/apps/web/src/components/DeckPrimaryView.tsx +613 -0
  140. package/apps/octogent/apps/web/src/components/DeleteTentacleDialog.tsx +91 -0
  141. package/apps/octogent/apps/web/src/components/EmptyOctopus.tsx +715 -0
  142. package/apps/octogent/apps/web/src/components/GitHubPrimaryView.tsx +494 -0
  143. package/apps/octogent/apps/web/src/components/MonitorPrimaryView.tsx +475 -0
  144. package/apps/octogent/apps/web/src/components/PrimaryViewRouter.tsx +99 -0
  145. package/apps/octogent/apps/web/src/components/PromptsPrimaryView.tsx +243 -0
  146. package/apps/octogent/apps/web/src/components/RuntimeStatusStrip.tsx +273 -0
  147. package/apps/octogent/apps/web/src/components/SettingsPrimaryView.tsx +92 -0
  148. package/apps/octogent/apps/web/src/components/SidebarActionPanel.tsx +124 -0
  149. package/apps/octogent/apps/web/src/components/SidebarConversationsList.tsx +279 -0
  150. package/apps/octogent/apps/web/src/components/SidebarPromptsList.tsx +116 -0
  151. package/apps/octogent/apps/web/src/components/TelemetryTape.tsx +106 -0
  152. package/apps/octogent/apps/web/src/components/TentacleGitActionsDialog.tsx +341 -0
  153. package/apps/octogent/apps/web/src/components/Terminal.tsx +524 -0
  154. package/apps/octogent/apps/web/src/components/TerminalPromptPicker.tsx +140 -0
  155. package/apps/octogent/apps/web/src/components/UsageHeatmap.tsx +702 -0
  156. package/apps/octogent/apps/web/src/components/canvas/CanvasTentaclePanel.tsx +485 -0
  157. package/apps/octogent/apps/web/src/components/canvas/CanvasTerminalColumn.tsx +89 -0
  158. package/apps/octogent/apps/web/src/components/canvas/DeleteAllTerminalsDialog.tsx +221 -0
  159. package/apps/octogent/apps/web/src/components/canvas/OctopusNode.tsx +307 -0
  160. package/apps/octogent/apps/web/src/components/canvas/SessionNode.tsx +185 -0
  161. package/apps/octogent/apps/web/src/components/deck/ActionCards.tsx +118 -0
  162. package/apps/octogent/apps/web/src/components/deck/AddTentacleForm.tsx +269 -0
  163. package/apps/octogent/apps/web/src/components/deck/DeckBottomActions.tsx +56 -0
  164. package/apps/octogent/apps/web/src/components/deck/TentaclePod.tsx +334 -0
  165. package/apps/octogent/apps/web/src/components/deck/WorkspaceSetupCard.tsx +105 -0
  166. package/apps/octogent/apps/web/src/components/deck/octopusVisuals.ts +72 -0
  167. package/apps/octogent/apps/web/src/components/terminalReplay.ts +62 -0
  168. package/apps/octogent/apps/web/src/components/terminalWheel.ts +54 -0
  169. package/apps/octogent/apps/web/src/components/ui/ActionButton.tsx +34 -0
  170. package/apps/octogent/apps/web/src/components/ui/ConfirmationDialog.tsx +86 -0
  171. package/apps/octogent/apps/web/src/components/ui/MarkdownContent.tsx +43 -0
  172. package/apps/octogent/apps/web/src/components/ui/SettingsToggle.tsx +34 -0
  173. package/apps/octogent/apps/web/src/components/ui/StatusBadge.tsx +24 -0
  174. package/apps/octogent/apps/web/src/main.tsx +17 -0
  175. package/apps/octogent/apps/web/src/runtime/HttpTerminalSnapshotReader.ts +87 -0
  176. package/apps/octogent/apps/web/src/runtime/runtimeEndpoints.ts +412 -0
  177. package/apps/octogent/apps/web/src/styles/chrome-and-buttons.css +272 -0
  178. package/apps/octogent/apps/web/src/styles/console-canvas-activity.css +358 -0
  179. package/apps/octogent/apps/web/src/styles/console-canvas-canvas.css +1843 -0
  180. package/apps/octogent/apps/web/src/styles/console-canvas-code-intel.css +227 -0
  181. package/apps/octogent/apps/web/src/styles/console-canvas-conversations.css +705 -0
  182. package/apps/octogent/apps/web/src/styles/console-canvas-deck.css +1524 -0
  183. package/apps/octogent/apps/web/src/styles/console-canvas-github.css +541 -0
  184. package/apps/octogent/apps/web/src/styles/console-canvas-monitor.css +595 -0
  185. package/apps/octogent/apps/web/src/styles/console-canvas-pixpack.css +81 -0
  186. package/apps/octogent/apps/web/src/styles/console-canvas-prompts.css +474 -0
  187. package/apps/octogent/apps/web/src/styles/console-canvas-settings.css +207 -0
  188. package/apps/octogent/apps/web/src/styles/console-chrome-status-nav.css +441 -0
  189. package/apps/octogent/apps/web/src/styles/console-overrides-telemetry.css +320 -0
  190. package/apps/octogent/apps/web/src/styles/console-theme-tokens.css +25 -0
  191. package/apps/octogent/apps/web/src/styles/cortex-theme.css +412 -0
  192. package/apps/octogent/apps/web/src/styles/foundation.css +100 -0
  193. package/apps/octogent/apps/web/src/styles/sidebar-and-scrollbars.css +447 -0
  194. package/apps/octogent/apps/web/src/styles/terminal-and-status.css +356 -0
  195. package/apps/octogent/apps/web/src/styles.css +25 -0
  196. package/apps/octogent/apps/web/src/types/ws.d.ts +23 -0
  197. package/apps/octogent/apps/web/tests/CanvasPrimaryView.test.tsx +347 -0
  198. package/apps/octogent/apps/web/tests/HttpTerminalSnapshotReader.test.tsx +54 -0
  199. package/apps/octogent/apps/web/tests/RuntimeStatusStrip.test.tsx +70 -0
  200. package/apps/octogent/apps/web/tests/Terminal.test.tsx +87 -0
  201. package/apps/octogent/apps/web/tests/add-tentacle-form.test.tsx +48 -0
  202. package/apps/octogent/apps/web/tests/app-github-runtime.test.tsx +162 -0
  203. package/apps/octogent/apps/web/tests/app-monitor-runtime.test.tsx +657 -0
  204. package/apps/octogent/apps/web/tests/app-shell-navigation.test.tsx +109 -0
  205. package/apps/octogent/apps/web/tests/app-swarm-refresh.test.tsx +268 -0
  206. package/apps/octogent/apps/web/tests/app-ui-state-persistence.test.tsx +116 -0
  207. package/apps/octogent/apps/web/tests/app-workspace-setup.test.tsx +217 -0
  208. package/apps/octogent/apps/web/tests/canvas-tentacle-panel.test.tsx +195 -0
  209. package/apps/octogent/apps/web/tests/delete-all-terminals-dialog.test.tsx +76 -0
  210. package/apps/octogent/apps/web/tests/githubMetrics.test.tsx +52 -0
  211. package/apps/octogent/apps/web/tests/hotkeys.test.tsx +44 -0
  212. package/apps/octogent/apps/web/tests/runtimeEndpoints.test.tsx +240 -0
  213. package/apps/octogent/apps/web/tests/setup.ts +39 -0
  214. package/apps/octogent/apps/web/tests/tentacle-pod.test.tsx +62 -0
  215. package/apps/octogent/apps/web/tests/terminalReplay.test.ts +71 -0
  216. package/apps/octogent/apps/web/tests/terminalState.test.tsx +49 -0
  217. package/apps/octogent/apps/web/tests/terminalWheel.test.tsx +51 -0
  218. package/apps/octogent/apps/web/tests/test-utils/appTestHarness.ts +48 -0
  219. package/apps/octogent/apps/web/tests/uiPrimitives.test.tsx +31 -0
  220. package/apps/octogent/apps/web/tests/useAgentRuntimeStates.test.tsx +47 -0
  221. package/apps/octogent/apps/web/tsconfig.json +8 -0
  222. package/apps/octogent/apps/web/vite.api.bundle.config.mts +32 -0
  223. package/apps/octogent/apps/web/vite.config.ts +22 -0
  224. package/apps/octogent/bin/octogent +3 -0
  225. package/apps/octogent/biome.json +21 -0
  226. package/apps/octogent/docs/concepts/mental-model.md +79 -0
  227. package/apps/octogent/docs/concepts/runtime-and-api.md +60 -0
  228. package/apps/octogent/docs/concepts/tentacles.md +85 -0
  229. package/apps/octogent/docs/getting-started/installation.md +54 -0
  230. package/apps/octogent/docs/getting-started/quickstart.md +79 -0
  231. package/apps/octogent/docs/guides/inter-agent-messaging.md +43 -0
  232. package/apps/octogent/docs/guides/orchestrating-child-agents.md +49 -0
  233. package/apps/octogent/docs/guides/working-with-todos.md +56 -0
  234. package/apps/octogent/docs/index.md +40 -0
  235. package/apps/octogent/docs/reference/api.md +103 -0
  236. package/apps/octogent/docs/reference/cli.md +71 -0
  237. package/apps/octogent/docs/reference/experimental-features.md +28 -0
  238. package/apps/octogent/docs/reference/filesystem-layout.md +62 -0
  239. package/apps/octogent/docs/reference/troubleshooting.md +49 -0
  240. package/apps/octogent/package.json +35 -0
  241. package/apps/octogent/packages/core/AGENTS.md +31 -0
  242. package/apps/octogent/packages/core/package.json +12 -0
  243. package/apps/octogent/packages/core/src/adapters/InMemoryTerminalSnapshotReader.ts +10 -0
  244. package/apps/octogent/packages/core/src/application/buildTerminalList.ts +13 -0
  245. package/apps/octogent/packages/core/src/domain/agentRuntime.ts +18 -0
  246. package/apps/octogent/packages/core/src/domain/channel.ts +8 -0
  247. package/apps/octogent/packages/core/src/domain/completionSound.ts +14 -0
  248. package/apps/octogent/packages/core/src/domain/conversation.ts +48 -0
  249. package/apps/octogent/packages/core/src/domain/deck.ts +33 -0
  250. package/apps/octogent/packages/core/src/domain/git.ts +32 -0
  251. package/apps/octogent/packages/core/src/domain/monitor.ts +62 -0
  252. package/apps/octogent/packages/core/src/domain/setup.ts +27 -0
  253. package/apps/octogent/packages/core/src/domain/terminal.ts +17 -0
  254. package/apps/octogent/packages/core/src/domain/uiState.ts +22 -0
  255. package/apps/octogent/packages/core/src/domain/usage.ts +60 -0
  256. package/apps/octogent/packages/core/src/index.ts +15 -0
  257. package/apps/octogent/packages/core/src/ports/TerminalSnapshotReader.ts +5 -0
  258. package/apps/octogent/packages/core/src/util/typeCoercion.ts +20 -0
  259. package/apps/octogent/packages/core/tests/buildTerminalList.test.ts +75 -0
  260. package/apps/octogent/packages/core/tsconfig.json +7 -0
  261. package/apps/octogent/packages/core/tsconfig.tsbuildinfo +1 -0
  262. package/apps/octogent/packages/core/vitest.config.ts +7 -0
  263. package/apps/octogent/pnpm-lock.yaml +3212 -0
  264. package/apps/octogent/pnpm-workspace.yaml +3 -0
  265. package/apps/octogent/prompts/meta-prompt-generator.md +223 -0
  266. package/apps/octogent/prompts/octoboss-clean-contexts.md +30 -0
  267. package/apps/octogent/prompts/octoboss-reorganize-tentacles.md +29 -0
  268. package/apps/octogent/prompts/octoboss-reorganize-todos.md +27 -0
  269. package/apps/octogent/prompts/sandbox-init.md +3 -0
  270. package/apps/octogent/prompts/swarm-parent.md +83 -0
  271. package/apps/octogent/prompts/swarm-worker.md +50 -0
  272. package/apps/octogent/prompts/tentacle-context-init.md +1 -0
  273. package/apps/octogent/prompts/tentacle-planner.md +110 -0
  274. package/apps/octogent/prompts/tentacle-reorganize-todos.md +20 -0
  275. package/apps/octogent/prompts/tentacle-update-tentacle.md +18 -0
  276. package/apps/octogent/scripts/build-package.mjs +23 -0
  277. package/apps/octogent/scripts/dev.mjs +158 -0
  278. package/apps/octogent/scripts/smoke-public-install.mjs +271 -0
  279. package/apps/octogent/static/images/octogent-header.png +0 -0
  280. package/apps/octogent/static/images/preview_1.jpg +0 -0
  281. package/apps/octogent/static/images/preview_2.jpg +0 -0
  282. package/apps/octogent/static/images/preview_3.jpg +0 -0
  283. package/apps/octogent/static/images/preview_4.jpg +0 -0
  284. package/apps/octogent/static/images/preview_5.jpg +0 -0
  285. package/apps/octogent/static/images/preview_6.jpg +0 -0
  286. package/apps/octogent/tsconfig.base.json +16 -0
  287. package/bin/AGI +3 -0
  288. package/bin/AGI-install-app +71 -0
  289. package/bin/AGI-ui +16 -0
  290. package/bin/AGI-voice +15 -0
  291. package/bin/AGI-web +16 -0
  292. package/bin/cortex +109 -0
  293. package/bin/cortex-octogent +99 -0
  294. package/bin/import-specifier.mjs +13 -0
  295. package/bin/import-specifier.test.mjs +13 -0
  296. package/bin/octo +150 -0
  297. package/dist/cli.mjs +555650 -0
  298. package/package.json +157 -0
  299. package/scripts/setup-wizard.ts +390 -0
@@ -0,0 +1,1524 @@
1
+ /* ─── Deck View ───────────────────────────────────────────────── */
2
+ /* Layout is driven entirely by [data-mode="grid"|"detail"] on the root. */
3
+ /* Pods container is a CSS grid in grid mode, a sidebar column in detail. */
4
+ /* Non-focused pods collapse; focused pod stretches; detail panel expands. */
5
+
6
+ .deck-view {
7
+ display: flex;
8
+ height: 100%;
9
+ overflow: hidden;
10
+ position: relative;
11
+ }
12
+
13
+ /* ─── Empty state ────────────────────────────────────────────────────────── */
14
+
15
+ .deck-empty-state {
16
+ display: flex;
17
+ flex-direction: row;
18
+ align-items: center;
19
+ flex: 1;
20
+ overflow: hidden;
21
+ transition: justify-content 400ms;
22
+ }
23
+
24
+ [data-empty-mode="idle"] .deck-empty-state {
25
+ justify-content: center;
26
+ }
27
+
28
+ [data-empty-mode="adding"] .deck-empty-state {
29
+ justify-content: flex-start;
30
+ }
31
+
32
+ .deck-empty-left {
33
+ display: flex;
34
+ flex-direction: row;
35
+ align-items: center;
36
+ gap: 7rem;
37
+ padding: 2rem;
38
+ transition: transform 400ms cubic-bezier(0.4, 0, 0.2, 1), flex 400ms cubic-bezier(0.4, 0, 0.2, 1);
39
+ }
40
+
41
+ [data-empty-mode="idle"] .deck-empty-left {
42
+ flex: 0 0 auto;
43
+ }
44
+
45
+ [data-empty-mode="adding"] .deck-empty-left {
46
+ flex: 0 0 auto;
47
+ transform: translateX(-2rem);
48
+ gap: 4rem;
49
+ padding: 2rem 2rem 2rem 3rem;
50
+ }
51
+
52
+ .deck-empty-right {
53
+ flex: 1;
54
+ display: flex;
55
+ flex-direction: column;
56
+ height: 100%;
57
+ border-left: 1px solid #2b2f36;
58
+ background: #0b0d10;
59
+ animation: deck-form-slide-in 350ms cubic-bezier(0.4, 0, 0.2, 1);
60
+ }
61
+
62
+ @keyframes deck-form-slide-in {
63
+ 0% {
64
+ opacity: 0;
65
+ transform: translateX(40px);
66
+ }
67
+ 100% {
68
+ opacity: 1;
69
+ transform: translateX(0);
70
+ }
71
+ }
72
+
73
+ .deck-empty-octopus {
74
+ display: flex;
75
+ align-items: center;
76
+ justify-content: center;
77
+ }
78
+
79
+ .deck-empty-octopus canvas {
80
+ image-rendering: pixelated;
81
+ }
82
+
83
+ .deck-empty-actions {
84
+ display: flex;
85
+ flex-direction: column;
86
+ gap: 1rem;
87
+ }
88
+
89
+ .deck-empty-actions--compact {
90
+ gap: 0.5rem;
91
+ }
92
+
93
+ .deck-empty-card {
94
+ display: flex;
95
+ flex-direction: row;
96
+ align-items: center;
97
+ gap: 1.25rem;
98
+ width: 480px;
99
+ padding: 1.25rem 1.5rem;
100
+ background: #0b0d10;
101
+ border: 1px solid var(--accent-primary);
102
+ cursor: pointer;
103
+ transition: border-color 0.15s, background 0.15s;
104
+ font-family: var(--font-main);
105
+ text-align: left;
106
+ }
107
+
108
+ .deck-empty-actions--compact .deck-empty-card {
109
+ width: auto;
110
+ padding: 0.6rem 1rem;
111
+ gap: 0.75rem;
112
+ }
113
+
114
+ .deck-empty-card:hover {
115
+ border-color: var(--accent-primary);
116
+ background: #0d1017;
117
+ }
118
+
119
+ .deck-empty-card-icon {
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: center;
123
+ flex-shrink: 0;
124
+ line-height: 1;
125
+ color: var(--accent-primary);
126
+ }
127
+
128
+ .deck-empty-card-text {
129
+ display: flex;
130
+ flex-direction: column;
131
+ gap: 0.35rem;
132
+ flex: 1;
133
+ min-width: 0;
134
+ }
135
+
136
+ .deck-empty-card-icon canvas {
137
+ image-rendering: pixelated;
138
+ }
139
+
140
+ .deck-empty-card-icon--terminal {
141
+ font-size: 2.4rem;
142
+ font-family: "JetBrains Mono", "IBM Plex Mono", monospace;
143
+ }
144
+
145
+ .deck-empty-actions--compact .deck-empty-card-icon--terminal {
146
+ font-size: 1.4rem;
147
+ }
148
+
149
+ /* ─── Deck sidebar content (rendered inside shared ActiveAgentsSidebar) ───── */
150
+
151
+ /* Override the parent grid to let deck content fill full height */
152
+ .active-agents-body:has(.deck-sidebar-content) {
153
+ align-content: stretch;
154
+ }
155
+
156
+ .deck-sidebar-content {
157
+ display: flex;
158
+ flex-direction: column;
159
+ min-height: 100%;
160
+ }
161
+
162
+ .deck-sidebar-content-top {
163
+ flex: 1;
164
+ }
165
+
166
+ .deck-sidebar-content-bottom {
167
+ border-top: 1px solid var(--sidebar-border);
168
+ background: var(--sidebar-panel);
169
+ }
170
+
171
+ .deck-sidebar-content .deck-empty-actions--compact {
172
+ gap: 0;
173
+ }
174
+
175
+ .deck-sidebar-content .deck-empty-actions--compact .deck-empty-card {
176
+ width: auto;
177
+ padding: 0.46rem 0.56rem;
178
+ gap: 0.5rem;
179
+ background: transparent;
180
+ border: none;
181
+ border-bottom: 1px solid var(--sidebar-border);
182
+ font-family: var(--font-main);
183
+ }
184
+
185
+ .deck-sidebar-content .deck-empty-actions--compact .deck-empty-card:hover {
186
+ background: color-mix(in srgb, var(--accent-primary) 8%, transparent);
187
+ }
188
+
189
+ .deck-sidebar-content .deck-empty-card-title {
190
+ font-family: var(--font-main);
191
+ font-size: 0.78rem;
192
+ font-weight: 700;
193
+ letter-spacing: 0.04em;
194
+ text-transform: uppercase;
195
+ }
196
+
197
+ .deck-sidebar-content .deck-empty-card-desc {
198
+ display: none;
199
+ }
200
+
201
+ .deck-sidebar-content .deck-empty-card-icon {
202
+ width: 20px;
203
+ display: flex;
204
+ align-items: center;
205
+ justify-content: center;
206
+ }
207
+
208
+ .deck-sidebar-content .deck-empty-card-icon--terminal {
209
+ font-size: 1rem;
210
+ }
211
+
212
+ .deck-sidebar-content .deck-empty-card-icon canvas {
213
+ image-rendering: pixelated;
214
+ width: 20px !important;
215
+ height: auto !important;
216
+ }
217
+
218
+ .deck-sidebar-content .deck-empty-agent-select-row {
219
+ display: flex;
220
+ }
221
+
222
+ .deck-sidebar-content .deck-empty-agent-trigger {
223
+ font-size: 0.68rem;
224
+ padding: 0.22rem 0.4rem;
225
+ }
226
+
227
+ .deck-sidebar-content .deck-empty-agent-launch {
228
+ font-size: 0.68rem;
229
+ padding: 0.22rem 0.5rem;
230
+ }
231
+
232
+ .deck-bottom-clear-link {
233
+ display: flex;
234
+ align-items: center;
235
+ gap: 0.35rem;
236
+ font-family: var(--font-main);
237
+ font-size: 0.76rem;
238
+ font-weight: 600;
239
+ letter-spacing: 0.04em;
240
+ color: #e05555;
241
+ background: transparent;
242
+ border: none;
243
+ border-bottom: 1px solid var(--sidebar-border);
244
+ padding: 0.46rem 0.56rem;
245
+ cursor: pointer;
246
+ width: 100%;
247
+ text-align: left;
248
+ transition: background 0.15s;
249
+ }
250
+
251
+ .deck-bottom-clear-link:hover {
252
+ background: rgba(224, 85, 85, 0.1);
253
+ }
254
+
255
+ .deck-bottom-clear-icon {
256
+ width: 20px;
257
+ height: 0.8rem;
258
+ flex-shrink: 0;
259
+ }
260
+
261
+ .deck-bottom-clear-confirm {
262
+ display: flex;
263
+ align-items: center;
264
+ gap: 0.3rem;
265
+ padding: 0.36rem 0.56rem;
266
+ }
267
+
268
+ .deck-bottom-clear-label {
269
+ font-family: var(--font-main);
270
+ font-size: 0.72rem;
271
+ color: #e05555;
272
+ flex: 1;
273
+ }
274
+
275
+ .deck-bottom-clear-btn {
276
+ font-family: var(--font-main);
277
+ font-size: 0.7rem;
278
+ font-weight: 600;
279
+ color: var(--text-secondary);
280
+ background: var(--sidebar-card);
281
+ border: 1px solid var(--sidebar-border);
282
+ padding: 0.2rem 0.5rem;
283
+ cursor: pointer;
284
+ }
285
+
286
+ .deck-bottom-clear-btn:hover {
287
+ color: var(--text-primary);
288
+ }
289
+
290
+ .deck-bottom-clear-btn--danger {
291
+ color: #e05555;
292
+ border-color: #e05555;
293
+ }
294
+
295
+ .deck-bottom-clear-btn--danger:hover {
296
+ background: rgba(224, 85, 85, 0.1);
297
+ }
298
+
299
+ /* ─── Add terminal form ──────────────────────────────────────────────────── */
300
+
301
+ .deck-add-form {
302
+ display: flex;
303
+ flex-direction: column;
304
+ gap: 1.25rem;
305
+ overflow-y: auto;
306
+ flex: 1;
307
+ }
308
+
309
+ .deck-add-form-header {
310
+ display: flex;
311
+ align-items: center;
312
+ gap: 0.75rem;
313
+ padding: 0.75rem 1.5rem;
314
+ border-bottom: 1px solid #2b2f36;
315
+ flex-shrink: 0;
316
+ }
317
+
318
+ .deck-add-form-body {
319
+ display: flex;
320
+ flex-direction: column;
321
+ justify-content: center;
322
+ gap: 1.25rem;
323
+ padding: 1.5rem;
324
+ flex: 1;
325
+ overflow-y: auto;
326
+ }
327
+
328
+ .deck-add-form-back {
329
+ font-family: var(--font-main);
330
+ font-size: 0.82rem;
331
+ color: var(--text-secondary);
332
+ background: none;
333
+ border: none;
334
+ cursor: pointer;
335
+ padding: 0;
336
+ }
337
+
338
+ .deck-add-form-back:hover {
339
+ color: var(--text-primary);
340
+ }
341
+
342
+ .deck-add-form-title {
343
+ font-family: "Silkscreen", cursive;
344
+ font-size: 1rem;
345
+ color: var(--accent-primary);
346
+ }
347
+
348
+ /* ─── Chip selectors (expression, hair) ──────────────────────────────────── */
349
+
350
+ .deck-add-form-row {
351
+ display: flex;
352
+ gap: 1.25rem;
353
+ }
354
+
355
+ .deck-add-form-row > .deck-add-form-label {
356
+ flex: 1;
357
+ min-width: 0;
358
+ }
359
+
360
+ .deck-add-form-chips {
361
+ display: flex;
362
+ flex-wrap: wrap;
363
+ gap: 0.35rem;
364
+ padding-top: 0.15rem;
365
+ }
366
+
367
+ .deck-add-form-chip {
368
+ font-family: var(--font-main);
369
+ font-size: 0.72rem;
370
+ color: var(--text-secondary);
371
+ background: #11161d;
372
+ border: 1px solid #2b2f36;
373
+ padding: 0.2rem 0.45rem;
374
+ cursor: pointer;
375
+ transition: border-color 0.15s, color 0.15s;
376
+ }
377
+
378
+ .deck-add-form-chip:hover {
379
+ border-color: var(--accent-primary);
380
+ color: var(--text-primary);
381
+ }
382
+
383
+ .deck-add-form-chip[data-selected="true"] {
384
+ border-color: var(--accent-primary);
385
+ color: var(--accent-primary);
386
+ background: rgba(250, 163, 44, 0.08);
387
+ }
388
+
389
+ .deck-add-form-preview {
390
+ display: flex;
391
+ justify-content: center;
392
+ padding: 0.5rem 0;
393
+ }
394
+
395
+ .deck-add-form-preview canvas {
396
+ image-rendering: pixelated;
397
+ }
398
+
399
+ .deck-add-form-label {
400
+ display: flex;
401
+ flex-direction: column;
402
+ gap: 0.35rem;
403
+ font-family: var(--font-main);
404
+ font-size: 0.78rem;
405
+ color: var(--text-secondary);
406
+ text-transform: uppercase;
407
+ letter-spacing: 0.04em;
408
+ }
409
+
410
+ .deck-add-form-input,
411
+ .deck-add-form-textarea {
412
+ font-family: var(--font-main);
413
+ font-size: 0.88rem;
414
+ color: var(--text-primary);
415
+ background: #11161d;
416
+ border: 1px solid #2b2f36;
417
+ padding: 0.5rem 0.6rem;
418
+ transition: border-color 0.15s;
419
+ resize: vertical;
420
+ }
421
+
422
+ .deck-add-form-input:focus,
423
+ .deck-add-form-textarea:focus {
424
+ outline: none;
425
+ border-color: var(--accent-primary);
426
+ }
427
+
428
+ .deck-add-form-colors {
429
+ display: flex;
430
+ flex-wrap: wrap;
431
+ gap: 0.5rem;
432
+ padding-top: 0.15rem;
433
+ }
434
+
435
+ .deck-add-form-color-swatch {
436
+ width: 28px;
437
+ height: 28px;
438
+ border: 2px solid transparent;
439
+ border-radius: 3px;
440
+ cursor: pointer;
441
+ transition: border-color 0.15s, transform 0.1s;
442
+ }
443
+
444
+ .deck-add-form-color-swatch--small {
445
+ width: 22px;
446
+ height: 22px;
447
+ }
448
+
449
+ .deck-add-form-color-swatch:hover {
450
+ transform: scale(1.15);
451
+ }
452
+
453
+ .deck-add-form-color-swatch[data-selected="true"] {
454
+ border-color: #fff;
455
+ transform: scale(1.15);
456
+ }
457
+
458
+ .deck-add-form-error {
459
+ font-family: var(--font-main);
460
+ font-size: 0.82rem;
461
+ color: #e05555;
462
+ }
463
+
464
+ .deck-add-form-skills {
465
+ display: flex;
466
+ flex-direction: column;
467
+ gap: 0.45rem;
468
+ padding-top: 0.2rem;
469
+ }
470
+
471
+ .deck-add-form-skill-option {
472
+ display: flex;
473
+ gap: 0.55rem;
474
+ align-items: flex-start;
475
+ padding: 0.45rem 0.55rem;
476
+ border: 1px solid #2b2f36;
477
+ background: #11161d;
478
+ text-transform: none;
479
+ letter-spacing: 0;
480
+ }
481
+
482
+ .deck-add-form-skill-option input {
483
+ margin-top: 0.15rem;
484
+ accent-color: var(--accent-primary);
485
+ }
486
+
487
+ .deck-add-form-skill-copy {
488
+ display: flex;
489
+ flex-direction: column;
490
+ gap: 0.2rem;
491
+ min-width: 0;
492
+ }
493
+
494
+ .deck-add-form-skill-name {
495
+ color: var(--text-primary);
496
+ font-family: "JetBrains Mono", "IBM Plex Mono", monospace;
497
+ font-size: 0.78rem;
498
+ }
499
+
500
+ .deck-add-form-skill-desc {
501
+ color: var(--text-secondary);
502
+ font-size: 0.78rem;
503
+ line-height: 1.4;
504
+ }
505
+
506
+ .deck-add-form-submit {
507
+ font-family: var(--font-main);
508
+ font-size: 0.88rem;
509
+ font-weight: 500;
510
+ color: #000;
511
+ background: var(--accent-primary);
512
+ border: none;
513
+ padding: 0.6rem 1rem;
514
+ cursor: pointer;
515
+ transition: opacity 0.15s;
516
+ }
517
+
518
+ .deck-add-form-submit:hover {
519
+ opacity: 0.85;
520
+ }
521
+
522
+ .deck-add-form-submit:disabled {
523
+ opacity: 0.5;
524
+ cursor: not-allowed;
525
+ }
526
+
527
+ /* ─── Agent provider select row ──────────────────────────────────────────── */
528
+
529
+ .deck-empty-agent-select-row {
530
+ display: flex;
531
+ align-items: center;
532
+ gap: 0;
533
+ width: 100%;
534
+ margin-top: 0.25rem;
535
+ }
536
+
537
+ /* ─── Custom agent picker dropdown ───────────────────────────────────────── */
538
+
539
+ .deck-empty-agent-picker {
540
+ position: relative;
541
+ flex: 1;
542
+ }
543
+
544
+ .deck-empty-agent-trigger {
545
+ display: flex;
546
+ align-items: center;
547
+ justify-content: space-between;
548
+ gap: 0.4rem;
549
+ width: 100%;
550
+ font-family: var(--font-main);
551
+ font-size: 0.84rem;
552
+ font-weight: 500;
553
+ color: var(--text-primary);
554
+ background: #11161d;
555
+ border: 1px solid #2b2f36;
556
+ padding: 0.45rem 0.6rem;
557
+ cursor: pointer;
558
+ text-align: left;
559
+ transition: border-color 0.15s;
560
+ }
561
+
562
+ .deck-empty-agent-trigger:hover {
563
+ border-color: var(--accent-primary);
564
+ }
565
+
566
+ .deck-empty-agent-trigger[aria-expanded="true"] {
567
+ border-color: var(--accent-primary);
568
+ }
569
+
570
+ .deck-empty-agent-chevron {
571
+ width: 0.55rem;
572
+ height: 0.4rem;
573
+ flex-shrink: 0;
574
+ opacity: 0.6;
575
+ }
576
+
577
+ .deck-empty-agent-menu {
578
+ position: absolute;
579
+ bottom: 100%;
580
+ left: 0;
581
+ right: 0;
582
+ margin-bottom: 2px;
583
+ z-index: 100;
584
+ border: 1px solid #2b2f36;
585
+ background: #0d1017;
586
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
587
+ display: flex;
588
+ flex-direction: column;
589
+ padding: 0.15rem 0;
590
+ }
591
+
592
+ .deck-empty-agent-menu-item {
593
+ display: flex;
594
+ align-items: center;
595
+ justify-content: space-between;
596
+ gap: 0.5rem;
597
+ border: none;
598
+ background: transparent;
599
+ color: var(--text-primary);
600
+ font-family: var(--font-main);
601
+ font-size: 0.82rem;
602
+ font-weight: 500;
603
+ padding: 0.4rem 0.6rem;
604
+ cursor: pointer;
605
+ text-align: left;
606
+ white-space: nowrap;
607
+ }
608
+
609
+ .deck-empty-agent-menu-item:hover {
610
+ background: rgba(250, 163, 44, 0.1);
611
+ }
612
+
613
+ .deck-empty-agent-menu-item[data-active="true"] {
614
+ color: var(--accent-primary);
615
+ }
616
+
617
+ .deck-empty-agent-menu-check {
618
+ font-size: 0.7rem;
619
+ opacity: 0.8;
620
+ }
621
+
622
+ .deck-empty-agent-launch {
623
+ font-family: var(--font-main);
624
+ font-size: 0.84rem;
625
+ font-weight: 500;
626
+ color: #000;
627
+ background: var(--accent-primary);
628
+ border: none;
629
+ border-left: 2px solid rgba(0, 0, 0, 0.8);
630
+ padding: 0.45rem 0.8rem;
631
+ cursor: pointer;
632
+ white-space: nowrap;
633
+ transition: opacity 0.15s;
634
+ }
635
+
636
+ .deck-empty-agent-launch:hover {
637
+ opacity: 0.85;
638
+ }
639
+
640
+ .deck-empty-card-title {
641
+ font-family: "Silkscreen", cursive;
642
+ font-size: 1.1rem;
643
+ color: var(--accent-primary);
644
+ line-height: 1.3;
645
+ }
646
+
647
+ .deck-empty-card-desc {
648
+ font-size: 0.92rem;
649
+ color: var(--text-secondary);
650
+ line-height: 1.4;
651
+ }
652
+
653
+ /* ─── Pods container ─────────────────────────────────────────────────────── */
654
+ /* Grid mode: multi-column grid filling the view. */
655
+ /* Detail mode: narrow sidebar column on the left (like empty-state adding). */
656
+
657
+ .deck-pods-container {
658
+ display: grid;
659
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
660
+ grid-auto-rows: minmax(180px, 1fr);
661
+ gap: 0.5rem;
662
+ flex: 1;
663
+ min-height: 0;
664
+ min-width: 0;
665
+ overflow-y: auto;
666
+ padding: 0.5rem;
667
+ transition: flex 400ms cubic-bezier(0.4, 0, 0.2, 1), padding 400ms cubic-bezier(0.4, 0, 0.2, 1),
668
+ gap 400ms cubic-bezier(0.4, 0, 0.2, 1);
669
+ }
670
+
671
+ [data-mode="detail"] .deck-pods-container {
672
+ grid-template-columns: 1fr;
673
+ grid-auto-rows: 1fr;
674
+ flex: 0 0 320px;
675
+ gap: 0;
676
+ padding: 0;
677
+ overflow-y: hidden;
678
+ border-right: 1px solid #2b2f36;
679
+ }
680
+
681
+ /* ─── Pod slot wrappers ──────────────────────────────────────────────────── */
682
+
683
+ .deck-pod-slot {
684
+ min-height: 0;
685
+ }
686
+
687
+ /* Idle state (grid mode): all pods visible */
688
+ .deck-pod-slot[data-pod-role="idle"] {
689
+ opacity: 1;
690
+ }
691
+
692
+ /* Focused pod: fills the sidebar column in detail mode */
693
+ .deck-pod-slot[data-pod-role="focused"] {
694
+ opacity: 1;
695
+ }
696
+
697
+ /* Non-focused pods: hidden in detail mode */
698
+ .deck-pod-slot[data-pod-role="other"] {
699
+ display: none;
700
+ }
701
+
702
+ /* ─── Pod card ────────────────────────────────────────────────────────────── */
703
+
704
+ .deck-pod {
705
+ display: flex;
706
+ flex-direction: column;
707
+ background: #0b0d10;
708
+ border: 1px solid #2b2f36;
709
+ min-height: 0;
710
+ min-width: 0;
711
+ height: 100%;
712
+ overflow: hidden;
713
+ transition: border-color 0.15s;
714
+ }
715
+
716
+ .deck-pod:hover {
717
+ filter: brightness(1.15);
718
+ }
719
+
720
+ /* ─── Focused pod modifier ───────────────────────────────────────────────── */
721
+
722
+ .deck-pod--focused {
723
+ cursor: default;
724
+ }
725
+
726
+ .deck-pod--focused:hover {
727
+ filter: none;
728
+ }
729
+
730
+ .deck-pod--focused .deck-pod-vault-file[aria-current="true"] {
731
+ color: var(--accent-primary);
732
+ background: rgba(250, 163, 44, 0.12);
733
+ border-color: var(--accent-primary);
734
+ }
735
+
736
+ /* ─── Pod header (buttons only) ───────────────────────────────────────────── */
737
+
738
+ .deck-pod-header {
739
+ display: flex;
740
+ align-items: stretch;
741
+ justify-content: flex-end;
742
+ gap: 0;
743
+ border-bottom: 1px solid #2b2f36;
744
+ flex-shrink: 0;
745
+ }
746
+
747
+ .deck-pod-btn {
748
+ font-family: var(--font-main);
749
+ font-size: 0.76rem;
750
+ font-weight: 500;
751
+ color: #000;
752
+ background: var(--accent-primary);
753
+ border: none;
754
+ border-left: 2px solid rgba(0, 0, 0, 0.8);
755
+ padding: 0.36rem 0.7rem;
756
+ cursor: pointer;
757
+ transition: opacity 0.15s;
758
+ flex: 1;
759
+ }
760
+
761
+ .deck-pod-btn:first-child {
762
+ border-left: none;
763
+ }
764
+
765
+ .deck-pod-btn:hover {
766
+ opacity: 0.85;
767
+ }
768
+
769
+ .deck-pod-btn--secondary {
770
+ color: var(--accent-primary);
771
+ background: transparent;
772
+ border-left: 2px solid rgba(0, 0, 0, 0.8);
773
+ }
774
+
775
+ .deck-pod-btn--secondary:hover {
776
+ background: rgba(250, 163, 44, 0.08);
777
+ }
778
+
779
+ .deck-pod-btn--delete {
780
+ color: #e05555;
781
+ background: var(--accent-primary);
782
+ border: none;
783
+ border-left: 2px solid rgba(0, 0, 0, 0.8);
784
+ flex: 0;
785
+ padding: 0.36rem 0.5rem;
786
+ }
787
+
788
+ .deck-pod-btn--delete:hover {
789
+ opacity: 0.85;
790
+ }
791
+
792
+ .deck-pod-btn-icon {
793
+ width: 0.9rem;
794
+ height: 0.9rem;
795
+ display: block;
796
+ }
797
+
798
+ .deck-pod-btn--danger {
799
+ color: #fff;
800
+ background: #c53030;
801
+ border-left: 2px solid rgba(0, 0, 0, 0.8);
802
+ }
803
+
804
+ .deck-pod-btn--danger:hover {
805
+ background: #e05555;
806
+ }
807
+
808
+ .deck-pod-btn--danger:disabled {
809
+ opacity: 0.6;
810
+ cursor: wait;
811
+ }
812
+
813
+ /* ─── Pod body ────────────────────────────────────────────────────────────── */
814
+
815
+ .deck-pod-body {
816
+ display: flex;
817
+ flex-direction: column;
818
+ gap: 0;
819
+ flex: 1;
820
+ min-height: 0;
821
+ min-width: 0;
822
+ padding: 0.3rem;
823
+ overflow: auto;
824
+ position: relative;
825
+ }
826
+
827
+ /* ─── Identity row — octopus top-left, name + description right ───────────── */
828
+
829
+ .deck-pod-identity {
830
+ display: flex;
831
+ align-items: flex-start;
832
+ gap: 0.6rem;
833
+ }
834
+
835
+ .deck-pod-octopus-col {
836
+ display: flex;
837
+ flex-direction: column;
838
+ align-items: center;
839
+ gap: 0.3rem;
840
+ flex-shrink: 0;
841
+ }
842
+
843
+ .deck-pod-octopus {
844
+ flex-shrink: 0;
845
+ }
846
+
847
+ .deck-pod-octopus canvas {
848
+ image-rendering: pixelated;
849
+ }
850
+
851
+ .deck-pod-status {
852
+ position: absolute;
853
+ top: 0.4rem;
854
+ right: 0.4rem;
855
+ font-family: var(--font-main);
856
+ font-size: 0.72rem;
857
+ text-transform: uppercase;
858
+ letter-spacing: 0.04em;
859
+ padding: 0.1rem 0.36rem;
860
+ border-radius: 2px;
861
+ z-index: 1;
862
+ }
863
+
864
+ .deck-pod-status--idle {
865
+ color: #6a7080;
866
+ background: #1a1d24;
867
+ }
868
+
869
+ .deck-pod-status--active {
870
+ color: #4ec9b0;
871
+ background: rgba(78, 201, 176, 0.1);
872
+ }
873
+
874
+ .deck-pod-status--blocked {
875
+ color: #e05555;
876
+ background: rgba(224, 85, 85, 0.1);
877
+ }
878
+
879
+ .deck-pod-status--needs-review {
880
+ color: #d4a017;
881
+ background: rgba(212, 160, 23, 0.1);
882
+ }
883
+
884
+ .deck-pod-identity-text {
885
+ display: flex;
886
+ flex-direction: column;
887
+ gap: 0.2rem;
888
+ min-width: 0;
889
+ padding-top: 0.2rem;
890
+ }
891
+
892
+ .deck-pod-name {
893
+ font-family: "Silkscreen", cursive;
894
+ font-size: 1rem;
895
+ font-weight: 400;
896
+ color: var(--text-primary);
897
+ line-height: 1.2;
898
+ }
899
+
900
+ .deck-pod-description {
901
+ font-family: var(--font-main);
902
+ font-size: 0.82rem;
903
+ color: var(--text-secondary);
904
+ line-height: 1.35;
905
+ display: -webkit-box;
906
+ -webkit-line-clamp: 2;
907
+ -webkit-box-orient: vertical;
908
+ overflow: hidden;
909
+ }
910
+
911
+ /* ─── Details section (progress, todos, vault) ────────────────────────────── */
912
+
913
+ .deck-pod-details {
914
+ display: flex;
915
+ flex-direction: column;
916
+ gap: 0.5rem;
917
+ flex: 1;
918
+ min-height: 0;
919
+ min-width: 0;
920
+ overflow-x: hidden;
921
+ overflow-y: auto;
922
+ }
923
+
924
+ .deck-pod-skills-editor {
925
+ display: flex;
926
+ flex-direction: column;
927
+ gap: 0.5rem;
928
+ padding: 0.45rem;
929
+ border: 1px solid #1f252d;
930
+ background: #0d1017;
931
+ }
932
+
933
+ .deck-pod-skills-options {
934
+ display: flex;
935
+ flex-direction: column;
936
+ gap: 0.35rem;
937
+ }
938
+
939
+ .deck-pod-skill-option {
940
+ display: flex;
941
+ gap: 0.45rem;
942
+ align-items: flex-start;
943
+ font-family: var(--font-main);
944
+ font-size: 0.74rem;
945
+ color: var(--text-secondary);
946
+ }
947
+
948
+ .deck-pod-skill-option input {
949
+ margin-top: 0.15rem;
950
+ accent-color: var(--accent-primary);
951
+ }
952
+
953
+ .deck-pod-skill-copy {
954
+ display: flex;
955
+ flex-direction: column;
956
+ gap: 0.15rem;
957
+ min-width: 0;
958
+ }
959
+
960
+ .deck-pod-skill-name {
961
+ color: var(--text-primary);
962
+ font-family: "JetBrains Mono", "IBM Plex Mono", monospace;
963
+ font-size: 0.72rem;
964
+ }
965
+
966
+ .deck-pod-skill-desc,
967
+ .deck-pod-skills-empty {
968
+ font-family: var(--font-main);
969
+ font-size: 0.72rem;
970
+ color: var(--text-secondary);
971
+ line-height: 1.35;
972
+ }
973
+
974
+ .deck-pod-skills-actions {
975
+ display: flex;
976
+ gap: 0;
977
+ border-top: 1px solid #1a1d24;
978
+ padding-top: 0.35rem;
979
+ }
980
+
981
+ .deck-pod-skills-actions .deck-pod-btn {
982
+ padding-top: 0.3rem;
983
+ padding-bottom: 0.3rem;
984
+ }
985
+
986
+ /* ─── Progress bar ────────────────────────────────────────────────────────── */
987
+
988
+ .deck-pod-progress {
989
+ display: flex;
990
+ align-items: center;
991
+ gap: 0.4rem;
992
+ }
993
+
994
+ .deck-pod-progress-bar {
995
+ flex: 1;
996
+ height: 5px;
997
+ background: #1a1d24;
998
+ border-radius: 2px;
999
+ overflow: hidden;
1000
+ }
1001
+
1002
+ .deck-pod-progress-fill {
1003
+ height: 100%;
1004
+ border-radius: 2px;
1005
+ transition: width 0.3s;
1006
+ }
1007
+
1008
+ .deck-pod-progress-label {
1009
+ font-family: "JetBrains Mono", "IBM Plex Mono", monospace;
1010
+ font-size: 0.72rem;
1011
+ flex-shrink: 0;
1012
+ white-space: nowrap;
1013
+ padding: 0.1rem 0.3rem;
1014
+ border-radius: 2px;
1015
+ }
1016
+
1017
+ /* ─── Todo list ───────────────────────────────────────────────────────────── */
1018
+
1019
+ .deck-pod-todos {
1020
+ list-style: none;
1021
+ margin: 0;
1022
+ padding: 0;
1023
+ display: flex;
1024
+ flex-direction: column;
1025
+ gap: 0.2rem;
1026
+ flex: 1;
1027
+ min-width: 0;
1028
+ overflow-y: auto;
1029
+ overflow-x: hidden;
1030
+ }
1031
+
1032
+ .deck-pod-todo-item {
1033
+ font-family: "JetBrains Mono", "IBM Plex Mono", monospace;
1034
+ font-size: 0.76rem;
1035
+ color: var(--text-secondary);
1036
+ display: flex;
1037
+ align-items: baseline;
1038
+ gap: 0.3rem;
1039
+ min-width: 0;
1040
+ }
1041
+
1042
+ .deck-pod-todo-text {
1043
+ min-width: 0;
1044
+ overflow-wrap: break-word;
1045
+ word-break: break-word;
1046
+ }
1047
+
1048
+ .deck-pod-todo-item--done {
1049
+ color: #3e4450;
1050
+ text-decoration: line-through;
1051
+ }
1052
+
1053
+ .deck-pod-todo-checkbox {
1054
+ flex-shrink: 0;
1055
+ accent-color: var(--accent-primary);
1056
+ pointer-events: none;
1057
+ }
1058
+
1059
+ /* ─── Vault file listing ──────────────────────────────────────────────────── */
1060
+
1061
+ .deck-pod-vault {
1062
+ display: flex;
1063
+ align-items: baseline;
1064
+ gap: 0.36rem;
1065
+ padding-top: 0.24rem;
1066
+ border-top: 1px solid #1a1d24;
1067
+ flex-shrink: 0;
1068
+ }
1069
+
1070
+ .deck-pod-vault-label {
1071
+ font-family: var(--font-main);
1072
+ font-size: 0.7rem;
1073
+ color: #3e4450;
1074
+ text-transform: uppercase;
1075
+ letter-spacing: 0.06em;
1076
+ flex-shrink: 0;
1077
+ }
1078
+
1079
+ .deck-pod-vault-files {
1080
+ display: flex;
1081
+ flex-wrap: wrap;
1082
+ gap: 0.2rem;
1083
+ }
1084
+
1085
+ .deck-pod-vault-file {
1086
+ font-family: "JetBrains Mono", "IBM Plex Mono", monospace;
1087
+ font-size: 0.7rem;
1088
+ color: var(--text-secondary);
1089
+ background: #11161d;
1090
+ padding: 0.08rem 0.3rem;
1091
+ border-radius: 2px;
1092
+ border: 1px solid transparent;
1093
+ cursor: pointer;
1094
+ }
1095
+
1096
+ .deck-pod-vault-file:hover {
1097
+ color: var(--text-primary);
1098
+ background: #1a1d24;
1099
+ }
1100
+
1101
+ /* ─── Detail panel (right side) ──────────────────────────────────────────── */
1102
+ /* Always in the DOM. In grid mode it has flex:0 + opacity:0. */
1103
+ /* In detail mode it expands to fill remaining space. */
1104
+
1105
+ .deck-detail-main {
1106
+ flex: 0;
1107
+ min-width: 0;
1108
+ display: flex;
1109
+ flex-direction: column;
1110
+ overflow: hidden;
1111
+ opacity: 0;
1112
+ border-left: 1px solid transparent;
1113
+ transition: flex 400ms cubic-bezier(0.4, 0, 0.2, 1), opacity 350ms cubic-bezier(0.4, 0, 0.2, 1)
1114
+ 100ms, border-color 400ms cubic-bezier(0.4, 0, 0.2, 1);
1115
+ }
1116
+
1117
+ [data-mode="detail"] .deck-detail-main {
1118
+ flex: 1;
1119
+ opacity: 1;
1120
+ border-left-color: #2b2f36;
1121
+ animation: deck-form-slide-in 350ms cubic-bezier(0.4, 0, 0.2, 1);
1122
+ }
1123
+
1124
+ [data-mode="detail"][data-has-pods="false"] .deck-pods-container {
1125
+ display: none;
1126
+ }
1127
+
1128
+ [data-mode="detail"][data-has-pods="false"] .deck-detail-main {
1129
+ border-left-color: transparent;
1130
+ }
1131
+
1132
+ .deck-detail-main-header {
1133
+ display: flex;
1134
+ align-items: center;
1135
+ gap: 0.5rem;
1136
+ padding: 0.5rem 0.75rem;
1137
+ border-bottom: 1px solid #2b2f36;
1138
+ background: #0d1017;
1139
+ flex-shrink: 0;
1140
+ }
1141
+
1142
+ .deck-detail-main-path {
1143
+ font-family: "JetBrains Mono", "IBM Plex Mono", monospace;
1144
+ font-size: 0.82rem;
1145
+ color: var(--text-secondary);
1146
+ }
1147
+
1148
+ .deck-detail-main-path strong {
1149
+ color: var(--text-primary);
1150
+ font-weight: 500;
1151
+ }
1152
+
1153
+ .deck-detail-main-content {
1154
+ flex: 1;
1155
+ overflow-y: auto;
1156
+ padding: 1rem 1.25rem;
1157
+ animation: deck-content-fade 200ms ease-out;
1158
+ }
1159
+
1160
+ @keyframes deck-content-fade {
1161
+ 0% {
1162
+ opacity: 0;
1163
+ }
1164
+ 100% {
1165
+ opacity: 1;
1166
+ }
1167
+ }
1168
+
1169
+ /* ─── Vault browser (ASCII tree) ─────────────────────────────────────────── */
1170
+
1171
+ .deck-vault-tree {
1172
+ font-family: "JetBrains Mono", "IBM Plex Mono", monospace;
1173
+ font-size: 0.88rem;
1174
+ line-height: 1.8;
1175
+ margin: 0;
1176
+ color: var(--text-secondary);
1177
+ display: flex;
1178
+ flex-direction: column;
1179
+ }
1180
+
1181
+ .deck-vault-tree-dir {
1182
+ color: var(--accent-primary);
1183
+ font-weight: 600;
1184
+ }
1185
+
1186
+ .deck-vault-tree-row {
1187
+ display: flex;
1188
+ align-items: baseline;
1189
+ }
1190
+
1191
+ .deck-vault-tree-branch {
1192
+ color: #3e4450;
1193
+ flex-shrink: 0;
1194
+ user-select: none;
1195
+ }
1196
+
1197
+ .deck-vault-tree-file {
1198
+ background: none;
1199
+ border: none;
1200
+ color: var(--text-primary);
1201
+ font-family: inherit;
1202
+ font-size: inherit;
1203
+ padding: 0;
1204
+ cursor: pointer;
1205
+ transition: color 0.15s;
1206
+ }
1207
+
1208
+ .deck-vault-tree-file:hover {
1209
+ color: var(--accent-primary);
1210
+ }
1211
+
1212
+ /* ─── Terminal inside detail panel ────────────────────────────────────────── */
1213
+
1214
+ .deck-detail-terminal {
1215
+ flex: 1;
1216
+ display: flex;
1217
+ flex-direction: column;
1218
+ overflow: hidden;
1219
+ animation: deck-content-fade 200ms ease-out;
1220
+ }
1221
+
1222
+ .deck-detail-terminal .terminal-pane {
1223
+ flex: 1;
1224
+ display: flex;
1225
+ flex-direction: column;
1226
+ }
1227
+
1228
+ .deck-detail-terminal .terminal-mount {
1229
+ flex: 1;
1230
+ }
1231
+
1232
+ /* ─── Markdown rendering inside detail panel ─────────────────────────────── */
1233
+
1234
+ .deck-detail-markdown {
1235
+ font-family: var(--font-main);
1236
+ font-size: 0.88rem;
1237
+ color: var(--text-primary);
1238
+ line-height: 1.6;
1239
+ }
1240
+
1241
+ .deck-detail-markdown h1 {
1242
+ font-family: "Silkscreen", cursive;
1243
+ font-size: 1.2rem;
1244
+ font-weight: 400;
1245
+ color: var(--accent-primary);
1246
+ margin: 0 0 0.75rem 0;
1247
+ padding-bottom: 0.4rem;
1248
+ border-bottom: 1px solid #2b2f36;
1249
+ }
1250
+
1251
+ .deck-detail-markdown h2 {
1252
+ font-family: var(--font-main);
1253
+ font-size: 1rem;
1254
+ font-weight: 600;
1255
+ color: var(--text-primary);
1256
+ margin: 1.25rem 0 0.5rem 0;
1257
+ }
1258
+
1259
+ .deck-detail-markdown h3 {
1260
+ font-family: var(--font-main);
1261
+ font-size: 0.9rem;
1262
+ font-weight: 600;
1263
+ color: var(--text-secondary);
1264
+ margin: 1rem 0 0.4rem 0;
1265
+ }
1266
+
1267
+ .deck-detail-markdown p {
1268
+ margin: 0.4rem 0;
1269
+ }
1270
+
1271
+ .deck-detail-markdown ul,
1272
+ .deck-detail-markdown ol {
1273
+ padding-left: 1.25rem;
1274
+ margin: 0.4rem 0;
1275
+ }
1276
+
1277
+ .deck-detail-markdown li {
1278
+ margin: 0.2rem 0;
1279
+ color: var(--text-secondary);
1280
+ }
1281
+
1282
+ .deck-detail-markdown code {
1283
+ font-family: "JetBrains Mono", "IBM Plex Mono", monospace;
1284
+ font-size: 0.82rem;
1285
+ background: #11161d;
1286
+ padding: 0.1rem 0.3rem;
1287
+ border-radius: 2px;
1288
+ color: #dcdcaa;
1289
+ }
1290
+
1291
+ .deck-detail-markdown pre {
1292
+ background: #0b0d10;
1293
+ border: 1px solid #2b2f36;
1294
+ border-radius: 3px;
1295
+ padding: 0.6rem 0.75rem;
1296
+ overflow-x: auto;
1297
+ margin: 0.5rem 0;
1298
+ }
1299
+
1300
+ .deck-detail-markdown pre code {
1301
+ background: none;
1302
+ padding: 0;
1303
+ }
1304
+
1305
+ .deck-detail-markdown table {
1306
+ width: 100%;
1307
+ border-collapse: collapse;
1308
+ margin: 0.5rem 0;
1309
+ font-size: 0.82rem;
1310
+ }
1311
+
1312
+ .deck-detail-markdown th,
1313
+ .deck-detail-markdown td {
1314
+ border: 1px solid #2b2f36;
1315
+ padding: 0.3rem 0.5rem;
1316
+ text-align: left;
1317
+ }
1318
+
1319
+ .deck-detail-markdown th {
1320
+ background: #0d1017;
1321
+ color: var(--text-secondary);
1322
+ font-weight: 600;
1323
+ }
1324
+
1325
+ .deck-detail-markdown td {
1326
+ color: var(--text-secondary);
1327
+ }
1328
+
1329
+ .deck-detail-markdown strong {
1330
+ color: var(--text-primary);
1331
+ }
1332
+
1333
+ .deck-detail-markdown input[type="checkbox"] {
1334
+ margin-right: 0.4rem;
1335
+ }
1336
+
1337
+ .workspace-setup-card {
1338
+ display: flex;
1339
+ flex-direction: column;
1340
+ gap: 1rem;
1341
+ width: min(720px, 100%);
1342
+ padding: 1.2rem;
1343
+ border: 1px solid rgba(238, 194, 83, 0.28);
1344
+ border-radius: 14px;
1345
+ background: linear-gradient(180deg, rgba(17, 22, 29, 0.98), rgba(11, 14, 19, 0.98)),
1346
+ radial-gradient(circle at top left, rgba(212, 160, 23, 0.16), transparent 55%);
1347
+ box-shadow: 0 20px 44px rgba(0, 0, 0, 0.28);
1348
+ }
1349
+
1350
+ .workspace-setup-card--compact {
1351
+ width: 100%;
1352
+ padding: 1rem;
1353
+ }
1354
+
1355
+ .workspace-setup-card-header {
1356
+ display: flex;
1357
+ flex-direction: column;
1358
+ gap: 0.8rem;
1359
+ align-items: flex-start;
1360
+ }
1361
+
1362
+ .workspace-setup-card-glyph {
1363
+ flex: 0 0 auto;
1364
+ }
1365
+
1366
+ .workspace-setup-card-copy {
1367
+ display: flex;
1368
+ flex-direction: column;
1369
+ gap: 0.3rem;
1370
+ }
1371
+
1372
+ .workspace-setup-card-title {
1373
+ margin: 0;
1374
+ font-family: var(--font-main);
1375
+ font-size: 1.02rem;
1376
+ color: var(--text-primary);
1377
+ }
1378
+
1379
+ .workspace-setup-card-desc {
1380
+ margin: 0;
1381
+ color: var(--text-secondary);
1382
+ font-size: 0.86rem;
1383
+ line-height: 1.45;
1384
+ }
1385
+
1386
+ .workspace-setup-card-error,
1387
+ .workspace-setup-step-guidance,
1388
+ .workspace-setup-step-status,
1389
+ .workspace-setup-step-desc,
1390
+ .workspace-setup-card-loading,
1391
+ .workspace-setup-card-actions-desc {
1392
+ margin: 0;
1393
+ color: var(--text-secondary);
1394
+ font-size: 0.82rem;
1395
+ line-height: 1.45;
1396
+ }
1397
+
1398
+ .workspace-setup-card-error {
1399
+ color: #ff9b8e;
1400
+ }
1401
+
1402
+ .workspace-setup-step-list {
1403
+ display: flex;
1404
+ flex-direction: column;
1405
+ gap: 0.7rem;
1406
+ }
1407
+
1408
+ .workspace-setup-step {
1409
+ display: flex;
1410
+ gap: 0.8rem;
1411
+ align-items: flex-start;
1412
+ justify-content: space-between;
1413
+ padding: 0.9rem;
1414
+ border: 1px solid rgba(255, 255, 255, 0.08);
1415
+ border-radius: 10px;
1416
+ background: rgba(8, 10, 14, 0.82);
1417
+ }
1418
+
1419
+ .workspace-setup-step[data-complete="true"] {
1420
+ border-color: rgba(55, 195, 115, 0.32);
1421
+ background: rgba(9, 18, 13, 0.82);
1422
+ }
1423
+
1424
+ .workspace-setup-step-main {
1425
+ display: flex;
1426
+ flex-direction: column;
1427
+ gap: 0.28rem;
1428
+ min-width: 0;
1429
+ }
1430
+
1431
+ .workspace-setup-step-title-row {
1432
+ display: flex;
1433
+ gap: 0.75rem;
1434
+ align-items: center;
1435
+ justify-content: space-between;
1436
+ flex-wrap: wrap;
1437
+ }
1438
+
1439
+ .workspace-setup-step-title,
1440
+ .workspace-setup-card-actions-title {
1441
+ color: var(--text-primary);
1442
+ font-size: 0.9rem;
1443
+ font-weight: 600;
1444
+ }
1445
+
1446
+ .workspace-setup-step-state {
1447
+ font-size: 0.7rem;
1448
+ letter-spacing: 0.08em;
1449
+ text-transform: uppercase;
1450
+ color: rgba(255, 255, 255, 0.72);
1451
+ }
1452
+
1453
+ .workspace-setup-step-command {
1454
+ display: inline-flex;
1455
+ width: fit-content;
1456
+ padding: 0.2rem 0.45rem;
1457
+ background: rgba(0, 0, 0, 0.38);
1458
+ border: 1px solid rgba(255, 255, 255, 0.08);
1459
+ border-radius: 999px;
1460
+ color: #f7d774;
1461
+ font-family: "JetBrains Mono", "IBM Plex Mono", monospace;
1462
+ font-size: 0.74rem;
1463
+ }
1464
+
1465
+ .workspace-setup-step-action,
1466
+ .workspace-setup-card-primary-action,
1467
+ .workspace-setup-card-secondary-action {
1468
+ flex: 0 0 auto;
1469
+ min-height: 2.2rem;
1470
+ padding: 0.55rem 0.8rem;
1471
+ border: 1px solid rgba(255, 255, 255, 0.12);
1472
+ border-radius: 999px;
1473
+ background: rgba(255, 255, 255, 0.04);
1474
+ color: var(--text-primary);
1475
+ font-family: var(--font-main);
1476
+ font-size: 0.78rem;
1477
+ cursor: pointer;
1478
+ }
1479
+
1480
+ .workspace-setup-step-action:hover,
1481
+ .workspace-setup-card-primary-action:hover,
1482
+ .workspace-setup-card-secondary-action:hover {
1483
+ border-color: rgba(238, 194, 83, 0.4);
1484
+ }
1485
+
1486
+ .workspace-setup-step-action:disabled,
1487
+ .workspace-setup-card-primary-action:disabled {
1488
+ opacity: 0.6;
1489
+ cursor: default;
1490
+ }
1491
+
1492
+ .workspace-setup-card-actions {
1493
+ display: flex;
1494
+ flex-direction: column;
1495
+ gap: 0.7rem;
1496
+ padding-top: 0.2rem;
1497
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
1498
+ }
1499
+
1500
+ .workspace-setup-card-actions-copy {
1501
+ display: flex;
1502
+ flex-direction: column;
1503
+ gap: 0.2rem;
1504
+ }
1505
+
1506
+ .workspace-setup-card-actions-row {
1507
+ display: flex;
1508
+ gap: 0.6rem;
1509
+ align-items: center;
1510
+ flex-wrap: wrap;
1511
+ }
1512
+
1513
+ .workspace-setup-card--compact .workspace-setup-card-header {
1514
+ flex-direction: row;
1515
+ align-items: center;
1516
+ }
1517
+ @media (max-width: 720px) {
1518
+ .workspace-setup-step,
1519
+ .workspace-setup-card-header,
1520
+ .workspace-setup-card-actions-row {
1521
+ flex-direction: column;
1522
+ align-items: stretch;
1523
+ }
1524
+ }