clay-server 5.2.0-beta.1 → 5.2.0-beta.11

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 (608) hide show
  1. package/README.md +0 -4
  2. package/lib/account-auth-socket.js +1 -0
  3. package/lib/builtin-mates.js +19 -16
  4. package/lib/bundled-skills/clay-agent-browser/SKILL.md +6 -2
  5. package/lib/canonical-clay-record-authority.js +15 -0
  6. package/lib/canonical-clay-scheduling-authority.js +19 -0
  7. package/lib/claude-hook-installer.js +1 -239
  8. package/lib/claude-jsonl-watcher.js +1 -204
  9. package/lib/clay-control-presentation-binding.js +96 -0
  10. package/lib/clay-control-presentation.js +128 -0
  11. package/lib/clay-control-target-projection.js +26 -0
  12. package/lib/clay-mate-chat-receipts.js +26 -0
  13. package/lib/clay-mate-chat.js +88 -0
  14. package/lib/clay-mate-knowledge-input.js +26 -0
  15. package/lib/clay-mate-knowledge.js +95 -0
  16. package/lib/clay-mate-lifecycle.js +95 -0
  17. package/lib/clay-product-control-input.js +33 -0
  18. package/lib/clay-product-control-tools.js +52 -0
  19. package/lib/clay-product-control.js +250 -0
  20. package/lib/clay-project-lifecycle.js +154 -0
  21. package/lib/clay-project-record-input.js +44 -0
  22. package/lib/clay-project-records.js +84 -0
  23. package/lib/clay-scheduling-input.js +21 -0
  24. package/lib/clay-scheduling-receipts.js +26 -0
  25. package/lib/clay-scheduling.js +119 -0
  26. package/lib/clay-screen-controls.js +104 -0
  27. package/lib/clay-skill-install.js +1 -33
  28. package/lib/clay-vendor-usage.js +44 -0
  29. package/lib/clay-workspace-controls.js +84 -0
  30. package/lib/clay-workspace-input.js +17 -0
  31. package/lib/clay-workspace-receipts.js +26 -0
  32. package/lib/cli-sessions.js +1 -300
  33. package/lib/codex-defaults.js +1 -28
  34. package/lib/context-usage.js +3 -2
  35. package/lib/contextual-screen-snapshot.js +38 -0
  36. package/lib/daemon-project-access.js +11 -0
  37. package/lib/daemon-project-lifecycle-callbacks.js +15 -0
  38. package/lib/daemon-project-lifecycle.js +262 -0
  39. package/lib/daemon-projects.js +1 -1
  40. package/lib/daemon.js +78 -276
  41. package/lib/default-ai-runtime.js +4 -8
  42. package/lib/dm-digest-cursor.js +120 -0
  43. package/lib/email-mcp-server.js +1 -1
  44. package/lib/github-star-count.js +147 -0
  45. package/lib/issues-service.js +29 -15
  46. package/lib/kiro-defaults.js +1 -22
  47. package/lib/knowledge-db-import-validation.js +46 -0
  48. package/lib/knowledge-db-import.js +99 -0
  49. package/lib/knowledge-db-service.js +24 -33
  50. package/lib/knowledge-db-storage-nedb-maintenance.js +99 -0
  51. package/lib/knowledge-db-storage-nedb.js +66 -0
  52. package/lib/knowledge-db-storage.js +72 -0
  53. package/lib/knowledge-db-validation.js +0 -0
  54. package/lib/knowledge-document-index.js +2 -1
  55. package/lib/knowledge-file-store.js +7 -1
  56. package/lib/knowledge-product-operations.js +46 -0
  57. package/lib/mate-avatar-catalog.js +12 -0
  58. package/lib/mate-avatar-migration.js +41 -0
  59. package/lib/mate-context-service.js +138 -0
  60. package/lib/mate-context-tools.js +21 -0
  61. package/lib/mate-creation-mcp-server.js +2 -0
  62. package/lib/mate-knowledge-canonical-access.js +10 -0
  63. package/lib/mate-knowledge-mate-bound.js +53 -0
  64. package/lib/mate-knowledge-mcp-server.js +55 -8
  65. package/lib/mate-knowledge-service.js +16 -34
  66. package/lib/mate-knowledge-text-tools.js +106 -0
  67. package/lib/mate-lifecycle-service.js +94 -0
  68. package/lib/mate-message-delivery.js +43 -0
  69. package/lib/mate-ready-creation.js +9 -1
  70. package/lib/mate-schedule-input.js +29 -0
  71. package/lib/mate-schedule-lifecycle.js +151 -0
  72. package/lib/mate-scheduling.js +103 -0
  73. package/lib/mates.js +18 -6
  74. package/lib/mcp-agent-tools.js +117 -0
  75. package/lib/mcp-connection-store.js +119 -15
  76. package/lib/mcp-import-credentials.js +31 -0
  77. package/lib/mcp-local-transport.js +13 -0
  78. package/lib/mcp-oauth.js +8 -6
  79. package/lib/mcp-proxy.js +2 -32
  80. package/lib/mcp-query-bridge.js +30 -0
  81. package/lib/mcp-remote-connections.js +74 -20
  82. package/lib/mcp-source-adapters.js +1 -0
  83. package/lib/mcp-source-context.js +1 -0
  84. package/lib/mcp-source-discovery.js +1 -0
  85. package/lib/mcp-source-plugins.js +1 -0
  86. package/lib/mcp-source-restrictions.js +1 -0
  87. package/lib/mcp-tool-policy.js +9 -0
  88. package/lib/notes-checklist.js +92 -0
  89. package/lib/notes.js +51 -4
  90. package/lib/os-user-diagnostics.js +2 -4
  91. package/lib/os-users.js +24 -70
  92. package/lib/pane-pending-interactions.js +20 -0
  93. package/lib/pane-session-activation.js +114 -0
  94. package/lib/pane-session-transport.js +26 -0
  95. package/lib/project-admin-overview.js +51 -0
  96. package/lib/project-ask-user.js +8 -4
  97. package/lib/project-connection.js +14 -10
  98. package/lib/project-control-git-view.js +12 -0
  99. package/lib/project-debate.js +1 -0
  100. package/lib/project-delegated-follow-up.js +2 -1
  101. package/lib/project-directory-claim.js +65 -0
  102. package/lib/project-file-operations.js +61 -0
  103. package/lib/project-filesystem.js +15 -85
  104. package/lib/project-full-access.js +23 -2
  105. package/lib/project-http.js +7 -4
  106. package/lib/project-knowledge.js +32 -18
  107. package/lib/project-lifecycle-operations.js +98 -0
  108. package/lib/project-lifecycle-process-witness.js +32 -0
  109. package/lib/project-lifecycle-runtime.js +50 -0
  110. package/lib/project-linux-access.js +22 -0
  111. package/lib/project-logs-canonical-clay.js +27 -0
  112. package/lib/project-logs-clay-query.js +16 -0
  113. package/lib/project-logs-schema.js +4 -2
  114. package/lib/project-logs-service.js +8 -7
  115. package/lib/project-logs.js +1 -0
  116. package/lib/project-loop.js +1 -0
  117. package/lib/project-mate-chat-control.js +55 -0
  118. package/lib/project-mate-creation-proposal.js +18 -3
  119. package/lib/project-mate-interaction.js +40 -62
  120. package/lib/project-mcp.js +54 -16
  121. package/lib/project-models.js +14 -31
  122. package/lib/project-notifications.js +76 -17
  123. package/lib/project-ownership.js +77 -0
  124. package/lib/project-pair-result-delivery.js +14 -3
  125. package/lib/project-pair-usage.js +12 -13
  126. package/lib/project-pending-message-queue.js +4 -1
  127. package/lib/project-product-control.js +89 -0
  128. package/lib/project-product-session-queue.js +46 -0
  129. package/lib/project-push-access.js +28 -0
  130. package/lib/project-scheduled-message-queue.js +30 -0
  131. package/lib/project-scheduled-messages.js +67 -68
  132. package/lib/project-scheduled-task-control.js +83 -0
  133. package/lib/project-scheduled-tasks.js +13 -2
  134. package/lib/project-scheduling-access.js +10 -0
  135. package/lib/project-session-actions.js +65 -0
  136. package/lib/project-session-delete.js +8 -1
  137. package/lib/project-session-document.js +27 -7
  138. package/lib/project-session-github.js +63 -19
  139. package/lib/project-session-history-actions.js +167 -0
  140. package/lib/project-session-linear.js +14 -6
  141. package/lib/project-session-notes.js +40 -11
  142. package/lib/project-session-pair.js +1 -1
  143. package/lib/project-session-runtime-actions.js +64 -0
  144. package/lib/project-session-spawn.js +2 -3
  145. package/lib/project-session-vendor.js +55 -0
  146. package/lib/project-sessions.js +160 -290
  147. package/lib/project-shared-browser.js +78 -17
  148. package/lib/project-start-protocol.js +29 -0
  149. package/lib/project-studio-presentation.js +58 -0
  150. package/lib/project-user-message.js +67 -1
  151. package/lib/project-vendor-login.js +8 -36
  152. package/lib/project-workspace-operations.js +126 -0
  153. package/lib/project-workspace-query.js +19 -2
  154. package/lib/project.js +181 -45
  155. package/lib/public/app.js +71 -17
  156. package/lib/public/appearance-bootstrap.js +16 -0
  157. package/lib/public/css/clay-tool-activity.css +51 -0
  158. package/lib/public/css/clay-workspace.css +29 -0
  159. package/lib/public/css/command-palette.css +12 -33
  160. package/lib/public/css/contextual-clay.css +240 -0
  161. package/lib/public/css/filebrowser.css +1 -1
  162. package/lib/public/css/home-debate-planning.css +2 -0
  163. package/lib/public/css/home-mate-creation.css +5 -0
  164. package/lib/public/css/input.css +6 -0
  165. package/lib/public/css/mate-avatar-gallery.css +12 -0
  166. package/lib/public/css/mate-conversation.css +10 -5
  167. package/lib/public/css/mate-loading-scene.css +21 -0
  168. package/lib/public/css/messages.css +6 -2
  169. package/lib/public/css/overlays.css +68 -258
  170. package/lib/public/css/project-admin-overview.css +13 -0
  171. package/lib/public/css/project-mate-creation.css +5 -6
  172. package/lib/public/css/project-start.css +108 -0
  173. package/lib/public/css/projects-hub.css +53 -14
  174. package/lib/public/css/session-folders.css +11 -0
  175. package/lib/public/css/session-github.css +46 -1
  176. package/lib/public/css/settings-shell.css +103 -0
  177. package/lib/public/css/shared-browser.css +35 -1
  178. package/lib/public/css/sidebar.css +7 -0
  179. package/lib/public/css/sticky-notes.css +87 -1
  180. package/lib/public/css/title-bar.css +79 -0
  181. package/lib/public/index.html +61 -68
  182. package/lib/public/mate-avatars/B01.png +0 -0
  183. package/lib/public/mate-avatars/B02.png +0 -0
  184. package/lib/public/mate-avatars/B03.png +0 -0
  185. package/lib/public/mate-avatars/B04.png +0 -0
  186. package/lib/public/mate-avatars/B05.png +0 -0
  187. package/lib/public/mate-avatars/B06.png +0 -0
  188. package/lib/public/mate-avatars/B07.png +0 -0
  189. package/lib/public/mate-avatars/B08.png +0 -0
  190. package/lib/public/mate-avatars/B09.png +0 -0
  191. package/lib/public/mate-avatars/B10.png +0 -0
  192. package/lib/public/mate-avatars/B11.png +0 -0
  193. package/lib/public/mate-avatars/B12.png +0 -0
  194. package/lib/public/mate-avatars/B13.png +0 -0
  195. package/lib/public/mate-avatars/B14.png +0 -0
  196. package/lib/public/mate-avatars/B15.png +0 -0
  197. package/lib/public/mate-avatars/B16.png +0 -0
  198. package/lib/public/mate-avatars/B17.png +0 -0
  199. package/lib/public/mate-avatars/B18.png +0 -0
  200. package/lib/public/mate-avatars/B19.png +0 -0
  201. package/lib/public/mate-avatars/B20.png +0 -0
  202. package/lib/public/mate-avatars/B21.png +0 -0
  203. package/lib/public/mate-avatars/B22.png +0 -0
  204. package/lib/public/mate-avatars/B23.png +0 -0
  205. package/lib/public/mate-avatars/B24.png +0 -0
  206. package/lib/public/mate-avatars/B25.png +0 -0
  207. package/lib/public/mate-avatars/B26.png +0 -0
  208. package/lib/public/mate-avatars/B27.png +0 -0
  209. package/lib/public/mate-avatars/B28.png +0 -0
  210. package/lib/public/mate-avatars/B29.png +0 -0
  211. package/lib/public/mate-avatars/B30.png +0 -0
  212. package/lib/public/mate-avatars/B31.png +0 -0
  213. package/lib/public/mate-avatars/B32.png +0 -0
  214. package/lib/public/mate-avatars/B33.png +0 -0
  215. package/lib/public/mate-avatars/B34.png +0 -0
  216. package/lib/public/mate-avatars/B35.png +0 -0
  217. package/lib/public/mate-avatars/B36.png +0 -0
  218. package/lib/public/mate-avatars/B37.png +0 -0
  219. package/lib/public/mate-avatars/B38.png +0 -0
  220. package/lib/public/mate-avatars/B39.png +0 -0
  221. package/lib/public/mate-avatars/B40.png +0 -0
  222. package/lib/public/mate-avatars/B41.png +0 -0
  223. package/lib/public/mate-avatars/B42.png +0 -0
  224. package/lib/public/mate-avatars/B43.png +0 -0
  225. package/lib/public/mate-avatars/B44.png +0 -0
  226. package/lib/public/mate-avatars/B45.png +0 -0
  227. package/lib/public/mate-avatars/B46.png +0 -0
  228. package/lib/public/mate-avatars/B47.png +0 -0
  229. package/lib/public/mate-avatars/B48.png +0 -0
  230. package/lib/public/mate-avatars/C01.png +0 -0
  231. package/lib/public/mate-avatars/C02.png +0 -0
  232. package/lib/public/mate-avatars/C03.png +0 -0
  233. package/lib/public/mate-avatars/C04.png +0 -0
  234. package/lib/public/mate-avatars/C05.png +0 -0
  235. package/lib/public/mate-avatars/C06.png +0 -0
  236. package/lib/public/mate-avatars/C07.png +0 -0
  237. package/lib/public/mate-avatars/C08.png +0 -0
  238. package/lib/public/mate-avatars/C09.png +0 -0
  239. package/lib/public/mate-avatars/C10.png +0 -0
  240. package/lib/public/mate-avatars/C11.png +0 -0
  241. package/lib/public/mate-avatars/C12.png +0 -0
  242. package/lib/public/mate-avatars/C13.png +0 -0
  243. package/lib/public/mate-avatars/C14.png +0 -0
  244. package/lib/public/mate-avatars/C15.png +0 -0
  245. package/lib/public/mate-avatars/C16.png +0 -0
  246. package/lib/public/mate-avatars/C17.png +0 -0
  247. package/lib/public/mate-avatars/C18.png +0 -0
  248. package/lib/public/mate-avatars/C19.png +0 -0
  249. package/lib/public/mate-avatars/C20.png +0 -0
  250. package/lib/public/mate-avatars/C21.png +0 -0
  251. package/lib/public/mate-avatars/C22.png +0 -0
  252. package/lib/public/mate-avatars/C23.png +0 -0
  253. package/lib/public/mate-avatars/C24.png +0 -0
  254. package/lib/public/mate-avatars/C25.png +0 -0
  255. package/lib/public/mate-avatars/C26.png +0 -0
  256. package/lib/public/mate-avatars/C27.png +0 -0
  257. package/lib/public/mate-avatars/C28.png +0 -0
  258. package/lib/public/mate-avatars/C29.png +0 -0
  259. package/lib/public/mate-avatars/C30.png +0 -0
  260. package/lib/public/mate-avatars/C31.png +0 -0
  261. package/lib/public/mate-avatars/C32.png +0 -0
  262. package/lib/public/mate-avatars/C33.png +0 -0
  263. package/lib/public/mate-avatars/C34.png +0 -0
  264. package/lib/public/mate-avatars/C35.png +0 -0
  265. package/lib/public/mate-avatars/C36.png +0 -0
  266. package/lib/public/mate-avatars/C37.png +0 -0
  267. package/lib/public/mate-avatars/C38.png +0 -0
  268. package/lib/public/mate-avatars/C39.png +0 -0
  269. package/lib/public/mate-avatars/C40.png +0 -0
  270. package/lib/public/mate-avatars/C41.png +0 -0
  271. package/lib/public/mate-avatars/C42.png +0 -0
  272. package/lib/public/mate-avatars/C43.png +0 -0
  273. package/lib/public/mate-avatars/C44.png +0 -0
  274. package/lib/public/mate-avatars/C45.png +0 -0
  275. package/lib/public/mate-avatars/C46.png +0 -0
  276. package/lib/public/mate-avatars/C47.png +0 -0
  277. package/lib/public/mate-avatars/C48.png +0 -0
  278. package/lib/public/mate-avatars/catalog.json +482 -0
  279. package/lib/public/mate-avatars/lead-clay.png +0 -0
  280. package/lib/public/modules/admin-settings-invitations.js +2 -2
  281. package/lib/public/modules/admin-settings-projects.js +8 -4
  282. package/lib/public/modules/admin-settings-ui.js +20 -4
  283. package/lib/public/modules/admin-settings-users.js +4 -4
  284. package/lib/public/modules/app-connection.js +11 -1
  285. package/lib/public/modules/app-favicon.js +18 -9
  286. package/lib/public/modules/app-header.js +7 -4
  287. package/lib/public/modules/app-home-hub.js +2 -1
  288. package/lib/public/modules/app-loop-ui.js +2 -0
  289. package/lib/public/modules/app-message-router.js +22 -1
  290. package/lib/public/modules/app-messages.js +125 -19
  291. package/lib/public/modules/app-misc.js +3 -1
  292. package/lib/public/modules/app-notifications.js +11 -5
  293. package/lib/public/modules/app-panels.js +61 -123
  294. package/lib/public/modules/app-projects.js +14 -407
  295. package/lib/public/modules/app-rate-limit.js +19 -28
  296. package/lib/public/modules/app-rendering.js +4 -3
  297. package/lib/public/modules/avatar.js +15 -41
  298. package/lib/public/modules/chat-render-runtime.js +20 -0
  299. package/lib/public/modules/clay-browser-links.js +47 -0
  300. package/lib/public/modules/clay-control-activity.js +214 -0
  301. package/lib/public/modules/clay-control-copy.js +36 -0
  302. package/lib/public/modules/clay-control-detail-targets.js +44 -0
  303. package/lib/public/modules/clay-control-object-targets.js +52 -0
  304. package/lib/public/modules/clay-control-target-visibility.js +12 -0
  305. package/lib/public/modules/clay-control-targets.js +44 -0
  306. package/lib/public/modules/clay-log-links.js +23 -0
  307. package/lib/public/modules/clay-navigation-render.js +52 -0
  308. package/lib/public/modules/clay-owner-navigation.js +33 -0
  309. package/lib/public/modules/clay-session-links.js +31 -0
  310. package/lib/public/modules/clay-studio-bridge.js +20 -0
  311. package/lib/public/modules/clay-studio-document.js +67 -0
  312. package/lib/public/modules/clay-studio-render.js +146 -0
  313. package/lib/public/modules/clay-tool-activity.js +140 -0
  314. package/lib/public/modules/clay-tool-presentation.js +343 -0
  315. package/lib/public/modules/command-palette.js +162 -40
  316. package/lib/public/modules/contextual-ask-session.js +26 -0
  317. package/lib/public/modules/contextual-clay-geometry.js +155 -0
  318. package/lib/public/modules/contextual-clay-session.js +130 -0
  319. package/lib/public/modules/contextual-clay-workspace.js +169 -0
  320. package/lib/public/modules/contextual-clay.js +252 -0
  321. package/lib/public/modules/contextual-composer.js +91 -0
  322. package/lib/public/modules/contextual-mate-context.js +117 -0
  323. package/lib/public/modules/contextual-mate-hint.js +40 -0
  324. package/lib/public/modules/contextual-mate-identity.js +23 -0
  325. package/lib/public/modules/contextual-mate-sessions.js +134 -0
  326. package/lib/public/modules/contextual-search.js +137 -0
  327. package/lib/public/modules/contextual-session-citations.js +58 -0
  328. package/lib/public/modules/debate.js +1 -0
  329. package/lib/public/modules/default-ai.js +11 -3
  330. package/lib/public/modules/elicitation-form.js +5 -0
  331. package/lib/public/modules/filebrowser.js +20 -1
  332. package/lib/public/modules/generation-stop.js +8 -5
  333. package/lib/public/modules/git-panel.js +3 -1
  334. package/lib/public/modules/github-star.js +66 -0
  335. package/lib/public/modules/history-replay-batch.js +13 -1
  336. package/lib/public/modules/home-debate-live.js +2 -0
  337. package/lib/public/modules/home-debate-planning.js +7 -7
  338. package/lib/public/modules/home-mate-avatar-editor.js +127 -208
  339. package/lib/public/modules/home-mate-chat.js +8 -6
  340. package/lib/public/modules/home-mate-creation.js +73 -1
  341. package/lib/public/modules/home-mate-settings.js +19 -12
  342. package/lib/public/modules/icon-strip-tooltip.js +2 -1
  343. package/lib/public/modules/input.js +88 -10
  344. package/lib/public/modules/issues-render.js +3 -2
  345. package/lib/public/modules/knowledge-db-workbench.js +4 -4
  346. package/lib/public/modules/markdown.js +6 -34
  347. package/lib/public/modules/mate-avatar-catalog.js +97 -0
  348. package/lib/public/modules/mate-knowledge-workbench.js +1 -1
  349. package/lib/public/modules/mate-loading-scene.js +17 -0
  350. package/lib/public/modules/mate-management.js +40 -7
  351. package/lib/public/modules/mcp-connection-view.js +31 -13
  352. package/lib/public/modules/mcp-discovery-view.js +31 -0
  353. package/lib/public/modules/mcp-ui.js +23 -4
  354. package/lib/public/modules/mention.js +3 -0
  355. package/lib/public/modules/message-delivery.js +20 -2
  356. package/lib/public/modules/model-picker.js +2 -0
  357. package/lib/public/modules/pane-activation.js +214 -0
  358. package/lib/public/modules/pane-binding.js +82 -0
  359. package/lib/public/modules/pane-bridge.js +7 -4
  360. package/lib/public/modules/pane-browser-bridge.js +22 -0
  361. package/lib/public/modules/pane-file-bridge.js +4 -0
  362. package/lib/public/modules/pane-issue-bridge.js +4 -1
  363. package/lib/public/modules/pending-message-queue.js +1 -0
  364. package/lib/public/modules/permission-control.js +5 -4
  365. package/lib/public/modules/personal-settings-dialog.js +7 -1
  366. package/lib/public/modules/product-review.js +26 -0
  367. package/lib/public/modules/profile.js +12 -241
  368. package/lib/public/modules/project-access-recovery.js +17 -0
  369. package/lib/public/modules/project-admin-overview.js +21 -0
  370. package/lib/public/modules/project-chat-identity.js +13 -4
  371. package/lib/public/modules/project-logs-render.js +3 -0
  372. package/lib/public/modules/project-mate-creation-workspace.js +13 -4
  373. package/lib/public/modules/project-mate-navigation.js +144 -22
  374. package/lib/public/modules/project-session-visibility-settings.js +19 -16
  375. package/lib/public/modules/project-settings.js +119 -129
  376. package/lib/public/modules/project-start-dialog.js +130 -0
  377. package/lib/public/modules/project-start-folder-state.js +78 -0
  378. package/lib/public/modules/project-start-folder-view.js +190 -0
  379. package/lib/public/modules/project-start-forms.js +66 -0
  380. package/lib/public/modules/project-start-path.js +60 -0
  381. package/lib/public/modules/project-start-state.js +54 -0
  382. package/lib/public/modules/project-start-submit.js +67 -0
  383. package/lib/public/modules/projects-hub-view.js +33 -14
  384. package/lib/public/modules/projects-hub.js +10 -6
  385. package/lib/public/modules/rewind.js +5 -0
  386. package/lib/public/modules/scheduled-tasks.js +2 -0
  387. package/lib/public/modules/scheduler.js +2 -0
  388. package/lib/public/modules/search-clay-chat.js +5 -440
  389. package/lib/public/modules/server-settings.js +36 -91
  390. package/lib/public/modules/session-actions.js +5 -2
  391. package/lib/public/modules/session-context-menu.js +5 -0
  392. package/lib/public/modules/session-create-form.js +10 -10
  393. package/lib/public/modules/session-folder-layout.js +1 -1
  394. package/lib/public/modules/session-folder-view-menu.js +9 -0
  395. package/lib/public/modules/session-github.js +85 -14
  396. package/lib/public/modules/session-rich-drafts.js +21 -0
  397. package/lib/public/modules/session-switch-defer.js +67 -0
  398. package/lib/public/modules/session-work-primary.js +51 -0
  399. package/lib/public/modules/settings-defaults.js +27 -28
  400. package/lib/public/modules/settings-project-target.js +56 -0
  401. package/lib/public/modules/settings-select.js +1 -1
  402. package/lib/public/modules/settings-shell-registry.js +88 -0
  403. package/lib/public/modules/settings-shell-view.js +104 -0
  404. package/lib/public/modules/settings-shell.js +342 -0
  405. package/lib/public/modules/shared-browser-settings.js +112 -0
  406. package/lib/public/modules/shared-browser-tabs.js +13 -3
  407. package/lib/public/modules/shared-browser.js +29 -6
  408. package/lib/public/modules/sidebar-mobile.js +12 -33
  409. package/lib/public/modules/sidebar-projects.js +3 -1
  410. package/lib/public/modules/sidebar-session-folders-ui.js +1 -1
  411. package/lib/public/modules/sidebar-sessions.js +1 -0
  412. package/lib/public/modules/split-group-restore.js +68 -0
  413. package/lib/public/modules/split-pair-ui.js +1 -0
  414. package/lib/public/modules/split-pane-reconciler.js +15 -0
  415. package/lib/public/modules/split-pane-renderer.js +87 -6
  416. package/lib/public/modules/split-session-boundary.js +1 -1
  417. package/lib/public/modules/split-view.js +60 -68
  418. package/lib/public/modules/sticky-note-markdown.js +72 -6
  419. package/lib/public/modules/sticky-notes-actions.js +30 -0
  420. package/lib/public/modules/sticky-notes-browser.js +9 -2
  421. package/lib/public/modules/sticky-notes-card.js +23 -7
  422. package/lib/public/modules/sticky-notes-checklist.js +116 -0
  423. package/lib/public/modules/sticky-notes-editor.js +108 -44
  424. package/lib/public/modules/sticky-notes-shared.js +50 -2
  425. package/lib/public/modules/sticky-notes-state.js +66 -0
  426. package/lib/public/modules/sticky-notes.js +34 -51
  427. package/lib/public/modules/stt-controller.js +4 -1
  428. package/lib/public/modules/stt-recording.js +1 -1
  429. package/lib/public/modules/stt.js +7 -2
  430. package/lib/public/modules/terminal.js +9 -0
  431. package/lib/public/modules/theme.js +18 -3
  432. package/lib/public/modules/thinking-lifecycle.js +33 -3
  433. package/lib/public/modules/thinking-view.js +23 -1
  434. package/lib/public/modules/tools.js +60 -11
  435. package/lib/public/modules/tui-grab.js +1 -2
  436. package/lib/public/modules/user-settings-appearance.js +10 -3
  437. package/lib/public/modules/user-settings-editors.js +1 -1
  438. package/lib/public/modules/user-settings-layout.js +14 -30
  439. package/lib/public/modules/user-settings-preferences.js +6 -2
  440. package/lib/public/modules/user-settings-profile.js +13 -3
  441. package/lib/public/modules/user-settings.js +18 -84
  442. package/lib/public/modules/vendor-login-browser.js +5 -3
  443. package/lib/public/modules/vendor-login.js +2 -2
  444. package/lib/public/modules/vendor-priority.js +15 -1
  445. package/lib/public/modules/vendor-usage-format.js +93 -0
  446. package/lib/public/modules/vendor-usage-list.js +45 -0
  447. package/lib/public/modules/vendor-usage-model.js +215 -0
  448. package/lib/public/modules/vendor-usage-overview.js +312 -0
  449. package/lib/public/modules/wireframe-workbench.js +5 -2
  450. package/lib/public/muse-avatar.svg +4 -0
  451. package/lib/public/style.css +14 -6
  452. package/lib/public/sw.js +3 -1
  453. package/lib/public/welcome-art/conversation-desk.png +0 -0
  454. package/lib/public/welcome-art/mate-clay.png +0 -0
  455. package/lib/public/welcome-art/project-clay.png +0 -0
  456. package/lib/safe-bash-commands.js +3 -45
  457. package/lib/scheduled-task-records.js +3 -1
  458. package/lib/scheduler.js +2 -0
  459. package/lib/sdk-bridge.js +348 -402
  460. package/lib/sdk-foreground-admission.js +16 -0
  461. package/lib/sdk-mcp-descriptors.js +2 -37
  462. package/lib/sdk-message-processor.js +61 -18
  463. package/lib/sdk-quota-snapshot.js +21 -3
  464. package/lib/sdk-response-recovery.js +1 -0
  465. package/lib/sdk-worker.js +2 -677
  466. package/lib/server-admin.js +63 -16
  467. package/lib/server-appearance-settings.js +13 -1
  468. package/lib/server-contextual-clay-settings.js +40 -0
  469. package/lib/server-contextual-mate-sessions.js +70 -0
  470. package/lib/server-dm.js +2 -1
  471. package/lib/server-github-stars.js +39 -0
  472. package/lib/server-global-ws.js +26 -32
  473. package/lib/server-home-chat-events.js +18 -4
  474. package/lib/server-home-chat.js +22 -20
  475. package/lib/server-home-clay-entry.js +23 -4
  476. package/lib/server-home-clay-session-links.js +29 -9
  477. package/lib/server-home-mate-creation.js +1 -0
  478. package/lib/server-home-mcp-consent.js +14 -0
  479. package/lib/server-mates.js +25 -62
  480. package/lib/server-owner-ui.js +118 -0
  481. package/lib/server-path-access.js +38 -0
  482. package/lib/server-project-removal.js +22 -0
  483. package/lib/server-settings.js +6 -1
  484. package/lib/server.js +167 -43
  485. package/lib/session-config-transition.js +45 -0
  486. package/lib/session-folders.js +7 -2
  487. package/lib/session-fork-history.js +21 -0
  488. package/lib/session-github.js +9 -2
  489. package/lib/session-hygiene.js +3 -35
  490. package/lib/session-notes-mcp-server.js +26 -4
  491. package/lib/session-notes-writes.js +88 -0
  492. package/lib/session-permission-mode.js +4 -3
  493. package/lib/session-skill-scope.js +11 -0
  494. package/lib/session-visibility.js +25 -10
  495. package/lib/session-work-primary.js +50 -0
  496. package/lib/sessions.js +66 -99
  497. package/lib/shared-browser-cookie-sync.js +32 -0
  498. package/lib/shared-browser-cookies.js +79 -0
  499. package/lib/shared-browser-runtime.js +25 -9
  500. package/lib/shared-browser-storage-sync.js +43 -0
  501. package/lib/shared-browser-storage.js +101 -0
  502. package/lib/shared-browser-tools.js +2 -1
  503. package/lib/shared-browser-worker.js +46 -10
  504. package/lib/terminal-manager.js +65 -6
  505. package/lib/tool-llm.js +1 -1
  506. package/lib/tui-transcript-index.js +1 -132
  507. package/lib/users-contextual-clay-preferences.js +31 -0
  508. package/lib/users-permissions.js +2 -8
  509. package/lib/users.js +7 -0
  510. package/lib/vendor-login-browser.js +1 -11
  511. package/lib/vendor-usage-acp-readers.js +97 -0
  512. package/lib/vendor-usage-capabilities.js +88 -0
  513. package/lib/vendor-usage-http-readers.js +214 -0
  514. package/lib/vendor-usage-metrics.js +47 -0
  515. package/lib/vendor-usage-native-readers.js +106 -0
  516. package/lib/vendor-usage-overview.js +406 -0
  517. package/lib/vendor-usage-service.js +281 -0
  518. package/lib/workspace-assignment-service.js +25 -0
  519. package/lib/workspace-query-access.js +4 -1
  520. package/lib/workspace-query-mcp-server.js +1 -1
  521. package/lib/workspace-query-service.js +13 -2
  522. package/lib/ws-request.js +1 -0
  523. package/lib/ws-schema.js +22 -4
  524. package/lib/yoke/acp-agent-profiles.js +7 -5
  525. package/lib/yoke/adapters/antigravity.js +3 -14
  526. package/lib/yoke/adapters/claude-query-contract.js +9 -0
  527. package/lib/yoke/adapters/claude.js +66 -50
  528. package/lib/yoke/adapters/codex-query-contract.js +25 -0
  529. package/lib/yoke/adapters/codex.js +98 -123
  530. package/lib/yoke/adapters/kiro.js +3 -1
  531. package/lib/yoke/adapters/muse-query-contract.js +7 -0
  532. package/lib/yoke/adapters/muse.js +122 -0
  533. package/lib/yoke/auth-events.js +17 -0
  534. package/lib/yoke/claude-hook-installer.js +272 -0
  535. package/lib/yoke/claude-jsonl-watcher.js +204 -0
  536. package/lib/yoke/claude-maintenance.js +55 -0
  537. package/lib/yoke/claude-permission-patterns.js +53 -0
  538. package/lib/yoke/claude-response-recovery.js +155 -0
  539. package/lib/yoke/claude-transcript-hygiene.js +34 -0
  540. package/lib/yoke/claude-worker-startup.js +28 -0
  541. package/lib/yoke/clay-skill-install.js +33 -0
  542. package/lib/yoke/cli-sessions.js +300 -0
  543. package/lib/yoke/codex-app-server.js +7 -12
  544. package/lib/yoke/codex-dynamic-tool-names.js +80 -0
  545. package/lib/yoke/codex-idle-recovery.js +81 -1
  546. package/lib/yoke/codex-model-catalog.js +37 -3
  547. package/lib/yoke/codex-recovery-admission.js +164 -0
  548. package/lib/yoke/configuration.js +13 -0
  549. package/lib/yoke/discovery.js +70 -0
  550. package/lib/yoke/errors.js +8 -0
  551. package/lib/yoke/host-environment.js +7 -0
  552. package/lib/yoke/index.js +9 -51
  553. package/lib/yoke/interface.js +116 -0
  554. package/lib/yoke/kiro-acp-server.js +5 -5
  555. package/lib/yoke/legacy-sessions.js +89 -0
  556. package/lib/yoke/login-protocol.js +25 -0
  557. package/lib/yoke/maintenance.js +12 -0
  558. package/lib/yoke/mcp-proxy.js +32 -0
  559. package/lib/yoke/mcp-source-adapters.js +91 -0
  560. package/lib/yoke/mcp-source-context.js +42 -0
  561. package/lib/yoke/mcp-source-discovery.js +169 -0
  562. package/lib/yoke/mcp-source-plugins.js +68 -0
  563. package/lib/yoke/mcp-source-restrictions.js +47 -0
  564. package/lib/yoke/mcp-tool-policy-normalize.js +28 -0
  565. package/lib/yoke/model-preferences.js +6 -0
  566. package/lib/yoke/muse-artifacts.js +36 -0
  567. package/lib/yoke/muse-controls.js +50 -0
  568. package/lib/yoke/muse-input.js +64 -0
  569. package/lib/yoke/muse-items.js +157 -0
  570. package/lib/yoke/muse-policy.js +52 -0
  571. package/lib/yoke/muse-query.js +428 -0
  572. package/lib/yoke/muse-runtime.js +211 -0
  573. package/lib/yoke/muse-services.js +92 -0
  574. package/lib/yoke/muse-skills.js +79 -0
  575. package/lib/yoke/muse-turns.js +71 -0
  576. package/lib/yoke/options/acp.js +2 -0
  577. package/lib/yoke/options/antigravity.js +2 -0
  578. package/lib/yoke/options/claude.js +21 -0
  579. package/lib/yoke/options/codex-defaults.js +29 -0
  580. package/lib/yoke/options/codex-settings.js +21 -0
  581. package/lib/yoke/options/codex.js +6 -0
  582. package/lib/yoke/options/kiro-defaults.js +22 -0
  583. package/lib/yoke/options/kiro.js +5 -0
  584. package/lib/yoke/options/muse.js +5 -0
  585. package/lib/yoke/provider-contract.js +5 -0
  586. package/lib/yoke/providers/antigravity-executable.js +8 -0
  587. package/lib/yoke/providers/claude-executable.js +40 -0
  588. package/lib/yoke/providers/claude-model-descriptions.js +34 -0
  589. package/lib/yoke/providers/claude-process.js +97 -0
  590. package/lib/yoke/providers/claude-provision.js +75 -0
  591. package/lib/yoke/providers/codex-errors.js +8 -0
  592. package/lib/yoke/providers/muse-executable.js +17 -0
  593. package/lib/yoke/provisioning.js +6 -0
  594. package/lib/yoke/query-options.js +10 -0
  595. package/lib/yoke/response-recovery.js +41 -0
  596. package/lib/yoke/sdk-mcp-descriptors.js +37 -0
  597. package/lib/yoke/sdk-server-factory.js +7 -0
  598. package/lib/yoke/session-history.js +8 -0
  599. package/lib/yoke/session-tool-transport.js +34 -13
  600. package/lib/yoke/settings.js +23 -0
  601. package/lib/yoke/source-locations.js +4 -0
  602. package/lib/yoke/title-query.js +18 -7
  603. package/lib/yoke/tui-transcript-index.js +132 -0
  604. package/lib/yoke/usage.js +48 -0
  605. package/lib/yoke/user-input.js +13 -0
  606. package/lib/yoke/vendor-registry.js +87 -3
  607. package/package.json +11 -4
  608. package/lib/public/modules/server-settings-navigation.js +0 -39
@@ -63,6 +63,70 @@
63
63
  height: 10px;
64
64
  }
65
65
 
66
+ /* Vendor usage overview: one compact chip per tracked vendor, details in a popover */
67
+ .vendor-usage-overview { display: inline-flex; align-items: center; gap: 4px; margin-right: 4px; }
68
+ .vendor-usage-item { display: inline-flex; position: relative; }
69
+ .top-bar-actions button.vendor-usage-chip {
70
+ display: inline-flex;
71
+ padding: 2px 8px;
72
+ border-radius: 10px;
73
+ gap: 4px;
74
+ font-size: 11px;
75
+ font-weight: 600;
76
+ line-height: 1;
77
+ }
78
+ .top-bar-actions button.vendor-usage-chip.pill-dim { background: color-mix(in srgb, var(--text-dimmer) 8%, transparent); color: var(--text-dimmer); }
79
+ .top-bar-actions button.vendor-usage-chip.pill-warning { background: color-mix(in srgb, var(--warning) 12%, transparent); color: var(--warning); }
80
+ .vendor-usage-chip.unknown, .vendor-usage-chip.stale { font-weight: 500; }
81
+ .top-bar-actions button.vendor-usage-chip:hover { background: color-mix(in srgb, var(--text-dimmer) 16%, transparent); }
82
+ .vendor-usage-chip:focus-visible, .vendor-usage-link:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
83
+ .vendor-usage-chip[aria-expanded="true"] { background: color-mix(in srgb, var(--text-dimmer) 18%, transparent); }
84
+ .vendor-usage-popover {
85
+ position: absolute;
86
+ top: calc(100% + 6px);
87
+ right: 0;
88
+ z-index: 200;
89
+ width: 280px;
90
+ max-width: calc(100vw - 16px);
91
+ box-sizing: border-box;
92
+ padding: 10px 12px;
93
+ border-radius: 10px;
94
+ background: var(--bg);
95
+ color: var(--text);
96
+ border: 1px solid var(--border);
97
+ box-shadow: 0 4px 12px rgba(0,0,0,0.12);
98
+ font-size: 12px;
99
+ line-height: 1.4;
100
+ white-space: normal;
101
+ }
102
+ .vendor-usage-popover-title { font-weight: 600; margin-bottom: 6px; }
103
+ .vendor-usage-row { display: flex; justify-content: space-between; gap: 12px; padding: 2px 0; }
104
+ .vendor-usage-row.warning .vendor-usage-row-value { color: var(--warning); }
105
+ .vendor-usage-row-label { color: var(--text-secondary); }
106
+ .vendor-usage-row-value { display: flex; flex-direction: column; align-items: flex-end; text-align: right; }
107
+ .vendor-usage-row-age { color: var(--text-dimmer); font-size: 11px; }
108
+ .vendor-usage-note { margin-top: 6px; color: var(--text-dimmer); }
109
+ .vendor-usage-link { display: inline-flex; align-items: center; gap: 4px; margin-top: 8px; color: var(--accent); text-decoration: none; }
110
+ .vendor-usage-link:hover { text-decoration: underline; }
111
+ .vendor-usage-link .lucide { width: 12px; height: 12px; }
112
+ .vendor-usage-row.stale .vendor-usage-row-value > span:first-child { color: var(--text-dimmer); }
113
+ .vendor-usage-list-popover { width: 340px; }
114
+ .vendor-usage-list-icon { display: inline-flex; }
115
+ .vendor-usage-list-icon .lucide { width: 12px; height: 12px; }
116
+ .vendor-usage-list-row { padding: 5px 0; border-top: 1px solid color-mix(in srgb, var(--border) 60%, transparent); }
117
+ .vendor-usage-list-row:first-child { border-top: 0; padding-top: 0; }
118
+ .vendor-usage-list-top { display: flex; align-items: center; gap: 6px; }
119
+ .vendor-usage-list-name { font-weight: 600; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
120
+ .vendor-usage-list-source { color: var(--text-dimmer); font-size: 10px; text-transform: uppercase; letter-spacing: 0.04em; }
121
+ .vendor-usage-list-value { min-width: 44px; text-align: right; font-weight: 600; }
122
+ .vendor-usage-list-row.warning .vendor-usage-list-value { color: var(--warning); }
123
+ .vendor-usage-list-row.unknown .vendor-usage-list-value, .vendor-usage-list-row.stale .vendor-usage-list-value { color: var(--text-dimmer); font-weight: 500; }
124
+ .vendor-usage-list-detail { margin-top: 1px; color: var(--text-dimmer); font-size: 11px; }
125
+ @media (max-width: 1000px) {
126
+ .vendor-usage-chip.unknown .vendor-usage-chip-text,
127
+ .vendor-usage-chip.stale .vendor-usage-chip-text { display: none; }
128
+ }
129
+
66
130
  /* Clickable pill (update) */
67
131
  button.top-bar-pill {
68
132
  border: none;
@@ -105,14 +169,6 @@ button.top-bar-pill.pill-accent:hover { background: color-mix(in srgb, var(--acc
105
169
  .top-bar-install-btn.hidden { display: none; }
106
170
  .pwa-standalone .top-bar-install-btn { display: none !important; }
107
171
 
108
- /* Share button sits in .top-bar-actions with the bell/settings icons
109
- and inherits their shared icon-button styling. Hide on mobile and
110
- inside PWA standalone (matches previous pill behavior). */
111
- @media (max-width: 768px) {
112
- #share-pill { display: none; }
113
- }
114
- .pwa-standalone #share-pill { display: none !important; }
115
-
116
172
  /* Extension pill button — same style as share/install pills */
117
173
  .ext-pill-wrap {
118
174
  position: relative;
@@ -1076,254 +1132,6 @@ button.top-bar-pill.pill-accent:hover { background: color-mix(in srgb, var(--acc
1076
1132
  .notif-help-url .popover-copy:hover { color: var(--text); border-color: var(--text-dimmer); }
1077
1133
  .notif-help-url .popover-copy.copied { color: var(--success); border-color: var(--success); }
1078
1134
 
1079
- /* --- Add project modal --- */
1080
- #add-project-modal { position: fixed; inset: 0; z-index: 300; display: flex; align-items: center; justify-content: center; }
1081
- #add-project-modal.hidden { display: none; }
1082
-
1083
- .add-project-dialog { max-width: 420px; }
1084
-
1085
- .add-project-title {
1086
- font-size: 15px;
1087
- font-weight: 600;
1088
- color: var(--text);
1089
- margin-bottom: 14px;
1090
- }
1091
-
1092
- .add-project-body { margin-bottom: 16px; }
1093
-
1094
- .add-project-input-wrap { position: relative; display: flex; align-items: center; background: var(--input-bg); border: 1px solid var(--border); border-radius: 8px; transition: border-color 0.2s; }
1095
- .add-project-input-wrap:focus-within { border-color: var(--text-dimmer); }
1096
-
1097
- .add-project-prefix {
1098
- flex-shrink: 0;
1099
- padding: 5px 0 5px 8px;
1100
- font-size: 12px;
1101
- font-family: "Roboto Mono", monospace;
1102
- color: var(--accent);
1103
- background: var(--bg-alt);
1104
- border-radius: 5px 0 0 5px;
1105
- white-space: nowrap;
1106
- user-select: none;
1107
- pointer-events: none;
1108
- margin: 4px 0 4px 4px;
1109
- padding: 3px 6px;
1110
- background: color-mix(in srgb, var(--accent) 15%, transparent);
1111
- border-radius: 4px;
1112
- }
1113
- .add-project-prefix.hidden { display: none; }
1114
-
1115
- #add-project-input {
1116
- flex: 1;
1117
- min-width: 0;
1118
- background: transparent;
1119
- border: none;
1120
- color: var(--text);
1121
- font-size: 13px;
1122
- font-family: "Roboto Mono", monospace;
1123
- padding: 10px 12px 10px 6px;
1124
- outline: none;
1125
- }
1126
- .add-project-prefix.hidden + #add-project-input { padding-left: 12px; }
1127
-
1128
- #add-project-input:focus { border-color: transparent; }
1129
- #add-project-input::placeholder { color: var(--text-muted); font-family: var(--font-ui); }
1130
-
1131
- #add-project-suggestions {
1132
- position: absolute;
1133
- top: calc(100% + 4px);
1134
- left: 0;
1135
- right: 0;
1136
- background: var(--bg-alt);
1137
- border: 1px solid var(--border);
1138
- border-radius: 8px;
1139
- max-height: 200px;
1140
- overflow-y: auto;
1141
- z-index: 10;
1142
- box-shadow: 0 4px 16px rgba(var(--shadow-rgb), 0.4);
1143
- }
1144
-
1145
- #add-project-suggestions.hidden { display: none; }
1146
-
1147
- .add-project-suggestion-item {
1148
- display: flex;
1149
- align-items: center;
1150
- gap: 8px;
1151
- padding: 8px 12px;
1152
- font-size: 13px;
1153
- color: var(--text);
1154
- cursor: pointer;
1155
- transition: background 0.1s;
1156
- }
1157
-
1158
- .add-project-suggestion-item:first-child { border-radius: 8px 8px 0 0; }
1159
- .add-project-suggestion-item:last-child { border-radius: 0 0 8px 8px; }
1160
- .add-project-suggestion-item:only-child { border-radius: 8px; }
1161
- .add-project-suggestion-item:hover,
1162
- .add-project-suggestion-item.active { background: var(--sidebar-hover); }
1163
-
1164
- .add-project-suggestion-item .lucide { width: 14px; height: 14px; color: var(--text-muted); flex-shrink: 0; }
1165
-
1166
- .add-project-suggestion-name {
1167
- flex: 1;
1168
- overflow: hidden;
1169
- text-overflow: ellipsis;
1170
- white-space: nowrap;
1171
- }
1172
-
1173
- .add-project-suggestion-path {
1174
- font-size: 11px;
1175
- color: var(--text-muted);
1176
- overflow: hidden;
1177
- text-overflow: ellipsis;
1178
- white-space: nowrap;
1179
- max-width: 50%;
1180
- }
1181
-
1182
- #add-project-error {
1183
- font-size: 12px;
1184
- color: var(--error);
1185
- margin-top: 8px;
1186
- }
1187
-
1188
- #add-project-error.hidden { display: none; }
1189
-
1190
- /* --- Add project mode selector --- */
1191
- .add-project-modes {
1192
- display: flex;
1193
- gap: 2px;
1194
- margin-bottom: 14px;
1195
- background: var(--input-bg);
1196
- border-radius: 8px;
1197
- padding: 2px;
1198
- border: 1px solid var(--border);
1199
- }
1200
-
1201
- .add-project-mode-btn {
1202
- flex: 1;
1203
- padding: 6px 4px;
1204
- border: 1px solid transparent;
1205
- border-radius: 6px;
1206
- background: none;
1207
- color: var(--text-muted);
1208
- font-size: 12px;
1209
- font-weight: 500;
1210
- font-family: inherit;
1211
- cursor: pointer;
1212
- transition: background 0.15s, color 0.15s, border-color 0.15s;
1213
- white-space: nowrap;
1214
- }
1215
-
1216
- .add-project-mode-btn:hover:not(:disabled) {
1217
- color: var(--text-secondary);
1218
- }
1219
-
1220
- .add-project-mode-btn.active {
1221
- color: var(--accent);
1222
- background: var(--bg);
1223
- border-color: var(--border);
1224
- box-shadow: 0 1px 3px rgba(var(--shadow-rgb), 0.15);
1225
- }
1226
-
1227
- .add-project-mode-btn:disabled {
1228
- opacity: 0.35;
1229
- cursor: not-allowed;
1230
- }
1231
-
1232
- .add-project-panel { display: none; }
1233
- .add-project-panel.active { display: block; }
1234
-
1235
- /* Removed projects list in add project modal */
1236
- #add-project-removed { margin-bottom: 14px; padding-bottom: 14px; border-bottom: 1px solid var(--border); }
1237
- #add-project-removed.hidden { display: none; }
1238
- .add-project-removed-item {
1239
- display: flex;
1240
- align-items: center;
1241
- gap: 10px;
1242
- padding: 7px 8px;
1243
- border-radius: 8px;
1244
- margin-bottom: 2px;
1245
- cursor: pointer;
1246
- transition: background 0.15s;
1247
- }
1248
- .add-project-removed-item:last-child { margin-bottom: 0; }
1249
- .add-project-removed-item:hover { background: var(--sidebar-hover); }
1250
- .add-project-removed-icon {
1251
- flex-shrink: 0;
1252
- width: 28px;
1253
- height: 28px;
1254
- display: flex;
1255
- align-items: center;
1256
- justify-content: center;
1257
- border-radius: 6px;
1258
- background: var(--sidebar-hover);
1259
- font-size: 14px;
1260
- }
1261
- .add-project-removed-info {
1262
- flex: 1;
1263
- min-width: 0;
1264
- overflow: hidden;
1265
- }
1266
- .add-project-removed-name {
1267
- font-weight: 500;
1268
- color: var(--text);
1269
- white-space: nowrap;
1270
- overflow: hidden;
1271
- text-overflow: ellipsis;
1272
- font-size: 13px;
1273
- line-height: 1.3;
1274
- }
1275
- .add-project-removed-path {
1276
- font-size: 11px;
1277
- color: var(--text-muted);
1278
- white-space: nowrap;
1279
- overflow: hidden;
1280
- text-overflow: ellipsis;
1281
- line-height: 1.3;
1282
- }
1283
-
1284
- #add-project-create-input,
1285
- #add-project-clone-input {
1286
- width: 100%;
1287
- background: var(--input-bg);
1288
- border: 1px solid var(--border);
1289
- border-radius: 8px;
1290
- color: var(--text);
1291
- font-size: 13px;
1292
- font-family: "Roboto Mono", monospace;
1293
- padding: 10px 12px;
1294
- outline: none;
1295
- transition: border-color 0.2s;
1296
- }
1297
-
1298
- #add-project-create-input:focus,
1299
- #add-project-clone-input:focus { border-color: var(--text-dimmer); }
1300
-
1301
- #add-project-create-input::placeholder,
1302
- #add-project-clone-input::placeholder {
1303
- color: var(--text-muted);
1304
- font-family: var(--font-ui);
1305
- }
1306
-
1307
- #add-project-clone-progress {
1308
- font-size: 12px;
1309
- color: var(--text-muted);
1310
- margin-top: 8px;
1311
- display: flex;
1312
- align-items: center;
1313
- gap: 8px;
1314
- }
1315
-
1316
- #add-project-clone-progress.hidden { display: none; }
1317
-
1318
- .clone-spinner {
1319
- width: 12px;
1320
- height: 12px;
1321
- border: 2px solid var(--border);
1322
- border-top-color: var(--accent);
1323
- border-radius: 50%;
1324
- animation: spin 0.6s linear infinite;
1325
- }
1326
-
1327
1135
  /* --- Connect overlay --- */
1328
1136
  #connect-overlay {
1329
1137
  position: fixed;
@@ -1360,8 +1168,10 @@ button.top-bar-pill.pill-accent:hover { background: color-mix(in srgb, var(--acc
1360
1168
  .connect-wordmark {
1361
1169
  display: block;
1362
1170
  width: clamp(142px, 15vw, 184px);
1363
- height: auto;
1364
- filter: brightness(0);
1171
+ aspect-ratio: 4742 / 1156;
1172
+ background: var(--text-muted);
1173
+ -webkit-mask: url("../clay-studio-wordmark-bold.svg") center / contain no-repeat;
1174
+ mask: url("../clay-studio-wordmark-bold.svg") center / contain no-repeat;
1365
1175
  }
1366
1176
 
1367
1177
  #connect-overlay-msg {
@@ -0,0 +1,13 @@
1
+ .project-admin-overview { overflow: auto; padding: 8px; }
2
+ .project-admin-canvas { width: 100%; min-height: 100%; padding: 24px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg); }
3
+ .project-admin-canvas h1 { font-size: 20px; margin: 0 0 16px; }
4
+ .project-admin-canvas h2 { font-size: 16px; }
5
+ .project-admin-canvas [role="tablist"] { display: flex; gap: 4px; border-bottom: 1px solid var(--border); padding-bottom: 8px; }
6
+ .project-admin-canvas [role="tab"] { height: 32px; padding: 0 12px; border: 1px solid var(--border); border-radius: 8px; color: inherit; background: transparent; cursor: pointer; }
7
+ .project-admin-canvas [aria-selected="true"] { background: #5857fc; color: white; }
8
+ .project-admin-canvas :focus-visible { outline: 2px solid #5857fc; outline-offset: 2px; }
9
+ .project-admin-canvas dl { display: grid; grid-template-columns: 110px 1fr; gap: 12px; margin: 24px 0; font-size: 13px; }
10
+ .project-admin-canvas dd { margin: 0; }
11
+ .project-admin-canvas p { max-width: 640px; line-height: 1.6; font-size: 14px; }
12
+ .project-admin-secondary { opacity: .65; }
13
+ @media (max-width: 600px) { .project-admin-canvas { padding: 16px; } }
@@ -36,7 +36,7 @@
36
36
 
37
37
  .project-create-choice-option {
38
38
  display: grid;
39
- grid-template-columns: 34px 1fr;
39
+ grid-template-columns: 76px 1fr;
40
40
  align-items: center;
41
41
  gap: 12px;
42
42
  width: 100%;
@@ -52,11 +52,10 @@
52
52
  transition: border-color 180ms, background 180ms, transform 180ms;
53
53
  }
54
54
 
55
- .project-create-choice-option > .lucide {
56
- width: 22px;
57
- height: 22px;
58
- justify-self: center;
59
- color: var(--accent);
55
+ .project-create-choice-option > img {
56
+ width: 76px;
57
+ height: 64px;
58
+ object-fit: contain;
60
59
  }
61
60
 
62
61
  .project-create-choice-option span { display: grid; gap: 2px; }
@@ -0,0 +1,108 @@
1
+ /* --- Project start dialog: one fixed-size surface for every step --- */
2
+ #project-start-modal { position: fixed; inset: 0; z-index: 300; display: flex; align-items: center; justify-content: center; }
3
+ #project-start-modal.hidden { display: none; }
4
+ .project-start-backdrop { position: absolute; inset: 0; background: rgba(var(--shadow-rgb), 0.5); }
5
+ .project-start-dialog {
6
+ position: relative; display: flex; flex-direction: column;
7
+ width: min(520px, calc(100vw - 32px)); height: min(400px, calc(100dvh - 48px));
8
+ background: var(--bg-alt); border: 1px solid var(--border); border-radius: 14px;
9
+ box-shadow: 0 8px 32px rgba(var(--shadow-rgb), 0.5); outline: none; overflow: hidden;
10
+ }
11
+ .project-start-header { display: flex; align-items: center; gap: 8px; flex: none; padding: 16px 16px 12px 24px; }
12
+ .project-start-header h2 { flex: 1; min-width: 0; margin: 0; font-size: 16px; font-weight: 600; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
13
+ .project-start-header #project-start-back { margin-left: -12px; }
14
+ .project-start-icon-btn {
15
+ display: inline-flex; align-items: center; justify-content: center; flex: none; width: 30px; height: 30px; padding: 0;
16
+ border: 1px solid transparent; border-radius: 8px; background: transparent; color: var(--text-muted); cursor: pointer;
17
+ }
18
+ .project-start-icon-btn:hover:not(:disabled) { background: var(--sidebar-hover); color: var(--text); }
19
+ .project-start-icon-btn:disabled { opacity: .35; cursor: not-allowed; }
20
+ .project-start-icon-btn[hidden] { display: none; }
21
+ .project-start-icon-btn .lucide { width: 16px; height: 16px; }
22
+ .project-start-subtitle { flex: none; margin: -6px 24px 0; font-size: 12px; line-height: 1.5; color: var(--text-muted); }
23
+ .project-start-subtitle[hidden] { display: none; }
24
+ .project-start-body { flex: 1; min-height: 0; display: flex; flex-direction: column; }
25
+ .project-start-view { flex: 1; min-height: 0; display: flex; flex-direction: column; }
26
+ .project-start-scroll { flex: 1; min-height: 0; overflow-y: auto; padding: 4px 24px 16px; outline: none; }
27
+ .project-start-footer { flex: none; display: flex; align-items: center; justify-content: flex-end; gap: 12px; padding: 14px 24px 20px; border-top: 1px solid var(--border-subtle); }
28
+ .project-start-footer .project-start-error { flex: 1; min-width: 0; margin: 0; }
29
+
30
+ /* Rows */
31
+ .project-start-rows { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
32
+ .project-start-row {
33
+ display: flex; align-items: center; gap: 12px; width: 100%; padding: 10px 12px; border: 1px solid transparent; border-radius: 10px;
34
+ background: transparent; color: var(--text); font: inherit; font-size: 13px; text-align: left; cursor: pointer;
35
+ }
36
+ .project-start-row:hover { background: var(--sidebar-hover); }
37
+ .project-start-row:focus-visible, .project-start-primary:focus-visible, .project-start-secondary:focus-visible,
38
+ .project-start-link-btn:focus-visible, .project-start-icon-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
39
+ .project-start-row .lucide { width: 16px; height: 16px; flex: none; color: var(--text-muted); }
40
+ .project-start-row-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
41
+ .project-start-choices { gap: 8px; padding-top: 4px; }
42
+ /* Centre the three rows as a group; auto margins fall back to top-aligned scrolling when space runs out. */
43
+ [data-view="choices"] > .project-start-scroll { display: flex; flex-direction: column; padding-top: 0; }
44
+ [data-view="choices"] .project-start-choices { margin-block: auto; padding-top: 0; }
45
+ .project-start-choice { padding: 16px; border-color: var(--border); background: var(--bg); gap: 14px; }
46
+ .project-start-choice:hover { background: var(--sidebar-hover); border-color: var(--text-dimmer); }
47
+ .project-start-choice-icon { display: inline-flex; align-items: center; justify-content: center; flex: none; width: 36px; height: 36px; border-radius: 9px; background: var(--input-bg); }
48
+ .project-start-choice-icon .lucide { width: 18px; height: 18px; color: var(--text); }
49
+ .project-start-choice-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
50
+ .project-start-choice-text strong { font-size: 14px; font-weight: 600; }
51
+ .project-start-choice-text span { font-size: 12px; line-height: 1.4; color: var(--text-muted); }
52
+
53
+ /* Open folder */
54
+ .project-start-location { flex: none; display: flex; align-items: center; gap: 8px; padding: 0 24px 10px; }
55
+ .project-start-crumbs {
56
+ flex: 1; min-width: 0; display: flex; align-items: center; gap: 4px; height: 30px; padding: 0 10px; overflow: hidden; white-space: nowrap;
57
+ background: var(--input-bg); border: 1px solid var(--border); border-radius: 8px; font-size: 12px; font-family: "Roboto Mono", monospace;
58
+ }
59
+ .project-start-crumb, .project-start-crumb-current { overflow: hidden; text-overflow: ellipsis; }
60
+ .project-start-crumb { color: var(--text-muted); flex: 0 1 auto; }
61
+ .project-start-crumb-current { color: var(--text); font-weight: 600; flex: 0 1 auto; }
62
+ .project-start-crumb-sep, .project-start-crumb-muted { color: var(--text-dimmer); flex: none; }
63
+ .project-start-link-btn { flex: none; border: 0; background: transparent; color: var(--text-muted); font: inherit; font-size: 12px; padding: 6px 8px; border-radius: 6px; cursor: pointer; }
64
+ .project-start-link-btn:hover { color: var(--text); background: var(--sidebar-hover); }
65
+ .project-start-pathform { flex: none; display: flex; gap: 8px; padding: 0 24px 10px; }
66
+ .project-start-pathform[hidden] { display: none; }
67
+ .project-start-pathform .project-start-input { flex: 1; min-width: 0; }
68
+ .project-start-open-name { display: inline-block; max-width: 220px; vertical-align: bottom; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
69
+
70
+ /* States */
71
+ .project-start-state { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; min-height: 100%; padding: 24px 12px; text-align: center; font-size: 13px; color: var(--text-muted); }
72
+ .project-start-state strong { font-size: 14px; font-weight: 600; color: var(--text); }
73
+ .project-start-state-error strong { color: var(--error); }
74
+ .project-start-state span { max-width: 360px; line-height: 1.5; overflow-wrap: anywhere; }
75
+ .project-start-state-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin-top: 8px; }
76
+ .project-start-spinner { width: 14px; height: 14px; border: 2px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: spin .6s linear infinite; }
77
+ @media (prefers-reduced-motion: reduce) { .project-start-spinner { animation-duration: 2.4s; } }
78
+
79
+ /* Forms and buttons */
80
+ .project-start-formbody { padding-top: 8px; }
81
+ .project-start-label { display: block; margin-bottom: 8px; font-size: 12px; font-weight: 600; color: var(--text-secondary); }
82
+ .project-start-input {
83
+ width: 100%; box-sizing: border-box; height: 38px; padding: 0 12px; background: var(--input-bg); border: 1px solid var(--border); border-radius: 8px;
84
+ color: var(--text); font-size: 13px; font-family: "Roboto Mono", monospace; outline: none; transition: border-color .2s;
85
+ }
86
+ .project-start-input:focus { border-color: var(--text-dimmer); }
87
+ .project-start-input::placeholder { color: var(--text-muted); font-family: var(--font-ui); }
88
+ .project-start-input[readonly] { opacity: .7; }
89
+ .project-start-hint { margin: 8px 0 0; font-size: 12px; line-height: 1.5; color: var(--text-muted); }
90
+ .project-start-progress { display: flex; align-items: center; gap: 8px; margin: 12px 0 0; font-size: 12px; color: var(--text-muted); }
91
+ .project-start-progress[hidden], .project-start-error[hidden] { display: none; }
92
+ .project-start-error { margin: 12px 0 0; font-size: 12px; line-height: 1.5; color: var(--error); overflow-wrap: anywhere; }
93
+ .project-start-primary, .project-start-secondary { height: 34px; padding: 0 16px; border-radius: 8px; font: inherit; font-size: 13px; font-weight: 500; cursor: pointer; white-space: nowrap; }
94
+ .project-start-primary:focus-visible { outline: 2px solid var(--text); outline-offset: 2px; }
95
+ .project-start-primary { max-width: 100%; border: 1px solid var(--accent); background: var(--accent); color: #fff; }
96
+ .project-start-primary:hover:not(:disabled) { opacity: .9; }
97
+ .project-start-primary:disabled { opacity: .45; cursor: not-allowed; }
98
+ .project-start-secondary { border: 1px solid var(--border); background: var(--bg); color: var(--text); }
99
+ .project-start-secondary:hover { background: var(--sidebar-hover); }
100
+
101
+ @media (max-width: 480px) {
102
+ .project-start-header { padding: 14px 12px 10px 16px; }
103
+ .project-start-subtitle { margin-left: 16px; margin-right: 16px; }
104
+ .project-start-scroll { padding-left: 16px; padding-right: 16px; }
105
+ .project-start-location, .project-start-pathform { padding-left: 16px; padding-right: 16px; }
106
+ .project-start-footer { padding: 12px 16px 16px; }
107
+ .project-start-open-name { max-width: 150px; }
108
+ }
@@ -1,15 +1,26 @@
1
- body.projects-active #top-bar,
2
- body.projects-active #icon-strip,
3
- body.projects-active #sidebar-column,
4
- body.projects-active #mate-sidebar-column,
5
- body.projects-active #sidebar-resize-handle,
6
- body.projects-active #mate-sidebar-resize-handle,
7
- body.projects-active #sidebar-overlay,
8
- body.projects-active #mobile-tab-bar,
9
- body.projects-active .title-bar-content,
10
- body.projects-active #user-island,
1
+ body.projects-active:not(.projects-shell) #top-bar,
2
+ body.projects-active:not(.projects-shell) #icon-strip,
3
+ body.projects-active:not(.projects-shell) #sidebar-column,
4
+ body.projects-active:not(.projects-shell) #mate-sidebar-column,
5
+ body.projects-active:not(.projects-shell) #sidebar-resize-handle,
6
+ body.projects-active:not(.projects-shell) #mate-sidebar-resize-handle,
7
+ body.projects-active:not(.projects-shell) #sidebar-overlay,
8
+ body.projects-active:not(.projects-shell) #mobile-tab-bar,
9
+ body.projects-active:not(.projects-shell) .title-bar-content,
10
+ body.projects-active:not(.projects-shell) #user-island,
11
11
  body.projects-active #main-area > :not(#projects-hub) { display: none !important; }
12
- body.projects-active #main-area { border: 0; margin: 0; border-radius: 0; }
12
+ body.projects-active:not(.projects-shell) #main-area { border: 0; margin: 0; border-radius: 0; }
13
+ /* Zero-project welcome: the app shell (top bar, icon strip, user island) stays; only the empty session columns step aside. */
14
+ body.projects-shell #sidebar-column,
15
+ body.projects-shell #mate-sidebar-column,
16
+ body.projects-shell #sidebar-resize-handle,
17
+ body.projects-shell #mate-sidebar-resize-handle,
18
+ body.projects-shell .title-bar-content { display: none !important; }
19
+ body.projects-shell .projects-main { padding-top: 40px; }
20
+ @media (max-width: 600px) {
21
+ body.projects-shell .projects-main { padding-top: 64px; }
22
+ body.projects-shell .projects-footer { padding-left: 64px; padding-bottom: 24px; }
23
+ }
13
24
  #projects-hub { position: absolute; inset: 0; overflow-y: auto; background: var(--bg); color: var(--text); padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom); }
14
25
  #projects-hub.hidden { display: none; }
15
26
  .projects-header { display: flex; align-items: center; justify-content: space-between; max-width: 1200px; margin: auto; padding: 24px 40px; gap: 20px; }
@@ -19,7 +30,6 @@ body.projects-active #main-area { border: 0; margin: 0; border-radius: 0; }
19
30
  .projects-main { width: min(100%, 1040px); margin: auto; padding: 48px 40px 64px; }
20
31
  .projects-eyebrow { font-size: 11px; font-weight: 600; letter-spacing: 1.8px; color: var(--brand-clay); margin-bottom: 22px; }
21
32
  #projects-title { font-size: clamp(32px, 4vw, 48px); letter-spacing: -1.7px; line-height: 1.1; font-weight: 500; outline: none; }
22
- .projects-welcome #projects-title { font-size: clamp(44px, 6.5vw, 76px); letter-spacing: -3px; line-height: 1.02; }
23
33
  .projects-lead { margin-top: 20px; font-size: 16px; line-height: 1.7; color: var(--text-muted); }
24
34
  .projects-intro-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; border-top: 1px solid var(--border); margin: 42px 0 32px; padding-top: 24px; max-width: 760px; }
25
35
  .projects-intro-grid span { font-size: 10px; font-weight: 600; letter-spacing: 1.3px; color: var(--text-dimmer); }
@@ -31,6 +41,28 @@ body.projects-active #main-area { border: 0; margin: 0; border-radius: 0; }
31
41
  .projects-button-primary { background: var(--text); color: var(--bg); border-color: var(--text); }
32
42
  .projects-button-primary:hover { background: var(--text-secondary); }
33
43
  .projects-button-quiet { background: transparent; border-color: transparent; color: var(--text-muted); }
44
+ /* Official Clay Studio wordmark (same bold SVG mask as the top bar and connect screen), tinted by theme. */
45
+ .projects-wordmark { display: block; width: min(420px, 100%); aspect-ratio: 4742 / 1156; margin: 0 auto; background: var(--text); -webkit-mask: url("../clay-studio-wordmark-bold.svg") center / contain no-repeat; mask: url("../clay-studio-wordmark-bold.svg") center / contain no-repeat; }
46
+ .projects-welcome #projects-title { line-height: 1; }
47
+ .projects-button-secondary { background: transparent; border-color: var(--border); }
48
+ .projects-button-secondary:hover:not(:disabled) { background: var(--bg-alt); }
49
+ /* Quiet canvas, generous identity, and two tactile invitations to begin. */
50
+ .projects-welcome { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 14px 0 8px; }
51
+ .projects-welcome > .projects-eyebrow { color: var(--text-muted); font-size: 10px; letter-spacing: 2.8px; margin-bottom: 12px; }
52
+ .projects-welcome #projects-title { width: min(420px, 100%); }
53
+ .projects-welcome .projects-lead { max-width: 520px; margin-top: 8px; font-size: 17px; letter-spacing: -.2px; }
54
+ .projects-welcome .projects-intro-grid { width: 100%; max-width: 880px; margin: 30px auto 0; padding-top: 0; border: 0; gap: 64px; }
55
+ .projects-intro-card { display: flex; flex-direction: column; align-items: center; min-width: 0; }
56
+ .projects-intro-art { width: 100%; height: 190px; display: flex; align-items: center; justify-content: center; margin-bottom: 16px; }
57
+ .projects-intro-art img { display: block; width: 250px; max-width: 100%; height: 100%; object-fit: contain; }
58
+ .projects-intro-card .projects-intro-label { font-size: 10px; letter-spacing: 1.8px; color: var(--text-muted); }
59
+ .projects-intro-card h2 { font-size: 22px; line-height: 1.25; letter-spacing: -.65px; margin: 12px 0 10px; }
60
+ .projects-intro-card p { margin: 0 auto; max-width: 320px; font-size: 14px; line-height: 1.65; text-wrap: pretty; }
61
+ .projects-intro-action { margin-top: auto; padding-top: 22px; }
62
+ .projects-intro-action .projects-button { min-width: 176px; height: 40px; padding: 0 16px; }
63
+ .projects-welcome .projects-button-primary { background: var(--brand-indigo); border-color: var(--brand-indigo); color: #fff; }
64
+ .projects-welcome .projects-button-primary:hover:not(:disabled) { filter: brightness(1.08); }
65
+ .projects-welcome .projects-footnote { margin-top: 36px; }
34
66
  .projects-welcome-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; }
35
67
  .projects-footnote { font-size: 11px; color: var(--text-dimmer); margin-top: 18px; }
36
68
  .projects-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: 24px; margin-bottom: 32px; }
@@ -60,8 +92,16 @@ body.projects-active #main-area { border: 0; margin: 0; border-radius: 0; }
60
92
  .projects-brand { font-size: 14px; }
61
93
  .projects-header .projects-button { padding: 9px; }
62
94
  .projects-main { padding: 28px 22px 40px; }
63
- .projects-welcome #projects-title { letter-spacing: -2px; }
64
95
  .projects-intro-grid { grid-template-columns: 1fr; gap: 24px; margin-top: 30px; }
96
+ .projects-welcome { padding-top: 0; }
97
+ .projects-welcome #projects-title { width: min(320px, 100%); }
98
+ .projects-welcome .projects-lead { font-size: 15px; }
99
+ .projects-welcome .projects-intro-grid { gap: 36px; margin-top: 28px; }
100
+ .projects-intro-art { height: 160px; margin-bottom: 10px; }
101
+ .projects-intro-card h2 { font-size: 21px; }
102
+ .projects-intro-card + .projects-intro-card { border-top: 1px solid var(--border-subtle); padding-top: 30px; }
103
+ .projects-intro-action { padding-top: 16px; }
104
+ .projects-intro-action .projects-button { min-width: min(100%, 240px); }
65
105
  .projects-heading { flex-direction: column; gap: 12px; }
66
106
  .projects-heading > .projects-button { padding-left: 0; }
67
107
  .projects-list { grid-template-columns: 1fr; }
@@ -70,6 +110,5 @@ body.projects-active #main-area { border: 0; margin: 0; border-radius: 0; }
70
110
  }
71
111
  @media (min-width: 601px) and (max-height: 760px) {
72
112
  .projects-main { padding-top: 24px; }
73
- .projects-welcome #projects-title { font-size: 60px; }
74
113
  .projects-intro-grid { margin-top: 28px; margin-bottom: 24px; }
75
114
  }
@@ -158,6 +158,16 @@
158
158
  .session-folder-viewmenu .session-folder-radio-dot { width: 12px; height: 12px; }
159
159
  .session-folder-viewmenu .session-folder-radio-legend { margin: 2px 0 1px 6px; font-size: 10px; text-transform: uppercase; letter-spacing: 0.4px; }
160
160
  .session-folder-viewmenu .session-folder-view-note { padding: 2px 6px 4px; font-size: 11px; line-height: 1.35; }
161
+ .session-folder-view-toggle {
162
+ display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; min-height: 30px; padding: 0 6px;
163
+ border: 0; border-radius: 6px; background: transparent; color: var(--text); font: inherit; font-size: 12.5px; text-align: left; cursor: pointer;
164
+ }
165
+ .session-folder-view-toggle:hover { background: rgba(var(--overlay-rgb), 0.08); }
166
+ .session-folder-view-toggle-track { position: relative; flex: none; width: 28px; height: 16px; border-radius: 999px; background: var(--text-dimmer); transition: background 0.15s ease; }
167
+ .session-folder-view-toggle-thumb { position: absolute; top: 2px; left: 2px; width: 12px; height: 12px; border-radius: 50%; background: var(--sidebar-bg); transition: transform 0.15s ease; }
168
+ .session-folder-view-toggle[aria-checked="true"] .session-folder-view-toggle-track { background: var(--accent); }
169
+ .session-folder-view-toggle[aria-checked="true"] .session-folder-view-toggle-thumb { transform: translateX(12px); }
170
+ .session-folder-view-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
161
171
  .session-folder-viewmenu .session-folder-radio-group.segmented {
162
172
  display: flex; gap: 2px; padding: 2px; margin-top: 2px; border-radius: 8px; background: rgba(var(--overlay-rgb), 0.05);
163
173
  }
@@ -167,6 +177,7 @@
167
177
  .session-folder-viewmenu.is-mobile { padding: 6px; }
168
178
  .session-folder-viewmenu.is-mobile .session-folder-radio { min-height: 40px; font-size: 14px; }
169
179
  .session-folder-viewmenu.is-mobile .session-folder-radio-dot { width: 14px; height: 14px; }
180
+ .session-folder-viewmenu.is-mobile .session-folder-view-toggle { min-height: 40px; font-size: 14px; }
170
181
  @media (pointer: coarse) {
171
182
  .session-folder-viewmenu .session-folder-radio { min-height: 40px; font-size: 14px; }
172
183
  }