@ashlr/hub 3.4.0 → 3.5.1

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 (304) hide show
  1. package/CHANGELOG.md +107 -1
  2. package/README.md +3 -0
  3. package/dist/build-identity.json +2 -2
  4. package/dist/cli/index.js +11 -0
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/cli/local-runtime.js +40 -9
  7. package/dist/cli/local-runtime.js.map +1 -1
  8. package/dist/core/fleet/external-skill-audit.js +1 -1
  9. package/dist/core/fleet/external-skill-audit.js.map +1 -1
  10. package/dist/core/local-eval/classify.d.ts +57 -0
  11. package/dist/core/local-eval/classify.js +121 -0
  12. package/dist/core/local-eval/classify.js.map +1 -0
  13. package/dist/core/local-eval/configuration.d.ts +37 -0
  14. package/dist/core/local-eval/configuration.js +171 -0
  15. package/dist/core/local-eval/configuration.js.map +1 -0
  16. package/dist/core/local-eval/index.d.ts +15 -0
  17. package/dist/core/local-eval/index.js +16 -0
  18. package/dist/core/local-eval/index.js.map +1 -0
  19. package/dist/core/local-eval/main.d.ts +31 -0
  20. package/dist/core/local-eval/main.js +174 -0
  21. package/dist/core/local-eval/main.js.map +1 -0
  22. package/dist/core/local-eval/report.d.ts +25 -0
  23. package/dist/core/local-eval/report.js +157 -0
  24. package/dist/core/local-eval/report.js.map +1 -0
  25. package/dist/core/local-eval/runner.d.ts +55 -0
  26. package/dist/core/local-eval/runner.js +290 -0
  27. package/dist/core/local-eval/runner.js.map +1 -0
  28. package/dist/core/local-eval/tasks.d.ts +22 -0
  29. package/dist/core/local-eval/tasks.js +303 -0
  30. package/dist/core/local-eval/tasks.js.map +1 -0
  31. package/dist/core/local-eval/trace.d.ts +67 -0
  32. package/dist/core/local-eval/trace.js +309 -0
  33. package/dist/core/local-eval/trace.js.map +1 -0
  34. package/dist/core/local-eval/types.d.ts +262 -0
  35. package/dist/core/local-eval/types.js +23 -0
  36. package/dist/core/local-eval/types.js.map +1 -0
  37. package/dist/core/local-runtime/llama/anthropic-proxy-host.d.ts +68 -0
  38. package/dist/core/local-runtime/llama/anthropic-proxy-host.js +120 -0
  39. package/dist/core/local-runtime/llama/anthropic-proxy-host.js.map +1 -0
  40. package/dist/core/local-runtime/llama/anthropic-proxy-process.d.ts +15 -0
  41. package/dist/core/local-runtime/llama/anthropic-proxy-process.js +21 -0
  42. package/dist/core/local-runtime/llama/anthropic-proxy-process.js.map +1 -0
  43. package/dist/core/local-runtime/llama/anthropic-proxy.d.ts +2 -1
  44. package/dist/core/local-runtime/llama/anthropic-proxy.js +14 -6
  45. package/dist/core/local-runtime/llama/anthropic-proxy.js.map +1 -1
  46. package/dist/core/local-runtime/llama/anthropic-shim.d.ts +33 -0
  47. package/dist/core/local-runtime/llama/anthropic-shim.js +59 -0
  48. package/dist/core/local-runtime/llama/anthropic-shim.js.map +1 -1
  49. package/dist/core/local-runtime/llama/config.d.ts +123 -6
  50. package/dist/core/local-runtime/llama/config.js +196 -6
  51. package/dist/core/local-runtime/llama/config.js.map +1 -1
  52. package/dist/core/local-runtime/llama/index.d.ts +15 -0
  53. package/dist/core/local-runtime/llama/index.js +13 -0
  54. package/dist/core/local-runtime/llama/index.js.map +1 -1
  55. package/dist/core/local-runtime/llama/paths.d.ts +17 -0
  56. package/dist/core/local-runtime/llama/paths.js +25 -0
  57. package/dist/core/local-runtime/llama/paths.js.map +1 -1
  58. package/dist/core/local-runtime/llama/proxy-invocation.d.ts +101 -0
  59. package/dist/core/local-runtime/llama/proxy-invocation.js +134 -0
  60. package/dist/core/local-runtime/llama/proxy-invocation.js.map +1 -0
  61. package/dist/core/local-runtime/llama/proxy-launchd.d.ts +83 -0
  62. package/dist/core/local-runtime/llama/proxy-launchd.js +216 -0
  63. package/dist/core/local-runtime/llama/proxy-launchd.js.map +1 -0
  64. package/dist/core/local-runtime/llama/shapes.d.ts +2 -1
  65. package/dist/core/local-runtime/llama/shapes.js +2 -1
  66. package/dist/core/local-runtime/llama/shapes.js.map +1 -1
  67. package/dist/core/verse/adapters/claude.js +16 -0
  68. package/dist/core/verse/adapters/claude.js.map +1 -1
  69. package/dist/core/verse/adapters/codex.js +60 -2
  70. package/dist/core/verse/adapters/codex.js.map +1 -1
  71. package/dist/core/verse/adapters/grok.js +13 -0
  72. package/dist/core/verse/adapters/grok.js.map +1 -1
  73. package/dist/core/verse/control-api.d.ts +8 -9
  74. package/dist/core/verse/control-api.js +14 -114
  75. package/dist/core/verse/control-api.js.map +1 -1
  76. package/dist/core/verse/github-api.d.ts +50 -0
  77. package/dist/core/verse/github-api.js +211 -0
  78. package/dist/core/verse/github-api.js.map +1 -0
  79. package/dist/core/verse/github-proposal.d.ts +64 -0
  80. package/dist/core/verse/github-proposal.js +186 -0
  81. package/dist/core/verse/github-proposal.js.map +1 -0
  82. package/dist/core/verse/github-repo.d.ts +104 -0
  83. package/dist/core/verse/github-repo.js +476 -0
  84. package/dist/core/verse/github-repo.js.map +1 -0
  85. package/dist/core/verse/github-types.d.ts +174 -0
  86. package/dist/core/verse/github-types.js +31 -0
  87. package/dist/core/verse/github-types.js.map +1 -0
  88. package/dist/core/verse/mcp-cli-health.d.ts +149 -0
  89. package/dist/core/verse/mcp-cli-health.js +227 -0
  90. package/dist/core/verse/mcp-cli-health.js.map +1 -0
  91. package/dist/core/verse/mcp-control-api.d.ts +68 -0
  92. package/dist/core/verse/mcp-control-api.js +322 -0
  93. package/dist/core/verse/mcp-control-api.js.map +1 -0
  94. package/dist/core/verse/mcp-mutation.d.ts +187 -0
  95. package/dist/core/verse/mcp-mutation.js +471 -0
  96. package/dist/core/verse/mcp-mutation.js.map +1 -0
  97. package/dist/core/verse/mcp-scope.d.ts +114 -0
  98. package/dist/core/verse/mcp-scope.js +149 -0
  99. package/dist/core/verse/mcp-scope.js.map +1 -0
  100. package/dist/core/verse/mcp-seat-view.d.ts +197 -0
  101. package/dist/core/verse/mcp-seat-view.js +322 -0
  102. package/dist/core/verse/mcp-seat-view.js.map +1 -0
  103. package/dist/core/verse/path-guard.d.ts +115 -0
  104. package/dist/core/verse/path-guard.js +171 -0
  105. package/dist/core/verse/path-guard.js.map +1 -0
  106. package/dist/core/verse/seats.js +30 -2
  107. package/dist/core/verse/seats.js.map +1 -1
  108. package/dist/core/verse/session-engine.js +60 -1
  109. package/dist/core/verse/session-engine.js.map +1 -1
  110. package/dist/core/verse/session-store.js +20 -0
  111. package/dist/core/verse/session-store.js.map +1 -1
  112. package/dist/core/verse/types.d.ts +225 -1
  113. package/dist/core/verse/types.js +26 -0
  114. package/dist/core/verse/types.js.map +1 -1
  115. package/dist/core/verse/verse-api.d.ts +16 -1
  116. package/dist/core/verse/verse-api.js +338 -16
  117. package/dist/core/verse/verse-api.js.map +1 -1
  118. package/dist/core/verse/workspaces.d.ts +130 -0
  119. package/dist/core/verse/workspaces.js +501 -0
  120. package/dist/core/verse/workspaces.js.map +1 -0
  121. package/dist/core/web/api.js +23 -0
  122. package/dist/core/web/api.js.map +1 -1
  123. package/dist/core/web/public/next/assets/App-BbVoUCIi.js +7 -0
  124. package/dist/core/web/public/next/assets/App-BbVoUCIi.js.map +1 -0
  125. package/dist/core/web/public/next/assets/App-Cgi6j1Gk.css +1 -0
  126. package/dist/core/web/public/next/assets/ApprovalsSection-BW9iVjUa.js +2 -0
  127. package/dist/core/web/public/next/assets/ApprovalsSection-BW9iVjUa.js.map +1 -0
  128. package/dist/core/web/public/next/assets/ApprovalsSection-Su-NUTis.css +1 -0
  129. package/dist/core/web/public/next/assets/AutonomySection-CRqHUhED.js +2 -0
  130. package/dist/core/web/public/next/assets/AutonomySection-CRqHUhED.js.map +1 -0
  131. package/dist/core/web/public/next/assets/AutonomySection-Cpk_oEhc.css +1 -0
  132. package/dist/core/web/public/next/assets/ChatSection-5irrh6Jw.js +80 -0
  133. package/dist/core/web/public/next/assets/ChatSection-5irrh6Jw.js.map +1 -0
  134. package/dist/core/web/public/next/assets/ChatSection-LQiAn6Eu.css +1 -0
  135. package/dist/core/web/public/next/assets/ConfirmDialog-CXevY3Au.js +2 -0
  136. package/dist/core/web/public/next/assets/ConfirmDialog-CXevY3Au.js.map +1 -0
  137. package/dist/core/web/public/next/assets/{ConfirmDialog-cYuivhCX.css → ConfirmDialog-Dx15x0Ho.css} +1 -1
  138. package/dist/core/web/public/next/assets/Dialog-Bn0CgEGz.js +2 -0
  139. package/dist/core/web/public/next/assets/Dialog-Bn0CgEGz.js.map +1 -0
  140. package/dist/core/web/public/next/assets/Dialog-tQ8kFulD.css +1 -0
  141. package/dist/core/web/public/next/assets/DiffViewer-C8HHTnVE.css +1 -0
  142. package/dist/core/web/public/next/assets/DiffViewer-QKyisN2L.js +7 -0
  143. package/dist/core/web/public/next/assets/DiffViewer-QKyisN2L.js.map +1 -0
  144. package/dist/core/web/public/next/assets/{MutationTokenDialog-jWLLCxWn.css → MutationTokenDialog-CrfJ0PdD.css} +1 -1
  145. package/dist/core/web/public/next/assets/MutationTokenDialog-DbSHPy3w.js +2 -0
  146. package/dist/core/web/public/next/assets/MutationTokenDialog-DbSHPy3w.js.map +1 -0
  147. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-C-PCgCzo.js +7 -0
  148. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-C-PCgCzo.js.map +1 -0
  149. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-CM_8pJs6.css +1 -0
  150. package/dist/core/web/public/next/assets/RouteErrorBoundary-Dw8ZjmkS.js +2 -0
  151. package/dist/core/web/public/next/assets/RouteErrorBoundary-Dw8ZjmkS.js.map +1 -0
  152. package/dist/core/web/public/next/assets/RouteErrorBoundary-ekyMXAK8.css +1 -0
  153. package/dist/core/web/public/next/assets/SettingsSection-BII7TTSD.css +1 -0
  154. package/dist/core/web/public/next/assets/SettingsSection-CWxtTNlD.js +2 -0
  155. package/dist/core/web/public/next/assets/SettingsSection-CWxtTNlD.js.map +1 -0
  156. package/dist/core/web/public/next/assets/UniverseConsoleApp-Bk5HipM0.js +2 -0
  157. package/dist/core/web/public/next/assets/UniverseConsoleApp-Bk5HipM0.js.map +1 -0
  158. package/dist/core/web/public/next/assets/UniverseConsoleApp-Dh7A-hLD.css +1 -0
  159. package/dist/core/web/public/next/assets/UniverseView-Bqa8DH57.css +1 -0
  160. package/dist/core/web/public/next/assets/UniverseView-D8k9q0ce.js +9 -0
  161. package/dist/core/web/public/next/assets/UniverseView-D8k9q0ce.js.map +1 -0
  162. package/dist/core/web/public/next/assets/UsageSection-B2E06ZH1.js +2 -0
  163. package/dist/core/web/public/next/assets/UsageSection-B2E06ZH1.js.map +1 -0
  164. package/dist/core/web/public/next/assets/UsageSection-DwgNOYvi.css +1 -0
  165. package/dist/core/web/public/next/assets/VerseConsoleApp-CRfZUV-T.js +3 -0
  166. package/dist/core/web/public/next/assets/VerseConsoleApp-CRfZUV-T.js.map +1 -0
  167. package/dist/core/web/public/next/assets/VerseConsoleApp-D2E3mU9a.css +1 -0
  168. package/dist/core/web/public/next/assets/charts-CsrtT4rk.css +1 -0
  169. package/dist/core/web/public/next/assets/charts-DSUpczxG.js +2 -0
  170. package/dist/core/web/public/next/assets/charts-DSUpczxG.js.map +1 -0
  171. package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js +2 -0
  172. package/dist/core/web/public/next/assets/fleet-model-ClBbQ0Uj.js.map +1 -0
  173. package/dist/core/web/public/next/assets/format-BNYWGJat.js +2 -0
  174. package/dist/core/web/public/next/assets/format-BNYWGJat.js.map +1 -0
  175. package/dist/core/web/public/next/assets/global-C4jfYHrj.js +2 -0
  176. package/dist/core/web/public/next/assets/global-C4jfYHrj.js.map +1 -0
  177. package/dist/core/web/public/next/assets/global-D463gG1X.css +1 -0
  178. package/dist/core/web/public/next/assets/icons-BxOX8-XB.js +2 -0
  179. package/dist/core/web/public/next/assets/icons-BxOX8-XB.js.map +1 -0
  180. package/dist/core/web/public/next/assets/index-BMRIET7F.js +11 -0
  181. package/dist/core/web/public/next/assets/index-BMRIET7F.js.map +1 -0
  182. package/dist/core/web/public/next/assets/queries-AxnVa02h.js +2 -0
  183. package/dist/core/web/public/next/assets/queries-AxnVa02h.js.map +1 -0
  184. package/dist/core/web/public/next/assets/use-guarded-action-BO6c94Wp.js +2 -0
  185. package/dist/core/web/public/next/assets/use-guarded-action-BO6c94Wp.js.map +1 -0
  186. package/dist/core/web/public/next/assets/verse-model-CvtK6vP6.js +2 -0
  187. package/dist/core/web/public/next/assets/verse-model-CvtK6vP6.js.map +1 -0
  188. package/dist/core/web/public/next/assets/workspace-model-cE4LkKpE.js +2 -0
  189. package/dist/core/web/public/next/assets/workspace-model-cE4LkKpE.js.map +1 -0
  190. package/dist/core/web/public/next/index.html +1 -1
  191. package/dist/release-dependency-inventory.json +1 -1
  192. package/docs/README.md +4 -0
  193. package/node_modules/marked/README.md +8 -0
  194. package/node_modules/marked/bin/main.js +12 -11
  195. package/node_modules/marked/lib/marked.d.ts +88 -25
  196. package/node_modules/marked/lib/marked.esm.js +50 -44
  197. package/node_modules/marked/lib/marked.esm.js.map +3 -3
  198. package/node_modules/marked/lib/marked.umd.js +50 -44
  199. package/node_modules/marked/lib/marked.umd.js.map +3 -3
  200. package/node_modules/marked/man/marked.1 +1 -1
  201. package/node_modules/marked/package.json +21 -21
  202. package/package.json +13 -8
  203. package/dist/cli/activation.d.ts +0 -41
  204. package/dist/cli/activation.js +0 -485
  205. package/dist/cli/activation.js.map +0 -1
  206. package/dist/core/fleet/generated-repair-resolution.d.ts +0 -36
  207. package/dist/core/fleet/generated-repair-resolution.js +0 -245
  208. package/dist/core/fleet/generated-repair-resolution.js.map +0 -1
  209. package/dist/core/local-runtime/llama/port.d.ts +0 -17
  210. package/dist/core/local-runtime/llama/port.js +0 -47
  211. package/dist/core/local-runtime/llama/port.js.map +0 -1
  212. package/dist/core/local-runtime/llama/proxy-host.d.ts +0 -54
  213. package/dist/core/local-runtime/llama/proxy-host.js +0 -159
  214. package/dist/core/local-runtime/llama/proxy-host.js.map +0 -1
  215. package/dist/core/local-runtime/llama/proxy-process.d.ts +0 -148
  216. package/dist/core/local-runtime/llama/proxy-process.js +0 -250
  217. package/dist/core/local-runtime/llama/proxy-process.js.map +0 -1
  218. package/dist/core/local-runtime/llama/proxy-record.d.ts +0 -40
  219. package/dist/core/local-runtime/llama/proxy-record.js +0 -133
  220. package/dist/core/local-runtime/llama/proxy-record.js.map +0 -1
  221. package/dist/core/local-runtime/llama/proxy-supervisor.d.ts +0 -118
  222. package/dist/core/local-runtime/llama/proxy-supervisor.js +0 -511
  223. package/dist/core/local-runtime/llama/proxy-supervisor.js.map +0 -1
  224. package/dist/core/web/public/next/assets/App-BCKqSppK.css +0 -1
  225. package/dist/core/web/public/next/assets/App-LuILXjWG.js +0 -16
  226. package/dist/core/web/public/next/assets/App-LuILXjWG.js.map +0 -1
  227. package/dist/core/web/public/next/assets/ApprovalsSection-B_Xor8JH.js +0 -2
  228. package/dist/core/web/public/next/assets/ApprovalsSection-B_Xor8JH.js.map +0 -1
  229. package/dist/core/web/public/next/assets/ApprovalsSection-CRP59wSb.css +0 -1
  230. package/dist/core/web/public/next/assets/AutonomySection-BB8RD-tv.css +0 -1
  231. package/dist/core/web/public/next/assets/AutonomySection-BEwITtPJ.js +0 -2
  232. package/dist/core/web/public/next/assets/AutonomySection-BEwITtPJ.js.map +0 -1
  233. package/dist/core/web/public/next/assets/ChatSection-DrxqhBPK.css +0 -1
  234. package/dist/core/web/public/next/assets/ChatSection-bRAzlMth.js +0 -77
  235. package/dist/core/web/public/next/assets/ChatSection-bRAzlMth.js.map +0 -1
  236. package/dist/core/web/public/next/assets/ConfirmDialog-BqkZdPs_.js +0 -2
  237. package/dist/core/web/public/next/assets/ConfirmDialog-BqkZdPs_.js.map +0 -1
  238. package/dist/core/web/public/next/assets/Dialog-CPmedg4S.js +0 -2
  239. package/dist/core/web/public/next/assets/Dialog-CPmedg4S.js.map +0 -1
  240. package/dist/core/web/public/next/assets/Dialog-DxN7RgB5.css +0 -1
  241. package/dist/core/web/public/next/assets/DiffViewer-DmPJbeM_.js +0 -7
  242. package/dist/core/web/public/next/assets/DiffViewer-DmPJbeM_.js.map +0 -1
  243. package/dist/core/web/public/next/assets/DiffViewer-hN7X6wGT.css +0 -1
  244. package/dist/core/web/public/next/assets/Epistemic-DiyMyeaN.css +0 -1
  245. package/dist/core/web/public/next/assets/Epistemic-M3SxLHjq.js +0 -2
  246. package/dist/core/web/public/next/assets/Epistemic-M3SxLHjq.js.map +0 -1
  247. package/dist/core/web/public/next/assets/Meter-CGBsbXUX.css +0 -1
  248. package/dist/core/web/public/next/assets/Meter-D_X7c9U3.js +0 -2
  249. package/dist/core/web/public/next/assets/Meter-D_X7c9U3.js.map +0 -1
  250. package/dist/core/web/public/next/assets/MutationTokenDialog-Ba5ZHu-8.js +0 -2
  251. package/dist/core/web/public/next/assets/MutationTokenDialog-Ba5ZHu-8.js.map +0 -1
  252. package/dist/core/web/public/next/assets/RefreshIndicator-O7jUBOmX.css +0 -1
  253. package/dist/core/web/public/next/assets/RefreshIndicator-vHGpmyzb.js +0 -2
  254. package/dist/core/web/public/next/assets/RefreshIndicator-vHGpmyzb.js.map +0 -1
  255. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-B5g6JEVk.js +0 -7
  256. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-B5g6JEVk.js.map +0 -1
  257. package/dist/core/web/public/next/assets/ResourcePoolConsoleApp-DLl4DbGG.css +0 -1
  258. package/dist/core/web/public/next/assets/RouteErrorBoundary-BIpdnxp-.css +0 -1
  259. package/dist/core/web/public/next/assets/RouteErrorBoundary-CroxuKoi.js +0 -2
  260. package/dist/core/web/public/next/assets/RouteErrorBoundary-CroxuKoi.js.map +0 -1
  261. package/dist/core/web/public/next/assets/SettingsSection-DGJMdUh2.css +0 -1
  262. package/dist/core/web/public/next/assets/SettingsSection-p-7FCGfn.js +0 -2
  263. package/dist/core/web/public/next/assets/SettingsSection-p-7FCGfn.js.map +0 -1
  264. package/dist/core/web/public/next/assets/Skeleton-4qq4HuJO.js +0 -2
  265. package/dist/core/web/public/next/assets/Skeleton-4qq4HuJO.js.map +0 -1
  266. package/dist/core/web/public/next/assets/Skeleton-D2JaTXyv.css +0 -1
  267. package/dist/core/web/public/next/assets/StatusBadge-BbEdqEGn.js +0 -2
  268. package/dist/core/web/public/next/assets/StatusBadge-BbEdqEGn.js.map +0 -1
  269. package/dist/core/web/public/next/assets/StatusBadge-TpDqZf6K.css +0 -1
  270. package/dist/core/web/public/next/assets/TableView-R6Yeztp1.css +0 -1
  271. package/dist/core/web/public/next/assets/TableView-nyYs7Sv1.js +0 -2
  272. package/dist/core/web/public/next/assets/TableView-nyYs7Sv1.js.map +0 -1
  273. package/dist/core/web/public/next/assets/UniverseConsoleApp-CiZZxRPV.css +0 -1
  274. package/dist/core/web/public/next/assets/UniverseConsoleApp-DjTpQUrA.js +0 -2
  275. package/dist/core/web/public/next/assets/UniverseConsoleApp-DjTpQUrA.js.map +0 -1
  276. package/dist/core/web/public/next/assets/UniverseView-BtApwayT.js +0 -9
  277. package/dist/core/web/public/next/assets/UniverseView-BtApwayT.js.map +0 -1
  278. package/dist/core/web/public/next/assets/UniverseView-gBxl6yum.css +0 -1
  279. package/dist/core/web/public/next/assets/UsageSection-Db99N6ao.js +0 -2
  280. package/dist/core/web/public/next/assets/UsageSection-Db99N6ao.js.map +0 -1
  281. package/dist/core/web/public/next/assets/UsageSection-UUYDidOg.css +0 -1
  282. package/dist/core/web/public/next/assets/VerseConsoleApp-COa3J2dO.js +0 -3
  283. package/dist/core/web/public/next/assets/VerseConsoleApp-COa3J2dO.js.map +0 -1
  284. package/dist/core/web/public/next/assets/VerseConsoleApp-mOAXvWa6.css +0 -1
  285. package/dist/core/web/public/next/assets/fleet-model-DXCfVtNW.js +0 -2
  286. package/dist/core/web/public/next/assets/fleet-model-DXCfVtNW.js.map +0 -1
  287. package/dist/core/web/public/next/assets/format-fggwu_Rs.js +0 -2
  288. package/dist/core/web/public/next/assets/format-fggwu_Rs.js.map +0 -1
  289. package/dist/core/web/public/next/assets/global-BeRYd1Bu.css +0 -1
  290. package/dist/core/web/public/next/assets/global-CNVapoV1.js +0 -2
  291. package/dist/core/web/public/next/assets/global-CNVapoV1.js.map +0 -1
  292. package/dist/core/web/public/next/assets/index-BkUlX2Se.js +0 -51
  293. package/dist/core/web/public/next/assets/index-BkUlX2Se.js.map +0 -1
  294. package/dist/core/web/public/next/assets/index-YNTgDG2b.js +0 -2
  295. package/dist/core/web/public/next/assets/index-YNTgDG2b.js.map +0 -1
  296. package/dist/core/web/public/next/assets/queries-C9XS4SYq.js +0 -2
  297. package/dist/core/web/public/next/assets/queries-C9XS4SYq.js.map +0 -1
  298. package/dist/core/web/public/next/assets/use-guarded-action-Bqa2v0a-.css +0 -1
  299. package/dist/core/web/public/next/assets/use-guarded-action-Bql1nA-z.js +0 -2
  300. package/dist/core/web/public/next/assets/use-guarded-action-Bql1nA-z.js.map +0 -1
  301. package/dist/core/web/public/next/assets/verse-model-IrNQKtER.js +0 -2
  302. package/dist/core/web/public/next/assets/verse-model-IrNQKtER.js.map +0 -1
  303. package/node_modules/which/CHANGELOG.md +0 -166
  304. /package/node_modules/marked/{LICENSE.md → LICENSE} +0 -0
@@ -1 +0,0 @@
1
- ._view_1an5o_3{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-5);min-width:0}._view_1an5o_3>*{min-width:0}._statusBar_1an5o_5{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2) var(--space-5);padding-bottom:var(--space-3);border-bottom:1px solid var(--border-default);min-width:0}._sectionNav_1an5o_6{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1)}._sectionNav_1an5o_6 a{display:inline-flex;align-items:center;min-height:40px;padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);text-decoration:none}._sectionNav_1an5o_6 a:hover{color:var(--text-link);background:var(--bg-hover)}._sectionNav_1an5o_6 a:focus-visible{color:var(--text-link);outline:2px solid var(--border-focus);outline-offset:2px}._detailSection_1an5o_10{display:grid;gap:var(--space-4);min-width:0;scroll-margin-top:var(--space-5)}._detailHeading_1an5o_11{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:var(--space-2) var(--space-5);padding-top:var(--space-5);border-top:1px solid var(--border-default)}._detailHeading_1an5o_11 h2{font-family:var(--font-display, var(--font-ui));font-size:var(--text-2xl-size);line-height:var(--text-2xl-line);letter-spacing:-.025em}._detailHeading_1an5o_11 p{color:var(--text-secondary);font-size:var(--text-sm-size);max-width:65ch}._detailSection_1an5o_10:focus-visible,._workspaceGrid_1an5o_14:focus-visible{outline:2px solid var(--border-focus);outline-offset:4px}._performanceScroll_1an5o_15{overflow-x:auto}._performanceScroll_1an5o_15:focus-visible{outline:2px solid var(--accent-500);outline-offset:-2px}._performanceTable_1an5o_17{width:100%;border-collapse:collapse;font-size:var(--text-sm-size);font-variant-numeric:tabular-nums}._performanceTable_1an5o_17 caption{text-align:left;padding:0 var(--space-5) var(--space-3);font-size:var(--text-xs-size);color:var(--text-secondary)}._performanceTable_1an5o_17 th,._performanceTable_1an5o_17 td{text-align:left;vertical-align:top;padding:var(--space-3);border-top:1px solid var(--border-subtle)}._performanceTable_1an5o_17 th:first-child,._performanceTable_1an5o_17 td:first-child{padding-left:var(--space-5)}._performanceTable_1an5o_17 th:last-child,._performanceTable_1an5o_17 td:last-child{padding-right:var(--space-5)}._performanceTable_1an5o_17 thead th{font-size:var(--text-xs-size);color:var(--text-secondary);font-weight:var(--font-weight-medium)}._performanceTable_1an5o_17 tbody th{font-weight:var(--font-weight-medium);min-width:150px;max-width:220px}._performanceTable_1an5o_17 td{min-width:105px}._performanceTable_1an5o_17 small{display:block;font-size:var(--text-xs-size);color:var(--text-secondary);margin-top:var(--space-1);font-weight:var(--font-weight-normal);overflow-wrap:anywhere}._performanceWorker_1an5o_26{color:var(--text-link);text-align:left;min-height:30px;overflow-wrap:anywhere}._performanceWorker_1an5o_26:hover{text-decoration:underline}._pageHeading_1an5o_28{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4)}._pageHeading_1an5o_28 h1{font-family:var(--font-display, var(--font-ui));font-size:var(--text-3xl-size);line-height:var(--text-3xl-line);letter-spacing:-.035em}._pageHeading_1an5o_28 p,._sectionHeading_1an5o_30 p{color:var(--text-secondary);margin-top:var(--space-1);max-width:70ch}._headerActions_1an5o_31,._inline_1an5o_31{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2)}._primaryButton_1an5o_32,._secondaryButton_1an5o_32{min-height:38px;border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);border:1px solid var(--border-default)}._primaryButton_1an5o_32{background:var(--accent-600);color:var(--accent-contrast);border-color:var(--accent-600)}._primaryButton_1an5o_32:hover{background:var(--accent-700)}._secondaryButton_1an5o_32{background:var(--bg-surface)}._secondaryButton_1an5o_32:hover{background:var(--bg-hover)}._view_1an5o_3 button:disabled{opacity:.5;cursor:not-allowed}._freshness_1an5o_38{display:flex;flex-wrap:wrap;gap:var(--space-2) var(--space-4);color:var(--text-secondary);font-size:var(--text-xs-size);min-width:0;overflow-wrap:anywhere}._freshness_1an5o_38 strong{color:var(--text-primary)}._notice_1an5o_40,._actionNotice_1an5o_40{padding:var(--space-4);border-radius:var(--radius-sm);line-height:var(--text-base-line)}._notice_1an5o_40{border:1px solid var(--status-warning-solid);background:var(--status-warning-bg)}._notice_1an5o_40 p{margin-top:var(--space-1);max-width:90ch}._actionNotice_1an5o_40{background:var(--status-info-bg);color:var(--status-info-fg)}._loading_1an5o_44{display:grid;gap:var(--space-4);padding:var(--space-6)}._supervisor_1an5o_45{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);background:var(--bg-surface);border:1px solid var(--border-default);border-left:3px solid var(--accent-500);border-radius:var(--radius-sm);min-width:0}._supervisor_1an5o_45 h2{font-family:var(--font-display, var(--font-ui));font-size:var(--text-md-size);line-height:var(--text-md-line)}._supervisor_1an5o_45 p{color:var(--text-secondary);margin-top:var(--space-1);font-size:var(--text-sm-size);overflow-wrap:anywhere}._ownedStrip_1an5o_48{flex-basis:100%;min-width:0;border-top:1px solid var(--border-default);padding-top:var(--space-3);display:grid;gap:var(--space-2)}._ownedHeading_1an5o_49{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-1) var(--space-3)}._ownedHeading_1an5o_49 h3{font-size:var(--text-sm-size);font-weight:var(--font-weight-semibold)}._ownedHeading_1an5o_49>span{font-size:var(--text-xs-size);color:var(--text-secondary)}._ownedTasks_1an5o_52{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(230px,100%),1fr));gap:var(--space-2)}._ownedTask_1an5o_52{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-1) var(--space-2);align-items:center;width:100%;min-height:48px;text-align:left;padding:var(--space-2) var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-canvas)}._ownedTask_1an5o_52 strong{font-size:var(--text-sm-size);overflow-wrap:anywhere}._ownedTask_1an5o_52>span:nth-child(2){grid-column:1;font-size:var(--text-xs-size);color:var(--text-secondary);overflow-wrap:anywhere}._ownedTask_1an5o_52>span:last-child{grid-column:2;grid-row:1 / 3}._ownedTask_1an5o_52:hover{background:var(--bg-hover)}._ownedTask_1an5o_52[aria-pressed=true]{border-color:var(--accent-500);background:var(--bg-selected)}._showOwned_1an5o_59{justify-self:start;color:var(--text-link);font-size:var(--text-sm-size);min-height:32px}._workspaceGrid_1an5o_14{display:grid;grid-template-columns:minmax(0,1fr) minmax(310px,360px);gap:var(--space-5);align-items:start;min-width:0;scroll-margin-top:var(--space-5)}._mainColumn_1an5o_61{display:grid;gap:var(--space-5);min-width:0}._sideColumn_1an5o_62{position:sticky;top:var(--space-5);max-height:calc(100dvh - 2 * var(--space-5));border:1px solid var(--border-default);border-radius:var(--radius-md);background:var(--bg-surface);min-width:0;overflow:auto;scrollbar-gutter:stable}._tabs_1an5o_63{display:grid;grid-template-columns:1fr 1fr;border-bottom:1px solid var(--border-default)}._tabs_1an5o_63 button{padding:var(--space-3);font-size:var(--text-sm-size);min-height:44px}._tabs_1an5o_63 button[aria-pressed=true]{box-shadow:inset 0 -2px var(--accent-500);color:var(--text-link);background:var(--bg-selected);font-weight:var(--font-weight-semibold)}._board_1an5o_66,._tasks_1an5o_66{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);overflow:hidden;min-width:0}._sectionHeading_1an5o_30{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3);padding:var(--space-5)}._sectionHeading_1an5o_30 h2{font-family:var(--font-display, var(--font-ui));font-size:var(--text-xl-size);line-height:var(--text-xl-line);letter-spacing:-.02em;overflow-wrap:anywhere}._sectionHeading_1an5o_30 p{font-size:var(--text-sm-size)}._preview_1an5o_70{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2);padding:var(--space-3) var(--space-5);border-block:1px solid var(--border-default);background:var(--bg-selected)}._preview_1an5o_70 small{color:var(--text-secondary);font-size:var(--text-xs-size);margin-left:auto}._routeDot_1an5o_72{width:8px;height:8px;border-radius:var(--radius-full);background:var(--accent-500);flex-shrink:0}._capacityLane_1an5o_73{display:grid;grid-template-columns:minmax(145px,.7fr) minmax(0,1.6fr);padding:var(--space-5);border-bottom:1px solid var(--border-subtle);gap:var(--space-6);align-items:center}._capacitySource_1an5o_74{position:relative;min-width:0}._capacitySource_1an5o_74 h3{font-size:var(--text-md-size);line-height:var(--text-md-line);overflow-wrap:anywhere;margin-bottom:var(--space-2)}._sourceGlyph_1an5o_76{display:inline-flex;width:30px;height:30px;justify-content:center;align-items:center;border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--text-link);margin-bottom:var(--space-2);font-size:var(--text-xl-size)}._slotCount_1an5o_77{margin-bottom:var(--space-1);font-size:var(--text-sm-size)}._slotCount_1an5o_77 strong{font-size:var(--text-xl-size);font-weight:var(--font-weight-semibold)}._workerLanes_1an5o_79{display:grid;gap:var(--space-3);position:relative;min-width:0}._workerLanes_1an5o_79:before{content:"";position:absolute;left:calc(-1 * var(--space-3));top:50%;width:var(--space-3);border-top:2px solid var(--border-strong)}._workerLane_1an5o_79{position:relative;min-width:0}._workerLane_1an5o_79:before{content:"";position:absolute;left:calc(-1 * var(--space-3));width:var(--space-3);height:calc(100% + var(--space-3));top:calc(-1 * var(--space-3));border-left:2px solid var(--border-strong);pointer-events:none}._workerLane_1an5o_79:first-child:before{top:50%;height:calc(50% + var(--space-3))}._workerLane_1an5o_79:last-child:before{height:calc(50% + var(--space-3))}._workerLane_1an5o_79:only-child:before{display:none}._workerLane_1an5o_79:after{content:"";position:absolute;left:calc(-1 * var(--space-3));top:50%;width:var(--space-3);border-top:2px solid var(--border-strong);pointer-events:none}._workerButton_1an5o_87{width:100%;text-align:left;display:grid;gap:var(--space-1);padding:var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-canvas);min-width:0}._workerButton_1an5o_87:hover,._taskRow_1an5o_88:hover{background:var(--bg-hover)}._workerButton_1an5o_87[aria-pressed=true],._taskRow_1an5o_88[aria-pressed=true]{border-color:var(--accent-500);box-shadow:inset 3px 0 var(--accent-500);background:var(--bg-selected)}._nextWorker_1an5o_90{border-color:var(--accent-300)}._workerHeading_1an5o_91{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);flex-wrap:wrap}._workerHeading_1an5o_91 strong{font-size:var(--text-md-size);overflow-wrap:anywhere}._workerButton_1an5o_87 span{overflow-wrap:anywhere}._muted_1an5o_94{color:var(--text-secondary);font-size:var(--text-sm-size)}._caption_1an5o_95{display:block;color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line);margin-top:var(--space-1)}._occupied_1an5o_96{color:var(--status-running-fg);font-size:var(--text-xs-size);margin-top:var(--space-1)}._warning_1an5o_97{color:var(--status-warning-fg);font-size:var(--text-sm-size);line-height:var(--text-sm-line);margin-top:var(--space-2)}._boardNote_1an5o_98{padding:var(--space-3) var(--space-5);font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary);border-top:1px solid var(--border-subtle)}._inspector_1an5o_99{padding:var(--space-5);display:grid;gap:var(--space-4)}._inspector_1an5o_99>._sectionHeading_1an5o_30{padding:0}._inspectionTarget_1an5o_101 [data-inspector-heading]{scroll-margin-block:var(--space-5)}._inspectionTarget_1an5o_101 [data-inspector-heading]:focus{outline:2px solid var(--accent-500);outline-offset:4px;border-radius:var(--radius-xs)}._inspector_1an5o_99 h3{font-size:var(--text-lg-size)}._facts_1an5o_104{display:grid;gap:var(--space-3);margin:0;font-size:var(--text-sm-size)}._facts_1an5o_104>div{display:grid;grid-template-columns:minmax(110px,.9fr) minmax(0,1.1fr);gap:var(--space-3)}._facts_1an5o_104 dt{color:var(--text-secondary)}._facts_1an5o_104 dd{margin:0;overflow-wrap:anywhere}._routeNote_1an5o_108{padding:var(--space-3);background:var(--status-info-bg);color:var(--status-info-fg);border-radius:var(--radius-sm);font-size:var(--text-sm-size)}._reasonList_1an5o_109{list-style:disc;padding-left:var(--space-4);color:var(--status-warning-fg);font-size:var(--text-sm-size)}._reasonList_1an5o_109 li+li{margin-top:var(--space-1)}._quotaEvidence_1an5o_111,._windows_1an5o_112{display:grid;gap:var(--space-4)}._windowTitle_1an5o_113{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-1) var(--space-2);justify-content:space-between;font-size:var(--text-xs-size)}._windowTitle_1an5o_113 strong{font-weight:var(--font-weight-semibold);overflow-wrap:anywhere}._meter_1an5o_115{width:100%;height:10px;display:block;margin-top:var(--space-2);accent-color:var(--accent-500)}._meter_1an5o_115::-webkit-meter-bar{background:var(--bg-active);border:0;border-radius:var(--radius-xs)}._meter_1an5o_115::-webkit-meter-optimum-value{background:var(--accent-500);border-radius:var(--radius-xs)}._meter_1an5o_115::-moz-meter-bar{background:var(--accent-500)}._unknownMeter_1an5o_119{height:5px;margin-block:var(--space-2);border:1px dashed var(--status-unknown-solid);border-radius:var(--radius-xs);background:var(--status-unknown-bg)}._workspace_1an5o_14{font-size:var(--text-xs-size);color:var(--text-secondary)}._workspace_1an5o_14 code{display:block;color:var(--text-primary);overflow-wrap:anywhere;margin-top:var(--space-1)}._composer_1an5o_122{display:grid;gap:var(--space-4)}._composer_1an5o_122 label{display:grid;gap:var(--space-2);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._composer_1an5o_122 input,._composer_1an5o_122 textarea,._composer_1an5o_122 select,._filter_1an5o_124 select{width:100%;min-width:0;min-height:38px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:var(--space-2);background:var(--bg-input);color:var(--text-primary)}._composer_1an5o_122 textarea{resize:vertical;line-height:var(--text-base-line)}._composer_1an5o_122 fieldset{border:1px solid var(--border-default);border-radius:var(--radius-sm);padding:var(--space-3);margin:0;min-width:0}._composer_1an5o_122 legend{padding-inline:var(--space-1);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._workerChoices_1an5o_128{display:grid;gap:var(--space-2);margin-top:var(--space-3)}._workerChoices_1an5o_128 label{display:flex;align-items:center;gap:var(--space-2);overflow-wrap:anywhere}._workerChoices_1an5o_128 input{width:16px;min-height:16px;height:16px;flex-shrink:0;accent-color:var(--accent-600)}._fieldPair_1an5o_131{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}._filter_1an5o_124{display:grid;gap:var(--space-1);font-size:var(--text-xs-size);min-width:130px}._taskRows_1an5o_133{display:grid}._taskRow_1an5o_88{display:grid;grid-template-columns:minmax(0,1fr) minmax(100px,.6fr) auto;align-items:center;text-align:left;gap:var(--space-3);border:1px solid transparent;border-top-color:var(--border-subtle);padding:var(--space-3) var(--space-5);width:100%}._taskRow_1an5o_88 strong,._taskWorker_1an5o_135{overflow-wrap:anywhere;font-size:var(--text-sm-size)}._taskRow_1an5o_88 small{display:block;color:var(--text-secondary);font-size:var(--text-xs-size);margin-top:var(--space-1)}._taskWorker_1an5o_135{color:var(--text-secondary)}._empty_1an5o_138{padding:var(--space-6);display:grid;gap:var(--space-2)}._empty_1an5o_138 h2,._empty_1an5o_138 h3{font-size:var(--text-lg-size)}._empty_1an5o_138 p{color:var(--text-secondary);max-width:60ch;font-size:var(--text-sm-size)}._accounting_1an5o_141{display:grid;gap:var(--space-2);padding:var(--space-4) var(--space-1);min-width:0;overflow-wrap:anywhere}._accounting_1an5o_141 h2{font-family:var(--font-display, var(--font-ui));font-size:var(--text-lg-size)}._outputSection_1an5o_143{display:grid;gap:var(--space-3)}._output_1an5o_143{white-space:pre-wrap;overflow-wrap:anywhere;max-height:440px;overflow:auto;background:var(--bg-code);border:1px solid var(--border-default);border-radius:var(--radius-sm);padding:var(--space-3);font-size:var(--text-xs-size);line-height:var(--text-xs-line);margin:0}@media(max-width:1100px){._workspaceGrid_1an5o_14{grid-template-columns:minmax(0,1fr);gap:var(--space-4)}._sideColumn_1an5o_62{position:static;max-height:none;scrollbar-gutter:auto}._capacityLane_1an5o_73{grid-template-columns:130px minmax(0,1fr);padding:var(--space-4);gap:var(--space-4)}._preview_1an5o_70 small{margin-left:0;flex-basis:100%}}@media(max-width:800px){._pageHeading_1an5o_28{flex-direction:column}._pageHeading_1an5o_28 h1{font-size:var(--text-2xl-size);line-height:var(--text-2xl-line)}._view_1an5o_3{gap:var(--space-4)}._statusBar_1an5o_5{align-items:flex-start}}@media(max-width:450px){._capacityLane_1an5o_73{grid-template-columns:1fr;gap:var(--space-4)}._workerLanes_1an5o_79{margin-left:var(--space-3)}._capacitySource_1an5o_74{padding-left:var(--space-1)}._workerLanes_1an5o_79:before{top:calc(-1 * var(--space-4));height:var(--space-4);border-left:2px solid var(--border-strong);border-top:0}._taskRow_1an5o_88{grid-template-columns:minmax(0,1fr) auto;padding:var(--space-3)}._taskWorker_1an5o_135{grid-column:1;grid-row:2}._taskRow_1an5o_88>span:last-child{grid-column:2;grid-row:1 / 3}._sectionHeading_1an5o_30{padding:var(--space-4);flex-wrap:wrap}._inspector_1an5o_99{padding:var(--space-4)}._facts_1an5o_104>div{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}@media(max-width:450px){._headerActions_1an5o_31{width:100%}._headerActions_1an5o_31 button{flex:1 1 auto}._sectionNav_1an5o_6{width:100%;justify-content:space-between}._sectionNav_1an5o_6 a{padding-inline:var(--space-2)}._fieldPair_1an5o_131{grid-template-columns:minmax(0,1fr)}._detailHeading_1an5o_11{padding-top:var(--space-3)}}._returnToMap_1an5o_149{align-self:flex-start;margin:var(--space-3) var(--space-4) 0;padding:var(--space-2);color:var(--accent-600);background:transparent;border:0;border-radius:var(--radius-xs);font:inherit;font-size:var(--text-sm-size);cursor:pointer}._returnToMap_1an5o_149:hover{text-decoration:underline}._returnToMap_1an5o_149:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}._collectorNotice_1an5o_152{display:grid;justify-items:start;gap:var(--space-2);margin:0 var(--space-5) var(--space-4);padding:var(--space-3);border-left:3px solid var(--border-strong);background:var(--bg-canvas);min-width:0;overflow-wrap:anywhere}._collectorNotice_1an5o_152 p{margin:0;max-width:78ch;font-size:var(--text-sm-size);color:var(--text-secondary)}._recoveryDetail_1an5o_154{display:grid;gap:var(--space-2);max-width:78ch;min-width:0}._recoveryDetail_1an5o_154 h3{margin:0;color:var(--text-primary);font-family:var(--font-display);font-size:var(--text-base-size);line-height:var(--text-base-line)}._recoveryDetail_1an5o_154 summary{width:fit-content;padding-block:var(--space-2);color:var(--text-link);font-size:var(--text-sm-size);cursor:pointer}._recoveryDetail_1an5o_154 summary:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}._recoveryDetail_1an5o_154 details p+p{margin-top:var(--space-2)}._panel_13cxn_1{border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface);overflow:hidden}._heading_13cxn_2{display:flex;align-items:start;justify-content:space-between;gap:var(--space-4);padding:var(--space-4) var(--space-5)}._heading_13cxn_2 h2{margin:0;font-size:var(--text-lg-size);font-weight:var(--font-weight-semibold)}._heading_13cxn_2 p,._refresh_13cxn_4,._note_13cxn_4,._empty_13cxn_4{color:var(--text-secondary);font-size:var(--text-sm-size);line-height:var(--text-sm-line)}._heading_13cxn_2 p{margin:var(--space-1) 0 0}._refresh_13cxn_4{text-align:right}._accounts_13cxn_7{list-style:none;margin:0;padding:0}._account_13cxn_7{display:grid;grid-template-columns:minmax(200px,1fr) minmax(260px,1.7fr) minmax(160px,.75fr);gap:var(--space-5);padding:var(--space-5);border-top:1px solid var(--border-subtle)}._account_13cxn_7>div{min-width:0}._identity_13cxn_10 h3{font-size:var(--text-md-size);font-weight:var(--font-weight-semibold);margin:0 0 var(--space-1);overflow-wrap:anywhere}._identity_13cxn_10 p,._connection_13cxn_11 p,._window_13cxn_11 p{margin:var(--space-2) 0 0;font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary)}._adapter_13cxn_12{display:block;margin-top:var(--space-3);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line)}._caption_13cxn_13{display:block;color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line);margin-bottom:var(--space-2)}._badges_13cxn_14{display:flex;flex-wrap:wrap;gap:var(--space-2)}._connection_13cxn_11 ._warning_13cxn_15{color:var(--status-warning-fg)}._connection_13cxn_11{margin-top:var(--space-4)}._window_13cxn_11+._window_13cxn_11{margin-top:var(--space-3)}._windowHeading_13cxn_18{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:var(--space-2);font-size:var(--text-sm-size);overflow-wrap:anywhere}._window_13cxn_11 strong{font-family:var(--font-ui);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);font-variant-numeric:tabular-nums}._track_13cxn_20{position:relative;margin-top:var(--space-2)}._meter_13cxn_21{display:block;width:100%;height:16px;margin:0;accent-color:var(--accent-500)}._meter_13cxn_21::-webkit-meter-bar{background:var(--bg-active);border:0;border-radius:var(--radius-xs)}._meter_13cxn_21::-webkit-meter-optimum-value{background:var(--accent-500);border-radius:var(--radius-xs)}._meter_13cxn_21::-moz-meter-bar{background:var(--accent-500)}._meter_13cxn_21[data-historical=true]{accent-color:var(--status-neutral-solid)}._meter_13cxn_21[data-historical=true]::-webkit-meter-optimum-value{background:var(--status-neutral-solid)}._meter_13cxn_21[data-historical=true]::-moz-meter-bar{background:var(--status-neutral-solid)}._track_13cxn_20[data-over-reference=true] ._meter_13cxn_21{accent-color:var(--status-warning-solid)}._track_13cxn_20[data-over-reference=true] ._meter_13cxn_21::-webkit-meter-optimum-value{background:var(--status-warning-solid)}._track_13cxn_20[data-over-reference=true] ._meter_13cxn_21::-moz-meter-bar{background:var(--status-warning-solid)}._referenceRegion_13cxn_31{position:absolute;top:3px;bottom:3px;pointer-events:none;background:repeating-linear-gradient(135deg,transparent,transparent 3px,var(--border-strong) 3px,var(--border-strong) 4px);opacity:.65}._referenceTick_13cxn_32{position:absolute;top:0;bottom:0;border-left:2px solid var(--text-primary);transform:translate(-1px);pointer-events:none}._referenceLegend_13cxn_33{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-4);padding:var(--space-3) var(--space-5);background:var(--bg-canvas);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line)}._referenceLegend_13cxn_33 strong{font-weight:var(--font-weight-medium);color:var(--text-primary)}._legendTick_13cxn_35{height:14px;border-left:2px solid var(--text-primary)}._window_13cxn_11 ._overReference_13cxn_36{color:var(--status-warning-fg);font-weight:var(--font-weight-medium)}._window_13cxn_11 ._comparison_13cxn_37{color:var(--text-secondary)}._window_13cxn_11 ._quotaAction_13cxn_38{color:var(--text-primary);margin-top:var(--space-3)}._quotas_13cxn_39>._quotaAction_13cxn_38{color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line);margin:0 0 var(--space-3)}._unknownMeter_13cxn_40{height:5px;margin-block:var(--space-2);border:1px dashed var(--status-unknown-solid);background:var(--status-unknown-bg)}._freshness_13cxn_41 dl{margin:var(--space-3) 0 0;font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary)}._freshness_13cxn_41 dl>div+div{margin-top:var(--space-2)}._freshness_13cxn_41 dt{font-weight:var(--font-weight-medium)}._freshness_13cxn_41 dd{margin:var(--space-1) 0 0;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}._note_13cxn_4{border-top:1px solid var(--border-subtle);margin:0;padding:var(--space-3) var(--space-5);background:var(--bg-canvas)}._empty_13cxn_4{padding:0 var(--space-5) var(--space-3)}@media(max-width:1050px){._account_13cxn_7{grid-template-columns:minmax(0,1fr) minmax(0,1.5fr);gap:var(--space-4)}._freshness_13cxn_41{grid-column:1 / -1}._freshness_13cxn_41 dl{display:flex;gap:var(--space-5)}._freshness_13cxn_41 dl>div+div{margin-top:0}}@media(max-width:540px){._heading_13cxn_2{flex-direction:column;gap:var(--space-2)}._refresh_13cxn_4{text-align:left}._account_13cxn_7{grid-template-columns:minmax(0,1fr)}._freshness_13cxn_41 dl{flex-wrap:wrap}}._panel_tq0rj_1{border:1px solid var(--border-default);border-radius:var(--radius-sm);padding:var(--space-5);background:var(--bg-surface)}._heading_tq0rj_2{display:flex;justify-content:space-between;gap:var(--space-4)}._heading_tq0rj_2 h2{margin:0;font-size:var(--text-lg-size);font-weight:var(--font-weight-semibold)}._heading_tq0rj_2 p,._saved_tq0rj_4,._note_tq0rj_4,._warning_tq0rj_4,._conflict_tq0rj_4{font-size:var(--text-sm-size);line-height:var(--text-sm-line)}._heading_tq0rj_2 p{margin:var(--space-1) 0 0;color:var(--text-secondary)}._saved_tq0rj_4{display:grid;align-content:start;gap:var(--space-1);text-align:right}._saved_tq0rj_4 strong{font-weight:var(--font-weight-medium)}._saved_tq0rj_4 span{color:var(--text-secondary);font-size:var(--text-xs-size)}._controls_tq0rj_9{display:flex;align-items:center;gap:var(--space-5);margin-top:var(--space-5)}._sliderArea_tq0rj_10{flex:1;min-width:180px}._sliderHeading_tq0rj_11{display:flex;justify-content:space-between;gap:var(--space-3);font-size:var(--text-sm-size)}._sliderHeading_tq0rj_11 output{font-family:var(--font-mono);font-variant-numeric:tabular-nums;white-space:nowrap}._sliderHeading_tq0rj_11 output span{font-family:var(--font-ui);color:var(--text-secondary);font-size:var(--text-xs-size)}._sliderArea_tq0rj_10 input{display:block;width:100%;margin:var(--space-2) 0;min-height:28px;accent-color:var(--accent-500)}._sliderArea_tq0rj_10 input:focus-visible,._save_tq0rj_4:focus-visible,._conflict_tq0rj_4 button:focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}._rangeLabels_tq0rj_16{display:flex;justify-content:space-between;font-size:var(--text-xs-size);color:var(--text-secondary)}._remainder_tq0rj_17{display:grid;gap:var(--space-1);border-left:1px solid var(--border-default);padding-left:var(--space-5)}._remainder_tq0rj_17 strong{font-size:var(--text-2xl-size);font-family:var(--font-mono);font-weight:var(--font-weight-medium);font-variant-numeric:tabular-nums}._remainder_tq0rj_17 span{font-size:var(--text-xs-size);color:var(--text-secondary)}._save_tq0rj_4,._conflict_tq0rj_4 button{min-height:36px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);cursor:pointer;font:inherit;font-size:var(--text-sm-size)}._save_tq0rj_4{background:var(--accent-600);color:var(--accent-contrast);border-color:var(--accent-600)}._conflict_tq0rj_4 button{background:var(--bg-surface);color:var(--text-primary)}._save_tq0rj_4:disabled,._conflict_tq0rj_4 button:disabled{opacity:.5;cursor:not-allowed}._note_tq0rj_4{margin:var(--space-4) 0 0;color:var(--text-secondary)}._warning_tq0rj_4{margin:var(--space-3) 0 0;color:var(--status-warning-fg)}._conflict_tq0rj_4{display:flex;justify-content:space-between;align-items:center;gap:var(--space-3);margin-top:var(--space-4);padding:var(--space-3);background:var(--status-warning-bg);color:var(--status-warning-fg);border-radius:var(--radius-sm)}._conflict_tq0rj_4 p{margin:0}@media(max-width:800px){._heading_tq0rj_2{flex-direction:column}._saved_tq0rj_4{text-align:left}._controls_tq0rj_9{flex-wrap:wrap}._sliderArea_tq0rj_10{flex-basis:100%}._remainder_tq0rj_17{border:0;padding:0;flex:1}}@media(max-width:540px){._conflict_tq0rj_4{align-items:start;flex-direction:column}._sliderHeading_tq0rj_11{flex-wrap:wrap}}._panel_thwgk_1{border:1px solid var(--border-default);border-radius:var(--radius-sm);padding:var(--space-5);background:var(--bg-surface);min-width:0}._heading_thwgk_2{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--space-3) var(--space-5)}._heading_thwgk_2 h2{font-family:var(--font-display, var(--font-ui));font-size:var(--text-lg-size);font-weight:var(--font-weight-semibold)}._heading_thwgk_2 p,._note_thwgk_4,._warning_thwgk_4,._notice_thwgk_4,._conflict_thwgk_4{font-size:var(--text-sm-size);line-height:var(--text-sm-line)}._heading_thwgk_2 p{margin-top:var(--space-1);color:var(--text-secondary)}._saved_thwgk_6{font-size:var(--text-sm-size);text-align:right}._saved_thwgk_6 small{display:block;color:var(--text-secondary);margin-top:var(--space-1);font-size:var(--text-xs-size)}._workers_thwgk_8{margin-top:var(--space-4);border-block:1px solid var(--border-default)}._worker_thwgk_8{display:grid;grid-template-columns:auto minmax(0,1fr) minmax(120px,auto);align-items:center;gap:var(--space-3);min-height:68px;padding:var(--space-3) 0}._worker_thwgk_8+._worker_thwgk_8{border-top:1px solid var(--border-subtle)}._worker_thwgk_8 input{width:18px;height:18px;accent-color:var(--accent-500)}._worker_thwgk_8 input:focus-visible,._save_thwgk_6:focus-visible,._conflict_thwgk_4 button:focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}._identity_thwgk_13{min-width:0;overflow-wrap:anywhere}._identity_thwgk_13 strong{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._identity_thwgk_13 small{display:block;color:var(--text-secondary);font-size:var(--text-xs-size);margin-top:var(--space-1)}._state_thwgk_16{font-size:var(--text-xs-size);color:var(--text-secondary);text-align:right;overflow-wrap:anywhere}._effective_thwgk_17{display:block;max-width:40ch;font-weight:var(--font-weight-medium);color:var(--status-warning-fg);margin-top:var(--space-1)}._actions_thwgk_18{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--space-3);margin-top:var(--space-3)}._note_thwgk_4{color:var(--text-secondary);margin-top:var(--space-3);max-width:78ch}._actions_thwgk_18 ._note_thwgk_4{margin-top:0}._save_thwgk_6,._conflict_thwgk_4 button{min-height:38px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);font:inherit;font-size:var(--text-sm-size)}._save_thwgk_6{background:var(--accent-600);color:var(--accent-contrast);border-color:var(--accent-600)}._conflict_thwgk_4 button{background:var(--bg-surface);color:var(--text-primary)}._save_thwgk_6:disabled,._conflict_thwgk_4 button:disabled,._worker_thwgk_8 input:disabled{opacity:.5;cursor:not-allowed}._warning_thwgk_4{color:var(--status-warning-fg);margin-top:var(--space-3)}._notice_thwgk_4{color:var(--status-info-fg);margin-top:var(--space-3)}._conflict_thwgk_4{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--space-3);margin-top:var(--space-3);padding:var(--space-3);background:var(--status-warning-bg);color:var(--status-warning-fg);border-radius:var(--radius-sm)}@media(max-width:600px){._saved_thwgk_6{text-align:left}._worker_thwgk_8{grid-template-columns:auto minmax(0,1fr);gap:var(--space-2) var(--space-3)}._state_thwgk_16{grid-column:2;text-align:left}._panel_thwgk_1{padding:var(--space-4)}}._panel_sy6n3_1{min-width:0;padding:var(--space-5);border-inline-start:3px solid var(--accent-500);background:var(--bg-surface)}._heading_sy6n3_2{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--space-3) var(--space-5)}._heading_sy6n3_2 h2{font-family:var(--font-display, var(--font-ui));font-size:var(--text-lg-size);font-weight:var(--font-weight-semibold)}._heading_sy6n3_2 p,._note_sy6n3_4,._warning_sy6n3_4,._notice_sy6n3_4,._conflict_sy6n3_4{font-size:var(--text-sm-size);line-height:var(--text-sm-line);max-width:78ch}._heading_sy6n3_2 p{color:var(--text-secondary);margin-top:var(--space-1)}._saved_sy6n3_6{font-size:var(--text-sm-size);text-align:right}._saved_sy6n3_6 small,._identity_sy6n3_7 small{display:block;color:var(--text-secondary);font-size:var(--text-xs-size);margin-top:var(--space-1)}._rows_sy6n3_8{margin-top:var(--space-4);border-block:1px solid var(--border-default)}._row_sy6n3_8{display:grid;grid-template-columns:auto minmax(0,1fr) minmax(120px,1fr);align-items:center;gap:var(--space-3);padding:var(--space-3) 0;min-height:68px}._row_sy6n3_8+._row_sy6n3_8{border-top:1px solid var(--border-subtle)}._row_sy6n3_8 input{width:18px;height:18px;accent-color:var(--accent-500)}._identity_sy6n3_7,._state_sy6n3_12{min-width:0;overflow-wrap:anywhere}._identity_sy6n3_7 strong{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._state_sy6n3_12{text-align:right;font-size:var(--text-xs-size);color:var(--text-secondary)}._state_sy6n3_12 strong{display:block;font-weight:var(--font-weight-medium);color:var(--status-warning-fg);margin-top:var(--space-1)}._actions_sy6n3_16{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:var(--space-3);margin-top:var(--space-3)}._note_sy6n3_4{color:var(--text-secondary);margin-top:var(--space-3)}._actions_sy6n3_16 ._note_sy6n3_4{margin-top:0}._save_sy6n3_6,._conflict_sy6n3_4 button{min-height:38px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);font:inherit;font-size:var(--text-sm-size)}._save_sy6n3_6{background:var(--accent-600);color:var(--accent-contrast);border-color:var(--accent-600)}._conflict_sy6n3_4 button{background:var(--bg-surface);color:var(--text-primary)}._save_sy6n3_6:disabled,._conflict_sy6n3_4 button:disabled,._row_sy6n3_8 input:disabled{opacity:.5;cursor:not-allowed}._row_sy6n3_8 input:focus-visible,._save_sy6n3_6:focus-visible,._conflict_sy6n3_4 button:focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}._warning_sy6n3_4{color:var(--status-warning-fg);margin-top:var(--space-3)}._notice_sy6n3_4{color:var(--status-info-fg);margin-top:var(--space-3)}._conflict_sy6n3_4{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3);margin-top:var(--space-3);padding:var(--space-3);background:var(--status-warning-bg);color:var(--status-warning-fg);border-radius:var(--radius-sm)}@media(max-width:600px){._panel_sy6n3_1{padding:var(--space-4)}._saved_sy6n3_6{text-align:left}._row_sy6n3_8{grid-template-columns:auto minmax(0,1fr)}._state_sy6n3_12{grid-column:2;text-align:left}}._fleetMap_pb3nh_1{--trunk-width: 192px;--branch-gap: 36px;container-type:inline-size;min-width:0;overflow:hidden;border:1px solid var(--border-strong);border-radius:var(--radius-lg);background:var(--bg-surface);color:var(--text-primary)}._header_pb3nh_2{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-6);padding:var(--space-6) var(--space-6) var(--space-4)}._header_pb3nh_2 h2{margin:0 0 var(--space-2);font-family:var(--font-display, var(--font-ui));font-size:var(--text-2xl-size);line-height:var(--text-2xl-line);letter-spacing:-.035em}._header_pb3nh_2 p,._railHeader_pb3nh_4 p{margin:0;color:var(--text-secondary);line-height:1.5;max-width:75ch}._sample_pb3nh_5{display:grid;justify-items:end;flex-shrink:0;gap:var(--space-2);font-size:var(--text-xs-size);color:var(--text-tertiary)}._summary_pb3nh_6{display:flex;flex-wrap:wrap;gap:var(--space-3) var(--space-6);padding:0 var(--space-6) var(--space-5);font-size:var(--text-sm-size);color:var(--text-secondary);font-variant-numeric:tabular-nums}._summary_pb3nh_6 strong{color:var(--text-primary);font-family:var(--font-display, var(--font-ui));font-size:var(--text-lg-size);font-weight:var(--font-weight-semibold)}._evidenceNotice_pb3nh_8{margin:0;padding:var(--space-3) var(--space-6);background:var(--status-unknown-bg);color:var(--status-unknown-fg);font-size:var(--text-sm-size);line-height:1.5}._toolbar_pb3nh_9{display:flex;align-items:end;justify-content:space-between;flex-wrap:wrap;gap:var(--space-4);padding:var(--space-4) var(--space-6);background:var(--bg-canvas);border-block:1px solid var(--border-default)}._search_pb3nh_10{display:grid;flex:1 1 260px;max-width:440px;min-width:0;gap:var(--space-2)}._search_pb3nh_10 label{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium)}._search_pb3nh_10 input{width:100%;min-width:0;box-sizing:border-box;padding:10px var(--space-3);border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font:inherit;font-size:var(--text-sm-size)}._search_pb3nh_10 input::placeholder{color:var(--text-tertiary)}._workerPaging_pb3nh_14{display:grid;gap:var(--space-2);justify-items:end;font-size:var(--text-xs-size);color:var(--text-secondary)}._pager_pb3nh_15{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2);font-size:var(--text-xs-size);font-variant-numeric:tabular-nums}._pager_pb3nh_15 button{padding:6px 10px;min-height:32px;border:1px solid var(--border-strong);border-radius:var(--radius-xs);color:var(--text-primary);background:var(--bg-surface);font:inherit;cursor:pointer}._pager_pb3nh_15 button:disabled{color:var(--text-disabled);cursor:default}._pager_pb3nh_15 button:not(:disabled):hover{background:var(--bg-hover)}._laneHeadings_pb3nh_19{display:grid;grid-template-columns:var(--trunk-width) minmax(0,1fr) minmax(0,1.12fr);gap:var(--branch-gap);padding:var(--space-4) var(--space-6) var(--space-3);border-bottom:1px solid var(--border-subtle);font-size:var(--text-xs-size);font-weight:var(--font-weight-semibold);color:var(--text-secondary)}._topology_pb3nh_20{padding:0 var(--space-6)}._capacityTrunk_pb3nh_21{position:relative;display:grid;grid-template-columns:var(--trunk-width) minmax(0,1fr);column-gap:var(--branch-gap);padding-block:var(--space-5)}._capacityTrunk_pb3nh_21+._capacityTrunk_pb3nh_21{border-top:1px solid var(--border-subtle)}._capacityNode_pb3nh_23{align-self:center;position:relative;padding:var(--space-5) var(--space-4);border:1px solid var(--border-strong);border-inline-start:3px solid var(--text-link);border-radius:var(--radius-md) var(--radius-xs) var(--radius-xs) var(--radius-md);background:var(--bg-canvas)}._capacityNode_pb3nh_23:after{content:"";position:absolute;top:50%;left:100%;width:calc(var(--branch-gap) / 2);height:2px;background:var(--border-strong)}._capacityNode_pb3nh_23 h3{margin:0 0 var(--space-4);font-family:var(--font-display, var(--font-ui));font-size:var(--text-md-size);line-height:var(--text-md-line);overflow-wrap:anywhere}._capacityGlyph_pb3nh_27{display:none}._capacityCount_pb3nh_28{display:grid;gap:var(--space-1);margin:0 0 var(--space-3);font-size:var(--text-xs-size);color:var(--text-secondary);font-variant-numeric:tabular-nums}._capacityCount_pb3nh_28 strong{color:var(--text-primary);font-family:var(--font-display, var(--font-ui));font-size:var(--text-3xl-size);line-height:var(--text-3xl-line);letter-spacing:-.045em;font-weight:var(--font-weight-medium)}._meter_pb3nh_30{display:block;width:100%;height:8px;margin-bottom:var(--space-3);border:0;appearance:none;background:var(--border-default);border-radius:var(--radius-full)}._meter_pb3nh_30::-webkit-meter-bar{background:var(--border-default);border:0;border-radius:var(--radius-full)}._meter_pb3nh_30::-webkit-meter-optimum-value{background:var(--accent-600);border-radius:var(--radius-full)}._meter_pb3nh_30::-moz-meter-bar{background:var(--accent-600)}._unknownMeter_pb3nh_34{padding:var(--space-2);margin-bottom:var(--space-3);border:1px dashed var(--status-unknown-solid);color:var(--status-unknown-fg);background:var(--status-unknown-bg);border-radius:var(--radius-xs);font-size:var(--text-xs-size)}._workerBranches_pb3nh_35,._taskList_pb3nh_35,._railTasks_pb3nh_35{list-style:none;margin:0;padding:0;min-width:0}._workerBranches_pb3nh_35{position:relative;display:grid;align-content:center;gap:var(--space-4)}._workerBranches_pb3nh_35:before{content:"";position:absolute;left:calc(var(--branch-gap) / -2);top:0;bottom:0;width:2px;background:var(--border-strong)}._workerBranch_pb3nh_35{position:relative;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.12fr);gap:var(--branch-gap);align-items:center;min-width:0}._workerBranch_pb3nh_35:before{content:"";position:absolute;right:100%;top:50%;width:calc(var(--branch-gap) / 2);height:2px;background:var(--border-strong)}._workerNode_pb3nh_40,._taskNode_pb3nh_40{position:relative;display:grid;align-content:start;gap:var(--space-2);width:100%;box-sizing:border-box;min-width:0;padding:var(--space-4);text-align:left;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-surface);color:var(--text-primary);cursor:pointer;font:inherit}._workerNode_pb3nh_40{border-radius:var(--radius-lg);border-inline-start:3px solid var(--border-strong);background:var(--bg-surface-raised)}._taskNode_pb3nh_40{border-radius:var(--radius-xs);border-inline-start:3px solid var(--border-default);background:var(--bg-canvas)}._assignedWorker_pb3nh_43:after{content:"";position:absolute;top:50%;left:100%;width:calc(var(--branch-gap) / 2);border-top:1px solid var(--border-strong)}._workerNode_pb3nh_40:hover,._taskNode_pb3nh_40:hover{border-color:var(--accent-500);background:var(--bg-selected)}._workerNode_pb3nh_40[aria-pressed=true],._taskNode_pb3nh_40[aria-pressed=true]{border-color:var(--accent-600);background:var(--bg-selected);box-shadow:inset 0 0 0 1px var(--accent-600)}._workerNode_pb3nh_40:focus-visible,._taskNode_pb3nh_40:focus-visible,._pager_pb3nh_15 button:focus-visible,._search_pb3nh_10 input:focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}._nodeHeading_pb3nh_47{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:var(--space-2)}._nodeHeading_pb3nh_47 strong{flex:1 1 110px;min-width:0;font-family:var(--font-display, var(--font-ui));font-size:var(--text-md-size);line-height:var(--text-md-line);overflow-wrap:anywhere}._taskNode_pb3nh_40 ._nodeHeading_pb3nh_47 strong{font-family:var(--font-ui);font-size:var(--text-sm-size)}._nodeDetail_pb3nh_50,._workerReason_pb3nh_50,._provenance_pb3nh_50,._queueReason_pb3nh_50{display:block;font-size:var(--text-xs-size);line-height:1.45;overflow-wrap:anywhere}._nodeDetail_pb3nh_50{color:var(--text-secondary)}._workerReason_pb3nh_50{color:var(--text-primary)}._provenance_pb3nh_50{color:var(--text-secondary)}p._provenance_pb3nh_50{margin:var(--space-2) 0 0}._uncertain_pb3nh_55{margin:var(--space-3) 0;color:var(--status-unknown-fg);font-size:var(--text-xs-size);line-height:1.5}._assignments_pb3nh_56{min-width:0}._taskList_pb3nh_35{display:grid;gap:var(--space-2);position:relative}._taskList_pb3nh_35:before{content:"";position:absolute;top:0;bottom:0;left:calc(var(--branch-gap) / -2);border-left:1px solid var(--border-strong)}._taskList_pb3nh_35>li{position:relative;min-width:0}._connectedTask_pb3nh_60:before{content:"";position:absolute;top:50%;right:100%;width:calc(var(--branch-gap) / 2);border-top:1px solid var(--border-strong)}._activeTask_pb3nh_61{border-inline-start:3px solid var(--status-running-solid)}._highlightedBranch_pb3nh_62:before,._highlightedTrunk_pb3nh_62 ._capacityNode_pb3nh_23:after{background:var(--accent-600)}._highlightedBranch_pb3nh_62 ._connectedTask_pb3nh_60:before,._highlightedBranch_pb3nh_62 ._assignedWorker_pb3nh_43:after{border-top-color:var(--accent-600)}._highlightedBranch_pb3nh_62 ._taskList_pb3nh_35:before{border-left-color:var(--accent-600)}._highlightedTrunk_pb3nh_62 ._capacityNode_pb3nh_23{border-color:var(--accent-600)}._highlightedTrunk_pb3nh_62 ._workerBranches_pb3nh_35:before{background:var(--text-link)}._noAssignment_pb3nh_67{margin:0;padding:var(--space-4);border-left:1px dashed var(--border-strong);color:var(--text-secondary);font-size:var(--text-sm-size);line-height:1.5}._noAssignment_pb3nh_67 span{display:block;margin-top:var(--space-2);font-size:var(--text-xs-size);color:var(--text-tertiary)}._assignmentFooter_pb3nh_69{display:grid;justify-items:start;gap:var(--space-2);margin-top:var(--space-2);color:var(--text-secondary);font-size:var(--text-xs-size)}._empty_pb3nh_70{padding:var(--space-8) 0;margin:0;color:var(--text-secondary);font-size:var(--text-sm-size);line-height:1.5}._selectionPath_pb3nh_71{margin:0;padding:var(--space-3) var(--space-6);background:var(--bg-selected);color:var(--text-link);font-size:var(--text-xs-size);line-height:1.5;overflow-wrap:anywhere}._queueState_pb3nh_72{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-3);padding:var(--space-4) var(--space-6);border-top:1px solid var(--border-default);background:var(--bg-canvas);font-size:var(--text-sm-size)}._queueState_pb3nh_72 p{margin:0;color:var(--text-secondary)}._queueState_pb3nh_72>span:last-child{color:var(--text-secondary);font-size:var(--text-xs-size)}._rail_pb3nh_4{padding:var(--space-5) var(--space-6);border-top:1px solid var(--border-default)}._railHeader_pb3nh_4{display:flex;align-items:start;justify-content:space-between;gap:var(--space-4)}._railHeader_pb3nh_4 h3{margin:0 0 var(--space-2);font-family:var(--font-display, var(--font-ui));font-size:var(--text-md-size);line-height:var(--text-md-line)}._railHeader_pb3nh_4 h3 span{display:inline-block;margin-left:var(--space-2);padding:0 7px;border-radius:var(--radius-xs);background:var(--bg-hover);color:var(--text-secondary);font-size:var(--text-sm-size);font-variant-numeric:tabular-nums}._railHeader_pb3nh_4 p{font-size:var(--text-xs-size)}._railTasks_pb3nh_35{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-3);margin-top:var(--space-3)}._railTasks_pb3nh_35>li{min-width:0}._railTasks_pb3nh_35 ._taskNode_pb3nh_40{height:100%;padding:var(--space-3)}._queueReason_pb3nh_50{color:var(--text-secondary)}._emptyRail_pb3nh_84{margin:var(--space-4) 0 0;color:var(--text-tertiary);font-size:var(--text-xs-size)}._footer_pb3nh_85{display:grid;gap:var(--space-1);padding:var(--space-4) var(--space-6);border-top:1px solid var(--border-default);color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:1.5}@media(max-width:1100px){._fleetMap_pb3nh_1{--trunk-width: 172px;--branch-gap: 24px}._railTasks_pb3nh_35{grid-template-columns:repeat(2,minmax(0,1fr))}._header_pb3nh_2{flex-wrap:wrap}._sample_pb3nh_5{justify-items:start}}@media(max-width:800px){._fleetMap_pb3nh_1{--trunk-width: 150px;--branch-gap: 20px}._header_pb3nh_2,._toolbar_pb3nh_9,._rail_pb3nh_4,._footer_pb3nh_85,._queueState_pb3nh_72,._summary_pb3nh_6,._selectionPath_pb3nh_71,._evidenceNotice_pb3nh_8,._topology_pb3nh_20{padding-inline:var(--space-4)}._laneHeadings_pb3nh_19{display:none}._capacityNode_pb3nh_23{padding:var(--space-3)}._workerBranch_pb3nh_35{grid-template-columns:minmax(0,1fr);gap:var(--space-3);align-items:start}._workerBranch_pb3nh_35:before{top:44px}._assignments_pb3nh_56{padding-left:var(--space-4)}._assignedWorker_pb3nh_43:after{left:0;top:100%;height:var(--space-3);width:0;border-left:1px solid var(--border-strong);border-top:0}._taskList_pb3nh_35:before{left:calc(var(--space-4) * -1)}._connectedTask_pb3nh_60:before{width:var(--space-4)}._workerPaging_pb3nh_14{justify-items:start}}@media(max-width:520px){._header_pb3nh_2{gap:var(--space-3);padding-top:var(--space-4)}._header_pb3nh_2 h2{font-size:var(--text-xl-size);line-height:var(--text-xl-line)}._header_pb3nh_2 p{font-size:var(--text-sm-size)}._sample_pb3nh_5{max-width:100%;overflow-wrap:anywhere;flex-shrink:1}._capacityTrunk_pb3nh_21{grid-template-columns:minmax(0,1fr);gap:var(--space-4)}._capacityNode_pb3nh_23{margin-right:var(--space-5)}._capacityNode_pb3nh_23:after{left:var(--space-4);top:100%;height:var(--space-4);width:2px}._workerBranches_pb3nh_35{margin-left:var(--space-4);padding-left:var(--space-4)}._workerBranches_pb3nh_35:before{left:0}._workerBranch_pb3nh_35:before{width:var(--space-4)}._workerNode_pb3nh_40,._taskNode_pb3nh_40{padding:var(--space-3)}._railTasks_pb3nh_35{grid-template-columns:minmax(0,1fr)}._railHeader_pb3nh_4{flex-wrap:wrap}._summary_pb3nh_6{gap:var(--space-2) var(--space-4)}}@media(prefers-reduced-motion:reduce){._fleetMap_pb3nh_1 *,._fleetMap_pb3nh_1 *:before,._fleetMap_pb3nh_1 *:after{animation:none;transition:none;scroll-behavior:auto}}._header_pb3nh_2 h2:focus{outline:2px solid var(--border-focus);outline-offset:4px;border-radius:var(--radius-xs);scroll-margin-top:var(--space-4)}@container (max-width: 780px){._header_pb3nh_2{flex-wrap:wrap;gap:var(--space-3)}._sample_pb3nh_5,._workerPaging_pb3nh_14{justify-items:start}._topology_pb3nh_20{--trunk-width: 150px;--branch-gap: 24px}._laneHeadings_pb3nh_19{display:none}._workerBranch_pb3nh_35{grid-template-columns:minmax(0,1fr);gap:var(--space-3);align-items:start}._workerBranch_pb3nh_35:before{top:44px}._assignments_pb3nh_56{padding-left:var(--space-4)}._assignedWorker_pb3nh_43:after{left:0;top:100%;height:var(--space-3);width:0;border-left:1px solid var(--border-strong);border-top:0}._taskList_pb3nh_35:before{left:calc(var(--space-4) * -1)}._connectedTask_pb3nh_60:before{width:var(--space-4)}._railTasks_pb3nh_35{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (max-width: 520px){._header_pb3nh_2,._toolbar_pb3nh_9,._rail_pb3nh_4,._footer_pb3nh_85,._queueState_pb3nh_72,._summary_pb3nh_6,._selectionPath_pb3nh_71,._evidenceNotice_pb3nh_8,._topology_pb3nh_20{padding-inline:var(--space-4)}._capacityTrunk_pb3nh_21{grid-template-columns:minmax(0,1fr);gap:var(--space-4)}._capacityNode_pb3nh_23{margin-right:var(--space-5);padding:var(--space-4)}._capacityNode_pb3nh_23:after{left:var(--space-4);top:100%;height:var(--space-4);width:2px}._workerBranches_pb3nh_35{margin-left:var(--space-4);padding-left:var(--space-4)}._workerBranches_pb3nh_35:before{left:0}._workerBranch_pb3nh_35:before{width:var(--space-4)}._railTasks_pb3nh_35{grid-template-columns:minmax(0,1fr)}._railHeader_pb3nh_4{flex-wrap:wrap}}._workspace_trmiy_1{display:grid;grid-template-columns:192px minmax(0,1fr) 8px var(--workspace-dock-width, 320px);min-width:0;min-height:600px;height:clamp(600px,calc(100dvh - 180px),1100px);overflow:hidden;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);color:var(--text-primary);font-family:var(--font-ui)}._workspace_trmiy_1>*{min-width:0}._fileBrowse_trmiy_3{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-block:var(--space-4)}._fileBrowse_trmiy_3 label{flex:1 1 180px;font-size:var(--text-xs-size)}._fileBrowse_trmiy_3 input{display:block;width:100%;box-sizing:border-box;min-height:40px;margin-top:var(--space-1);padding:var(--space-2);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--text-primary);background:var(--bg-surface)}._fileHeading_trmiy_6{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);font-size:var(--text-sm-size);overflow-wrap:anywhere}._fileList_trmiy_7{list-style:none;padding:0;max-height:280px;overflow-y:auto}._fileList_trmiy_7 button{display:flex;align-items:baseline;gap:var(--space-2);width:100%;min-height:40px;padding:var(--space-2);border:0;border-bottom:1px solid var(--border-subtle);text-align:left;color:var(--text-primary);background:transparent}._fileList_trmiy_7 button:hover{background:var(--bg-hover)}._fileList_trmiy_7 button>span:nth-child(2){flex:1;min-width:0;overflow-wrap:anywhere}._fileList_trmiy_7 small{flex-shrink:0;color:var(--text-tertiary);font-size:var(--text-xs-size)}._files_trmiy_12 h4,._files_trmiy_12 code{overflow-wrap:anywhere}._filePreview_trmiy_13{font-family:var(--font-mono);font-size:var(--text-xs-size);line-height:1.65;tab-size:2;white-space:pre-wrap;overflow-wrap:anywhere;unicode-bidi:plaintext;max-height:420px;overflow:auto;padding:var(--space-3);border:1px solid var(--border-default);background:var(--bg-surface);border-radius:var(--radius-sm)}._transcript_trmiy_14{margin-block:var(--space-5);padding:var(--space-4);border:1px solid var(--border-default);border-radius:var(--radius-md)}._transcript_trmiy_14 h3,._transcript_trmiy_14 h4{font-size:var(--text-sm-size);margin-block:var(--space-3)}._transcriptActions_trmiy_16{display:flex;flex-wrap:wrap;gap:var(--space-2)}._followUp_trmiy_17{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--space-3);border-left:3px solid var(--accent-600);background:var(--bg-canvas);padding:var(--space-3);margin-bottom:var(--space-3);font-size:var(--text-xs-size);overflow-wrap:anywhere}._followUp_trmiy_17>div{flex:1 1 230px;min-width:0}._followUp_trmiy_17 p{color:var(--text-secondary);margin:var(--space-1) 0;line-height:1.6}._contextHistory_trmiy_20{font-size:var(--text-sm-size)}._contextHistory_trmiy_20 summary{cursor:pointer;padding-block:var(--space-3)}._contextHistory_trmiy_20 ol{padding-left:var(--space-5)}._contextHistory_trmiy_20 li{border-left:1px solid var(--border-default);padding-left:var(--space-3);overflow-wrap:anywhere}._retention_trmiy_24{display:flex;align-items:flex-start;gap:var(--space-2);margin-top:var(--space-3);font-size:var(--text-sm-size);color:var(--text-secondary)}._retention_trmiy_24 input{margin-top:3px;flex:0 0 auto}._workspace_trmiy_1 button,._workspace_trmiy_1 input,._workspace_trmiy_1 select,._workspace_trmiy_1 textarea{font:inherit}._workspace_trmiy_1 button{cursor:pointer}._workspace_trmiy_1 button:disabled,._workspace_trmiy_1 input:disabled,._workspace_trmiy_1 select:disabled,._workspace_trmiy_1 textarea:disabled{cursor:not-allowed;opacity:.65}._workspace_trmiy_1 button:focus-visible,._workspace_trmiy_1 input:focus-visible,._workspace_trmiy_1 select:focus-visible,._workspace_trmiy_1 textarea:focus-visible,._workspace_trmiy_1 summary:focus-visible,._resize_trmiy_29:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}._rail_trmiy_30{display:flex;flex-direction:column;min-width:0;min-height:0;padding:var(--space-5) var(--space-3);background:var(--bg-canvas);border-right:1px solid var(--border-subtle);overflow-y:auto;scrollbar-gutter:stable}._project_trmiy_31{display:flex;gap:var(--space-2);align-items:center}._projectList_trmiy_32{display:flex;flex-direction:column;flex-shrink:0;gap:var(--space-1);max-height:220px;overflow-y:auto;scrollbar-gutter:stable;margin-bottom:var(--space-5);padding-bottom:var(--space-4);border-bottom:1px solid var(--border-subtle)}._projectList_trmiy_32 h3{font-size:var(--text-xs-size);color:var(--text-tertiary);margin:0 0 var(--space-2)}._projectList_trmiy_32 button{display:flex;flex-wrap:wrap;gap:var(--space-1);align-items:center;justify-content:space-between;min-height:40px;text-align:left;padding:var(--space-2);border:0;border-radius:var(--radius-sm);color:var(--text-secondary);background:transparent;overflow-wrap:anywhere}._projectList_trmiy_32 button[aria-current]{color:var(--accent-600);background:var(--bg-selected)}._projectList_trmiy_32 button:hover{background:var(--bg-hover)}._projectList_trmiy_32 small{font-size:var(--text-xs-size);color:var(--text-tertiary)}._project_trmiy_31>div{min-width:0}._projectIcon_trmiy_39{display:grid;place-items:center;width:30px;height:30px;flex-shrink:0;color:var(--accent-600);font-size:var(--text-2xl-size)}._project_trmiy_31 h2{font:var(--font-weight-semibold) var(--text-md-size)/1.3 var(--font-display);overflow-wrap:anywhere;margin:0}._project_trmiy_31 p{color:var(--text-tertiary);font-size:var(--text-xs-size);margin:var(--space-1) 0 0}._projectPath_trmiy_42{color:var(--text-tertiary);overflow-wrap:anywhere;font-size:var(--text-xs-size);line-height:1.5;margin:var(--space-3) 0 var(--space-5)}._newTask_trmiy_43{flex-shrink:0;text-align:left;min-height:44px;padding:var(--space-2) var(--space-3);background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);color:var(--text-primary)}._newTask_trmiy_43:hover,._subtleButton_trmiy_44:not(:disabled):hover{background:var(--bg-hover);border-color:var(--border-strong)}._railHeading_trmiy_45{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);color:var(--text-secondary);margin:var(--space-6) var(--space-2) var(--space-2)}._taskList_trmiy_46{padding:0;margin:0;list-style:none}._taskList_trmiy_46 button{width:100%;min-width:0;min-height:58px;padding:var(--space-2);border:0;border-radius:var(--radius-sm);color:var(--text-secondary);background:transparent;text-align:left;display:flex;flex-direction:column;gap:var(--space-1);align-items:flex-start}._taskList_trmiy_46 button>span:first-child{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-sm-size)}._taskList_trmiy_46 button:hover{background:var(--bg-hover)}._taskList_trmiy_46 button[aria-current]{background:var(--bg-selected);color:var(--accent-600)}._railFoot_trmiy_51{margin-top:auto;padding-top:var(--space-8);color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:1.6}._center_trmiy_52{display:flex;flex-direction:column;min-height:0;min-width:0;overflow:hidden}._heading_trmiy_53{flex-shrink:0;padding:var(--space-5) var(--space-6);border-bottom:1px solid var(--border-subtle);display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3)}._heading_trmiy_53>div{min-width:0;flex:1 1 180px}._heading_trmiy_53 h2{font-family:var(--font-display);font-size:var(--text-lg-size);line-height:1.35;font-weight:var(--font-weight-medium);margin:0;overflow-wrap:anywhere}._heading_trmiy_53 p{font-size:var(--text-xs-size);color:var(--text-tertiary);margin:var(--space-1) 0 0;overflow-wrap:anywhere}._conversation_trmiy_57{flex:1;min-height:100px;overflow-y:auto;padding:var(--space-6);scrollbar-gutter:stable}._conversation_trmiy_57>*{max-width:78ch;margin-inline:auto}._invitation_trmiy_59{max-width:42ch;margin:clamp(24px,6vh,80px) auto}._workMark_trmiy_60{color:var(--accent-500);font-size:var(--text-3xl-size)}._invitation_trmiy_59 h3{font:var(--font-weight-medium) var(--text-2xl-size)/1.3 var(--font-display);margin:var(--space-4) 0 var(--space-3)}._invitation_trmiy_59 p{color:var(--text-secondary);font-size:var(--text-md-size);line-height:1.7}._request_trmiy_63{background:var(--bg-canvas);border-radius:var(--radius-md);padding:var(--space-4);margin-bottom:var(--space-6)}._request_trmiy_63 p{white-space:pre-wrap;overflow-wrap:anywhere;margin:var(--space-2) 0 0;line-height:1.6}._request_trmiy_63 h3,._answer_trmiy_65 h3,._dockContent_trmiy_65 h3{font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);margin:0 0 var(--space-3)}._answer_trmiy_65{max-width:76ch;margin-bottom:var(--space-5)}._responseText_trmiy_67{max-width:78ch;font:var(--text-base-size)/1.75 var(--font-ui);white-space:pre-wrap;overflow-wrap:anywhere;tab-size:4;margin:var(--space-4) 0}._caption_trmiy_68{color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:1.6;margin:var(--space-3) 0;overflow-wrap:anywhere}._notice_trmiy_69{color:var(--text-secondary);background:var(--bg-canvas);border-left:2px solid var(--border-strong);padding:var(--space-2) var(--space-3);font-size:var(--text-sm-size);line-height:1.6;margin-block:0 var(--space-4);overflow-wrap:anywhere}._error_trmiy_70{color:var(--status-danger-fg);font-size:var(--text-sm-size);line-height:1.6;margin:var(--space-3) 0 0;overflow-wrap:anywhere}._subtleButton_trmiy_44{background:var(--bg-surface);color:var(--text-primary);border:1px solid var(--border-default);border-radius:var(--radius-sm);min-height:40px;padding:var(--space-2) var(--space-3)}._composer_trmiy_72{flex-shrink:0;padding:var(--space-4) var(--space-5);border-top:1px solid var(--border-default);background:var(--bg-surface);max-height:56%;overflow-y:auto;scrollbar-gutter:stable}._composer_trmiy_72>label{display:block;font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);color:var(--text-secondary);margin-bottom:var(--space-2)}._composer_trmiy_72 textarea{display:block;width:100%;resize:vertical;min-height:88px;max-height:220px;border:1px solid var(--border-default);border-radius:var(--radius-sm);padding:var(--space-3);color:var(--text-primary);background:var(--bg-canvas);font-size:var(--text-base-size);line-height:1.6}._composer_trmiy_72 textarea::placeholder{color:var(--text-tertiary)}._composeControls_trmiy_76{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:flex-end;margin-top:var(--space-3)}._workerChoice_trmiy_77{flex:1 1 160px;min-width:0;font-size:var(--text-xs-size);color:var(--text-tertiary)}._workerChoice_trmiy_77 select{width:100%;margin-top:var(--space-1);text-overflow:ellipsis}._composer_trmiy_72 select,._composer_trmiy_72 input[type=number]{width:100%;max-width:100%;color:var(--text-primary);background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-sm);min-height:40px;padding:var(--space-1) var(--space-2);min-width:0;font-size:var(--text-sm-size)}._send_trmiy_80{min-height:40px;background:var(--accent-600);color:var(--accent-contrast);border:0;border-radius:var(--radius-md);padding:var(--space-2) var(--space-4);font-weight:var(--font-weight-medium)}._send_trmiy_80:not(:disabled):hover{background:var(--accent-700)}._fileButton_trmiy_82{position:relative;min-height:40px;display:flex;align-items:center;padding:var(--space-2);font-size:var(--text-xs-size);color:var(--text-secondary);border:1px solid var(--border-default);border-radius:var(--radius-sm);cursor:pointer;overflow:hidden}._fileButton_trmiy_82:hover{background:var(--bg-hover)}._fileButton_trmiy_82 input{position:absolute;inset:0;opacity:0;width:100%;cursor:pointer}._fileButton_trmiy_82:focus-within{outline:2px solid var(--border-focus);outline-offset:2px}._options_trmiy_86{font-size:var(--text-xs-size);color:var(--text-secondary);margin-top:var(--space-3)}._options_trmiy_86 summary{cursor:pointer;padding:var(--space-2) 0}._options_trmiy_86>div{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(140px,100%),1fr));gap:var(--space-3) var(--space-2);margin-top:var(--space-2)}._options_trmiy_86 label{display:flex;flex-direction:column;min-width:0;gap:var(--space-1)}._attachments_trmiy_90{list-style:none;padding:0;margin:var(--space-2) 0;display:flex;flex-wrap:wrap;gap:var(--space-2)}._attachments_trmiy_90 li{display:flex;gap:var(--space-1);align-items:center;min-width:0;max-width:100%;background:var(--bg-selected);border-radius:var(--radius-sm);padding:var(--space-1) var(--space-2);font-size:var(--text-xs-size)}._attachments_trmiy_90 li span{overflow-wrap:anywhere}._attachments_trmiy_90 button{flex-shrink:0;background:transparent;color:var(--text-secondary);border:0;border-radius:var(--radius-xs);min-width:32px;min-height:32px}._attachments_trmiy_90 button:not(:disabled):hover{background:var(--bg-active)}._resize_trmiy_29{position:relative;cursor:col-resize;background:var(--bg-canvas);border-inline:1px solid var(--border-subtle);touch-action:none}._resize_trmiy_29:after{content:"";position:absolute;width:2px;height:32px;left:2px;top:calc(50% - 16px);border-radius:var(--radius-full);background:var(--border-strong)}._resize_trmiy_29:hover,._resize_trmiy_29:focus-visible{background:var(--bg-selected)}._resize_trmiy_29:hover:after,._resize_trmiy_29:focus-visible:after{background:var(--border-focus)}._resize_trmiy_29:focus-visible{outline-offset:-2px}._dock_trmiy_65{min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--bg-canvas)}._dockTabs_trmiy_101{flex-shrink:0;display:flex;flex-wrap:wrap;gap:var(--space-1);padding:var(--space-3);border-bottom:1px solid var(--border-default)}._dockTabs_trmiy_101 button{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--text-secondary);min-height:36px;padding:var(--space-2) var(--space-3);font-size:var(--text-sm-size)}._dockTabs_trmiy_101 button[aria-selected=true]{color:var(--text-primary);background:var(--bg-surface);box-shadow:var(--shadow-sm)}._dockContent_trmiy_65{flex:1;overflow-y:auto;padding:var(--space-5);min-height:0;scrollbar-gutter:stable}._facts_trmiy_105{margin:0}._facts_trmiy_105>div{margin:0 0 var(--space-4)}._facts_trmiy_105 dt{color:var(--text-tertiary);font-size:var(--text-xs-size)}._facts_trmiy_105 dd{color:var(--text-primary);font-size:var(--text-sm-size);line-height:1.6;margin:var(--space-1) 0 0;overflow-wrap:anywhere}._capabilities_trmiy_109{flex-shrink:0;border-top:1px solid var(--border-default);padding:var(--space-4);margin:0;color:var(--text-tertiary);font-size:var(--text-xs-size);line-height:1.6;overflow-wrap:anywhere}._mobileNav_trmiy_110{display:none}._engineeringPane_trmiy_111{grid-column:2 / -1;min-width:0;min-height:0;overflow:auto;flex:1}._engineeringLink_trmiy_112{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);width:100%;min-height:40px;margin-top:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);font-size:var(--text-sm-size);text-align:left}._engineeringLink_trmiy_112[aria-pressed=true]{background:var(--bg-selected);border-color:var(--accent-300);color:var(--accent-600)}@media(max-width:1280px){._workspace_trmiy_1{grid-template-columns:176px minmax(0,1fr) 8px var(--workspace-dock-width, 320px)}._heading_trmiy_53,._conversation_trmiy_57{padding:var(--space-4)}._composer_trmiy_72{padding:var(--space-3)}}@media(max-width:1120px){._workspace_trmiy_1{display:flex;flex-direction:column;height:max(620px,calc(100dvh - 180px));min-height:620px}._mobileNav_trmiy_110{flex-shrink:0;display:flex;padding:var(--space-2);gap:var(--space-2);border-bottom:1px solid var(--border-default)}._mobileNav_trmiy_110 button{background:var(--bg-canvas);color:var(--text-secondary);border:0;border-radius:var(--radius-sm);min-height:44px;flex:1}._mobileNav_trmiy_110 button[aria-pressed=true]{background:var(--bg-selected);color:var(--accent-600)}._workspace_trmiy_1 [data-mobile-visible=false],._resize_trmiy_29{display:none}._rail_trmiy_30,._center_trmiy_52,._dock_trmiy_65{flex:1;min-height:0}._rail_trmiy_30{border-right:0}._composer_trmiy_72{max-height:60%}}@media(max-width:440px){._options_trmiy_86>div{grid-template-columns:1fr}._composeControls_trmiy_76{align-items:stretch}._workerChoice_trmiy_77{flex-basis:100%}._send_trmiy_80{flex:1}._heading_trmiy_53{padding:var(--space-4) var(--space-3)}._composer_trmiy_72 textarea,._composer_trmiy_72 select,._composer_trmiy_72 input[type=number]{font-size:16px}}@media(pointer:coarse){._workspace_trmiy_1 button,._fileButton_trmiy_82,._composer_trmiy_72 select,._composer_trmiy_72 input[type=number]{min-height:44px}._attachments_trmiy_90 button{min-width:44px}._options_trmiy_86 summary{padding-block:var(--space-3)}}@media(prefers-reduced-motion:reduce){._workspace_trmiy_1 *,._workspace_trmiy_1 *:before,._workspace_trmiy_1 *:after{scroll-behavior:auto;animation:none;transition:none}}._panel_40a9p_1{margin:var(--space-5) var(--space-6);padding:var(--space-5);border:1px solid var(--border-strong);border-left:3px solid var(--accent-500);background:var(--bg-canvas)}._heading_40a9p_2,._entries_40a9p_2 li>div,._actions_40a9p_2{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3)}._heading_40a9p_2 h3{font-family:var(--font-display);font-size:var(--text-xl-size);letter-spacing:-.02em;margin:0}._panel_40a9p_1 p{max-width:78ch;font-size:var(--text-sm-size);color:var(--text-secondary);line-height:1.6;overflow-wrap:anywhere}._facts_40a9p_5{display:flex;flex-wrap:wrap;gap:var(--space-5);margin-block:var(--space-4)}._facts_40a9p_5 dt{font-size:var(--text-xs-size);color:var(--text-secondary)}._facts_40a9p_5 dd{margin:var(--space-1) 0 0;font-size:var(--text-sm-size);font-variant-numeric:tabular-nums}._entries_40a9p_2{margin:0;padding:0;list-style:none}._entries_40a9p_2 li{padding-block:var(--space-3);border-top:1px solid var(--border-default)}._entries_40a9p_2 strong{font-size:var(--text-sm-size);overflow-wrap:anywhere}._entries_40a9p_2 p{margin:var(--space-2) 0 0}._scope_40a9p_12{border-top:1px solid var(--border-default);padding-top:var(--space-3)}._recovery_40a9p_13{min-width:0;margin-top:var(--space-4);padding-top:var(--space-4);border-top:1px solid var(--border-default)}._recovery_40a9p_13 h4{margin:0;font-family:var(--font-display);font-size:var(--text-base-size);overflow-wrap:anywhere}._recovery_40a9p_13 ._heading_40a9p_2{justify-content:flex-start}._recovery_40a9p_13 dd{overflow-wrap:anywhere}._recoveryDetails_40a9p_17 summary{padding-block:var(--space-3);font-size:var(--text-sm-size);cursor:pointer;overflow-wrap:anywhere}._recoveryDetails_40a9p_17 summary:focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}._actions_40a9p_2{justify-content:flex-end}._admission_40a9p_20{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--space-4);border-top:1px solid var(--border-default);padding-block:var(--space-4)}._admission_40a9p_20>div{flex:1 1 260px;min-width:0}._admission_40a9p_20 h4{font-size:var(--text-sm-size);margin:0;overflow-wrap:anywhere}._actions_40a9p_2 button,._admission_40a9p_20 button{min-height:40px;padding:var(--space-2) var(--space-4);border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-surface);font-size:var(--text-sm-size)}._admission_40a9p_20 button{color:var(--accent-contrast);background:var(--accent-600);border-color:var(--accent-600)}._actions_40a9p_2 button:disabled,._admission_40a9p_20 button:disabled{opacity:.5;cursor:not-allowed}._actions_40a9p_2 button:focus-visible,._admission_40a9p_20 button:focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}@media(max-width:720px){._panel_40a9p_1{margin-inline:var(--space-4);padding:var(--space-4)}._actions_40a9p_2 button{flex:1}}@media(pointer:coarse){._actions_40a9p_2 button{min-height:44px}}._panel_ky5r8_1{margin:var(--space-5) var(--space-6);border:1px solid var(--border-strong);background:var(--bg-canvas);padding:var(--space-5);min-width:0}._heading_ky5r8_2{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:var(--space-3)}._heading_ky5r8_2 h3{margin:0;font-family:var(--font-display);font-size:var(--text-xl-size);letter-spacing:-.02em}._heading_ky5r8_2 p,._scope_ky5r8_4,._empty_ky5r8_4,._explanation_ky5r8_4,._reason_ky5r8_4,._warning_ky5r8_4{max-width:78ch;font-size:var(--text-sm-size);line-height:1.6;color:var(--text-secondary);overflow-wrap:anywhere}._heading_ky5r8_2 p{margin:var(--space-2) 0 0}._facts_ky5r8_6{display:flex;flex-wrap:wrap;gap:var(--space-4) var(--space-6);margin-block:var(--space-5)}._facts_ky5r8_6 dt,._label_ky5r8_7,._availability_ky5r8_7{font-size:var(--text-xs-size);color:var(--text-secondary)}._facts_ky5r8_6 dd{margin:var(--space-1) 0 0;font-size:var(--text-sm-size);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}._lineage_ky5r8_9{list-style:none;padding:0;margin:0}._lineage_ky5r8_9>li{border-top:1px solid var(--border-default);padding-block:var(--space-5)}._relationship_ky5r8_11{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) minmax(0,1fr);gap:var(--space-4);align-items:start}._enrollment_ky5r8_12,._phase_ky5r8_12{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-2);min-width:0}._enrollment_ky5r8_12 code,._phase_ky5r8_12 code{max-width:100%;overflow-wrap:anywhere;font-size:var(--text-xs-size);line-height:1.6}._enrollment_ky5r8_12 code{font-size:var(--text-sm-size);color:var(--text-primary)}._phase_ky5r8_12{position:relative;padding-top:var(--space-5)}._connector_ky5r8_16{position:absolute;top:var(--space-2);inset-inline:0;border-top:1px solid var(--border-strong)}._connector_ky5r8_16:after{content:"";position:absolute;right:0;top:-4px;width:6px;height:6px;border-right:1px solid var(--border-strong);border-top:1px solid var(--border-strong);transform:rotate(45deg)}._inspect_ky5r8_18{min-height:40px;padding:var(--space-2) var(--space-3);border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-surface);color:var(--text-primary);font-size:var(--text-sm-size)}._inspect_ky5r8_18:hover:enabled{background:var(--bg-hover)}._inspect_ky5r8_18:focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}._inspect_ky5r8_18:disabled{opacity:.5;cursor:not-allowed}._explanation_ky5r8_4,._reason_ky5r8_4{margin:var(--space-3) 0 0}._reason_ky5r8_4,._warning_ky5r8_4{color:var(--status-warning-fg)}._warning_ky5r8_4{background:var(--status-warning-bg);padding:var(--space-3)}._scope_ky5r8_4{border-top:1px solid var(--border-default);margin:var(--space-3) 0 0;padding-top:var(--space-3)}._empty_ky5r8_4{padding-block:var(--space-3)}@media(max-width:720px){._panel_ky5r8_1{margin-inline:var(--space-4);padding:var(--space-4)}._relationship_ky5r8_11{grid-template-columns:minmax(0,1fr);gap:var(--space-3);border-left:1px solid var(--border-strong);padding-left:var(--space-4)}._phase_ky5r8_12{padding-block:var(--space-2)}._connector_ky5r8_16{display:none}._facts_ky5r8_6{gap:var(--space-3)}}@media(pointer:coarse){._inspect_ky5r8_18{min-height:44px}}@media(prefers-reduced-motion:reduce){._panel_ky5r8_1 *,._panel_ky5r8_1 *:before,._panel_ky5r8_1 *:after{animation:none;transition:none;scroll-behavior:auto}}._composer_jwxxg_1{margin:var(--space-5) var(--space-6);border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-surface);min-width:0}._header_jwxxg_2{padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--border-default)}._header_jwxxg_2 h3,._summary_jwxxg_3 h4{font-family:var(--font-display);font-size:var(--text-lg-size);margin:0 0 var(--space-2)}._header_jwxxg_2 p,._note_jwxxg_4,._summary_jwxxg_3 p,._feedback_jwxxg_4{color:var(--text-secondary);font-size:var(--text-sm-size);line-height:1.6;max-width:78ch;margin:0}._columns_jwxxg_5{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr)}._form_jwxxg_6{display:grid;gap:var(--space-4);padding:var(--space-5);min-width:0}._field_jwxxg_7{display:grid;gap:var(--space-2);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);min-width:0}._field_jwxxg_7 :is(input,textarea,select){min-width:0;width:100%;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);padding:var(--space-2) var(--space-3);font:inherit;font-weight:var(--font-weight-normal);min-height:40px}._field_jwxxg_7 textarea{min-height:132px;resize:vertical;line-height:1.6}._summary_jwxxg_3{padding:var(--space-5);border-left:1px solid var(--border-default);background:var(--bg-canvas);min-width:0}._facts_jwxxg_11{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3);margin:var(--space-4) 0}._facts_jwxxg_11 dt{color:var(--text-secondary);font-size:var(--text-xs-size)}._facts_jwxxg_11 dd{margin:var(--space-1) 0 0;font-size:var(--text-sm-size);overflow-wrap:anywhere}._summary_jwxxg_3 ul{padding-left:var(--space-4);margin:var(--space-2) 0 var(--space-4);list-style:disc;font-size:var(--text-sm-size);line-height:1.6;overflow-wrap:anywhere}._summary_jwxxg_3 h5{margin:var(--space-4) 0 var(--space-2);font-size:var(--text-sm-size)}._review_jwxxg_16{margin:0 var(--space-5) var(--space-4);padding:var(--space-4);background:var(--bg-canvas);border-left:3px solid var(--accent-500);min-width:0}._review_jwxxg_16 h4{margin:0 0 var(--space-2);font-family:var(--font-display);font-size:var(--text-md-size)}._review_jwxxg_16 p{font-size:var(--text-sm-size);line-height:1.6;margin:var(--space-2) 0;overflow-wrap:anywhere}._review_jwxxg_16 code{overflow-wrap:anywhere;font-size:var(--text-xs-size)}._actions_jwxxg_20{display:flex;flex-wrap:wrap;gap:var(--space-3);padding:var(--space-4) var(--space-5);border-top:1px solid var(--border-default)}._button_jwxxg_21,._primary_jwxxg_21{min-height:40px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-4);background:var(--bg-surface);font:inherit;font-size:var(--text-sm-size)}._primary_jwxxg_21{background:var(--accent-600);color:var(--accent-contrast);border-color:var(--accent-600)}._composer_jwxxg_1 :is(button,input,textarea,select):focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}._composer_jwxxg_1 :disabled{opacity:.5;cursor:not-allowed}._feedback_jwxxg_4{margin:var(--space-3) var(--space-5);padding:var(--space-3);overflow-wrap:anywhere}._error_jwxxg_26{color:var(--status-warning-fg);background:var(--status-warning-bg)}@media(max-width:850px){._columns_jwxxg_5{grid-template-columns:1fr}._summary_jwxxg_3{border-left:0;border-top:1px solid var(--border-default)}}@media(max-width:720px){._composer_jwxxg_1{margin:var(--space-4)}._header_jwxxg_2,._form_jwxxg_6,._summary_jwxxg_3,._actions_jwxxg_20{padding:var(--space-4)}._field_jwxxg_7 :is(input,textarea,select){font-size:16px}._facts_jwxxg_11{grid-template-columns:1fr}._review_jwxxg_16{margin-inline:var(--space-4)}}@media(pointer:coarse){._composer_jwxxg_1 :is(button,input,select){min-height:44px}}@media(prefers-reduced-motion:reduce){._composer_jwxxg_1 *,._composer_jwxxg_1 *:before,._composer_jwxxg_1 *:after{animation:none;transition:none;scroll-behavior:auto}}._outcomes_1kjhl_1{min-width:0;max-width:100%;padding:var(--space-5) var(--space-6);border-top:1px solid var(--border-default);color:var(--text-primary);font-family:var(--font-ui)}._header_1kjhl_2{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:var(--space-4)}._header_1kjhl_2 h3{font-family:var(--font-display);font-size:var(--text-md-size);margin:0}._outcomes_1kjhl_1 p{max-width:78ch;font-size:var(--text-sm-size);line-height:1.6;overflow-wrap:anywhere;margin:var(--space-2) 0}._outcomes_1kjhl_1 button{min-height:40px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-surface);padding:var(--space-2) var(--space-4);font-size:var(--text-sm-size)}._outcomes_1kjhl_1 button:enabled:hover{background:var(--bg-hover)}._outcomes_1kjhl_1 button:disabled{opacity:.5;cursor:not-allowed}._outcomes_1kjhl_1 :is(button,summary,[tabindex]):focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}._overview_1kjhl_9,._measurement_1kjhl_9{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:var(--space-5);padding-block:var(--space-4)}._overview_1kjhl_9{background:var(--bg-canvas);padding:var(--space-4);margin-block:var(--space-4)}._campaign_1kjhl_11{min-width:0;padding-block:var(--space-5);border-top:1px solid var(--border-default)}._campaign_1kjhl_11 h4{font-family:var(--font-display);margin:0 0 var(--space-2);font-size:var(--text-base-size);overflow-wrap:anywhere}._campaign_1kjhl_11 h5{font-size:var(--text-sm-size);margin:0}._tableScroll_1kjhl_14{width:100%;max-width:100%;overflow-x:auto;margin-block:var(--space-3)}._tableScroll_1kjhl_14 table{min-width:580px;width:100%;border-collapse:collapse;text-align:left;font-size:var(--text-xs-size);font-variant-numeric:tabular-nums}._tableScroll_1kjhl_14 caption{text-align:left;color:var(--text-secondary);margin-bottom:var(--space-2)}._tableScroll_1kjhl_14 :is(th,td){text-align:left;vertical-align:top;padding:var(--space-3);border-bottom:1px solid var(--border-default);overflow-wrap:anywhere;max-width:300px}._tableScroll_1kjhl_14 thead{background:var(--bg-canvas)}._tableScroll_1kjhl_14 th{font-weight:500}._usage_1kjhl_20{display:flex;flex-direction:column;gap:var(--space-1);font-size:var(--text-xs-size);line-height:1.55;overflow-wrap:anywhere}._measurements_1kjhl_21{display:flex;flex-direction:column;gap:var(--space-4)}._usage_1kjhl_20 span,._note_1kjhl_22,._scope_1kjhl_22,._header_1kjhl_2 p{color:var(--text-secondary)}._details_1kjhl_23 summary{font-size:var(--text-sm-size);cursor:pointer;min-height:36px;padding-block:var(--space-2)}._identities_1kjhl_24{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-3);font-size:var(--text-xs-size)}._identities_1kjhl_24 dt{color:var(--text-secondary)}._identities_1kjhl_24 dd{margin:var(--space-1) 0;overflow-wrap:anywhere}._outcomes_1kjhl_1 code{font-size:var(--text-xs-size);overflow-wrap:anywhere}._reasons_1kjhl_28{padding-left:var(--space-4);font-size:var(--text-xs-size);line-height:1.6;overflow-wrap:anywhere}._scope_1kjhl_22{border-top:1px solid var(--border-default);padding-top:var(--space-4)}._warning_1kjhl_30{color:var(--status-warning-fg);background:var(--status-warning-bg);padding:var(--space-3)}._block_1kjhl_31{display:block;font-weight:400;padding-top:var(--space-1)}@media(max-width:720px){._outcomes_1kjhl_1{padding:var(--space-4)}._overview_1kjhl_9,._measurement_1kjhl_9,._identities_1kjhl_24{grid-template-columns:minmax(0,1fr)}._header_1kjhl_2 button{width:100%}}._engineering_8bc3y_1{min-height:100%;font-family:var(--font-ui);background:var(--bg-surface)}._header_8bc3y_2{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:var(--space-4);padding:var(--space-6);border-bottom:1px solid var(--border-default)}._eyebrow_8bc3y_3{margin:0 0 var(--space-2);font-size:var(--text-xs-size);font-weight:600;letter-spacing:.08em;color:var(--text-secondary)}._header_8bc3y_2 h2{font-family:var(--font-display);font-size:clamp(24px,2.6vw,34px);line-height:1.15;letter-spacing:-.035em;margin:0 0 var(--space-2)}._header_8bc3y_2 p:last-child,._objective_8bc3y_5 p,._controls_8bc3y_5 p{margin:0;color:var(--text-secondary);line-height:1.6;font-size:var(--text-sm-size)}._button_8bc3y_6,._primary_8bc3y_6{min-height:40px;padding:var(--space-2) var(--space-4);border-radius:var(--radius-sm);border:1px solid var(--border-strong);font-size:var(--text-sm-size);font-weight:500;background:var(--bg-surface)}._button_8bc3y_6:hover:enabled{background:var(--bg-hover)}._primary_8bc3y_6{background:var(--accent-600);border-color:var(--accent-600);color:var(--accent-contrast)}._primary_8bc3y_6:hover:enabled{background:var(--accent-700)}._engineering_8bc3y_1 button:disabled{opacity:.5;cursor:not-allowed}._engineering_8bc3y_1 :is(button,select,summary):focus-visible{outline:2px solid var(--border-focus);outline-offset:3px}._selection_8bc3y_12{padding:var(--space-4) var(--space-6);display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap}._selection_8bc3y_12 label{display:flex;flex-direction:column;gap:var(--space-2);font-size:var(--text-xs-size);color:var(--text-secondary);min-width:0;flex:1;max-width:400px}._selection_8bc3y_12 select{width:100%;border:1px solid var(--border-strong);background:var(--bg-input);border-radius:var(--radius-sm);min-height:40px;padding:var(--space-2) var(--space-3);color:var(--text-primary);font-size:var(--text-sm-size)}._admission_8bc3y_15{margin:0 var(--space-6) var(--space-5);padding:var(--space-4) var(--space-5);border:1px solid var(--border-strong);border-radius:var(--radius-sm)}._admissionHeading_8bc3y_16{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-3)}._admission_8bc3y_15 h3{font-family:var(--font-display);font-size:var(--text-md-size);margin:0}._admission_8bc3y_15 p,._admissionReasons_8bc3y_18{font-size:var(--text-sm-size);line-height:1.6;max-width:78ch;overflow-wrap:anywhere}._admission_8bc3y_15 p{color:var(--text-secondary);margin:var(--space-3) 0 0}._admissionReasons_8bc3y_18{margin:var(--space-3) 0;padding-left:var(--space-4);list-style:disc}._admissionReasons_8bc3y_18 li+li{margin-top:var(--space-2)}._admission_8bc3y_15 ._sample_8bc3y_22{font-size:var(--text-xs-size)}._mission_8bc3y_23{margin:0 var(--space-6) var(--space-6);padding:var(--space-5);background:var(--bg-canvas);border-left:3px solid var(--accent-500);display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--space-6);align-items:center}._objective_8bc3y_5 h3{font-family:var(--font-display);font-size:var(--text-xl-size);line-height:1.4;letter-spacing:-.02em;margin:var(--space-2) 0;overflow-wrap:anywhere}._metrics_8bc3y_25{display:flex;gap:var(--space-5);margin:0}._metrics_8bc3y_25 dt{font-size:var(--text-xs-size);color:var(--text-secondary)}._metrics_8bc3y_25 dd{font-family:var(--font-display);font-variant-numeric:tabular-nums;font-size:28px;margin:var(--space-2) 0 0;letter-spacing:-.04em}._content_8bc3y_28{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(220px,1fr);border-block:1px solid var(--border-default)}._flow_8bc3y_29{min-width:0;padding:var(--space-5) var(--space-6)}._sectionTitle_8bc3y_30{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-2);justify-content:space-between;margin-bottom:var(--space-5)}._sectionTitle_8bc3y_30 h3,._inspector_8bc3y_31 h3{font-family:var(--font-display);margin:0;font-size:var(--text-md-size)}._sectionTitle_8bc3y_30 span{font-size:var(--text-xs-size);color:var(--text-tertiary)}._campaigns_8bc3y_33{margin:0;padding:0;list-style:none}._campaigns_8bc3y_33>li{display:grid;grid-template-columns:34px minmax(0,1fr);column-gap:var(--space-3);position:relative;padding-bottom:var(--space-5)}._campaigns_8bc3y_33>li:not(:last-child):before{content:"";position:absolute;top:34px;left:16px;bottom:0;border-left:1px solid var(--border-strong)}._number_8bc3y_36{font-variant-numeric:tabular-nums;font-family:var(--font-display);font-size:var(--text-sm-size);background:var(--bg-selected);border:1px solid var(--accent-300);color:var(--accent-600);display:grid;place-items:center;width:34px;height:34px;border-radius:50%}._campaign_8bc3y_33{min-width:0;padding-top:var(--space-1)}._campaign_8bc3y_33 h4{font-size:var(--text-base-size);margin:0 0 var(--space-2);overflow-wrap:anywhere}._campaign_8bc3y_33 p{font-size:var(--text-sm-size);line-height:1.6;margin:0 0 var(--space-3);overflow-wrap:anywhere}._campaign_8bc3y_33 ._dependencies_8bc3y_40{color:var(--text-secondary);font-size:var(--text-xs-size)}._target_8bc3y_41{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-canvas)}._target_8bc3y_41 span{font-size:var(--text-xs-size);color:var(--text-secondary)}._target_8bc3y_41 code{font-size:var(--text-xs-size);overflow-wrap:anywhere}._campaign_8bc3y_33 details{margin-top:var(--space-3)}._engineering_8bc3y_1 summary{font-size:var(--text-xs-size);color:var(--text-secondary);cursor:pointer;min-height:32px;padding-block:var(--space-2)}._limits_8bc3y_46{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3);margin-block:var(--space-2) var(--space-4)}._limits_8bc3y_46 dt,._facts_8bc3y_47 dt{font-size:var(--text-xs-size);color:var(--text-secondary)}._limits_8bc3y_46 dd,._facts_8bc3y_47 dd{margin:var(--space-1) 0 0;font-size:var(--text-sm-size);overflow-wrap:anywhere}._inspector_8bc3y_31{min-width:0;padding:var(--space-5);border-left:1px solid var(--border-default);background:var(--bg-canvas)}._facts_8bc3y_47{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4);margin-block:var(--space-5)}._inspector_8bc3y_31 p{color:var(--text-secondary);font-size:var(--text-xs-size);line-height:1.65}._receipts_8bc3y_52{margin:0;padding:0;list-style:none}._receipts_8bc3y_52 li{padding:var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);margin-bottom:var(--space-3);background:var(--bg-surface)}._receipts_8bc3y_52 strong{display:block;margin-bottom:var(--space-2);font-size:var(--text-sm-size);overflow-wrap:anywhere}._receipts_8bc3y_52 code,._identity_8bc3y_55 code{font-size:var(--text-xs-size);overflow-wrap:anywhere}._reasons_8bc3y_56{margin:var(--space-3) 0;padding-left:var(--space-4);list-style:disc;font-size:var(--text-xs-size);color:var(--text-secondary)}._scope_8bc3y_57{border-top:1px solid var(--border-default);margin-top:var(--space-4);padding-top:var(--space-3)}._controls_8bc3y_5{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4);padding:var(--space-5) var(--space-6)}._controls_8bc3y_5>div:first-child{max-width:54ch}._controls_8bc3y_5 strong{font-size:var(--text-sm-size);display:block;margin-bottom:var(--space-2)}._actions_8bc3y_61{display:flex;flex-shrink:0;gap:var(--space-2);flex-wrap:wrap}._message_8bc3y_62,._warning_8bc3y_62,._error_8bc3y_62{margin:var(--space-3) var(--space-6);padding:var(--space-3);font-size:var(--text-sm-size);line-height:1.6;overflow-wrap:anywhere}._message_8bc3y_62{background:var(--bg-canvas);color:var(--text-secondary)}._warning_8bc3y_62{background:var(--status-warning-bg);color:var(--status-warning-fg)}._error_8bc3y_62{background:var(--status-danger-bg);color:var(--status-danger-fg)}._empty_8bc3y_66{margin:var(--space-6);padding-block:var(--space-6);max-width:62ch;color:var(--text-secondary);line-height:1.7}._empty_8bc3y_66 h3{color:var(--text-primary);font-family:var(--font-display);font-size:var(--text-xl-size)}._orbit_8bc3y_68{display:inline-block;color:var(--accent-600);font-size:48px;line-height:1}@media(max-width:1500px){._mission_8bc3y_23{grid-template-columns:1fr;gap:var(--space-4)}._controls_8bc3y_5{flex-wrap:wrap}}@media(max-width:720px){._content_8bc3y_28{grid-template-columns:1fr}._inspector_8bc3y_31{border-left:0;border-top:1px solid var(--border-default)}._header_8bc3y_2,._selection_8bc3y_12,._flow_8bc3y_29,._controls_8bc3y_5{padding:var(--space-4)}._mission_8bc3y_23,._admission_8bc3y_15{margin-inline:var(--space-4);padding:var(--space-4)}._metrics_8bc3y_25{gap:var(--space-4);flex-wrap:wrap}._actions_8bc3y_61{width:100%}._actions_8bc3y_61 button{flex:1}._selection_8bc3y_12 select{font-size:16px}}@media(pointer:coarse){._engineering_8bc3y_1 :is(button,select,summary){min-height:44px}}@media(prefers-reduced-motion:reduce){._engineering_8bc3y_1 *,._engineering_8bc3y_1 *:before,._engineering_8bc3y_1 *:after{animation:none;transition:none;scroll-behavior:auto}}._bar_l0wsp_1{display:flex;justify-content:space-between;align-items:center;gap:var(--space-5);padding:var(--space-4) max(var(--space-6),calc((100vw - 1440px)/2));border-bottom:1px solid var(--border-default);background:var(--bg-surface)}._identity_l0wsp_2{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2) var(--space-4);min-width:0}._brand_l0wsp_3{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-3);min-width:0}._brand_l0wsp_3 strong{font-family:var(--font-display);font-size:var(--text-xl-size);line-height:var(--text-xl-line);font-weight:var(--font-weight-semibold);letter-spacing:-.035em}._brandMark_l0wsp_5{flex-shrink:0;width:var(--space-8);height:var(--space-8);fill:none;stroke:var(--accent-600);stroke-width:1.8;stroke-linejoin:round;stroke-linecap:round}._workspace_l0wsp_6{padding-left:var(--space-3);border-left:1px solid var(--border-strong);color:var(--text-secondary);font-size:var(--text-sm-size)}._scopeBadge_l0wsp_7{padding:var(--space-1) var(--space-2);background:var(--bg-canvas);color:var(--text-secondary);border:1px solid var(--border-default);border-radius:var(--radius-xs);font-size:var(--text-xs-size)}._store_l0wsp_8{min-width:0;font-size:var(--text-xs-size);color:var(--text-secondary)}._store_l0wsp_8[open]{flex-basis:100%}._store_l0wsp_8 summary{cursor:pointer;padding:var(--space-2) 0;min-height:32px}._store_l0wsp_8 code{display:block;max-width:72ch;padding:var(--space-3);background:var(--bg-surface-raised);border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-size:var(--text-xs-size);color:var(--text-primary);overflow-wrap:anywhere}._actions_l0wsp_12{display:flex;flex-shrink:0;gap:var(--space-2)}._actions_l0wsp_12 button,._notice_l0wsp_13 button{min-height:36px;padding:var(--space-2) var(--space-3);border:1px solid var(--border-default);border-radius:var(--radius-sm);background:var(--bg-surface);font-size:var(--text-sm-size)}._actions_l0wsp_12 button:hover,._notice_l0wsp_13 button:hover{background:var(--bg-hover)}._main_l0wsp_15{max-width:1488px;margin:auto;padding:var(--space-6)}._notice_l0wsp_13{display:grid;justify-items:start;gap:var(--space-3);padding:var(--space-5);background:var(--status-warning-bg);border:1px solid var(--status-warning-solid);border-radius:var(--radius-md)}._checking_l0wsp_17{padding:var(--space-8)}@media(max-width:1000px){._identity_l0wsp_2{gap:var(--space-2) var(--space-3)}._brand_l0wsp_3{flex-basis:100%}}@media(max-width:700px){._bar_l0wsp_1{flex-direction:column;align-items:stretch;padding:var(--space-4);gap:var(--space-3)}._main_l0wsp_15{padding:var(--space-5) var(--space-4)}._actions_l0wsp_12{justify-content:flex-end}}
@@ -1 +0,0 @@
1
- ._region_1818x_1{position:fixed;bottom:var(--space-6);right:var(--space-6);display:flex;flex-direction:column;gap:var(--space-2);z-index:var(--z-toast);max-width:360px}._toast_1818x_12{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);box-shadow:var(--shadow-toast);font-size:var(--text-sm-size);animation:_slide-in_1818x_1 var(--duration-base) var(--ease-decelerate);border:1px solid var(--border-default);background:var(--bg-surface-raised);color:var(--text-primary)}._success_1818x_27{border-color:var(--status-success-solid)}._danger_1818x_30{border-color:var(--status-danger-solid)}._dismiss_1818x_34{color:var(--text-tertiary);border-radius:var(--radius-xs);font-size:var(--text-lg-size);line-height:1;padding:var(--space-1)}._dismiss_1818x_34{transition:color var(--duration-fast) var(--ease-standard),background var(--duration-fast) var(--ease-standard)}._dismiss_1818x_34:hover{color:var(--text-primary);background:var(--bg-hover)}._dismiss_1818x_34:active{background:var(--bg-active)}@keyframes _slide-in_1818x_1{0%{opacity:0;transform:translateY(8px)}}@media(prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._toast_1818x_12{animation:none}}:root[data-motion=reduce] ._toast_1818x_12{animation:none}._wrap_1759l_1{display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-3);max-width:640px;margin:var(--space-8) auto;padding:var(--space-6);border:1px solid var(--status-danger-solid);border-radius:var(--radius-lg);background:var(--status-danger-bg)}._title_1759l_14{font-size:var(--text-md-size);line-height:var(--text-md-line);font-weight:var(--font-weight-semibold);color:var(--status-danger-fg)}._detail_1759l_21{font-size:var(--text-sm-size);line-height:var(--text-sm-line);color:var(--text-secondary)}._retry_1759l_27{padding:var(--space-2) var(--space-4);border:1px solid var(--status-danger-solid);border-radius:var(--radius-sm);background:var(--bg-surface);color:var(--status-danger-fg);font-size:var(--text-sm-size);font-weight:var(--font-weight-medium);cursor:pointer}._retry_1759l_27:hover{background:var(--bg-hover)}
@@ -1,2 +0,0 @@
1
- import{r as t,j as s}from"./index-BkUlX2Se.js";const x="_region_1818x_1",w="_toast_1818x_12",v="_success_1818x_27",y="_danger_1818x_30",g="_dismiss_1818x_34",a={region:x,toast:w,"slide-in":"_slide-in_1818x_1",success:v,danger:y,dismiss:g},_=t.createContext(null);function k(){const o=t.useContext(_);if(!o)throw new Error("useToast() called outside <ToastProvider>");return o}const j=5e3;function N({children:o}){const[r,n]=t.useState([]),h=t.useRef(0),c=t.useCallback(e=>{n(d=>d.filter(i=>i.id!==e))},[]),u=t.useCallback((e,d="neutral")=>{const i=h.current++;n(p=>[...p,{id:i,message:e,tone:d}]),setTimeout(()=>c(i),j)},[c]),m=t.useMemo(()=>({show:u}),[u]);return s.jsxs(_.Provider,{value:m,children:[o,s.jsx("div",{className:a.region,role:"status","aria-live":"polite",children:r.map(e=>s.jsxs("div",{className:`${a.toast} ${a[e.tone]}`,children:[s.jsx("span",{children:e.message}),s.jsx("button",{type:"button",className:a.dismiss,onClick:()=>c(e.id),"aria-label":"Dismiss",children:"×"})]},e.id))})]})}const f="_wrap_1759l_1",T="_title_1759l_14",C="_detail_1759l_21",S="_retry_1759l_27",l={wrap:f,title:T,detail:C,retry:S};class D extends t.Component{state={error:null};static getDerivedStateFromError(r){return{error:r}}componentDidCatch(r,n){console.error("[ashlr] view crashed while rendering",r,n.componentStack)}componentDidUpdate(r){this.state.error&&r.resetKey!==this.props.resetKey&&this.setState({error:null})}render(){return this.state.error?s.jsxs("div",{className:l.wrap,role:"alert",children:[s.jsx("p",{className:l.title,children:"This view hit an error and couldn't render."}),s.jsxs("p",{className:l.detail,children:[this.state.error.message||"Unknown error."," — the rest of ashlr is still working; pick another view from the sidebar, or retry this one."]}),s.jsx("button",{type:"button",className:l.retry,onClick:()=>this.setState({error:null}),children:"Retry this view"})]}):this.props.children}}export{D as R,N as T,k as u};
2
- //# sourceMappingURL=RouteErrorBoundary-CroxuKoi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RouteErrorBoundary-CroxuKoi.js","sources":["../../../../../../src/web-ui/components/primitives/Toast.tsx","../../../../../../src/web-ui/components/primitives/RouteErrorBoundary.tsx"],"sourcesContent":["/**\n * components/primitives/Toast.tsx — app-wide notifications. A single\n * aria-live region so screen readers announce toasts once, not per-toast\n * duplicate regions.\n */\nimport { createContext, useCallback, useContext, useMemo, useRef, useState, type ReactNode } from 'react';\nimport styles from './Toast.module.css';\n\nexport type ToastTone = 'neutral' | 'success' | 'danger';\n\ninterface ToastItem {\n id: number;\n message: string;\n tone: ToastTone;\n}\n\ninterface ToastContextValue {\n show: (message: string, tone?: ToastTone) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error('useToast() called outside <ToastProvider>');\n return ctx;\n}\n\nconst AUTO_DISMISS_MS = 5000;\n\nexport function ToastProvider({ children }: { children: ReactNode }) {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const nextId = useRef(0);\n\n const dismiss = useCallback((id: number) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const show = useCallback(\n (message: string, tone: ToastTone = 'neutral') => {\n const id = nextId.current++;\n setToasts((prev) => [...prev, { id, message, tone }]);\n setTimeout(() => dismiss(id), AUTO_DISMISS_MS);\n },\n [dismiss],\n );\n\n const value = useMemo(() => ({ show }), [show]);\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <div className={styles.region} role=\"status\" aria-live=\"polite\">\n {toasts.map((t) => (\n <div key={t.id} className={`${styles.toast} ${styles[t.tone]}`}>\n <span>{t.message}</span>\n <button type=\"button\" className={styles.dismiss} onClick={() => dismiss(t.id)} aria-label=\"Dismiss\">\n ×\n </button>\n </div>\n ))}\n </div>\n </ToastContext.Provider>\n );\n}\n","/**\n * components/primitives/RouteErrorBoundary.tsx — the last line of defense\n * against a view crashing on real-world data that doesn't match its\n * expected shape (see SwarmsView.tsx's `plan?.tasks` guard for a concrete\n * example: 2 of 80 real swarm records on this machine predate the `plan`\n * field entirely).\n *\n * React error boundaries can only be class components — there is no hook\n * equivalent. Wraps `<Outlet/>` in Shell.tsx, not the whole app: if one\n * routed view throws during render, the sidebar/topbar/command palette\n * survive and the operator can navigate to a working view instead of being\n * stuck on a permanently blank screen (DESIGN.md §11 point 4 — \"never a\n * full-page error, the shell stays usable\" — extended here to cover\n * uncaught render exceptions, not just query-status `'error'`).\n */\nimport { Component, type ErrorInfo, type ReactNode } from 'react';\nimport styles from './RouteErrorBoundary.module.css';\n\ninterface Props {\n children: ReactNode;\n /** Identity that, when changed, resets the boundary — pass the route pathname. */\n resetKey: string;\n}\n\ninterface State {\n error: Error | null;\n}\n\nexport class RouteErrorBoundary extends Component<Props, State> {\n override state: State = { error: null };\n\n static getDerivedStateFromError(error: Error): State {\n return { error };\n }\n\n override componentDidCatch(error: Error, info: ErrorInfo) {\n console.error('[ashlr] view crashed while rendering', error, info.componentStack);\n }\n\n override componentDidUpdate(prevProps: Props) {\n if (this.state.error && prevProps.resetKey !== this.props.resetKey) {\n this.setState({ error: null });\n }\n }\n\n override render() {\n if (this.state.error) {\n return (\n <div className={styles.wrap} role=\"alert\">\n <p className={styles.title}>This view hit an error and couldn&apos;t render.</p>\n <p className={styles.detail}>\n {this.state.error.message || 'Unknown error.'} — the rest of ashlr is still working; pick another view\n from the sidebar, or retry this one.\n </p>\n <button type=\"button\" className={styles.retry} onClick={() => this.setState({ error: null })}>\n Retry this view\n </button>\n </div>\n );\n }\n return this.props.children;\n }\n}\n"],"names":["ToastContext","createContext","useToast","ctx","useContext","AUTO_DISMISS_MS","ToastProvider","children","toasts","setToasts","useState","nextId","useRef","dismiss","useCallback","id","prev","t","show","message","tone","value","useMemo","jsxs","jsx","styles","RouteErrorBoundary","Component","error","info","prevProps"],"mappings":"+OAoBMA,EAAeC,EAAAA,cAAwC,IAAI,EAE1D,SAASC,GAA8B,CAC5C,MAAMC,EAAMC,EAAAA,WAAWJ,CAAY,EACnC,GAAI,CAACG,EAAK,MAAM,IAAI,MAAM,2CAA2C,EACrE,OAAOA,CACT,CAEA,MAAME,EAAkB,IAEjB,SAASC,EAAc,CAAE,SAAAC,GAAqC,CACnE,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAsB,CAAA,CAAE,EAC9CC,EAASC,EAAAA,OAAO,CAAC,EAEjBC,EAAUC,cAAaC,GAAe,CAC1CN,EAAWO,GAASA,EAAK,OAAQC,GAAMA,EAAE,KAAOF,CAAE,CAAC,CACrD,EAAG,CAAA,CAAE,EAECG,EAAOJ,EAAAA,YACX,CAACK,EAAiBC,EAAkB,YAAc,CAChD,MAAML,EAAKJ,EAAO,UAClBF,EAAWO,GAAS,CAAC,GAAGA,EAAM,CAAE,GAAAD,EAAI,QAAAI,EAAS,KAAAC,CAAA,CAAM,CAAC,EACpD,WAAW,IAAMP,EAAQE,CAAE,EAAGV,CAAe,CAC/C,EACA,CAACQ,CAAO,CAAA,EAGJQ,EAAQC,EAAAA,QAAQ,KAAO,CAAE,KAAAJ,IAAS,CAACA,CAAI,CAAC,EAE9C,OACEK,EAAAA,KAACvB,EAAa,SAAb,CAAsB,MAAAqB,EACpB,SAAA,CAAAd,EACDiB,EAAAA,IAAC,MAAA,CAAI,UAAWC,EAAO,OAAQ,KAAK,SAAS,YAAU,SACpD,SAAAjB,EAAO,IAAKS,GACXM,EAAAA,KAAC,MAAA,CAAe,UAAW,GAAGE,EAAO,KAAK,IAAIA,EAAOR,EAAE,IAAI,CAAC,GAC1D,SAAA,CAAAO,EAAAA,IAAC,OAAA,CAAM,WAAE,OAAA,CAAQ,EACjBA,EAAAA,IAAC,SAAA,CAAO,KAAK,SAAS,UAAWC,EAAO,QAAS,QAAS,IAAMZ,EAAQI,EAAE,EAAE,EAAG,aAAW,UAAU,SAAA,GAAA,CAEpG,CAAA,GAJQA,EAAE,EAKZ,CACD,CAAA,CACH,CAAA,EACF,CAEJ,0HCpCO,MAAMS,UAA2BC,EAAAA,SAAwB,CACrD,MAAe,CAAE,MAAO,IAAA,EAEjC,OAAO,yBAAyBC,EAAqB,CACnD,MAAO,CAAE,MAAAA,CAAA,CACX,CAES,kBAAkBA,EAAcC,EAAiB,CACxD,QAAQ,MAAM,uCAAwCD,EAAOC,EAAK,cAAc,CAClF,CAES,mBAAmBC,EAAkB,CACxC,KAAK,MAAM,OAASA,EAAU,WAAa,KAAK,MAAM,UACxD,KAAK,SAAS,CAAE,MAAO,IAAA,CAAM,CAEjC,CAES,QAAS,CAChB,OAAI,KAAK,MAAM,aAEV,MAAA,CAAI,UAAWL,EAAO,KAAM,KAAK,QAChC,SAAA,CAAAD,EAAAA,IAAC,IAAA,CAAE,UAAWC,EAAO,MAAO,SAAA,8CAAgD,EAC5EF,EAAAA,KAAC,IAAA,CAAE,UAAWE,EAAO,OAClB,SAAA,CAAA,KAAK,MAAM,MAAM,SAAW,iBAAiB,+FAAA,EAEhD,QACC,SAAA,CAAO,KAAK,SAAS,UAAWA,EAAO,MAAO,QAAS,IAAM,KAAK,SAAS,CAAE,MAAO,IAAA,CAAM,EAAG,SAAA,iBAAA,CAE9F,CAAA,EACF,EAGG,KAAK,MAAM,QACpB,CACF"}
@@ -1 +0,0 @@
1
- ._field_ki2n9_1{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}._label_ki2n9_8{font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary);font-weight:var(--font-weight-medium)}._shell_ki2n9_15{display:flex;align-items:center;gap:var(--space-1);height:var(--density-row);padding:0 var(--space-2);background:var(--bg-input);border:1px solid var(--border-default);border-radius:var(--radius-sm);transition:border-color var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard)}._sm_ki2n9_29{height:var(--density-row-sm)}._shell_ki2n9_15:hover:not(:has(._input_ki2n9_33:disabled)){border-color:var(--border-strong)}._shell_ki2n9_15:has(._input_ki2n9_33:focus-visible){border-color:var(--border-focus);box-shadow:var(--shadow-focus-ring)}._invalid_ki2n9_50{border-color:var(--status-danger-solid)}._input_ki2n9_33{flex:1;min-width:0;height:100%;border:none;background:none;color:var(--text-primary);font-family:var(--font-ui);font-size:var(--text-sm-size)}._input_ki2n9_33:focus,._input_ki2n9_33:focus-visible{outline:none;box-shadow:none}._input_ki2n9_33::placeholder{color:var(--text-tertiary)}._input_ki2n9_33:disabled{color:var(--text-disabled);cursor:not-allowed}._mono_ki2n9_80{font-family:var(--font-mono);font-size:var(--text-xs-size)}._prefix_ki2n9_85{color:var(--text-tertiary);font-size:var(--text-xs-size);white-space:nowrap}._hint_ki2n9_91{font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-tertiary)}._error_ki2n9_97{font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--status-danger-fg)}._group_15ia8_1{display:inline-flex;align-items:center;gap:2px;padding:2px;background:var(--bg-hover);border:1px solid var(--border-subtle);border-radius:var(--radius-sm)}._block_15ia8_11{display:flex;width:100%}._block_15ia8_11 ._option_15ia8_16{flex:1;justify-content:center}._option_15ia8_16{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);height:calc(var(--density-row) - 6px);padding:0 var(--space-3);border:1px solid transparent;border-radius:calc(var(--radius-sm) - 1px);background:transparent;color:var(--text-secondary);font-family:var(--font-ui);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);white-space:nowrap;cursor:pointer;transition:background-color var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard)}._sm_15ia8_45 ._option_15ia8_16{height:calc(var(--density-row-sm) - 6px);padding:0 var(--space-2);font-size:var(--text-2xs-size)}._option_15ia8_16:hover:not(:disabled):not([aria-checked=true]){color:var(--text-primary)}._option_15ia8_16[aria-checked=true]{background:var(--bg-surface);color:var(--text-primary);border-color:var(--border-default)}._option_15ia8_16:disabled{color:var(--text-disabled);cursor:not-allowed}._glyph_15ia8_72{display:inline-flex;flex:none}._field_228wn_1{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}._label_228wn_8{font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary);font-weight:var(--font-weight-medium)}._row_228wn_15{display:flex;align-items:center;gap:var(--space-3);height:var(--density-row)}._value_228wn_22{flex:none;min-width:4ch;text-align:right;font-family:var(--font-display);font-variant-numeric:tabular-nums;font-size:var(--text-xs-size);color:var(--text-secondary)}._input_228wn_32{appearance:none;-webkit-appearance:none;flex:1;min-width:0;height:16px;background:none;cursor:pointer}._input_228wn_32:focus{outline:none}._input_228wn_32:focus-visible{box-shadow:none}._input_228wn_32::-webkit-slider-runnable-track{height:4px;border-radius:var(--radius-full);background:var(--slider-track-image, linear-gradient(to right, var(--accent-500) var(--slider-fill, 0%), var(--bg-active) var(--slider-fill, 0%)))}._input_228wn_32::-moz-range-track{height:4px;border-radius:var(--radius-full);background:var(--slider-track-image, linear-gradient(to right, var(--accent-500) var(--slider-fill, 0%), var(--bg-active) var(--slider-fill, 0%)))}._input_228wn_32::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:12px;height:12px;margin-top:-4px;border-radius:var(--radius-full);background:var(--bg-surface);border:2px solid var(--accent-500);transition:border-color var(--duration-fast) var(--ease-standard)}._input_228wn_32::-moz-range-thumb{width:12px;height:12px;border-radius:var(--radius-full);background:var(--bg-surface);border:2px solid var(--accent-500)}._input_228wn_32:focus-visible::-webkit-slider-thumb{box-shadow:var(--shadow-focus-ring)}._input_228wn_32:focus-visible::-moz-range-thumb{box-shadow:var(--shadow-focus-ring)}._input_228wn_32:disabled{cursor:not-allowed;opacity:.55}._wrapper_1xq82_1{display:inline-flex;align-items:center;gap:var(--space-2);cursor:pointer}._label_1xq82_8{font-size:var(--text-sm-size);color:var(--text-primary)}._track_1xq82_13{position:relative;flex:none;width:34px;height:18px;padding:0;border:1px solid var(--border-strong);border-radius:var(--radius-full);background:var(--bg-active);cursor:pointer;transition:background-color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard)}._track_1xq82_13:hover:not(:disabled){border-color:var(--text-tertiary)}._track_1xq82_13[aria-checked=true]{background:var(--accent-600);border-color:var(--accent-600)}._track_1xq82_13[aria-checked=true]:hover:not(:disabled){background:var(--accent-700);border-color:var(--accent-700)}._track_1xq82_13:active:not(:disabled) ._knob_1xq82_44{width:14px}._track_1xq82_13[aria-checked=true]:active:not(:disabled) ._knob_1xq82_44{transform:translate(14px)}._track_1xq82_13:disabled{cursor:not-allowed;opacity:.55}._knob_1xq82_44{position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:var(--radius-full);background:var(--bg-surface);transition:transform var(--duration-fast) var(--ease-standard),width var(--duration-fast) var(--ease-standard)}._track_1xq82_13[aria-checked=true] ._knob_1xq82_44{transform:translate(16px);background:var(--accent-contrast)}._section_3qpbp_5{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--bg-canvas)}._strip_3qpbp_13{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex:none;height:var(--strip-height);padding:0 var(--space-5);border-bottom:1px solid var(--border-subtle);background:var(--bg-surface)}._stripTitle_3qpbp_25{font-family:var(--font-display);font-size:var(--text-sm-size);font-weight:var(--font-weight-semibold);letter-spacing:var(--tracking-display)}._scroll_3qpbp_32{flex:1;min-height:0;overflow:auto}._column_3qpbp_38{width:100%;max-width:var(--measure-read);margin:0 auto;padding:var(--space-6) var(--space-5) var(--space-16);display:flex;flex-direction:column;gap:var(--space-8)}._panel_3qpbp_51{display:flex;flex-direction:column}._panelHead_3qpbp_56{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-3);padding-bottom:var(--space-2)}._panelTitle_3qpbp_64{font-family:var(--font-display);font-size:var(--text-2xs-size);line-height:var(--text-2xs-line);letter-spacing:var(--tracking-label);text-transform:uppercase;font-weight:var(--font-weight-medium);color:var(--text-tertiary)}._panelBody_3qpbp_74{border-top:1px solid var(--border-subtle)}._row_3qpbp_81{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:var(--space-4);padding:var(--density-pad) 0;border-bottom:1px solid var(--border-subtle)}._rowStacked_3qpbp_90{grid-template-columns:minmax(0,1fr);align-items:stretch}._rowText_3qpbp_95{min-width:0}._rowLabel_3qpbp_99{display:block;font-size:var(--text-sm-size);line-height:var(--text-sm-line);color:var(--text-primary);font-weight:var(--font-weight-medium)}._rowDescription_3qpbp_107{margin-top:2px;font-size:var(--text-xs-size);line-height:var(--text-xs-line);color:var(--text-secondary)}._rowControl_3qpbp_114{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-2);min-width:0}._rowStacked_3qpbp_90 ._rowControl_3qpbp_114{justify-content:flex-start}@media(max-width:720px){._row_3qpbp_81{grid-template-columns:minmax(0,1fr)}._rowControl_3qpbp_114{justify-content:flex-start}}._swatches_3qpbp_140{display:flex;flex-wrap:wrap;gap:var(--space-2)}._swatch_3qpbp_140{width:22px;height:22px;padding:0;border:1px solid var(--border-default);border-radius:var(--radius-xs);cursor:pointer;transition:transform var(--duration-fast) var(--ease-standard)}._swatch_3qpbp_140:hover{transform:translateY(-1px)}._swatch_3qpbp_140[aria-checked=true]{box-shadow:0 0 0 2px var(--bg-surface),0 0 0 3px var(--text-primary)}._swatchCheck_3qpbp_165{display:flex;align-items:center;justify-content:center;color:#fff;mix-blend-mode:difference}._sliderStack_3qpbp_173{display:flex;flex-direction:column;gap:var(--space-1);width:min(320px,100%)}._contrastWarning_3qpbp_180{display:flex;align-items:flex-start;gap:var(--space-2);margin-top:var(--space-2);padding:var(--space-2) var(--space-3);border:1px solid var(--status-warning-solid);border-radius:var(--radius-xs);background:var(--status-warning-bg);color:var(--status-warning-fg);font-size:var(--text-xs-size);line-height:var(--text-xs-line)}._preview_3qpbp_197{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-4);border:1px solid var(--border-default);border-radius:var(--radius-md);background:var(--bg-surface)}._previewRow_3qpbp_207{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2)}._previewHeading_3qpbp_214{font-family:var(--font-display);font-size:var(--text-md-size);line-height:var(--text-md-line);letter-spacing:var(--tracking-display);font-weight:var(--font-weight-semibold)}._previewBody_3qpbp_222{font-size:var(--text-sm-size);line-height:var(--text-sm-line);color:var(--text-secondary)}._previewNumerals_3qpbp_228{font-family:var(--font-display);font-variant-numeric:tabular-nums;letter-spacing:var(--tracking-display);color:var(--text-primary)}._origin_3qpbp_238{width:min(320px,100%)}._note_3qpbp_242{display:flex;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-canvas);color:var(--text-secondary);font-size:var(--text-xs-size);line-height:var(--text-xs-line)}._noteIcon_3qpbp_258{flex:none;margin-top:1px;color:var(--text-tertiary)}._code_3qpbp_249{font-family:var(--font-mono);font-size:var(--text-2xs-size);padding:1px 4px;border:1px solid var(--border-subtle);border-radius:var(--radius-xs);background:var(--bg-code);color:var(--text-primary);white-space:nowrap}._shortcuts_3qpbp_278{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:0 var(--space-6)}._shortcut_3qpbp_278{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:var(--space-2) 0;border-bottom:1px solid var(--border-subtle);font-size:var(--text-sm-size)}._keys_3qpbp_294{display:inline-flex;align-items:center;gap:2px;flex:none}._key_3qpbp_294{min-width:20px;padding:2px var(--space-1);border:1px solid var(--border-default);border-bottom-width:2px;border-radius:var(--radius-xs);background:var(--bg-surface);color:var(--text-secondary);font-family:var(--font-display);font-size:var(--text-2xs-size);line-height:var(--text-2xs-line);text-align:center}._about_3qpbp_315{display:flex;flex-direction:column;gap:var(--space-2)}._aboutLine_3qpbp_321{display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm-size);color:var(--text-secondary)}._aboutName_3qpbp_329{font-family:var(--font-display);font-size:var(--text-lg-size);line-height:var(--text-lg-line);letter-spacing:var(--tracking-display);font-weight:var(--font-weight-semibold);color:var(--text-primary)}._link_3qpbp_338{display:inline-flex;align-items:center;gap:var(--space-1);color:var(--text-link);text-decoration:none}._link_3qpbp_338:hover{text-decoration:underline}._strip_3qpbp_13{padding-left:max(var(--space-5),calc(var(--app-traffic-light-inset, 0px) - var(--rail-width, 56px)))}
@@ -1,2 +0,0 @@
1
- import{r as v,j as e}from"./index-BkUlX2Se.js";import{H as z,I as L,J as A,K as B,h as W,u as K,c as U,n as G,L as V}from"./global-CNVapoV1.js";import{x as Y,B as f,y as J,z as T,D as Q,E as X,F as Z,G as ee,H as ne,J as te,K as se,L as ae,M as ie}from"./VerseConsoleApp-COa3J2dO.js";import"./index-YNTgDG2b.js";import{u as re}from"./RouteErrorBoundary-CroxuKoi.js";import{M as oe}from"./Meter-D_X7c9U3.js";import{S as q}from"./StatusBadge-BbEdqEGn.js";import{D as le}from"./Dialog-CPmedg4S.js";import"./queries-C9XS4SYq.js";const ce="_field_ki2n9_1",de="_label_ki2n9_8",ue="_shell_ki2n9_15",he="_sm_ki2n9_29",pe="_input_ki2n9_33",me="_invalid_ki2n9_50",be="_mono_ki2n9_80",_e="_prefix_ki2n9_85",fe="_hint_ki2n9_91",xe="_error_ki2n9_97",x={field:ce,label:de,shell:ue,sm:he,input:pe,invalid:me,mono:be,prefix:_e,hint:fe,error:xe};function O({label:n,hint:t,error:s,size:i="md",mono:r=!1,prefix:o,className:d,id:c,...h}){const p=v.useId(),a=c??p,u=`${a}-hint`,m=`${a}-error`,_=[h["aria-describedby"],t?u:null,s?m:null].filter(Boolean).join(" ");return e.jsxs("div",{className:`${x.field} ${d??""}`,children:[n?e.jsx("label",{className:x.label,htmlFor:a,children:n}):null,e.jsxs("div",{className:`${x.shell} ${x[i]} ${s?x.invalid:""}`,children:[o?e.jsx("span",{className:x.prefix,children:o}):null,e.jsx("input",{...h,id:a,className:`${x.input} ${r?x.mono:""}`,"aria-invalid":s?!0:h["aria-invalid"],"aria-describedby":_||void 0})]}),t?e.jsx("p",{id:u,className:x.hint,children:t}):null,s?e.jsx("p",{id:m,className:x.error,role:"alert",children:s}):null]})}const ge="_group_15ia8_1",ve="_block_15ia8_11",je="_option_15ia8_16",we="_sm_15ia8_45",ke="_glyph_15ia8_72",w={group:ge,block:ve,option:je,sm:we,glyph:ke};function S({options:n,value:t,onChange:s,size:i="md",block:r=!1,className:o,...d}){const c=v.useRef(null);function h(p){const a=n.filter(_=>!_.disabled);if(a.length===0)return;const u=a.findIndex(_=>_.value===t),m=a[((u+p)%a.length+a.length)%a.length];s(m.value),requestAnimationFrame(()=>{c.current?.querySelector(`[data-value="${m.value}"]`)?.focus()})}return e.jsx("div",{ref:c,role:"radiogroup",className:`${w.group} ${w[i]} ${r?w.block:""} ${o??""}`,...d,children:n.map(p=>{const a=p.value===t;return e.jsxs("button",{type:"button",role:"radio","aria-checked":a,"aria-label":p.ariaLabel,"data-value":p.value,tabIndex:a?0:-1,disabled:p.disabled,className:w.option,onClick:()=>s(p.value),onKeyDown:u=>{u.key==="ArrowRight"||u.key==="ArrowDown"?(u.preventDefault(),h(1)):(u.key==="ArrowLeft"||u.key==="ArrowUp")&&(u.preventDefault(),h(-1))},children:[p.icon?e.jsx("span",{className:w.glyph,children:p.icon}):null,p.label]},p.value)})})}const ye="_field_228wn_1",Ne="_label_228wn_8",Se="_row_228wn_15",$e="_value_228wn_22",Ie="_input_228wn_32",k={field:ye,label:Ne,row:Se,value:$e,input:Ie};function C({label:n,value:t,min:s=0,max:i=100,valueLabel:r,valueText:o,trackImage:d,className:c,id:h,...p}){const a=v.useId(),u=h??a,m=Math.max(1,i-s),_=Math.round((t-s)/m*100);return e.jsxs("div",{className:`${k.field} ${c??""}`,children:[n?e.jsx("label",{className:k.label,htmlFor:u,children:n}):null,e.jsxs("div",{className:k.row,children:[e.jsx("input",{...p,id:u,type:"range",className:k.input,value:t,min:s,max:i,"aria-valuetext":o,style:{"--slider-fill":`${_}%`,...d?{"--slider-track-image":d}:{}},"data-custom-track":d?"true":void 0}),r!==void 0?e.jsx("span",{className:k.value,children:r}):null]})]})}const Ce="_wrapper_1xq82_1",Te="_label_1xq82_8",qe="_track_1xq82_13",Re="_knob_1xq82_44",$={wrapper:Ce,label:Te,track:qe,knob:Re};function Le({checked:n,onChange:t,label:s,disabled:i=!1,id:r,className:o,...d}){const c=e.jsx("button",{type:"button",id:r,role:"switch","aria-checked":n,disabled:i,className:$.track,onClick:()=>t(!n),...d,children:e.jsx("span",{className:$.knob,"aria-hidden":"true"})});return s?e.jsxs("label",{className:`${$.wrapper} ${o??""}`,children:[c,e.jsx("span",{className:$.label,children:s})]}):e.jsx("span",{className:o,children:c})}const Ae="_section_3qpbp_5",Me="_strip_3qpbp_13",De="_stripTitle_3qpbp_25",He="_scroll_3qpbp_32",Ee="_column_3qpbp_38",Pe="_panel_3qpbp_51",Oe="_panelHead_3qpbp_56",Fe="_panelTitle_3qpbp_64",ze="_panelBody_3qpbp_74",Be="_row_3qpbp_81",We="_rowStacked_3qpbp_90",Ke="_rowText_3qpbp_95",Ue="_rowLabel_3qpbp_99",Ge="_rowDescription_3qpbp_107",Ve="_rowControl_3qpbp_114",Ye="_swatches_3qpbp_140",Je="_swatch_3qpbp_140",Qe="_swatchCheck_3qpbp_165",Xe="_sliderStack_3qpbp_173",Ze="_contrastWarning_3qpbp_180",en="_preview_3qpbp_197",nn="_previewRow_3qpbp_207",tn="_previewHeading_3qpbp_214",sn="_previewBody_3qpbp_222",an="_previewNumerals_3qpbp_228",rn="_origin_3qpbp_238",on="_note_3qpbp_242",ln="_noteIcon_3qpbp_258",cn="_code_3qpbp_249",dn="_shortcuts_3qpbp_278",un="_shortcut_3qpbp_278",hn="_keys_3qpbp_294",pn="_key_3qpbp_294",mn="_about_3qpbp_315",bn="_aboutLine_3qpbp_321",_n="_aboutName_3qpbp_329",fn="_link_3qpbp_338",l={section:Ae,strip:Me,stripTitle:De,scroll:He,column:Ee,panel:Pe,panelHead:Oe,panelTitle:Fe,panelBody:ze,row:Be,rowStacked:We,rowText:Ke,rowLabel:Ue,rowDescription:Ge,rowControl:Ve,swatches:Ye,swatch:Je,swatchCheck:Qe,sliderStack:Xe,contrastWarning:Ze,preview:en,previewRow:nn,previewHeading:tn,previewBody:sn,previewNumerals:an,origin:rn,note:on,noteIcon:ln,code:cn,shortcuts:dn,shortcut:un,keys:hn,key:pn,about:mn,aboutLine:bn,aboutName:_n,link:fn};function N({title:n,action:t,children:s}){return e.jsxs("section",{className:l.panel,children:[e.jsxs("div",{className:l.panelHead,children:[e.jsx("h3",{className:l.panelTitle,children:n}),t]}),e.jsx("div",{className:l.panelBody,children:s})]})}function b({label:n,description:t,htmlFor:s,labelId:i,stacked:r=!1,children:o}){const d=e.jsxs(e.Fragment,{children:[e.jsx("span",{className:l.rowLabel,id:i,children:n}),t?e.jsx("span",{className:l.rowDescription,children:t}):null]});return e.jsxs("div",{className:`${l.row} ${r?l.rowStacked:""}`,children:[e.jsx("div",{className:l.rowText,children:s?e.jsx("label",{htmlFor:s,className:l.rowText,children:d}):d}),e.jsx("div",{className:l.rowControl,children:o})]})}function xn(n,t){return n?`Last completed ${new Date(n).toLocaleDateString()}.`:t?"Skipped. Nothing was missed — it is all reachable from the sections themselves.":"Not seen yet."}function gn(){const{completedAt:n,dismissedAt:t,open:s}=Y();return e.jsx(N,{title:"Onboarding",children:e.jsx(b,{label:"Replay the first-run tour",description:`Your connected seats, whether a local runtime is available, and what each of the three stop controls really halts. ${xn(n,t)}`,children:e.jsx(f,{variant:"subtle",size:"sm",onClick:J,disabled:s,children:s?"Showing":"Replay"})})})}const vn="3.4.0",jn=vn,wn="Ashlr Verse";function kn(){return e.jsx(N,{title:"About",children:e.jsx("div",{className:`${l.row} ${l.rowStacked}`,children:e.jsxs("div",{className:l.about,children:[e.jsx("p",{className:l.aboutName,children:wn}),e.jsxs("p",{className:l.aboutLine,children:[e.jsxs(T,{mono:!0,children:["v",jn]}),e.jsx("span",{children:"ashlr-hub — local-first command center for agentic engineers."})]}),e.jsx("p",{className:l.aboutLine,children:"Every session, token and artifact stays on this machine. The console talks to one local server and no third-party service."}),e.jsx("p",{className:l.aboutLine,children:e.jsxs("a",{className:l.link,href:"https://github.com/ashlrai/ashlr-hub",target:"_blank",rel:"noreferrer noopener",children:["Source and changelog",e.jsx(Q,{size:12})]})})]})})})}const yn=/^#([0-9a-f]{3,8})$/i,Nn=/^(rgba?|hsla?)\(([^)]*)\)$/i;function g(n,t,s){return Math.min(s,Math.max(t,n))}function j(n,t){const s=n.trim();return s.endsWith("%")?Number.parseFloat(s)/100*t:Number.parseFloat(s)}function F(n,t,s){const i=(n%360+360)%360,r=(1-Math.abs(2*s-1))*t,o=r*(1-Math.abs(i/60%2-1)),d=s-r/2;let c;return i<60?c=[r,o,0]:i<120?c=[o,r,0]:i<180?c=[0,r,o]:i<240?c=[0,o,r]:i<300?c=[o,0,r]:c=[r,0,o],{r:Math.round((c[0]+d)*255),g:Math.round((c[1]+d)*255),b:Math.round((c[2]+d)*255)}}function Sn(n){const t=[];let s=0,i="";for(const r of n){if(r==="("?s+=1:r===")"&&(s-=1),r===","&&s===0){t.push(i),i="";continue}i+=r}return t.push(i),t.map(r=>r.trim()).filter(r=>r.length>0)}function M(n){const t=n.trim(),s=/\s(\d*\.?\d+)%$/.exec(t);if(s)return{color:t.slice(0,s.index).trim(),pct:Number.parseFloat(s[1])};const i=/^(\d*\.?\d+)%\s/.exec(t);return i?{color:t.slice(i[0].length).trim(),pct:Number.parseFloat(i[1])}:{color:t,pct:null}}function $n(n){const t=/^color-mix\((.*)\)$/is.exec(n.trim());if(!t)return null;const s=Sn(t[1]);if(s.length!==3||s[0].replace(/\s+/g," ").trim()!=="in srgb")return null;const i=M(s[1]),r=M(s[2]);if(!i||!r)return null;const o=y(i.color),d=y(r.color);if(!o||!d)return null;let c=i.pct,h=r.pct;c===null&&h===null?(c=50,h=50):c===null?c=100-h:h===null&&(h=100-c);const p=c+h;if(p<=0)return null;const a=c/p,u=h/p,m=o.a*a+d.a*u;if(m<=0)return{r:0,g:0,b:0,a:0};const _=R=>g(Math.round((o[R]*o.a*a+d[R]*d.a*u)/m),0,255);return{r:_("r"),g:_("g"),b:_("b"),a:g(m,0,1)}}function y(n){const t=n.trim().toLowerCase();if(t==="transparent")return{r:0,g:0,b:0,a:0};if(t.startsWith("color-mix("))return $n(t);const s=yn.exec(t);if(s){const a=s[1],u=m=>Number.parseInt(m.length===1?m+m:m,16);return a.length===3||a.length===4?{r:u(a[0]),g:u(a[1]),b:u(a[2]),a:a.length===4?u(a[3])/255:1}:a.length===6||a.length===8?{r:u(a.slice(0,2)),g:u(a.slice(2,4)),b:u(a.slice(4,6)),a:a.length===8?u(a.slice(6,8))/255:1}:null}const i=Nn.exec(t);if(!i)return null;const r=i[1],o=i[2].replace(/\//g," ").split(/[\s,]+/).filter(Boolean);if(o.length<3)return null;const d=o.length>=4?g(j(o[3],1),0,1):1;if(r.startsWith("rgb"))return{r:g(Math.round(j(o[0],255)),0,255),g:g(Math.round(j(o[1],255)),0,255),b:g(Math.round(j(o[2],255)),0,255),a:d};const c=Number.parseFloat(o[0]),h=g(j(o[1],1),0,1),p=g(j(o[2],1),0,1);return Number.isFinite(c)?{...F(c,h,p),a:d}:null}function D(n,t){if(n.a>=1)return n;const s=n.a;return{r:Math.round(n.r*s+t.r*(1-s)),g:Math.round(n.g*s+t.g*(1-s)),b:Math.round(n.b*s+t.b*(1-s)),a:1}}function H(n){const t=s=>{const i=s/255;return i<=.03928?i/12.92:((i+.055)/1.055)**2.4};return .2126*t(n.r)+.7152*t(n.g)+.0722*t(n.b)}function E(n,t,s="#ffffff"){const i=y(t),r=y(n),o=y(s);if(!i||!r||!o)return null;const d=D(i,o),c=D(r,d),h=H(c),p=H(d),[a,u]=h>=p?[h,p]:[p,h];return(a+.05)/(u+.05)}function I(n,t,s,i=0){const r=F(n,g(t,0,100)/100,g(s+i,0,100)/100),o=d=>d.toString(16).padStart(2,"0");return`#${o(r.r)}${o(r.g)}${o(r.b)}`}const In="#ffffff",Cn="#121214",Tn=6,P=8,qn=[{value:"system",label:"System",icon:e.jsx(ee,{})},{value:"light",label:"Light",icon:e.jsx(ne,{})},{value:"dark",label:"Dark",icon:e.jsx(te,{})}],Rn=[{value:"comfortable",label:"Comfortable"},{value:"compact",label:"Compact"}],Ln=[{value:"grotesk",label:"Space Grotesk"},{value:"ui",label:"UI sans"},{value:"mono",label:"Mono"}],An=[{value:"sharp",label:"Sharp"},{value:"default",label:"Default"},{value:"soft",label:"Soft"}];function Mn(n,t){return`linear-gradient(to right, ${[0,60,120,180,240,300,360].map(i=>`${I(i,n,t)} ${i/360*100}%`).join(", ")})`}function Dn(n,t,s){const i=I(n,t,s,-P),r=I(n,t,s,Tn+P),o=E(i,In),d=E(r,Cn),c=[];return o!==null&&o<4.5&&c.push("light"),d!==null&&d<4.5&&c.push("dark"),{lightRatio:o,darkRatio:d,failing:c}}function Hn({appearance:n,onChange:t,onReset:s}){const i=v.useId(),r=v.useId(),o=v.useId(),d=v.useId(),c=v.useId(),h=z(n),p=Dn(n.accentH,n.accentS,n.accentL);return e.jsxs(N,{title:"Appearance",action:e.jsx(f,{variant:"ghost",size:"sm",onClick:s,disabled:B(n),title:"Restore the shipped theme, accent, density, font, radius and motion",children:"Reset to defaults"}),children:[e.jsx(b,{label:"Theme",description:"System follows your OS appearance setting.",children:e.jsx(S,{"aria-label":"Theme",options:qn,value:n.theme,onChange:a=>t({theme:a})})}),e.jsx(b,{label:"Accent",labelId:i,description:h?`${h.label} — used for links, focus rings and the one primary action per surface.`:"Custom hue — used for links, focus rings and the one primary action per surface.",children:e.jsx("div",{className:l.swatches,role:"radiogroup","aria-labelledby":i,children:L.map(a=>{const u=h?.id===a.id;return e.jsx("button",{type:"button",role:"radio","aria-checked":u,"aria-label":a.label,tabIndex:u||!h&&a.id===L[0].id?0:-1,className:l.swatch,style:{background:I(a.h,a.s,a.l)},onClick:()=>t({accentH:a.h,accentS:a.s,accentL:a.l}),children:u?e.jsx("span",{className:l.swatchCheck,children:e.jsx(X,{size:12})}):null},a.id)})})}),e.jsx(b,{label:"Accent channels",description:"Hue, saturation and lightness are written straight onto the root element — the whole app follows as you drag.",stacked:!0,children:e.jsxs("div",{className:l.sliderStack,children:[e.jsx(C,{id:r,label:"Hue",min:0,max:359,value:n.accentH,valueLabel:`${n.accentH}°`,valueText:`${n.accentH} degrees`,trackImage:Mn(n.accentS,n.accentL),onChange:a=>t({accentH:Number(a.currentTarget.value)})}),e.jsx(C,{id:o,label:"Saturation",min:0,max:100,value:n.accentS,valueLabel:`${n.accentS}%`,valueText:`${n.accentS} percent`,onChange:a=>t({accentS:Number(a.currentTarget.value)})}),e.jsx(C,{id:d,label:"Lightness",min:A.min,max:A.max,value:n.accentL,valueLabel:`${n.accentL}%`,valueText:`${n.accentL} percent`,onChange:a=>t({accentL:Number(a.currentTarget.value)})}),p.failing.length>0?e.jsxs("p",{className:l.contrastWarning,role:"status",children:[e.jsx(Z,{size:14}),e.jsxs("span",{children:["This accent falls below 4.5:1 as link text in"," ",p.failing.length===2?"both themes":`${p.failing[0]} mode`,". Raise or lower the lightness to keep it readable."]})]}):null]})}),e.jsx(b,{label:"Density",description:"Row height and control padding across every view.",children:e.jsx(S,{"aria-label":"Density",options:Rn,value:n.density,onChange:a=>t({density:a})})}),e.jsx(b,{label:"Display font",description:"Titles, seat names, metrics and numerals. Body copy stays in the UI sans.",children:e.jsx(S,{"aria-label":"Display font",options:Ln,value:n.displayFont,onChange:a=>t({displayFont:a})})}),e.jsx(b,{label:"Corner radius",description:"Sharp reads like a terminal; soft reads like a consumer app.",children:e.jsx(S,{"aria-label":"Corner radius",options:An,value:n.radius,onChange:a=>t({radius:a})})}),e.jsx(b,{label:"Reduce motion",htmlFor:c,description:"Collapses every transition to 1ms. Defaults to your system preference; turning it off here overrides that.",children:e.jsx(Le,{id:c,checked:n.reduceMotion,onChange:a=>t({reduceMotion:a}),"aria-label":"Reduce motion"})}),e.jsx(b,{label:"Preview",description:"Live — these are the real primitives, not a picture of them.",stacked:!0,children:e.jsxs("div",{className:l.preview,children:[e.jsx("p",{className:l.previewHeading,children:"Ashlr Verse"}),e.jsxs("p",{className:l.previewBody,children:["Body copy stays in the UI sans at the reading measure; numerals like"," ",e.jsx("span",{className:l.previewNumerals,children:"18,420 / 66,000"})," use the display face."]}),e.jsxs("div",{className:l.previewRow,children:[e.jsx(f,{variant:"primary",size:"sm",children:"Primary"}),e.jsx(f,{variant:"subtle",size:"sm",children:"Subtle"}),e.jsx(f,{variant:"ghost",size:"sm",children:"Ghost"}),e.jsx(f,{variant:"danger",size:"sm",children:"Destructive"})]}),e.jsxs("div",{className:l.previewRow,children:[e.jsx(q,{status:"running"}),e.jsx(T,{engine:"claude",children:"Claude Max"}),e.jsx(T,{engine:"local",mono:!0,children:"qwen3-coder"})]}),e.jsx(oe,{value:18420,max:66e3,label:"Context"}),e.jsx(O,{"aria-label":"Preview field",placeholder:"A field at the current density",size:"sm"})]})})]})}function En(n){if(n===null)return"locked";const t=Math.max(0,Math.round((n-Date.now())/6e4));return t<=0?"expiring now":`unlocked for ${t} more minute${t===1?"":"s"}`}function Pn(){const n=W(),t=K(),s=re(),[i,r]=v.useState(!1),o=v.useRef(null),d=typeof window>"u"?"":window.location.origin;async function c(){try{await navigator.clipboard.writeText(d),s.show("Server address copied.")}catch{s.show("Could not reach the clipboard — select the field and copy manually.","danger")}}async function h(){r(!1),await G(),s.show("Disconnected. Paste the read token to reconnect.")}return e.jsxs(N,{title:"Connection",children:[e.jsxs(b,{label:"Server",description:"This window talks to one local hub. Nothing leaves your machine.",children:[e.jsx("div",{className:l.origin,children:e.jsx(O,{value:d,readOnly:!0,mono:!0,size:"sm","aria-label":"Server address"})}),e.jsx(f,{variant:"ghost",size:"sm",icon:e.jsx(se,{}),onClick:()=>void c(),children:"Copy"})]}),e.jsx(b,{label:"Read session",description:"A 15-minute signed cookie, renewed silently while this tab stays open.",children:e.jsx(q,{status:n==="authenticated"?"connected":n==="checking"?"checking":"disconnected",tone:n==="authenticated"?"success":n==="checking"?"running":"danger"})}),e.jsxs(b,{label:"Mutation hold",description:"Every action that changes something needs the mutation token. It is held in memory only, never stored, and clears when this tab closes.",children:[e.jsx(q,{status:t.hasHold?En(t.heldUntil):"locked",tone:t.hasHold?"success":"neutral"}),e.jsx(f,{variant:"subtle",size:"sm",icon:e.jsx(ae,{}),onClick:()=>{U(),s.show("Mutation hold cleared.")},disabled:!t.hasHold,children:"Lock now"})]}),e.jsx(b,{label:"Disconnect",description:"Ends the read session in this browser and clears the mutation hold. Chats on the server are untouched.",children:e.jsx(f,{variant:"danger",size:"sm",onClick:()=>r(!0),children:"Disconnect"})}),e.jsx("div",{className:l.row,children:e.jsxs("p",{className:l.note,children:[e.jsx("span",{className:l.noteIcon,children:e.jsx(ie,{size:14})}),e.jsxs("span",{children:[e.jsx("strong",{children:"Where the tokens come from."})," Start the console with"," ",e.jsx("code",{className:l.code,children:"ashlr verse"})," — it prints a read token and a mutation token in that terminal, and opens this page. The desktop app injects both for you. Tokens are never displayed here, and the hub never writes them into a page, a log line or an API response. Lost them? Stop the server and start it again; it mints a fresh pair."]})]})}),e.jsx(le,{open:i,onClose:()=>r(!1),titleId:"verse-settings-disconnect",title:"Disconnect from this server?",description:"You will need the read token again to get back in. Running sessions keep running on the server.",initialFocusRef:o,children:e.jsxs("div",{className:l.previewRow,style:{justifyContent:"flex-end"},children:[e.jsx(f,{ref:o,variant:"subtle",onClick:()=>r(!1),children:"Cancel"}),e.jsx(f,{variant:"danger",onClick:()=>void h(),children:"Disconnect"})]})})]})}function On(){if(typeof navigator>"u")return!0;const n=`${navigator.platform??""} ${navigator.userAgent??""}`;return/mac|iphone|ipad|ipod/i.test(n)}function Fn(n){return[{title:"Navigation",items:[{keys:[n,"1"],action:"Chat"},{keys:[n,"2"],action:"Autonomy"},{keys:[n,"3"],action:"Approvals"},{keys:[n,"4"],action:"Usage"},{keys:[n,"5"],action:"Settings"},{keys:[n,"K"],action:"Quick switcher"},{keys:[n,","],action:"Settings"}]},{title:"Chat",items:[{keys:[n,"N"],action:"New chat"},{keys:["Enter"],action:"Send message"},{keys:["Shift","Enter"],action:"New line"},{keys:["Esc"],action:"Stop dictation / close overlay"}]}]}function zn(){const n=On()?"⌘":"Ctrl";return e.jsx(N,{title:"Keyboard",children:e.jsx("div",{className:l.shortcuts,children:Fn(n).flatMap(t=>t.items.map(s=>e.jsxs("div",{className:l.shortcut,children:[e.jsx("span",{children:s.action}),e.jsx("span",{className:l.keys,children:s.keys.map(i=>e.jsx("kbd",{className:l.key,children:i},i))})]},`${t.title}-${s.action}-${s.keys.join("+")}`)))})})}function Xn(){const{appearance:n,set:t,reset:s}=V();return e.jsxs("div",{className:l.section,children:[e.jsx("header",{className:l.strip,"data-app-region":"drag",children:e.jsx("h2",{className:l.stripTitle,children:"Settings"})}),e.jsx("div",{className:l.scroll,children:e.jsxs("div",{className:l.column,children:[e.jsx(Hn,{appearance:n,onChange:t,onReset:s}),e.jsx(Pn,{}),e.jsx(zn,{}),e.jsx(gn,{}),e.jsx(kn,{})]})})]})}export{Xn as SettingsSection};
2
- //# sourceMappingURL=SettingsSection-p-7FCGfn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SettingsSection-p-7FCGfn.js","sources":["../../../../../../src/web-ui/components/primitives/Input.tsx","../../../../../../src/web-ui/components/primitives/Segmented.tsx","../../../../../../src/web-ui/components/primitives/Slider.tsx","../../../../../../src/web-ui/components/primitives/Switch.tsx","../../../../../../src/web-ui/routes/verse/sections/SettingRow.tsx","../../../../../../src/web-ui/routes/verse/onboarding/OnboardingPanel.tsx","../../../../../../src/web-ui/routes/verse/sections/app-version.ts","../../../../../../src/web-ui/routes/verse/sections/AboutPanel.tsx","../../../../../../src/web-ui/design/contrast.ts","../../../../../../src/web-ui/routes/verse/sections/AppearancePanel.tsx","../../../../../../src/web-ui/routes/verse/sections/ConnectionPanel.tsx","../../../../../../src/web-ui/routes/verse/sections/ShortcutsPanel.tsx","../../../../../../src/web-ui/routes/verse/sections/SettingsSection.tsx"],"sourcesContent":["/**\n * components/primitives/Input.tsx — single-line text/number entry.\n *\n * Nothing here is a default browser control: hairline border, no inner card,\n * accent on focus. The accessible name comes from `label` when the field\n * stands alone, or from the caller's own `aria-label`/`aria-labelledby` when\n * it sits in a two-column settings row whose label lives on the other side.\n * An `error` is announced via role=\"alert\" and wired with aria-describedby —\n * red text alone never carries the message (design doc §6).\n */\nimport { useId, type InputHTMLAttributes, type ReactNode } from 'react';\nimport styles from './Input.module.css';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'className' | 'prefix'> {\n label?: ReactNode;\n /** Quiet helper text under the field. */\n hint?: ReactNode;\n /** Error message; also flips the field into its invalid styling. */\n error?: ReactNode;\n size?: 'sm' | 'md';\n /** Paths, ids, tokens counts — anything that should not be kerned. */\n mono?: boolean;\n /** Non-interactive leading text (e.g. \"$\", \"http://\"). Shadows the rarely\n * used HTML `prefix` attribute on purpose — this is the useful meaning. */\n prefix?: ReactNode;\n className?: string;\n}\n\nexport function Input({\n label,\n hint,\n error,\n size = 'md',\n mono = false,\n prefix,\n className,\n id,\n ...rest\n}: InputProps) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const hintId = `${inputId}-hint`;\n const errorId = `${inputId}-error`;\n const describedBy = [rest['aria-describedby'], hint ? hintId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={`${styles.field} ${className ?? ''}`}>\n {label ? (\n <label className={styles.label} htmlFor={inputId}>\n {label}\n </label>\n ) : null}\n <div className={`${styles.shell} ${styles[size]} ${error ? styles.invalid : ''}`}>\n {prefix ? <span className={styles.prefix}>{prefix}</span> : null}\n <input\n {...rest}\n id={inputId}\n className={`${styles.input} ${mono ? styles.mono : ''}`}\n aria-invalid={error ? true : rest['aria-invalid']}\n aria-describedby={describedBy || undefined}\n />\n </div>\n {hint ? (\n <p id={hintId} className={styles.hint}>\n {hint}\n </p>\n ) : null}\n {error ? (\n <p id={errorId} className={styles.error} role=\"alert\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n","/**\n * components/primitives/Segmented.tsx — pick one of 2-4 options where the\n * choice applies instantly (theme, density, a status filter). It replaces\n * both a <select> (too heavy for three options) and a row of toggle buttons\n * (no single-selection semantics for a screen reader).\n *\n * Implemented as a radiogroup with ROVING TABINDEX: one Tab stop for the\n * group, arrows move between options and select as they go — the WAI-ARIA\n * radio-group pattern. Every option is reachable by keyboard and announced\n * as \"N of M\".\n */\nimport { useRef, type ReactNode } from 'react';\nimport styles from './Segmented.module.css';\n\nexport interface SegmentedOption<T extends string> {\n value: T;\n label: ReactNode;\n /** Leading 16px glyph; the text label always stays visible. */\n icon?: ReactNode;\n /** Spoken name when `label` is a glyph or an abbreviation. */\n ariaLabel?: string;\n disabled?: boolean;\n}\n\nexport interface SegmentedProps<T extends string> {\n options: ReadonlyArray<SegmentedOption<T>>;\n value: T;\n onChange: (next: T) => void;\n /** Accessible name for the group — required when no visible label precedes it. */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n size?: 'sm' | 'md';\n /** Stretch each option to an equal share of the width. */\n block?: boolean;\n className?: string;\n}\n\nexport function Segmented<T extends string>({\n options,\n value,\n onChange,\n size = 'md',\n block = false,\n className,\n ...aria\n}: SegmentedProps<T>) {\n const groupRef = useRef<HTMLDivElement>(null);\n\n function move(delta: number): void {\n const enabled = options.filter((o) => !o.disabled);\n if (enabled.length === 0) return;\n const current = enabled.findIndex((o) => o.value === value);\n const next = enabled[(((current + delta) % enabled.length) + enabled.length) % enabled.length]!;\n onChange(next.value);\n // Keep DOM focus on the newly selected option (roving tabindex).\n requestAnimationFrame(() => {\n groupRef.current?.querySelector<HTMLButtonElement>(`[data-value=\"${next.value}\"]`)?.focus();\n });\n }\n\n return (\n <div\n ref={groupRef}\n role=\"radiogroup\"\n className={`${styles.group} ${styles[size]} ${block ? styles.block : ''} ${className ?? ''}`}\n {...aria}\n >\n {options.map((option) => {\n const selected = option.value === value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n aria-label={option.ariaLabel}\n data-value={option.value}\n tabIndex={selected ? 0 : -1}\n disabled={option.disabled}\n className={styles.option}\n onClick={() => onChange(option.value)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n e.preventDefault();\n move(1);\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n e.preventDefault();\n move(-1);\n }\n }}\n >\n {option.icon ? <span className={styles.glyph}>{option.icon}</span> : null}\n {option.label}\n </button>\n );\n })}\n </div>\n );\n}\n","/**\n * components/primitives/Slider.tsx — a continuous value (accent hue,\n * saturation, a budget). Native <input type=\"range\"> so the platform's\n * keyboard model (arrows, Home/End, PageUp/PageDown) comes for free; the\n * track and thumb are restyled to the token system.\n *\n * `valueLabel` renders the number in the display face next to the control.\n * It is presentational: the control's own accessible value is carried by\n * aria-valuetext when a unit would otherwise be lost (\"245\" -> \"245 degrees\").\n */\nimport { useId, type InputHTMLAttributes, type ReactNode } from 'react';\nimport styles from './Slider.module.css';\n\nexport interface SliderProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'className' | 'value'> {\n label?: ReactNode;\n value: number;\n min?: number;\n max?: number;\n /** Rendered to the right of the track, in the display face. */\n valueLabel?: ReactNode;\n /** Spoken value, when the raw number needs a unit. */\n valueText?: string;\n /** Paint the filled portion of the track (hue sliders want a gradient instead). */\n trackImage?: string;\n className?: string;\n}\n\nexport function Slider({\n label,\n value,\n min = 0,\n max = 100,\n valueLabel,\n valueText,\n trackImage,\n className,\n id,\n ...rest\n}: SliderProps) {\n const generatedId = useId();\n const sliderId = id ?? generatedId;\n const span = Math.max(1, max - min);\n const percent = Math.round(((value - min) / span) * 100);\n\n return (\n <div className={`${styles.field} ${className ?? ''}`}>\n {label ? (\n <label className={styles.label} htmlFor={sliderId}>\n {label}\n </label>\n ) : null}\n <div className={styles.row}>\n <input\n {...rest}\n id={sliderId}\n type=\"range\"\n className={styles.input}\n value={value}\n min={min}\n max={max}\n aria-valuetext={valueText}\n style={\n {\n '--slider-fill': `${percent}%`,\n ...(trackImage ? { '--slider-track-image': trackImage } : {}),\n } as React.CSSProperties\n }\n data-custom-track={trackImage ? 'true' : undefined}\n />\n {valueLabel !== undefined ? <span className={styles.value}>{valueLabel}</span> : null}\n </div>\n </div>\n );\n}\n","/**\n * components/primitives/Switch.tsx — a binary setting that takes effect\n * immediately (no form submit). role=\"switch\" + aria-checked, so a screen\n * reader announces \"on\"/\"off\" rather than \"checkbox, checked\".\n *\n * State is never carried by color alone: the knob's POSITION is the primary\n * signal (design doc §6), the accent fill is reinforcement.\n */\nimport type { ReactNode } from 'react';\nimport styles from './Switch.module.css';\n\nexport interface SwitchProps {\n checked: boolean;\n onChange: (next: boolean) => void;\n /** Visible label; when omitted, pass `aria-label`. */\n label?: ReactNode;\n 'aria-label'?: string;\n 'aria-describedby'?: string;\n disabled?: boolean;\n id?: string;\n className?: string;\n}\n\nexport function Switch({\n checked,\n onChange,\n label,\n disabled = false,\n id,\n className,\n ...aria\n}: SwitchProps) {\n const control = (\n <button\n type=\"button\"\n id={id}\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n className={styles.track}\n onClick={() => onChange(!checked)}\n {...aria}\n >\n <span className={styles.knob} aria-hidden=\"true\" />\n </button>\n );\n\n if (!label) return <span className={className}>{control}</span>;\n\n return (\n <label className={`${styles.wrapper} ${className ?? ''}`}>\n {control}\n <span className={styles.label}>{label}</span>\n </label>\n );\n}\n","/**\n * routes/verse/sections/SettingRow.tsx — the Settings layout primitive:\n * label + description on the left, control on the right, hairline between.\n *\n * The label is a real <label> bound to the control's id when one is given;\n * for composite controls (a radiogroup, a swatch grid) pass `labelId` and\n * point the group's `aria-labelledby` at it instead — a <label> cannot name\n * a group, and an unnamed radiogroup is announced as \"group\".\n */\nimport type { ReactNode } from 'react';\nimport styles from './SettingsSection.module.css';\n\nexport interface PanelProps {\n title: ReactNode;\n /** Right-aligned affordance in the panel header (e.g. \"Reset\"). */\n action?: ReactNode;\n children: ReactNode;\n}\n\nexport function Panel({ title, action, children }: PanelProps) {\n return (\n <section className={styles.panel}>\n <div className={styles.panelHead}>\n <h3 className={styles.panelTitle}>{title}</h3>\n {action}\n </div>\n <div className={styles.panelBody}>{children}</div>\n </section>\n );\n}\n\nexport interface SettingRowProps {\n label: ReactNode;\n description?: ReactNode;\n /** id of the control this row labels (renders a real <label for>). */\n htmlFor?: string;\n /** id to put on the label text, for a control using aria-labelledby. */\n labelId?: string;\n /** Put the control under the text instead of beside it (sliders, previews). */\n stacked?: boolean;\n children: ReactNode;\n}\n\nexport function SettingRow({\n label,\n description,\n htmlFor,\n labelId,\n stacked = false,\n children,\n}: SettingRowProps) {\n const text = (\n <>\n <span className={styles.rowLabel} id={labelId}>\n {label}\n </span>\n {description ? <span className={styles.rowDescription}>{description}</span> : null}\n </>\n );\n\n return (\n <div className={`${styles.row} ${stacked ? styles.rowStacked : ''}`}>\n <div className={styles.rowText}>\n {htmlFor ? (\n <label htmlFor={htmlFor} className={styles.rowText}>\n {text}\n </label>\n ) : (\n text\n )}\n </div>\n <div className={styles.rowControl}>{children}</div>\n </div>\n );\n}\n","/**\n * routes/verse/onboarding/OnboardingPanel.tsx — the Settings row that brings\n * the first-run tour back.\n *\n * It lives here rather than in sections/ so the whole onboarding feature is\n * one folder; SettingsSection.tsx imports it the same way it imports its own\n * panels, and reuses the same Panel/SettingRow primitives so the row keeps\n * the label-left / control-right rhythm of every other setting.\n *\n * The description states what the tour actually covers, and — because this\n * is the only place the stored answer is visible — whether it has been seen.\n */\nimport { Button } from '../../../components/primitives/index.js';\nimport { Panel, SettingRow } from '../sections/SettingRow.js';\nimport { replayOnboarding } from './onboarding-store.js';\nimport { useOnboarding } from './useOnboarding.js';\n\nfunction describe(completedAt: string | null, dismissedAt: string | null): string {\n if (completedAt) return `Last completed ${new Date(completedAt).toLocaleDateString()}.`;\n if (dismissedAt) return 'Skipped. Nothing was missed — it is all reachable from the sections themselves.';\n return 'Not seen yet.';\n}\n\nexport function OnboardingPanel() {\n const { completedAt, dismissedAt, open } = useOnboarding();\n\n return (\n <Panel title=\"Onboarding\">\n <SettingRow\n label=\"Replay the first-run tour\"\n description={`Your connected seats, whether a local runtime is available, and what each of the three stop controls really halts. ${describe(completedAt, dismissedAt)}`}\n >\n <Button variant=\"subtle\" size=\"sm\" onClick={replayOnboarding} disabled={open}>\n {open ? 'Showing' : 'Replay'}\n </Button>\n </SettingRow>\n </Panel>\n );\n}\n","/**\n * routes/verse/sections/app-version.ts — the hub's version, for About.\n *\n * Read straight from package.json (Vite inlines the named export at build\n * time and `resolveJsonModule` types it), because no API route reports it:\n * /api/health answers liveness, /api/snapshot answers fleet state, and\n * neither carries the running hub's version. A hardcoded string here would\n * silently drift from the published package on every release.\n */\nimport { version } from '../../../../../package.json';\n\nexport const APP_VERSION: string = version;\nexport const APP_NAME = 'Ashlr Verse';\n","/**\n * routes/verse/sections/AboutPanel.tsx — what this is and which build it is.\n * The version comes from package.json at build time (./app-version.ts).\n */\nimport { IconExternalLink } from '../../../components/primitives/icons.js';\nimport { Tag } from '../../../components/primitives/index.js';\nimport { APP_NAME, APP_VERSION } from './app-version.js';\nimport { Panel } from './SettingRow.js';\nimport styles from './SettingsSection.module.css';\n\nexport function AboutPanel() {\n return (\n <Panel title=\"About\">\n <div className={`${styles.row} ${styles.rowStacked}`}>\n <div className={styles.about}>\n <p className={styles.aboutName}>{APP_NAME}</p>\n <p className={styles.aboutLine}>\n <Tag mono>v{APP_VERSION}</Tag>\n <span>ashlr-hub — local-first command center for agentic engineers.</span>\n </p>\n <p className={styles.aboutLine}>\n Every session, token and artifact stays on this machine. The console talks to one local server and no\n third-party service.\n </p>\n <p className={styles.aboutLine}>\n <a\n className={styles.link}\n href=\"https://github.com/ashlrai/ashlr-hub\"\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n >\n Source and changelog\n <IconExternalLink size={12} />\n </a>\n </p>\n </div>\n </div>\n </Panel>\n );\n}\n","/**\n * design/contrast.ts — WCAG 2.1 contrast math over CSS color strings.\n *\n * Two callers, one implementation:\n * - routes/verse/sections/AppearancePanel.tsx warns, live, when a\n * hand-dragged accent stops being readable as link/button text in the\n * active theme. The design language allows any hue; it does not allow an\n * unreadable one to ship silently.\n * - design/tokens-contrast.test.ts asserts the whole palette in BOTH\n * themes (design doc §6: >= 4.5:1 body text, >= 3:1 meaningful borders).\n *\n * Deliberately dependency-free and DOM-free: parse -> linearize -> ratio.\n * Supports the subset of CSS color syntax the stylesheets actually use —\n * #rgb / #rrggbb / #rrggbbaa, rgb()/rgba(), hsl()/hsla(), both the legacy\n * comma form and the modern space form, plus `color-mix(in srgb, ...)`.\n * Anything else returns null rather than guessing a color.\n *\n * `color-mix` is in that list because the meaning-carrying marks that the\n * contrast suite has to guard are not all plain tokens: the chart gridline,\n * the empty half of a window meter and the diff row tints are all declared as\n * a mix in a CSS module. Without this the suite could only assert the token a\n * mix is DERIVED from, which is precisely the gap that let a 45%-alpha\n * gridline ship under a comment claiming it cleared 3:1.\n */\n\nexport interface Rgba {\n /** 0-255 */\n r: number;\n /** 0-255 */\n g: number;\n /** 0-255 */\n b: number;\n /** 0-1 */\n a: number;\n}\n\nconst HEX_RE = /^#([0-9a-f]{3,8})$/i;\nconst FN_RE = /^(rgba?|hsla?)\\(([^)]*)\\)$/i;\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, n));\n}\n\n/** \"50%\" -> 0.5, \"0.5\" -> 0.5, \"128\" (of 255) handled by the caller. */\nfunction unitValue(raw: string, scale: number): number {\n const text = raw.trim();\n if (text.endsWith('%')) return (Number.parseFloat(text) / 100) * scale;\n return Number.parseFloat(text);\n}\n\nfunction hslToRgb(h: number, s: number, l: number): { r: number; g: number; b: number } {\n const hue = ((h % 360) + 360) % 360;\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(((hue / 60) % 2) - 1));\n const m = l - c / 2;\n let rgb: [number, number, number];\n if (hue < 60) rgb = [c, x, 0];\n else if (hue < 120) rgb = [x, c, 0];\n else if (hue < 180) rgb = [0, c, x];\n else if (hue < 240) rgb = [0, x, c];\n else if (hue < 300) rgb = [x, 0, c];\n else rgb = [c, 0, x];\n return {\n r: Math.round((rgb[0] + m) * 255),\n g: Math.round((rgb[1] + m) * 255),\n b: Math.round((rgb[2] + m) * 255),\n };\n}\n\n/**\n * Split a function's argument list on top-level commas, so a nested\n * `rgb(...)`/`color-mix(...)` argument survives intact.\n */\nfunction splitTopLevel(text: string): string[] {\n const parts: string[] = [];\n let depth = 0;\n let current = '';\n for (const ch of text) {\n if (ch === '(') depth += 1;\n else if (ch === ')') depth -= 1;\n if (ch === ',' && depth === 0) {\n parts.push(current);\n current = '';\n continue;\n }\n current += ch;\n }\n parts.push(current);\n return parts.map((p) => p.trim()).filter((p) => p.length > 0);\n}\n\n/** `#abc 40%` -> ['#abc', 40]; a missing percentage comes back as null. */\nfunction colorWithPercent(raw: string): { color: string; pct: number | null } | null {\n const text = raw.trim();\n const m = /\\s(\\d*\\.?\\d+)%$/.exec(text);\n if (m) return { color: text.slice(0, m.index).trim(), pct: Number.parseFloat(m[1]!) };\n const lead = /^(\\d*\\.?\\d+)%\\s/.exec(text);\n if (lead) return { color: text.slice(lead[0].length).trim(), pct: Number.parseFloat(lead[1]!) };\n return { color: text, pct: null };\n}\n\n/**\n * `color-mix(in srgb, <color> [p%], <color> [p%])`, per CSS Color 5: the two\n * percentages are normalized to sum to 100, the result's alpha is their\n * alpha-weighted sum, and the channels are mixed PREMULTIPLIED — which is why\n * mixing against `transparent` yields the first color at that alpha rather\n * than a color darkened toward black.\n *\n * Only the `srgb` color space is accepted. Every other space would need its\n * own transfer function, and silently treating `oklab` as srgb would report a\n * contrast ratio the browser does not agree with.\n */\nfunction parseColorMix(text: string): Rgba | null {\n const body = /^color-mix\\((.*)\\)$/is.exec(text.trim());\n if (!body) return null;\n const args = splitTopLevel(body[1]!);\n if (args.length !== 3) return null;\n if (args[0]!.replace(/\\s+/g, ' ').trim() !== 'in srgb') return null;\n\n const first = colorWithPercent(args[1]!);\n const second = colorWithPercent(args[2]!);\n if (!first || !second) return null;\n const c1 = parseColor(first.color);\n const c2 = parseColor(second.color);\n if (!c1 || !c2) return null;\n\n let p1 = first.pct;\n let p2 = second.pct;\n if (p1 === null && p2 === null) {\n p1 = 50;\n p2 = 50;\n } else if (p1 === null) p1 = 100 - p2!;\n else if (p2 === null) p2 = 100 - p1;\n const total = p1 + p2!;\n if (total <= 0) return null;\n const w1 = p1 / total;\n const w2 = p2! / total;\n\n const alpha = c1.a * w1 + c2.a * w2;\n if (alpha <= 0) return { r: 0, g: 0, b: 0, a: 0 };\n const channel = (k: 'r' | 'g' | 'b'): number =>\n clamp(Math.round((c1[k] * c1.a * w1 + c2[k] * c2.a * w2) / alpha), 0, 255);\n return { r: channel('r'), g: channel('g'), b: channel('b'), a: clamp(alpha, 0, 1) };\n}\n\n/** Parse a CSS color string. Returns null for anything unrecognized. */\nexport function parseColor(input: string): Rgba | null {\n const text = input.trim().toLowerCase();\n if (text === 'transparent') return { r: 0, g: 0, b: 0, a: 0 };\n if (text.startsWith('color-mix(')) return parseColorMix(text);\n\n const hex = HEX_RE.exec(text);\n if (hex) {\n const body = hex[1]!;\n const expand = (s: string) => Number.parseInt(s.length === 1 ? s + s : s, 16);\n if (body.length === 3 || body.length === 4) {\n return {\n r: expand(body[0]!),\n g: expand(body[1]!),\n b: expand(body[2]!),\n a: body.length === 4 ? expand(body[3]!) / 255 : 1,\n };\n }\n if (body.length === 6 || body.length === 8) {\n return {\n r: expand(body.slice(0, 2)),\n g: expand(body.slice(2, 4)),\n b: expand(body.slice(4, 6)),\n a: body.length === 8 ? expand(body.slice(6, 8)) / 255 : 1,\n };\n }\n return null;\n }\n\n const fn = FN_RE.exec(text);\n if (!fn) return null;\n const name = fn[1]!;\n // Both syntaxes: `a, b, c, d` and `a b c / d`.\n const parts = fn[2]!\n .replace(/\\//g, ' ')\n .split(/[\\s,]+/)\n .filter(Boolean);\n if (parts.length < 3) return null;\n const alpha = parts.length >= 4 ? clamp(unitValue(parts[3]!, 1), 0, 1) : 1;\n\n if (name.startsWith('rgb')) {\n return {\n r: clamp(Math.round(unitValue(parts[0]!, 255)), 0, 255),\n g: clamp(Math.round(unitValue(parts[1]!, 255)), 0, 255),\n b: clamp(Math.round(unitValue(parts[2]!, 255)), 0, 255),\n a: alpha,\n };\n }\n\n const hue = Number.parseFloat(parts[0]!);\n const sat = clamp(unitValue(parts[1]!, 1), 0, 1);\n const light = clamp(unitValue(parts[2]!, 1), 0, 1);\n if (!Number.isFinite(hue)) return null;\n return { ...hslToRgb(hue, sat, light), a: alpha };\n}\n\n/** Composite a (possibly translucent) color over an opaque backdrop. */\nexport function flatten(color: Rgba, backdrop: Rgba): Rgba {\n if (color.a >= 1) return color;\n const a = color.a;\n return {\n r: Math.round(color.r * a + backdrop.r * (1 - a)),\n g: Math.round(color.g * a + backdrop.g * (1 - a)),\n b: Math.round(color.b * a + backdrop.b * (1 - a)),\n a: 1,\n };\n}\n\n/** WCAG relative luminance of an opaque color. */\nexport function relativeLuminance(color: Rgba): number {\n const channel = (v: number): number => {\n const s = v / 255;\n return s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n };\n return 0.2126 * channel(color.r) + 0.7152 * channel(color.g) + 0.0722 * channel(color.b);\n}\n\n/**\n * WCAG contrast ratio (1-21) between two CSS colors. A translucent color is\n * composited over `backdrop` first (default white) — asking for the contrast\n * of a 14%-alpha status background is otherwise meaningless.\n * Returns null when either color cannot be parsed, so a caller can say\n * \"unknown\" instead of asserting on a guess.\n */\nexport function contrastRatio(foreground: string, background: string, backdrop = '#ffffff'): number | null {\n const bgRaw = parseColor(background);\n const fgRaw = parseColor(foreground);\n const base = parseColor(backdrop);\n if (!bgRaw || !fgRaw || !base) return null;\n const bg = flatten(bgRaw, base);\n const fg = flatten(fgRaw, bg);\n const l1 = relativeLuminance(fg);\n const l2 = relativeLuminance(bg);\n const [hi, lo] = l1 >= l2 ? [l1, l2] : [l2, l1];\n return (hi + 0.05) / (lo + 0.05);\n}\n\n/** Convenience for the appearance panel: does this pair clear body-text contrast? */\nexport function meetsTextContrast(foreground: string, background: string, backdrop?: string): boolean {\n const ratio = contrastRatio(foreground, background, backdrop);\n return ratio !== null && ratio >= 4.5;\n}\n\n/**\n * The accent, resolved to a hex the same way tokens.css derives its ramp\n * (hsl channels + a per-step lightness offset). Used by the appearance panel\n * to preview and contrast-check a hue the operator is dragging, without\n * reading computed styles mid-drag.\n */\nexport function accentHex(h: number, s: number, l: number, lightnessOffset = 0): string {\n const rgb = hslToRgb(h, clamp(s, 0, 100) / 100, clamp(l + lightnessOffset, 0, 100) / 100);\n const hex = (n: number) => n.toString(16).padStart(2, '0');\n return `#${hex(rgb.r)}${hex(rgb.g)}${hex(rgb.b)}`;\n}\n","/**\n * routes/verse/sections/AppearancePanel.tsx — the \"Linux\" part of the design\n * language: theme, accent, density, display face, radius, motion.\n *\n * Every control applies IMMEDIATELY (design doc §3: live preview, no save\n * button) because the whole app is the preview — the panel writes through\n * data/appearance-store.ts, which writes the tokens on <html>. The preview\n * block at the end exists to show type, numerals, a filled action and a\n * meter in one place, so the effect of a change is visible without leaving\n * Settings.\n *\n * The hue slider is free-range, so the panel checks the resulting link color\n * against BOTH themes with design/contrast.ts and warns when a choice drops\n * under 4.5:1 — the operator keeps the hue they asked for, but is never\n * allowed to make it unreadable without being told.\n */\nimport { useId } from 'react';\nimport { Button, Input, Meter, Segmented, Slider, StatusBadge, Switch, Tag } from '../../../components/primitives/index.js';\nimport { IconAlert, IconCheck, IconMonitor, IconMoon, IconSun } from '../../../components/primitives/icons.js';\nimport { accentHex, contrastRatio } from '../../../design/contrast.js';\nimport {\n ACCENT_LIGHTNESS_RANGE,\n ACCENT_PRESETS,\n isDefaultAppearance,\n matchingAccentPreset,\n type Appearance,\n type Density,\n type DisplayFont,\n type RadiusScale,\n type ThemePreference,\n} from '../../../data/appearance-store.js';\nimport { Panel, SettingRow } from './SettingRow.js';\nimport styles from './SettingsSection.module.css';\n\n/**\n * The literal `--bg-surface` of each theme (design/tokens.css). Used only to\n * score a candidate accent; design/tokens-contrast.test.ts asserts these two\n * constants still match the stylesheet, so a future retune cannot leave the\n * warning scoring against a color the app no longer paints.\n */\nexport const LIGHT_SURFACE = '#ffffff';\nexport const DARK_SURFACE = '#121214';\n/** Dark raises accent lightness by --accent-l-shift; --accent-600 sits 8% below/above it. */\nconst DARK_L_SHIFT = 6;\nconst LINK_STEP = 8;\n\nconst THEME_OPTIONS = [\n { value: 'system' as ThemePreference, label: 'System', icon: <IconMonitor /> },\n { value: 'light' as ThemePreference, label: 'Light', icon: <IconSun /> },\n { value: 'dark' as ThemePreference, label: 'Dark', icon: <IconMoon /> },\n];\n\nconst DENSITY_OPTIONS = [\n { value: 'comfortable' as Density, label: 'Comfortable' },\n { value: 'compact' as Density, label: 'Compact' },\n];\n\nconst FONT_OPTIONS = [\n { value: 'grotesk' as DisplayFont, label: 'Space Grotesk' },\n { value: 'ui' as DisplayFont, label: 'UI sans' },\n { value: 'mono' as DisplayFont, label: 'Mono' },\n];\n\nconst RADIUS_OPTIONS = [\n { value: 'sharp' as RadiusScale, label: 'Sharp' },\n { value: 'default' as RadiusScale, label: 'Default' },\n { value: 'soft' as RadiusScale, label: 'Soft' },\n];\n\n/** A 360° sweep at the current saturation/lightness, so the track shows the choice. */\nfunction hueTrack(s: number, l: number): string {\n const stops = [0, 60, 120, 180, 240, 300, 360].map((h) => `${accentHex(h, s, l)} ${(h / 360) * 100}%`);\n return `linear-gradient(to right, ${stops.join(', ')})`;\n}\n\nexport interface AccentReadability {\n lightRatio: number | null;\n darkRatio: number | null;\n /** Themes in which the derived link color drops below 4.5:1. */\n failing: Array<'light' | 'dark'>;\n}\n\n/** Exported for the section's test: the same math the warning renders from. */\nexport function accentReadability(h: number, s: number, l: number): AccentReadability {\n const lightLink = accentHex(h, s, l, -LINK_STEP);\n const darkLink = accentHex(h, s, l, DARK_L_SHIFT + LINK_STEP);\n const lightRatio = contrastRatio(lightLink, LIGHT_SURFACE);\n const darkRatio = contrastRatio(darkLink, DARK_SURFACE);\n const failing: Array<'light' | 'dark'> = [];\n if (lightRatio !== null && lightRatio < 4.5) failing.push('light');\n if (darkRatio !== null && darkRatio < 4.5) failing.push('dark');\n return { lightRatio, darkRatio, failing };\n}\n\nexport interface AppearancePanelProps {\n appearance: Appearance;\n onChange: (patch: Partial<Appearance>) => void;\n onReset: () => void;\n}\n\nexport function AppearancePanel({ appearance, onChange, onReset }: AppearancePanelProps) {\n const accentLabelId = useId();\n const hueId = useId();\n const satId = useId();\n const lightId = useId();\n const motionId = useId();\n\n const preset = matchingAccentPreset(appearance);\n const readability = accentReadability(appearance.accentH, appearance.accentS, appearance.accentL);\n\n return (\n <Panel\n title=\"Appearance\"\n action={\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onReset}\n disabled={isDefaultAppearance(appearance)}\n title=\"Restore the shipped theme, accent, density, font, radius and motion\"\n >\n Reset to defaults\n </Button>\n }\n >\n <SettingRow label=\"Theme\" description=\"System follows your OS appearance setting.\">\n <Segmented\n aria-label=\"Theme\"\n options={THEME_OPTIONS}\n value={appearance.theme}\n onChange={(theme) => onChange({ theme })}\n />\n </SettingRow>\n\n <SettingRow\n label=\"Accent\"\n labelId={accentLabelId}\n description={\n preset\n ? `${preset.label} — used for links, focus rings and the one primary action per surface.`\n : 'Custom hue — used for links, focus rings and the one primary action per surface.'\n }\n >\n <div className={styles.swatches} role=\"radiogroup\" aria-labelledby={accentLabelId}>\n {ACCENT_PRESETS.map((p) => {\n const selected = preset?.id === p.id;\n return (\n <button\n key={p.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n aria-label={p.label}\n tabIndex={selected || (!preset && p.id === ACCENT_PRESETS[0]!.id) ? 0 : -1}\n className={styles.swatch}\n style={{ background: accentHex(p.h, p.s, p.l) }}\n onClick={() => onChange({ accentH: p.h, accentS: p.s, accentL: p.l })}\n >\n {selected ? (\n <span className={styles.swatchCheck}>\n <IconCheck size={12} />\n </span>\n ) : null}\n </button>\n );\n })}\n </div>\n </SettingRow>\n\n <SettingRow\n label=\"Accent channels\"\n description=\"Hue, saturation and lightness are written straight onto the root element — the whole app follows as you drag.\"\n stacked\n >\n <div className={styles.sliderStack}>\n <Slider\n id={hueId}\n label=\"Hue\"\n min={0}\n max={359}\n value={appearance.accentH}\n valueLabel={`${appearance.accentH}°`}\n valueText={`${appearance.accentH} degrees`}\n trackImage={hueTrack(appearance.accentS, appearance.accentL)}\n onChange={(e) => onChange({ accentH: Number(e.currentTarget.value) })}\n />\n <Slider\n id={satId}\n label=\"Saturation\"\n min={0}\n max={100}\n value={appearance.accentS}\n valueLabel={`${appearance.accentS}%`}\n valueText={`${appearance.accentS} percent`}\n onChange={(e) => onChange({ accentS: Number(e.currentTarget.value) })}\n />\n <Slider\n id={lightId}\n label=\"Lightness\"\n min={ACCENT_LIGHTNESS_RANGE.min}\n max={ACCENT_LIGHTNESS_RANGE.max}\n value={appearance.accentL}\n valueLabel={`${appearance.accentL}%`}\n valueText={`${appearance.accentL} percent`}\n onChange={(e) => onChange({ accentL: Number(e.currentTarget.value) })}\n />\n {readability.failing.length > 0 ? (\n <p className={styles.contrastWarning} role=\"status\">\n <IconAlert size={14} />\n <span>\n This accent falls below 4.5:1 as link text in{' '}\n {readability.failing.length === 2 ? 'both themes' : `${readability.failing[0]} mode`}. Raise or lower\n the lightness to keep it readable.\n </span>\n </p>\n ) : null}\n </div>\n </SettingRow>\n\n <SettingRow label=\"Density\" description=\"Row height and control padding across every view.\">\n <Segmented\n aria-label=\"Density\"\n options={DENSITY_OPTIONS}\n value={appearance.density}\n onChange={(density) => onChange({ density })}\n />\n </SettingRow>\n\n <SettingRow label=\"Display font\" description=\"Titles, seat names, metrics and numerals. Body copy stays in the UI sans.\">\n <Segmented\n aria-label=\"Display font\"\n options={FONT_OPTIONS}\n value={appearance.displayFont}\n onChange={(displayFont) => onChange({ displayFont })}\n />\n </SettingRow>\n\n <SettingRow label=\"Corner radius\" description=\"Sharp reads like a terminal; soft reads like a consumer app.\">\n <Segmented\n aria-label=\"Corner radius\"\n options={RADIUS_OPTIONS}\n value={appearance.radius}\n onChange={(radius) => onChange({ radius })}\n />\n </SettingRow>\n\n <SettingRow\n label=\"Reduce motion\"\n htmlFor={motionId}\n description=\"Collapses every transition to 1ms. Defaults to your system preference; turning it off here overrides that.\"\n >\n <Switch\n id={motionId}\n checked={appearance.reduceMotion}\n onChange={(reduceMotion) => onChange({ reduceMotion })}\n aria-label=\"Reduce motion\"\n />\n </SettingRow>\n\n <SettingRow label=\"Preview\" description=\"Live — these are the real primitives, not a picture of them.\" stacked>\n <div className={styles.preview}>\n <p className={styles.previewHeading}>Ashlr Verse</p>\n <p className={styles.previewBody}>\n Body copy stays in the UI sans at the reading measure; numerals like{' '}\n <span className={styles.previewNumerals}>18,420 / 66,000</span> use the display face.\n </p>\n <div className={styles.previewRow}>\n <Button variant=\"primary\" size=\"sm\">\n Primary\n </Button>\n <Button variant=\"subtle\" size=\"sm\">\n Subtle\n </Button>\n <Button variant=\"ghost\" size=\"sm\">\n Ghost\n </Button>\n <Button variant=\"danger\" size=\"sm\">\n Destructive\n </Button>\n </div>\n <div className={styles.previewRow}>\n <StatusBadge status=\"running\" />\n <Tag engine=\"claude\">Claude Max</Tag>\n <Tag engine=\"local\" mono>\n qwen3-coder\n </Tag>\n </div>\n <Meter value={18_420} max={66_000} label=\"Context\" />\n <Input aria-label=\"Preview field\" placeholder=\"A field at the current density\" size=\"sm\" />\n </div>\n </SettingRow>\n </Panel>\n );\n}\n","/**\n * routes/verse/sections/ConnectionPanel.tsx — which server this window is\n * talking to, what authority it currently holds, and how to get the tokens\n * back if it loses them.\n *\n * SECURITY: this panel never renders, copies or logs a token. It shows the\n * STATE of the two authorities (read session, mutation hold) and tells the\n * operator where the real values are printed — the terminal that started the\n * server. The mutation token is memory-only by design (data/auth-store.ts);\n * showing it here would put it on screen, in a screenshot, and in any\n * screen-recording of a demo.\n */\nimport { useRef, useState } from 'react';\nimport { Button, Dialog, Input, StatusBadge } from '../../../components/primitives/index.js';\nimport { IconCopy, IconInfo, IconLock } from '../../../components/primitives/icons.js';\nimport { clearMutationToken, clearReadSession } from '../../../data/auth-store.js';\nimport { useAuthPhase, useMutationHold } from '../../../data/hooks.js';\nimport { useToast } from '../../../components/primitives/Toast.js';\nimport { Panel, SettingRow } from './SettingRow.js';\nimport styles from './SettingsSection.module.css';\n\nfunction formatHoldExpiry(heldUntil: number | null): string {\n if (heldUntil === null) return 'locked';\n const minutes = Math.max(0, Math.round((heldUntil - Date.now()) / 60_000));\n if (minutes <= 0) return 'expiring now';\n return `unlocked for ${minutes} more minute${minutes === 1 ? '' : 's'}`;\n}\n\nexport function ConnectionPanel() {\n const phase = useAuthPhase();\n const hold = useMutationHold();\n const toast = useToast();\n const [confirmOpen, setConfirmOpen] = useState(false);\n const cancelRef = useRef<HTMLButtonElement>(null);\n\n const origin = typeof window === 'undefined' ? '' : window.location.origin;\n\n async function copyOrigin(): Promise<void> {\n try {\n await navigator.clipboard.writeText(origin);\n toast.show('Server address copied.');\n } catch {\n toast.show('Could not reach the clipboard — select the field and copy manually.', 'danger');\n }\n }\n\n async function disconnect(): Promise<void> {\n setConfirmOpen(false);\n await clearReadSession();\n toast.show('Disconnected. Paste the read token to reconnect.');\n }\n\n return (\n <Panel title=\"Connection\">\n <SettingRow label=\"Server\" description=\"This window talks to one local hub. Nothing leaves your machine.\">\n <div className={styles.origin}>\n <Input value={origin} readOnly mono size=\"sm\" aria-label=\"Server address\" />\n </div>\n <Button variant=\"ghost\" size=\"sm\" icon={<IconCopy />} onClick={() => void copyOrigin()}>\n Copy\n </Button>\n </SettingRow>\n\n <SettingRow label=\"Read session\" description=\"A 15-minute signed cookie, renewed silently while this tab stays open.\">\n <StatusBadge\n status={phase === 'authenticated' ? 'connected' : phase === 'checking' ? 'checking' : 'disconnected'}\n tone={phase === 'authenticated' ? 'success' : phase === 'checking' ? 'running' : 'danger'}\n />\n </SettingRow>\n\n <SettingRow\n label=\"Mutation hold\"\n description=\"Every action that changes something needs the mutation token. It is held in memory only, never stored, and clears when this tab closes.\"\n >\n <StatusBadge\n status={hold.hasHold ? formatHoldExpiry(hold.heldUntil) : 'locked'}\n tone={hold.hasHold ? 'success' : 'neutral'}\n />\n <Button\n variant=\"subtle\"\n size=\"sm\"\n icon={<IconLock />}\n onClick={() => {\n clearMutationToken();\n toast.show('Mutation hold cleared.');\n }}\n disabled={!hold.hasHold}\n >\n Lock now\n </Button>\n </SettingRow>\n\n <SettingRow\n label=\"Disconnect\"\n description=\"Ends the read session in this browser and clears the mutation hold. Chats on the server are untouched.\"\n >\n <Button variant=\"danger\" size=\"sm\" onClick={() => setConfirmOpen(true)}>\n Disconnect\n </Button>\n </SettingRow>\n\n <div className={styles.row}>\n <p className={styles.note}>\n <span className={styles.noteIcon}>\n <IconInfo size={14} />\n </span>\n <span>\n <strong>Where the tokens come from.</strong> Start the console with{' '}\n <code className={styles.code}>ashlr verse</code> — it prints a read token and a mutation token in that\n terminal, and opens this page. The desktop app injects both for you. Tokens are never displayed here, and\n the hub never writes them into a page, a log line or an API response. Lost them? Stop the server and start\n it again; it mints a fresh pair.\n </span>\n </p>\n </div>\n\n <Dialog\n open={confirmOpen}\n onClose={() => setConfirmOpen(false)}\n titleId=\"verse-settings-disconnect\"\n title=\"Disconnect from this server?\"\n description=\"You will need the read token again to get back in. Running sessions keep running on the server.\"\n initialFocusRef={cancelRef}\n >\n <div className={styles.previewRow} style={{ justifyContent: 'flex-end' }}>\n <Button ref={cancelRef} variant=\"subtle\" onClick={() => setConfirmOpen(false)}>\n Cancel\n </Button>\n <Button variant=\"danger\" onClick={() => void disconnect()}>\n Disconnect\n </Button>\n </div>\n </Dialog>\n </Panel>\n );\n}\n","/**\n * routes/verse/sections/ShortcutsPanel.tsx — the keyboard reference.\n *\n * It documents the bindings the V2 shell contract fixes (⌘1-⌘5, ⌘K, ⌘N, ⌘,)\n * plus the composer's own keys. It is a REFERENCE, not the implementation:\n * the handlers live with the shell (owner C) and the composer. Keeping the\n * list here means an operator can find a binding without a manual; keeping\n * it declarative means it is one array to update when a binding changes.\n */\nimport { Panel } from './SettingRow.js';\nimport styles from './SettingsSection.module.css';\n\n/** ⌘ on Apple platforms, Ctrl everywhere else. */\nexport function isApplePlatform(): boolean {\n if (typeof navigator === 'undefined') return true;\n const source = `${navigator.platform ?? ''} ${navigator.userAgent ?? ''}`;\n return /mac|iphone|ipad|ipod/i.test(source);\n}\n\ninterface Shortcut {\n keys: string[];\n action: string;\n}\n\nexport function shortcutGroups(mod: string): Array<{ title: string; items: Shortcut[] }> {\n return [\n {\n title: 'Navigation',\n items: [\n { keys: [mod, '1'], action: 'Chat' },\n { keys: [mod, '2'], action: 'Autonomy' },\n { keys: [mod, '3'], action: 'Approvals' },\n { keys: [mod, '4'], action: 'Usage' },\n { keys: [mod, '5'], action: 'Settings' },\n { keys: [mod, 'K'], action: 'Quick switcher' },\n { keys: [mod, ','], action: 'Settings' },\n ],\n },\n {\n title: 'Chat',\n items: [\n { keys: [mod, 'N'], action: 'New chat' },\n { keys: ['Enter'], action: 'Send message' },\n { keys: ['Shift', 'Enter'], action: 'New line' },\n { keys: ['Esc'], action: 'Stop dictation / close overlay' },\n ],\n },\n ];\n}\n\nexport function ShortcutsPanel() {\n const mod = isApplePlatform() ? '⌘' : 'Ctrl';\n return (\n <Panel title=\"Keyboard\">\n <div className={styles.shortcuts}>\n {shortcutGroups(mod).flatMap((group) =>\n group.items.map((item) => (\n <div key={`${group.title}-${item.action}-${item.keys.join('+')}`} className={styles.shortcut}>\n <span>{item.action}</span>\n <span className={styles.keys}>\n {item.keys.map((key) => (\n <kbd key={key} className={styles.key}>\n {key}\n </kbd>\n ))}\n </span>\n </div>\n )),\n )}\n </div>\n </Panel>\n );\n}\n","/**\n * routes/verse/sections/SettingsSection.tsx — the Settings rail item\n * (VERSE-CONTRACT-V2, owner A). Named export, NO props: the shell\n * lazy-mounts it and it reads everything it needs from the stores.\n *\n * Four panels in one 720px reading column: Appearance (live, no save\n * button), Connection (server, authority state, how to get tokens back),\n * Keyboard, and About. Each row is label + description on the left, control\n * on the right — the same rhythm all the way down, so the page reads as one\n * object rather than four inventions.\n */\nimport { useAppearance } from '../../../data/hooks.js';\nimport { OnboardingPanel } from '../onboarding/OnboardingPanel.js';\nimport { AboutPanel } from './AboutPanel.js';\nimport { AppearancePanel } from './AppearancePanel.js';\nimport { ConnectionPanel } from './ConnectionPanel.js';\nimport { ShortcutsPanel } from './ShortcutsPanel.js';\nimport styles from './SettingsSection.module.css';\n\nexport function SettingsSection() {\n const { appearance, set, reset } = useAppearance();\n\n return (\n <div className={styles.section}>\n <header className={styles.strip} data-app-region=\"drag\">\n <h2 className={styles.stripTitle}>Settings</h2>\n </header>\n <div className={styles.scroll}>\n <div className={styles.column}>\n <AppearancePanel appearance={appearance} onChange={set} onReset={reset} />\n <ConnectionPanel />\n <ShortcutsPanel />\n <OnboardingPanel />\n <AboutPanel />\n </div>\n </div>\n </div>\n );\n}\n"],"names":["Input","label","hint","error","size","mono","prefix","className","id","rest","generatedId","useId","inputId","hintId","errorId","describedBy","jsxs","styles","jsx","Segmented","options","value","onChange","block","aria","groupRef","useRef","move","delta","enabled","o","current","next","option","selected","e","Slider","min","max","valueLabel","valueText","trackImage","sliderId","span","percent","Switch","checked","disabled","control","Panel","title","action","children","SettingRow","description","htmlFor","labelId","stacked","text","Fragment","describe","completedAt","dismissedAt","OnboardingPanel","open","useOnboarding","Button","replayOnboarding","APP_VERSION","version","APP_NAME","AboutPanel","Tag","IconExternalLink","HEX_RE","FN_RE","clamp","unitValue","raw","scale","hslToRgb","h","s","l","hue","c","x","m","rgb","splitTopLevel","parts","depth","ch","p","colorWithPercent","lead","parseColorMix","body","args","first","second","c1","parseColor","c2","p1","p2","total","w1","w2","alpha","channel","k","input","hex","expand","fn","name","sat","light","flatten","color","backdrop","a","relativeLuminance","v","contrastRatio","foreground","background","bgRaw","fgRaw","base","bg","fg","l1","l2","hi","lo","accentHex","lightnessOffset","n","LIGHT_SURFACE","DARK_SURFACE","DARK_L_SHIFT","LINK_STEP","THEME_OPTIONS","IconMonitor","IconSun","IconMoon","DENSITY_OPTIONS","FONT_OPTIONS","RADIUS_OPTIONS","hueTrack","accentReadability","lightLink","darkLink","lightRatio","darkRatio","failing","AppearancePanel","appearance","onReset","accentLabelId","hueId","satId","lightId","motionId","preset","matchingAccentPreset","readability","isDefaultAppearance","theme","ACCENT_PRESETS","IconCheck","ACCENT_LIGHTNESS_RANGE","IconAlert","density","displayFont","radius","reduceMotion","StatusBadge","Meter","formatHoldExpiry","heldUntil","minutes","ConnectionPanel","phase","useAuthPhase","hold","useMutationHold","toast","useToast","confirmOpen","setConfirmOpen","useState","cancelRef","origin","copyOrigin","disconnect","clearReadSession","IconCopy","IconLock","clearMutationToken","IconInfo","Dialog","isApplePlatform","source","shortcutGroups","mod","ShortcutsPanel","group","item","key","SettingsSection","set","reset","useAppearance"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{j as s}from"./index-BkUlX2Se.js";const n="_grid_x7p2y_1",a="_card_x7p2y_10",c="_title_x7p2y_19",i="_stat_x7p2y_25",o="_caption_x7p2y_31",r="_line_x7p2y_37",d="_row_x7p2y_42",_="_cell_x7p2y_51",e={grid:n,card:a,title:c,stat:i,caption:o,line:r,row:d,cell:_};function y({width:t="100%"}){return s.jsx("div",{className:`skeleton ${e.line}`,style:{width:t}})}function x(){return s.jsxs("div",{className:e.card,children:[s.jsx("div",{className:`skeleton ${e.title}`}),s.jsx("div",{className:`skeleton ${e.stat}`}),s.jsx("div",{className:`skeleton ${e.caption}`})]})}function j(){return s.jsxs("div",{className:e.row,children:[s.jsx("div",{className:`skeleton ${e.cell}`,style:{width:"18%"}}),s.jsx("div",{className:`skeleton ${e.cell}`,style:{width:"38%"}}),s.jsx("div",{className:`skeleton ${e.cell}`,style:{width:"14%"}}),s.jsx("div",{className:`skeleton ${e.cell}`,style:{width:"10%"}})]})}function k({count:t=4}){return s.jsx("div",{className:e.grid,children:Array.from({length:t},(m,l)=>s.jsx(x,{},l))})}export{y as S,k as a,j as b};
2
- //# sourceMappingURL=Skeleton-4qq4HuJO.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Skeleton-4qq4HuJO.js","sources":["../../../../../../src/web-ui/components/primitives/Skeleton.tsx"],"sourcesContent":["/**\n * components/primitives/Skeleton.tsx — loading placeholders. Used ONLY for\n * `status === 'loading'` (no data at all yet). A resource that already has\n * data and is merely refreshing should show <RefreshIndicator/> instead —\n * never re-blank a populated view (see DESIGN.md \"no blank screens\").\n */\nimport styles from './Skeleton.module.css';\n\nexport function SkeletonLine({ width = '100%' }: { width?: string }) {\n return <div className={`skeleton ${styles.line}`} style={{ width }} />;\n}\n\nexport function SkeletonCard() {\n return (\n <div className={styles.card}>\n <div className={`skeleton ${styles.title}`} />\n <div className={`skeleton ${styles.stat}`} />\n <div className={`skeleton ${styles.caption}`} />\n </div>\n );\n}\n\nexport function SkeletonRow() {\n return (\n <div className={styles.row}>\n <div className={`skeleton ${styles.cell}`} style={{ width: '18%' }} />\n <div className={`skeleton ${styles.cell}`} style={{ width: '38%' }} />\n <div className={`skeleton ${styles.cell}`} style={{ width: '14%' }} />\n <div className={`skeleton ${styles.cell}`} style={{ width: '10%' }} />\n </div>\n );\n}\n\nexport function SkeletonCardGrid({ count = 4 }: { count?: number }) {\n return (\n <div className={styles.grid}>\n {Array.from({ length: count }, (_, i) => (\n <SkeletonCard key={i} />\n ))}\n </div>\n );\n}\n"],"names":["SkeletonLine","width","jsx","styles","SkeletonCard","jsxs","SkeletonRow","SkeletonCardGrid","count","_","i"],"mappings":"uQAQO,SAASA,EAAa,CAAE,MAAAC,EAAQ,QAA8B,CACnE,OAAOC,MAAC,MAAA,CAAI,UAAW,YAAYC,EAAO,IAAI,GAAI,MAAO,CAAE,MAAAF,CAAA,CAAM,CAAG,CACtE,CAEO,SAASG,GAAe,CAC7B,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAWF,EAAO,KACrB,SAAA,CAAAD,MAAC,MAAA,CAAI,UAAW,YAAYC,EAAO,KAAK,GAAI,QAC3C,MAAA,CAAI,UAAW,YAAYA,EAAO,IAAI,GAAI,QAC1C,MAAA,CAAI,UAAW,YAAYA,EAAO,OAAO,EAAA,CAAI,CAAA,EAChD,CAEJ,CAEO,SAASG,GAAc,CAC5B,OACED,EAAAA,KAAC,MAAA,CAAI,UAAWF,EAAO,IACrB,SAAA,CAAAD,EAAAA,IAAC,MAAA,CAAI,UAAW,YAAYC,EAAO,IAAI,GAAI,MAAO,CAAE,MAAO,KAAA,CAAM,CAAG,EACpED,EAAAA,IAAC,MAAA,CAAI,UAAW,YAAYC,EAAO,IAAI,GAAI,MAAO,CAAE,MAAO,KAAA,CAAM,CAAG,EACpED,EAAAA,IAAC,MAAA,CAAI,UAAW,YAAYC,EAAO,IAAI,GAAI,MAAO,CAAE,MAAO,KAAA,CAAM,CAAG,EACpED,EAAAA,IAAC,MAAA,CAAI,UAAW,YAAYC,EAAO,IAAI,GAAI,MAAO,CAAE,MAAO,KAAA,CAAM,CAAG,CAAA,EACtE,CAEJ,CAEO,SAASI,EAAiB,CAAE,MAAAC,EAAQ,GAAyB,CAClE,aACG,MAAA,CAAI,UAAWL,EAAO,KACpB,SAAA,MAAM,KAAK,CAAE,OAAQK,CAAA,EAAS,CAACC,EAAGC,UAChCN,EAAA,CAAA,EAAkBM,CAAG,CACvB,EACH,CAEJ"}
@@ -1 +0,0 @@
1
- ._grid_x7p2y_1{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--space-4)}._card_x7p2y_10{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-4) 0}._title_x7p2y_19{height:var(--text-xs-line);width:60%;border-radius:var(--radius-xs)}._stat_x7p2y_25{height:var(--text-2xl-line);width:40%;border-radius:var(--radius-xs)}._caption_x7p2y_31{height:var(--text-2xs-line);width:80%;border-radius:var(--radius-xs)}._line_x7p2y_37{height:var(--text-base-line);border-radius:var(--radius-xs)}._row_x7p2y_42{display:flex;align-items:center;gap:var(--space-4);min-height:var(--density-row);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border-subtle)}._cell_x7p2y_51{height:var(--text-sm-line);border-radius:var(--radius-xs)}
@@ -1,2 +0,0 @@
1
- import{j as r}from"./index-BkUlX2Se.js";const u="_badge_ytqgz_4",c="_dot_ytqgz_17",o="_neutral_ytqgz_24",g="_info_ytqgz_32",d="_running_ytqgz_40",i="_pulse_ytqgz_1",_="_success_ytqgz_49",l="_warning_ytqgz_57",p="_danger_ytqgz_65",w="_unknown_ytqgz_73",y="_phaseDot_ytqgz_82",e={badge:u,dot:c,neutral:o,info:g,running:d,pulse:i,success:_,warning:l,danger:p,unknown:w,phaseDot:y},q={pending:"neutral",queued:"neutral",waiting:"neutral",running:"running",active:"running",in_progress:"running",building:"running",applying:"running",done:"success",success:"success",succeeded:"success",applied:"success",merged:"success",ready:"success",approved:"success",ship:"success",review:"warning",degraded:"warning",paused:"warning",noise:"neutral",failed:"danger",error:"danger",errored:"danger",rejected:"danger",harmful:"danger",cancelled:"neutral",canceled:"neutral",unknown:"unknown"};function h(n){return n?q[n.toLowerCase()]??"neutral":"unknown"}function f({status:n,tone:s,children:a}){const t=s??h(n);return r.jsxs("span",{className:`${e.badge} ${e[t]}`,children:[r.jsx("span",{className:e.dot,"aria-hidden":"true"}),a??n]})}function m({index:n}){const s=(n%6+6)%6;return r.jsx("span",{className:e.phaseDot,style:{background:`var(--phase-${s+1})`},"aria-hidden":"true"})}export{m as P,f as S,h as s};
2
- //# sourceMappingURL=StatusBadge-BbEdqEGn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StatusBadge-BbEdqEGn.js","sources":["../../../../../../src/web-ui/components/primitives/StatusBadge.tsx"],"sourcesContent":["/**\n * components/primitives/StatusBadge.tsx — the ONE status-color mapping for\n * the whole app. See DESIGN.md \"Status-color semantics\" for the reasoning;\n * the short version: `running` is amber (motion, unresolved — matches\n * Vercel/GitHub Actions \"in progress\"), `done` is green (resolved,\n * successful). Neither reuses the accent color, so \"this is clickable\"\n * (accent) never visually collides with \"this succeeded\" (green).\n *\n * Every view should route run/swarm/proposal/daemon status strings through\n * `statusToTone()` rather than switching on raw strings itself, so adding a\n * new backend status value only ever needs one edit, here.\n */\nimport type { ReactNode } from 'react';\nimport styles from './StatusBadge.module.css';\n\nexport type Tone = 'neutral' | 'info' | 'running' | 'success' | 'warning' | 'danger' | 'unknown';\n\nconst STATUS_TONE: Record<string, Tone> = {\n // Run / swarm / proposal lifecycle.\n pending: 'neutral',\n queued: 'neutral',\n waiting: 'neutral',\n running: 'running',\n active: 'running',\n in_progress: 'running',\n building: 'running',\n applying: 'running',\n done: 'success',\n success: 'success',\n succeeded: 'success',\n applied: 'success',\n merged: 'success',\n ready: 'success',\n approved: 'success',\n ship: 'success',\n review: 'warning',\n degraded: 'warning',\n paused: 'warning',\n noise: 'neutral',\n failed: 'danger',\n error: 'danger',\n errored: 'danger',\n rejected: 'danger',\n harmful: 'danger',\n cancelled: 'neutral',\n canceled: 'neutral',\n unknown: 'unknown',\n};\n\nexport function statusToTone(status: string | undefined | null): Tone {\n if (!status) return 'unknown';\n return STATUS_TONE[status.toLowerCase()] ?? 'neutral';\n}\n\nexport interface StatusBadgeProps {\n status: string;\n /** Override the derived tone (rare — prefer letting statusToTone decide). */\n tone?: Tone;\n children?: ReactNode;\n}\n\nexport function StatusBadge({ status, tone, children }: StatusBadgeProps): ReactNode {\n const resolved = tone ?? statusToTone(status);\n return (\n <span className={`${styles.badge} ${styles[resolved]}`}>\n <span className={styles.dot} aria-hidden=\"true\" />\n {children ?? status}\n </span>\n );\n}\n\n/** A named DAG/milestone phase — categorical color, unrelated to health. */\nexport function PhaseDot({ index }: { index: number }): ReactNode {\n const n = ((index % 6) + 6) % 6; // wrap safely for any index, including negatives\n return <span className={styles.phaseDot} style={{ background: `var(--phase-${n + 1})` }} aria-hidden=\"true\" />;\n}\n"],"names":["STATUS_TONE","statusToTone","status","StatusBadge","tone","children","resolved","jsxs","styles","jsx","PhaseDot","index","n"],"mappings":"0XAiBMA,EAAoC,CAExC,QAAS,UACT,OAAQ,UACR,QAAS,UACT,QAAS,UACT,OAAQ,UACR,YAAa,UACb,SAAU,UACV,SAAU,UACV,KAAM,UACN,QAAS,UACT,UAAW,UACX,QAAS,UACT,OAAQ,UACR,MAAO,UACP,SAAU,UACV,KAAM,UACN,OAAQ,UACR,SAAU,UACV,OAAQ,UACR,MAAO,UACP,OAAQ,SACR,MAAO,SACP,QAAS,SACT,SAAU,SACV,QAAS,SACT,UAAW,UACX,SAAU,UACV,QAAS,SACX,EAEO,SAASC,EAAaC,EAAyC,CACpE,OAAKA,EACEF,EAAYE,EAAO,YAAA,CAAa,GAAK,UADxB,SAEtB,CASO,SAASC,EAAY,CAAE,OAAAD,EAAQ,KAAAE,EAAM,SAAAC,GAAyC,CACnF,MAAMC,EAAWF,GAAQH,EAAaC,CAAM,EAC5C,OACEK,EAAAA,KAAC,OAAA,CAAK,UAAW,GAAGC,EAAO,KAAK,IAAIA,EAAOF,CAAQ,CAAC,GAClD,SAAA,CAAAG,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAO,IAAK,cAAY,OAAO,EAC/CH,GAAYH,CAAA,EACf,CAEJ,CAGO,SAASQ,EAAS,CAAE,MAAAC,GAAuC,CAChE,MAAMC,GAAMD,EAAQ,EAAK,GAAK,EAC9B,OAAOF,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAO,SAAU,MAAO,CAAE,WAAY,eAAeI,EAAI,CAAC,GAAA,EAAO,cAAY,OAAO,CAC9G"}
@@ -1 +0,0 @@
1
- ._badge_ytqgz_4{display:inline-flex;align-items:center;gap:var(--space-1);height:var(--density-row-sm);padding:0 var(--space-2);border-radius:var(--radius-xs);font-size:var(--text-xs-size);font-weight:var(--font-weight-medium);line-height:1;white-space:nowrap}._dot_ytqgz_17{width:6px;height:6px;border-radius:var(--radius-full);flex-shrink:0}._neutral_ytqgz_24{background:var(--status-neutral-bg);color:var(--status-neutral-fg)}._neutral_ytqgz_24 ._dot_ytqgz_17{background:var(--status-neutral-solid)}._info_ytqgz_32{background:var(--status-info-bg);color:var(--status-info-fg)}._info_ytqgz_32 ._dot_ytqgz_17{background:var(--status-info-solid)}._running_ytqgz_40{background:var(--status-running-bg);color:var(--status-running-fg)}._running_ytqgz_40 ._dot_ytqgz_17{background:var(--status-running-solid);animation:_pulse_ytqgz_1 1.6s ease-in-out infinite}._success_ytqgz_49{background:var(--status-success-bg);color:var(--status-success-fg)}._success_ytqgz_49 ._dot_ytqgz_17{background:var(--status-success-solid)}._warning_ytqgz_57{background:var(--status-warning-bg);color:var(--status-warning-fg)}._warning_ytqgz_57 ._dot_ytqgz_17{background:var(--status-warning-solid)}._danger_ytqgz_65{background:var(--status-danger-bg);color:var(--status-danger-fg)}._danger_ytqgz_65 ._dot_ytqgz_17{background:var(--status-danger-solid)}._unknown_ytqgz_73{background:var(--status-unknown-bg);color:var(--status-unknown-fg);font-style:italic}._unknown_ytqgz_73 ._dot_ytqgz_17{background:var(--status-unknown-solid)}._phaseDot_ytqgz_82{display:inline-block;width:8px;height:8px;border-radius:var(--radius-full)}@keyframes _pulse_ytqgz_1{0%,to{opacity:1}50%{opacity:.4}}@media(prefers-reduced-motion:reduce){:root:not([data-motion=full]) ._running_ytqgz_40 ._dot_ytqgz_17{animation:none}}:root[data-motion=reduce] ._running_ytqgz_40 ._dot_ytqgz_17{animation:none}