create-walle 0.9.21 → 0.9.23

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 (500) hide show
  1. package/README.md +27 -5
  2. package/package.json +2 -2
  3. package/template/CLAUDE.md +2 -2
  4. package/template/LICENSE +1 -1
  5. package/template/bin/ctm-dev-cleanup.js +24 -3
  6. package/template/bin/ctm-launch.sh +13 -0
  7. package/template/bin/dev.sh +156 -18
  8. package/template/bin/node-bin.sh +84 -0
  9. package/template/bin/pin-node.sh +51 -0
  10. package/template/claude-task-manager/api-prompts.js +1203 -182
  11. package/template/claude-task-manager/api-reviews.js +109 -15
  12. package/template/claude-task-manager/approval-agent.js +1360 -280
  13. package/template/claude-task-manager/bin/restart-ctm.sh +64 -23
  14. package/template/claude-task-manager/bin/storage-migration-supervisor.js +338 -0
  15. package/template/claude-task-manager/db.js +4417 -295
  16. package/template/claude-task-manager/docs/app-update-refresh-protocol.md +69 -0
  17. package/template/claude-task-manager/docs/approval-ai-refinement.md +138 -0
  18. package/template/claude-task-manager/docs/approval-rescue-loop.md +74 -0
  19. package/template/claude-task-manager/docs/codex-operational-warning-health.md +107 -0
  20. package/template/claude-task-manager/docs/codex-resume-state-guard-design.md +17 -12
  21. package/template/claude-task-manager/docs/codex-terminal-render-controller-handoff.md +311 -0
  22. package/template/claude-task-manager/docs/coding-agent-hooks-architecture.md +418 -0
  23. package/template/claude-task-manager/docs/conversation-import-freshness.md +20 -0
  24. package/template/claude-task-manager/docs/google-workspace-auth-health.md +77 -0
  25. package/template/claude-task-manager/docs/image-paste-ux.md +13 -0
  26. package/template/claude-task-manager/docs/ipad-web-preview.md +88 -0
  27. package/template/claude-task-manager/docs/main-loop-offload-architecture.md +66 -0
  28. package/template/claude-task-manager/docs/microsoft-dev-tunnel-phone-access-design.md +274 -519
  29. package/template/claude-task-manager/docs/mobile-live-streaming.md +27 -5
  30. package/template/claude-task-manager/docs/mobile-remote-submission-lifecycle.md +69 -0
  31. package/template/claude-task-manager/docs/phone-access-design.md +53 -15
  32. package/template/claude-task-manager/docs/phone-passkey-identity.md +122 -0
  33. package/template/claude-task-manager/docs/phone-setup.md +3 -0
  34. package/template/claude-task-manager/docs/prompt-editing-tree-design.md +25 -1
  35. package/template/claude-task-manager/docs/remote-desktop-access-design.md +268 -0
  36. package/template/claude-task-manager/docs/restart-lifecycle-architecture.md +95 -0
  37. package/template/claude-task-manager/docs/runtime-work-control-plane.md +53 -0
  38. package/template/claude-task-manager/docs/session-interactive-wait-surfaces.md +38 -0
  39. package/template/claude-task-manager/docs/session-needs-you-dismissal.md +84 -0
  40. package/template/claude-task-manager/docs/session-render-state-management-design.md +91 -3
  41. package/template/claude-task-manager/docs/session-standup-command-center-design.md +25 -1
  42. package/template/claude-task-manager/docs/session-title-authority.md +32 -0
  43. package/template/claude-task-manager/docs/session-workspace-binding.md +33 -0
  44. package/template/claude-task-manager/docs/skill-intent-resolution-design.md +72 -0
  45. package/template/claude-task-manager/docs/walle-mcp-supervisor-health.md +86 -0
  46. package/template/claude-task-manager/docs/walle-relay-phone-access-design.md +24 -15
  47. package/template/claude-task-manager/docs/walle-session-history-hydration.md +114 -0
  48. package/template/claude-task-manager/docs/walle-session-input-queue.md +104 -0
  49. package/template/claude-task-manager/docs/walle-session-model-catalog.md +90 -0
  50. package/template/claude-task-manager/docs/walle-session-model-preferences.md +15 -6
  51. package/template/claude-task-manager/git-utils.js +897 -27
  52. package/template/claude-task-manager/lib/agent-capabilities.js +33 -0
  53. package/template/claude-task-manager/lib/agent-cli-cache.js +37 -7
  54. package/template/claude-task-manager/lib/agent-hooks-installer.js +26 -2
  55. package/template/claude-task-manager/lib/agent-presets.js +17 -1
  56. package/template/claude-task-manager/lib/all-sessions-query.js +108 -0
  57. package/template/claude-task-manager/lib/approval-ai-refinement.js +488 -0
  58. package/template/claude-task-manager/lib/approval-self-adapt.js +168 -0
  59. package/template/claude-task-manager/lib/async-semaphore.js +44 -0
  60. package/template/claude-task-manager/lib/auth-context.js +5 -0
  61. package/template/claude-task-manager/lib/auth-rate-limit.js +47 -4
  62. package/template/claude-task-manager/lib/auth-rules.js +29 -2
  63. package/template/claude-task-manager/lib/auto-approval-verifier.js +129 -16
  64. package/template/claude-task-manager/lib/background-llm.js +144 -17
  65. package/template/claude-task-manager/lib/branch-inventory.js +212 -0
  66. package/template/claude-task-manager/lib/claude-desktop-sessions.js +15 -3
  67. package/template/claude-task-manager/lib/coalesce-sync-frames.js +151 -0
  68. package/template/claude-task-manager/lib/codex-launch-health.js +762 -0
  69. package/template/claude-task-manager/lib/codex-transcript-pager.js +51 -0
  70. package/template/claude-task-manager/lib/codex-zst.js +124 -0
  71. package/template/claude-task-manager/lib/coding-agent-models.js +233 -30
  72. package/template/claude-task-manager/lib/connection-health.js +232 -0
  73. package/template/claude-task-manager/lib/conversation-blob-parser.js +42 -0
  74. package/template/claude-task-manager/lib/conversation-tail-merge.js +89 -26
  75. package/template/claude-task-manager/lib/ctm-session-context-api.js +39 -10
  76. package/template/claude-task-manager/lib/cursor-conversation-store.js +354 -0
  77. package/template/claude-task-manager/lib/db-owner-worker-client.js +315 -0
  78. package/template/claude-task-manager/lib/document-review.js +141 -6
  79. package/template/claude-task-manager/lib/escalation-review.js +152 -0
  80. package/template/claude-task-manager/lib/graceful-shutdown.js +159 -0
  81. package/template/claude-task-manager/lib/headless-term-service.js +678 -0
  82. package/template/claude-task-manager/lib/heavy-worker-fallback.js +38 -0
  83. package/template/claude-task-manager/lib/jsonl-conversation-parser.js +542 -0
  84. package/template/claude-task-manager/lib/jsonl-range-reader.js +112 -0
  85. package/template/claude-task-manager/lib/main-db-census.js +216 -0
  86. package/template/claude-task-manager/lib/message-pagination.js +106 -4
  87. package/template/claude-task-manager/lib/microsoft-dev-tunnel-setup.js +750 -26
  88. package/template/claude-task-manager/lib/mobile-auth-api.js +274 -7
  89. package/template/claude-task-manager/lib/mobile-auth-store.js +592 -10
  90. package/template/claude-task-manager/lib/mobile-notification-dispatcher.js +15 -0
  91. package/template/claude-task-manager/lib/model-overview-brain-fallback.js +311 -0
  92. package/template/claude-task-manager/lib/model-overview-cache.js +141 -0
  93. package/template/claude-task-manager/lib/models-health-routing-notice.js +126 -0
  94. package/template/claude-task-manager/lib/node-pin-guard.js +93 -0
  95. package/template/claude-task-manager/lib/perf-tracker.js +242 -6
  96. package/template/claude-task-manager/lib/permission-match.js +76 -0
  97. package/template/claude-task-manager/lib/permission-sync.js +133 -20
  98. package/template/claude-task-manager/lib/process-title.js +35 -0
  99. package/template/claude-task-manager/lib/prompt-executions-query.js +25 -0
  100. package/template/claude-task-manager/lib/prompt-index-disk-cache.js +44 -0
  101. package/template/claude-task-manager/lib/prompt-intent.js +132 -0
  102. package/template/claude-task-manager/lib/provider-user-context.js +34 -0
  103. package/template/claude-task-manager/lib/read-pool-client.js +313 -0
  104. package/template/claude-task-manager/lib/readpool-breaker.js +31 -0
  105. package/template/claude-task-manager/lib/recent-sessions-breaker.js +12 -0
  106. package/template/claude-task-manager/lib/remote-feedback-client.js +72 -0
  107. package/template/claude-task-manager/lib/remote-relay-protocol.js +37 -4
  108. package/template/claude-task-manager/lib/remote-relay-store.js +159 -0
  109. package/template/claude-task-manager/lib/remote-submission-observer.js +278 -0
  110. package/template/claude-task-manager/lib/restart-guard.js +109 -0
  111. package/template/claude-task-manager/lib/restore-interruption-detector.js +439 -0
  112. package/template/claude-task-manager/lib/restore-policy.js +13 -0
  113. package/template/claude-task-manager/lib/restore-resume-batch.js +74 -0
  114. package/template/claude-task-manager/lib/restore-runtime.js +68 -0
  115. package/template/claude-task-manager/lib/restore-storm.js +34 -0
  116. package/template/claude-task-manager/lib/resume-cwd.js +36 -0
  117. package/template/claude-task-manager/lib/resume-preflight.js +313 -0
  118. package/template/claude-task-manager/lib/runtime-work-registry.js +444 -0
  119. package/template/claude-task-manager/lib/sanitize-openai-auth.js +31 -0
  120. package/template/claude-task-manager/lib/scheduler.js +21 -1
  121. package/template/claude-task-manager/lib/scrollback-snapshot-store.js +159 -0
  122. package/template/claude-task-manager/lib/serial-task-queue.js +64 -0
  123. package/template/claude-task-manager/lib/server-listeners.js +239 -0
  124. package/template/claude-task-manager/lib/session-capture.js +42 -7
  125. package/template/claude-task-manager/lib/session-content-backfill.js +131 -0
  126. package/template/claude-task-manager/lib/session-history.js +388 -43
  127. package/template/claude-task-manager/lib/session-host-manager.js +287 -0
  128. package/template/claude-task-manager/lib/session-image-refs.js +209 -0
  129. package/template/claude-task-manager/lib/session-jobs.js +399 -59
  130. package/template/claude-task-manager/lib/session-prompt-index.js +137 -0
  131. package/template/claude-task-manager/lib/session-restore.js +53 -0
  132. package/template/claude-task-manager/lib/session-standup.js +123 -23
  133. package/template/claude-task-manager/lib/session-state-bus.js +14 -0
  134. package/template/claude-task-manager/lib/session-stream.js +64 -16
  135. package/template/claude-task-manager/lib/session-timeline-summary.js +260 -0
  136. package/template/claude-task-manager/lib/session-token-usage.js +494 -0
  137. package/template/claude-task-manager/lib/session-workspace-binding.js +356 -0
  138. package/template/claude-task-manager/lib/setup-network-config.js +9 -0
  139. package/template/claude-task-manager/lib/size-cap.js +45 -0
  140. package/template/claude-task-manager/lib/size-cap.test.js +62 -0
  141. package/template/claude-task-manager/lib/skill-autocomplete.js +180 -1
  142. package/template/claude-task-manager/lib/skill-intent-resolver.js +304 -0
  143. package/template/claude-task-manager/lib/sqlite-driver.js +19 -3
  144. package/template/claude-task-manager/lib/standup-attention.js +7 -3
  145. package/template/claude-task-manager/lib/status-authority.js +39 -0
  146. package/template/claude-task-manager/lib/status-hooks.js +4 -0
  147. package/template/claude-task-manager/lib/storage-migration.js +235 -0
  148. package/template/claude-task-manager/lib/structured-capture.js +298 -0
  149. package/template/claude-task-manager/lib/sync-io-census.js +163 -0
  150. package/template/claude-task-manager/lib/tailscale-setup.js +6 -0
  151. package/template/claude-task-manager/lib/terminal-activity-evidence.js +33 -0
  152. package/template/claude-task-manager/lib/terminal-choice.js +364 -0
  153. package/template/claude-task-manager/lib/terminal-control-sanitize.js +17 -0
  154. package/template/claude-task-manager/lib/terminal-fingerprint.js +48 -0
  155. package/template/claude-task-manager/lib/terminal-output-flush.js +84 -0
  156. package/template/claude-task-manager/lib/timeline-order.js +122 -0
  157. package/template/claude-task-manager/lib/transcript-store.js +348 -43
  158. package/template/claude-task-manager/lib/transport-security.js +84 -1
  159. package/template/claude-task-manager/lib/wait-state.js +184 -0
  160. package/template/claude-task-manager/lib/walle-client.js +47 -5
  161. package/template/claude-task-manager/lib/walle-ctm-history.js +564 -4
  162. package/template/claude-task-manager/lib/walle-external-actions.js +135 -16
  163. package/template/claude-task-manager/lib/walle-history-hydration.js +46 -0
  164. package/template/claude-task-manager/lib/walle-native-health.js +403 -0
  165. package/template/claude-task-manager/lib/walle-repair.js +701 -0
  166. package/template/claude-task-manager/lib/walle-session-cache.js +109 -0
  167. package/template/claude-task-manager/lib/walle-session-context.js +57 -21
  168. package/template/claude-task-manager/lib/walle-session-model-catalog.js +34 -0
  169. package/template/claude-task-manager/lib/walle-supervisor.js +539 -63
  170. package/template/claude-task-manager/lib/walle-transcript.js +52 -0
  171. package/template/claude-task-manager/lib/worktree-active-sync.js +11 -7
  172. package/template/claude-task-manager/lib/worktree-cwd.js +32 -1
  173. package/template/claude-task-manager/package.json +1 -1
  174. package/template/claude-task-manager/prompt-harvest.js +89 -66
  175. package/template/claude-task-manager/providers/claude-code.js +51 -3
  176. package/template/claude-task-manager/providers/cursor.js +140 -45
  177. package/template/claude-task-manager/public/css/reviews.css +551 -61
  178. package/template/claude-task-manager/public/css/setup.css +191 -0
  179. package/template/claude-task-manager/public/css/walle-session.css +865 -10
  180. package/template/claude-task-manager/public/css/walle.css +154 -0
  181. package/template/claude-task-manager/public/designs/ai-providers-consolidation-v2.html +830 -0
  182. package/template/claude-task-manager/public/index.html +18516 -2058
  183. package/template/claude-task-manager/public/ipad.html +363 -0
  184. package/template/claude-task-manager/public/js/document-review-links.js +301 -0
  185. package/template/claude-task-manager/public/js/image-normalize.js +69 -36
  186. package/template/claude-task-manager/public/js/message-renderer.js +1265 -77
  187. package/template/claude-task-manager/public/js/prompts.js +66 -29
  188. package/template/claude-task-manager/public/js/reviews.js +901 -133
  189. package/template/claude-task-manager/public/js/session-activity-utils.js +11 -1
  190. package/template/claude-task-manager/public/js/session-search-utils.js +94 -10
  191. package/template/claude-task-manager/public/js/session-status-precedence.js +23 -5
  192. package/template/claude-task-manager/public/js/setup.js +1273 -176
  193. package/template/claude-task-manager/public/js/stream-view.js +691 -73
  194. package/template/claude-task-manager/public/js/terminal-reconciler.js +210 -0
  195. package/template/claude-task-manager/public/js/walle-session.js +2455 -158
  196. package/template/claude-task-manager/public/js/walle.js +455 -28
  197. package/template/claude-task-manager/public/m/app.css +2909 -262
  198. package/template/claude-task-manager/public/m/app.js +6601 -398
  199. package/template/claude-task-manager/public/m/claim.html +224 -17
  200. package/template/claude-task-manager/public/m/index.html +117 -21
  201. package/template/claude-task-manager/public/m/sw.js +3 -1
  202. package/template/claude-task-manager/public/manifest.json +2 -2
  203. package/template/claude-task-manager/public/prompts.html +30 -14
  204. package/template/claude-task-manager/queue-engine.js +507 -28
  205. package/template/claude-task-manager/scripts/repair-claude-session-images.js +27 -8
  206. package/template/claude-task-manager/server.js +14341 -2197
  207. package/template/claude-task-manager/session-integrity.js +160 -18
  208. package/template/claude-task-manager/session-search-ranking.js +1 -0
  209. package/template/claude-task-manager/session-utils.js +25 -5
  210. package/template/claude-task-manager/workers/approval-blocklist.js +96 -6
  211. package/template/claude-task-manager/workers/approval-widget-validator.js +14 -8
  212. package/template/claude-task-manager/workers/conversation-import-worker.js +11 -50
  213. package/template/claude-task-manager/workers/db-owner-worker.js +386 -0
  214. package/template/claude-task-manager/workers/harvest-worker.js +9 -55
  215. package/template/claude-task-manager/workers/headless-term-worker.js +9 -530
  216. package/template/claude-task-manager/workers/read-pool-worker.js +387 -0
  217. package/template/claude-task-manager/workers/scrollback-worker.js +11 -72
  218. package/template/claude-task-manager/workers/session-host-process.js +146 -0
  219. package/template/claude-task-manager/workers/session-integrity-worker.js +10 -54
  220. package/template/claude-task-manager/workers/state-detectors/base.js +18 -1
  221. package/template/claude-task-manager/workers/state-detectors/claude-code.js +182 -9
  222. package/template/claude-task-manager/workers/state-detectors/codex.js +150 -2
  223. package/template/claude-task-manager/workers/state-detectors/cursor.js +127 -0
  224. package/template/claude-task-manager/workers/state-detectors/gemini.js +21 -0
  225. package/template/claude-task-manager/workers/state-detectors/index.js +29 -0
  226. package/template/claude-task-manager/workers/state-detectors/opencode.js +103 -0
  227. package/template/docs/design/markdown-review-pane.md +206 -0
  228. package/template/docs/designs/2026-05-17-portkey-gateway-provider-ux.md +129 -38
  229. package/template/docs/designs/2026-05-20-mobile-worktree-finish-command.md +27 -0
  230. package/template/docs/designs/2026-05-22-ai-configuration-consolidation.md +248 -0
  231. package/template/docs/designs/ai-configuration-consolidation-mock.html +812 -0
  232. package/template/docs/private-memory-and-pii-policy.md +69 -0
  233. package/template/package.json +2 -1
  234. package/template/scripts/check-private-data.js +201 -0
  235. package/template/shared/sqlite-owner-guard.js +30 -0
  236. package/template/shared/sqlite-owner-write-queue.js +225 -0
  237. package/template/shared/sqlite-storage-policy.js +111 -0
  238. package/template/shared/sqlite-write-lock.js +428 -0
  239. package/template/wall-e/agent-runners/claude-code.js +5 -0
  240. package/template/wall-e/agent.js +166 -22
  241. package/template/wall-e/api-walle.js +524 -70
  242. package/template/wall-e/auth/provider-flows.js +11 -1
  243. package/template/wall-e/bin/walle-mcp-stdio.js +341 -17
  244. package/template/wall-e/brain.js +1614 -141
  245. package/template/wall-e/chat/attachment-blocks.js +96 -0
  246. package/template/wall-e/chat/attachments.js +2 -1
  247. package/template/wall-e/chat/capability-resolver.js +7 -7
  248. package/template/wall-e/chat/context-messages.js +28 -0
  249. package/template/wall-e/chat/conversation-frame.js +630 -0
  250. package/template/wall-e/chat/provider-messages.js +125 -0
  251. package/template/wall-e/chat.js +1002 -233
  252. package/template/wall-e/coding/acceptance-contract.js +170 -0
  253. package/template/wall-e/coding/acp-adapter.js +1 -1
  254. package/template/wall-e/coding/agent-catalog.js +3 -0
  255. package/template/wall-e/coding/artifact-store.js +93 -0
  256. package/template/wall-e/coding/capability-router.js +120 -0
  257. package/template/wall-e/coding/coding-run-controller.js +423 -0
  258. package/template/wall-e/coding/compaction-service.js +157 -12
  259. package/template/wall-e/coding/frontend-verification.js +258 -0
  260. package/template/wall-e/coding/lifecycle-hooks.js +75 -0
  261. package/template/wall-e/coding/local-preview-contract.js +157 -0
  262. package/template/wall-e/coding/permission-service.js +57 -13
  263. package/template/wall-e/coding/prompt-bundle.js +19 -1
  264. package/template/wall-e/coding/prompt-section-registry.js +227 -0
  265. package/template/wall-e/coding/provider-compat.js +15 -0
  266. package/template/wall-e/coding/runtime-events.js +224 -0
  267. package/template/wall-e/coding/runtime-mode.js +3 -0
  268. package/template/wall-e/coding/side-git-snapshot.js +160 -4
  269. package/template/wall-e/coding/snapshot-service.js +143 -1
  270. package/template/wall-e/coding/stream-processor.js +388 -34
  271. package/template/wall-e/coding/task-tool.js +141 -4
  272. package/template/wall-e/coding/tool-execution-controller.js +365 -0
  273. package/template/wall-e/coding/tool-registry.js +43 -5
  274. package/template/wall-e/coding/user-hooks.js +217 -0
  275. package/template/wall-e/coding-orchestrator.js +1330 -221
  276. package/template/wall-e/coding-prompts.js +20 -4
  277. package/template/wall-e/context/context-builder.js +15 -2
  278. package/template/wall-e/decision/confidence.js +1 -1
  279. package/template/wall-e/docs/coding-acceptance-contract.md +41 -0
  280. package/template/wall-e/docs/external-action-controller.md +26 -6
  281. package/template/wall-e/docs/telemetry-lifecycle.md +8 -2
  282. package/template/wall-e/embeddings.js +591 -53
  283. package/template/wall-e/external-action-controller.js +12 -0
  284. package/template/wall-e/http/auth.js +1 -0
  285. package/template/wall-e/http/chat-api.js +46 -11
  286. package/template/wall-e/http/model-admin.js +836 -34
  287. package/template/wall-e/lib/boot-profile.js +88 -0
  288. package/template/wall-e/lib/event-loop-monitor.js +93 -0
  289. package/template/wall-e/lib/service-health.js +194 -0
  290. package/template/wall-e/llm/anthropic.js +130 -5
  291. package/template/wall-e/llm/client.js +266 -63
  292. package/template/wall-e/llm/default-fallback.js +382 -0
  293. package/template/wall-e/llm/health.js +19 -0
  294. package/template/wall-e/llm/message-guard.js +78 -0
  295. package/template/wall-e/llm/model-catalog.js +252 -1
  296. package/template/wall-e/llm/openai.js +26 -4
  297. package/template/wall-e/llm/portkey-sync.js +654 -0
  298. package/template/wall-e/llm/provider-error.js +30 -2
  299. package/template/wall-e/llm/registry.js +5 -1
  300. package/template/wall-e/llm/request-compat.js +67 -0
  301. package/template/wall-e/loops/backfill.js +79 -23
  302. package/template/wall-e/loops/brain-optimize.js +67 -0
  303. package/template/wall-e/loops/ingest.js +25 -10
  304. package/template/wall-e/loops/question-digest.js +160 -0
  305. package/template/wall-e/loops/reflect.js +6 -4
  306. package/template/wall-e/loops/think.js +39 -12
  307. package/template/wall-e/mcp-server.js +318 -36
  308. package/template/wall-e/memory/ctm-context-client.js +52 -14
  309. package/template/wall-e/memory/ctm-operational-context.js +237 -0
  310. package/template/wall-e/memory/ctm-prompt-executions-client.js +128 -0
  311. package/template/wall-e/memory/ctm-session-context.js +111 -63
  312. package/template/wall-e/prompts/coding/deepseek.txt +3 -0
  313. package/template/wall-e/prompts/coding/gemini.txt +6 -0
  314. package/template/wall-e/prompts/coding/gpt.txt +6 -0
  315. package/template/wall-e/prompts/coding/local.txt +7 -0
  316. package/template/wall-e/runtime/decision-hooks.js +115 -0
  317. package/template/wall-e/runtime/devbox-gateway.js +82 -8
  318. package/template/wall-e/runtime/prompt-manifest.js +86 -0
  319. package/template/wall-e/runtime/tool-executor.js +269 -0
  320. package/template/wall-e/runtime/tool-result-envelope.js +138 -0
  321. package/template/wall-e/runtime/transcript-projection.js +60 -0
  322. package/template/wall-e/runtime/walle-runtime.js +224 -0
  323. package/template/wall-e/scripts/db-optimize/migrate.js +162 -0
  324. package/template/wall-e/scripts/db-optimize/recall-eval.js +117 -0
  325. package/template/wall-e/server.js +15 -0
  326. package/template/wall-e/session-files.js +9 -0
  327. package/template/wall-e/skills/_bundled/google-calendar/run.js +1 -1
  328. package/template/wall-e/skills/_bundled/gws-workspace/run.js +1 -1
  329. package/template/wall-e/skills/_bundled/slack-mentions/run.js +76 -6
  330. package/template/wall-e/skills/claude-code-reader.js +7 -3
  331. package/template/wall-e/skills/script-skill-runner.js +10 -0
  332. package/template/wall-e/skills/skill-planner.js +38 -0
  333. package/template/wall-e/tools/builtin-middleware.js +19 -9
  334. package/template/wall-e/tools/local-tools.js +1428 -16
  335. package/template/wall-e/tools/permission-checker.js +73 -5
  336. package/template/wall-e/tools/question-manager.js +117 -7
  337. package/template/wall-e/training/harvester.js +12 -28
  338. package/template/wall-e/training/replay.js +25 -80
  339. package/template/website/index.html +10 -10
  340. package/template/wall-e/eval/ab-test.js +0 -203
  341. package/template/wall-e/eval/agent-runner.js +0 -772
  342. package/template/wall-e/eval/agent-scorer.js +0 -461
  343. package/template/wall-e/eval/aggregator.js +0 -414
  344. package/template/wall-e/eval/allowed-test-commands.js +0 -34
  345. package/template/wall-e/eval/benchmark-generator.js +0 -113
  346. package/template/wall-e/eval/benchmarks/chat-eval.json +0 -1662
  347. package/template/wall-e/eval/benchmarks/chat.json +0 -82
  348. package/template/wall-e/eval/benchmarks/coding-agent-real.json +0 -1
  349. package/template/wall-e/eval/benchmarks/coding-agent.json +0 -1581
  350. package/template/wall-e/eval/benchmarks/coding.json +0 -122
  351. package/template/wall-e/eval/benchmarks/memory-retrieval.json +0 -234
  352. package/template/wall-e/eval/benchmarks/reasoning.json +0 -82
  353. package/template/wall-e/eval/benchmarks/swebench-lite-30.json +0 -212
  354. package/template/wall-e/eval/benchmarks.js +0 -669
  355. package/template/wall-e/eval/cc-replay.js +0 -719
  356. package/template/wall-e/eval/chat-eval.js +0 -525
  357. package/template/wall-e/eval/check-keys.js +0 -15
  358. package/template/wall-e/eval/check-providers.js +0 -42
  359. package/template/wall-e/eval/codex-cli-baseline.js +0 -669
  360. package/template/wall-e/eval/coding-agent-real.js +0 -570
  361. package/template/wall-e/eval/context-compactor.js +0 -251
  362. package/template/wall-e/eval/debug-agent003.js +0 -68
  363. package/template/wall-e/eval/diagnostics.js +0 -216
  364. package/template/wall-e/eval/eval-orchestrator.js +0 -642
  365. package/template/wall-e/eval/evaluate.js +0 -202
  366. package/template/wall-e/eval/evaluator.js +0 -373
  367. package/template/wall-e/eval/exporter.js +0 -212
  368. package/template/wall-e/eval/fixtures/express-basic/package.json +0 -9
  369. package/template/wall-e/eval/fixtures/express-basic/server.js +0 -115
  370. package/template/wall-e/eval/fixtures/express-basic/test.js +0 -83
  371. package/template/wall-e/eval/fixtures/express-buggy/package.json +0 -9
  372. package/template/wall-e/eval/fixtures/express-buggy/server.js +0 -113
  373. package/template/wall-e/eval/fixtures/express-buggy/test.js +0 -83
  374. package/template/wall-e/eval/fixtures/express-buggy-items/package.json +0 -9
  375. package/template/wall-e/eval/fixtures/express-buggy-items/server.js +0 -112
  376. package/template/wall-e/eval/fixtures/express-buggy-items/test.js +0 -83
  377. package/template/wall-e/eval/fixtures/express-buggy-search/package.json +0 -9
  378. package/template/wall-e/eval/fixtures/express-buggy-search/server.js +0 -121
  379. package/template/wall-e/eval/fixtures/express-buggy-search/test.js +0 -83
  380. package/template/wall-e/eval/fixtures/express-rename-data/data.js +0 -34
  381. package/template/wall-e/eval/fixtures/express-rename-data/package.json +0 -9
  382. package/template/wall-e/eval/fixtures/express-rename-data/server.js +0 -97
  383. package/template/wall-e/eval/fixtures/express-rename-data/test.js +0 -88
  384. package/template/wall-e/eval/fixtures/express-xss/package.json +0 -12
  385. package/template/wall-e/eval/fixtures/express-xss/server.js +0 -90
  386. package/template/wall-e/eval/fixtures/express-xss/test.js +0 -67
  387. package/template/wall-e/eval/fixtures/express-xss/views/profile.ejs +0 -9
  388. package/template/wall-e/eval/fixtures/fullstack-app/config/default.js +0 -9
  389. package/template/wall-e/eval/fixtures/fullstack-app/config/test.js +0 -13
  390. package/template/wall-e/eval/fixtures/fullstack-app/package.json +0 -11
  391. package/template/wall-e/eval/fixtures/fullstack-app/public/css/style.css +0 -137
  392. package/template/wall-e/eval/fixtures/fullstack-app/public/index.html +0 -46
  393. package/template/wall-e/eval/fixtures/fullstack-app/public/js/app.js +0 -121
  394. package/template/wall-e/eval/fixtures/fullstack-app/public/js/auth.js +0 -71
  395. package/template/wall-e/eval/fixtures/fullstack-app/public/js/items.js +0 -80
  396. package/template/wall-e/eval/fixtures/fullstack-app/public/js/users.js +0 -46
  397. package/template/wall-e/eval/fixtures/fullstack-app/public/login.html +0 -45
  398. package/template/wall-e/eval/fixtures/fullstack-app/public/register.html +0 -38
  399. package/template/wall-e/eval/fixtures/fullstack-app/scripts/migrate.js +0 -23
  400. package/template/wall-e/eval/fixtures/fullstack-app/scripts/seed.js +0 -46
  401. package/template/wall-e/eval/fixtures/fullstack-app/server/db.js +0 -99
  402. package/template/wall-e/eval/fixtures/fullstack-app/server/index.js +0 -94
  403. package/template/wall-e/eval/fixtures/fullstack-app/server/middleware/auth.js +0 -19
  404. package/template/wall-e/eval/fixtures/fullstack-app/server/middleware/logger.js +0 -19
  405. package/template/wall-e/eval/fixtures/fullstack-app/server/router.js +0 -50
  406. package/template/wall-e/eval/fixtures/fullstack-app/server/routes/auth.js +0 -69
  407. package/template/wall-e/eval/fixtures/fullstack-app/server/routes/health.js +0 -23
  408. package/template/wall-e/eval/fixtures/fullstack-app/server/routes/items.js +0 -88
  409. package/template/wall-e/eval/fixtures/fullstack-app/server/routes/users.js +0 -75
  410. package/template/wall-e/eval/fixtures/fullstack-app/server/test.js +0 -198
  411. package/template/wall-e/eval/fixtures/fullstack-app/server/utils/response.js +0 -34
  412. package/template/wall-e/eval/fixtures/fullstack-app/server/utils/validate.js +0 -26
  413. package/template/wall-e/eval/fixtures/fullstack-app/server.js +0 -8
  414. package/template/wall-e/eval/fixtures/fullstack-app/test.js +0 -12
  415. package/template/wall-e/eval/fixtures/monorepo-basic/package.json +0 -8
  416. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/data.js +0 -58
  417. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/middleware.js +0 -46
  418. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/package.json +0 -8
  419. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/routes.js +0 -64
  420. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/server.js +0 -56
  421. package/template/wall-e/eval/fixtures/monorepo-basic/packages/api/test.js +0 -116
  422. package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/commands.js +0 -61
  423. package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/index.js +0 -62
  424. package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/output.js +0 -43
  425. package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/package.json +0 -11
  426. package/template/wall-e/eval/fixtures/monorepo-basic/packages/cli/test.js +0 -44
  427. package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/formatters.js +0 -43
  428. package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/index.js +0 -12
  429. package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/package.json +0 -5
  430. package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/test.js +0 -55
  431. package/template/wall-e/eval/fixtures/monorepo-basic/packages/shared/validators.js +0 -29
  432. package/template/wall-e/eval/fixtures/monorepo-basic/test.js +0 -46
  433. package/template/wall-e/eval/fixtures/node-cli/index.js +0 -78
  434. package/template/wall-e/eval/fixtures/node-cli/package.json +0 -10
  435. package/template/wall-e/eval/fixtures/node-cli/test.js +0 -57
  436. package/template/wall-e/eval/fixtures/node-typed/package.json +0 -8
  437. package/template/wall-e/eval/fixtures/node-typed/src/handlers.js +0 -31
  438. package/template/wall-e/eval/fixtures/node-typed/src/utils.js +0 -33
  439. package/template/wall-e/eval/fixtures/node-typed/test.js +0 -36
  440. package/template/wall-e/eval/fixtures/python-flask/app.py +0 -14
  441. package/template/wall-e/eval/fixtures/python-flask/requirements.txt +0 -2
  442. package/template/wall-e/eval/fixtures/python-flask/test_app.py +0 -25
  443. package/template/wall-e/eval/fixtures/wall-e-subset/brain.js +0 -105
  444. package/template/wall-e/eval/fixtures/wall-e-subset/eval/aggregator.js +0 -101
  445. package/template/wall-e/eval/fixtures/wall-e-subset/eval/benchmarks/chat.json +0 -20
  446. package/template/wall-e/eval/fixtures/wall-e-subset/eval/benchmarks/coding.json +0 -32
  447. package/template/wall-e/eval/fixtures/wall-e-subset/eval/benchmarks.js +0 -64
  448. package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/package.json +0 -6
  449. package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/server.js +0 -31
  450. package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/test.js +0 -18
  451. package/template/wall-e/eval/fixtures/wall-e-subset/eval/fixtures/simple-project/utils.js +0 -34
  452. package/template/wall-e/eval/fixtures/wall-e-subset/eval/runner.js +0 -104
  453. package/template/wall-e/eval/fixtures/wall-e-subset/eval/scorer.js +0 -73
  454. package/template/wall-e/eval/fixtures/wall-e-subset/eval/test.js +0 -134
  455. package/template/wall-e/eval/fixtures/wall-e-subset/llm/client.js +0 -99
  456. package/template/wall-e/eval/fixtures/wall-e-subset/llm/providers.js +0 -63
  457. package/template/wall-e/eval/fixtures/wall-e-subset/llm/test.js +0 -70
  458. package/template/wall-e/eval/fixtures/wall-e-subset/package.json +0 -10
  459. package/template/wall-e/eval/fixtures/wall-e-subset/test.js +0 -86
  460. package/template/wall-e/eval/harvester.js +0 -685
  461. package/template/wall-e/eval/head-to-head.js +0 -388
  462. package/template/wall-e/eval/humaneval-adapter.js +0 -321
  463. package/template/wall-e/eval/list-models.js +0 -31
  464. package/template/wall-e/eval/livecodebench-adapter.js +0 -291
  465. package/template/wall-e/eval/mail-integration.js +0 -443
  466. package/template/wall-e/eval/manifest.js +0 -186
  467. package/template/wall-e/eval/meta-harness/adapters/coding-agent.js +0 -57
  468. package/template/wall-e/eval/meta-harness/bootstrap-snapshot.js +0 -149
  469. package/template/wall-e/eval/meta-harness/candidate-store.js +0 -117
  470. package/template/wall-e/eval/meta-harness/cli.js +0 -86
  471. package/template/wall-e/eval/meta-harness/domain-spec.js +0 -154
  472. package/template/wall-e/eval/meta-harness/domains/coding-agent.domain.json +0 -84
  473. package/template/wall-e/eval/meta-harness/examples/env-bootstrap-candidate.js +0 -29
  474. package/template/wall-e/eval/meta-harness/experience-store.js +0 -174
  475. package/template/wall-e/eval/meta-harness/frontier.js +0 -96
  476. package/template/wall-e/eval/meta-harness/harness-interface.js +0 -90
  477. package/template/wall-e/eval/meta-harness/leakage-guard.js +0 -80
  478. package/template/wall-e/eval/meta-harness/optimizer.js +0 -207
  479. package/template/wall-e/eval/meta-harness/proposer-runner.js +0 -110
  480. package/template/wall-e/eval/meta-harness/reporting.js +0 -58
  481. package/template/wall-e/eval/meta-harness/telemetry.js +0 -27
  482. package/template/wall-e/eval/meta-harness/validation.js +0 -81
  483. package/template/wall-e/eval/promoter.js +0 -228
  484. package/template/wall-e/eval/provider-normalizer.js +0 -33
  485. package/template/wall-e/eval/replay.js +0 -395
  486. package/template/wall-e/eval/run-agent-benchmarks.js +0 -386
  487. package/template/wall-e/eval/run-codex-cli-baseline.js +0 -177
  488. package/template/wall-e/eval/run-coding-agent-real.js +0 -187
  489. package/template/wall-e/eval/run-eval.js +0 -435
  490. package/template/wall-e/eval/run-model-comparison.js +0 -142
  491. package/template/wall-e/eval/session-evaluator.js +0 -187
  492. package/template/wall-e/eval/session-miner.js +0 -207
  493. package/template/wall-e/eval/session-retrieval-benchmark.js +0 -150
  494. package/template/wall-e/eval/session-transcripts.js +0 -509
  495. package/template/wall-e/eval/shadow.js +0 -161
  496. package/template/wall-e/eval/swebench-adapter.js +0 -345
  497. package/template/wall-e/eval/swebench-docker.js +0 -192
  498. package/template/wall-e/eval/train.py +0 -320
  499. package/template/wall-e/eval/trainer.js +0 -232
  500. package/template/wall-e/eval/weekly-eval-loop.js +0 -241
@@ -3,7 +3,9 @@ html[data-theme="dark"] {
3
3
  color-scheme: dark;
4
4
  --bg: #101419;
5
5
  --bg-elev: #151b22;
6
+ --bg-elev-2: #111820;
6
7
  --bg-soft: #1d252d;
8
+ --panel: #151b22;
7
9
  --line: #33404d;
8
10
  --line-strong: #4b5a67;
9
11
  --fg: #edf2f7;
@@ -15,13 +17,18 @@ html[data-theme="dark"] {
15
17
  --red: #ff7f8f;
16
18
  --ink: #0c1116;
17
19
  --nav-h: 70px;
20
+ --status-tabs-h: 58px;
21
+ --app-topbar-h: 72px;
22
+ --app-shell-top: calc(var(--app-topbar-h) + env(safe-area-inset-top));
18
23
  }
19
24
 
20
25
  html[data-theme="light"] {
21
26
  color-scheme: light;
22
27
  --bg: #f6f7f9;
23
28
  --bg-elev: #ffffff;
29
+ --bg-elev-2: #f8fafc;
24
30
  --bg-soft: #eceef2;
31
+ --panel: #ffffff;
25
32
  --line: rgba(15,23,42,0.10);
26
33
  --line-strong: rgba(15,23,42,0.18);
27
34
  --fg: #0f172a;
@@ -37,17 +44,34 @@ html[data-theme="light"] {
37
44
  * { box-sizing: border-box; }
38
45
 
39
46
  html {
47
+ width: 100%;
48
+ max-width: 100%;
49
+ height: 100%;
40
50
  min-height: 100%;
41
51
  background: var(--bg);
52
+ overflow-x: clip;
42
53
  }
43
54
 
44
55
  body {
45
56
  margin: 0;
57
+ width: 100%;
58
+ max-width: 100%;
59
+ height: 100%;
46
60
  min-height: 100vh;
61
+ min-height: 100dvh;
47
62
  background: var(--bg);
48
63
  color: var(--fg);
49
64
  font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
50
65
  letter-spacing: 0;
66
+ overflow-x: clip;
67
+ overscroll-behavior-x: none;
68
+ }
69
+
70
+ @supports not (overflow: clip) {
71
+ html,
72
+ body {
73
+ overflow-x: hidden;
74
+ }
51
75
  }
52
76
 
53
77
  button,
@@ -85,6 +109,7 @@ body.detail-sheet-open {
85
109
 
86
110
  body.detail-sheet-open .app-main,
87
111
  body.detail-sheet-open .bottom-nav,
112
+ body.detail-sheet-open .status-summary,
88
113
  body.detail-sheet-open .app-topbar {
89
114
  pointer-events: none;
90
115
  user-select: none;
@@ -111,7 +136,12 @@ body.detail-sheet-open .app-topbar {
111
136
  }
112
137
 
113
138
  .mobile-app {
114
- padding: env(safe-area-inset-top) 0 calc(var(--nav-h) + env(safe-area-inset-bottom));
139
+ max-width: 100%;
140
+ height: 100vh;
141
+ height: 100dvh;
142
+ padding: 0;
143
+ overflow: hidden;
144
+ overscroll-behavior: none;
115
145
  }
116
146
 
117
147
  .app-topbar,
@@ -130,6 +160,64 @@ body.detail-sheet-open .app-topbar {
130
160
  backdrop-filter: blur(12px);
131
161
  }
132
162
 
163
+ .app-topbar {
164
+ position: fixed;
165
+ left: 0;
166
+ right: 0;
167
+ min-height: var(--app-shell-top);
168
+ padding: calc(12px + env(safe-area-inset-top)) 16px 12px;
169
+ }
170
+
171
+ .app-reload-banner {
172
+ position: fixed;
173
+ top: var(--app-shell-top);
174
+ left: 10px;
175
+ right: 10px;
176
+ z-index: 80;
177
+ display: flex;
178
+ align-items: center;
179
+ gap: 12px;
180
+ padding: 10px 14px;
181
+ border: 1px solid var(--line-strong);
182
+ border-radius: 12px;
183
+ background: color-mix(in srgb, var(--amber) 14%, var(--bg-elev));
184
+ color: var(--fg);
185
+ box-shadow: 0 10px 30px rgba(0,0,0,0.28);
186
+ }
187
+
188
+ .app-reload-banner[hidden] {
189
+ display: none;
190
+ }
191
+
192
+ .app-reload-banner div {
193
+ flex: 1 1 auto;
194
+ min-width: 0;
195
+ }
196
+
197
+ .app-reload-banner strong {
198
+ display: block;
199
+ font-size: 13px;
200
+ line-height: 1.2;
201
+ }
202
+
203
+ .app-reload-banner span {
204
+ display: block;
205
+ margin-top: 2px;
206
+ color: var(--fg-dim);
207
+ font-size: 12px;
208
+ line-height: 1.3;
209
+ }
210
+
211
+ .app-reload-banner button {
212
+ min-height: 36px;
213
+ padding: 0 12px;
214
+ border: 1px solid var(--line-strong);
215
+ border-radius: 999px;
216
+ background: var(--blue);
217
+ color: #fff;
218
+ font-weight: 800;
219
+ }
220
+
133
221
  .app-kicker {
134
222
  color: var(--fg-muted);
135
223
  font-size: 11px;
@@ -178,6 +266,32 @@ h3 {
178
266
  font-size: 18px;
179
267
  }
180
268
 
269
+ .detail-back-btn {
270
+ grid-auto-flow: column;
271
+ gap: 6px;
272
+ width: auto;
273
+ min-width: 52px;
274
+ padding: 0 12px;
275
+ border-color: color-mix(in srgb, var(--blue) 34%, var(--line));
276
+ border-radius: 14px;
277
+ background: color-mix(in srgb, var(--blue) 12%, var(--bg-soft));
278
+ color: var(--blue);
279
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--fg) 7%, transparent);
280
+ }
281
+
282
+ .detail-back-glyph {
283
+ font-size: 20px;
284
+ line-height: 1;
285
+ }
286
+
287
+ .detail-back-label {
288
+ display: none;
289
+ font-size: 13px;
290
+ font-weight: 900;
291
+ letter-spacing: -0.01em;
292
+ line-height: 1;
293
+ }
294
+
181
295
  .connection-chip,
182
296
  .state-chip,
183
297
  .scope-chip {
@@ -193,12 +307,29 @@ h3 {
193
307
  white-space: nowrap;
194
308
  }
195
309
 
310
+ .connection-chip {
311
+ min-height: 40px;
312
+ padding-inline: 12px;
313
+ appearance: none;
314
+ background: transparent;
315
+ cursor: pointer;
316
+ }
317
+
318
+ .connection-chip:active {
319
+ transform: translateY(1px);
320
+ }
321
+
196
322
  .connection-chip.live,
197
323
  .state-chip.running {
198
324
  border-color: rgba(113, 167, 255, 0.45);
199
325
  color: var(--blue);
200
326
  }
201
327
 
328
+ .state-chip.resuming {
329
+ border-color: rgba(224, 175, 104, 0.48);
330
+ color: var(--yellow);
331
+ }
332
+
202
333
  .connection-chip.secure,
203
334
  .state-chip.fresh {
204
335
  border-color: rgba(139, 209, 124, 0.45);
@@ -213,11 +344,25 @@ h3 {
213
344
  }
214
345
 
215
346
  .app-main {
216
- min-height: calc(100vh - var(--nav-h) - 72px);
347
+ position: fixed;
348
+ top: var(--app-shell-top);
349
+ left: 0;
350
+ right: 0;
351
+ bottom: calc(var(--nav-h) + env(safe-area-inset-bottom));
352
+ min-width: 0;
353
+ max-width: 100%;
354
+ min-height: 0;
355
+ overflow-x: clip;
356
+ overflow-y: auto;
357
+ overflow-anchor: none;
358
+ overscroll-behavior-y: contain;
359
+ -webkit-overflow-scrolling: touch;
217
360
  }
218
361
 
219
362
  .mobile-view {
220
363
  display: none;
364
+ min-width: 0;
365
+ max-width: 100%;
221
366
  padding: 14px 0 18px;
222
367
  }
223
368
 
@@ -235,11 +380,13 @@ h3 {
235
380
  .view-content {
236
381
  display: flex;
237
382
  flex-direction: column;
383
+ min-width: 0;
384
+ max-width: 100%;
238
385
  }
239
386
 
240
387
  .section-block {
241
388
  padding: 14px 16px 4px;
242
- scroll-margin-top: calc(84px + env(safe-area-inset-top));
389
+ scroll-margin-top: 16px;
243
390
  transition: background 160ms ease, box-shadow 160ms ease;
244
391
  }
245
392
 
@@ -262,132 +409,453 @@ h3 {
262
409
  text-transform: uppercase;
263
410
  }
264
411
 
412
+ .section-rows {
413
+ display: grid;
414
+ min-width: 0;
415
+ margin: 8px -16px -4px;
416
+ }
417
+
418
+ .section-rows > .empty-state {
419
+ border-top: 1px solid var(--line);
420
+ }
421
+
265
422
  .status-summary {
423
+ position: fixed;
424
+ left: 0;
425
+ right: 0;
426
+ bottom: calc(var(--nav-h) + env(safe-area-inset-bottom));
427
+ z-index: 19;
266
428
  display: grid;
267
429
  grid-template-columns: repeat(3, 1fr);
268
- gap: 8px;
269
- padding: 12px 16px 6px;
430
+ gap: 4px;
431
+ min-height: var(--status-tabs-h);
432
+ padding: 6px 10px;
433
+ border-top: 1px solid var(--line);
434
+ background: rgba(16, 20, 25, 0.96);
435
+ backdrop-filter: blur(12px);
436
+ }
437
+
438
+ body.mobile-app:not([data-mobile-tab="status"]) .status-summary {
439
+ display: none;
440
+ }
441
+
442
+ #view-status .view-content {
443
+ padding-bottom: calc(var(--status-tabs-h) + 16px);
270
444
  }
271
445
 
272
446
  .summary-tile {
273
447
  appearance: none;
274
- text-align: left;
275
- min-height: 72px;
276
- padding: 10px;
277
- border: 1px solid var(--line);
448
+ display: grid;
449
+ align-content: center;
450
+ justify-items: center;
451
+ gap: 2px;
452
+ min-width: 0;
453
+ min-height: 44px;
454
+ padding: 4px 6px;
455
+ border: 1px solid transparent;
278
456
  border-radius: 8px;
279
- background: var(--bg-elev);
457
+ background: transparent;
458
+ color: var(--fg-dim);
280
459
  cursor: pointer;
460
+ text-align: center;
281
461
  touch-action: manipulation;
282
462
  }
283
463
 
284
464
  .summary-tile:active {
285
- background: color-mix(in srgb, var(--blue) 8%, var(--bg-elev));
465
+ background: color-mix(in srgb, var(--blue) 10%, transparent);
286
466
  }
287
467
 
288
468
  .summary-tile strong {
289
469
  display: block;
290
- font-size: 24px;
470
+ color: var(--fg);
471
+ font-size: 18px;
291
472
  line-height: 1;
292
473
  }
293
474
 
294
475
  .summary-tile span {
295
476
  display: block;
296
- margin-top: 6px;
297
- color: var(--fg-dim);
298
- font-size: 12px;
299
- line-height: 1.2;
477
+ margin-top: 0;
478
+ overflow: hidden;
479
+ max-width: 100%;
480
+ color: currentColor;
481
+ font-size: 11px;
482
+ font-weight: 800;
483
+ line-height: 1.15;
484
+ text-overflow: ellipsis;
485
+ white-space: nowrap;
300
486
  }
301
487
 
302
488
  .summary-tile.urgent {
303
489
  border-color: rgba(255, 127, 143, 0.45);
490
+ background: color-mix(in srgb, var(--red) 10%, transparent);
491
+ color: var(--red);
304
492
  }
305
493
 
306
494
  .summary-tile.active {
307
495
  border-color: rgba(113, 167, 255, 0.4);
496
+ background: color-mix(in srgb, var(--blue) 10%, transparent);
497
+ color: var(--blue);
308
498
  }
309
499
 
310
- .home-search {
311
- display: grid;
312
- gap: 6px;
313
- padding: 6px 16px 10px;
500
+ .worktree-summary {
501
+ margin: 4px 0 8px;
502
+ padding: 10px 16px 8px;
503
+ border-top: 1px solid var(--line);
504
+ border-bottom: 1px solid var(--line);
505
+ background: color-mix(in srgb, var(--bg-elev) 70%, transparent);
314
506
  }
315
507
 
316
- .home-search-box {
317
- display: grid;
318
- grid-template-columns: 22px minmax(0, 1fr) 38px;
319
- align-items: center;
320
- min-height: 48px;
321
- border: 1px solid var(--line-strong);
322
- border-radius: 8px;
323
- background: var(--bg-elev);
324
- color: var(--fg);
508
+ .worktree-summary-head {
509
+ display: flex;
510
+ align-items: flex-end;
511
+ justify-content: space-between;
512
+ gap: 12px;
513
+ margin-bottom: 6px;
325
514
  }
326
515
 
327
- .home-search-icon {
328
- justify-self: end;
516
+ .worktree-summary-head > span:first-child {
517
+ min-width: 0;
518
+ }
519
+
520
+ .worktree-summary-kicker {
521
+ display: block;
329
522
  color: var(--fg-muted);
330
- font-size: 15px;
523
+ font-size: 10px;
331
524
  font-weight: 900;
525
+ line-height: 1.1;
526
+ text-transform: uppercase;
332
527
  }
333
528
 
334
- .home-search-box input {
335
- min-width: 0;
336
- height: 46px;
337
- padding: 0 8px;
338
- border: 0;
339
- border-radius: 0;
340
- background: transparent;
529
+ .worktree-summary-head strong {
530
+ display: block;
531
+ margin-top: 2px;
341
532
  color: var(--fg);
342
- outline: none;
533
+ font-size: 14px;
534
+ line-height: 1.15;
343
535
  }
344
536
 
345
- .home-search-box input::placeholder {
346
- color: var(--fg-muted);
537
+ .worktree-summary-stats {
538
+ color: var(--fg-dim);
539
+ font-size: 11px;
540
+ font-weight: 800;
541
+ line-height: 1.2;
542
+ white-space: nowrap;
347
543
  }
348
544
 
349
- .home-search-box:focus-within {
350
- border-color: color-mix(in srgb, var(--blue) 70%, var(--line-strong));
351
- box-shadow: 0 0 0 3px color-mix(in srgb, var(--blue) 18%, transparent);
545
+ .worktree-summary-list {
546
+ display: grid;
352
547
  }
353
548
 
354
- .home-search-clear {
355
- justify-self: center;
356
- display: inline-grid;
357
- place-items: center;
358
- width: 38px;
359
- min-width: 38px;
549
+ .worktree-summary-row {
550
+ display: grid;
551
+ grid-template-columns: minmax(0, 1fr) auto;
552
+ align-items: center;
553
+ gap: 10px;
554
+ width: 100%;
555
+ min-height: 56px;
556
+ padding: 6px 0;
557
+ border-top: 1px solid rgba(120, 135, 180, 0.16);
558
+ }
559
+
560
+ .worktree-summary-row:first-child {
561
+ border-top: 0;
562
+ }
563
+
564
+ .worktree-summary-open {
565
+ appearance: none;
566
+ display: grid;
567
+ min-width: 0;
568
+ width: 100%;
360
569
  min-height: 44px;
570
+ padding: 7px 0;
571
+ border: 0;
361
572
  border-radius: 8px;
362
573
  background: transparent;
363
- color: var(--fg-muted);
364
- font-size: 20px;
365
- line-height: 1;
366
- opacity: 0;
367
- pointer-events: none;
574
+ color: inherit;
575
+ text-align: left;
576
+ cursor: pointer;
577
+ touch-action: manipulation;
368
578
  }
369
579
 
370
- .home-search.has-query .home-search-clear {
371
- opacity: 1;
372
- pointer-events: auto;
580
+ .worktree-summary-open:active {
581
+ background: color-mix(in srgb, var(--blue) 8%, transparent);
373
582
  }
374
583
 
375
- .home-search-clear:active {
376
- background: var(--bg-soft);
377
- color: var(--fg);
584
+ .worktree-summary-open:focus-visible,
585
+ .session-diff-chip-action:focus-visible {
586
+ outline: 2px solid var(--blue);
587
+ outline-offset: 2px;
378
588
  }
379
589
 
380
- .home-search-status {
381
- min-height: 15px;
382
- padding: 0 2px;
383
- color: var(--fg-muted);
384
- font-size: 11px;
385
- font-weight: 800;
590
+ .worktree-summary-copy {
591
+ display: grid;
592
+ gap: 3px;
593
+ min-width: 0;
594
+ }
595
+
596
+ .worktree-summary-title {
597
+ min-width: 0;
598
+ color: var(--fg);
599
+ font-size: 13px;
600
+ font-weight: 900;
386
601
  line-height: 1.2;
602
+ overflow: hidden;
603
+ text-overflow: ellipsis;
604
+ white-space: nowrap;
387
605
  }
388
606
 
389
- .session-row,
390
- .result-row,
607
+ .worktree-summary-row.main .worktree-summary-title {
608
+ color: #f6c177;
609
+ }
610
+
611
+ .worktree-summary-meta {
612
+ min-width: 0;
613
+ color: var(--fg-dim);
614
+ font-size: 11px;
615
+ line-height: 1.25;
616
+ overflow: hidden;
617
+ text-overflow: ellipsis;
618
+ white-space: nowrap;
619
+ }
620
+
621
+ .worktree-summary-row .session-diff-tags {
622
+ justify-content: flex-end;
623
+ margin-top: 0;
624
+ }
625
+
626
+ .worktree-summary-toggle {
627
+ appearance: none;
628
+ display: inline-flex;
629
+ align-items: center;
630
+ justify-content: center;
631
+ gap: 7px;
632
+ width: 100%;
633
+ min-height: 44px;
634
+ margin-top: 6px;
635
+ padding: 9px 12px;
636
+ border: 1px solid color-mix(in srgb, var(--blue) 34%, var(--line));
637
+ border-radius: 12px;
638
+ background: color-mix(in srgb, var(--blue) 9%, transparent);
639
+ color: var(--blue);
640
+ font: inherit;
641
+ font-size: 12px;
642
+ font-weight: 900;
643
+ line-height: 1.15;
644
+ text-align: center;
645
+ cursor: pointer;
646
+ touch-action: manipulation;
647
+ }
648
+
649
+ .worktree-summary-toggle::before {
650
+ content: "";
651
+ width: 7px;
652
+ height: 7px;
653
+ margin-top: -3px;
654
+ border-right: 2px solid currentColor;
655
+ border-bottom: 2px solid currentColor;
656
+ transform: rotate(45deg);
657
+ transition: transform 150ms ease, margin 150ms ease;
658
+ }
659
+
660
+ .worktree-summary-toggle[aria-expanded="true"]::before {
661
+ margin-top: 3px;
662
+ transform: rotate(225deg);
663
+ }
664
+
665
+ .worktree-summary-toggle:active {
666
+ background: color-mix(in srgb, var(--blue) 16%, transparent);
667
+ }
668
+
669
+ .worktree-summary-toggle:focus-visible {
670
+ outline: 2px solid var(--blue);
671
+ outline-offset: 2px;
672
+ }
673
+
674
+ .home-search {
675
+ display: grid;
676
+ gap: 6px;
677
+ padding: 6px 16px 10px;
678
+ }
679
+
680
+ .home-search-box {
681
+ display: grid;
682
+ grid-template-columns: 22px minmax(0, 1fr) 38px;
683
+ align-items: center;
684
+ min-height: 48px;
685
+ border: 1px solid var(--line-strong);
686
+ border-radius: 8px;
687
+ background: var(--bg-elev);
688
+ color: var(--fg);
689
+ }
690
+
691
+ .home-search-icon {
692
+ justify-self: end;
693
+ color: var(--fg-muted);
694
+ font-size: 15px;
695
+ font-weight: 900;
696
+ }
697
+
698
+ .home-search-box input {
699
+ min-width: 0;
700
+ height: 46px;
701
+ padding: 0 8px;
702
+ border: 0;
703
+ border-radius: 0;
704
+ background: transparent;
705
+ color: var(--fg);
706
+ outline: none;
707
+ }
708
+
709
+ .home-search-box input::placeholder {
710
+ color: var(--fg-muted);
711
+ }
712
+
713
+ .home-search-box:focus-within {
714
+ border-color: color-mix(in srgb, var(--blue) 70%, var(--line-strong));
715
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--blue) 18%, transparent);
716
+ }
717
+
718
+ .home-search-clear {
719
+ justify-self: center;
720
+ display: inline-grid;
721
+ place-items: center;
722
+ width: 38px;
723
+ min-width: 38px;
724
+ min-height: 44px;
725
+ border-radius: 8px;
726
+ background: transparent;
727
+ color: var(--fg-muted);
728
+ font-size: 20px;
729
+ line-height: 1;
730
+ opacity: 0;
731
+ pointer-events: none;
732
+ }
733
+
734
+ .home-search.has-query .home-search-clear {
735
+ opacity: 1;
736
+ pointer-events: auto;
737
+ }
738
+
739
+ .home-search-clear:active {
740
+ background: var(--bg-soft);
741
+ color: var(--fg);
742
+ }
743
+
744
+ .home-search-status {
745
+ min-height: 15px;
746
+ padding: 0 2px;
747
+ color: var(--fg-muted);
748
+ font-size: 11px;
749
+ font-weight: 800;
750
+ line-height: 1.2;
751
+ }
752
+
753
+ .status-focus-panel {
754
+ display: grid;
755
+ gap: 10px;
756
+ min-width: 0;
757
+ max-width: calc(100vw - 32px);
758
+ margin: 8px 16px 10px;
759
+ padding: 14px;
760
+ border: 1px solid color-mix(in srgb, var(--blue) 28%, var(--line));
761
+ border-radius: 16px;
762
+ background:
763
+ linear-gradient(135deg, color-mix(in srgb, var(--blue) 13%, transparent), transparent 58%),
764
+ color-mix(in srgb, var(--bg-elev) 92%, var(--bg));
765
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--fg) 7%, transparent);
766
+ }
767
+
768
+ .status-focus-panel.needs_user,
769
+ .status-focus-panel.waiting,
770
+ .status-focus-panel.waiting_input {
771
+ border-color: color-mix(in srgb, var(--red) 40%, var(--line));
772
+ background:
773
+ linear-gradient(135deg, color-mix(in srgb, var(--red) 12%, transparent), transparent 58%),
774
+ color-mix(in srgb, var(--bg-elev) 92%, var(--bg));
775
+ }
776
+
777
+ .status-focus-panel.ready_review {
778
+ border-color: color-mix(in srgb, var(--green) 36%, var(--line));
779
+ }
780
+
781
+ .status-focus-head {
782
+ display: flex;
783
+ align-items: flex-start;
784
+ justify-content: space-between;
785
+ gap: 12px;
786
+ min-width: 0;
787
+ }
788
+
789
+ .status-focus-head > span:first-child {
790
+ min-width: 0;
791
+ }
792
+
793
+ .status-focus-head .state-chip {
794
+ flex: 0 1 auto;
795
+ min-width: 0;
796
+ max-width: 42%;
797
+ overflow: hidden;
798
+ text-overflow: ellipsis;
799
+ }
800
+
801
+ .status-focus-kicker {
802
+ display: block;
803
+ color: var(--fg-muted);
804
+ font-size: 10px;
805
+ font-weight: 900;
806
+ line-height: 1.1;
807
+ text-transform: uppercase;
808
+ }
809
+
810
+ .status-focus-head h2 {
811
+ margin-top: 3px;
812
+ max-width: 100%;
813
+ overflow: hidden;
814
+ color: var(--fg);
815
+ font-size: 18px;
816
+ line-height: 1.15;
817
+ text-overflow: ellipsis;
818
+ white-space: nowrap;
819
+ }
820
+
821
+ .status-focus-meta,
822
+ .status-focus-goal {
823
+ min-width: 0;
824
+ max-width: 100%;
825
+ color: var(--fg-dim);
826
+ font-size: 13px;
827
+ line-height: 1.38;
828
+ overflow-wrap: anywhere;
829
+ }
830
+
831
+ .status-focus-goal {
832
+ color: var(--fg);
833
+ }
834
+
835
+ .status-focus-actions {
836
+ display: flex;
837
+ flex-wrap: wrap;
838
+ gap: 8px;
839
+ align-items: center;
840
+ min-width: 0;
841
+ max-width: 100%;
842
+ }
843
+
844
+ .status-focus-actions .row-action {
845
+ min-width: 118px;
846
+ }
847
+
848
+ .status-cockpit {
849
+ display: grid;
850
+ gap: 10px;
851
+ }
852
+
853
+ .status-cockpit-column {
854
+ min-width: 0;
855
+ }
856
+
857
+ .session-row,
858
+ .result-row,
391
859
  .device-row,
392
860
  .walle-row,
393
861
  .more-row {
@@ -396,11 +864,16 @@ h3 {
396
864
  grid-template-columns: 8px 1fr auto;
397
865
  gap: 12px;
398
866
  align-items: start;
867
+ min-width: 0;
868
+ max-width: 100%;
399
869
  min-height: 72px;
400
870
  padding: 13px 16px;
401
871
  border-top: 1px solid var(--line);
402
872
  background: var(--bg);
403
873
  text-align: left;
874
+ color: inherit;
875
+ cursor: pointer;
876
+ touch-action: manipulation;
404
877
  }
405
878
 
406
879
  .session-row:active,
@@ -409,6 +882,15 @@ h3 {
409
882
  background: var(--bg-soft);
410
883
  }
411
884
 
885
+ .session-row:focus-visible {
886
+ outline: 2px solid var(--blue);
887
+ outline-offset: -2px;
888
+ }
889
+
890
+ .session-row.dismissed {
891
+ background: color-mix(in srgb, var(--fg-muted) 5%, var(--bg));
892
+ }
893
+
412
894
  .rail {
413
895
  width: 5px;
414
896
  height: 100%;
@@ -427,6 +909,10 @@ h3 {
427
909
  background: var(--blue);
428
910
  }
429
911
 
912
+ .rail.resuming {
913
+ background: var(--yellow);
914
+ }
915
+
430
916
  .rail.ready_review {
431
917
  background: var(--green);
432
918
  }
@@ -515,6 +1001,12 @@ h3 {
515
1001
  background: rgba(143, 180, 255, 0.11);
516
1002
  }
517
1003
 
1004
+ .mobile-provider-cursor {
1005
+ color: #d6dcff;
1006
+ border-color: rgba(214, 220, 255, 0.34);
1007
+ background: rgba(214, 220, 255, 0.10);
1008
+ }
1009
+
518
1010
  .mobile-provider-google {
519
1011
  color: #8ab4f8;
520
1012
  border-color: rgba(138, 180, 248, 0.34);
@@ -566,7 +1058,32 @@ h3 {
566
1058
  margin-top: 7px;
567
1059
  }
568
1060
 
1061
+ .session-runtime-tags {
1062
+ display: flex;
1063
+ flex-wrap: wrap;
1064
+ align-items: center;
1065
+ gap: 6px;
1066
+ min-width: 0;
1067
+ margin-top: 7px;
1068
+ }
1069
+
1070
+ .session-runtime-chip {
1071
+ display: inline-flex;
1072
+ align-items: center;
1073
+ min-height: 22px;
1074
+ padding: 3px 8px;
1075
+ border: 1px solid rgba(103, 232, 249, 0.30);
1076
+ border-radius: 999px;
1077
+ background: linear-gradient(135deg, rgba(20, 184, 166, 0.14), rgba(96, 165, 250, 0.10));
1078
+ color: #99f6e4;
1079
+ font-size: 11px;
1080
+ font-weight: 900;
1081
+ line-height: 1.1;
1082
+ white-space: nowrap;
1083
+ }
1084
+
569
1085
  .session-diff-chip {
1086
+ appearance: none;
570
1087
  display: inline-flex;
571
1088
  align-items: center;
572
1089
  gap: 5px;
@@ -577,6 +1094,7 @@ h3 {
577
1094
  border-radius: 6px;
578
1095
  background: rgba(120, 135, 180, 0.10);
579
1096
  color: var(--fg-dim);
1097
+ font-family: inherit;
580
1098
  font-size: 11px;
581
1099
  font-weight: 900;
582
1100
  line-height: 1.1;
@@ -585,6 +1103,11 @@ h3 {
585
1103
  white-space: nowrap;
586
1104
  }
587
1105
 
1106
+ .session-diff-chip-action {
1107
+ cursor: pointer;
1108
+ touch-action: manipulation;
1109
+ }
1110
+
588
1111
  .session-diff-chip::before {
589
1112
  content: "";
590
1113
  display: inline-block;
@@ -609,20 +1132,45 @@ h3 {
609
1132
  color: #74d7c7;
610
1133
  }
611
1134
 
612
- .session-goal,
613
- .result-preview {
614
- margin-top: 7px;
615
- color: var(--fg);
616
- font-size: 13px;
617
- line-height: 1.35;
618
- overflow-wrap: anywhere;
1135
+ .session-diff-chip-action {
1136
+ appearance: none;
1137
+ cursor: pointer;
1138
+ touch-action: manipulation;
619
1139
  }
620
1140
 
621
- .session-evidence {
622
- display: flex;
623
- flex-wrap: wrap;
624
- gap: 6px;
625
- margin-top: 8px;
1141
+ .worktree-summary-row .session-diff-tags {
1142
+ justify-content: flex-end;
1143
+ margin-top: 0;
1144
+ }
1145
+
1146
+ .worktree-summary-row .session-diff-chip-action {
1147
+ min-height: 44px;
1148
+ padding: 9px 10px;
1149
+ border-radius: 9px;
1150
+ }
1151
+
1152
+ .worktree-summary-row .session-diff-chip-action:active {
1153
+ transform: translateY(1px);
1154
+ filter: brightness(1.08);
1155
+ }
1156
+
1157
+ .session-goal,
1158
+ .result-preview {
1159
+ margin-top: 7px;
1160
+ color: var(--fg);
1161
+ font-size: 13px;
1162
+ line-height: 1.35;
1163
+ overflow-wrap: anywhere;
1164
+ }
1165
+
1166
+ .session-evidence {
1167
+ display: flex;
1168
+ flex-wrap: wrap;
1169
+ gap: 6px;
1170
+ min-width: 0;
1171
+ max-width: 100%;
1172
+ margin-top: 8px;
1173
+ overflow: hidden;
626
1174
  }
627
1175
 
628
1176
  .home-search-match {
@@ -646,6 +1194,7 @@ h3 {
646
1194
  }
647
1195
 
648
1196
  .evidence-chip {
1197
+ min-width: 0;
649
1198
  max-width: 100%;
650
1199
  min-height: 24px;
651
1200
  padding: 3px 7px;
@@ -659,6 +1208,16 @@ h3 {
659
1208
  }
660
1209
 
661
1210
  @media (max-width: 380px) {
1211
+ .worktree-summary-row {
1212
+ grid-template-columns: 1fr;
1213
+ gap: 6px;
1214
+ align-items: start;
1215
+ }
1216
+
1217
+ .worktree-summary-row .session-diff-tags {
1218
+ justify-content: flex-start;
1219
+ }
1220
+
662
1221
  .session-diff-tags {
663
1222
  gap: 5px;
664
1223
  }
@@ -716,6 +1275,24 @@ h3 {
716
1275
  color: var(--ink);
717
1276
  }
718
1277
 
1278
+ .row-action.secondary {
1279
+ border: 1px solid var(--line);
1280
+ background: transparent;
1281
+ color: var(--fg-dim);
1282
+ }
1283
+
1284
+ .row-action.secondary:active {
1285
+ background: var(--bg-soft);
1286
+ color: var(--fg);
1287
+ }
1288
+
1289
+ .row-action.compact {
1290
+ min-height: 36px;
1291
+ min-width: 72px;
1292
+ padding-inline: 10px;
1293
+ font-size: 12px;
1294
+ }
1295
+
719
1296
  .secondary-btn {
720
1297
  border: 1px solid var(--line);
721
1298
  background: var(--bg-soft);
@@ -739,6 +1316,25 @@ h3 {
739
1316
  color: var(--red);
740
1317
  }
741
1318
 
1319
+ .mobile-auth-recovery-card {
1320
+ display: grid;
1321
+ gap: 10px;
1322
+ margin-bottom: 14px;
1323
+ padding: 14px;
1324
+ border: 1px solid rgba(255, 110, 130, 0.38);
1325
+ border-radius: 8px;
1326
+ background: rgba(255, 110, 130, 0.08);
1327
+ color: var(--fg);
1328
+ }
1329
+
1330
+ .mobile-auth-recovery-card strong {
1331
+ color: var(--red);
1332
+ }
1333
+
1334
+ .mobile-auth-recovery-card .primary-action {
1335
+ margin-top: 2px;
1336
+ }
1337
+
742
1338
  .bottom-nav {
743
1339
  position: fixed;
744
1340
  left: 0;
@@ -760,6 +1356,12 @@ html[data-theme="light"] .bottom-nav {
760
1356
  box-shadow: 0 -10px 28px rgba(15, 23, 42, 0.06);
761
1357
  }
762
1358
 
1359
+ html[data-theme="light"] .status-summary {
1360
+ background: rgba(255, 255, 255, 0.96);
1361
+ border-top: 1px solid rgba(15,23,42,0.06);
1362
+ box-shadow: 0 -10px 28px rgba(15, 23, 42, 0.06);
1363
+ }
1364
+
763
1365
  html[data-theme="light"] .nav-item.active {
764
1366
  color: var(--blue);
765
1367
  }
@@ -775,6 +1377,8 @@ html[data-theme="light"] .nav-item.active {
775
1377
  color: var(--fg-dim);
776
1378
  font-size: 11px;
777
1379
  font-weight: 800;
1380
+ text-decoration: none;
1381
+ -webkit-tap-highlight-color: transparent;
778
1382
  }
779
1383
 
780
1384
  .nav-item span {
@@ -911,10 +1515,36 @@ html[data-theme="light"] .nav-item.active {
911
1515
  background: rgba(255, 127, 143, 0.08);
912
1516
  }
913
1517
 
1518
+ .detail-alert-head {
1519
+ display: flex;
1520
+ align-items: center;
1521
+ justify-content: space-between;
1522
+ gap: 12px;
1523
+ }
1524
+
914
1525
  .detail-alert h3 {
915
1526
  color: var(--red);
916
1527
  }
917
1528
 
1529
+ .detail-alert-dismiss {
1530
+ flex: 0 0 auto;
1531
+ min-height: 32px;
1532
+ padding: 0 12px;
1533
+ border: 1px solid rgba(255, 127, 143, 0.42);
1534
+ border-radius: 999px;
1535
+ background: rgba(255, 127, 143, 0.08);
1536
+ color: var(--red);
1537
+ font-size: 12px;
1538
+ font-weight: 800;
1539
+ line-height: 1;
1540
+ touch-action: manipulation;
1541
+ }
1542
+
1543
+ .detail-alert-dismiss:focus-visible {
1544
+ outline: 2px solid var(--red);
1545
+ outline-offset: 2px;
1546
+ }
1547
+
918
1548
  .detail-alert p {
919
1549
  margin-top: 4px;
920
1550
  color: var(--fg-dim);
@@ -924,10 +1554,28 @@ html[data-theme="light"] .nav-item.active {
924
1554
 
925
1555
  .detail-alert .alert-actions {
926
1556
  display: flex;
1557
+ flex-wrap: wrap;
927
1558
  gap: 8px;
928
1559
  margin-top: 10px;
929
1560
  }
930
1561
 
1562
+ .detail-alert .approval-actions .control-btn {
1563
+ min-height: 42px;
1564
+ }
1565
+
1566
+ .detail-alert .approval-primary {
1567
+ border-color: color-mix(in srgb, var(--blue) 68%, var(--line));
1568
+ background: color-mix(in srgb, var(--blue) 20%, var(--bg-soft));
1569
+ color: var(--blue);
1570
+ }
1571
+
1572
+ .detail-alert #detail-control-status {
1573
+ margin-top: 8px;
1574
+ min-height: 16px;
1575
+ font-size: 12px;
1576
+ line-height: 1.35;
1577
+ }
1578
+
931
1579
  .detail-controls {
932
1580
  display: grid;
933
1581
  grid-template-columns: 1fr auto;
@@ -982,6 +1630,12 @@ html[data-theme="light"] .nav-item.active {
982
1630
  font-weight: 800;
983
1631
  }
984
1632
 
1633
+ .control-btn.primary {
1634
+ border-color: color-mix(in srgb, var(--blue) 72%, var(--line));
1635
+ background: var(--blue);
1636
+ color: #08101f;
1637
+ }
1638
+
985
1639
  .control-btn.warn {
986
1640
  border-color: rgba(229, 181, 103, 0.55);
987
1641
  color: var(--amber);
@@ -996,11 +1650,178 @@ html[data-theme="light"] .nav-item.active {
996
1650
  min-height: 0;
997
1651
  overflow: auto;
998
1652
  overflow-x: hidden;
1653
+ overflow-anchor: none;
999
1654
  padding: 12px 12px 32px;
1000
1655
  -webkit-overflow-scrolling: touch;
1001
1656
  overscroll-behavior: contain;
1002
1657
  }
1003
1658
 
1659
+ #detail-composer[hidden],
1660
+ #detail-status[hidden],
1661
+ #detail-timeline-toggle[hidden] {
1662
+ display: none !important;
1663
+ }
1664
+
1665
+ .mobile-doc-state {
1666
+ margin: 10px 0;
1667
+ padding: 14px;
1668
+ border: 1px solid var(--line);
1669
+ border-radius: 10px;
1670
+ background: var(--bg-elev);
1671
+ color: var(--fg-dim);
1672
+ font-size: 14px;
1673
+ line-height: 1.45;
1674
+ }
1675
+
1676
+ .mobile-doc-state.error {
1677
+ border-color: color-mix(in srgb, var(--red) 45%, var(--line));
1678
+ color: var(--red);
1679
+ }
1680
+
1681
+ .mobile-doc-viewer {
1682
+ display: grid;
1683
+ gap: 10px;
1684
+ }
1685
+
1686
+ .mobile-doc-heading {
1687
+ position: sticky;
1688
+ top: -12px;
1689
+ z-index: 1;
1690
+ display: flex;
1691
+ align-items: center;
1692
+ justify-content: space-between;
1693
+ gap: 10px;
1694
+ padding: 12px 2px 10px;
1695
+ background: color-mix(in srgb, var(--bg) 92%, transparent);
1696
+ backdrop-filter: blur(10px);
1697
+ color: var(--fg-dim);
1698
+ font-size: 12px;
1699
+ line-height: 1.2;
1700
+ }
1701
+
1702
+ .mobile-doc-heading strong {
1703
+ min-width: 0;
1704
+ overflow: hidden;
1705
+ color: var(--fg);
1706
+ font-size: 13px;
1707
+ text-overflow: ellipsis;
1708
+ white-space: nowrap;
1709
+ }
1710
+
1711
+ .mobile-doc-heading span {
1712
+ flex: 0 0 auto;
1713
+ padding: 4px 8px;
1714
+ border: 1px solid var(--line);
1715
+ border-radius: 999px;
1716
+ background: var(--bg-soft);
1717
+ color: var(--fg-dim);
1718
+ font-weight: 800;
1719
+ }
1720
+
1721
+ .mobile-doc-block {
1722
+ display: grid;
1723
+ grid-template-columns: 44px minmax(0, 1fr);
1724
+ gap: 10px;
1725
+ padding: 12px 12px 12px 0;
1726
+ border: 1px solid var(--line);
1727
+ border-left: 3px solid transparent;
1728
+ border-radius: 10px;
1729
+ background: var(--bg-elev);
1730
+ }
1731
+
1732
+ .mobile-doc-block.active {
1733
+ border-color: color-mix(in srgb, var(--blue) 42%, var(--line));
1734
+ border-left-color: var(--blue);
1735
+ background: color-mix(in srgb, var(--blue) 8%, var(--bg-elev));
1736
+ }
1737
+
1738
+ .mobile-doc-lines {
1739
+ padding-top: 2px;
1740
+ color: var(--fg-muted);
1741
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
1742
+ font-size: 11px;
1743
+ line-height: 1.45;
1744
+ text-align: right;
1745
+ user-select: none;
1746
+ }
1747
+
1748
+ .mobile-doc-markdown {
1749
+ min-width: 0;
1750
+ color: var(--fg);
1751
+ font-size: 14px;
1752
+ line-height: 1.55;
1753
+ overflow-wrap: anywhere;
1754
+ }
1755
+
1756
+ .mobile-doc-markdown > :first-child { margin-top: 0; }
1757
+ .mobile-doc-markdown > :last-child { margin-bottom: 0; }
1758
+
1759
+ .mobile-doc-markdown p,
1760
+ .mobile-doc-markdown ul,
1761
+ .mobile-doc-markdown ol,
1762
+ .mobile-doc-markdown blockquote,
1763
+ .mobile-doc-markdown pre,
1764
+ .mobile-doc-markdown table {
1765
+ margin: 0 0 10px;
1766
+ }
1767
+
1768
+ .mobile-doc-markdown h1,
1769
+ .mobile-doc-markdown h2,
1770
+ .mobile-doc-markdown h3,
1771
+ .mobile-doc-markdown h4 {
1772
+ margin: 14px 0 8px;
1773
+ color: var(--fg);
1774
+ line-height: 1.25;
1775
+ }
1776
+
1777
+ .mobile-doc-markdown h1 { font-size: 20px; }
1778
+ .mobile-doc-markdown h2 { font-size: 18px; }
1779
+ .mobile-doc-markdown h3 { font-size: 16px; }
1780
+ .mobile-doc-markdown h4 { font-size: 14px; color: var(--fg-dim); }
1781
+
1782
+ .mobile-doc-markdown ul,
1783
+ .mobile-doc-markdown ol {
1784
+ padding-left: 20px;
1785
+ }
1786
+
1787
+ .mobile-doc-markdown li + li {
1788
+ margin-top: 4px;
1789
+ }
1790
+
1791
+ .mobile-doc-markdown pre {
1792
+ max-width: 100%;
1793
+ overflow: auto;
1794
+ padding: 10px;
1795
+ border: 1px solid var(--line);
1796
+ border-radius: 8px;
1797
+ background: var(--bg-soft);
1798
+ }
1799
+
1800
+ .mobile-doc-markdown code {
1801
+ padding: 1px 4px;
1802
+ border-radius: 5px;
1803
+ background: var(--bg-soft);
1804
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
1805
+ font-size: 0.92em;
1806
+ }
1807
+
1808
+ .mobile-doc-markdown pre code {
1809
+ padding: 0;
1810
+ background: transparent;
1811
+ }
1812
+
1813
+ .mobile-doc-markdown a,
1814
+ .ctm-doc-review-link {
1815
+ color: var(--blue);
1816
+ text-decoration: none;
1817
+ }
1818
+
1819
+ .mobile-doc-markdown a:focus-visible,
1820
+ .ctm-doc-review-link:focus-visible {
1821
+ outline: 2px solid var(--blue);
1822
+ outline-offset: 2px;
1823
+ }
1824
+
1004
1825
  .detail-messages .msg,
1005
1826
  .detail-messages .review-msg,
1006
1827
  .detail-messages .turn,
@@ -1119,6 +1940,12 @@ html[data-theme="light"] .nav-item.active {
1119
1940
  box-shadow: 0 1px 0 rgba(113, 167, 255, 0.08) inset;
1120
1941
  }
1121
1942
 
1943
+ .detail-messages .prompt-turn-prompt.review-msg.subagent-prompt {
1944
+ border-color: color-mix(in srgb, var(--amber) 48%, var(--line));
1945
+ background: color-mix(in srgb, var(--amber) 12%, var(--bg-soft));
1946
+ box-shadow: 0 1px 0 color-mix(in srgb, var(--amber) 14%, transparent) inset;
1947
+ }
1948
+
1122
1949
  .detail-messages .live-prompt-turn .prompt-turn-prompt.review-msg {
1123
1950
  border-color: color-mix(in srgb, var(--green) 38%, var(--line));
1124
1951
  background: color-mix(in srgb, var(--green) 11%, var(--bg-soft));
@@ -1135,7 +1962,8 @@ html[data-theme="light"] .nav-item.active {
1135
1962
  background: color-mix(in srgb, var(--green) 8%, var(--bg-soft));
1136
1963
  }
1137
1964
 
1138
- .detail-messages .prompt-turn-live-title > span:first-child {
1965
+ .detail-messages .prompt-turn-live-title > span:first-child,
1966
+ .detail-messages .prompt-turn-live-title .live-terminal-kicker {
1139
1967
  color: var(--green);
1140
1968
  font-size: 11px;
1141
1969
  font-weight: 850;
@@ -1143,50 +1971,184 @@ html[data-theme="light"] .nav-item.active {
1143
1971
  text-transform: uppercase;
1144
1972
  }
1145
1973
 
1146
- .detail-messages .prompt-turn-prompt .msg-header {
1147
- margin-bottom: 5px;
1974
+ .detail-messages .live-terminal-prompt-title {
1975
+ gap: 6px;
1148
1976
  }
1149
1977
 
1150
- .detail-messages .prompt-turn-header .prompt-turn-prompt,
1151
- .detail-messages .prompt-turn-header .prompt-turn-prompt .msg-text,
1152
- .detail-messages .prompt-turn-header .prompt-turn-prompt .msg-text * {
1153
- cursor: text;
1154
- user-select: text;
1155
- -webkit-user-select: text;
1978
+ .detail-messages .live-terminal-helper {
1979
+ color: var(--fg-muted);
1980
+ font-size: 11px;
1981
+ font-weight: 650;
1982
+ line-height: 1.25;
1156
1983
  }
1157
1984
 
1158
- .detail-messages .prompt-turn-header .prompt-turn-meta,
1159
- .detail-messages .prompt-turn-header .prompt-turn-prompt .msg-header {
1160
- cursor: pointer;
1161
- user-select: none;
1162
- -webkit-user-select: none;
1985
+ .detail-messages .prompt-turn-live-title .live-terminal-prompt-text {
1986
+ padding-top: 2px;
1163
1987
  }
1164
1988
 
1165
- .detail-messages .prompt-turn-meta {
1166
- display: flex;
1167
- flex-wrap: wrap;
1168
- justify-content: flex-start;
1169
- gap: 4px;
1170
- min-height: 18px;
1171
- margin: 0;
1172
- grid-column: 2;
1989
+ .detail-messages .terminal-choice-title {
1990
+ gap: 8px;
1173
1991
  }
1174
1992
 
1175
- .detail-messages .prompt-turn:not(.setup-turn) .prompt-turn-meta {
1176
- display: flex;
1993
+ .terminal-choice-context {
1994
+ margin: 1px 0 0;
1995
+ color: var(--fg);
1996
+ font-size: 13px;
1997
+ font-weight: 650;
1998
+ line-height: 1.4;
1177
1999
  }
1178
2000
 
1179
- .detail-messages .prompt-turn.setup-turn .prompt-turn-meta {
1180
- margin: 0;
1181
- justify-content: flex-end;
2001
+ .terminal-choice-context.muted {
2002
+ color: var(--fg-dim);
2003
+ font-weight: 600;
1182
2004
  }
1183
2005
 
1184
- .detail-messages .prompt-turn-badge {
1185
- display: inline-flex;
1186
- align-items: center;
1187
- min-height: 18px;
1188
- padding: 1px 7px;
1189
- border: 1px solid var(--line);
2006
+ .terminal-choice-options {
2007
+ display: grid;
2008
+ grid-template-columns: 1fr;
2009
+ gap: 8px;
2010
+ margin-top: 2px;
2011
+ }
2012
+
2013
+ .terminal-choice-button {
2014
+ display: grid;
2015
+ grid-template-columns: 32px minmax(0, 1fr);
2016
+ align-items: center;
2017
+ gap: 9px;
2018
+ width: 100%;
2019
+ min-height: 44px;
2020
+ padding: 7px 10px;
2021
+ border: 1px solid color-mix(in srgb, var(--green) 42%, var(--line));
2022
+ border-radius: 10px;
2023
+ background: color-mix(in srgb, var(--green) 12%, var(--bg-elev));
2024
+ color: var(--fg);
2025
+ text-align: left;
2026
+ font: inherit;
2027
+ }
2028
+
2029
+ .terminal-choice-button.selected {
2030
+ border-color: color-mix(in srgb, var(--green) 72%, var(--line));
2031
+ background: color-mix(in srgb, var(--green) 18%, var(--bg-elev));
2032
+ }
2033
+
2034
+ .terminal-choice-button.checked {
2035
+ border-color: color-mix(in srgb, var(--accent) 62%, var(--green));
2036
+ }
2037
+
2038
+ .terminal-choice-button.pending,
2039
+ .terminal-choice-submit.pending {
2040
+ border-color: color-mix(in srgb, var(--accent) 66%, var(--green));
2041
+ background: color-mix(in srgb, var(--accent) 20%, var(--bg-elev));
2042
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 22%, transparent);
2043
+ }
2044
+
2045
+ .terminal-choice-button:active {
2046
+ transform: translateY(1px);
2047
+ }
2048
+
2049
+ .terminal-choice-button:focus-visible {
2050
+ outline: 2px solid var(--green);
2051
+ outline-offset: 2px;
2052
+ }
2053
+
2054
+ .terminal-choice-number {
2055
+ display: inline-grid;
2056
+ place-items: center;
2057
+ width: 28px;
2058
+ height: 28px;
2059
+ border-radius: 999px;
2060
+ background: color-mix(in srgb, var(--green) 24%, var(--bg-soft));
2061
+ color: var(--green);
2062
+ font-size: 13px;
2063
+ font-weight: 900;
2064
+ line-height: 1;
2065
+ }
2066
+
2067
+ .terminal-choice-label {
2068
+ min-width: 0;
2069
+ overflow-wrap: anywhere;
2070
+ font-size: 15px;
2071
+ font-weight: 850;
2072
+ line-height: 1.2;
2073
+ }
2074
+
2075
+ .terminal-choice-check {
2076
+ display: inline-grid;
2077
+ place-items: center;
2078
+ width: 18px;
2079
+ height: 18px;
2080
+ margin-right: 7px;
2081
+ border: 1px solid color-mix(in srgb, var(--green) 58%, var(--line));
2082
+ border-radius: 5px;
2083
+ color: var(--green);
2084
+ font-size: 12px;
2085
+ font-weight: 900;
2086
+ vertical-align: -2px;
2087
+ }
2088
+
2089
+ .terminal-choice-submit {
2090
+ width: 100%;
2091
+ min-height: 44px;
2092
+ margin-top: 2px;
2093
+ border: 1px solid color-mix(in srgb, var(--accent) 64%, var(--line));
2094
+ border-radius: 10px;
2095
+ background: var(--accent);
2096
+ color: #111827;
2097
+ font: inherit;
2098
+ font-weight: 900;
2099
+ }
2100
+
2101
+ .terminal-choice-submit:active {
2102
+ transform: translateY(1px);
2103
+ }
2104
+
2105
+ .detail-messages .prompt-turn-prompt .msg-header {
2106
+ margin-bottom: 5px;
2107
+ }
2108
+
2109
+ .detail-messages .prompt-turn-header .prompt-turn-prompt,
2110
+ .detail-messages .prompt-turn-header .prompt-turn-prompt .msg-text,
2111
+ .detail-messages .prompt-turn-header .prompt-turn-prompt .msg-text *,
2112
+ .detail-messages .prompt-turn-header .live-terminal-prompt-text,
2113
+ .detail-messages .prompt-turn-header .live-terminal-prompt-text * {
2114
+ cursor: text;
2115
+ user-select: text;
2116
+ -webkit-user-select: text;
2117
+ -webkit-touch-callout: default;
2118
+ }
2119
+
2120
+ .detail-messages .prompt-turn-header .prompt-turn-meta,
2121
+ .detail-messages .prompt-turn-header .prompt-turn-prompt .msg-header {
2122
+ cursor: pointer;
2123
+ user-select: none;
2124
+ -webkit-user-select: none;
2125
+ }
2126
+
2127
+ .detail-messages .prompt-turn-meta {
2128
+ display: flex;
2129
+ flex-wrap: wrap;
2130
+ justify-content: flex-start;
2131
+ gap: 4px;
2132
+ min-height: 18px;
2133
+ margin: 0;
2134
+ grid-column: 2;
2135
+ }
2136
+
2137
+ .detail-messages .prompt-turn:not(.setup-turn) .prompt-turn-meta {
2138
+ display: flex;
2139
+ }
2140
+
2141
+ .detail-messages .prompt-turn.setup-turn .prompt-turn-meta {
2142
+ margin: 0;
2143
+ justify-content: flex-end;
2144
+ }
2145
+
2146
+ .detail-messages .prompt-turn-badge {
2147
+ display: inline-flex;
2148
+ align-items: center;
2149
+ min-height: 18px;
2150
+ padding: 1px 7px;
2151
+ border: 1px solid var(--line);
1190
2152
  border-radius: 999px;
1191
2153
  background: rgba(255, 255, 255, 0.035);
1192
2154
  color: var(--fg-muted);
@@ -1218,6 +2180,49 @@ html[data-theme="light"] .nav-item.active {
1218
2180
  color: var(--green);
1219
2181
  }
1220
2182
 
2183
+ .detail-messages .live-prompt-turn .live-terminal-submit-action {
2184
+ min-height: 26px;
2185
+ gap: 6px;
2186
+ padding: 4px 10px 4px 7px;
2187
+ border-color: color-mix(in srgb, var(--green) 62%, var(--line));
2188
+ background:
2189
+ linear-gradient(135deg, color-mix(in srgb, var(--green) 23%, var(--bg-soft)), color-mix(in srgb, var(--green) 11%, var(--bg-elev)));
2190
+ box-shadow:
2191
+ 0 0 0 1px color-mix(in srgb, var(--green) 12%, transparent) inset,
2192
+ 0 6px 16px color-mix(in srgb, var(--green) 13%, transparent);
2193
+ font-size: 11px;
2194
+ letter-spacing: 0.01em;
2195
+ }
2196
+
2197
+ .detail-messages .live-terminal-submit-action .live-terminal-submit-icon {
2198
+ display: inline-grid;
2199
+ place-items: center;
2200
+ width: 17px;
2201
+ height: 17px;
2202
+ border-radius: 999px;
2203
+ background: color-mix(in srgb, var(--green) 28%, transparent);
2204
+ color: color-mix(in srgb, var(--green) 88%, white);
2205
+ font-size: 12px;
2206
+ font-weight: 950;
2207
+ line-height: 1;
2208
+ }
2209
+
2210
+ .detail-messages .live-terminal-submit-action:disabled {
2211
+ cursor: default;
2212
+ opacity: 0.78;
2213
+ }
2214
+
2215
+ .detail-messages .live-terminal-submit-action.sent {
2216
+ border-color: color-mix(in srgb, var(--green) 78%, var(--line));
2217
+ background: color-mix(in srgb, var(--green) 72%, white);
2218
+ color: #111827;
2219
+ }
2220
+
2221
+ .detail-messages .live-terminal-submit-action.sent .live-terminal-submit-icon {
2222
+ background: rgba(17, 24, 39, 0.18);
2223
+ color: #111827;
2224
+ }
2225
+
1221
2226
  .detail-messages .prompt-turn-action:focus-visible {
1222
2227
  outline: 2px solid currentColor;
1223
2228
  outline-offset: 2px;
@@ -1281,6 +2286,11 @@ html[data-theme="light"] .nav-item.active {
1281
2286
  background: var(--bg-elev);
1282
2287
  }
1283
2288
 
2289
+ .detail-messages .review-msg.walle-error-msg {
2290
+ background: color-mix(in srgb, var(--red) 8%, var(--bg-elev));
2291
+ border-color: color-mix(in srgb, var(--red) 36%, var(--line));
2292
+ }
2293
+
1284
2294
  .message-row.self {
1285
2295
  max-width: calc(100% - 28px);
1286
2296
  margin-left: 28px;
@@ -1317,6 +2327,106 @@ html[data-theme="light"] .nav-item.active {
1317
2327
  border-color: rgba(113, 167, 255, 0.38);
1318
2328
  }
1319
2329
 
2330
+ .detail-messages .mobile-final-summary-card,
2331
+ .message-row.mobile-final-summary-card {
2332
+ max-width: 100%;
2333
+ margin: 12px 0 14px;
2334
+ padding: 13px 14px 14px;
2335
+ border: 1px solid color-mix(in srgb, var(--green) 42%, var(--line));
2336
+ border-left: 4px solid var(--green);
2337
+ border-radius: 12px;
2338
+ background:
2339
+ linear-gradient(135deg, color-mix(in srgb, var(--green) 10%, var(--bg-elev)) 0%, var(--bg-elev) 78%),
2340
+ var(--bg-elev);
2341
+ box-shadow: 0 10px 24px rgba(0, 0, 0, 0.10);
2342
+ cursor: text;
2343
+ }
2344
+
2345
+ .detail-messages .prompt-turn.has-final-summary {
2346
+ border-color: color-mix(in srgb, var(--green) 36%, var(--line));
2347
+ border-left-color: var(--green);
2348
+ }
2349
+
2350
+ .detail-messages .prompt-turn-response > .mobile-final-summary-card {
2351
+ margin-top: 10px;
2352
+ }
2353
+
2354
+ .detail-messages .mobile-final-summary-head {
2355
+ display: flex;
2356
+ align-items: flex-start;
2357
+ justify-content: space-between;
2358
+ gap: 10px;
2359
+ margin-bottom: 10px;
2360
+ text-transform: none;
2361
+ }
2362
+
2363
+ .mobile-final-summary-title {
2364
+ display: inline-grid;
2365
+ gap: 3px;
2366
+ min-width: 0;
2367
+ color: var(--fg);
2368
+ font-size: 14px;
2369
+ font-weight: 850;
2370
+ line-height: 1.2;
2371
+ }
2372
+
2373
+ .mobile-final-summary-kicker {
2374
+ width: fit-content;
2375
+ padding: 2px 7px;
2376
+ border: 1px solid color-mix(in srgb, var(--green) 48%, var(--line));
2377
+ border-radius: 999px;
2378
+ background: color-mix(in srgb, var(--green) 14%, var(--bg-soft));
2379
+ color: var(--green);
2380
+ font-size: 10px;
2381
+ font-weight: 850;
2382
+ line-height: 1.1;
2383
+ text-transform: uppercase;
2384
+ }
2385
+
2386
+ .mobile-final-summary-meta {
2387
+ display: inline-flex;
2388
+ flex: 0 0 auto;
2389
+ flex-wrap: wrap;
2390
+ justify-content: flex-end;
2391
+ gap: 5px;
2392
+ max-width: 46%;
2393
+ color: var(--fg-muted);
2394
+ font-size: 10px;
2395
+ font-weight: 750;
2396
+ line-height: 1.2;
2397
+ }
2398
+
2399
+ .detail-messages .mobile-final-summary-card .mobile-final-summary-body,
2400
+ .detail-messages .review-msg.mobile-final-summary-card .msg-text,
2401
+ .message-row.mobile-final-summary-card .message-body {
2402
+ display: block;
2403
+ max-height: none;
2404
+ color: var(--fg);
2405
+ line-height: 1.58;
2406
+ overflow: visible;
2407
+ mask-image: none;
2408
+ -webkit-mask-image: none;
2409
+ user-select: text;
2410
+ -webkit-user-select: text;
2411
+ -webkit-touch-callout: default;
2412
+ }
2413
+
2414
+ .detail-messages .mobile-final-summary-card .msg-text h1,
2415
+ .detail-messages .mobile-final-summary-card .msg-text h2,
2416
+ .detail-messages .mobile-final-summary-card .msg-text h3,
2417
+ .detail-messages .mobile-final-summary-card .message-body h1,
2418
+ .detail-messages .mobile-final-summary-card .message-body h2,
2419
+ .detail-messages .mobile-final-summary-card .message-body h3 {
2420
+ margin-top: 12px;
2421
+ }
2422
+
2423
+ .detail-messages .mobile-final-summary-card .msg-text ul,
2424
+ .detail-messages .mobile-final-summary-card .msg-text ol,
2425
+ .detail-messages .mobile-final-summary-card .message-body ul,
2426
+ .detail-messages .mobile-final-summary-card .message-body ol {
2427
+ margin-bottom: 10px;
2428
+ }
2429
+
1320
2430
  .live-pill {
1321
2431
  display: inline-flex;
1322
2432
  align-items: center;
@@ -1460,6 +2570,8 @@ html[data-theme="light"] .nav-item.active {
1460
2570
  }
1461
2571
 
1462
2572
  .detail-messages .review-msg.user .msg-role { color: var(--blue); }
2573
+ .detail-messages .review-msg.subagent-prompt .msg-role { color: var(--amber); }
2574
+ .detail-messages .review-msg.walle-error-msg .msg-role { color: var(--red); }
1463
2575
 
1464
2576
  .detail-messages .msg-time {
1465
2577
  color: var(--fg-muted);
@@ -1499,6 +2611,76 @@ html[data-theme="light"] .nav-item.active {
1499
2611
  word-break: normal;
1500
2612
  }
1501
2613
 
2614
+ .detail-messages .msg-text > img,
2615
+ .detail-messages .msg-text :where(p, li, figure) > img,
2616
+ .message-body > img,
2617
+ .message-body :where(p, li, figure) > img,
2618
+ .mobile-doc-markdown > img,
2619
+ .mobile-doc-markdown :where(p, li, figure) > img {
2620
+ box-sizing: border-box;
2621
+ display: block;
2622
+ width: auto;
2623
+ max-width: 100%;
2624
+ height: auto;
2625
+ max-height: min(62vh, 620px);
2626
+ object-fit: contain;
2627
+ margin: 10px 0;
2628
+ border: 1px solid var(--line);
2629
+ border-radius: 10px;
2630
+ background: var(--bg);
2631
+ }
2632
+
2633
+ .detail-messages .msg-attachment-strip,
2634
+ .message-row .msg-attachment-strip {
2635
+ display: flex;
2636
+ flex-wrap: wrap;
2637
+ gap: 10px;
2638
+ margin-top: 10px;
2639
+ }
2640
+
2641
+ .detail-messages .msg-image-attachment,
2642
+ .message-row .msg-image-attachment {
2643
+ display: inline-grid;
2644
+ grid-template-columns: 86px minmax(0, 1fr);
2645
+ align-items: center;
2646
+ gap: 10px;
2647
+ width: min(100%, 300px);
2648
+ min-height: 72px;
2649
+ padding: 6px 10px 6px 6px;
2650
+ border: 1px solid var(--line);
2651
+ border-radius: 12px;
2652
+ background: color-mix(in srgb, var(--blue) 7%, var(--bg-elev));
2653
+ color: var(--fg);
2654
+ text-decoration: none;
2655
+ }
2656
+
2657
+ .detail-messages .msg-image-attachment:active,
2658
+ .message-row .msg-image-attachment:active {
2659
+ transform: translateY(1px);
2660
+ }
2661
+
2662
+ .detail-messages .msg-image-attachment img,
2663
+ .message-row .msg-image-attachment img {
2664
+ width: 86px;
2665
+ height: 64px;
2666
+ border: 1px solid var(--line-strong);
2667
+ border-radius: 9px;
2668
+ object-fit: cover;
2669
+ background: var(--bg);
2670
+ }
2671
+
2672
+ .detail-messages .msg-image-attachment span,
2673
+ .message-row .msg-image-attachment span {
2674
+ min-width: 0;
2675
+ overflow: hidden;
2676
+ color: var(--blue);
2677
+ font-size: 13px;
2678
+ font-weight: 800;
2679
+ line-height: 1.2;
2680
+ text-overflow: ellipsis;
2681
+ white-space: nowrap;
2682
+ }
2683
+
1502
2684
  .detail-messages .msg-text > :first-child { margin-top: 0; }
1503
2685
  .detail-messages .msg-text > :last-child { margin-bottom: 0; }
1504
2686
  .message-body > :first-child { margin-top: 0; }
@@ -1824,10 +3006,12 @@ html[data-theme="light"] .nav-item.active {
1824
3006
  line-height: 1;
1825
3007
  }
1826
3008
 
1827
- /* Skill-body and local-cmd collapsed rows */
3009
+ /* Skill-body and local-cmd collapsed rows (+ structured-capture cards) */
1828
3010
  .detail-messages .review-msg.skill-body,
1829
3011
  .detail-messages .review-msg.local-cmd,
1830
3012
  .detail-messages .review-msg.tool-result,
3013
+ .detail-messages .review-msg.tool-card,
3014
+ .detail-messages .review-msg.thinking-block,
1831
3015
  .detail-messages .review-msg.summary {
1832
3016
  cursor: pointer;
1833
3017
  background: var(--bg-soft);
@@ -1836,6 +3020,8 @@ html[data-theme="light"] .nav-item.active {
1836
3020
  .detail-messages .review-msg.skill-body .msg-text,
1837
3021
  .detail-messages .review-msg.local-cmd .msg-text,
1838
3022
  .detail-messages .review-msg.tool-result .msg-text,
3023
+ .detail-messages .review-msg.tool-card .msg-text,
3024
+ .detail-messages .review-msg.thinking-block .msg-text,
1839
3025
  .detail-messages .review-msg.summary .msg-text {
1840
3026
  display: none;
1841
3027
  margin-top: 8px;
@@ -1844,6 +3030,8 @@ html[data-theme="light"] .nav-item.active {
1844
3030
  .detail-messages .review-msg.skill-body.expanded .msg-text,
1845
3031
  .detail-messages .review-msg.local-cmd.expanded .msg-text,
1846
3032
  .detail-messages .review-msg.tool-result.expanded .msg-text,
3033
+ .detail-messages .review-msg.tool-card.expanded .msg-text,
3034
+ .detail-messages .review-msg.thinking-block.expanded .msg-text,
1847
3035
  .detail-messages .review-msg.summary.expanded .msg-text {
1848
3036
  display: block;
1849
3037
  }
@@ -1851,11 +3039,25 @@ html[data-theme="light"] .nav-item.active {
1851
3039
  .detail-messages .review-msg.skill-body .thought-chevron,
1852
3040
  .detail-messages .review-msg.local-cmd .thought-chevron,
1853
3041
  .detail-messages .review-msg.tool-result .thought-chevron,
3042
+ .detail-messages .review-msg.tool-card .thought-chevron,
3043
+ .detail-messages .review-msg.thinking-block .thought-chevron,
1854
3044
  .detail-messages .review-msg.summary .thought-chevron {
1855
3045
  display: inline-block;
1856
3046
  transition: transform 0.15s ease;
1857
3047
  }
1858
3048
 
3049
+ /* Structured-capture extras on mobile: compact divider + hide the hover-only
3050
+ raw-JSON inspector (no hover on touch). */
3051
+ .detail-messages .compact-divider {
3052
+ display: flex;
3053
+ align-items: center;
3054
+ gap: 8px;
3055
+ margin: 10px 0;
3056
+ }
3057
+ .detail-messages .compact-divider-line { flex: 1; height: 1px; background: var(--border); }
3058
+ .detail-messages .compact-divider-label { font-size: 10px; color: var(--fg-dim); text-transform: uppercase; }
3059
+ .detail-messages .msg-raw-btn { display: none; }
3060
+
1859
3061
  .detail-messages .review-msg.skill-body.expanded .thought-chevron,
1860
3062
  .detail-messages .review-msg.local-cmd.expanded .thought-chevron,
1861
3063
  .detail-messages .review-msg.tool-result.expanded .thought-chevron,
@@ -1927,6 +3129,17 @@ html[data-theme="light"] .nav-item.active {
1927
3129
  box-shadow: 0 -12px 28px rgba(0, 0, 0, 0.18);
1928
3130
  }
1929
3131
 
3132
+ .composer::before {
3133
+ content: "";
3134
+ position: absolute;
3135
+ top: 0;
3136
+ left: 12px;
3137
+ right: 12px;
3138
+ height: 1px;
3139
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--blue) 36%, var(--line)), transparent);
3140
+ opacity: 0.65;
3141
+ }
3142
+
1930
3143
  .composer.has-model-picker {
1931
3144
  grid-template-columns: minmax(0, 1fr) 58px 52px;
1932
3145
  }
@@ -2036,6 +3249,7 @@ html[data-theme="light"] .nav-item.active {
2036
3249
  user-select: text;
2037
3250
  -webkit-user-select: text;
2038
3251
  overscroll-behavior: contain;
3252
+ transition: border-color 140ms ease, box-shadow 140ms ease, background 140ms ease;
2039
3253
  }
2040
3254
 
2041
3255
  .composer-editor:empty::before {
@@ -2237,18 +3451,80 @@ html[data-theme="light"] .nav-item.active {
2237
3451
  color: var(--red);
2238
3452
  }
2239
3453
 
2240
- .send-btn {
2241
- align-self: start;
2242
- width: 52px;
2243
- min-width: 52px;
2244
- height: 52px;
2245
- min-height: 52px;
2246
- padding: 0;
2247
- font-size: 18px;
3454
+ .remote-submission-row {
3455
+ margin: 12px 0;
3456
+ padding: 12px 14px;
3457
+ border: 1px solid var(--border);
3458
+ border-radius: 14px;
3459
+ background: color-mix(in srgb, var(--panel-2) 82%, transparent);
3460
+ color: var(--fg);
3461
+ }
3462
+
3463
+ .remote-submission-row.pending {
3464
+ border-color: color-mix(in srgb, var(--blue) 42%, var(--border));
3465
+ }
3466
+
3467
+ .remote-submission-row.attention {
3468
+ border-color: color-mix(in srgb, var(--red) 52%, var(--border));
3469
+ background: color-mix(in srgb, var(--red) 8%, var(--panel-2));
3470
+ }
3471
+
3472
+ .remote-submission-head {
3473
+ margin-bottom: 4px;
3474
+ color: var(--fg-muted);
3475
+ font-size: 11px;
3476
+ font-weight: 800;
3477
+ letter-spacing: 0.08em;
3478
+ text-transform: uppercase;
3479
+ }
3480
+
3481
+ .remote-submission-message {
3482
+ color: var(--fg);
3483
+ font-size: 13px;
3484
+ line-height: 1.35;
3485
+ }
3486
+
3487
+ .remote-submission-preview {
3488
+ margin-top: 8px;
3489
+ color: var(--fg-muted);
3490
+ font-size: 12px;
3491
+ line-height: 1.35;
3492
+ overflow-wrap: anywhere;
3493
+ }
3494
+
3495
+ .remote-submission-repeat {
3496
+ margin-top: 8px;
3497
+ color: var(--fg-soft);
3498
+ font-size: 11px;
3499
+ line-height: 1.35;
3500
+ }
3501
+
3502
+ .send-btn {
3503
+ align-self: start;
3504
+ display: grid;
3505
+ place-items: center;
3506
+ width: 52px;
3507
+ min-width: 52px;
3508
+ height: 52px;
3509
+ min-height: 52px;
3510
+ padding: 0;
3511
+ border: 1px solid color-mix(in srgb, var(--fg) 14%, transparent);
3512
+ font-size: 18px;
3513
+ box-shadow:
3514
+ inset 0 1px 0 color-mix(in srgb, var(--ink) 18%, transparent),
3515
+ 0 8px 20px rgba(0, 0, 0, 0.2);
2248
3516
  touch-action: none;
2249
3517
  -webkit-touch-callout: none;
2250
3518
  -webkit-user-select: none;
2251
3519
  user-select: none;
3520
+ transition: transform 120ms ease, box-shadow 120ms ease, opacity 120ms ease;
3521
+ }
3522
+
3523
+ .send-btn:active {
3524
+ transform: translateY(1px) scale(0.98);
3525
+ box-shadow:
3526
+ inset 0 1px 0 color-mix(in srgb, var(--ink) 12%, transparent),
3527
+ 0 4px 12px rgba(0, 0, 0, 0.18);
2252
3528
  }
2253
3529
 
2254
3530
  .send-btn:disabled {
@@ -2404,6 +3680,55 @@ html[data-theme="light"] .nav-item.active {
2404
3680
  color: var(--red);
2405
3681
  }
2406
3682
 
3683
+ .send-menu-model {
3684
+ grid-column: 1 / -1;
3685
+ display: grid;
3686
+ grid-template-columns: auto minmax(0, 1fr);
3687
+ align-items: center;
3688
+ gap: 10px;
3689
+ min-height: 54px;
3690
+ color: var(--blue);
3691
+ text-align: left;
3692
+ }
3693
+
3694
+ .send-menu-model[hidden] {
3695
+ display: none;
3696
+ }
3697
+
3698
+ .send-menu-queue {
3699
+ grid-column: 1 / -1;
3700
+ display: grid;
3701
+ grid-template-columns: auto minmax(0, 1fr);
3702
+ align-items: center;
3703
+ gap: 10px;
3704
+ min-height: 54px;
3705
+ color: var(--blue);
3706
+ text-align: left;
3707
+ }
3708
+
3709
+ .send-menu-item-kicker,
3710
+ .send-menu-item-main {
3711
+ display: block;
3712
+ min-width: 0;
3713
+ overflow: hidden;
3714
+ text-overflow: ellipsis;
3715
+ white-space: nowrap;
3716
+ }
3717
+
3718
+ .send-menu-item-kicker {
3719
+ color: var(--fg-dim);
3720
+ font-size: 10px;
3721
+ font-weight: 950;
3722
+ letter-spacing: 0;
3723
+ text-transform: uppercase;
3724
+ }
3725
+
3726
+ .send-menu-item-main {
3727
+ color: var(--blue);
3728
+ font-size: 14px;
3729
+ font-weight: 950;
3730
+ }
3731
+
2407
3732
  .send-menu-item[data-send-menu-attach] {
2408
3733
  color: var(--blue);
2409
3734
  }
@@ -2416,6 +3741,13 @@ html[data-theme="light"] .nav-item.active {
2416
3741
  color: var(--green);
2417
3742
  }
2418
3743
 
3744
+ .send-menu-item[data-send-menu-queue] {
3745
+ border-color: color-mix(in srgb, var(--blue) 42%, var(--line));
3746
+ background:
3747
+ linear-gradient(90deg, color-mix(in srgb, var(--blue) 14%, transparent), transparent 72%),
3748
+ color-mix(in srgb, var(--bg-soft) 88%, transparent);
3749
+ }
3750
+
2419
3751
  .send-menu-item + .send-menu-item {
2420
3752
  margin-top: 0;
2421
3753
  }
@@ -2650,6 +3982,11 @@ html[data-theme="light"] .nav-item.active {
2650
3982
  min-width: 0;
2651
3983
  }
2652
3984
 
3985
+ .more-row > div,
3986
+ .more-row > span {
3987
+ min-width: 0;
3988
+ }
3989
+
2653
3990
  .more-action-row {
2654
3991
  align-items: center;
2655
3992
  gap: 14px;
@@ -2662,6 +3999,10 @@ html[data-theme="light"] .nav-item.active {
2662
3999
  padding-inline: 16px;
2663
4000
  }
2664
4001
 
4002
+ .more-action-card .row-action {
4003
+ min-height: 44px;
4004
+ }
4005
+
2665
4006
  .restart-row {
2666
4007
  grid-template-columns: 1fr;
2667
4008
  padding-block: 16px;
@@ -2796,6 +4137,124 @@ html[data-theme="light"] .nav-item.active {
2796
4137
  white-space: nowrap;
2797
4138
  }
2798
4139
 
4140
+ .more-shell {
4141
+ display: grid;
4142
+ gap: 12px;
4143
+ padding: 12px 16px 24px;
4144
+ }
4145
+
4146
+ .more-hero-card,
4147
+ .more-section-card,
4148
+ .more-action-card {
4149
+ border: 1px solid color-mix(in srgb, var(--line) 86%, var(--blue));
4150
+ border-radius: 16px;
4151
+ background: color-mix(in srgb, var(--bg-elev) 92%, var(--bg));
4152
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--fg) 6%, transparent);
4153
+ }
4154
+
4155
+ .more-hero-card {
4156
+ display: grid;
4157
+ grid-template-columns: minmax(0, 1fr) auto;
4158
+ gap: 12px;
4159
+ align-items: start;
4160
+ padding: 16px;
4161
+ background:
4162
+ linear-gradient(135deg, color-mix(in srgb, var(--green) 12%, transparent), transparent 46%),
4163
+ color-mix(in srgb, var(--bg-elev) 94%, var(--bg));
4164
+ }
4165
+
4166
+ .more-hero-copy {
4167
+ min-width: 0;
4168
+ }
4169
+
4170
+ .more-kicker {
4171
+ display: block;
4172
+ color: var(--fg-muted);
4173
+ font-size: 10px;
4174
+ font-weight: 900;
4175
+ line-height: 1.1;
4176
+ text-transform: uppercase;
4177
+ }
4178
+
4179
+ .more-hero-card h2,
4180
+ .more-section-card h3 {
4181
+ margin-top: 4px;
4182
+ color: var(--fg);
4183
+ }
4184
+
4185
+ .more-hero-card p,
4186
+ .more-section-copy {
4187
+ margin-top: 6px;
4188
+ color: var(--fg-dim);
4189
+ font-size: 13px;
4190
+ line-height: 1.4;
4191
+ }
4192
+
4193
+ .more-scope-list {
4194
+ display: flex;
4195
+ flex-wrap: wrap;
4196
+ gap: 6px;
4197
+ margin-top: 12px;
4198
+ }
4199
+
4200
+ .more-section-card {
4201
+ display: grid;
4202
+ gap: 10px;
4203
+ padding: 14px;
4204
+ }
4205
+
4206
+ .more-section-head,
4207
+ .more-action-card {
4208
+ display: grid;
4209
+ grid-template-columns: minmax(0, 1fr) auto;
4210
+ gap: 12px;
4211
+ align-items: center;
4212
+ }
4213
+
4214
+ .more-section-head > span,
4215
+ .more-action-card > span:first-child {
4216
+ min-width: 0;
4217
+ }
4218
+
4219
+ .more-action-card {
4220
+ width: 100%;
4221
+ min-height: 72px;
4222
+ padding: 14px;
4223
+ color: inherit;
4224
+ text-align: left;
4225
+ text-decoration: none;
4226
+ }
4227
+
4228
+ button.more-action-card {
4229
+ cursor: pointer;
4230
+ }
4231
+
4232
+ .more-action-card:active {
4233
+ background: color-mix(in srgb, var(--blue) 8%, var(--bg-elev));
4234
+ }
4235
+
4236
+ .more-action-card.inline-danger {
4237
+ border-color: color-mix(in srgb, var(--red) 24%, var(--line));
4238
+ background: color-mix(in srgb, var(--bg-elev) 90%, var(--red) 4%);
4239
+ }
4240
+
4241
+ .more-danger-card {
4242
+ border-color: color-mix(in srgb, var(--red) 22%, var(--line));
4243
+ }
4244
+
4245
+ .more-section-card .restart-notice {
4246
+ margin-top: 2px;
4247
+ }
4248
+
4249
+ .more-section-card .push-main {
4250
+ display: grid;
4251
+ gap: 10px;
4252
+ }
4253
+
4254
+ .more-section-card .push-actions {
4255
+ margin-top: 0;
4256
+ }
4257
+
2799
4258
  .switch-row {
2800
4259
  display: flex;
2801
4260
  gap: 10px;
@@ -2834,7 +4293,9 @@ html[data-theme="light"] .nav-item.active {
2834
4293
 
2835
4294
  #view-walle.mobile-view {
2836
4295
  min-height: calc(100dvh - var(--nav-h) - 72px - env(safe-area-inset-top));
4296
+ height: calc(100dvh - var(--nav-h) - 72px - env(safe-area-inset-top));
2837
4297
  padding: 0;
4298
+ overflow: hidden;
2838
4299
  }
2839
4300
 
2840
4301
  #view-walle.mobile-view.active {
@@ -2845,27 +4306,36 @@ html[data-theme="light"] .nav-item.active {
2845
4306
  #walle-content {
2846
4307
  flex: 1;
2847
4308
  min-height: 0;
4309
+ overflow: hidden;
2848
4310
  }
2849
4311
 
2850
4312
  .walle-chat-shell {
2851
4313
  display: flex;
2852
4314
  flex: 1;
4315
+ height: 100%;
2853
4316
  min-height: 0;
2854
4317
  flex-direction: column;
4318
+ overflow: hidden;
4319
+ background:
4320
+ radial-gradient(circle at top right, color-mix(in srgb, var(--blue) 10%, transparent), transparent 34%),
4321
+ var(--bg);
2855
4322
  }
2856
4323
 
2857
4324
  .walle-chat-context {
2858
- position: sticky;
2859
- top: calc(72px + env(safe-area-inset-top));
4325
+ position: relative;
4326
+ top: auto;
2860
4327
  z-index: 12;
2861
4328
  display: grid;
2862
4329
  grid-template-columns: minmax(0, 1fr);
2863
4330
  gap: 10px;
2864
- padding: 10px 12px;
2865
- border-top: 1px solid var(--line);
2866
- border-bottom: 1px solid var(--line);
2867
- background: color-mix(in srgb, var(--bg) 94%, transparent);
2868
- backdrop-filter: blur(12px);
4331
+ margin: 12px 12px 0;
4332
+ padding: 13px;
4333
+ border: 1px solid color-mix(in srgb, var(--blue) 30%, var(--line));
4334
+ border-radius: 16px;
4335
+ background:
4336
+ linear-gradient(135deg, color-mix(in srgb, var(--blue) 12%, transparent), transparent 54%),
4337
+ color-mix(in srgb, var(--bg-elev) 94%, var(--bg));
4338
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--fg) 7%, transparent);
2869
4339
  }
2870
4340
 
2871
4341
  .walle-context-main,
@@ -2877,7 +4347,15 @@ html[data-theme="light"] .nav-item.active {
2877
4347
  }
2878
4348
 
2879
4349
  .walle-context-actions {
2880
- justify-content: space-between;
4350
+ flex-wrap: wrap;
4351
+ justify-content: flex-start;
4352
+ }
4353
+
4354
+ .walle-context-actions .row-action {
4355
+ border: 1px solid color-mix(in srgb, var(--blue) 40%, var(--line));
4356
+ background: color-mix(in srgb, var(--blue) 14%, var(--bg-soft));
4357
+ color: var(--fg);
4358
+ text-decoration: none;
2881
4359
  }
2882
4360
 
2883
4361
  .walle-avatar {
@@ -2943,70 +4421,309 @@ html[data-theme="light"] .nav-item.active {
2943
4421
 
2944
4422
  .walle-chat-messages {
2945
4423
  flex: 1;
2946
- min-height: 240px;
2947
- padding-bottom: 14px;
2948
- }
2949
-
2950
- .walle-chat-composer {
2951
- position: sticky;
2952
- bottom: calc(var(--nav-h) + env(safe-area-inset-bottom));
2953
- }
2954
-
2955
- .walle-composer-tools {
2956
- display: flex;
2957
- justify-content: flex-end;
2958
- gap: 2px;
4424
+ min-height: 0;
4425
+ padding: 12px 12px 18px;
4426
+ overflow-y: auto;
4427
+ -webkit-overflow-scrolling: touch;
2959
4428
  }
2960
4429
 
2961
- .walle-chat-composer .composer-clear {
2962
- top: 45px;
4430
+ .mobile-health-card {
4431
+ margin: 10px 12px 0;
4432
+ border: 1px solid color-mix(in srgb, var(--blue) 26%, var(--line));
4433
+ border-radius: 14px;
4434
+ background: color-mix(in srgb, var(--bg-elev) 88%, var(--blue) 6%);
4435
+ overflow: hidden;
2963
4436
  }
2964
4437
 
2965
- .walle-tool-btn {
2966
- display: inline-grid;
2967
- place-items: center;
2968
- width: 44px;
2969
- min-width: 44px;
2970
- min-height: 44px;
2971
- border-radius: 8px;
2972
- background: transparent;
2973
- color: var(--fg-dim);
2974
- font-size: 15px;
4438
+ .mobile-health-card.error {
4439
+ border-color: color-mix(in srgb, var(--red) 44%, var(--line));
4440
+ background: color-mix(in srgb, var(--bg-elev) 90%, var(--red) 7%);
2975
4441
  }
2976
4442
 
2977
- .walle-tool-btn:active,
2978
- .walle-tool-btn:focus-visible {
2979
- background: var(--bg-soft);
2980
- color: var(--blue);
4443
+ .mobile-health-card.warning {
4444
+ border-color: color-mix(in srgb, var(--amber) 42%, var(--line));
4445
+ background: color-mix(in srgb, var(--bg-elev) 90%, var(--amber) 7%);
2981
4446
  }
2982
4447
 
2983
- .walle-activity-row {
4448
+ .mobile-health-header {
2984
4449
  display: grid;
2985
- grid-template-columns: 12px minmax(0, 1fr);
2986
- align-items: center;
2987
- gap: 8px;
2988
- margin: 0 0 12px;
2989
- padding: 9px 11px;
2990
- border: 1px solid color-mix(in srgb, var(--blue) 26%, var(--line));
2991
- border-radius: 10px;
2992
- background: color-mix(in srgb, var(--blue) 7%, var(--bg-elev));
2993
- color: var(--fg-dim);
2994
- font-size: 12px;
2995
- font-weight: 800;
4450
+ grid-template-columns: 10px minmax(0, 1fr);
4451
+ gap: 10px;
4452
+ padding: 12px;
2996
4453
  }
2997
4454
 
2998
- .walle-activity-dot {
4455
+ .mobile-health-dot {
2999
4456
  width: 8px;
3000
4457
  height: 8px;
4458
+ margin-top: 6px;
3001
4459
  border-radius: 999px;
3002
- background: var(--blue);
3003
- box-shadow: 0 0 0 4px color-mix(in srgb, var(--blue) 16%, transparent);
4460
+ background: var(--green);
4461
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--green) 14%, transparent);
3004
4462
  }
3005
4463
 
3006
- .walle-activity-copy {
3007
- display: flex;
3008
- min-width: 0;
3009
- align-items: center;
4464
+ .mobile-health-card.error .mobile-health-dot {
4465
+ background: var(--red);
4466
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--red) 14%, transparent);
4467
+ }
4468
+
4469
+ .mobile-health-card.warning .mobile-health-dot {
4470
+ background: var(--amber);
4471
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--amber) 16%, transparent);
4472
+ }
4473
+
4474
+ .mobile-health-kicker {
4475
+ color: var(--fg-muted);
4476
+ font-size: 11px;
4477
+ font-weight: 900;
4478
+ letter-spacing: 0;
4479
+ text-transform: uppercase;
4480
+ }
4481
+
4482
+ .mobile-health-copy h3 {
4483
+ margin: 2px 0 0;
4484
+ color: var(--fg);
4485
+ font-size: 14px;
4486
+ line-height: 1.25;
4487
+ }
4488
+
4489
+ .mobile-health-copy p {
4490
+ margin: 4px 0 0;
4491
+ color: var(--fg-dim);
4492
+ font-size: 12px;
4493
+ line-height: 1.42;
4494
+ }
4495
+
4496
+ .mobile-health-meta,
4497
+ .mobile-health-current-meta,
4498
+ .mobile-health-more {
4499
+ margin-top: 6px;
4500
+ color: var(--fg-muted);
4501
+ font-size: 11px;
4502
+ font-weight: 800;
4503
+ line-height: 1.3;
4504
+ }
4505
+
4506
+ .mobile-health-current {
4507
+ margin: 0 12px 12px;
4508
+ padding: 10px;
4509
+ border: 1px solid color-mix(in srgb, var(--red) 32%, var(--line));
4510
+ border-radius: 9px;
4511
+ background: color-mix(in srgb, var(--bg) 62%, transparent);
4512
+ }
4513
+
4514
+ .mobile-health-actions {
4515
+ display: grid;
4516
+ grid-template-columns: minmax(0, 1fr) auto auto;
4517
+ gap: 8px;
4518
+ margin-top: 10px;
4519
+ align-items: center;
4520
+ }
4521
+
4522
+ .mobile-health-btn,
4523
+ .mobile-health-icon-btn {
4524
+ min-height: 40px;
4525
+ border: 1px solid var(--line);
4526
+ border-radius: 8px;
4527
+ background: var(--bg-soft);
4528
+ color: var(--fg);
4529
+ font-size: 12px;
4530
+ font-weight: 900;
4531
+ text-decoration: none;
4532
+ }
4533
+
4534
+ .mobile-health-btn {
4535
+ display: inline-flex;
4536
+ align-items: center;
4537
+ justify-content: center;
4538
+ padding: 0 12px;
4539
+ }
4540
+
4541
+ .mobile-health-btn.primary {
4542
+ border-color: color-mix(in srgb, var(--blue) 42%, var(--line));
4543
+ background: var(--blue);
4544
+ color: #07111f;
4545
+ }
4546
+
4547
+ .mobile-health-icon-btn {
4548
+ width: 40px;
4549
+ min-width: 40px;
4550
+ padding: 0;
4551
+ color: var(--fg-dim);
4552
+ font-size: 20px;
4553
+ }
4554
+
4555
+ .mobile-health-test {
4556
+ margin: 0 12px 12px;
4557
+ padding: 8px 10px;
4558
+ border: 1px solid color-mix(in srgb, var(--green) 34%, var(--line));
4559
+ border-radius: 8px;
4560
+ color: var(--fg);
4561
+ font-size: 12px;
4562
+ font-weight: 800;
4563
+ }
4564
+
4565
+ .mobile-health-test.error {
4566
+ border-color: color-mix(in srgb, var(--red) 40%, var(--line));
4567
+ }
4568
+
4569
+ .mobile-health-group {
4570
+ border-top: 1px solid var(--line);
4571
+ }
4572
+
4573
+ .mobile-health-group summary {
4574
+ display: flex;
4575
+ align-items: center;
4576
+ justify-content: space-between;
4577
+ gap: 10px;
4578
+ min-height: 42px;
4579
+ padding: 0 12px;
4580
+ color: var(--fg);
4581
+ font-size: 12px;
4582
+ font-weight: 900;
4583
+ list-style: none;
4584
+ }
4585
+
4586
+ .mobile-health-group summary::-webkit-details-marker {
4587
+ display: none;
4588
+ }
4589
+
4590
+ .mobile-health-group summary span {
4591
+ min-width: 0;
4592
+ }
4593
+
4594
+ .mobile-health-group summary strong {
4595
+ display: inline-grid;
4596
+ min-width: 22px;
4597
+ height: 22px;
4598
+ place-items: center;
4599
+ border: 1px solid var(--line);
4600
+ border-radius: 999px;
4601
+ color: var(--fg-dim);
4602
+ font-size: 11px;
4603
+ }
4604
+
4605
+ .mobile-health-group-body {
4606
+ display: grid;
4607
+ gap: 6px;
4608
+ padding: 0 12px 12px;
4609
+ }
4610
+
4611
+ .mobile-health-row {
4612
+ display: grid;
4613
+ grid-template-columns: 8px minmax(0, 1fr) auto;
4614
+ gap: 8px;
4615
+ align-items: start;
4616
+ color: var(--fg-dim);
4617
+ font-size: 12px;
4618
+ line-height: 1.35;
4619
+ }
4620
+
4621
+ .mobile-health-row-dot {
4622
+ width: 5px;
4623
+ height: 5px;
4624
+ margin-top: 6px;
4625
+ border-radius: 999px;
4626
+ background: var(--fg-muted);
4627
+ }
4628
+
4629
+ .mobile-health-row-copy {
4630
+ overflow-wrap: anywhere;
4631
+ }
4632
+
4633
+ .mobile-health-row-action {
4634
+ min-height: 30px;
4635
+ padding: 0 10px;
4636
+ border: 1px solid color-mix(in srgb, var(--blue) 32%, var(--line));
4637
+ border-radius: 7px;
4638
+ background: color-mix(in srgb, var(--blue) 14%, var(--bg-soft));
4639
+ color: var(--fg);
4640
+ font-size: 11px;
4641
+ font-weight: 900;
4642
+ text-decoration: none;
4643
+ white-space: nowrap;
4644
+ }
4645
+
4646
+ a.mobile-health-row-action {
4647
+ display: inline-flex;
4648
+ align-items: center;
4649
+ justify-content: center;
4650
+ }
4651
+
4652
+ .mobile-health-footer {
4653
+ padding: 10px 12px 12px;
4654
+ border-top: 1px solid var(--line);
4655
+ }
4656
+
4657
+ .mobile-health-link {
4658
+ color: var(--blue);
4659
+ font-size: 12px;
4660
+ font-weight: 900;
4661
+ text-decoration: none;
4662
+ }
4663
+
4664
+ .walle-chat-composer {
4665
+ position: relative;
4666
+ bottom: auto;
4667
+ margin: 0;
4668
+ border-top-color: color-mix(in srgb, var(--blue) 24%, var(--line));
4669
+ box-shadow: 0 -10px 28px rgba(0, 0, 0, 0.24);
4670
+ }
4671
+
4672
+ .walle-composer-tools {
4673
+ display: flex;
4674
+ justify-content: flex-end;
4675
+ gap: 2px;
4676
+ }
4677
+
4678
+ .walle-chat-composer .composer-clear {
4679
+ top: 45px;
4680
+ }
4681
+
4682
+ .walle-tool-btn {
4683
+ display: inline-grid;
4684
+ place-items: center;
4685
+ width: 44px;
4686
+ min-width: 44px;
4687
+ min-height: 44px;
4688
+ border-radius: 8px;
4689
+ background: transparent;
4690
+ color: var(--fg-dim);
4691
+ font-size: 15px;
4692
+ }
4693
+
4694
+ .walle-tool-btn:active,
4695
+ .walle-tool-btn:focus-visible {
4696
+ background: var(--bg-soft);
4697
+ color: var(--blue);
4698
+ }
4699
+
4700
+ .walle-activity-row {
4701
+ display: grid;
4702
+ grid-template-columns: 12px minmax(0, 1fr);
4703
+ align-items: center;
4704
+ gap: 8px;
4705
+ margin: 0 0 12px;
4706
+ padding: 9px 11px;
4707
+ border: 1px solid color-mix(in srgb, var(--blue) 26%, var(--line));
4708
+ border-radius: 10px;
4709
+ background: color-mix(in srgb, var(--blue) 7%, var(--bg-elev));
4710
+ color: var(--fg-dim);
4711
+ font-size: 12px;
4712
+ font-weight: 800;
4713
+ }
4714
+
4715
+ .walle-activity-dot {
4716
+ width: 8px;
4717
+ height: 8px;
4718
+ border-radius: 999px;
4719
+ background: var(--blue);
4720
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--blue) 16%, transparent);
4721
+ }
4722
+
4723
+ .walle-activity-copy {
4724
+ display: flex;
4725
+ min-width: 0;
4726
+ align-items: center;
3010
4727
  justify-content: space-between;
3011
4728
  gap: 8px;
3012
4729
  }
@@ -3020,15 +4737,31 @@ html[data-theme="light"] .nav-item.active {
3020
4737
 
3021
4738
  .walle-empty-chat {
3022
4739
  display: grid;
3023
- gap: 6px;
3024
- padding: 42px 20px;
4740
+ justify-items: center;
4741
+ gap: 10px;
4742
+ max-width: 380px;
4743
+ margin: 0 auto;
4744
+ padding: 56px 22px;
3025
4745
  text-align: center;
3026
4746
  }
3027
4747
 
4748
+ .walle-empty-icon {
4749
+ display: inline-grid;
4750
+ place-items: center;
4751
+ width: 48px;
4752
+ height: 48px;
4753
+ border: 1px solid color-mix(in srgb, var(--blue) 36%, var(--line));
4754
+ border-radius: 12px;
4755
+ background: color-mix(in srgb, var(--blue) 12%, var(--bg-soft));
4756
+ color: var(--blue);
4757
+ font-size: 16px;
4758
+ }
4759
+
3028
4760
  .walle-empty-chat h3 {
3029
4761
  margin: 0;
3030
4762
  color: var(--fg);
3031
- font-size: 18px;
4763
+ font-size: 19px;
4764
+ line-height: 1.2;
3032
4765
  }
3033
4766
 
3034
4767
  .walle-empty-chat p {
@@ -3038,6 +4771,17 @@ html[data-theme="light"] .nav-item.active {
3038
4771
  line-height: 1.4;
3039
4772
  }
3040
4773
 
4774
+ .walle-empty-actions {
4775
+ width: min(100%, 240px);
4776
+ padding-top: 8px;
4777
+ }
4778
+
4779
+ .walle-empty-note {
4780
+ padding: 0 8px;
4781
+ color: var(--fg-muted);
4782
+ font-size: 12px;
4783
+ }
4784
+
3041
4785
  .modal-backdrop {
3042
4786
  position: fixed;
3043
4787
  inset: 0;
@@ -3047,26 +4791,153 @@ html[data-theme="light"] .nav-item.active {
3047
4791
  background: rgba(0, 0, 0, 0.54);
3048
4792
  }
3049
4793
 
3050
- #stepup-sheet {
3051
- z-index: 70;
4794
+ #stepup-sheet {
4795
+ z-index: 70;
4796
+ }
4797
+
4798
+ .modal-backdrop[hidden] {
4799
+ display: none;
4800
+ }
4801
+
4802
+ .stepup-sheet {
4803
+ width: 100%;
4804
+ padding: 18px 16px calc(16px + env(safe-area-inset-bottom));
4805
+ border-top: 1px solid var(--line);
4806
+ border-radius: 8px 8px 0 0;
4807
+ background: var(--bg-elev);
4808
+ }
4809
+
4810
+ .stepup-sheet p {
4811
+ margin-top: 8px;
4812
+ color: var(--fg-dim);
4813
+ line-height: 1.45;
4814
+ }
4815
+
4816
+ .worktree-finish-sheet {
4817
+ display: grid;
4818
+ gap: 12px;
4819
+ max-height: min(86vh, 720px);
4820
+ overflow-y: auto;
4821
+ }
4822
+
4823
+ .worktree-finish-card {
4824
+ display: grid;
4825
+ grid-template-columns: 1fr;
4826
+ gap: 8px;
4827
+ padding: 12px;
4828
+ border: 1px solid var(--line);
4829
+ border-radius: 8px;
4830
+ background: color-mix(in srgb, var(--bg) 72%, transparent);
4831
+ }
4832
+
4833
+ .worktree-finish-card > div {
4834
+ display: grid;
4835
+ grid-template-columns: 74px minmax(0, 1fr);
4836
+ align-items: baseline;
4837
+ gap: 10px;
4838
+ min-width: 0;
4839
+ }
4840
+
4841
+ .worktree-finish-card span,
4842
+ .worktree-finish-plan strong {
4843
+ color: var(--fg-muted);
4844
+ font-size: 11px;
4845
+ font-weight: 900;
4846
+ letter-spacing: 0;
4847
+ text-transform: uppercase;
4848
+ }
4849
+
4850
+ .worktree-finish-card strong {
4851
+ min-width: 0;
4852
+ color: var(--fg);
4853
+ font-size: 13px;
4854
+ line-height: 1.3;
4855
+ overflow: hidden;
4856
+ text-overflow: ellipsis;
4857
+ white-space: nowrap;
4858
+ }
4859
+
4860
+ .worktree-finish-action-group,
4861
+ .worktree-finish-session-picker {
4862
+ display: grid;
4863
+ gap: 8px;
4864
+ }
4865
+
4866
+ .worktree-finish-action-group > span,
4867
+ .worktree-finish-session-picker > span {
4868
+ color: var(--fg-muted);
4869
+ font-size: 11px;
4870
+ font-weight: 900;
4871
+ letter-spacing: 0;
4872
+ text-transform: uppercase;
4873
+ }
4874
+
4875
+ .worktree-finish-action-options {
4876
+ display: grid;
4877
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4878
+ gap: 8px;
4879
+ }
4880
+
4881
+ .worktree-finish-action-options button {
4882
+ min-height: 44px;
4883
+ padding: 10px 12px;
4884
+ border: 1px solid var(--line);
4885
+ border-radius: 8px;
4886
+ background: color-mix(in srgb, var(--bg-elev) 82%, transparent);
4887
+ color: var(--fg-dim);
4888
+ font: inherit;
4889
+ font-size: 13px;
4890
+ font-weight: 900;
4891
+ letter-spacing: 0;
4892
+ }
4893
+
4894
+ .worktree-finish-action-options button[aria-checked="true"] {
4895
+ border-color: rgba(113, 167, 255, 0.82);
4896
+ background: rgba(113, 167, 255, 0.16);
4897
+ color: var(--fg);
4898
+ box-shadow: inset 0 0 0 1px rgba(113, 167, 255, 0.22);
4899
+ }
4900
+
4901
+ .worktree-finish-action-options button:disabled {
4902
+ opacity: 0.55;
4903
+ }
4904
+
4905
+ .worktree-finish-session-picker select {
4906
+ width: 100%;
4907
+ min-height: 46px;
4908
+ padding: 10px 12px;
4909
+ border: 1px solid var(--line);
4910
+ border-radius: 8px;
4911
+ background: var(--bg);
4912
+ color: var(--fg);
4913
+ font: inherit;
4914
+ font-size: 14px;
4915
+ }
4916
+
4917
+ .worktree-finish-plan {
4918
+ padding: 12px;
4919
+ border: 1px solid rgba(113, 167, 255, 0.28);
4920
+ border-radius: 8px;
4921
+ background: rgba(113, 167, 255, 0.08);
3052
4922
  }
3053
4923
 
3054
- .modal-backdrop[hidden] {
3055
- display: none;
4924
+ .worktree-finish-plan ol {
4925
+ display: grid;
4926
+ gap: 6px;
4927
+ margin: 8px 0 0;
4928
+ padding-left: 18px;
3056
4929
  }
3057
4930
 
3058
- .stepup-sheet {
3059
- width: 100%;
3060
- padding: 18px 16px calc(16px + env(safe-area-inset-bottom));
3061
- border-top: 1px solid var(--line);
3062
- border-radius: 8px 8px 0 0;
3063
- background: var(--bg-elev);
4931
+ .worktree-finish-plan li {
4932
+ color: var(--fg);
4933
+ font-size: 13px;
4934
+ line-height: 1.35;
3064
4935
  }
3065
4936
 
3066
- .stepup-sheet p {
3067
- margin-top: 8px;
3068
- color: var(--fg-dim);
3069
- line-height: 1.45;
4937
+ .worktree-finish-error {
4938
+ margin-top: 0 !important;
4939
+ color: #ff7a9a !important;
4940
+ font-weight: 800;
3070
4941
  }
3071
4942
 
3072
4943
  .model-picker-sheet {
@@ -3129,79 +5000,340 @@ html[data-theme="light"] .nav-item.active {
3129
5000
  -webkit-overflow-scrolling: touch;
3130
5001
  }
3131
5002
 
3132
- .model-picker-empty {
3133
- padding: 18px 4px;
3134
- color: var(--fg-dim);
3135
- font-size: 13px;
3136
- line-height: 1.4;
5003
+ .model-picker-empty {
5004
+ padding: 18px 4px;
5005
+ color: var(--fg-dim);
5006
+ font-size: 13px;
5007
+ line-height: 1.4;
5008
+ }
5009
+
5010
+ .model-picker-option {
5011
+ width: 100%;
5012
+ display: grid;
5013
+ grid-template-columns: minmax(0, 1fr) auto;
5014
+ gap: 10px;
5015
+ align-items: center;
5016
+ min-height: 60px;
5017
+ padding: 10px 12px;
5018
+ border: 1px solid color-mix(in srgb, var(--fg-muted) 18%, var(--line));
5019
+ border-radius: 14px;
5020
+ background: color-mix(in srgb, var(--bg-soft) 88%, transparent);
5021
+ color: var(--fg);
5022
+ text-align: left;
5023
+ }
5024
+
5025
+ .model-picker-option[aria-selected="true"] {
5026
+ border-color: color-mix(in srgb, var(--blue) 70%, var(--line-strong));
5027
+ background:
5028
+ linear-gradient(90deg, color-mix(in srgb, var(--blue) 18%, transparent), transparent 70%),
5029
+ color-mix(in srgb, var(--bg-soft) 92%, var(--blue));
5030
+ }
5031
+
5032
+ .model-picker-option:active,
5033
+ .model-picker-option:focus-visible {
5034
+ outline: none;
5035
+ border-color: var(--blue);
5036
+ background: color-mix(in srgb, var(--blue) 16%, var(--bg-soft));
5037
+ }
5038
+
5039
+ .model-picker-option-main {
5040
+ display: grid;
5041
+ gap: 3px;
5042
+ min-width: 0;
5043
+ }
5044
+
5045
+ .model-picker-option-title,
5046
+ .model-picker-option-meta {
5047
+ display: block;
5048
+ min-width: 0;
5049
+ overflow: hidden;
5050
+ text-overflow: ellipsis;
5051
+ white-space: nowrap;
5052
+ }
5053
+
5054
+ .model-picker-option-title {
5055
+ color: var(--fg);
5056
+ font-size: 14px;
5057
+ font-weight: 950;
5058
+ }
5059
+
5060
+ .model-picker-option-meta {
5061
+ color: var(--fg-dim);
5062
+ font-size: 12px;
5063
+ font-weight: 750;
5064
+ }
5065
+
5066
+ .model-picker-option-check {
5067
+ display: grid;
5068
+ place-items: center;
5069
+ min-width: 28px;
5070
+ height: 28px;
5071
+ border: 1px solid var(--line-strong);
5072
+ border-radius: 999px;
5073
+ color: var(--blue);
5074
+ font-size: 14px;
5075
+ font-weight: 950;
5076
+ }
5077
+
5078
+ .queue-builder-backdrop {
5079
+ justify-content: center;
5080
+ }
5081
+
5082
+ .mobile-queue-builder-sheet {
5083
+ width: 100%;
5084
+ max-height: min(88vh, 760px);
5085
+ display: grid;
5086
+ grid-template-rows: auto auto auto minmax(120px, 1fr) auto auto;
5087
+ gap: 12px;
5088
+ padding: 16px 16px calc(16px + env(safe-area-inset-bottom));
5089
+ border-top: 1px solid var(--line);
5090
+ border-radius: 18px 18px 0 0;
5091
+ background:
5092
+ linear-gradient(180deg, color-mix(in srgb, var(--green) 8%, transparent), transparent 30%),
5093
+ var(--bg-elev);
5094
+ box-shadow: 0 -24px 60px rgba(0, 0, 0, 0.38);
5095
+ }
5096
+
5097
+ .queue-builder-head {
5098
+ display: grid;
5099
+ grid-template-columns: minmax(0, 1fr) 44px;
5100
+ gap: 12px;
5101
+ align-items: start;
5102
+ }
5103
+
5104
+ .queue-builder-head h2,
5105
+ .queue-builder-head p {
5106
+ margin: 0;
5107
+ }
5108
+
5109
+ .sheet-kicker {
5110
+ margin-bottom: 4px !important;
5111
+ color: var(--green);
5112
+ font-size: 11px;
5113
+ font-weight: 950;
5114
+ letter-spacing: 0;
5115
+ text-transform: uppercase;
5116
+ }
5117
+
5118
+ .queue-builder-head h2 {
5119
+ color: var(--fg);
5120
+ font-size: 18px;
5121
+ font-weight: 950;
5122
+ }
5123
+
5124
+ .queue-builder-head p:not(.sheet-kicker) {
5125
+ margin-top: 4px;
5126
+ color: var(--fg-dim);
5127
+ font-size: 13px;
5128
+ line-height: 1.35;
5129
+ }
5130
+
5131
+ .queue-builder-toolbar {
5132
+ display: grid;
5133
+ grid-template-columns: 1fr 1fr;
5134
+ gap: 8px;
5135
+ }
5136
+
5137
+ .queue-builder-chip {
5138
+ min-height: 42px;
5139
+ padding: 9px 12px;
5140
+ border: 1px solid var(--line);
5141
+ border-radius: 12px;
5142
+ background: color-mix(in srgb, var(--bg-soft) 88%, transparent);
5143
+ color: var(--fg);
5144
+ font: inherit;
5145
+ font-size: 13px;
5146
+ font-weight: 900;
5147
+ }
5148
+
5149
+ .queue-builder-chip[aria-pressed="true"] {
5150
+ border-color: color-mix(in srgb, var(--green) 60%, var(--line));
5151
+ background: color-mix(in srgb, var(--green) 14%, var(--bg-soft));
5152
+ color: var(--green);
5153
+ }
5154
+
5155
+ .queue-builder-chip.danger {
5156
+ color: var(--red);
5157
+ }
5158
+
5159
+ .queue-builder-status {
5160
+ min-height: 18px;
5161
+ color: var(--fg-dim);
5162
+ font-size: 12px;
5163
+ font-weight: 750;
5164
+ line-height: 1.35;
5165
+ }
5166
+
5167
+ .queue-builder-status.ok {
5168
+ color: var(--green);
5169
+ }
5170
+
5171
+ .queue-builder-status.error {
5172
+ color: var(--red);
5173
+ }
5174
+
5175
+ .mobile-queue-list {
5176
+ display: grid;
5177
+ align-content: start;
5178
+ gap: 8px;
5179
+ min-height: 120px;
5180
+ overflow-y: auto;
5181
+ padding: 2px 0;
5182
+ -webkit-overflow-scrolling: touch;
5183
+ }
5184
+
5185
+ .mobile-queue-empty,
5186
+ .mobile-queue-loading {
5187
+ padding: 18px 4px;
5188
+ color: var(--fg-dim);
5189
+ font-size: 13px;
5190
+ line-height: 1.4;
5191
+ }
5192
+
5193
+ .mobile-queue-item {
5194
+ display: grid;
5195
+ gap: 10px;
5196
+ padding: 12px;
5197
+ border: 1px solid color-mix(in srgb, var(--fg-muted) 18%, var(--line));
5198
+ border-radius: 14px;
5199
+ background: color-mix(in srgb, var(--bg-soft) 88%, transparent);
5200
+ }
5201
+
5202
+ .mobile-queue-item.is-sent {
5203
+ opacity: 0.62;
5204
+ }
5205
+
5206
+ .mobile-queue-item.is-collapsed {
5207
+ gap: 0;
5208
+ padding-block: 10px;
5209
+ }
5210
+
5211
+ .mobile-queue-item-head {
5212
+ display: grid;
5213
+ grid-template-columns: minmax(0, 1fr) auto;
5214
+ gap: 10px;
5215
+ align-items: start;
5216
+ }
5217
+
5218
+ .mobile-queue-item-title {
5219
+ min-width: 0;
5220
+ color: var(--fg);
5221
+ font-size: 14px;
5222
+ font-weight: 950;
5223
+ overflow: hidden;
5224
+ text-overflow: ellipsis;
5225
+ white-space: nowrap;
5226
+ }
5227
+
5228
+ .mobile-queue-item-meta {
5229
+ display: flex;
5230
+ flex-wrap: wrap;
5231
+ gap: 6px;
5232
+ color: var(--fg-dim);
5233
+ font-size: 11px;
5234
+ font-weight: 850;
5235
+ }
5236
+
5237
+ .mobile-queue-status-pill,
5238
+ .mobile-queue-attachment-pill {
5239
+ padding: 2px 7px;
5240
+ border: 1px solid var(--line);
5241
+ border-radius: 999px;
5242
+ background: color-mix(in srgb, var(--bg) 65%, transparent);
5243
+ }
5244
+
5245
+ .mobile-queue-text {
5246
+ display: -webkit-box;
5247
+ margin: 0;
5248
+ color: var(--fg);
5249
+ font-size: 13px;
5250
+ line-height: 1.38;
5251
+ overflow: hidden;
5252
+ -webkit-box-orient: vertical;
5253
+ -webkit-line-clamp: 4;
5254
+ white-space: pre-wrap;
5255
+ }
5256
+
5257
+ .mobile-queue-edit {
5258
+ display: grid;
5259
+ gap: 8px;
5260
+ }
5261
+
5262
+ .mobile-queue-edit textarea {
5263
+ min-height: 118px;
5264
+ resize: vertical;
5265
+ }
5266
+
5267
+ .mobile-queue-item-actions {
5268
+ display: grid;
5269
+ grid-template-columns: repeat(4, minmax(0, 1fr));
5270
+ gap: 6px;
5271
+ }
5272
+
5273
+ .mobile-queue-edit-actions {
5274
+ display: grid;
5275
+ grid-template-columns: repeat(2, minmax(0, 1fr));
5276
+ gap: 8px;
3137
5277
  }
3138
5278
 
3139
- .model-picker-option {
3140
- width: 100%;
3141
- display: grid;
3142
- grid-template-columns: minmax(0, 1fr) auto;
3143
- gap: 10px;
3144
- align-items: center;
3145
- min-height: 60px;
3146
- padding: 10px 12px;
3147
- border: 1px solid color-mix(in srgb, var(--fg-muted) 18%, var(--line));
3148
- border-radius: 14px;
3149
- background: color-mix(in srgb, var(--bg-soft) 88%, transparent);
3150
- color: var(--fg);
3151
- text-align: left;
5279
+ .mobile-queue-item-actions button,
5280
+ .mobile-queue-edit-actions button {
5281
+ min-height: 38px;
5282
+ padding: 8px;
5283
+ border: 1px solid var(--line);
5284
+ border-radius: 10px;
5285
+ background: color-mix(in srgb, var(--bg-elev) 82%, transparent);
5286
+ color: var(--fg-dim);
5287
+ font: inherit;
5288
+ font-size: 12px;
5289
+ font-weight: 900;
3152
5290
  }
3153
5291
 
3154
- .model-picker-option[aria-selected="true"] {
3155
- border-color: color-mix(in srgb, var(--blue) 70%, var(--line-strong));
3156
- background:
3157
- linear-gradient(90deg, color-mix(in srgb, var(--blue) 18%, transparent), transparent 70%),
3158
- color-mix(in srgb, var(--bg-soft) 92%, var(--blue));
5292
+ .mobile-queue-item-actions button[data-queue-action="remove"] {
5293
+ color: var(--red);
3159
5294
  }
3160
5295
 
3161
- .model-picker-option:active,
3162
- .model-picker-option:focus-visible {
3163
- outline: none;
3164
- border-color: var(--blue);
3165
- background: color-mix(in srgb, var(--blue) 16%, var(--bg-soft));
5296
+ .mobile-queue-item-actions button:disabled {
5297
+ opacity: 0.45;
3166
5298
  }
3167
5299
 
3168
- .model-picker-option-main {
5300
+ .queue-builder-add-form {
3169
5301
  display: grid;
3170
- gap: 3px;
3171
- min-width: 0;
5302
+ gap: 8px;
3172
5303
  }
3173
5304
 
3174
- .model-picker-option-title,
3175
- .model-picker-option-meta {
3176
- display: block;
3177
- min-width: 0;
3178
- overflow: hidden;
3179
- text-overflow: ellipsis;
3180
- white-space: nowrap;
5305
+ .queue-builder-add-form label {
5306
+ color: var(--fg-muted);
5307
+ font-size: 11px;
5308
+ font-weight: 950;
5309
+ letter-spacing: 0;
5310
+ text-transform: uppercase;
3181
5311
  }
3182
5312
 
3183
- .model-picker-option-title {
5313
+ .queue-builder-add-form textarea,
5314
+ .mobile-queue-edit textarea {
5315
+ width: 100%;
5316
+ padding: 10px 12px;
5317
+ border: 1px solid var(--line);
5318
+ border-radius: 12px;
5319
+ background: var(--bg);
3184
5320
  color: var(--fg);
5321
+ font: inherit;
3185
5322
  font-size: 14px;
3186
- font-weight: 950;
5323
+ line-height: 1.35;
3187
5324
  }
3188
5325
 
3189
- .model-picker-option-meta {
3190
- color: var(--fg-dim);
3191
- font-size: 12px;
3192
- font-weight: 750;
5326
+ .queue-builder-actions {
5327
+ display: grid;
5328
+ grid-template-columns: 1fr 1fr;
5329
+ gap: 10px;
3193
5330
  }
3194
5331
 
3195
- .model-picker-option-check {
3196
- display: grid;
3197
- place-items: center;
3198
- min-width: 28px;
3199
- height: 28px;
3200
- border: 1px solid var(--line-strong);
3201
- border-radius: 999px;
3202
- color: var(--blue);
3203
- font-size: 14px;
3204
- font-weight: 950;
5332
+ @media (min-width: 700px) and (min-height: 700px) {
5333
+ .mobile-queue-builder-sheet {
5334
+ max-width: 720px;
5335
+ border-radius: 20px 20px 0 0;
5336
+ }
3205
5337
  }
3206
5338
 
3207
5339
  .sheet-actions {
@@ -3300,43 +5432,558 @@ html[data-theme="light"] .nav-item.active {
3300
5432
  color: var(--red);
3301
5433
  }
3302
5434
 
3303
- @media (min-width: 720px) {
5435
+ @media (min-width: 720px) and (max-width: 899.98px) {
3304
5436
  .mobile-app {
3305
- max-width: 520px;
5437
+ max-width: min(680px, 100vw);
3306
5438
  margin: 0 auto;
3307
5439
  border-left: 1px solid var(--line);
3308
5440
  border-right: 1px solid var(--line);
3309
5441
  }
3310
5442
 
3311
- .bottom-nav,
3312
5443
  .app-topbar,
3313
- .detail-topbar {
3314
- left: 50%;
5444
+ .app-main,
5445
+ .bottom-nav,
5446
+ .status-summary {
5447
+ left: max(0px, calc((100vw - 680px) / 2));
3315
5448
  right: auto;
3316
- width: 520px;
3317
- transform: translateX(-50%);
5449
+ width: min(680px, 100vw);
5450
+ transform: none;
5451
+ }
5452
+
5453
+ .app-topbar,
5454
+ .app-main {
5455
+ border-left: 1px solid var(--line);
5456
+ border-right: 1px solid var(--line);
5457
+ }
5458
+
5459
+ .status-summary {
5460
+ gap: 10px;
5461
+ }
5462
+
5463
+ .session-row,
5464
+ .result-row,
5465
+ .device-row,
5466
+ .walle-row,
5467
+ .more-row {
5468
+ padding-inline: 20px;
5469
+ }
5470
+
5471
+ .section-block,
5472
+ .home-search,
5473
+ .worktree-summary,
5474
+ .view-heading {
5475
+ padding-inline: 20px;
3318
5476
  }
3319
5477
 
3320
5478
  .detail-view {
3321
5479
  left: 50%;
3322
5480
  right: auto;
3323
- width: 520px;
5481
+ width: min(680px, 100vw);
3324
5482
  transform: translateX(-50%);
3325
5483
  border-left: 1px solid var(--line);
3326
5484
  border-right: 1px solid var(--line);
3327
5485
  }
3328
5486
 
5487
+ .detail-messages {
5488
+ padding-inline: 18px;
5489
+ }
5490
+
3329
5491
  .modal-backdrop {
3330
5492
  justify-content: center;
3331
5493
  }
3332
5494
 
3333
- .stepup-sheet {
3334
- width: 520px;
5495
+ .stepup-sheet,
5496
+ .model-picker-sheet,
5497
+ .worktree-finish-sheet {
5498
+ width: min(640px, calc(100vw - 32px));
3335
5499
  }
3336
5500
 
3337
5501
  .model-picker-sheet {
3338
- width: 520px;
3339
5502
  border-left: 1px solid var(--line);
3340
5503
  border-right: 1px solid var(--line);
3341
5504
  }
3342
5505
  }
5506
+
5507
+ @media (min-width: 900px) and (min-height: 650px) {
5508
+ :root {
5509
+ --tablet-list-w: clamp(372px, 37vw, 468px);
5510
+ --tablet-single-w: min(1240px, calc(100vw - 32px));
5511
+ --tablet-topbar-h: 72px;
5512
+ }
5513
+
5514
+ html {
5515
+ height: 100%;
5516
+ overflow: hidden;
5517
+ background:
5518
+ linear-gradient(90deg, var(--bg) 0, var(--bg) var(--tablet-list-w), color-mix(in srgb, var(--bg-elev) 72%, var(--bg)) var(--tablet-list-w), var(--bg) 100%);
5519
+ }
5520
+
5521
+ html:not(.detail-open) {
5522
+ background: var(--bg);
5523
+ }
5524
+
5525
+ body.mobile-app {
5526
+ width: 100%;
5527
+ max-width: none;
5528
+ min-height: 100vh;
5529
+ min-height: 100dvh;
5530
+ margin: 0;
5531
+ padding: 0;
5532
+ border: 0;
5533
+ overflow: hidden;
5534
+ }
5535
+
5536
+ body.detail-sheet-open {
5537
+ position: static !important;
5538
+ top: auto !important;
5539
+ left: auto !important;
5540
+ right: auto !important;
5541
+ width: 100% !important;
5542
+ }
5543
+
5544
+ body.detail-sheet-open .app-main,
5545
+ body.detail-sheet-open .bottom-nav,
5546
+ body.detail-sheet-open .app-topbar {
5547
+ pointer-events: auto;
5548
+ user-select: auto;
5549
+ }
5550
+
5551
+ .app-topbar {
5552
+ position: fixed;
5553
+ top: 0;
5554
+ left: 0;
5555
+ right: auto;
5556
+ width: var(--tablet-list-w);
5557
+ min-height: calc(var(--tablet-topbar-h) + env(safe-area-inset-top));
5558
+ padding: calc(12px + env(safe-area-inset-top)) 18px 12px;
5559
+ border-right: 1px solid var(--line);
5560
+ border-bottom: 1px solid var(--line);
5561
+ transform: none;
5562
+ }
5563
+
5564
+ body.mobile-app:not(.detail-open) .app-topbar {
5565
+ left: max(0px, calc((100vw - var(--tablet-single-w)) / 2));
5566
+ width: var(--tablet-single-w);
5567
+ border-left: 1px solid var(--line);
5568
+ transform: none;
5569
+ }
5570
+
5571
+ .app-main {
5572
+ position: fixed;
5573
+ top: calc(var(--tablet-topbar-h) + var(--status-tabs-h) + env(safe-area-inset-top));
5574
+ left: 0;
5575
+ bottom: calc(var(--nav-h) + env(safe-area-inset-bottom));
5576
+ width: var(--tablet-list-w);
5577
+ min-height: 0;
5578
+ overflow: auto;
5579
+ border-right: 1px solid var(--line);
5580
+ -webkit-overflow-scrolling: touch;
5581
+ }
5582
+
5583
+ body.mobile-app:not([data-mobile-tab="status"]) .app-main {
5584
+ top: calc(var(--tablet-topbar-h) + env(safe-area-inset-top));
5585
+ }
5586
+
5587
+ body.mobile-app.detail-open .app-main {
5588
+ bottom: 0;
5589
+ }
5590
+
5591
+ body.mobile-app:not(.detail-open) .app-main {
5592
+ left: max(0px, calc((100vw - var(--tablet-single-w)) / 2));
5593
+ width: var(--tablet-single-w);
5594
+ border-left: 1px solid var(--line);
5595
+ transform: none;
5596
+ }
5597
+
5598
+ .mobile-view {
5599
+ padding: 16px 0 22px;
5600
+ }
5601
+
5602
+ body.mobile-app.detail-split-layout:not(.detail-open) #view-status.mobile-view.active {
5603
+ display: block;
5604
+ padding: 16px 0 22px;
5605
+ }
5606
+
5607
+ body.mobile-app.detail-split-layout:not(.detail-open) #view-status #status-content {
5608
+ min-width: 0;
5609
+ }
5610
+
5611
+ body.mobile-app.detail-open #view-status .status-focus-panel {
5612
+ display: none;
5613
+ }
5614
+
5615
+ .status-summary {
5616
+ gap: 10px;
5617
+ padding-inline: 18px;
5618
+ top: calc(var(--tablet-topbar-h) + env(safe-area-inset-top));
5619
+ bottom: auto;
5620
+ border-top: 0;
5621
+ border-bottom: 1px solid var(--line);
5622
+ }
5623
+
5624
+ #view-status .view-content {
5625
+ padding-bottom: 22px;
5626
+ }
5627
+
5628
+ .summary-tile {
5629
+ min-height: 44px;
5630
+ }
5631
+
5632
+ .home-search,
5633
+ .view-heading,
5634
+ .worktree-summary,
5635
+ .section-block {
5636
+ padding-inline: 18px;
5637
+ }
5638
+
5639
+ .status-focus-panel {
5640
+ margin-inline: 18px;
5641
+ }
5642
+
5643
+ body.mobile-app:not(.detail-open) .status-cockpit {
5644
+ grid-template-columns: minmax(0, 0.96fr) minmax(0, 1.04fr);
5645
+ align-items: start;
5646
+ gap: 16px;
5647
+ padding: 0 18px 18px;
5648
+ }
5649
+
5650
+ body.mobile-app:not(.detail-open) .status-cockpit-column {
5651
+ display: grid;
5652
+ align-content: start;
5653
+ gap: 14px;
5654
+ }
5655
+
5656
+ body.mobile-app:not(.detail-open) .status-cockpit .worktree-summary,
5657
+ body.mobile-app:not(.detail-open) .status-cockpit .section-block {
5658
+ margin: 0;
5659
+ }
5660
+
5661
+ body.mobile-app:not(.detail-open) .status-cockpit .worktree-summary {
5662
+ border: 1px solid var(--line);
5663
+ border-radius: 16px;
5664
+ padding: 12px 14px;
5665
+ }
5666
+
5667
+ body.mobile-app:not(.detail-open) .status-cockpit .section-block {
5668
+ min-width: 0;
5669
+ padding: 12px 14px 14px;
5670
+ border: 1px solid var(--line);
5671
+ border-radius: 16px;
5672
+ background: color-mix(in srgb, var(--bg-elev) 70%, transparent);
5673
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--fg) 6%, transparent);
5674
+ }
5675
+
5676
+ body.mobile-app:not(.detail-open) .status-cockpit .section-block.section-block-target {
5677
+ background:
5678
+ linear-gradient(135deg, color-mix(in srgb, var(--blue) 10%, transparent), transparent 58%),
5679
+ color-mix(in srgb, var(--bg-elev) 70%, transparent);
5680
+ box-shadow:
5681
+ inset 0 0 0 1px color-mix(in srgb, var(--blue) 34%, transparent),
5682
+ inset 3px 0 0 var(--blue);
5683
+ }
5684
+
5685
+ body.mobile-app:not(.detail-open) .status-cockpit .section-title {
5686
+ min-height: 24px;
5687
+ letter-spacing: 0.02em;
5688
+ }
5689
+
5690
+ body.mobile-app:not(.detail-open) .status-cockpit .section-rows {
5691
+ gap: 10px;
5692
+ margin: 10px 0 0;
5693
+ }
5694
+
5695
+ body.mobile-app:not(.detail-open) .status-cockpit .section-rows > .empty-state {
5696
+ margin-top: 2px;
5697
+ padding: 18px 0 2px;
5698
+ border-top: 1px solid color-mix(in srgb, var(--line) 72%, transparent);
5699
+ }
5700
+
5701
+ body.mobile-app:not(.detail-open) .status-cockpit .section-rows > .session-row {
5702
+ margin: 0;
5703
+ padding: 12px 12px;
5704
+ border: 1px solid color-mix(in srgb, var(--line) 82%, transparent);
5705
+ border-radius: 14px;
5706
+ background: color-mix(in srgb, var(--bg) 84%, var(--bg-elev));
5707
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--fg) 5%, transparent);
5708
+ }
5709
+
5710
+ body.mobile-app:not(.detail-open) .status-cockpit .section-rows > .session-row.selected {
5711
+ box-shadow:
5712
+ inset 0 0 0 1px color-mix(in srgb, var(--blue) 28%, transparent),
5713
+ inset 4px 0 0 var(--blue);
5714
+ }
5715
+
5716
+ .session-row,
5717
+ .result-row,
5718
+ .device-row {
5719
+ grid-template-columns: 8px minmax(0, 1fr);
5720
+ padding: 14px 18px;
5721
+ }
5722
+
5723
+ .walle-row,
5724
+ .more-row {
5725
+ grid-template-columns: minmax(0, 1fr) auto;
5726
+ padding: 14px 18px;
5727
+ }
5728
+
5729
+ .more-shell {
5730
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
5731
+ padding-inline: 18px;
5732
+ }
5733
+
5734
+ .more-hero-card,
5735
+ .more-danger-card {
5736
+ grid-column: 1 / -1;
5737
+ }
5738
+
5739
+ .walle-chat-context {
5740
+ grid-template-columns: minmax(0, 1fr) auto;
5741
+ align-items: center;
5742
+ margin: 14px 18px 0;
5743
+ }
5744
+
5745
+ .walle-context-actions {
5746
+ justify-content: flex-end;
5747
+ }
5748
+
5749
+ .walle-chat-messages {
5750
+ padding-inline: 18px;
5751
+ }
5752
+
5753
+ .push-row,
5754
+ .restart-row {
5755
+ grid-template-columns: minmax(0, 1fr);
5756
+ }
5757
+
5758
+ .session-row.selected,
5759
+ .result-row.selected {
5760
+ background:
5761
+ linear-gradient(90deg, color-mix(in srgb, var(--blue) 13%, transparent), transparent 54%),
5762
+ var(--bg-elev);
5763
+ box-shadow:
5764
+ inset 0 0 0 1px color-mix(in srgb, var(--blue) 28%, transparent),
5765
+ inset 4px 0 0 var(--blue);
5766
+ }
5767
+
5768
+ .row-actions {
5769
+ grid-column: 2;
5770
+ flex-direction: row;
5771
+ align-items: center;
5772
+ margin-top: 10px;
5773
+ }
5774
+
5775
+ .row-action {
5776
+ min-height: 34px;
5777
+ min-width: 92px;
5778
+ }
5779
+
5780
+ .bottom-nav {
5781
+ position: fixed;
5782
+ left: 0;
5783
+ right: auto;
5784
+ bottom: 0;
5785
+ width: var(--tablet-list-w);
5786
+ border-right: 1px solid var(--line);
5787
+ transform: none;
5788
+ }
5789
+
5790
+ .status-summary {
5791
+ left: 0;
5792
+ right: auto;
5793
+ width: var(--tablet-list-w);
5794
+ border-right: 1px solid var(--line);
5795
+ transform: none;
5796
+ }
5797
+
5798
+ body.mobile-app.detail-open .bottom-nav {
5799
+ display: none;
5800
+ }
5801
+
5802
+ body.mobile-app:not(.detail-open) .bottom-nav {
5803
+ left: max(0px, calc((100vw - var(--tablet-single-w)) / 2));
5804
+ width: var(--tablet-single-w);
5805
+ border-left: 1px solid var(--line);
5806
+ transform: none;
5807
+ }
5808
+
5809
+ body.mobile-app:not(.detail-open) .status-summary {
5810
+ left: max(0px, calc((100vw - var(--tablet-single-w)) / 2));
5811
+ width: var(--tablet-single-w);
5812
+ border-left: 1px solid var(--line);
5813
+ transform: none;
5814
+ }
5815
+
5816
+ .detail-view {
5817
+ top: 0;
5818
+ left: var(--tablet-list-w);
5819
+ right: 0;
5820
+ bottom: 0;
5821
+ width: auto;
5822
+ height: 100vh;
5823
+ min-height: 100vh;
5824
+ height: 100dvh;
5825
+ min-height: 100dvh;
5826
+ padding: 0;
5827
+ border-left: 0;
5828
+ border-right: 0;
5829
+ transform: none;
5830
+ background:
5831
+ radial-gradient(circle at 16% 8%, color-mix(in srgb, var(--blue) 10%, transparent), transparent 34%),
5832
+ linear-gradient(180deg, color-mix(in srgb, var(--bg-elev) 56%, transparent), transparent 260px),
5833
+ var(--bg);
5834
+ }
5835
+
5836
+ .detail-view.active {
5837
+ display: flex;
5838
+ }
5839
+
5840
+ .detail-topbar {
5841
+ position: sticky;
5842
+ top: 0;
5843
+ left: auto;
5844
+ right: auto;
5845
+ width: auto;
5846
+ min-height: calc(var(--tablet-topbar-h) + env(safe-area-inset-top));
5847
+ padding: calc(12px + env(safe-area-inset-top)) clamp(20px, 3vw, 34px) 12px;
5848
+ transform: none;
5849
+ box-shadow:
5850
+ 0 18px 44px rgba(0, 0, 0, 0.16),
5851
+ inset 0 -1px 0 color-mix(in srgb, var(--blue) 10%, transparent);
5852
+ }
5853
+
5854
+ .detail-back-btn {
5855
+ min-width: 96px;
5856
+ min-height: 52px;
5857
+ padding-inline: 16px 18px;
5858
+ border-radius: 16px;
5859
+ background:
5860
+ linear-gradient(180deg, color-mix(in srgb, var(--blue) 20%, var(--bg-soft)), color-mix(in srgb, var(--blue) 10%, var(--bg-soft)));
5861
+ }
5862
+
5863
+ .detail-back-label {
5864
+ display: inline;
5865
+ }
5866
+
5867
+ .detail-alert,
5868
+ .detail-controls {
5869
+ padding-inline: clamp(20px, 3vw, 34px);
5870
+ }
5871
+
5872
+ .detail-messages {
5873
+ padding: 20px clamp(20px, 3vw, 36px) 28px;
5874
+ scroll-padding-bottom: 24px;
5875
+ }
5876
+
5877
+ .detail-messages .msg,
5878
+ .detail-messages .review-msg,
5879
+ .detail-messages .turn,
5880
+ .detail-messages .prompt-turn,
5881
+ .detail-messages .thought-group,
5882
+ .message-row {
5883
+ max-width: min(920px, 100%);
5884
+ }
5885
+
5886
+ .composer {
5887
+ grid-template-columns: minmax(0, 1fr) 68px;
5888
+ align-items: center;
5889
+ gap: 12px;
5890
+ padding: 16px clamp(20px, 3vw, 36px) calc(18px + env(safe-area-inset-bottom));
5891
+ border-top-color: color-mix(in srgb, var(--blue) 20%, var(--line));
5892
+ background:
5893
+ linear-gradient(180deg, color-mix(in srgb, var(--bg) 18%, transparent), color-mix(in srgb, var(--bg-elev) 96%, transparent) 30%, var(--bg-elev)),
5894
+ var(--bg-elev);
5895
+ box-shadow:
5896
+ 0 -22px 54px rgba(0, 0, 0, 0.32),
5897
+ inset 0 1px 0 color-mix(in srgb, var(--fg) 7%, transparent);
5898
+ }
5899
+
5900
+ .composer.has-model-picker {
5901
+ grid-template-columns: minmax(0, 1fr) 92px 68px;
5902
+ }
5903
+
5904
+ .composer-editor {
5905
+ min-height: 66px;
5906
+ max-height: min(32vh, 220px);
5907
+ padding: 18px 58px 18px 18px;
5908
+ border-radius: 20px;
5909
+ border-color: color-mix(in srgb, var(--blue) 24%, var(--line-strong));
5910
+ background:
5911
+ linear-gradient(180deg, color-mix(in srgb, var(--bg-soft) 78%, var(--bg-elev)), var(--bg-elev));
5912
+ font-size: 15px;
5913
+ line-height: 1.42;
5914
+ box-shadow:
5915
+ inset 0 1px 0 color-mix(in srgb, var(--fg) 7%, transparent),
5916
+ 0 12px 28px rgba(0, 0, 0, 0.16);
5917
+ }
5918
+
5919
+ .composer-editor:focus {
5920
+ background:
5921
+ linear-gradient(180deg, color-mix(in srgb, var(--blue) 7%, var(--bg-soft)), var(--bg-elev));
5922
+ box-shadow:
5923
+ inset 0 1px 0 color-mix(in srgb, var(--fg) 9%, transparent),
5924
+ 0 0 0 3px color-mix(in srgb, var(--blue) 22%, transparent),
5925
+ 0 14px 34px rgba(0, 0, 0, 0.22);
5926
+ }
5927
+
5928
+ .send-btn {
5929
+ width: 68px;
5930
+ min-width: 68px;
5931
+ height: 66px;
5932
+ min-height: 66px;
5933
+ border-radius: 20px;
5934
+ border-color: color-mix(in srgb, var(--blue) 55%, var(--line));
5935
+ background:
5936
+ linear-gradient(180deg, color-mix(in srgb, var(--blue) 94%, #fff), var(--blue));
5937
+ color: #07111f;
5938
+ font-size: 20px;
5939
+ box-shadow:
5940
+ inset 0 1px 0 color-mix(in srgb, #fff 38%, transparent),
5941
+ 0 14px 32px color-mix(in srgb, var(--blue) 24%, transparent),
5942
+ 0 8px 20px rgba(0, 0, 0, 0.22);
5943
+ }
5944
+
5945
+ .send-btn.hold-only {
5946
+ border-color: color-mix(in srgb, var(--blue) 42%, var(--line-strong));
5947
+ background:
5948
+ linear-gradient(180deg, color-mix(in srgb, var(--blue) 13%, var(--bg-soft)), color-mix(in srgb, var(--bg-elev-2) 88%, var(--blue)));
5949
+ color: var(--blue);
5950
+ box-shadow:
5951
+ inset 0 1px 0 color-mix(in srgb, var(--fg) 8%, transparent),
5952
+ 0 10px 26px rgba(0, 0, 0, 0.22);
5953
+ }
5954
+
5955
+ .model-picker-btn {
5956
+ width: 92px;
5957
+ min-width: 92px;
5958
+ height: 66px;
5959
+ min-height: 66px;
5960
+ border-radius: 18px;
5961
+ }
5962
+
5963
+ .composer-clear {
5964
+ top: 9px;
5965
+ right: 8px;
5966
+ }
5967
+
5968
+ .send-menu {
5969
+ left: calc(var(--tablet-list-w) + clamp(20px, 3vw, 36px));
5970
+ right: clamp(20px, 3vw, 36px);
5971
+ bottom: calc(var(--mobile-keyboard-offset, 0px) + env(safe-area-inset-bottom) + 104px);
5972
+ max-width: 680px;
5973
+ }
5974
+
5975
+ .mobile-skill-picker {
5976
+ right: -70px;
5977
+ max-height: min(44vh, 340px);
5978
+ }
5979
+
5980
+ .modal-backdrop {
5981
+ left: var(--tablet-list-w);
5982
+ justify-content: center;
5983
+ }
5984
+
5985
+ .stepup-sheet,
5986
+ .model-picker-sheet {
5987
+ width: min(640px, calc(100vw - var(--tablet-list-w) - 48px));
5988
+ }
5989
+ }